   "
   (dc/mkdn-pprint-source WidgetWithHook)
   "
+  ## ClojureScript and React – HTML differences
+
+  Here are some common things you'll want to know how to do that are different when rendering with Om/ClojureScript:
+
+  - Inline styles are specified with real maps `(dom/p #js { :style {:backgroundColor \"rgb(120,33,41)\"} } ...)`
+  - CSS class names are specified with `:className` instead of `:class`.
+  - Any time there are adjacent elements of the same type in the DOM, they should each have a unique `:key`
+  attribute. This is typically generated by a function you supply to the Om factory function, but you can
+  also do it manually.
+
   ## Element factory
 
   In order to render components on the screen you need an element factory.

(defcard-doc
  "

  The things to note for this example are:

  - We override the React lifecycle method `shouldComponentUpdate` to do the actual D3 update, and then return false.
  This ensures React and D3 don't fight over the DOM for the component.
  - We also override `componentDidMount` to do an initial render in D3.
  - Note: As of Om 1.0.0 Alpha 30 the method of obtaining the properties differs a bit, as shown. This may have
  changed since this writing.

  ## Important Notes and Further Reading

  - Remember to use `#js` (shown as `clj->js` in many examples) to transform attribute maps for passing to DOM elements
  - Use *cljs* maps as input to your own Elements
  - Extract properties with `om/props`. This is the same for stateful (with queries) or stateless components.
  - Add parent-generated things (like callbacks) using `om/computed`.

  TODO: Add links to various docs
  ")

        (.attr "height" (fn [d] (.-size d))))
    (-> selection
        .exit
        .transition
        (.style "opacity" "0")
        .remove)
    false))

(defui D3Thing
