                        :data data}
                       opts)))
 
+(defn call
+  ([ref args] (call ref args {}))
+  ([ref args opts] (merge {:type :call
+                           :ref ref
+                           :args args}
+                      opts)))
+
 (defn ref-id [id]
   {:type :ref/id
    :id id})
 
+(defn ref-js [js]
+  {:type :ref/js
+   :js js})
+
 ;;*********************************************************
 ;; Aurora state (mutation!)
 ;;*********************************************************

      [:p {:className "desc"}
       (ref->name (:ref step))
       (each [input (:args step)]
             (item-ui input))]))

(defmethod item-ui :ref/id [step]
  (dom [:span {:className "ref"}

  (swap! aurora-state update-in [:cache :inputs] dissoc id))

(defn update-index! [thing path & args]
  (if (or (not thing)
          (and (map? thing)
               (not (:id thing))))
    (throw (js/Error. "Trying to update index with nil"))
    (apply swap! aurora-state update-in
           (concat [:index (if (map? thing)
