Whether tabs can be drag-reordered at all. The escape hatch for hosts where even long-press dragging is wrong (a kiosk surface, a read-only review screen) — reorder simply isn't offered and every touch gesture belongs to scrolling.
ReadonlyDragPer-pointer-type drag threshold, resolving the touch conflict between REORDER and SCROLL: an overflowing tab list scrolls by horizontal swipe, and a swipe starts on a tab — with an immediate drag threshold, CDK claims that touch and the list becomes unscrollable on phones. A hold-to-drag delay is the platform idiom for exactly this (iOS home screen, mobile browser tabs): a moving finger within the delay window is a SCROLL and CDK lets it through natively; a still finger past it is a DRAG. Mouse stays immediate — pointer users scroll with the wheel or scrollbar, so there is no gesture to disambiguate and a delay would just feel laggy.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
Keyboard arrow/Home/End/Enter from mjTabList — map the position back onto our id.
The close button sits inside the tab, so its click would otherwise also select the tab.
Delete/Backspace on a focused tab — the APG close gesture for a closeable tab.
CDK drop — emit the reorder intent; the host applies it to the store (the strip stays dumb).
The tab's accessible name. The dirty dot and the rejected colour/icon are the only signals for those states, and neither survives being read aloud — so they are spelled out here instead.
<mj-workspace-tab-strip>— browser-style draft tabs, presentation overMJWorkspaceTabStore.Dumb by design: it renders the tabs it is handed and emits intent. The store holds the state machine; the host owns what a tab's payload means. That split keeps it app-agnostic.
Browser-tab behavior lives HERE so every consumer inherits it:
--mj-tab-max, then ellipsize; the inline unsaved-dot pushes the label;mjTiptooltip when a tab is truncated (delayed, non-interactive);Appearance and keyboard behaviour are NOT owned here. The look comes from the global
.mj-tabs*chrome intabs.scss, and the ARIA tabs keyboard contract frommjTabList— both shared withmj-tabstrip, so the two strips cannot drift apart visually or behaviourally even though they keep different state models.