                                                       (:class props)
                                                       (when show-validations? "show-validations")]))
                :no-validate true
+               ;; If a field gets focus, switch out of the :success? state (and back to normal).
+               :on-focus #(om/set-state! owner :success? false)
                :on-submit (fn [e]
                             (.preventDefault e)
                             (let [form (.-target e)

                              (merge
                                {:constructor constructor
                                 :show-validations? show-validations?}
                                props)
                              {:init-state {:focus focus}}))]
              (children-f control notice loading? success?))]))))))

        ;; Update our state based on the DOM immediately (and later on-change).
        (update-state (om/get-node owner "control")))
      om/IRenderState
      (render-state [_ {:keys [value validation-message] :as state}]
        (html
          [:div.validated-form-control
           [(:constructor props)
            (merge (dissoc props :constructor :show-validations?)
                   {:value value
                    :ref "control"
                    :on-change #(update-state (.-target %))})]
           (om/build transitionable-height
                     {:class "validation-message-container"
