           (.append "line")
           (.attr "class" "link")
           (.style "stroke" "#C9CBCB")
-          (.style "stroke-width" 3)
-          (.each
-            (fn [link]
-              (this-as elem (add-tap-listener elem #(.onNext link-tap-subject link))))))
+          (.style "stroke-width" 3))
       (-> link-selection
           maybe-transition
           (.attr "x1" #(-> % :source positions v/x))

(def max-radius 32)
(def label-font "Verdana")
(def label-font-size 24)

(def label-y 42)
(def label-y-transform (str "translate(0," label-y ")"))


;; State management

(defn initial-state [svg width height animation-subject]
  {:svg svg
   :view-size (v/create width height)
   :camera-pos (v/create 0 0)
   :nodes []
   :edges []
   :projection :fisheye ; Can be :fisheye or :zoom-out
   ; Subject is part of state because it is needed to render the graph.
   :animation-subject animation-subject})

(defn swap-state! [current-state f & args]
  (apply swap! current-state f args)
