                                         (dom/input #js {:type     "radio" :name "exercice-answer"
                                                         :checked  (= ex-answer value)
                                                         :value    value
-                                                        :onChange #(um/set-string! c :ui/ex-answer :event %)})
+                                                        :onChange #(um/set-string! c ::ex-answer :event %)})
                                         (dom/span #js {:className "value"} label))))))
                               (dom/div #js {:className "answer-buttons"}
                                 (dom/div #js {:className "check-answer-wrapper"}
                                   (dom/input #js {:className "simple-button green" :type "button" :value "Check Answer"
-                                                  :onClick #(check-answer c)}))
+                                                  :onClick   #(check-answer c)}))
                                 (dom/input #js {:className "simple-button green" :id "next-question-button" :name "correctnextbutton" :style #js {:display "none"} :type "button" :value "Correct! Next Question..."})
                                 (dom/div #js {:id "positive-reinforcement" :style #js {:display "none"}}
                                   (dom/img #js {:src "/images/face-smiley.png"})))))))
                       (dom/div #js {:style #js {:clear "both"}}))))))))))))
-
-(s/def ::value-descriptor (s/or :sound ::audio/sound
-                                :range (s/and (s/tuple ::audio/sound #{".."} ::audio/sound)
-                                              (fn [[[_ a] _ [_ b] :as t]]
-                                                (if (< (audio/note->semitone a)
-                                                       (audio/note->semitone b))
-                                                  t
-                                                  false)))
-                                :list (s/coll-of ::audio/sound [])))
 
 (defn int-in [min max] (+ min (rand-int (- max min))))
 

  (om/transact! component `[(ui/set-props ~props)]))

(defn check-answer [c]
  (let [{:keys [ui/ex-answer ::correct-answer ui/correct-count]} (om/props c)]
    (if (= ex-answer correct-answer)
      (do
        (merge-props! c
          (merge {:ui/correct-count (inc correct-count)
                  :ui/ex-answer nil})))
      (um/set-value! c :ui/correct-count 0))))

(defn render-ex [c]
  (let [{:keys [::description ::options :ui/ex-answer
                :ui/ex-total-questions :ui/correct-count] :as props} (om/props c)]
    (assert (s/valid? ::ex-props props))
    (dom/div #js {:className "lesson-content"}
      (dom/div #js {:className "single-exercise visited-no-recolor"
                    :style     #js {:overflow "hidden" :visibility "visible"}}

(s/def ::progress-total number?)
(s/def ::react-component object?)

(s/def ::description string?)
(s/def ::option (s/cat :value string? :label string?))
(s/def ::options (s/+ (s/spec ::option)))

(s/def ::ex-props (s/keys :req [::description ::options]))
(s/def ::ex-answer (s/nilable string?))
(s/def ::ex-total-questions pos-int?)
(s/def ::streak-count nat-int?)

(s/def ::value-descriptor
  (s/or :sound ::audio/sound
        :range (s/and (s/tuple ::audio/sound #{".."} ::audio/sound)
                      (fn [[[_ a] _ [_ b] :as t]]
                        (if (< (audio/note->semitone a)
                               (audio/note->semitone b))
                          t
                          false)))
        :list (s/coll-of ::audio/sound [])))

(s/def ::pitch ::value-descriptor)
(s/def ::variation pos-int?)

(om/defui ^:once ProgressBar
  Object
  (render [this]
