         current-time (reaction (:current-time @player))
         total-time (reaction (:duration @player))
         {:keys [title author author-url author-img-url]} @player]
+    (pipe
+     (activity-chan mouse-moves-ch 3000 (chan 1 (map m/->ShowHud)))
+     ui-ch)
     (fn []
       [:div.asciinema-player-wrapper {:tab-index -1
                                       :on-key-press on-key-press
                                       :on-key-down on-key-down
-                                      :on-mouse-move on-mouse-move
                                       :class-name @wrapper-class-name}
-       [:div.asciinema-player {:class-name @player-class-name}
+       [:div.asciinema-player {:class-name @player-class-name
+                               :on-mouse-move on-mouse-move
+                               :on-mouse-enter on-mouse-enter
+                               :on-mouse-leave on-mouse-leave}
         [terminal width height font-size screen cursor-on]
         [recorded-control-bar playing current-time total-time ui-ch]
         (when (or title author) [title-bar title author author-url author-img-url])

          (swap! channels set/union (m/get-channels message @player-atom))))
      (recur))))

(defn player* [player ui-ch mouse-moves-ch]
  (let [on-mouse-move (send! mouse-moves-ch true)
        on-key-press (send-value! ui-ch handle-key-press)
        on-key-down (send-value! ui-ch handle-key-down)
        loading (reaction (:loading @player))

        (when @loading [loading-overlay])]])))

(defn player-component [player]
  (let [ui-ch (chan)]
    (fn []
      (reagent/create-class
       {:display-name "asciinema-player"
        :reagent-render #(player* player ui-ch)
        :component-did-mount (fn [this]
                               (let [source-ch (source/init (:source @player))]
                                 (start-message-loop! player #{ui-ch source-ch})))
        :component-will-unmount (fn [this]
                                  (source/close (:source @player)))}))))
