@chromvoid/headless-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/a11y-contracts/index.d.ts +23 -0
  4. package/dist/a11y-contracts/index.js +1 -0
  5. package/dist/accordion/index.d.ts +78 -0
  6. package/dist/accordion/index.js +264 -0
  7. package/dist/adapters/index.d.ts +9 -0
  8. package/dist/adapters/index.js +1 -0
  9. package/dist/alert/index.d.ts +33 -0
  10. package/dist/alert/index.js +54 -0
  11. package/dist/alert-dialog/index.d.ts +69 -0
  12. package/dist/alert-dialog/index.js +94 -0
  13. package/dist/badge/index.d.ts +48 -0
  14. package/dist/badge/index.js +89 -0
  15. package/dist/breadcrumb/index.d.ts +55 -0
  16. package/dist/breadcrumb/index.js +77 -0
  17. package/dist/button/index.d.ts +46 -0
  18. package/dist/button/index.js +86 -0
  19. package/dist/callout/index.d.ts +41 -0
  20. package/dist/callout/index.js +63 -0
  21. package/dist/card/index.d.ts +54 -0
  22. package/dist/card/index.js +103 -0
  23. package/dist/carousel/index.d.ts +98 -0
  24. package/dist/carousel/index.js +243 -0
  25. package/dist/checkbox/index.d.ts +50 -0
  26. package/dist/checkbox/index.js +87 -0
  27. package/dist/combobox/index.d.ts +114 -0
  28. package/dist/combobox/index.js +431 -0
  29. package/dist/command-palette/index.d.ts +73 -0
  30. package/dist/command-palette/index.js +147 -0
  31. package/dist/context-menu/index.d.ts +111 -0
  32. package/dist/context-menu/index.js +372 -0
  33. package/dist/copy-button/index.d.ts +62 -0
  34. package/dist/copy-button/index.js +183 -0
  35. package/dist/core/index.d.ts +20 -0
  36. package/dist/core/index.js +2 -0
  37. package/dist/core/selection.d.ts +5 -0
  38. package/dist/core/selection.js +39 -0
  39. package/dist/core/value-range.d.ts +49 -0
  40. package/dist/core/value-range.js +134 -0
  41. package/dist/date-picker/index.d.ts +210 -0
  42. package/dist/date-picker/index.js +895 -0
  43. package/dist/dialog/index.d.ts +95 -0
  44. package/dist/dialog/index.js +153 -0
  45. package/dist/disclosure/index.d.ts +52 -0
  46. package/dist/disclosure/index.js +159 -0
  47. package/dist/drawer/index.d.ts +30 -0
  48. package/dist/drawer/index.js +39 -0
  49. package/dist/feed/index.d.ts +77 -0
  50. package/dist/feed/index.js +260 -0
  51. package/dist/grid/index.d.ts +103 -0
  52. package/dist/grid/index.js +415 -0
  53. package/dist/index.d.ts +51 -0
  54. package/dist/index.js +51 -0
  55. package/dist/input/index.d.ts +86 -0
  56. package/dist/input/index.js +156 -0
  57. package/dist/interactions/composite-navigation.d.ts +69 -0
  58. package/dist/interactions/composite-navigation.js +169 -0
  59. package/dist/interactions/index.d.ts +15 -0
  60. package/dist/interactions/index.js +4 -0
  61. package/dist/interactions/keyboard-intents.d.ts +16 -0
  62. package/dist/interactions/keyboard-intents.js +33 -0
  63. package/dist/interactions/overlay-focus.d.ts +40 -0
  64. package/dist/interactions/overlay-focus.js +93 -0
  65. package/dist/interactions/typeahead.d.ts +20 -0
  66. package/dist/interactions/typeahead.js +41 -0
  67. package/dist/landmarks/index.d.ts +39 -0
  68. package/dist/landmarks/index.js +58 -0
  69. package/dist/link/index.d.ts +34 -0
  70. package/dist/link/index.js +39 -0
  71. package/dist/listbox/index.d.ts +92 -0
  72. package/dist/listbox/index.js +337 -0
  73. package/dist/menu/index.d.ts +132 -0
  74. package/dist/menu/index.js +541 -0
  75. package/dist/menu-button/index.d.ts +71 -0
  76. package/dist/menu-button/index.js +121 -0
  77. package/dist/meter/index.d.ts +45 -0
  78. package/dist/meter/index.js +106 -0
  79. package/dist/number/index.d.ts +113 -0
  80. package/dist/number/index.js +252 -0
  81. package/dist/popover/index.d.ts +70 -0
  82. package/dist/popover/index.js +126 -0
  83. package/dist/progress/index.d.ts +49 -0
  84. package/dist/progress/index.js +79 -0
  85. package/dist/radio-group/index.d.ts +61 -0
  86. package/dist/radio-group/index.js +150 -0
  87. package/dist/select/index.d.ts +92 -0
  88. package/dist/select/index.js +239 -0
  89. package/dist/sidebar/index.d.ts +74 -0
  90. package/dist/sidebar/index.js +186 -0
  91. package/dist/slider/index.d.ts +61 -0
  92. package/dist/slider/index.js +150 -0
  93. package/dist/slider-multi-thumb/index.d.ts +70 -0
  94. package/dist/slider-multi-thumb/index.js +222 -0
  95. package/dist/spinbutton/index.d.ts +75 -0
  96. package/dist/spinbutton/index.js +214 -0
  97. package/dist/spinner/index.d.ts +1 -0
  98. package/dist/spinner/index.js +1 -0
  99. package/dist/spinner/spinner.d.ts +23 -0
  100. package/dist/spinner/spinner.js +25 -0
  101. package/dist/switch/index.d.ts +40 -0
  102. package/dist/switch/index.js +61 -0
  103. package/dist/table/index.d.ts +117 -0
  104. package/dist/table/index.js +377 -0
  105. package/dist/tabs/index.d.ts +63 -0
  106. package/dist/tabs/index.js +174 -0
  107. package/dist/textarea/index.d.ts +68 -0
  108. package/dist/textarea/index.js +137 -0
  109. package/dist/toast/index.d.ts +67 -0
  110. package/dist/toast/index.js +145 -0
  111. package/dist/toolbar/index.d.ts +59 -0
  112. package/dist/toolbar/index.js +139 -0
  113. package/dist/tooltip/index.d.ts +52 -0
  114. package/dist/tooltip/index.js +169 -0
  115. package/dist/treegrid/index.d.ts +101 -0
  116. package/dist/treegrid/index.js +463 -0
  117. package/dist/treeview/index.d.ts +68 -0
  118. package/dist/treeview/index.js +370 -0
  119. package/dist/window-splitter/index.d.ts +65 -0
  120. package/dist/window-splitter/index.js +204 -0
  121. package/package.json +92 -0
  122. package/specs/ADR-001-headless-architecture.md +461 -0
  123. package/specs/ADR-002-repo-release-model.md +108 -0
  124. package/specs/ADR-003-public-api-versioning.md +136 -0
  125. package/specs/ADR-004-focus-selection-policy.md +117 -0
  126. package/specs/IMPLEMENTATION-ROADMAP.md +237 -0
  127. package/specs/ISSUE-BACKLOG.md +681 -0
  128. package/specs/RELEASE-CANDIDATE.md +30 -0
  129. package/specs/components/accordion.md +130 -0
  130. package/specs/components/alert-dialog.md +72 -0
  131. package/specs/components/alert.md +65 -0
  132. package/specs/components/badge.md +220 -0
  133. package/specs/components/breadcrumb.md +74 -0
  134. package/specs/components/button.md +115 -0
  135. package/specs/components/callout.md +195 -0
  136. package/specs/components/card.md +280 -0
  137. package/specs/components/carousel.md +140 -0
  138. package/specs/components/checkbox.md +172 -0
  139. package/specs/components/combobox.md +423 -0
  140. package/specs/components/command-palette.md +92 -0
  141. package/specs/components/context-menu.md +556 -0
  142. package/specs/components/copy-button.md +293 -0
  143. package/specs/components/date-picker.md +400 -0
  144. package/specs/components/dialog.md +298 -0
  145. package/specs/components/disclosure.md +257 -0
  146. package/specs/components/drawer.md +353 -0
  147. package/specs/components/feed.md +265 -0
  148. package/specs/components/grid.md +186 -0
  149. package/specs/components/input.md +254 -0
  150. package/specs/components/landmarks.md +136 -0
  151. package/specs/components/link.md +134 -0
  152. package/specs/components/listbox.md +351 -0
  153. package/specs/components/menu-button.md +76 -0
  154. package/specs/components/menu.md +623 -0
  155. package/specs/components/meter.md +149 -0
  156. package/specs/components/number.md +393 -0
  157. package/specs/components/popover.md +252 -0
  158. package/specs/components/progress.md +188 -0
  159. package/specs/components/radio-group.md +151 -0
  160. package/specs/components/select.md +144 -0
  161. package/specs/components/sidebar.md +321 -0
  162. package/specs/components/slider-multi-thumb.md +78 -0
  163. package/specs/components/slider.md +84 -0
  164. package/specs/components/spinbutton.md +140 -0
  165. package/specs/components/spinner.md +132 -0
  166. package/specs/components/switch.md +175 -0
  167. package/specs/components/table.md +403 -0
  168. package/specs/components/tabs.md +265 -0
  169. package/specs/components/textarea.md +185 -0
  170. package/specs/components/toast.md +198 -0
  171. package/specs/components/toolbar.md +278 -0
  172. package/specs/components/tooltip.md +252 -0
  173. package/specs/components/treegrid.md +281 -0
  174. package/specs/components/treeview.md +91 -0
  175. package/specs/components/window-splitter.md +297 -0
  176. package/specs/ops/git-shard-sync.md +107 -0
  177. package/specs/ops/release-checklist.md +76 -0
  178. package/specs/release/GAP-TO-GREEN-ISSUES.md +88 -0
  179. package/specs/release/api-freeze-candidate.md +54 -0
  180. package/specs/release/changelog-automation.md +76 -0
  181. package/specs/release/changelog.generated.md +53 -0
  182. package/specs/release/changelog.patch.generated.md +46 -0
  183. package/specs/release/consumer-integration.md +53 -0
  184. package/specs/release/migration-notes-pre-v1.md +40 -0
  185. package/specs/release/mvp-changelog.md +57 -0
  186. package/specs/release/release-notes-template.md +61 -0
  187. package/specs/release/release-rehearsal.md +113 -0
  188. package/specs/release/semver-deprecation-dry-run.md +89 -0
  189. package/specs/release/shard-release-drill-report.md +50 -0
  190. package/specs/release/shard-release-follow-ups.md +31 -0
  191. package/specs/signals.md +208 -0
