# Tag cue

A Component you operate in source text. `TagCue` composes EnumCue with the Mark tag's existing canonical identity colour. A tag remains the same raised tab with a punched hole everywhere; no new material or timing. Unlike enum state tint, its colour hashes its exact NFC identity through the generated palette.

Supply exact full `#tag` words as `recentTags`; invalid entries are ignored and exact duplicates removed. If the current tag is absent it joins the permitted words, without rewriting source. Letters, numbers, combining marks, underscores and hyphens are accepted. Case and accents stay authored; NFC palette identity never normalizes written source. The widest supplied tag reserves the footprint. Focus then scroll, drag vertically, click or Space to cycle; arrows step. One completed gesture is one source Undo. Escape cancels, and unrelated source changes invalidate the captured range. Read-only and disabled never edit or tick. EnumCue owns all gestures, haptics, help and reduced motion.

`TagCue.Picker({recentTags,label,onChoose,disabled?})` is the shared Base UI Combobox, opened on creation with its real input focused. Search does not write source. Arrows/Enter select; empty results say No recent tags. A host detects an unfinished hash at its retained caret, captures that exact UTF16 range, and opens Popover directly anchored to its existing source input. Begin a document edit only when choosing: replace that range once, commit, close and restore editor focus/selection. Escape dismisses without losing the typed hash. Never infer a tag or replace another hash elsewhere in the source.

Native `MetalTagCue` composes MetalEnumCue and the same generated tag palette. `MetalTagCuePicker` composes a shared field Well and tag-faced choice keys, with search, Up/Down highlight and Return selection; the current filtered option is named. It owns no popup material: a native host may use MetalPopover (whose material port remains WIP). Source history and caret belong to the host on both platforms. The iOS wheel path is not claimed as a hardware scroll gesture; all choices remain keyboard and pointer reachable.

Native reduced words resolve immediately, including a live scope change during a drum transition; only the words identity resets, so the operable trigger retains focus. React keeps the existing opacity-only reduced change. Meaning glyphs retain their separate reduced act policy.
