           (number? data)
           (if swappable
             [:input {:type "number"
-                     :value data
+                     :default-value data
                      :on-change
                      (fn number-changed [e]
                        (emit-fn :changed path (js/Number (.. e -target -value))))}]

          (keyword? data)
          (if swappable
            [:input {:type "text"
                     :value (name data)
                     :on-change
                     (fn keyword-changed [e]
                       (emit-fn :changed path (keyword (.. e -target -value))))}]

          (string? data)
          (if swappable
            [:input {:type "text"
                     :default-value (str data)
                     :on-change
                     (fn string-changed [e]
                       (emit-fn :changed path (.. e -target -value)))}]
