                                        :min      0
                                        :max      (dec rows)
                                        :style    #js {:width "30px"}
-                                       :onInput  (partial modify :end-row)}))
+                                       :onInput  (partial modify-int :end-row)}))
             (dom/label nil
                        "End Column: "
                        (dom/input #js {:type     "number"

;; -----------------------------------------------------------------------------
;; Parsing

(defmulti coerce-param (fn [p v] p))

(run! #(derive % ::integer)
      [::rows ::columns ::cell-size ::start-row ::start-col ::end-row ::end-col])

(defmethod coerce-param :default
  [_ val]
  val)

(defmethod coerce-param ::integer
  [_ val]
  (js/parseInt val))



(defmulti read om/dispatch)

(defmethod read :default

                                       :min      0
                                       :max      (dec rows)
                                       :style    #js {:width "30px"}
                                       :onInput  (partial modify-int :start-row)}))
            (dom/label nil
                       "Start Column: "
                       (dom/input #js {:type     "number"
