         function, consisting of a trivial application
         of "[:code "rswap!"]" and some optional logging. This is the
         only place where application state actually changes – the rest
-        is pure functions all the way."]
+        is pure functions."]
 
         [:p "The actual event handling is done
         in "[:code "event-handler"]", which takes state and event as

         [:li "allows recursive applications of "[:code "rswap!"]" on the same
         atom."]]

        [:p "Here’s an example that uses "[:code "rswap!"]" to edit
        the data introduced in the section about track above:"]

        [demo-component {:comp edit-fields
                         :src (s/src-of [:event-handler

       [:section.demo-text
        [:h2 "Tapping into the rendering loop"]

        [:p "The "[:code "next-tick"]" function now has a more
        predictable timing. The function passed
        to "[:code "next-tick"]" is now invoked immediately before the
        next rendering (which is in turn triggered
        using "[:code "requestAnimationFrame"]")."]

        [:p [:code "after-update"]" works just
        like "[:code "next-tick"]", except that the function given is
