       (.filter #(< % 0.5))
       (.subscribe #(js/alert "TODO: zoom out"))))
 
+;; Temporary animation test function
+
+(defn zoom-in-out-on-interval! [current-state]
+  ((fn f [projection]
+     (.setTimeout js/window
+                  (fn []
+                    (set-projection! current-state projection)
+                    (f (if (= projection :fisheye) :zoom-out :fisheye)))
+                  2000)) :zoom-out))
+
 ;; Exported function to do magic
 
 (defn ^:export inhabit [selector]

                          :project-radius (constantly (* zoom-out-scale max-radius))
                          :project-opacity (constantly 1)})

(defn sync-graph! [state]
  (let [{:keys [svg nodes links camera-pos view-size]} state
        {:keys [project-displacement
                project-radius
                project-opacity]} fisheye-projectors
        positions (mapv (fn [node]
                          (view-position state
                                         (:pos node)

   :view-size (math-vec width height)
   :camera-pos (math-vec 0 0)
   :nodes []
   :edges []
   :projection :fisheye}) ; Can be :fisheye or :zoom-out

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