       (.push arr o))
     arr))
 
+(defn surrogate [object header]
+  (js-obj
+    "__surrogate" true
+    "target" object
+    "header" header))
+
 (defn spacer [& _] " ")
 
 (defn nil-template [_]


(defn inlined-value-template [value]
  (or (atomic-template value)
      (generic-template value)))

(defn header-template [value]

(defn js-value? [value]
  (not (cljs-value? value)))

(defn surrogate? [value]
  (exists? (aget value "__surrogate")))

(defn template [tag style & more]
  (let [arr #js [tag (if (empty? style) #js {} #js {"style" style})]]
    (doseq [o more]