@@ -0,0 +1,681 @@
1
+ # Headless Issue-Ready Backlog (Next Cycle)
2
+
3
+ ## How to Use
4
+
5
+ Each item below is designed to be copied into a tracker as a standalone issue.
6
+
7
+ Common labels:
8
+
9
+ - `headless`
10
+ - `a11y`
11
+ - `apg`
12
+ - `state`
13
+ - `tests`
14
+ - `docs`
15
+ - `release`
16
+
17
+ ## Common Definition of Done
18
+
19
+ Applies to all issues unless overridden:
20
+
21
+ 1. Code/docs changed in `packages/headless` only.
22
+ 2. No forbidden imports (boundary check remains green).
23
+ 3. `npm run lint` passes.
24
+ 4. `npm run test` passes.
25
+ 5. Public exports are wired in `packages/headless/src/index.ts`.
26
+ 6. Component behavior stays aligned with corresponding `specs/components/<component>.md`.
27
+
28
+ ## Backlog Baseline
29
+
30
+ - Previous backlog cycle (`HLS-001` to `HLS-072`) is complete.
31
+ - Implemented components: `listbox`, `combobox`, `menu`, `tabs`, `treeview`.
32
+ - This cycle targets APG full-coverage implementation for remaining patterns with reusable primitives and final hardening gates.
33
+
34
+ ## Execution Status Snapshot
35
+
36
+ - Done: `HLS-080`..`HLS-162`
37
+ - In Progress: none
38
+ - Next Recommended: none
39
+
40
+ ## Milestone M8 - Shared Foundations
41
+
42
+ ### HLS-080 - Build shared value-range primitive package
43
+
44
+ - **Status**: Done
45
+ - **Milestone**: M8
46
+ - **Labels**: `headless`, `architecture`, `state`, `tests`
47
+ - **Depends on**: none
48
+ - **Scope**: create reusable value-range primitives for slider-like and meter/spinbutton/splitter components
49
+ - **Deliverables**:
50
+ - `src/core/value-range.ts` (or equivalent)
51
+ - tests for clamp, step, min/max, large-step behavior
52
+ - **Acceptance Criteria**:
53
+ - reusable by slider, slider-multi-thumb, spinbutton, meter, window-splitter
54
+ - no APG behavior regressions in existing components
55
+
56
+ ### HLS-081 - Build shared composite focus-navigation primitive package
57
+
58
+ - **Status**: Not Started
59
+ - **Milestone**: M8
60
+ - **Labels**: `headless`, `architecture`, `a11y`, `tests`
61
+ - **Depends on**: none
62
+ - **Scope**: create reusable roving/active-descendant navigation primitives for composite widgets
63
+ - **Deliverables**:
64
+ - `src/interactions/composite-navigation.ts` (or equivalent)
65
+ - tests for next/prev/first/last, orientation, disabled-skip, wrap policy
66
+ - **Acceptance Criteria**:
67
+ - reusable by radio-group, toolbar, grid, treegrid
68
+ - keyboard intent handling is deterministic and documented
69
+
70
+ ### HLS-082 - Build shared overlay focus/dismiss primitive package
71
+
72
+ - **Status**: Not Started
73
+ - **Milestone**: M8
74
+ - **Labels**: `headless`, `architecture`, `a11y`, `tests`
75
+ - **Depends on**: none
76
+ - **Scope**: create shared primitives for focus trap, restore, outside dismiss, and escape handling
77
+ - **Deliverables**:
78
+ - `src/interactions/overlay-focus.ts` (or equivalent)
79
+ - tests for trap, restore, escape, and outside-intent handling
80
+ - **Acceptance Criteria**:
81
+ - reusable by dialog, alert-dialog, tooltip, menu-button
82
+ - no visual-layer coupling
83
+
84
+ ## Milestone M9 - Semantic and Structural Patterns
85
+
86
+ ### HLS-100 - Implement Alert
87
+
88
+ - **Status**: Not Started
89
+ - **Milestone**: M9
90
+ - **Labels**: `headless`, `alert`, `apg`, `state`, `tests`, `docs`
91
+ - **Depends on**: none
92
+ - **Scope**: implement APG alert live-region behavior without focus stealing
93
+ - **Deliverables**:
94
+ - `src/alert/index.ts`
95
+ - `src/alert/alert.test.ts`
96
+ - **Acceptance Criteria**:
97
+ - aligns with `specs/components/alert.md`
98
+ - updates announce via role contract while preserving current focus
99
+
100
+ ### HLS-101 - Implement Breadcrumb
101
+
102
+ - **Status**: Not Started
103
+ - **Milestone**: M9
104
+ - **Labels**: `headless`, `breadcrumb`, `apg`, `tests`, `docs`
105
+ - **Depends on**: none
106
+ - **Scope**: implement breadcrumb semantic contracts and current-page semantics
107
+ - **Deliverables**:
108
+ - `src/breadcrumb/index.ts`
109
+ - `src/breadcrumb/breadcrumb.test.ts`
110
+ - **Acceptance Criteria**:
111
+ - aligns with `specs/components/breadcrumb.md`
112
+ - landmark labelling and `aria-current` behavior verified
113
+
114
+ ### HLS-102 - Implement Landmarks helpers
115
+
116
+ - **Status**: Not Started
117
+ - **Milestone**: M9
118
+ - **Labels**: `headless`, `landmarks`, `apg`, `tests`, `docs`
119
+ - **Depends on**: none
120
+ - **Scope**: implement helpers for landmark role/label assignment and uniqueness contracts
121
+ - **Deliverables**:
122
+ - `src/landmarks/index.ts`
123
+ - `src/landmarks/landmarks.test.ts`
124
+ - **Acceptance Criteria**:
125
+ - aligns with `specs/components/landmarks.md`
126
+ - duplicate landmark label/role edge cases covered
127
+
128
+ ### HLS-103 - Implement Link
129
+
130
+ - **Status**: Not Started
131
+ - **Milestone**: M9
132
+ - **Labels**: `headless`, `link`, `apg`, `tests`, `docs`
133
+ - **Depends on**: none
134
+ - **Scope**: implement APG link contract for semantic and non-semantic host usage
135
+ - **Deliverables**:
136
+ - `src/link/index.ts`
137
+ - `src/link/link.test.ts`
138
+ - **Acceptance Criteria**:
139
+ - aligns with `specs/components/link.md`
140
+ - enter-activation semantics and disabled-edge behavior verified
141
+
142
+ ### HLS-104 - Implement Meter
143
+
144
+ - **Status**: Not Started
145
+ - **Milestone**: M9
146
+ - **Labels**: `headless`, `meter`, `apg`, `state`, `tests`, `docs`
147
+ - **Depends on**: HLS-080
148
+ - **Scope**: implement read-only meter value contract using shared range primitive
149
+ - **Deliverables**:
150
+ - `src/meter/index.ts`
151
+ - `src/meter/meter.test.ts`
152
+ - **Acceptance Criteria**:
153
+ - aligns with `specs/components/meter.md`
154
+ - `aria-valuenow/min/max` and optional value-text behavior verified
155
+
156
+ ### HLS-105 - Implement Table semantic contract
157
+
158
+ - **Status**: Not Started
159
+ - **Milestone**: M9
160
+ - **Labels**: `headless`, `table`, `apg`, `tests`, `docs`
161
+ - **Depends on**: none
162
+ - **Scope**: implement static ARIA table contract helpers (non-grid behavior)
163
+ - **Deliverables**:
164
+ - `src/table/index.ts`
165
+ - `src/table/table.test.ts`
166
+ - **Acceptance Criteria**:
167
+ - aligns with `specs/components/table.md`
168
+ - table remains non-composite and non-roving by contract
169
+
170
+ ## Milestone M10 - Form and Value Controls
171
+
172
+ ### HLS-110 - Implement Button
173
+
174
+ - **Status**: Not Started
175
+ - **Milestone**: M10
176
+ - **Labels**: `headless`, `button`, `apg`, `state`, `tests`, `docs`
177
+ - **Depends on**: none
178
+ - **Scope**: implement button and toggle-button state/aria contracts
179
+ - **Deliverables**:
180
+ - `src/button/index.ts`
181
+ - `src/button/button.test.ts`
182
+ - **Acceptance Criteria**:
183
+ - aligns with `specs/components/button.md`
184
+ - enter/space activation and `aria-pressed` behavior verified
185
+
186
+ ### HLS-111 - Implement Checkbox
187
+
188
+ - **Status**: Not Started
189
+ - **Milestone**: M10
190
+ - **Labels**: `headless`, `checkbox`, `apg`, `state`, `tests`, `docs`
191
+ - **Depends on**: none
192
+ - **Scope**: implement dual-state and tri-state checkbox contracts
193
+ - **Deliverables**:
194
+ - `src/checkbox/index.ts`
195
+ - `src/checkbox/checkbox.test.ts`
196
+ - **Acceptance Criteria**:
197
+ - aligns with `specs/components/checkbox.md`
198
+ - `aria-checked` true/false/mixed transitions covered
199
+
200
+ ### HLS-112 - Implement Radio Group
201
+
202
+ - **Status**: Not Started
203
+ - **Milestone**: M10
204
+ - **Labels**: `headless`, `radio-group`, `apg`, `state`, `tests`, `docs`
205
+ - **Depends on**: HLS-081
206
+ - **Scope**: implement radiogroup single-selection and arrow-key contract
207
+ - **Deliverables**:
208
+ - `src/radio-group/index.ts`
209
+ - `src/radio-group/radio-group.test.ts`
210
+ - **Acceptance Criteria**:
211
+ - aligns with `specs/components/radio-group.md`
212
+ - roving focus + single-check invariants covered
213
+
214
+ ### HLS-113 - Implement Switch
215
+
216
+ - **Status**: Not Started
217
+ - **Milestone**: M10
218
+ - **Labels**: `headless`, `switch`, `apg`, `state`, `tests`, `docs`
219
+ - **Depends on**: none
220
+ - **Scope**: implement binary on/off switch contracts
221
+ - **Deliverables**:
222
+ - `src/switch/index.ts`
223
+ - `src/switch/switch.test.ts`
224
+ - **Acceptance Criteria**:
225
+ - aligns with `specs/components/switch.md`
226
+ - stable label semantics + checked-state behavior verified
227
+
228
+ ### HLS-114 - Implement Slider
229
+
230
+ - **Status**: Not Started
231
+ - **Milestone**: M10
232
+ - **Labels**: `headless`, `slider`, `apg`, `state`, `tests`, `docs`
233
+ - **Depends on**: HLS-080
234
+ - **Scope**: implement single-thumb slider value/range/keyboard contract
235
+ - **Deliverables**:
236
+ - `src/slider/index.ts`
237
+ - `src/slider/slider.test.ts`
238
+ - **Acceptance Criteria**:
239
+ - aligns with `specs/components/slider.md`
240
+ - arrows/home/end/page-step and aria value contracts covered
241
+
242
+ ### HLS-115 - Implement Slider Multi-Thumb
243
+
244
+ - **Status**: Not Started
245
+ - **Milestone**: M10
246
+ - **Labels**: `headless`, `slider-multi-thumb`, `apg`, `state`, `tests`, `docs`
247
+ - **Depends on**: HLS-080, HLS-114
248
+ - **Scope**: implement multi-thumb constraints, ordering, and per-thumb aria contract
249
+ - **Deliverables**:
250
+ - `src/slider-multi-thumb/index.ts`
251
+ - `src/slider-multi-thumb/slider-multi-thumb.test.ts`
252
+ - **Acceptance Criteria**:
253
+ - aligns with `specs/components/slider-multi-thumb.md`
254
+ - non-crossing and per-thumb focus/value invariants covered
255
+
256
+ ### HLS-116 - Implement Spinbutton
257
+
258
+ - **Status**: Not Started
259
+ - **Milestone**: M10
260
+ - **Labels**: `headless`, `spinbutton`, `apg`, `state`, `tests`, `docs`
261
+ - **Depends on**: HLS-080
262
+ - **Scope**: implement numeric spinbutton contract with keyboard steppers
263
+ - **Deliverables**:
264
+ - `src/spinbutton/index.ts`
265
+ - `src/spinbutton/spinbutton.test.ts`
266
+ - **Acceptance Criteria**:
267
+ - aligns with `specs/components/spinbutton.md`
268
+ - min/max/clamp, text-editing, and aria-value invariants covered
269
+
270
+ ## Milestone M11 - Disclosure, Overlay, and Command Surfaces
271
+
272
+ ### HLS-120 - Implement Disclosure
273
+
274
+ - **Status**: Not Started
275
+ - **Milestone**: M11
276
+ - **Labels**: `headless`, `disclosure`, `apg`, `state`, `tests`, `docs`
277
+ - **Depends on**: none
278
+ - **Scope**: implement show/hide disclosure button contract
279
+ - **Deliverables**:
280
+ - `src/disclosure/index.ts`
281
+ - `src/disclosure/disclosure.test.ts`
282
+ - **Acceptance Criteria**:
283
+ - aligns with `specs/components/disclosure.md`
284
+ - expanded state and controls linkage are deterministic
285
+
286
+ ### HLS-121 - Implement Accordion
287
+
288
+ - **Status**: Not Started
289
+ - **Milestone**: M11
290
+ - **Labels**: `headless`, `accordion`, `apg`, `state`, `tests`, `docs`
291
+ - **Depends on**: HLS-120
292
+ - **Scope**: implement multi-section disclosure variant with APG keyboard rules
293
+ - **Deliverables**:
294
+ - `src/accordion/index.ts`
295
+ - `src/accordion/accordion.test.ts`
296
+ - **Acceptance Criteria**:
297
+ - aligns with `specs/components/accordion.md`
298
+ - single/multi expand modes and header navigation covered
299
+
300
+ ### HLS-122 - Implement Dialog (Modal)
301
+
302
+ - **Status**: Not Started
303
+ - **Milestone**: M11
304
+ - **Labels**: `headless`, `dialog`, `apg`, `state`, `tests`, `docs`
305
+ - **Depends on**: HLS-082
306
+ - **Scope**: implement modal dialog contract with trap and restore semantics
307
+ - **Deliverables**:
308
+ - `src/dialog/index.ts`
309
+ - `src/dialog/dialog.test.ts`
310
+ - **Acceptance Criteria**:
311
+ - aligns with `specs/components/dialog.md`
312
+ - tab trap, escape close, and focus restore verified
313
+
314
+ ### HLS-123 - Implement Alert Dialog
315
+
316
+ - **Status**: Not Started
317
+ - **Milestone**: M11
318
+ - **Labels**: `headless`, `alert-dialog`, `apg`, `state`, `tests`, `docs`
319
+ - **Depends on**: HLS-082, HLS-122
320
+ - **Scope**: implement alertdialog semantics with least-destructive initial focus policy
321
+ - **Deliverables**:
322
+ - `src/alert-dialog/index.ts`
323
+ - `src/alert-dialog/alert-dialog.test.ts`
324
+ - **Acceptance Criteria**:
325
+ - aligns with `specs/components/alert-dialog.md`
326
+ - label + description wiring and focus policy verified
327
+
328
+ ### HLS-124 - Implement Tooltip
329
+
330
+ - **Status**: Not Started
331
+ - **Milestone**: M11
332
+ - **Labels**: `headless`, `tooltip`, `apg`, `state`, `tests`, `docs`
333
+ - **Depends on**: HLS-082
334
+ - **Scope**: implement tooltip open/close semantics tied to focus/hover triggers
335
+ - **Deliverables**:
336
+ - `src/tooltip/index.ts`
337
+ - `src/tooltip/tooltip.test.ts`
338
+ - **Acceptance Criteria**:
339
+ - aligns with `specs/components/tooltip.md`
340
+ - trigger `aria-describedby` and escape-dismiss behavior verified
341
+
342
+ ### HLS-125 - Implement Menu Button
343
+
344
+ - **Status**: Not Started
345
+ - **Milestone**: M11
346
+ - **Labels**: `headless`, `menu-button`, `apg`, `state`, `tests`, `docs`
347
+ - **Depends on**: HLS-082
348
+ - **Scope**: implement APG menu-button trigger contract integrated with menu semantics
349
+ - **Deliverables**:
350
+ - `src/menu-button/index.ts`
351
+ - `src/menu-button/menu-button.test.ts`
352
+ - **Acceptance Criteria**:
353
+ - aligns with `specs/components/menu-button.md`
354
+ - open-key variants and focus handoff to first/last item verified
355
+
356
+ ### HLS-126 - Implement Toolbar
357
+
358
+ - **Status**: Not Started
359
+ - **Milestone**: M11
360
+ - **Labels**: `headless`, `toolbar`, `apg`, `state`, `tests`, `docs`
361
+ - **Depends on**: HLS-081
362
+ - **Scope**: implement toolbar roving focus and orientation-aware keyboard behavior
363
+ - **Deliverables**:
364
+ - `src/toolbar/index.ts`
365
+ - `src/toolbar/toolbar.test.ts`
366
+ - **Acceptance Criteria**:
367
+ - aligns with `specs/components/toolbar.md`
368
+ - single-tab-stop and arrow navigation behavior verified
369
+
370
+ ## Milestone M12 - Data Navigation and Layout Patterns
371
+
372
+ ### HLS-130 - Implement Grid
373
+
374
+ - **Status**: Not Started
375
+ - **Milestone**: M12
376
+ - **Labels**: `headless`, `grid`, `apg`, `state`, `tests`, `docs`
377
+ - **Depends on**: HLS-081
378
+ - **Scope**: implement interactive grid navigation contract
379
+ - **Deliverables**:
380
+ - `src/grid/index.ts`
381
+ - `src/grid/grid.test.ts`
382
+ - **Acceptance Criteria**:
383
+ - aligns with `specs/components/grid.md`
384
+ - cell navigation matrix and aria metadata contracts verified
385
+
386
+ ### HLS-131 - Implement Treegrid
387
+
388
+ - **Status**: Not Started
389
+ - **Milestone**: M12
390
+ - **Labels**: `headless`, `treegrid`, `apg`, `state`, `tests`, `docs`
391
+ - **Depends on**: HLS-081, HLS-130
392
+ - **Scope**: implement hierarchical grid with expand/collapse and row/cell navigation
393
+ - **Deliverables**:
394
+ - `src/treegrid/index.ts`
395
+ - `src/treegrid/treegrid.test.ts`
396
+ - **Acceptance Criteria**:
397
+ - aligns with `specs/components/treegrid.md`
398
+ - hierarchical metadata and keyboard transitions verified
399
+
400
+ ### HLS-132 - Implement Feed
401
+
402
+ - **Status**: Not Started
403
+ - **Milestone**: M12
404
+ - **Labels**: `headless`, `feed`, `apg`, `state`, `tests`, `docs`
405
+ - **Depends on**: none
406
+ - **Scope**: implement feed/article navigation and loading-state aria semantics
407
+ - **Deliverables**:
408
+ - `src/feed/index.ts`
409
+ - `src/feed/feed.test.ts`
410
+ - **Acceptance Criteria**:
411
+ - aligns with `specs/components/feed.md`
412
+ - page-up/down contract and busy-state updates verified
413
+
414
+ ### HLS-133 - Implement Carousel
415
+
416
+ - **Status**: Not Started
417
+ - **Milestone**: M12
418
+ - **Labels**: `headless`, `carousel`, `apg`, `state`, `tests`, `docs`
419
+ - **Depends on**: none
420
+ - **Scope**: implement carousel slide and rotation controls with APG pause rules
421
+ - **Deliverables**:
422
+ - `src/carousel/index.ts`
423
+ - `src/carousel/carousel.test.ts`
424
+ - **Acceptance Criteria**:
425
+ - aligns with `specs/components/carousel.md`
426
+ - auto-rotation stop-on-focus and control ordering behavior verified
427
+
428
+ ### HLS-134 - Implement Window Splitter
429
+
430
+ - **Status**: Not Started
431
+ - **Milestone**: M12
432
+ - **Labels**: `headless`, `window-splitter`, `apg`, `state`, `tests`, `docs`
433
+ - **Depends on**: HLS-080
434
+ - **Scope**: implement focusable separator with keyboard resizing and aria value contract
435
+ - **Deliverables**:
436
+ - `src/window-splitter/index.ts`
437
+ - `src/window-splitter/window-splitter.test.ts`
438
+ - **Acceptance Criteria**:
439
+ - aligns with `specs/components/window-splitter.md`
440
+ - arrow/home/end movement and value clamping verified
441
+
442
+ ## Milestone M13 - Program Hardening and Closure
443
+
444
+ ### HLS-140 - Expand APG contract test harness across all new components
445
+
446
+ - **Status**: Done
447
+ - **Milestone**: M13
448
+ - **Labels**: `headless`, `tests`, `a11y`, `apg`
449
+ - **Depends on**: HLS-100..HLS-134
450
+ - **Scope**: add cross-component contract verification suites and regression coverage
451
+ - **Deliverables**:
452
+ - shared test helpers for role/aria/linkage assertions
453
+ - regression suites for keyboard contracts
454
+ - **Acceptance Criteria**:
455
+ - every newly added component has role/aria and keyboard contract coverage
456
+
457
+ ### HLS-141 - Final export, docs, and catalog sweep
458
+
459
+ - **Status**: Done
460
+ - **Milestone**: M13
461
+ - **Labels**: `headless`, `docs`, `release`
462
+ - **Depends on**: HLS-100..HLS-134
463
+ - **Scope**: finalize package exports, README coverage, and implementation status docs
464
+ - **Deliverables**:
465
+ - `src/index.ts` exports for all new components
466
+ - `README.md` implemented component list update
467
+ - specs cross-links and roadmap/status alignment updates if needed
468
+ - **Acceptance Criteria**:
469
+ - no missing public exports
470
+ - docs match actual package surface
471
+
472
+ ### HLS-142 - Full-gate validation and release-candidate preparation
473
+
474
+ - **Status**: Done
475
+ - **Milestone**: M13
476
+ - **Labels**: `headless`, `release`, `ops`, `governance`
477
+ - **Depends on**: HLS-140, HLS-141
478
+ - **Scope**: run full package quality gates and produce release-candidate evidence
479
+ - **Deliverables**:
480
+ - lint/test/boundary gate results
481
+ - APG coverage summary
482
+ - release-ready checklist completion
483
+ - **Acceptance Criteria**:
484
+ - all gates are green from package context
485
+ - no unresolved blocker issues in this backlog
486
+
487
+ ## Milestone M14 - MVP-next Extension Components (Post-APG Scope)
488
+
489
+ ### HLS-150 - Productize Select from scaffold to release-ready contract
490
+
491
+ - **Status**: Done
492
+ - **Milestone**: M14
493
+ - **Labels**: `headless`, `select`, `a11y`, `state`, `tests`, `docs`
494
+ - **Depends on**: HLS-112
495
+ - **Scope**: finalize single-select trigger/listbox composition contract and keyboard behavior for production usage
496
+ - **Deliverables**:
497
+ - `src/select/index.ts`
498
+ - `src/select/select.test.ts`
499
+ - `specs/components/select.md`
500
+ - **Acceptance Criteria**:
501
+ - trigger/listbox/option contracts are deterministic and stable
502
+ - value-text and selection-change callback semantics are verified
503
+ - **DoD Gates**:
504
+ - open-from-trigger keyboard matrix (`ArrowDown`, `ArrowUp`, `Home`, `End`, `Enter`, `Space`) is covered
505
+ - selected state (`selectedId`, `selectedLabel`, `getValueText`) stays synchronized
506
+ - close and focus-restore behavior is deterministic
507
+
508
+ ### HLS-151 - Productize Popover non-modal overlay contract
509
+
510
+ - **Status**: Done
511
+ - **Milestone**: M14
512
+ - **Labels**: `headless`, `popover`, `a11y`, `state`, `tests`, `docs`
513
+ - **Depends on**: HLS-082
514
+ - **Scope**: finalize popover trigger/content contract based on overlay focus intents without modal trap semantics
515
+ - **Deliverables**:
516
+ - `src/popover/index.ts`
517
+ - `src/popover/popover.test.ts`
518
+ - `specs/components/popover.md`
519
+ - **Acceptance Criteria**:
520
+ - open source and dismiss intent states are tracked and test-covered
521
+ - outside-pointer and outside-focus close policies are independently configurable
522
+ - **DoD Gates**:
523
+ - trigger/content aria linkage and expanded state always match model state
524
+ - escape/outside dismiss paths set `lastDismissIntent` and `restoreTargetId` correctly
525
+ - non-modal contract (`aria-modal=false`, no focus trap) is preserved
526
+
527
+ ### HLS-152 - Productize Context Menu pointer and keyboard invocation flows
528
+
529
+ - **Status**: Done
530
+ - **Milestone**: M14
531
+ - **Labels**: `headless`, `context-menu`, `a11y`, `state`, `tests`, `docs`
532
+ - **Depends on**: HLS-125, HLS-151
533
+ - **Scope**: finalize context menu model for right-click and keyboard invocation with anchor semantics
534
+ - **Deliverables**:
535
+ - `src/context-menu/index.ts`
536
+ - `src/context-menu/context-menu.test.ts`
537
+ - `specs/components/context-menu.md`
538
+ - **Acceptance Criteria**:
539
+ - pointer and keyboard open paths both supported (`ContextMenu`, `Shift+F10`)
540
+ - anchor coordinates and open source are preserved in state
541
+ - **DoD Gates**:
542
+ - `onContextMenu` invocation path prevents default when available
543
+ - menu close semantics (`Escape`, `Tab`, outside pointer policy) are deterministic
544
+ - restore-target behavior is consistent after close and select-close paths
545
+
546
+ ### HLS-153 - Productize Command Palette execute and shortcut contract
547
+
548
+ - **Status**: Done
549
+ - **Milestone**: M14
550
+ - **Labels**: `headless`, `command-palette`, `a11y`, `state`, `tests`, `docs`
551
+ - **Depends on**: HLS-150, HLS-151
552
+ - **Scope**: finalize command palette model with execute flow, shortcut handling, and keep-open policy controls
553
+ - **Deliverables**:
554
+ - `src/command-palette/index.ts`
555
+ - `src/command-palette/command-palette.test.ts`
556
+ - `specs/components/command-palette.md`
557
+ - **Acceptance Criteria**:
558
+ - global shortcut toggles palette deterministically
559
+ - execute paths update `lastExecutedId` and call `onExecute`
560
+ - **DoD Gates**:
561
+ - `Enter`/`Space` execution works for active command with visible-command fallback
562
+ - `closeOnExecute` policy is validated in both close and keep-open modes
563
+ - outside pointer close policy is implemented and covered
564
+
565
+ ### HLS-154 - Productize Toast queue and timer lifecycle contract
566
+
567
+ - **Status**: Done
568
+ - **Milestone**: M14
569
+ - **Labels**: `headless`, `toast`, `a11y`, `state`, `tests`, `docs`
570
+ - **Depends on**: none
571
+ - **Scope**: finalize notification queue model with durable timer pause/resume semantics
572
+ - **Deliverables**:
573
+ - `src/toast/index.ts`
574
+ - `src/toast/toast.test.ts`
575
+ - `specs/components/toast.md`
576
+ - **Acceptance Criteria**:
577
+ - queue visibility and level-to-role mapping are stable
578
+ - pause/resume preserves remaining auto-dismiss duration
579
+ - **DoD Gates**:
580
+ - push/dismiss/clear operations keep queue and timer tracking consistent
581
+ - `maxVisible` slicing and live-region contracts are verified
582
+ - auto-dismiss timing is deterministic in unit tests
583
+
584
+ ### HLS-155 - Productize Progress determinate/indeterminate value contract
585
+
586
+ - **Status**: Done
587
+ - **Milestone**: M14
588
+ - **Labels**: `headless`, `progress`, `a11y`, `state`, `tests`, `docs`
589
+ - **Depends on**: HLS-080
590
+ - **Scope**: finalize progressbar contract with value stepping, completion state, and aria mode switching
591
+ - **Deliverables**:
592
+ - `src/progress/index.ts`
593
+ - `src/progress/progress.test.ts`
594
+ - `specs/components/progress.md`
595
+ - **Acceptance Criteria**:
596
+ - determinate mode exposes full aria value triple and value text
597
+ - indeterminate mode omits aria value triple consistently
598
+ - **DoD Gates**:
599
+ - increment/decrement/set flows clamp through shared value-range behavior
600
+ - `isComplete` transitions are deterministic across state changes
601
+ - `onValueChange` callback fires only on effective value updates
602
+
603
+ ## Milestone M15 - Consumer Adoption and Release Operations
604
+
605
+ ### HLS-160 - Build external-consumer integration harness for MVP-next components
606
+
607
+ - **Status**: Done
608
+ - **Milestone**: M15
609
+ - **Labels**: `headless`, `integration`, `adapters`, `tests`, `docs`
610
+ - **Depends on**: HLS-150, HLS-151, HLS-152, HLS-153, HLS-154, HLS-155
611
+ - **Scope**: validate real consumer ergonomics by wiring MVP-next components in adapter-level integration scenarios
612
+ - **Deliverables**:
613
+ - adapter integration test expansion for MVP-next usage paths
614
+ - consumer integration notes in `specs/release/consumer-integration.md`
615
+ - **Acceptance Criteria**:
616
+ - import and usage flows from package public surface are verified for consumer-style composition
617
+ - no private/internal API usage is required for baseline integration flows
618
+ - **DoD Gates**:
619
+ - integration tests cover at least select/popover/command-palette composition path
620
+ - package-root import path remains sufficient for documented integration scenarios
621
+ - lint/test/boundary checks stay green
622
+
623
+ ### HLS-161 - Rehearse release workflow and packaging gates
624
+
625
+ - **Status**: Done
626
+ - **Milestone**: M15
627
+ - **Labels**: `headless`, `release`, `ops`, `governance`, `docs`
628
+ - **Depends on**: HLS-160
629
+ - **Scope**: run a full dry-run of package release operations with explicit evidence and rollback checklist
630
+ - **Deliverables**:
631
+ - release rehearsal runbook in `specs/release/release-rehearsal.md`
632
+ - verification artifacts for lint/test/boundary + tarball packaging checks
633
+ - **Acceptance Criteria**:
634
+ - a deterministic command sequence exists for release preparation and verification
635
+ - package tarball contents are validated against expected public surface
636
+ - **DoD Gates**:
637
+ - dry-run command set documented (`lint`, `test`, `npm pack`, governance checks)
638
+ - rehearsal output confirms no missing docs/exports in package artifact
639
+ - failure/rollback checklist is documented and reviewable
640
+
641
+ ### HLS-162 - Automate changelog and release-note assembly
642
+
643
+ - **Status**: Done
644
+ - **Milestone**: M15
645
+ - **Labels**: `headless`, `release`, `docs`, `automation`
646
+ - **Depends on**: HLS-161
647
+ - **Scope**: define and automate repeatable changelog generation for upcoming releases from backlog/status evidence
648
+ - **Deliverables**:
649
+ - changelog automation script(s) under `scripts/`
650
+ - release note template and usage doc in `specs/release/`
651
+ - **Acceptance Criteria**:
652
+ - changelog generation can be run from package context and produces deterministic output
653
+ - release-note template captures component changes, contract hardening, and gate evidence sections
654
+ - **DoD Gates**:
655
+ - generated changelog output includes MVP-next component tranche entries
656
+ - workflow supports both full release and patch-level update modes
657
+ - docs clearly define manual override/edit workflow for final release notes
658
+
659
+ ## Critical Path (recommended)
660
+
661
+ HLS-080 -> HLS-114 -> HLS-115 -> HLS-116 -> HLS-134 -> HLS-140 -> HLS-141 -> HLS-142 -> HLS-150 -> HLS-151 -> HLS-152 -> HLS-153 -> HLS-160 -> HLS-161 -> HLS-162
662
+
663
+ Parallel lanes:
664
+
665
+ - HLS-081 -> HLS-112 -> HLS-126 -> HLS-130 -> HLS-131
666
+ - HLS-082 -> HLS-122 -> HLS-123 and HLS-124 and HLS-125
667
+ - HLS-100/HLS-101/HLS-102/HLS-103/HLS-104/HLS-105 can run independently after foundations where required
668
+ - HLS-154 and HLS-155 can run in parallel with HLS-150..HLS-153
669
+ - HLS-160 can start once HLS-150..HLS-155 are done
670
+
671
+ ## Suggested Sprint Packaging
672
+
673
+ - **Sprint A**: HLS-080, HLS-081, HLS-082, HLS-100, HLS-101
674
+ - **Sprint B**: HLS-102, HLS-103, HLS-104, HLS-105, HLS-110
675
+ - **Sprint C**: HLS-111, HLS-112, HLS-113, HLS-114
676
+ - **Sprint D**: HLS-115, HLS-116, HLS-120, HLS-121
677
+ - **Sprint E**: HLS-122, HLS-123, HLS-124, HLS-125, HLS-126
678
+ - **Sprint F**: HLS-130, HLS-131, HLS-132, HLS-133, HLS-134
679
+ - **Sprint G**: HLS-140, HLS-141, HLS-142
680
+ - **Sprint H**: HLS-150, HLS-151, HLS-152, HLS-153, HLS-154, HLS-155
681
+ - **Sprint I**: HLS-160, HLS-161, HLS-162