     (aget o k)))
 
 (defn cached-prop-name [k]
-  (if (or (string? k)
-          (not (implements? INamed k)))
+  (if-not (implements? INamed k)
     k
     (if-let [k' (obj-get prop-name-cache (name k))]
       k'

            (util/dash-to-camel k)))))

(defn convert-prop-value [x]
  (cond (string? x) x
        (number? x) x
        (map? x) (reduce-kv (fn [o k v]
                              (doto o
                                (aset (cached-prop-name k)
                                      (to-js-val v))))
                            #js{} x)
        :else (to-js-val x)))

(defn set-id-class [props id-class]
  (when-some [id (.' id-class :id)]
    (let [pid (.' props :id)]
      (.! props :id (if (some? pid) pid id))))
  (when-some [class (.' id-class :className)]
    (let [old (.' props :className)]
      (.! props :className (if (some? old)
                             (str class " " old)
                             class)))))

(defn convert-props [props id-class]
  (if (and (empty? props) (not (.' id-class :hasIdClass)))
    nil
    (let [objprops
          (reduce-kv (fn [o k v]
                       (doto o
                         (aset (cached-prop-name k)
                               (convert-prop-value v))))
                     #js{} props)]
      (when (.' id-class :hasIdClass)
        (set-id-class objprops id-class))
      objprops)))


;;; Specialization for input components

                 (string/replace class #"\." " "))]
    (assert tag (str "Unknown tag: '" hiccup-tag "'"))
    #js{:name tag
        :id id
        :className class'}))

