@hjmds/react 1.41.1 → 1.42.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 (389) hide show
  1. package/README.md +2 -2
  2. package/dist/actions.d.ts +41 -0
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +40 -3
  5. package/dist/actions.js.map +1 -1
  6. package/dist/activity-chip.d.ts.map +1 -1
  7. package/dist/activity-chip.js +1 -0
  8. package/dist/activity-chip.js.map +1 -1
  9. package/dist/advanced-display.d.ts +47 -14
  10. package/dist/advanced-display.d.ts.map +1 -1
  11. package/dist/advanced-display.js +72 -17
  12. package/dist/advanced-display.js.map +1 -1
  13. package/dist/advanced-forms.d.ts.map +1 -1
  14. package/dist/advanced-forms.js +1 -0
  15. package/dist/advanced-forms.js.map +1 -1
  16. package/dist/affix.d.ts +6 -1
  17. package/dist/affix.d.ts.map +1 -1
  18. package/dist/affix.js +5 -3
  19. package/dist/affix.js.map +1 -1
  20. package/dist/agreement.d.ts.map +1 -1
  21. package/dist/agreement.js +1 -0
  22. package/dist/agreement.js.map +1 -1
  23. package/dist/alert-dialog-queue.d.ts +24 -0
  24. package/dist/alert-dialog-queue.d.ts.map +1 -0
  25. package/dist/alert-dialog-queue.js +44 -0
  26. package/dist/alert-dialog-queue.js.map +1 -0
  27. package/dist/anchor.d.ts.map +1 -1
  28. package/dist/anchor.js +1 -0
  29. package/dist/anchor.js.map +1 -1
  30. package/dist/asset.d.ts.map +1 -1
  31. package/dist/asset.js +1 -0
  32. package/dist/asset.js.map +1 -1
  33. package/dist/auth-screen.d.ts.map +1 -1
  34. package/dist/auth-screen.js +1 -0
  35. package/dist/auth-screen.js.map +1 -1
  36. package/dist/avatar-blobatar-motion.d.ts.map +1 -1
  37. package/dist/avatar-blobatar-motion.js +1 -0
  38. package/dist/avatar-blobatar-motion.js.map +1 -1
  39. package/dist/avatar-blobatar.d.ts.map +1 -1
  40. package/dist/avatar-blobatar.js +1 -0
  41. package/dist/avatar-blobatar.js.map +1 -1
  42. package/dist/bottom-cta.d.ts.map +1 -1
  43. package/dist/bottom-cta.js +1 -0
  44. package/dist/bottom-cta.js.map +1 -1
  45. package/dist/bottom-info.d.ts.map +1 -1
  46. package/dist/bottom-info.js +1 -0
  47. package/dist/bottom-info.js.map +1 -1
  48. package/dist/bottom-navigation.d.ts.map +1 -1
  49. package/dist/bottom-navigation.js +1 -0
  50. package/dist/bottom-navigation.js.map +1 -1
  51. package/dist/breadcrumb.d.ts.map +1 -1
  52. package/dist/breadcrumb.js +1 -0
  53. package/dist/breadcrumb.js.map +1 -1
  54. package/dist/calendar.d.ts.map +1 -1
  55. package/dist/calendar.js +1 -0
  56. package/dist/calendar.js.map +1 -1
  57. package/dist/carousel-motion.d.ts.map +1 -1
  58. package/dist/carousel-motion.js +1 -0
  59. package/dist/carousel-motion.js.map +1 -1
  60. package/dist/carousel.d.ts.map +1 -1
  61. package/dist/carousel.js +1 -0
  62. package/dist/carousel.js.map +1 -1
  63. package/dist/celebration.d.ts.map +1 -1
  64. package/dist/celebration.js +1 -0
  65. package/dist/celebration.js.map +1 -1
  66. package/dist/chart.d.ts +7 -2
  67. package/dist/chart.d.ts.map +1 -1
  68. package/dist/chart.js +6 -3
  69. package/dist/chart.js.map +1 -1
  70. package/dist/choice-row.d.ts +24 -7
  71. package/dist/choice-row.d.ts.map +1 -1
  72. package/dist/choice-row.js +11 -6
  73. package/dist/choice-row.js.map +1 -1
  74. package/dist/clipboard.d.ts.map +1 -1
  75. package/dist/clipboard.js +1 -0
  76. package/dist/clipboard.js.map +1 -1
  77. package/dist/collapsible.d.ts.map +1 -1
  78. package/dist/collapsible.js +1 -0
  79. package/dist/collapsible.js.map +1 -1
  80. package/dist/collection-rail.d.ts.map +1 -1
  81. package/dist/collection-rail.js +3 -1
  82. package/dist/collection-rail.js.map +1 -1
  83. package/dist/color-picker.d.ts.map +1 -1
  84. package/dist/color-picker.js +1 -0
  85. package/dist/color-picker.js.map +1 -1
  86. package/dist/command-palette.d.ts.map +1 -1
  87. package/dist/command-palette.js +1 -0
  88. package/dist/command-palette.js.map +1 -1
  89. package/dist/content-transition.d.ts.map +1 -1
  90. package/dist/content-transition.js +1 -0
  91. package/dist/content-transition.js.map +1 -1
  92. package/dist/context-menu.d.ts.map +1 -1
  93. package/dist/context-menu.js +1 -0
  94. package/dist/context-menu.js.map +1 -1
  95. package/dist/conversation-row.d.ts.map +1 -1
  96. package/dist/conversation-row.js +1 -0
  97. package/dist/conversation-row.js.map +1 -1
  98. package/dist/data-table.d.ts.map +1 -1
  99. package/dist/data-table.js +1 -0
  100. package/dist/data-table.js.map +1 -1
  101. package/dist/date-entry.d.ts.map +1 -1
  102. package/dist/date-entry.js +1 -0
  103. package/dist/date-entry.js.map +1 -1
  104. package/dist/date-picker.d.ts.map +1 -1
  105. package/dist/date-picker.js +1 -0
  106. package/dist/date-picker.js.map +1 -1
  107. package/dist/date-range.d.ts.map +1 -1
  108. package/dist/date-range.js +1 -0
  109. package/dist/date-range.js.map +1 -1
  110. package/dist/design-profile.d.ts.map +1 -1
  111. package/dist/design-profile.js +1 -0
  112. package/dist/design-profile.js.map +1 -1
  113. package/dist/display.d.ts +21 -1
  114. package/dist/display.d.ts.map +1 -1
  115. package/dist/display.js +34 -8
  116. package/dist/display.js.map +1 -1
  117. package/dist/duration-field.d.ts.map +1 -1
  118. package/dist/duration-field.js +1 -0
  119. package/dist/duration-field.js.map +1 -1
  120. package/dist/effect-surface.d.ts.map +1 -1
  121. package/dist/effect-surface.js +1 -0
  122. package/dist/effect-surface.js.map +1 -1
  123. package/dist/evidence.d.ts +1 -1
  124. package/dist/evidence.js +1 -1
  125. package/dist/evidence.js.map +1 -1
  126. package/dist/feedback.d.ts.map +1 -1
  127. package/dist/feedback.js +1 -0
  128. package/dist/feedback.js.map +1 -1
  129. package/dist/field-group.d.ts.map +1 -1
  130. package/dist/field-group.js +1 -0
  131. package/dist/field-group.js.map +1 -1
  132. package/dist/file-picker.d.ts.map +1 -1
  133. package/dist/file-picker.js +1 -0
  134. package/dist/file-picker.js.map +1 -1
  135. package/dist/floating-action-button.d.ts.map +1 -1
  136. package/dist/floating-action-button.js +1 -0
  137. package/dist/floating-action-button.js.map +1 -1
  138. package/dist/folder-preview.d.ts.map +1 -1
  139. package/dist/folder-preview.js +1 -0
  140. package/dist/folder-preview.js.map +1 -1
  141. package/dist/forms.d.ts +30 -6
  142. package/dist/forms.d.ts.map +1 -1
  143. package/dist/forms.js +56 -14
  144. package/dist/forms.js.map +1 -1
  145. package/dist/gravity-letters.d.ts.map +1 -1
  146. package/dist/gravity-letters.js +1 -0
  147. package/dist/gravity-letters.js.map +1 -1
  148. package/dist/grid-reveal.d.ts.map +1 -1
  149. package/dist/grid-reveal.js +1 -0
  150. package/dist/grid-reveal.js.map +1 -1
  151. package/dist/heading.d.ts.map +1 -1
  152. package/dist/heading.js +1 -0
  153. package/dist/heading.js.map +1 -1
  154. package/dist/image-choice.d.ts.map +1 -1
  155. package/dist/image-choice.js +1 -0
  156. package/dist/image-choice.js.map +1 -1
  157. package/dist/image-comparison.d.ts.map +1 -1
  158. package/dist/image-comparison.js +1 -0
  159. package/dist/image-comparison.js.map +1 -1
  160. package/dist/image-viewer.d.ts +22 -1
  161. package/dist/image-viewer.d.ts.map +1 -1
  162. package/dist/image-viewer.js +14 -1
  163. package/dist/image-viewer.js.map +1 -1
  164. package/dist/index.d.ts +3 -3
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +1 -1
  167. package/dist/index.js.map +1 -1
  168. package/dist/inline-confirm.d.ts.map +1 -1
  169. package/dist/inline-confirm.js +1 -0
  170. package/dist/inline-confirm.js.map +1 -1
  171. package/dist/internal/document-resource.d.ts.map +1 -1
  172. package/dist/internal/document-resource.js +1 -0
  173. package/dist/internal/document-resource.js.map +1 -1
  174. package/dist/internal/initial-focus.d.ts.map +1 -1
  175. package/dist/internal/initial-focus.js +1 -0
  176. package/dist/internal/initial-focus.js.map +1 -1
  177. package/dist/internal/media-album.d.ts.map +1 -1
  178. package/dist/internal/media-album.js +1 -0
  179. package/dist/internal/media-album.js.map +1 -1
  180. package/dist/internal/message-reactions.d.ts.map +1 -1
  181. package/dist/internal/message-reactions.js +1 -0
  182. package/dist/internal/message-reactions.js.map +1 -1
  183. package/dist/internal/overlay-origin-motion.d.ts.map +1 -1
  184. package/dist/internal/overlay-origin-motion.js +1 -0
  185. package/dist/internal/overlay-origin-motion.js.map +1 -1
  186. package/dist/internal/pending-content.d.ts.map +1 -1
  187. package/dist/internal/pending-content.js +1 -0
  188. package/dist/internal/pending-content.js.map +1 -1
  189. package/dist/internal/photo-source-icon.d.ts.map +1 -1
  190. package/dist/internal/photo-source-icon.js +1 -0
  191. package/dist/internal/photo-source-icon.js.map +1 -1
  192. package/dist/internal/screen-exit.d.ts.map +1 -1
  193. package/dist/internal/screen-exit.js +1 -0
  194. package/dist/internal/screen-exit.js.map +1 -1
  195. package/dist/internal/screen-footer.d.ts.map +1 -1
  196. package/dist/internal/screen-footer.js +1 -0
  197. package/dist/internal/screen-footer.js.map +1 -1
  198. package/dist/internal/spinner.d.ts.map +1 -1
  199. package/dist/internal/spinner.js +1 -0
  200. package/dist/internal/spinner.js.map +1 -1
  201. package/dist/internal/use-composition-action.d.ts.map +1 -1
  202. package/dist/internal/use-composition-action.js +1 -0
  203. package/dist/internal/use-composition-action.js.map +1 -1
  204. package/dist/internal.d.ts.map +1 -1
  205. package/dist/internal.js +1 -0
  206. package/dist/internal.js.map +1 -1
  207. package/dist/layout.d.ts +11 -1
  208. package/dist/layout.d.ts.map +1 -1
  209. package/dist/layout.js +8 -4
  210. package/dist/layout.js.map +1 -1
  211. package/dist/mentions.d.ts.map +1 -1
  212. package/dist/mentions.js +1 -0
  213. package/dist/mentions.js.map +1 -1
  214. package/dist/menu-morph.d.ts.map +1 -1
  215. package/dist/menu-morph.js +1 -0
  216. package/dist/menu-morph.js.map +1 -1
  217. package/dist/menubar.d.ts.map +1 -1
  218. package/dist/menubar.js +1 -0
  219. package/dist/menubar.js.map +1 -1
  220. package/dist/modal.d.ts.map +1 -1
  221. package/dist/modal.js +1 -0
  222. package/dist/modal.js.map +1 -1
  223. package/dist/navigation-bar.d.ts.map +1 -1
  224. package/dist/navigation-bar.js +1 -0
  225. package/dist/navigation-bar.js.map +1 -1
  226. package/dist/navigation.d.ts.map +1 -1
  227. package/dist/navigation.js +1 -0
  228. package/dist/navigation.js.map +1 -1
  229. package/dist/notification-bell.d.ts +1 -1
  230. package/dist/notification-bell.d.ts.map +1 -1
  231. package/dist/notification-bell.js +5 -1
  232. package/dist/notification-bell.js.map +1 -1
  233. package/dist/number-field.d.ts.map +1 -1
  234. package/dist/number-field.js +1 -0
  235. package/dist/number-field.js.map +1 -1
  236. package/dist/overlay-stack.d.ts.map +1 -1
  237. package/dist/overlay-stack.js +1 -0
  238. package/dist/overlay-stack.js.map +1 -1
  239. package/dist/overlays.d.ts.map +1 -1
  240. package/dist/overlays.js +11 -2
  241. package/dist/overlays.js.map +1 -1
  242. package/dist/pagination.d.ts.map +1 -1
  243. package/dist/pagination.js +1 -0
  244. package/dist/pagination.js.map +1 -1
  245. package/dist/popover.d.ts.map +1 -1
  246. package/dist/popover.js +1 -0
  247. package/dist/popover.js.map +1 -1
  248. package/dist/portal.d.ts.map +1 -1
  249. package/dist/portal.js +1 -0
  250. package/dist/portal.js.map +1 -1
  251. package/dist/progressive-blur.d.ts.map +1 -1
  252. package/dist/progressive-blur.js +1 -0
  253. package/dist/progressive-blur.js.map +1 -1
  254. package/dist/provider-button.d.ts.map +1 -1
  255. package/dist/provider-button.js +1 -0
  256. package/dist/provider-button.js.map +1 -1
  257. package/dist/provider.d.ts +9 -1
  258. package/dist/provider.d.ts.map +1 -1
  259. package/dist/provider.js +2 -2
  260. package/dist/provider.js.map +1 -1
  261. package/dist/public-exports.generated.d.ts +3 -0
  262. package/dist/public-exports.generated.d.ts.map +1 -1
  263. package/dist/public-exports.generated.js +9 -0
  264. package/dist/public-exports.generated.js.map +1 -1
  265. package/dist/rating.d.ts.map +1 -1
  266. package/dist/rating.js +1 -0
  267. package/dist/rating.js.map +1 -1
  268. package/dist/reaction-picker.d.ts.map +1 -1
  269. package/dist/reaction-picker.js +1 -0
  270. package/dist/reaction-picker.js.map +1 -1
  271. package/dist/saved-items.d.ts.map +1 -1
  272. package/dist/saved-items.js +1 -0
  273. package/dist/saved-items.js.map +1 -1
  274. package/dist/screen-flows.d.ts +5 -1
  275. package/dist/screen-flows.d.ts.map +1 -1
  276. package/dist/screen-flows.js +13 -4
  277. package/dist/screen-flows.js.map +1 -1
  278. package/dist/screens.d.ts +24 -4
  279. package/dist/screens.d.ts.map +1 -1
  280. package/dist/screens.js +38 -11
  281. package/dist/screens.js.map +1 -1
  282. package/dist/scroll-progress.d.ts.map +1 -1
  283. package/dist/scroll-progress.js +1 -0
  284. package/dist/scroll-progress.js.map +1 -1
  285. package/dist/select.d.ts.map +1 -1
  286. package/dist/select.js +1 -0
  287. package/dist/select.js.map +1 -1
  288. package/dist/selection.d.ts +7 -1
  289. package/dist/selection.d.ts.map +1 -1
  290. package/dist/selection.js +33 -10
  291. package/dist/selection.js.map +1 -1
  292. package/dist/side-panel.d.ts.map +1 -1
  293. package/dist/side-panel.js +1 -0
  294. package/dist/side-panel.js.map +1 -1
  295. package/dist/sidebar.d.ts +21 -2
  296. package/dist/sidebar.d.ts.map +1 -1
  297. package/dist/sidebar.js +40 -20
  298. package/dist/sidebar.js.map +1 -1
  299. package/dist/skip-nav.d.ts.map +1 -1
  300. package/dist/skip-nav.js +1 -0
  301. package/dist/skip-nav.js.map +1 -1
  302. package/dist/slider.d.ts.map +1 -1
  303. package/dist/slider.js +1 -0
  304. package/dist/slider.js.map +1 -1
  305. package/dist/sortable.d.ts.map +1 -1
  306. package/dist/sortable.js +1 -0
  307. package/dist/sortable.js.map +1 -1
  308. package/dist/splitter.d.ts.map +1 -1
  309. package/dist/splitter.js +1 -0
  310. package/dist/splitter.js.map +1 -1
  311. package/dist/statistic-motion.d.ts.map +1 -1
  312. package/dist/statistic-motion.js +1 -0
  313. package/dist/statistic-motion.js.map +1 -1
  314. package/dist/status-text.d.ts.map +1 -1
  315. package/dist/status-text.js +1 -0
  316. package/dist/status-text.js.map +1 -1
  317. package/dist/step-player.d.ts.map +1 -1
  318. package/dist/step-player.js +1 -0
  319. package/dist/step-player.js.map +1 -1
  320. package/dist/steps.d.ts +16 -14
  321. package/dist/steps.d.ts.map +1 -1
  322. package/dist/steps.js +26 -9
  323. package/dist/steps.js.map +1 -1
  324. package/dist/styles.css +140 -35
  325. package/dist/styles.layered.css +140 -35
  326. package/dist/supplemental-display.d.ts.map +1 -1
  327. package/dist/supplemental-display.js +1 -0
  328. package/dist/supplemental-display.js.map +1 -1
  329. package/dist/supplemental-navigation.d.ts.map +1 -1
  330. package/dist/supplemental-navigation.js +1 -0
  331. package/dist/supplemental-navigation.js.map +1 -1
  332. package/dist/swipe-actions.d.ts.map +1 -1
  333. package/dist/swipe-actions.js +1 -0
  334. package/dist/swipe-actions.js.map +1 -1
  335. package/dist/table-family.d.ts.map +1 -1
  336. package/dist/table-family.js +1 -0
  337. package/dist/table-family.js.map +1 -1
  338. package/dist/table-sort-button.d.ts.map +1 -1
  339. package/dist/table-sort-button.js +1 -0
  340. package/dist/table-sort-button.js.map +1 -1
  341. package/dist/tags-input.d.ts.map +1 -1
  342. package/dist/tags-input.js +1 -0
  343. package/dist/tags-input.js.map +1 -1
  344. package/dist/task-list.d.ts.map +1 -1
  345. package/dist/task-list.js +1 -0
  346. package/dist/task-list.js.map +1 -1
  347. package/dist/text-annotation.d.ts.map +1 -1
  348. package/dist/text-annotation.js +1 -0
  349. package/dist/text-annotation.js.map +1 -1
  350. package/dist/text-formats.d.ts.map +1 -1
  351. package/dist/text-formats.js +1 -0
  352. package/dist/text-formats.js.map +1 -1
  353. package/dist/theme.d.ts.map +1 -1
  354. package/dist/theme.js +12 -1
  355. package/dist/theme.js.map +1 -1
  356. package/dist/thinking-orb.d.ts.map +1 -1
  357. package/dist/thinking-orb.js +1 -0
  358. package/dist/thinking-orb.js.map +1 -1
  359. package/dist/toast.d.ts.map +1 -1
  360. package/dist/toast.js +1 -0
  361. package/dist/toast.js.map +1 -1
  362. package/dist/toggle-group.d.ts.map +1 -1
  363. package/dist/toggle-group.js +1 -0
  364. package/dist/toggle-group.js.map +1 -1
  365. package/dist/top-bar.d.ts.map +1 -1
  366. package/dist/top-bar.js +1 -0
  367. package/dist/top-bar.js.map +1 -1
  368. package/dist/top.d.ts.map +1 -1
  369. package/dist/top.js +4 -3
  370. package/dist/top.js.map +1 -1
  371. package/dist/tour.d.ts.map +1 -1
  372. package/dist/tour.js +1 -0
  373. package/dist/tour.js.map +1 -1
  374. package/dist/transfer-list.d.ts.map +1 -1
  375. package/dist/transfer-list.js +1 -0
  376. package/dist/transfer-list.js.map +1 -1
  377. package/dist/tree.d.ts.map +1 -1
  378. package/dist/tree.js +1 -0
  379. package/dist/tree.js.map +1 -1
  380. package/dist/upload-item.d.ts.map +1 -1
  381. package/dist/upload-item.js +1 -0
  382. package/dist/upload-item.js.map +1 -1
  383. package/dist/virtual-list.d.ts.map +1 -1
  384. package/dist/virtual-list.js +1 -0
  385. package/dist/virtual-list.js.map +1 -1
  386. package/dist/voice-note.d.ts.map +1 -1
  387. package/dist/voice-note.js +1 -0
  388. package/dist/voice-note.js.map +1 -1
  389. package/package.json +8 -3
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Grid } from \"./layout.js\";\nimport type { GridDescriptor } from \"@hjmds/design-contracts/grid\";\nimport { Button } from \"./actions.js\";\nimport { useDesignProfileDefaults } from \"./internal.js\";\nimport {\n chipRecipe,\n iconRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n selectionGroupRecipe,\n switchRecipe,\n type SegmentedControlSize,\n type SelectionControlPresentation,\n type SelectionControlSize,\n type SelectionGroupOrientation,\n type SelectionGroupPresentation,\n type SwitchSize,\n type SwitchPresentation,\n} from \"@hjmds/design-contracts/recipes\";\n\nexport type { SwitchSize, SwitchPresentation };\nimport {\n resolveControlAccessibleName,\n reconcileCheckboxSelection,\n reconcileRadioSelection,\n resolveInitialRadioValue,\n toggleCheckboxSelection,\n validateCheckboxSelection,\n validateRadioSelection,\n type CheckboxGroupSelection,\n type SelectionItemDescriptor,\n} from \"@hjmds/design-contracts/behaviors\";\nimport {\n forwardRef,\n useEffect,\n useLayoutEffect,\n useId,\n useRef,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type FieldsetHTMLAttributes,\n type InputHTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nimport { FieldError } from \"./internal/field-error.js\";\n\nexport type ChoiceLeadingRenderProps = Readonly<{\n selected: boolean;\n color: \"currentColor\";\n size: number;\n}>;\n\ntype ChipBaseProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onChange\" | \"onClick\" | \"size\"\n> &\n Readonly<{\n label: ReactNode;\n size?: keyof typeof chipRecipe.sizes;\n leading?: ReactNode;\n trailing?: ReactNode;\n renderSelectionIndicator?: (props: Readonly<{\n selected: boolean;\n color: \"currentColor\";\n size: number;\n }>) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\ntype ActionChipProps = Readonly<{\n selectionMode?: \"action\";\n selected?: never;\n onPress?: (event: MouseEvent<HTMLButtonElement>) => void;\n onSelectedChange?: never;\n}>;\n\ntype SelectionChipProps = Readonly<{\n selectionMode: \"single\" | \"multiple\";\n selected: boolean;\n onSelectedChange: (selected: boolean) => void;\n onPress?: (event: MouseEvent<HTMLButtonElement>) => void;\n}>;\n\nexport type ChipProps = ChipBaseProps & (ActionChipProps | SelectionChipProps);\n\n/** Action/filter chip with explicit selection semantics and no hidden state. */\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(function Chip(\n {\n label,\n size = chipRecipe.defaults.size,\n leading,\n trailing,\n renderSelectionIndicator,\n selectionMode = \"action\",\n selected,\n onSelectedChange,\n onPress,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const selectable = selectionMode !== \"action\";\n const active = selectable && selected === true;\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n aria-checked={selectable ? active : undefined}\n className={classNames(\"hjm-chip\", className)}\n data-selected={active || undefined}\n data-size={size}\n disabled={disabled}\n onClick={(event) => {\n onPress?.(event);\n if (!event.defaultPrevented && selectable) onSelectedChange?.(!active);\n }}\n role={selectionMode === \"single\" ? \"radio\" : selectionMode === \"multiple\" ? \"checkbox\" : undefined}\n type=\"button\"\n >\n {active ? (\n <span aria-hidden=\"true\" className=\"hjm-chip__indicator\">\n {renderSelectionIndicator?.({\n selected: true,\n color: \"currentColor\",\n size: iconRecipe.sizes[chipRecipe.selectionIndicator.glyph],\n }) ?? \"✓\"}\n </span>\n ) : null}\n {leading === undefined ? null : <span aria-hidden=\"true\" className=\"hjm-chip__leading\">{leading}</span>}\n <span className=\"hjm-chip__label\">{label}</span>\n {trailing === undefined ? null : <span aria-hidden=\"true\" className=\"hjm-chip__trailing\">{trailing}</span>}\n </button>\n );\n});\n\nexport type CheckboxProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"children\" | \"size\"\n> &\n Readonly<{\n label: ReactNode;\n description?: ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n presentation?: SelectionControlPresentation;\n size?: SelectionControlSize;\n renderLeading?: (appearance: ChoiceLeadingRenderProps) => ReactNode;\n /**\n * Canonical layout-only placement on the root `<label>`. `style` keeps going\n * to the native input, where it always went, so existing callers do not move.\n */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(\n {\n label,\n description,\n checked: checkedProp,\n defaultChecked = false,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n readOnly = false,\n presentation = selectionControlRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n renderLeading,\n className,\n onClick,\n layoutStyle,\n ...props\n },\n forwardedRef,\n ) {\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined ? {} : { onChange: onCheckedChange }),\n });\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n const selected = checked || indeterminate;\n const leadingSize = iconRecipe.sizes[selectionControlRecipe.leading.size];\n\n return (\n <label\n className={classNames(\"hjm-choice\", className)}\n style={layoutStyle}\n data-kind=\"checkbox\"\n data-state={indeterminate ? \"mixed\" : checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n {...props}\n ref={composeRefs(inputRef, forwardedRef)}\n className=\"hjm-choice__input\"\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n aria-readonly={readOnly || undefined}\n aria-checked={indeterminate ? \"mixed\" : checked}\n onClick={(event) => {\n onClick?.(event);\n if (readOnly) event.preventDefault();\n }}\n onChange={(event) => {\n if (!readOnly) setChecked(event.currentTarget.checked);\n onChange?.(event);\n }}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading({\n selected,\n color: \"currentColor\",\n size: leadingSize,\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{label}</span>\n {description ? <span className=\"hjm-choice__description\">{description}</span> : null}\n </span>\n </label>\n );\n },\n);\n\ntype RadioState =\n | Readonly<{\n checked: boolean;\n defaultChecked?: never;\n onCheckedChange(checked: true): void;\n }>\n | Readonly<{\n checked?: never;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: true) => void;\n }>;\n\nexport type RadioProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"children\" | \"size\"\n> &\n RadioState &\n Readonly<{\n label: ReactNode;\n description?: ReactNode;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n presentation?: SelectionControlPresentation;\n size?: SelectionControlSize;\n renderLeading?: (appearance: ChoiceLeadingRenderProps) => ReactNode;\n /**\n * Canonical layout-only placement on the root `<label>`. `style` keeps going\n * to the native input, where it always went, so existing callers do not move.\n */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\n/** Native radio item primitive. Use RadioGroup when the renderer owns group state. */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n label,\n description,\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n onChange,\n disabled,\n readOnly = false,\n presentation = selectionControlRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n renderLeading,\n className,\n onClick,\n layoutStyle,\n ...props\n },\n ref,\n) {\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined\n ? {}\n : { onChange: (next: boolean) => next && onCheckedChange(true) }),\n });\n return (\n <label\n className={classNames(\"hjm-choice\", className)}\n style={layoutStyle}\n data-kind=\"radio\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n {...props}\n ref={ref}\n className=\"hjm-choice__input\"\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n aria-readonly={readOnly || undefined}\n onClick={(event) => {\n onClick?.(event);\n if (readOnly) event.preventDefault();\n }}\n onChange={(event) => {\n if (!readOnly && event.currentTarget.checked) setChecked(true);\n onChange?.(event);\n }}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading({\n selected: checked,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{label}</span>\n {description ? <span className=\"hjm-choice__description\">{description}</span> : null}\n </span>\n </label>\n );\n});\n\nfunction ChoiceItems({ grid, className, children }: Readonly<{ grid: GridDescriptor | undefined; className: string; children: ReactNode }>) {\n return grid ? <Grid {...grid}>{children}</Grid> : <div className={className}>{children}</div>;\n}\n\nexport type CheckboxGroupItem<Key extends string = string> =\n SelectionItemDescriptor<Key>;\n\ntype CheckboxGroupBaseProps<Key extends string> = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n items: readonly CheckboxGroupItem<Key>[];\n label?: string;\n accessibilityLabel?: string;\n description?: ReactNode;\n error?: ReactNode;\n orientation?: SelectionGroupOrientation;\n /** Equal-width responsive options; uses the shared Grid contract instead of intrinsic row widths. */\n grid?: GridDescriptor;\n presentation?: SelectionGroupPresentation;\n size?: SelectionControlSize;\n name?: string;\n required?: boolean;\n readOnly?: boolean;\n renderLeading?: (\n item: CheckboxGroupItem<Key>,\n appearance: ChoiceLeadingRenderProps,\n ) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport type CheckboxGroupProps<Key extends string = string> =\n CheckboxGroupBaseProps<Key> & CheckboxGroupSelection<Key>;\n\nfunction CheckboxGroupInner<Key extends string>(\n {\n items,\n label,\n accessibilityLabel,\n description,\n error,\n orientation = selectionGroupRecipe.defaults.orientation,\n grid,\n presentation = selectionGroupRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n name,\n required = false,\n readOnly = false,\n renderLeading,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n }: CheckboxGroupProps<Key>,\n ref: React.ForwardedRef<HTMLFieldSetElement>,\n) {\n const resolvedLabel = resolveControlAccessibleName(\n label,\n accessibilityLabel,\n \"CheckboxGroup\",\n );\n const [value, setValue] = useControllableState<ReadonlySet<Key>>({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: defaultValue ?? new Set<Key>(),\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateCheckboxSelection(items, value);\n const reconciledValue = controlled\n ? value\n : reconcileCheckboxSelection(items, value);\n useEffect(() => {\n if (!controlled && reconciledValue !== value) setValue(reconciledValue);\n }, [controlled, reconciledValue, setValue, value]);\n const generatedId = useId().replaceAll(\":\", \"\");\n const descriptionId = `${generatedId}-checkbox-group-description`;\n const errorId = `${generatedId}-checkbox-group-error`;\n return (\n <fieldset\n {...props}\n ref={ref}\n style={{ ...style, ...layoutStyle }}\n className={classNames(\"hjm-checkbox-group\", className)}\n data-orientation={orientation}\n data-presentation={presentation}\n data-size={size}\n data-state={error ? \"invalid\" : disabled ? \"disabled\" : \"idle\"}\n disabled={disabled}\n aria-label={accessibilityLabel}\n aria-describedby={error ? errorId : description ? descriptionId : undefined}\n aria-required={required || undefined}\n aria-readonly={readOnly || undefined}\n >\n <legend className={label === undefined ? \"hjm-visually-hidden\" : undefined}>\n {label ?? resolvedLabel}\n </legend>\n {description && !error ? (\n <div id={descriptionId} className=\"hjm-field__description\">{description}</div>\n ) : null}\n <ChoiceItems grid={grid} className=\"hjm-checkbox-group__items\">\n {items.map((item) => {\n const checked = reconciledValue.has(item.id);\n return (\n <label\n key={item.id}\n className=\"hjm-choice\"\n data-kind=\"checkbox\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n className=\"hjm-choice__input\"\n type=\"checkbox\"\n name={name}\n value={item.id}\n checked={checked}\n disabled={item.disabled}\n aria-readonly={readOnly || undefined}\n onChange={() => {\n if (!readOnly) {\n setValue(toggleCheckboxSelection(items, reconciledValue, item.id));\n }\n }}\n onClick={readOnly ? (event) => event.preventDefault() : undefined}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading(item, {\n selected: checked,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{item.label}</span>\n {item.description ? (\n <span className=\"hjm-choice__description\">{item.description}</span>\n ) : null}\n </span>\n </label>\n );\n })}\n </ChoiceItems>\n <FieldError id={errorId} error={error} />\n </fieldset>\n );\n}\n\nexport const CheckboxGroup = forwardRef(CheckboxGroupInner) as <Key extends string = string>(\n props: CheckboxGroupProps<Key> & RefAttributes<HTMLFieldSetElement>,\n) => ReactElement;\n\nexport type RadioGroupItem = Readonly<{\n value: string;\n label: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n /** Independent sibling action; activating it never selects the option. */\n action?: Readonly<{ label: string; accessibilityLabel?: string; onAction: () => void; disabled?: boolean }>;\n}>;\n\ntype RadioGroupLabelProps =\n | Readonly<{ label: ReactNode; accessibilityLabel?: string }>\n | Readonly<{ label?: never; accessibilityLabel: string }>;\n\nexport type RadioGroupProps = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n RadioGroupLabelProps &\n Readonly<{\n items: readonly RadioGroupItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n orientation?: SelectionGroupOrientation;\n /** Equal-width responsive options; uses the shared Grid contract instead of intrinsic row widths. */\n grid?: GridDescriptor;\n presentation?: SelectionGroupPresentation;\n size?: SelectionControlSize;\n /** Hide the decorative dot when a product preview already communicates the choice. */\n indicator?: \"default\" | \"none\";\n description?: ReactNode;\n error?: ReactNode;\n name?: string;\n required?: boolean;\n readOnly?: boolean;\n /** Visual preview only; the item label remains the accessible name. */\n renderLabel?: (item: RadioGroupItem) => ReactNode;\n renderLeading?: (\n item: RadioGroupItem,\n appearance: ChoiceLeadingRenderProps,\n ) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nfunction validateItems(\n component: \"RadioGroup\" | \"SegmentedControl\",\n items: readonly Readonly<{ value: string }>[] ,\n): void {\n if (items.length === 0) {\n throw new TypeError(`${component} requires at least one item`);\n }\n const values = new Set<string>();\n for (const item of items) {\n if (item.value.trim().length === 0) {\n throw new TypeError(`${component} item value must not be empty`);\n }\n if (values.has(item.value)) {\n throw new TypeError(`Duplicate ${component} item value: ${item.value}`);\n }\n values.add(item.value);\n }\n}\n\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n function RadioGroup(\n {\n label,\n accessibilityLabel,\n items,\n value: valueProp,\n defaultValue = null,\n onValueChange,\n orientation = selectionGroupRecipe.defaults.orientation,\n grid,\n presentation = selectionGroupRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n description,\n error,\n name,\n required = false,\n readOnly = false,\n indicator = \"default\",\n renderLeading,\n renderLabel,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n ) {\n validateItems(\"RadioGroup\", items);\n if (\n accessibilityLabel !== undefined &&\n accessibilityLabel.trim().length === 0\n ) throw new TypeError(\"RadioGroup accessibilityLabel must not be empty\");\n const resolvedLabel = label === undefined || label === null\n ? resolveControlAccessibleName(undefined, accessibilityLabel, \"RadioGroup\")\n : label;\n const descriptors = items.map((item) => ({\n id: item.value,\n label: typeof item.label === \"string\" ? item.label : item.value,\n ...(typeof item.description === \"string\"\n ? { description: item.description }\n : {}),\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string | null }> | null>(null);\n if (initialValueRef.current === null) {\n initialValueRef.current = {\n value: resolveInitialRadioValue(descriptors, defaultValue, required),\n };\n }\n const generatedName = useId().replaceAll(\":\", \"\");\n const [storedValue, setValue] = useControllableState<string | null>({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValueRef.current.value,\n ...(onValueChange === undefined\n ? {}\n : {\n onChange: (next: string | null) => {\n if (next !== null) onValueChange(next);\n },\n }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateRadioSelection(descriptors, storedValue);\n const value = controlled\n ? storedValue\n : reconcileRadioSelection(descriptors, storedValue, required);\n useEffect(() => {\n if (!controlled && value !== storedValue) setValue(value);\n }, [controlled, setValue, storedValue, value]);\n const descriptionId = `${generatedName}-radio-description`;\n const errorId = `${generatedName}-radio-error`;\n return (\n <fieldset\n {...props}\n ref={ref}\n style={{ ...style, ...layoutStyle }}\n className={classNames(\"hjm-radio-group\", className)}\n data-orientation={orientation}\n data-presentation={presentation}\n data-size={size}\n data-state={error ? \"invalid\" : disabled ? \"disabled\" : \"idle\"}\n disabled={disabled}\n aria-label={accessibilityLabel}\n aria-describedby={error ? errorId : description ? descriptionId : undefined}\n aria-readonly={readOnly || undefined}\n >\n <legend className={label == null ? \"hjm-visually-hidden\" : undefined}>\n {resolvedLabel}\n </legend>\n {description && !error ? <div id={descriptionId} className=\"hjm-field__description\">{description}</div> : null}\n <ChoiceItems grid={grid} className=\"hjm-radio-group__items\">\n {items.map((item) => {\n const selected = item.value === value;\n const choice = (\n <label\n key={item.value}\n className={item.action ? \"hjm-choice__target\" : \"hjm-choice\"}\n data-kind=\"radio\"\n data-state={selected ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n className=\"hjm-choice__input\"\n type=\"radio\"\n name={name ?? generatedName}\n value={item.value}\n checked={selected}\n disabled={item.disabled}\n required={required}\n {...(renderLabel && typeof item.label === \"string\" ? { \"aria-label\": item.label } : {})}\n aria-readonly={readOnly || undefined}\n onClick={readOnly ? (event) => event.preventDefault() : undefined}\n onChange={() => {\n if (!readOnly) setValue(item.value);\n }}\n />\n {indicator === \"default\" ? <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" /> : null}\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading(item, {\n selected,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{renderLabel?.(item) ?? item.label}</span>\n {item.description ? (\n <span className=\"hjm-choice__description\">{item.description}</span>\n ) : null}\n </span>\n </label>\n );\n if (!item.action) return choice;\n // A button inside a label can activate its radio. Keep two independent targets\n // inside one recipe-owned frame, including when the group is read-only.\n return <div key={item.value} className=\"hjm-choice hjm-choice--with-action\"\n data-kind=\"radio\" data-state={selected ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined} data-readonly={readOnly || undefined}\n data-presentation={presentation} data-size={size}>\n {choice}\n <span className=\"hjm-choice__action\"><Button tone=\"ghost\" size=\"small\"\n disabled={disabled || item.disabled || item.action.disabled}\n aria-label={item.action.accessibilityLabel} onClick={item.action.onAction}>{item.action.label}</Button></span>\n </div>;\n })}\n </ChoiceItems>\n <FieldError id={errorId} error={error} />\n </fieldset>\n );\n },\n);\n\nexport type SwitchProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"role\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n label: ReactNode;\n /** Supporting copy is described separately from the stable accessible name. */\n description?: ReactNode;\n presentation?: SwitchPresentation;\n /** Hide repeated row copy visually while preserving the switch's accessible name. */\n labelVisibility?: \"visible\" | \"hidden\";\n checked?: boolean;\n defaultChecked?: boolean;\n /** Track and thumb geometry from `switchRecipe.sizes`. */\n size?: SwitchSize;\n onCheckedChange?: (checked: boolean) => void;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n {\n label,\n labelVisibility = \"visible\",\n description,\n presentation = switchRecipe.presentationDefaults.web,\n checked: checkedProp,\n defaultChecked = false,\n size = switchRecipe.defaults.size,\n onCheckedChange,\n disabled,\n type = \"button\",\n className,\n onClick,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const labelId = useId();\n const descriptionId = useId();\n const hasDescription = description !== undefined && description !== null;\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined ? {} : { onChange: onCheckedChange }),\n });\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n type={type}\n role=\"switch\"\n className={classNames(\"hjm-switch\", className)}\n data-size={size}\n data-presentation={presentation}\n data-label-visibility={labelVisibility}\n // Two-line row geometry only applies when the copy is on screen; a hidden label (ListRow trailing) keeps 44.\n data-two-line={(hasDescription && labelVisibility === \"visible\") || undefined}\n aria-labelledby={props[\"aria-labelledby\"] ?? (props[\"aria-label\"] ? undefined : labelId)}\n aria-describedby={[props[\"aria-describedby\"], hasDescription ? descriptionId : undefined].filter(Boolean).join(\" \") || undefined}\n data-state={checked ? \"checked\" : \"unchecked\"}\n aria-checked={checked}\n disabled={disabled}\n onClick={(event) => {\n setChecked((current) => !current);\n onClick?.(event);\n }}\n >\n <span className=\"hjm-switch__track\" aria-hidden=\"true\">\n <span className=\"hjm-switch__thumb\" />\n </span>\n <span className={classNames(\"hjm-switch__copy\", labelVisibility === \"hidden\" && \"hjm-visually-hidden\")}>\n <span id={labelId}\n className={classNames(\"hjm-switch__label\", presentation === \"row\" && \"hjm-text\")}\n data-font-role={presentation === \"row\" ? \"ui\" : undefined}\n data-variant={presentation === \"row\" ? switchRecipe.rowLabelTextVariant : undefined}\n >{label}</span>\n {hasDescription ? <span id={descriptionId} className=\"hjm-switch__description\">{description}</span> : null}\n </span>\n </button>\n );\n});\n\nexport type SegmentedControlItem = Readonly<{\n value: string;\n label: ReactNode;\n /** Full spoken name when the visible label is abbreviated. */\n accessibilityLabel?: string;\n disabled?: boolean;\n}>;\n\nexport type SegmentedControlProps = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n label: string;\n items: readonly SegmentedControlItem[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n size?: SegmentedControlSize;\n presentation?: \"connected\" | \"pills\" | \"text\";\n /** Opaque primary/onPrimary selection, independent of presentation geometry. */\n selectionTone?: \"neutral\" | \"brand\";\n textEmphasis?: \"regular\" | \"strong\";\n /** Move only the selection artwork; radio semantics and hit targets stay fixed. */\n selectionMotion?: \"none\" | \"slide\";\n overflow?: \"wrap\" | \"scroll\";\n actions?: ReactNode;\n name?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const SegmentedControl = forwardRef<\n HTMLFieldSetElement,\n SegmentedControlProps\n>(function SegmentedControl(\n {\n label,\n items,\n value: valueProp,\n defaultValue,\n onValueChange,\n size = segmentedControlRecipe.defaults.size,\n presentation = \"connected\",\n selectionTone = \"neutral\",\n textEmphasis = \"strong\",\n selectionMotion: suppliedSelectionMotion,\n name,\n overflow = \"wrap\", actions,\n disabled = false,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const designProfile = useDesignProfileDefaults();\n const selectionMotion = presentation === \"text\" ? \"none\" : suppliedSelectionMotion ?? designProfile?.interactions.selectionMotion ?? \"none\";\n validateItems(\"SegmentedControl\", items);\n const descriptors = items.map((item) => ({\n id: item.value,\n label: typeof item.label === \"string\" ? item.label : item.value,\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string }> | null>(null);\n if (initialValueRef.current === null) {\n const initial = resolveInitialRadioValue(descriptors, defaultValue ?? null, true);\n if (initial === null) {\n throw new TypeError(\"SegmentedControl requires at least one enabled item\");\n }\n initialValueRef.current = { value: initial };\n }\n const generatedName = useId();\n const [storedValue, setValue] = useControllableState({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValueRef.current.value,\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateRadioSelection(descriptors, storedValue);\n const value = controlled\n ? storedValue\n : reconcileRadioSelection(descriptors, storedValue, true);\n if (value === null) {\n throw new TypeError(\"SegmentedControl requires at least one enabled item\");\n }\n useEffect(() => {\n if (!controlled && value !== storedValue) setValue(value);\n }, [controlled, setValue, storedValue, value]);\n const trackRef = useRef<HTMLDivElement>(null);\n const highlightRef = useRef<HTMLSpanElement>(null);\n const previousSelection = useRef<string | null>(null);\n useLayoutEffect(() => {\n const track = trackRef.current; const highlight = highlightRef.current;\n if (selectionMotion !== \"slide\" || !track || !highlight) { previousSelection.current = null; if (track) delete track.dataset.highlightReady; return; }\n const selected = Array.from(track.querySelectorAll<HTMLLabelElement>(\".hjm-segmented__item\")).find(item => item.dataset.state === \"checked\");\n if (!selected) return;\n const place = (animate: boolean) => {\n // CSS owns reduced motion (both provider and OS); no provider import is\n // added to this small selection entry just for decorative artwork.\n highlight.dataset.moving = animate && !document.hidden ? \"true\" : \"false\";\n const inset = presentation === \"pills\" ? Number.parseFloat(getComputedStyle(selected, \"::before\").top) || 0 : 0;\n Object.assign(highlight.style, { left: `${selected.offsetLeft}px`, top: `${selected.offsetTop + inset}px`, width: `${selected.offsetWidth}px`, height: `${selected.offsetHeight - inset * 2}px`, opacity: selected.dataset.disabled === \"true\" ? \"0.5\" : \"1\" });\n track.dataset.highlightReady = \"true\";\n };\n place(previousSelection.current !== null && previousSelection.current !== value);\n previousSelection.current = value;\n let bounds = `${selected.offsetLeft}:${selected.offsetTop}:${selected.offsetWidth}:${selected.offsetHeight}`;\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(() => {\n const next = `${selected.offsetLeft}:${selected.offsetTop}:${selected.offsetWidth}:${selected.offsetHeight}`;\n if (next !== bounds) { bounds = next; place(false); }\n });\n for (const item of track.querySelectorAll(\".hjm-segmented__item\")) observer?.observe(item);\n // Fixed-width RTL pills move when the track resizes without changing their\n // own size. Observing only items leaves the selected artwork at its old x.\n observer?.observe(track);\n const visibility = () => place(false);\n document.addEventListener(\"visibilitychange\", visibility);\n return () => { observer?.disconnect(); document.removeEventListener(\"visibilitychange\", visibility); };\n }, [value, items, presentation, selectionMotion, disabled]);\n const revealOption = (option: Element | null) => {\n if (overflow !== \"scroll\" || !option) return;\n const viewport = trackRef.current?.parentElement;\n if (!viewport) return;\n const frame = viewport.getBoundingClientRect(), bounds = option.getBoundingClientRect();\n const delta = bounds.left < frame.left ? bounds.left - frame.left : bounds.right > frame.right ? bounds.right - frame.right : 0;\n if (delta) viewport.scrollBy({ left: delta, behavior: \"instant\" });\n };\n useLayoutEffect(() => { revealOption(trackRef.current?.querySelector('[data-state=\"checked\"]') ?? null); }, [value, items, overflow]);\n const group = (\n <fieldset\n {...props}\n disabled={disabled}\n ref={ref}\n style={{ ...style, ...(actions == null ? layoutStyle : { flex: 1, minInlineSize: 0 }) }}\n className={classNames(\"hjm-segmented\", className)}\n data-overflow={overflow}\n onFocusCapture={event => { props.onFocusCapture?.(event); revealOption((event.target as HTMLElement).closest(\".hjm-segmented__item\")); }}\n data-size={size}\n data-presentation={presentation}\n data-selection-tone={selectionTone}\n data-text-emphasis={presentation === \"text\" ? textEmphasis : undefined}\n role={presentation === \"text\" ? \"radiogroup\" : undefined}\n >\n <legend className=\"hjm-visually-hidden\">{label}</legend>\n {/* The scroller is separate from the drawn track so a small track's options can extend their hit area past\n the track edge; a scrolling track would clip it (segmentedControlRecipe.sizes, 2026-10-17). */}\n <div className=\"hjm-segmented__scroller\">\n <div className=\"hjm-segmented__items\" ref={trackRef}>\n {selectionMotion === \"slide\" ? <span ref={highlightRef} className=\"hjm-segmented__highlight\" aria-hidden=\"true\" /> : null}\n {items.map((item) => (\n <label\n key={item.value}\n className=\"hjm-segmented__item\"\n data-state={item.value === value ? \"checked\" : \"unchecked\"}\n // A disabled group must look disabled like Native; fieldset[disabled] alone only\n // blocked input and the per-item styling never saw it (2026-10-17 review).\n data-disabled={item.disabled || disabled || undefined}\n >\n <input\n type=\"radio\"\n name={name ?? generatedName}\n value={item.value}\n aria-label={item.accessibilityLabel}\n checked={item.value === value}\n disabled={item.disabled || disabled}\n required\n onChange={() => setValue(item.value)}\n />\n <span>{item.label}</span>\n </label>\n ))}\n </div>\n </div>\n </fieldset>\n );\n return actions == null ? group : <div className=\"hjm-segmented-rail\" style={layoutStyle}>{group}{actions}</div>;\n});\n"]}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { Grid } from \"./layout.js\";\nimport type { GridDescriptor } from \"@hjmds/design-contracts/grid\";\nimport { Button } from \"./actions.js\";\nimport { useDesignProfileDefaults } from \"./internal.js\";\nimport {\n chipRecipe,\n iconRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n selectionGroupRecipe,\n switchRecipe,\n type SegmentedControlSize,\n type SelectionControlPresentation,\n type SelectionControlSize,\n type SelectionGroupOrientation,\n type SelectionGroupOverflow,\n type SelectionGroupPresentation,\n type SwitchSize,\n type SwitchPresentation,\n} from \"@hjmds/design-contracts/recipes\";\n\nexport type { SwitchSize, SwitchPresentation };\nimport {\n resolveControlAccessibleName,\n reconcileCheckboxSelection,\n reconcileRadioSelection,\n resolveInitialRadioValue,\n toggleCheckboxSelection,\n validateCheckboxSelection,\n validateRadioSelection,\n type CheckboxGroupSelection,\n type SelectionItemDescriptor,\n} from \"@hjmds/design-contracts/behaviors\";\nimport {\n forwardRef,\n useEffect,\n useLayoutEffect,\n useId,\n useRef,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type FieldsetHTMLAttributes,\n type InputHTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nimport { FieldError } from \"./internal/field-error.js\";\n\nexport type ChoiceLeadingRenderProps = Readonly<{\n selected: boolean;\n color: \"currentColor\";\n size: number;\n}>;\n\ntype ChipBaseProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onChange\" | \"onClick\" | \"size\"\n> &\n Readonly<{\n label: ReactNode;\n size?: keyof typeof chipRecipe.sizes;\n leading?: ReactNode;\n trailing?: ReactNode;\n renderSelectionIndicator?: (props: Readonly<{\n selected: boolean;\n color: \"currentColor\";\n size: number;\n }>) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\ntype ActionChipProps = Readonly<{\n selectionMode?: \"action\";\n selected?: never;\n onPress?: (event: MouseEvent<HTMLButtonElement>) => void;\n onSelectedChange?: never;\n}>;\n\ntype SelectionChipProps = Readonly<{\n selectionMode: \"single\" | \"multiple\";\n selected: boolean;\n onSelectedChange: (selected: boolean) => void;\n onPress?: (event: MouseEvent<HTMLButtonElement>) => void;\n}>;\n\nexport type ChipProps = ChipBaseProps & (ActionChipProps | SelectionChipProps);\n\n/** Action/filter chip with explicit selection semantics and no hidden state. */\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(function Chip(\n {\n label,\n size = chipRecipe.defaults.size,\n leading,\n trailing,\n renderSelectionIndicator,\n selectionMode = \"action\",\n selected,\n onSelectedChange,\n onPress,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const selectable = selectionMode !== \"action\";\n const active = selectable && selected === true;\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n aria-checked={selectable ? active : undefined}\n className={classNames(\"hjm-chip\", className)}\n data-selected={active || undefined}\n data-size={size}\n disabled={disabled}\n onClick={(event) => {\n onPress?.(event);\n if (!event.defaultPrevented && selectable) onSelectedChange?.(!active);\n }}\n role={selectionMode === \"single\" ? \"radio\" : selectionMode === \"multiple\" ? \"checkbox\" : undefined}\n type=\"button\"\n >\n {active ? (\n <span aria-hidden=\"true\" className=\"hjm-chip__indicator\">\n {renderSelectionIndicator?.({\n selected: true,\n color: \"currentColor\",\n size: iconRecipe.sizes[chipRecipe.selectionIndicator.glyph],\n }) ?? \"✓\"}\n </span>\n ) : null}\n {leading === undefined ? null : <span aria-hidden=\"true\" className=\"hjm-chip__leading\">{leading}</span>}\n <span className=\"hjm-chip__label\">{label}</span>\n {trailing === undefined ? null : <span aria-hidden=\"true\" className=\"hjm-chip__trailing\">{trailing}</span>}\n </button>\n );\n});\n\nexport type CheckboxProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"children\" | \"size\"\n> &\n Readonly<{\n label: ReactNode;\n description?: ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n presentation?: SelectionControlPresentation;\n size?: SelectionControlSize;\n renderLeading?: (appearance: ChoiceLeadingRenderProps) => ReactNode;\n /**\n * Canonical layout-only placement on the root `<label>`. `style` keeps going\n * to the native input, where it always went, so existing callers do not move.\n */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(\n {\n label,\n description,\n checked: checkedProp,\n defaultChecked = false,\n indeterminate = false,\n onCheckedChange,\n onChange,\n disabled,\n readOnly = false,\n presentation = selectionControlRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n renderLeading,\n className,\n onClick,\n layoutStyle,\n ...props\n },\n forwardedRef,\n ) {\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined ? {} : { onChange: onCheckedChange }),\n });\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n const selected = checked || indeterminate;\n const leadingSize = iconRecipe.sizes[selectionControlRecipe.leading.size];\n\n return (\n <label\n className={classNames(\"hjm-choice\", className)}\n style={layoutStyle}\n data-kind=\"checkbox\"\n data-state={indeterminate ? \"mixed\" : checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n {...props}\n ref={composeRefs(inputRef, forwardedRef)}\n className=\"hjm-choice__input\"\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n aria-readonly={readOnly || undefined}\n aria-checked={indeterminate ? \"mixed\" : checked}\n onClick={(event) => {\n onClick?.(event);\n if (readOnly) event.preventDefault();\n }}\n onChange={(event) => {\n if (!readOnly) setChecked(event.currentTarget.checked);\n onChange?.(event);\n }}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading({\n selected,\n color: \"currentColor\",\n size: leadingSize,\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{label}</span>\n {description ? <span className=\"hjm-choice__description\">{description}</span> : null}\n </span>\n </label>\n );\n },\n);\n\ntype RadioState =\n | Readonly<{\n checked: boolean;\n defaultChecked?: never;\n onCheckedChange(checked: true): void;\n }>\n | Readonly<{\n checked?: never;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: true) => void;\n }>;\n\nexport type RadioProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"children\" | \"size\"\n> &\n RadioState &\n Readonly<{\n label: ReactNode;\n description?: ReactNode;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n presentation?: SelectionControlPresentation;\n size?: SelectionControlSize;\n renderLeading?: (appearance: ChoiceLeadingRenderProps) => ReactNode;\n /**\n * Canonical layout-only placement on the root `<label>`. `style` keeps going\n * to the native input, where it always went, so existing callers do not move.\n */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\n/** Native radio item primitive. Use RadioGroup when the renderer owns group state. */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n label,\n description,\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n onChange,\n disabled,\n readOnly = false,\n presentation = selectionControlRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n renderLeading,\n className,\n onClick,\n layoutStyle,\n ...props\n },\n ref,\n) {\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined\n ? {}\n : { onChange: (next: boolean) => next && onCheckedChange(true) }),\n });\n return (\n <label\n className={classNames(\"hjm-choice\", className)}\n style={layoutStyle}\n data-kind=\"radio\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n {...props}\n ref={ref}\n className=\"hjm-choice__input\"\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n aria-readonly={readOnly || undefined}\n onClick={(event) => {\n onClick?.(event);\n if (readOnly) event.preventDefault();\n }}\n onChange={(event) => {\n if (!readOnly && event.currentTarget.checked) setChecked(true);\n onChange?.(event);\n }}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading({\n selected: checked,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{label}</span>\n {description ? <span className=\"hjm-choice__description\">{description}</span> : null}\n </span>\n </label>\n );\n});\n\n/**\n * Minimal horizontal scroll that shows `option` inside `viewport` with `inset` room around it. Shared by\n * SegmentedControl and CheckboxGroup `overflow=\"scroll\"`; rect deltas work in both reading directions.\n */\nfunction revealInScroller(viewport: HTMLElement, option: Element, inset = 0): void {\n const frame = viewport.getBoundingClientRect(), bounds = option.getBoundingClientRect();\n const delta = bounds.left - inset < frame.left ? bounds.left - inset - frame.left\n : bounds.right + inset > frame.right ? bounds.right + inset - frame.right : 0;\n if (delta) viewport.scrollBy({ left: delta, behavior: \"instant\" });\n}\n\nfunction ChoiceItems({ grid, className, children }: Readonly<{ grid: GridDescriptor | undefined; className: string; children: ReactNode }>) {\n return grid ? <Grid {...grid}>{children}</Grid> : <div className={className}>{children}</div>;\n}\n\nexport type CheckboxGroupItem<Key extends string = string> =\n SelectionItemDescriptor<Key>;\n\ntype CheckboxGroupBaseProps<Key extends string> = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n items: readonly CheckboxGroupItem<Key>[];\n label?: string;\n accessibilityLabel?: string;\n description?: ReactNode;\n error?: ReactNode;\n orientation?: SelectionGroupOrientation;\n /** Equal-width responsive options; uses the shared Grid contract instead of intrinsic row widths. */\n grid?: GridDescriptor;\n presentation?: SelectionGroupPresentation;\n /**\n * Chip line overflow, the same meaning as SegmentedControl `overflow`: `wrap` (default) breaks onto more lines,\n * `scroll` keeps one horizontal line and scrolls a focused chip into view. Requires `presentation=\"chips\"`\n * without `grid`.\n */\n overflow?: SelectionGroupOverflow;\n size?: SelectionControlSize;\n name?: string;\n required?: boolean;\n readOnly?: boolean;\n renderLeading?: (\n item: CheckboxGroupItem<Key>,\n appearance: ChoiceLeadingRenderProps,\n ) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport type CheckboxGroupProps<Key extends string = string> =\n CheckboxGroupBaseProps<Key> & CheckboxGroupSelection<Key>;\n\nfunction CheckboxGroupInner<Key extends string>(\n {\n items,\n label,\n accessibilityLabel,\n description,\n error,\n orientation = selectionGroupRecipe.defaults.orientation,\n grid,\n presentation = selectionGroupRecipe.defaults.presentation,\n overflow = selectionGroupRecipe.overflow.default,\n size = selectionControlRecipe.defaults.size,\n name,\n required = false,\n readOnly = false,\n renderLeading,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n }: CheckboxGroupProps<Key>,\n ref: React.ForwardedRef<HTMLFieldSetElement>,\n) {\n const resolvedLabel = resolveControlAccessibleName(\n label,\n accessibilityLabel,\n \"CheckboxGroup\",\n );\n if (overflow === \"scroll\" && (presentation !== \"chips\" || grid)) {\n throw new TypeError('CheckboxGroup overflow=\"scroll\" requires presentation=\"chips\" without grid');\n }\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [value, setValue] = useControllableState<ReadonlySet<Key>>({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: defaultValue ?? new Set<Key>(),\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateCheckboxSelection(items, value);\n const reconciledValue = controlled\n ? value\n : reconcileCheckboxSelection(items, value);\n useEffect(() => {\n if (!controlled && reconciledValue !== value) setValue(reconciledValue);\n }, [controlled, reconciledValue, setValue, value]);\n const generatedId = useId().replaceAll(\":\", \"\");\n const descriptionId = `${generatedId}-checkbox-group-description`;\n const errorId = `${generatedId}-checkbox-group-error`;\n return (\n <fieldset\n {...props}\n ref={ref}\n style={{ ...style, ...layoutStyle }}\n className={classNames(\"hjm-checkbox-group\", className)}\n data-orientation={orientation}\n data-presentation={presentation}\n data-overflow={presentation === \"chips\" ? overflow : undefined}\n onFocusCapture={(event) => {\n props.onFocusCapture?.(event);\n const option = (event.target as HTMLElement).closest(\".hjm-choice\");\n if (overflow === \"scroll\" && scrollerRef.current && option) revealInScroller(scrollerRef.current, option, selectionGroupRecipe.overflow.scrollInset);\n }}\n data-size={size}\n data-state={error ? \"invalid\" : disabled ? \"disabled\" : \"idle\"}\n disabled={disabled}\n aria-label={accessibilityLabel}\n aria-describedby={error ? errorId : description ? descriptionId : undefined}\n aria-required={required || undefined}\n aria-readonly={readOnly || undefined}\n >\n <legend className={label === undefined ? \"hjm-visually-hidden\" : undefined}>\n {label ?? resolvedLabel}\n </legend>\n {description && !error ? (\n <div id={descriptionId} className=\"hjm-field__description\">{description}</div>\n ) : null}\n {wrapChipScroller(overflow === \"scroll\", scrollerRef, <ChoiceItems grid={grid} className=\"hjm-checkbox-group__items\">\n {items.map((item) => {\n const checked = reconciledValue.has(item.id);\n return (\n <label\n key={item.id}\n className=\"hjm-choice\"\n data-kind=\"checkbox\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n className=\"hjm-choice__input\"\n type=\"checkbox\"\n name={name}\n value={item.id}\n checked={checked}\n disabled={item.disabled}\n aria-readonly={readOnly || undefined}\n onChange={() => {\n if (!readOnly) {\n setValue(toggleCheckboxSelection(items, reconciledValue, item.id));\n }\n }}\n onClick={readOnly ? (event) => event.preventDefault() : undefined}\n />\n <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" />\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading(item, {\n selected: checked,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{item.label}</span>\n {item.description ? (\n <span className=\"hjm-choice__description\">{item.description}</span>\n ) : null}\n </span>\n </label>\n );\n })}\n </ChoiceItems>)}\n <FieldError id={errorId} error={error} />\n </fieldset>\n );\n}\n\n/** The scrollport is separate from the items row so its inset keeps focus rings and chip hit slop unclipped. */\nfunction wrapChipScroller(scroll: boolean, ref: React.RefObject<HTMLDivElement | null>, items: ReactNode): ReactNode {\n return scroll ? <div ref={ref} className=\"hjm-checkbox-group__scroller\">{items}</div> : items;\n}\n\nexport const CheckboxGroup = forwardRef(CheckboxGroupInner) as <Key extends string = string>(\n props: CheckboxGroupProps<Key> & RefAttributes<HTMLFieldSetElement>,\n) => ReactElement;\n\nexport type RadioGroupItem = Readonly<{\n value: string;\n label: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n /** Independent sibling action; activating it never selects the option. */\n action?: Readonly<{ label: string; accessibilityLabel?: string; onAction: () => void; disabled?: boolean }>;\n}>;\n\ntype RadioGroupLabelProps =\n | Readonly<{ label: ReactNode; accessibilityLabel?: string }>\n | Readonly<{ label?: never; accessibilityLabel: string }>;\n\nexport type RadioGroupProps = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n RadioGroupLabelProps &\n Readonly<{\n items: readonly RadioGroupItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n orientation?: SelectionGroupOrientation;\n /** Equal-width responsive options; uses the shared Grid contract instead of intrinsic row widths. */\n grid?: GridDescriptor;\n presentation?: SelectionGroupPresentation;\n size?: SelectionControlSize;\n /** Hide the decorative dot when a product preview already communicates the choice. */\n indicator?: \"default\" | \"none\";\n description?: ReactNode;\n error?: ReactNode;\n name?: string;\n required?: boolean;\n readOnly?: boolean;\n /** Visual preview only; the item label remains the accessible name. */\n renderLabel?: (item: RadioGroupItem) => ReactNode;\n renderLeading?: (\n item: RadioGroupItem,\n appearance: ChoiceLeadingRenderProps,\n ) => ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nfunction validateItems(\n component: \"RadioGroup\" | \"SegmentedControl\",\n items: readonly Readonly<{ value: string }>[] ,\n): void {\n if (items.length === 0) {\n throw new TypeError(`${component} requires at least one item`);\n }\n const values = new Set<string>();\n for (const item of items) {\n if (item.value.trim().length === 0) {\n throw new TypeError(`${component} item value must not be empty`);\n }\n if (values.has(item.value)) {\n throw new TypeError(`Duplicate ${component} item value: ${item.value}`);\n }\n values.add(item.value);\n }\n}\n\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n function RadioGroup(\n {\n label,\n accessibilityLabel,\n items,\n value: valueProp,\n defaultValue = null,\n onValueChange,\n orientation = selectionGroupRecipe.defaults.orientation,\n grid,\n presentation = selectionGroupRecipe.defaults.presentation,\n size = selectionControlRecipe.defaults.size,\n description,\n error,\n name,\n required = false,\n readOnly = false,\n indicator = \"default\",\n renderLeading,\n renderLabel,\n disabled,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n ) {\n validateItems(\"RadioGroup\", items);\n if (\n accessibilityLabel !== undefined &&\n accessibilityLabel.trim().length === 0\n ) throw new TypeError(\"RadioGroup accessibilityLabel must not be empty\");\n const resolvedLabel = label === undefined || label === null\n ? resolveControlAccessibleName(undefined, accessibilityLabel, \"RadioGroup\")\n : label;\n const descriptors = items.map((item) => ({\n id: item.value,\n label: typeof item.label === \"string\" ? item.label : item.value,\n ...(typeof item.description === \"string\"\n ? { description: item.description }\n : {}),\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string | null }> | null>(null);\n if (initialValueRef.current === null) {\n initialValueRef.current = {\n value: resolveInitialRadioValue(descriptors, defaultValue, required),\n };\n }\n const generatedName = useId().replaceAll(\":\", \"\");\n const [storedValue, setValue] = useControllableState<string | null>({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValueRef.current.value,\n ...(onValueChange === undefined\n ? {}\n : {\n onChange: (next: string | null) => {\n if (next !== null) onValueChange(next);\n },\n }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateRadioSelection(descriptors, storedValue);\n const value = controlled\n ? storedValue\n : reconcileRadioSelection(descriptors, storedValue, required);\n useEffect(() => {\n if (!controlled && value !== storedValue) setValue(value);\n }, [controlled, setValue, storedValue, value]);\n const descriptionId = `${generatedName}-radio-description`;\n const errorId = `${generatedName}-radio-error`;\n return (\n <fieldset\n {...props}\n ref={ref}\n style={{ ...style, ...layoutStyle }}\n className={classNames(\"hjm-radio-group\", className)}\n data-orientation={orientation}\n data-presentation={presentation}\n data-size={size}\n data-state={error ? \"invalid\" : disabled ? \"disabled\" : \"idle\"}\n disabled={disabled}\n aria-label={accessibilityLabel}\n aria-describedby={error ? errorId : description ? descriptionId : undefined}\n aria-readonly={readOnly || undefined}\n >\n <legend className={label == null ? \"hjm-visually-hidden\" : undefined}>\n {resolvedLabel}\n </legend>\n {description && !error ? <div id={descriptionId} className=\"hjm-field__description\">{description}</div> : null}\n <ChoiceItems grid={grid} className=\"hjm-radio-group__items\">\n {items.map((item) => {\n const selected = item.value === value;\n const choice = (\n <label\n key={item.value}\n className={item.action ? \"hjm-choice__target\" : \"hjm-choice\"}\n data-kind=\"radio\"\n data-state={selected ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined}\n data-readonly={readOnly || undefined}\n data-presentation={presentation}\n data-size={size}\n >\n <input\n className=\"hjm-choice__input\"\n type=\"radio\"\n name={name ?? generatedName}\n value={item.value}\n checked={selected}\n disabled={item.disabled}\n required={required}\n {...(renderLabel && typeof item.label === \"string\" ? { \"aria-label\": item.label } : {})}\n aria-readonly={readOnly || undefined}\n onClick={readOnly ? (event) => event.preventDefault() : undefined}\n onChange={() => {\n if (!readOnly) setValue(item.value);\n }}\n />\n {indicator === \"default\" ? <span className=\"hjm-choice__indicator\" aria-hidden=\"true\" /> : null}\n {renderLeading ? (\n <span className=\"hjm-choice__leading\" aria-hidden=\"true\">\n {renderLeading(item, {\n selected,\n color: \"currentColor\",\n size: iconRecipe.sizes[selectionControlRecipe.leading.size],\n })}\n </span>\n ) : null}\n <span className=\"hjm-choice__copy\">\n <span>{renderLabel?.(item) ?? item.label}</span>\n {item.description ? (\n <span className=\"hjm-choice__description\">{item.description}</span>\n ) : null}\n </span>\n </label>\n );\n if (!item.action) return choice;\n // A button inside a label can activate its radio. Keep two independent targets\n // inside one recipe-owned frame, including when the group is read-only.\n return <div key={item.value} className=\"hjm-choice hjm-choice--with-action\"\n data-kind=\"radio\" data-state={selected ? \"checked\" : \"unchecked\"}\n data-disabled={item.disabled || undefined} data-readonly={readOnly || undefined}\n data-presentation={presentation} data-size={size}>\n {choice}\n <span className=\"hjm-choice__action\"><Button tone=\"ghost\" size=\"small\"\n disabled={disabled || item.disabled || item.action.disabled}\n aria-label={item.action.accessibilityLabel} onClick={item.action.onAction}>{item.action.label}</Button></span>\n </div>;\n })}\n </ChoiceItems>\n <FieldError id={errorId} error={error} />\n </fieldset>\n );\n },\n);\n\nexport type SwitchProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"role\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n label: ReactNode;\n /** Supporting copy is described separately from the stable accessible name. */\n description?: ReactNode;\n presentation?: SwitchPresentation;\n /** Hide repeated row copy visually while preserving the switch's accessible name. */\n labelVisibility?: \"visible\" | \"hidden\";\n checked?: boolean;\n defaultChecked?: boolean;\n /** Track and thumb geometry from `switchRecipe.sizes`. */\n size?: SwitchSize;\n onCheckedChange?: (checked: boolean) => void;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n {\n label,\n labelVisibility = \"visible\",\n description,\n presentation = switchRecipe.presentationDefaults.web,\n checked: checkedProp,\n defaultChecked = false,\n size = switchRecipe.defaults.size,\n onCheckedChange,\n disabled,\n type = \"button\",\n className,\n onClick,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const labelId = useId();\n const descriptionId = useId();\n const hasDescription = description !== undefined && description !== null;\n const [checked, setChecked] = useControllableState({\n ...(checkedProp === undefined ? {} : { value: checkedProp }),\n defaultValue: defaultChecked,\n ...(onCheckedChange === undefined ? {} : { onChange: onCheckedChange }),\n });\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n type={type}\n role=\"switch\"\n className={classNames(\"hjm-switch\", className)}\n data-size={size}\n data-presentation={presentation}\n data-label-visibility={labelVisibility}\n // Two-line row geometry only applies when the copy is on screen; a hidden label (ListRow trailing) keeps 44.\n data-two-line={(hasDescription && labelVisibility === \"visible\") || undefined}\n aria-labelledby={props[\"aria-labelledby\"] ?? (props[\"aria-label\"] ? undefined : labelId)}\n aria-describedby={[props[\"aria-describedby\"], hasDescription ? descriptionId : undefined].filter(Boolean).join(\" \") || undefined}\n data-state={checked ? \"checked\" : \"unchecked\"}\n aria-checked={checked}\n disabled={disabled}\n onClick={(event) => {\n setChecked((current) => !current);\n onClick?.(event);\n }}\n >\n <span className=\"hjm-switch__track\" aria-hidden=\"true\">\n <span className=\"hjm-switch__thumb\" />\n </span>\n <span className={classNames(\"hjm-switch__copy\", labelVisibility === \"hidden\" && \"hjm-visually-hidden\")}>\n <span id={labelId}\n className={classNames(\"hjm-switch__label\", presentation === \"row\" && \"hjm-text\")}\n data-font-role={presentation === \"row\" ? \"ui\" : undefined}\n data-variant={presentation === \"row\" ? switchRecipe.rowLabelTextVariant : undefined}\n >{label}</span>\n {hasDescription ? <span id={descriptionId} className=\"hjm-switch__description\">{description}</span> : null}\n </span>\n </button>\n );\n});\n\nexport type SegmentedControlItem = Readonly<{\n value: string;\n label: ReactNode;\n /** Full spoken name when the visible label is abbreviated. */\n accessibilityLabel?: string;\n disabled?: boolean;\n}>;\n\nexport type SegmentedControlProps = Omit<\n FieldsetHTMLAttributes<HTMLFieldSetElement>,\n \"defaultValue\" | \"onChange\" | \"value\"\n> &\n Readonly<{\n label: string;\n items: readonly SegmentedControlItem[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n size?: SegmentedControlSize;\n presentation?: \"connected\" | \"pills\" | \"text\";\n /** Opaque primary/onPrimary selection, independent of presentation geometry. */\n selectionTone?: \"neutral\" | \"brand\";\n textEmphasis?: \"regular\" | \"strong\";\n /** Move only the selection artwork; radio semantics and hit targets stay fixed. */\n selectionMotion?: \"none\" | \"slide\";\n overflow?: \"wrap\" | \"scroll\";\n actions?: ReactNode;\n name?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const SegmentedControl = forwardRef<\n HTMLFieldSetElement,\n SegmentedControlProps\n>(function SegmentedControl(\n {\n label,\n items,\n value: valueProp,\n defaultValue,\n onValueChange,\n size = segmentedControlRecipe.defaults.size,\n presentation = \"connected\",\n // 2026-10-23 user review: filled brand selection is the default; neutral remains opt-in.\n selectionTone = \"brand\",\n textEmphasis = \"strong\",\n selectionMotion: suppliedSelectionMotion,\n name,\n overflow = \"wrap\", actions,\n disabled = false,\n className,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n const designProfile = useDesignProfileDefaults();\n const selectionMotion = presentation === \"text\" ? \"none\" : suppliedSelectionMotion ?? designProfile?.interactions.selectionMotion ?? \"none\";\n validateItems(\"SegmentedControl\", items);\n const descriptors = items.map((item) => ({\n id: item.value,\n label: typeof item.label === \"string\" ? item.label : item.value,\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string }> | null>(null);\n if (initialValueRef.current === null) {\n const initial = resolveInitialRadioValue(descriptors, defaultValue ?? null, true);\n if (initial === null) {\n throw new TypeError(\"SegmentedControl requires at least one enabled item\");\n }\n initialValueRef.current = { value: initial };\n }\n const generatedName = useId();\n const [storedValue, setValue] = useControllableState({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValueRef.current.value,\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n if (controlled) validateRadioSelection(descriptors, storedValue);\n const value = controlled\n ? storedValue\n : reconcileRadioSelection(descriptors, storedValue, true);\n if (value === null) {\n throw new TypeError(\"SegmentedControl requires at least one enabled item\");\n }\n useEffect(() => {\n if (!controlled && value !== storedValue) setValue(value);\n }, [controlled, setValue, storedValue, value]);\n const trackRef = useRef<HTMLDivElement>(null);\n const highlightRef = useRef<HTMLSpanElement>(null);\n const previousSelection = useRef<string | null>(null);\n useLayoutEffect(() => {\n const track = trackRef.current; const highlight = highlightRef.current;\n if (selectionMotion !== \"slide\" || !track || !highlight) { previousSelection.current = null; if (track) delete track.dataset.highlightReady; return; }\n const selected = Array.from(track.querySelectorAll<HTMLLabelElement>(\".hjm-segmented__item\")).find(item => item.dataset.state === \"checked\");\n if (!selected) return;\n const place = (animate: boolean) => {\n // CSS owns reduced motion (both provider and OS); no provider import is\n // added to this small selection entry just for decorative artwork.\n highlight.dataset.moving = animate && !document.hidden ? \"true\" : \"false\";\n const inset = presentation === \"pills\" ? Number.parseFloat(getComputedStyle(selected, \"::before\").top) || 0 : 0;\n Object.assign(highlight.style, { left: `${selected.offsetLeft}px`, top: `${selected.offsetTop + inset}px`, width: `${selected.offsetWidth}px`, height: `${selected.offsetHeight - inset * 2}px`, opacity: selected.dataset.disabled === \"true\" ? \"0.5\" : \"1\" });\n track.dataset.highlightReady = \"true\";\n };\n place(previousSelection.current !== null && previousSelection.current !== value);\n previousSelection.current = value;\n let bounds = `${selected.offsetLeft}:${selected.offsetTop}:${selected.offsetWidth}:${selected.offsetHeight}`;\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(() => {\n const next = `${selected.offsetLeft}:${selected.offsetTop}:${selected.offsetWidth}:${selected.offsetHeight}`;\n if (next !== bounds) { bounds = next; place(false); }\n });\n for (const item of track.querySelectorAll(\".hjm-segmented__item\")) observer?.observe(item);\n // Fixed-width RTL pills move when the track resizes without changing their\n // own size. Observing only items leaves the selected artwork at its old x.\n observer?.observe(track);\n const visibility = () => place(false);\n document.addEventListener(\"visibilitychange\", visibility);\n return () => { observer?.disconnect(); document.removeEventListener(\"visibilitychange\", visibility); };\n }, [value, items, presentation, selectionMotion, disabled]);\n const revealOption = (option: Element | null) => {\n if (overflow !== \"scroll\" || !option) return;\n const viewport = trackRef.current?.parentElement;\n if (viewport) revealInScroller(viewport, option);\n };\n useLayoutEffect(() => { revealOption(trackRef.current?.querySelector('[data-state=\"checked\"]') ?? null); }, [value, items, overflow]);\n const group = (\n <fieldset\n {...props}\n disabled={disabled}\n ref={ref}\n style={{ ...style, ...(actions == null ? layoutStyle : { flex: 1, minInlineSize: 0 }) }}\n className={classNames(\"hjm-segmented\", className)}\n data-overflow={overflow}\n onFocusCapture={event => { props.onFocusCapture?.(event); revealOption((event.target as HTMLElement).closest(\".hjm-segmented__item\")); }}\n data-size={size}\n data-presentation={presentation}\n data-selection-tone={selectionTone}\n data-text-emphasis={presentation === \"text\" ? textEmphasis : undefined}\n role={presentation === \"text\" ? \"radiogroup\" : undefined}\n >\n <legend className=\"hjm-visually-hidden\">{label}</legend>\n {/* The scroller is separate from the drawn track so a small track's options can extend their hit area past\n the track edge; a scrolling track would clip it (segmentedControlRecipe.sizes, 2026-10-17). */}\n <div className=\"hjm-segmented__scroller\">\n <div className=\"hjm-segmented__items\" ref={trackRef}>\n {selectionMotion === \"slide\" ? <span ref={highlightRef} className=\"hjm-segmented__highlight\" aria-hidden=\"true\" /> : null}\n {items.map((item) => (\n <label\n key={item.value}\n className=\"hjm-segmented__item\"\n data-state={item.value === value ? \"checked\" : \"unchecked\"}\n // A disabled group must look disabled like Native; fieldset[disabled] alone only\n // blocked input and the per-item styling never saw it (2026-10-17 review).\n data-disabled={item.disabled || disabled || undefined}\n >\n <input\n type=\"radio\"\n name={name ?? generatedName}\n value={item.value}\n aria-label={item.accessibilityLabel}\n checked={item.value === value}\n disabled={item.disabled || disabled}\n required\n onChange={() => setValue(item.value)}\n />\n <span>{item.label}</span>\n </label>\n ))}\n </div>\n </div>\n </fieldset>\n );\n return actions == null ? group : <div className=\"hjm-segmented-rail\" style={layoutStyle}>{group}{actions}</div>;\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"side-panel.d.ts","sourceRoot":"","sources":["../src/side-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACnB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,0BAA0B,CAAC,GACrE,QAAQ,CAAC;IACP,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtD,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACrD,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,sBAAsB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACnF,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEL,eAAO,MAAM,SAAS,2GAyLpB,CAAC"}
1
+ {"version":3,"file":"side-panel.d.ts","sourceRoot":"","sources":["../src/side-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACnB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,0BAA0B,CAAC,GACrE,QAAQ,CAAC;IACP,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtD,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACrD,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,sBAAsB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACnF,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEL,eAAO,MAAM,SAAS,2GAyLpB,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
3
  import { canDismissSidePanel, sidePanelBehaviorDefaults, sidePanelRecipe, } from "@hjmds/design-contracts/components/side-panel";
3
4
  import { forwardRef, useEffect, useId, useRef, } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"side-panel.js","sourceRoot":"","sources":["../src/side-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n canDismissSidePanel,\n sidePanelBehaviorDefaults,\n sidePanelRecipe,\n type SidePanelDismissPolicy,\n type SidePanelDismissReason,\n type SidePanelEdge,\n type SidePanelOpenChangeDetails,\n type SidePanelSize,\n} from \"@hjmds/design-contracts/components/side-panel\";\nimport {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { classNames, composeRefs } from \"./internal.js\";\nimport {\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n} from \"./modal.js\";\n\n// No `layoutStyle`: an edge-attached portal panel; only its optional trigger is in flow, and the caller places that.\nexport type SidePanelProps = ModalOpenState<SidePanelOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n /** Logical docking direction; mirrors automatically in RTL. */\n edge?: SidePanelEdge;\n size?: SidePanelSize;\n busy?: boolean;\n /**\n * The whole policy, not `Partial<...>`: the contract splits this union on\n * `modal` so that `{ modal: false, outsideDismiss: true }` cannot be\n * written at all. `Partial<SidePanelDismissPolicy>` would collapse both\n * branches into optional fields and hand that invalid combination back.\n */\n dismissPolicy?: SidePanelDismissPolicy;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the panel has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SidePanelDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const SidePanel = forwardRef<HTMLDivElement, SidePanelProps>(function SidePanel(\n {\n trigger,\n title,\n description,\n children,\n footer,\n edge = sidePanelRecipe.defaults.edge,\n size = sidePanelRecipe.defaults.size,\n busy = false,\n dismissPolicy = sidePanelBehaviorDefaults,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const policy = dismissPolicy;\n const modal = policy.modal;\n const [open, changeOpen] = useOpenState<SidePanelOpenChangeDetails>({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const nonModalFocusWithin = useRef(false);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-side-panel`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n\n const dismissReasonRef = useRef<SidePanelDismissReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const requestClose = (reason: SidePanelDismissReason) => {\n if (!canDismissSidePanel(reason, busy, policy)) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n useEffect(() => {\n if (open) {\n wasOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!wasOpenRef.current) return;\n /*\n No `createSheetLifecycle` counterpart, per docs/side-panel.md: that counter\n exists for Android's persistently mounted native Modal. Here the panel is\n unmounted with the render that closed it, so \"removed\" is already true when\n this effect runs — including under reduced motion, where there is no exit\n transition to wait for. An owner that closed the panel without a user\n gesture is reported as `programmatic`.\n */\n wasOpenRef.current = false;\n // A non-modal panel does not trap focus, but closing its focused subtree still needs a keyboard return point.\n if (!modal && nonModalFocusWithin.current && document.activeElement === document.body) {\n (returnFocusRef?.current ?? triggerRef.current)?.focus();\n }\n nonModalFocusWithin.current = false;\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n dismissCompleteRef.current?.({ reason });\n }, [open]);\n\n useModalFocus({\n // Only modal panels trap focus and lock scroll. A non-modal panel leaves the\n // rest of the page live and tabbable, so it must not enter the modal stack.\n active: open && modal,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n const escapeRef = useRef(() => requestClose(\"escape\"));\n escapeRef.current = () => requestClose(\"escape\");\n useEffect(() => {\n if (!open || modal) return;\n // Escape dismisses non-modal panels too, but only while focus is inside them\n // — the live page behind keeps its own Escape handling.\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing || event.keyCode === 229) return;\n // Read the ref per event: the portal mounts one commit after this effect,\n // so a value captured here would still be null for the panel's first keys.\n if (!(event.target instanceof Node) || contentRef.current?.contains(event.target) !== true) return;\n event.preventDefault();\n escapeRef.current();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, modal]);\n\n const style = {\n zIndex: getModalLayer(modalPriority),\n \"--hjm-side-panel-size\": `${sidePanelRecipe.sizes[size]}px`,\n } as CSSProperties;\n const panel = (\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n // A modal panel is a dialog; a non-modal one stays a complementary landmark\n // so assistive technology can move past it like any other page region.\n role={modal ? \"dialog\" : \"complementary\"}\n aria-modal={modal || undefined}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n onFocusCapture={() => { nonModalFocusWithin.current = true; }}\n onBlurCapture={(event) => {\n if (event.relatedTarget instanceof Node && !event.currentTarget.contains(event.relatedTarget)) nonModalFocusWithin.current = false;\n }}\n className={classNames(\"hjm-side-panel\", className)}\n data-hjm-modal-content={modal ? \"\" : undefined}\n data-edge={edge}\n data-size={size}\n data-modal={modal}\n data-state={busy ? \"busy\" : \"idle\"}\n style={modal ? undefined : style}\n >\n <header className=\"hjm-side-panel__header\">\n <div>\n <h2 id={titleId} className=\"hjm-side-panel__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-side-panel__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-side-panel__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-side-panel__footer\">{footer}</footer> : null}\n </div>\n );\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n {modal ? (\n <div\n className=\"hjm-overlay hjm-side-panel-positioner\"\n data-kind=\"side-panel\"\n data-modal-priority={modalPriority}\n data-edge={edge}\n data-state=\"open\"\n style={style}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n {panel}\n </div>\n ) : panel}\n </HjmPortal>\n ) : null}\n </>\n );\n});\n"]}
1
+ {"version":3,"file":"side-panel.js","sourceRoot":"","sources":["../src/side-panel.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport {\n canDismissSidePanel,\n sidePanelBehaviorDefaults,\n sidePanelRecipe,\n type SidePanelDismissPolicy,\n type SidePanelDismissReason,\n type SidePanelEdge,\n type SidePanelOpenChangeDetails,\n type SidePanelSize,\n} from \"@hjmds/design-contracts/components/side-panel\";\nimport {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { classNames, composeRefs } from \"./internal.js\";\nimport {\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n} from \"./modal.js\";\n\n// No `layoutStyle`: an edge-attached portal panel; only its optional trigger is in flow, and the caller places that.\nexport type SidePanelProps = ModalOpenState<SidePanelOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n /** Logical docking direction; mirrors automatically in RTL. */\n edge?: SidePanelEdge;\n size?: SidePanelSize;\n busy?: boolean;\n /**\n * The whole policy, not `Partial<...>`: the contract splits this union on\n * `modal` so that `{ modal: false, outsideDismiss: true }` cannot be\n * written at all. `Partial<SidePanelDismissPolicy>` would collapse both\n * branches into optional fields and hand that invalid combination back.\n */\n dismissPolicy?: SidePanelDismissPolicy;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the panel has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SidePanelDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const SidePanel = forwardRef<HTMLDivElement, SidePanelProps>(function SidePanel(\n {\n trigger,\n title,\n description,\n children,\n footer,\n edge = sidePanelRecipe.defaults.edge,\n size = sidePanelRecipe.defaults.size,\n busy = false,\n dismissPolicy = sidePanelBehaviorDefaults,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const policy = dismissPolicy;\n const modal = policy.modal;\n const [open, changeOpen] = useOpenState<SidePanelOpenChangeDetails>({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const nonModalFocusWithin = useRef(false);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-side-panel`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n\n const dismissReasonRef = useRef<SidePanelDismissReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const requestClose = (reason: SidePanelDismissReason) => {\n if (!canDismissSidePanel(reason, busy, policy)) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n useEffect(() => {\n if (open) {\n wasOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!wasOpenRef.current) return;\n /*\n No `createSheetLifecycle` counterpart, per docs/side-panel.md: that counter\n exists for Android's persistently mounted native Modal. Here the panel is\n unmounted with the render that closed it, so \"removed\" is already true when\n this effect runs — including under reduced motion, where there is no exit\n transition to wait for. An owner that closed the panel without a user\n gesture is reported as `programmatic`.\n */\n wasOpenRef.current = false;\n // A non-modal panel does not trap focus, but closing its focused subtree still needs a keyboard return point.\n if (!modal && nonModalFocusWithin.current && document.activeElement === document.body) {\n (returnFocusRef?.current ?? triggerRef.current)?.focus();\n }\n nonModalFocusWithin.current = false;\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n dismissCompleteRef.current?.({ reason });\n }, [open]);\n\n useModalFocus({\n // Only modal panels trap focus and lock scroll. A non-modal panel leaves the\n // rest of the page live and tabbable, so it must not enter the modal stack.\n active: open && modal,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n const escapeRef = useRef(() => requestClose(\"escape\"));\n escapeRef.current = () => requestClose(\"escape\");\n useEffect(() => {\n if (!open || modal) return;\n // Escape dismisses non-modal panels too, but only while focus is inside them\n // — the live page behind keeps its own Escape handling.\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing || event.keyCode === 229) return;\n // Read the ref per event: the portal mounts one commit after this effect,\n // so a value captured here would still be null for the panel's first keys.\n if (!(event.target instanceof Node) || contentRef.current?.contains(event.target) !== true) return;\n event.preventDefault();\n escapeRef.current();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, modal]);\n\n const style = {\n zIndex: getModalLayer(modalPriority),\n \"--hjm-side-panel-size\": `${sidePanelRecipe.sizes[size]}px`,\n } as CSSProperties;\n const panel = (\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n // A modal panel is a dialog; a non-modal one stays a complementary landmark\n // so assistive technology can move past it like any other page region.\n role={modal ? \"dialog\" : \"complementary\"}\n aria-modal={modal || undefined}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n onFocusCapture={() => { nonModalFocusWithin.current = true; }}\n onBlurCapture={(event) => {\n if (event.relatedTarget instanceof Node && !event.currentTarget.contains(event.relatedTarget)) nonModalFocusWithin.current = false;\n }}\n className={classNames(\"hjm-side-panel\", className)}\n data-hjm-modal-content={modal ? \"\" : undefined}\n data-edge={edge}\n data-size={size}\n data-modal={modal}\n data-state={busy ? \"busy\" : \"idle\"}\n style={modal ? undefined : style}\n >\n <header className=\"hjm-side-panel__header\">\n <div>\n <h2 id={titleId} className=\"hjm-side-panel__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-side-panel__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-side-panel__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-side-panel__footer\">{footer}</footer> : null}\n </div>\n );\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n {modal ? (\n <div\n className=\"hjm-overlay hjm-side-panel-positioner\"\n data-kind=\"side-panel\"\n data-modal-priority={modalPriority}\n data-edge={edge}\n data-state=\"open\"\n style={style}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n {panel}\n </div>\n ) : panel}\n </HjmPortal>\n ) : null}\n </>\n );\n});\n"]}
package/dist/sidebar.d.ts CHANGED
@@ -1,11 +1,24 @@
1
- import { type SidebarDescriptor, type SidebarItemDescriptor } from "@hjmds/design-contracts/components/sidebar";
2
- import { type ReactNode } from "react";
1
+ import { type SidebarDescriptor, type SidebarItemDescriptor, type SidebarSize } from "@hjmds/design-contracts/components/sidebar";
2
+ import { type AnchorHTMLAttributes, type ReactElement, type ReactNode } from "react";
3
3
  import type { HjmCompositionStyleProp } from "./composition-style.js";
4
4
  export type SidebarAppearance = "standard" | "bounce" | "hook" | "proximity";
5
+ export type { SidebarSize };
6
+ /**
7
+ * Anchor props HJM prepared for one enabled item with a destination. A router adapter spreads all of them onto its
8
+ * own link (for example Next.js `Link`): `onClick` keeps the disabled guard, bounce and `onNavigate` before the
9
+ * router navigates, and `aria-current`/collapsed `aria-label` stay HJM-owned.
10
+ */
11
+ export type SidebarLinkRenderProps = AnchorHTMLAttributes<HTMLAnchorElement> & Readonly<{
12
+ href: string;
13
+ className: string;
14
+ children: ReactNode;
15
+ }>;
5
16
  export type SidebarProps<Id extends string = string, GroupId extends string = string> = Readonly<{
6
17
  descriptor: SidebarDescriptor<Id, GroupId>;
7
18
  /** Decoration only; link hit areas and document-order keyboard navigation stay fixed. */
8
19
  appearance?: SidebarAppearance;
20
+ /** Open width step: `regular` 260 (default) or `compact` 220 (`sidebarRecipe.sizes`). The collapsed rail stays 72. */
21
+ size?: SidebarSize;
9
22
  collapsed?: boolean;
10
23
  defaultCollapsed?: boolean;
11
24
  onCollapsedChange?: (collapsed: boolean) => void;
@@ -14,7 +27,13 @@ export type SidebarProps<Id extends string = string, GroupId extends string = st
14
27
  collapse: string;
15
28
  expand: string;
16
29
  }>;
30
+ /** Called on item activation, before a `renderLink` router navigates. A plain `href` still navigates natively. */
17
31
  onNavigate?: (id: Id) => void;
32
+ /**
33
+ * Framework navigation adapter (same contract as `BottomNavigation.renderLink`) for items with a destination.
34
+ * Disabled items and items without a destination keep HJM's own anchor so the adapter never receives a dead link.
35
+ */
36
+ renderLink?: (props: SidebarLinkRenderProps) => ReactElement;
18
37
  /** Product-owned icon per item; required for the collapsed rail to stay usable. */
19
38
  renderIcon?: (item: SidebarItemDescriptor<Id>) => ReactNode;
20
39
  renderBadge?: (count: number, item: SidebarItemDescriptor<Id>) => ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../src/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE7E,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC/F,UAAU,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,yFAAyF;IACzF,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,+DAA+D;IAC/D,cAAc,CAAC,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;IAC9B,mFAAmF;IACnF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,eAAO,MAAM,OAAO,EAoHd,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,EAChE,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../src/sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAGL,KAAK,oBAAoB,EAIzB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAC7E,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAC1E,QAAQ,CAAC;IACP,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC,CAAC;AAEL,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC/F,UAAU,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,yFAAyF;IACzF,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,sHAAsH;IACtH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,+DAA+D;IAC/D,cAAc,CAAC,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,kHAAkH;IAClH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,YAAY,CAAC;IAC7D,mFAAmF;IACnF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,eAAO,MAAM,OAAO,EA+Hd,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,EAChE,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC"}
package/dist/sidebar.js CHANGED
@@ -1,9 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import { sidebarDefaults, sidebarRecipe, validateSidebarDescriptor, } from "@hjmds/design-contracts/components/sidebar";
3
4
  import { forwardRef, useState, } from "react";
4
5
  import { useOptionalHjmTheme } from "./provider.js";
5
6
  import { classNames, useControllableState } from "./internal.js";
6
- export const Sidebar = forwardRef(function Sidebar({ descriptor, appearance = "standard", collapsed: controlledCollapsed, defaultCollapsed, onCollapsedChange, collapseLabels, onNavigate, renderIcon, renderBadge, className, layoutStyle, }, forwardedRef) {
7
+ export const Sidebar = forwardRef(function Sidebar({ descriptor, appearance = "standard", size = sidebarDefaults.size, collapsed: controlledCollapsed, defaultCollapsed, onCollapsedChange, collapseLabels, onNavigate, renderLink, renderIcon, renderBadge, className, layoutStyle, }, forwardedRef) {
7
8
  validateSidebarDescriptor(descriptor);
8
9
  const theme = useOptionalHjmTheme();
9
10
  const animate = theme !== null && !theme.environment.reducedMotion;
@@ -13,7 +14,7 @@ export const Sidebar = forwardRef(function Sidebar({ descriptor, appearance = "s
13
14
  defaultValue: defaultCollapsed ?? sidebarDefaults.collapsed,
14
15
  ...(onCollapsedChange === undefined ? {} : { onChange: onCollapsedChange }),
15
16
  });
16
- return (_jsxs("nav", { ref: forwardedRef, "aria-label": descriptor.accessibilityLabel, className: classNames("hjm-sidebar", className), "data-collapsed": collapsed || undefined, "data-appearance": appearance, "data-animate": animate || undefined, onPointerMove: event => {
17
+ return (_jsxs("nav", { ref: forwardedRef, "aria-label": descriptor.accessibilityLabel, className: classNames("hjm-sidebar", className), "data-collapsed": collapsed || undefined, "data-appearance": appearance, "data-size": size, "data-animate": animate || undefined, onPointerMove: event => {
17
18
  if (appearance !== "proximity" || !animate || event.pointerType === "touch")
18
19
  return;
19
20
  // Only icon decoration responds to distance; moving links would shift click/focus targets.
@@ -27,7 +28,7 @@ export const Sidebar = forwardRef(function Sidebar({ descriptor, appearance = "s
27
28
  for (const item of event.currentTarget.querySelectorAll(".hjm-sidebar__item"))
28
29
  item.style.removeProperty("--hjm-sidebar-proximity");
29
30
  }, style: { ...layoutStyle,
30
- "--hjm-sidebar-width": `${collapsed ? sidebarRecipe.widths.collapsed : sidebarRecipe.widths.expanded}px`,
31
+ "--hjm-sidebar-width": `${collapsed ? sidebarRecipe.widths.collapsed : sidebarRecipe.sizes[size]}px`,
31
32
  "--hjm-sidebar-item-height": `${sidebarRecipe.itemMinHeight}px`,
32
33
  // CSS inheritance preserves nested profiles without adding a Provider dependency.
33
34
  "--hjm-sidebar-item-radius": `var(--hjm-radius-md, ${sidebarRecipe.itemRadius}px)`,
@@ -35,22 +36,41 @@ export const Sidebar = forwardRef(function Sidebar({ descriptor, appearance = "s
35
36
  "--hjm-sidebar-group-gap": `${sidebarRecipe.groupGap}px`,
36
37
  }, children: [collapseLabels ? (_jsx("button", { type: "button", className: "hjm-sidebar__toggle", "aria-expanded": !collapsed, "aria-label": collapsed ? collapseLabels.expand : collapseLabels.collapse, onClick: () => setCollapsed(!collapsed), children: _jsx("span", { "aria-hidden": "true", children: collapsed ? "»" : "«" }) })) : null, descriptor.groups.map((group) => (_jsxs("div", { className: "hjm-sidebar__group", role: "group", "aria-label": group.label, children: [group.label ? _jsx("p", { className: "hjm-sidebar__group-label", "aria-hidden": "true", children: group.label }) : null, _jsx("ul", { className: "hjm-sidebar__list", children: group.items.map((item) => {
37
38
  const current = descriptor.currentId === item.id;
38
- // Router-owned destinations may omit href; role/tabIndex/Enter keep
39
- // their link keyboard path without inventing a URL.
40
- return (_jsx("li", { children: _jsxs("a", { className: "hjm-sidebar__item", href: item.destination?.kind === "internal" ? item.destination.href : item.destination?.href, "aria-current": current ? "page" : undefined, "data-bounce": current && activatedId === item.id || undefined, "aria-disabled": item.disabled || undefined, "aria-label": collapsed ? item.label : undefined, role: item.destination === undefined ? "link" : undefined, tabIndex: item.disabled ? -1 : item.destination === undefined ? 0 : undefined, onKeyDown: (event) => {
41
- if (item.destination === undefined && !item.disabled && event.key === "Enter") {
42
- event.preventDefault();
43
- event.currentTarget.click();
44
- }
45
- }, onClick: (event) => {
46
- if (item.disabled) {
47
- event.preventDefault();
48
- return;
49
- }
50
- if (appearance === "bounce" && animate)
51
- setActivatedId(item.id);
52
- onNavigate?.(item.id);
53
- }, children: [renderIcon ? _jsx("span", { "aria-hidden": "true", className: "hjm-sidebar__icon", children: renderIcon(item) }) : null, _jsx("span", { className: "hjm-sidebar__label", children: item.label }), item.badgeCount !== undefined ? (_jsx("span", { className: "hjm-sidebar__badge", children: renderBadge?.(item.badgeCount, item) ?? item.badgeCount })) : null] }) }, item.id));
39
+ const href = item.destination?.href;
40
+ const content = (_jsxs(_Fragment, { children: [renderIcon ? _jsx("span", { "aria-hidden": "true", className: "hjm-sidebar__icon", children: renderIcon(item) }) : null, _jsx("span", { className: "hjm-sidebar__label", children: item.label }), item.badgeCount !== undefined ? (_jsx("span", { className: "hjm-sidebar__badge", children: renderBadge?.(item.badgeCount, item) ?? item.badgeCount })) : null] }));
41
+ const linkProps = {
42
+ className: "hjm-sidebar__item",
43
+ href,
44
+ "aria-current": current ? "page" : undefined,
45
+ "data-bounce": current && activatedId === item.id || undefined,
46
+ "aria-disabled": item.disabled || undefined,
47
+ // Collapsed labels are hidden visually, so the name comes
48
+ // from the attribute instead of disappearing with the text.
49
+ "aria-label": collapsed ? item.label : undefined,
50
+ // Router-owned destinations may omit href; role/tabIndex/Enter keep
51
+ // their link keyboard path without inventing a URL.
52
+ role: item.destination === undefined ? "link" : undefined,
53
+ tabIndex: item.disabled ? -1 : item.destination === undefined ? 0 : undefined,
54
+ onKeyDown: (event) => {
55
+ if (item.destination === undefined && !item.disabled && event.key === "Enter") {
56
+ event.preventDefault();
57
+ event.currentTarget.click();
58
+ }
59
+ },
60
+ onClick: (event) => {
61
+ if (item.disabled) {
62
+ event.preventDefault();
63
+ return;
64
+ }
65
+ if (appearance === "bounce" && animate)
66
+ setActivatedId(item.id);
67
+ onNavigate?.(item.id);
68
+ },
69
+ children: content,
70
+ };
71
+ return (_jsx("li", { children: renderLink && href !== undefined && !item.disabled
72
+ ? renderLink({ ...linkProps, href })
73
+ : _jsx("a", { ...linkProps }) }, item.id));
54
74
  }) })] }, group.id)))] }));
55
75
  });
56
76
  //# sourceMappingURL=sidebar.js.map