This component instantiates views and storage objects as well as defines
behaviors that will be passed down to the views. This helps keep the views
isolated and easier to test.
This store keeps track of the deck view state, including the panels and which
one is selected. The view listens for change events on the store, which are
triggered whenever the state changes. If it's a small change, the state
will have `isUpdatable` set to true so the view can skip rerendering the whole
Instances of SyncedTabsDeckView render DOM nodes from a given state.
No state is kept internaly and the DOM will completely
rerender unless the state flags `isUpdatable`, which helps
make small changes without the overhead of a full rerender.
Instances of this store encapsulate all of the state associated with a synced tabs list view.
The state includes the clients, their tabs, the row that is currently selected,
and the filtered query.
The purpose of this component is to compose the view, state, and actions.
It defines high level actions that act on the state and passes them to the
view for it to trigger during user interaction. It also subscribes the view
to state changes so it can rerender.
Given a state, this object will render the corresponding DOM.
It maintains no state of it's own. It listens for DOM events
and triggers actions that may cause the state to change and
ultimately the view to rerender.