@hjmds/react 1.41.2 → 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 +10 -2
  71. package/dist/choice-row.d.ts.map +1 -1
  72. package/dist/choice-row.js +7 -3
  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
package/dist/modal.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { layer } from \"@hjmds/design-contracts/foundations\";\nimport { isLargeTextScale } from \"@hjmds/design-contracts/components/design-system-provider\";\nimport {\n cloneElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type AriaAttributes,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { composeRefs } from \"./internal.js\";\nimport { getPopoverOwner } from \"./portal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport { createHjmThemeStyle } from \"./theme.js\";\n\n/*\n Shared modal machinery for Dialog, AlertDialog, Sheet, and SidePanel. Keeping it\n inside overlays.tsx would drag the Menu and Tooltip graph into SidePanel's granular\n entry; copying it would split `activeModalStack` in two, so a Dialog and a SidePanel\n would each believe they are topmost. The stack, the body-scroll lock, and background\n isolation must stay single module-level instances, so they live here alone.\n*/\n\nexport type TriggerElementProps = Readonly<{\n ref?: Ref<HTMLElement>;\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n onMouseEnter?: MouseEventHandler<HTMLElement>;\n onMouseLeave?: MouseEventHandler<HTMLElement>;\n onPointerDown?: React.PointerEventHandler<HTMLElement>;\n onPointerEnter?: React.PointerEventHandler<HTMLElement>;\n onPointerLeave?: React.PointerEventHandler<HTMLElement>;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLElement>;\n \"aria-controls\"?: string;\n \"aria-describedby\"?: string;\n \"aria-disabled\"?: AriaAttributes[\"aria-disabled\"];\n \"aria-expanded\"?: AriaAttributes[\"aria-expanded\"];\n \"aria-haspopup\"?: AriaAttributes[\"aria-haspopup\"];\n}>;\n\nexport type OverlayTrigger = ReactElement<TriggerElementProps>;\n\nexport function containsEventTarget(\n container: Node | null,\n target: EventTarget | null,\n): boolean {\n return target !== null &&\n \"nodeType\" in target &&\n container?.contains(target as Node) === true;\n}\n\ntype ModalPortalProps = Readonly<{\n children: ReactNode;\n container?: HTMLElement;\n}>;\n\nexport function HjmPortal({ children, container }: ModalPortalProps) {\n const [mounted, setMounted] = useState(false);\n const theme = useOptionalHjmTheme();\n useEffect(() => setMounted(true), []);\n if (!mounted) return null;\n return createPortal(\n theme ? (\n <div\n className=\"hjm-root hjm-portal\"\n data-hjm-portal=\"\"\n data-motion={theme.environment.reducedMotion ? \"reduced\" : \"full\"}\n data-theme={theme.environment.theme}\n data-text-scale={theme.environment.textScale}\n data-large-text={isLargeTextScale(theme.environment.textScale) ? \"true\" : undefined}\n dir={theme.environment.direction}\n style={createHjmThemeStyle(theme)}\n >\n {children}\n </div>\n ) : children,\n container ?? document.body,\n );\n}\n\nexport type OpenState<Detail> =\n | Readonly<{\n open: boolean;\n defaultOpen?: never;\n onOpenChange: (open: boolean, detail: Detail) => void;\n }>\n | Readonly<{\n open?: never;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n }>;\n\nexport type ModalOpenState<Detail> =\n | Readonly<{\n open: boolean;\n defaultOpen?: never;\n onOpenChange: (open: boolean, detail: Detail) => void;\n /** Optional for product-owned, programmatically controlled overlays. */\n trigger?: OverlayTrigger;\n }>\n | Readonly<{\n open?: never;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n /** Uncontrolled overlays need a first-party activation target. */\n trigger: OverlayTrigger;\n }>;\n\nexport function useOpenState<Detail>({\n open,\n defaultOpen = false,\n onOpenChange,\n}: Readonly<{\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n}>) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const controlled = open !== undefined;\n const currentOpen = controlled ? open : internalOpen;\n const pendingRequestRef = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (pendingRequestRef.current === currentOpen) {\n pendingRequestRef.current = undefined;\n }\n }, [currentOpen]);\n const changeOpen = useCallback(\n (nextOpen: boolean, detail: Detail) => {\n if (\n nextOpen === currentOpen ||\n pendingRequestRef.current === nextOpen\n ) return;\n pendingRequestRef.current = nextOpen;\n if (!controlled) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen, detail);\n if (controlled) {\n queueMicrotask(() => {\n if (pendingRequestRef.current === nextOpen) {\n pendingRequestRef.current = undefined;\n }\n });\n }\n },\n [controlled, currentOpen, onOpenChange],\n );\n return [currentOpen, changeOpen] as const;\n}\n\nconst focusableSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nexport function getFocusable(container: HTMLElement): HTMLElement[] {\n return [...container.querySelectorAll<HTMLElement>(focusableSelector)].filter(\n (element) => element.tabIndex >= 0 && !element.matches(\":disabled\") &&\n !element.closest('[hidden],[inert],[aria-hidden=\"true\"]') &&\n element.getClientRects().length > 0 && getComputedStyle(element).visibility !== \"hidden\",\n );\n}\n\nlet bodyLockCount = 0;\nlet previousBodyOverflow = \"\";\nexport type ActiveModal = Readonly<{\n element: HTMLElement;\n order: number;\n priority: number;\n}>;\nconst activeModalStack: ActiveModal[] = [];\nlet activeModalOrder = 0;\nconst modalCloseListeners = new Set<() => void>();\n/** Called after a modal released and its return focus ran: a screen that entered under it may focus now. */\nexport function subscribeModalClose(listener: () => void): () => void {\n modalCloseListeners.add(listener);\n return () => { modalCloseListeners.delete(listener); };\n}\nconst isolatedModalBackground = new Map<\n HTMLElement,\n Readonly<{ ariaHidden: string | null; inert: boolean }>\n>();\nlet modalIsolationObserver: MutationObserver | null = null;\n\nfunction getOwnedPopupHosts(modal: ActiveModal): HTMLElement[] {\n const ownerId = modal.element.id;\n if (ownerId.length === 0) return [];\n return [...document.querySelectorAll<HTMLElement>(\"[data-hjm-popup-owner]\")]\n .filter((host) => host.getAttribute(\"data-hjm-popup-owner\") === ownerId);\n}\n\nfunction modalContainsNode(modal: ActiveModal, node: Node): boolean {\n return modal.element.contains(node) ||\n getOwnedPopupHosts(modal).some((host) => host.contains(node));\n}\n\nfunction getModalFocusable(modal: ActiveModal): HTMLElement[] {\n return [\n ...getFocusable(modal.element),\n ...getOwnedPopupHosts(modal).flatMap((host) => getFocusable(host)),\n ];\n}\n\nexport function getModalLayer(priority: number): number {\n if (!Number.isSafeInteger(priority)) {\n throw new TypeError(\"modalPriority must be a safe integer\");\n }\n // Keep priority ordering inside the shared modal tier; copied Web-only bases\n // made product layer tokens disagree with actual overlay order.\n return layer.modal + priority;\n}\n\nexport function getTopModal(): ActiveModal | undefined {\n let top: ActiveModal | undefined;\n for (const modal of activeModalStack) {\n if (!modal.element.isConnected) continue;\n if (\n top === undefined ||\n modal.priority > top.priority ||\n (modal.priority === top.priority && modal.order > top.order)\n ) top = modal;\n }\n return top;\n}\n\nfunction modalRanksAbove(candidate: ActiveModal, reference: ActiveModal): boolean {\n return candidate.priority > reference.priority ||\n (candidate.priority === reference.priority && candidate.order > reference.order);\n}\n\nfunction restoreModalBackground(): void {\n for (const [element, previous] of isolatedModalBackground) {\n element.inert = previous.inert;\n if (previous.ariaHidden === null) element.removeAttribute(\"aria-hidden\");\n else element.setAttribute(\"aria-hidden\", previous.ariaHidden);\n }\n isolatedModalBackground.clear();\n}\n\nfunction isolateModalBackgroundElement(element: HTMLElement): void {\n if (isolatedModalBackground.has(element)) return;\n isolatedModalBackground.set(element, {\n ariaHidden: element.getAttribute(\"aria-hidden\"),\n inert: element.inert,\n });\n element.inert = true;\n element.setAttribute(\"aria-hidden\", \"true\");\n}\n\n/** Keeps only the top modal's ancestor path interactive, including late portals. */\nfunction synchronizeModalBackgroundIsolation(): void {\n restoreModalBackground();\n for (let index = activeModalStack.length - 1; index >= 0; index -= 1) {\n if (!activeModalStack[index]?.element.isConnected) activeModalStack.splice(index, 1);\n }\n const top = getTopModal();\n if (!top) {\n modalIsolationObserver?.disconnect();\n modalIsolationObserver = null;\n return;\n }\n\n const interactivePath = new Set<HTMLElement>();\n for (const root of [top.element, ...getOwnedPopupHosts(top)]) {\n let pathNode: HTMLElement | null = root;\n while (pathNode) {\n if (pathNode === document.body) break;\n interactivePath.add(pathNode);\n pathNode = pathNode.parentElement;\n }\n }\n const inspectedParents = new Set<HTMLElement>();\n for (const pathNode of interactivePath) {\n const parent = pathNode.parentElement;\n if (!parent || inspectedParents.has(parent)) continue;\n inspectedParents.add(parent);\n for (const sibling of parent.children) {\n if (sibling instanceof HTMLElement && !interactivePath.has(sibling)) {\n isolateModalBackgroundElement(sibling);\n }\n }\n }\n\n if (modalIsolationObserver === null) {\n modalIsolationObserver = new MutationObserver(() => {\n synchronizeModalBackgroundIsolation();\n });\n modalIsolationObserver.observe(document.body, {\n attributes: true,\n attributeFilter: [\"data-hjm-popup-owner\"],\n childList: true,\n subtree: true,\n });\n }\n}\n\nfunction lockBodyScroll(): () => void {\n if (bodyLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n }\n bodyLockCount += 1;\n return () => {\n bodyLockCount = Math.max(0, bodyLockCount - 1);\n if (bodyLockCount === 0) document.body.style.overflow = previousBodyOverflow;\n };\n}\n\ntype ModalFocusOptions = Readonly<{\n active: boolean;\n priority?: number;\n contentRef: React.RefObject<HTMLElement | null>;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Entry-focus field (screen-patterns `resolveEntryFocus`), before the first focusable element. Always called on\n * activation; `explicit` is true when `initialFocusRef` already names the target, which then wins.\n */\n resolveInitialFocus?: (explicit: boolean) => HTMLElement | null;\n /** Receives this modal's stack entry while active, so entry-focus scopes can tell what is above them. */\n layerRef?: { current: ActiveModal | null };\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n fallbackReturnRef?: React.RefObject<HTMLElement | null>;\n onEscape(): void;\n}>;\n\nexport function useModalFocus({\n active,\n priority = 0,\n contentRef,\n initialFocusRef,\n resolveInitialFocus,\n layerRef,\n returnFocusRef,\n fallbackReturnRef,\n onEscape,\n}: ModalFocusOptions): void {\n const escapeRef = useRef(onEscape);\n escapeRef.current = onEscape;\n const resolveInitialFocusRef = useRef(resolveInitialFocus);\n resolveInitialFocusRef.current = resolveInitialFocus;\n\n useEffect(() => {\n if (!active) return;\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n let release: (() => void) | undefined;\n let cancelled = false;\n\n const activate = () => {\n const content = contentRef.current;\n if (!content) {\n retryTimer = setTimeout(activate, 0);\n return;\n }\n const previouslyFocused = document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n const releaseScroll = lockBodyScroll();\n const modal: ActiveModal = {\n element: content,\n order: activeModalOrder += 1,\n priority,\n };\n activeModalStack.push(modal);\n if (layerRef) layerRef.current = modal;\n synchronizeModalBackgroundIsolation();\n const explicit = initialFocusRef?.current ?? null;\n const resolved = resolveInitialFocusRef.current?.(explicit !== null) ?? null;\n const initial = explicit ?? resolved ?? getFocusable(content)[0] ?? content;\n if (getTopModal() === modal) initial.focus();\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (getTopModal() !== modal || event.isComposing || event.keyCode === 229) return;\n if (event.key === \"Escape\") {\n // A focused non-modal child owns its first Escape. Let its content (or\n // nested menu) handle it before dismissing the containing modal.\n if (event.target instanceof Node && (getPopoverOwner(event.target) ||\n getOwnedPopupHosts(modal).some((host) => host.contains(event.target as Node)))) return;\n // Menubar keeps focus on its expanded trigger while its menu is portaled.\n const trigger = event.target instanceof Element\n ? event.target.closest<HTMLElement>('[aria-expanded=\"true\"][aria-controls]') : null;\n const popup = trigger ? document.getElementById(trigger.getAttribute(\"aria-controls\")!) : null;\n if (popup && getOwnedPopupHosts(modal).some((host) => host.contains(popup))) return;\n const descriptions = event.target instanceof Element\n ? event.target.getAttribute(\"aria-describedby\")?.split(/\\s+/) ?? [] : [];\n if (descriptions.some((id) => document.getElementById(id)?.getAttribute(\"role\") === \"tooltip\")) return;\n event.preventDefault();\n escapeRef.current();\n return;\n }\n if (event.key !== \"Tab\") return;\n const focusable = getModalFocusable(modal);\n if (focusable.length === 0) {\n event.preventDefault();\n content.focus();\n return;\n }\n const first = focusable[0]!;\n const last = focusable.at(-1)!;\n const current = document.activeElement;\n if (event.shiftKey && (current === first || !(current instanceof Node) || !modalContainsNode(modal, current))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (current === last || !(current instanceof Node) || !modalContainsNode(modal, current))) {\n event.preventDefault();\n first.focus();\n }\n };\n const handleFocusIn = (event: FocusEvent) => {\n if (getTopModal() !== modal) return;\n if (event.target instanceof Node && !modalContainsNode(modal, event.target)) {\n (initialFocusRef?.current ?? getFocusable(content)[0] ?? content).focus();\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown, true);\n document.addEventListener(\"focusin\", handleFocusIn, true);\n release = () => {\n const wasTop = !activeModalStack.some(\n (candidate) =>\n candidate !== modal && candidate.element.isConnected && modalRanksAbove(candidate, modal),\n );\n document.removeEventListener(\"keydown\", handleKeyDown, true);\n document.removeEventListener(\"focusin\", handleFocusIn, true);\n const stackIndex = activeModalStack.lastIndexOf(modal);\n if (stackIndex >= 0) activeModalStack.splice(stackIndex, 1);\n if (layerRef?.current === modal) layerRef.current = null;\n synchronizeModalBackgroundIsolation();\n releaseScroll();\n // After the return-focus microtask below, so a pending entry focus sees where focus landed.\n setTimeout(() => { for (const listener of [...modalCloseListeners]) listener(); }, 0);\n const returnTarget =\n returnFocusRef?.current ?? fallbackReturnRef?.current ?? previouslyFocused;\n if (wasTop) {\n queueMicrotask(() => {\n const nextTop = getTopModal();\n if (!nextTop) {\n returnTarget?.focus();\n return;\n }\n if (returnTarget && modalContainsNode(nextTop, returnTarget)) returnTarget.focus();\n else (getModalFocusable(nextTop)[0] ?? nextTop.element).focus();\n });\n }\n };\n if (cancelled) release();\n };\n activate();\n return () => {\n cancelled = true;\n if (retryTimer !== undefined) clearTimeout(retryTimer);\n release?.();\n };\n }, [active, contentRef, fallbackReturnRef, initialFocusRef, layerRef, priority, returnFocusRef]);\n}\n\nexport function renderTrigger(\n trigger: OverlayTrigger,\n triggerRef: React.RefObject<HTMLElement | null>,\n open: boolean,\n contentId: string,\n popup: \"dialog\" | \"menu\",\n onOpen: () => void,\n): ReactElement {\n const props = trigger.props;\n return cloneElement(trigger, {\n ref: composeRefs(props.ref, triggerRef),\n \"aria-controls\": contentId,\n \"aria-expanded\": open,\n \"aria-haspopup\": popup,\n onClick: (event) => {\n props.onClick?.(event);\n if (!event.defaultPrevented && !props.disabled) onOpen();\n },\n });\n}\n\n"]}
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GAMT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA+BjD,MAAM,UAAU,mBAAmB,CACjC,SAAsB,EACtB,MAA0B;IAE1B,OAAO,MAAM,KAAK,IAAI;QACpB,UAAU,IAAI,MAAM;QACpB,SAAS,EAAE,QAAQ,CAAC,MAAc,CAAC,KAAK,IAAI,CAAC;AACjD,CAAC;AAOD,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAoB;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,YAAY,CACjB,KAAK,CAAC,CAAC,CAAC,CACN,cACE,SAAS,EAAC,qBAAqB,qBACf,EAAE,iBACL,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBACrD,KAAK,CAAC,WAAW,CAAC,KAAK,qBAClB,KAAK,CAAC,WAAW,CAAC,SAAS,qBAC3B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACnF,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,EAChC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,YAEhC,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,QAAQ,EACZ,SAAS,IAAI,QAAQ,CAAC,IAAI,CAC3B,CAAC;AACJ,CAAC;AA8BD,MAAM,UAAU,YAAY,CAAS,EACnC,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,YAAY,GAKZ;IACA,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC;IACtC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IACrD,MAAM,iBAAiB,GAAG,MAAM,CAAsB,SAAS,CAAC,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAC9C,iBAAiB,CAAC,OAAO,GAAG,SAAS,CAAC;QACxC,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAClB,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,QAAiB,EAAE,MAAc,EAAE,EAAE;QACpC,IACE,QAAQ,KAAK,WAAW;YACxB,iBAAiB,CAAC,OAAO,KAAK,QAAQ;YACtC,OAAO;QACT,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU;YAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,UAAU,EAAE,CAAC;YACf,cAAc,CAAC,GAAG,EAAE;gBAClB,IAAI,iBAAiB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC3C,iBAAiB,CAAC,OAAO,GAAG,SAAS,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EACD,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CACxC,CAAC;IACF,OAAO,CAAC,WAAW,EAAE,UAAU,CAAU,CAAC;AAC5C,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,SAAS;IACT,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,iCAAiC;CAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,UAAU,YAAY,CAAC,SAAsB;IACjD,OAAO,CAAC,GAAG,SAAS,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAC3E,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACjE,CAAC,OAAO,CAAC,OAAO,CAAC,uCAAuC,CAAC;QACzD,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAC3F,CAAC;AACJ,CAAC;AAED,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,oBAAoB,GAAG,EAAE,CAAC;AAM9B,MAAM,gBAAgB,GAAkB,EAAE,CAAC;AAC3C,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAc,CAAC;AAClD,4GAA4G;AAC5G,MAAM,UAAU,mBAAmB,CAAC,QAAoB;IACtD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,GAAG,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AACD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAGpC,CAAC;AACJ,IAAI,sBAAsB,GAA4B,IAAI,CAAC;AAE3D,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAc,wBAAwB,CAAC,CAAC;SACzE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,KAAK,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB,EAAE,IAAU;IACvD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,OAAO;QACL,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC9B,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,6EAA6E;IAC7E,gEAAgE;IAChE,OAAO,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,GAA4B,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW;YAAE,SAAS;QACzC,IACE,GAAG,KAAK,SAAS;YACjB,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;YAC7B,CAAC,KAAK,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YAC5D,GAAG,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,SAAsB,EAAE,SAAsB;IACrE,OAAO,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;QAC5C,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,sBAAsB;IAC7B,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC/B,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;;YACpE,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IACD,uBAAuB,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAoB;IACzD,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IACjD,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE;QACnC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC;QAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,oFAAoF;AACpF,SAAS,mCAAmC;IAC1C,sBAAsB,EAAE,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW;YAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,sBAAsB,EAAE,UAAU,EAAE,CAAC;QACrC,sBAAsB,GAAG,IAAI,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAe,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,QAAQ,GAAuB,IAAI,CAAC;QACxC,OAAO,QAAQ,EAAE,CAAC;YAChB,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI;gBAAE,MAAM;YACtC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9B,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAe,CAAC;IAChD,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACtD,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,OAAO,YAAY,WAAW,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpE,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QACpC,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACjD,mCAAmC,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5C,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,sBAAsB,CAAC;YACzC,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1C,CAAC;IACD,aAAa,IAAI,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,aAAa,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,oBAAoB,CAAC;IAC/E,CAAC,CAAC;AACJ,CAAC;AAmBD,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,QAAQ,GACU;IAClB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC7B,MAAM,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC3D,sBAAsB,CAAC,OAAO,GAAG,mBAAmB,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,UAAqD,CAAC;QAC1D,IAAI,OAAiC,CAAC;QACtC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,YAAY,WAAW;gBACrE,CAAC,CAAC,QAAQ,CAAC,aAAa;gBACxB,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;YACvC,MAAM,KAAK,GAAgB;gBACzB,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBAC5B,QAAQ;aACT,CAAC;YACF,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,QAAQ;gBAAE,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;YACvC,mCAAmC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,eAAe,EAAE,OAAO,IAAI,IAAI,CAAC;YAClD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;YAC7E,MAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;YAC5E,IAAI,WAAW,EAAE,KAAK,KAAK;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAE7C,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;gBAC7C,IAAI,WAAW,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG;oBAAE,OAAO;gBAClF,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC3B,uEAAuE;oBACvE,iEAAiE;oBACjE,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;wBAChE,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,CAAC,CAAC;wBAAE,OAAO;oBACzF,0EAA0E;oBAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,YAAY,OAAO;wBAC7C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAc,uCAAuC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACtF,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/F,IAAI,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAAE,OAAO;oBACpF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,YAAY,OAAO;wBAClD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;wBAAE,OAAO;oBACvG,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,SAAS,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;oBAAE,OAAO;gBAChC,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;gBACvC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC9G,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,CAAC;qBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrH,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC;YACF,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAE,EAAE;gBAC1C,IAAI,WAAW,EAAE,KAAK,KAAK;oBAAE,OAAO;gBACpC,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5E,CAAC,eAAe,EAAE,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC5E,CAAC;YACH,CAAC,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAC1D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO,GAAG,GAAG,EAAE;gBACb,MAAM,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CACnC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAC5F,CAAC;gBACF,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC7D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC7D,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACvD,IAAI,UAAU,IAAI,CAAC;oBAAE,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC5D,IAAI,QAAQ,EAAE,OAAO,KAAK,KAAK;oBAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzD,mCAAmC,EAAE,CAAC;gBACtC,aAAa,EAAE,CAAC;gBAChB,4FAA4F;gBAC5F,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,mBAAmB,CAAC;oBAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtF,MAAM,YAAY,GAChB,cAAc,EAAE,OAAO,IAAI,iBAAiB,EAAE,OAAO,IAAI,iBAAiB,CAAC;gBAC7E,IAAI,MAAM,EAAE,CAAC;oBACX,cAAc,CAAC,GAAG,EAAE;wBAClB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;wBAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,YAAY,EAAE,KAAK,EAAE,CAAC;4BACtB,OAAO;wBACT,CAAC;wBACD,IAAI,YAAY,IAAI,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC;4BAAE,YAAY,CAAC,KAAK,EAAE,CAAC;;4BAC9E,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;oBAClE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC;QACF,QAAQ,EAAE,CAAC;QACX,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,UAAU,KAAK,SAAS;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,UAA+C,EAC/C,IAAa,EACb,SAAiB,EACjB,KAAwB,EACxB,MAAkB;IAElB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,OAAO,YAAY,CAAC,OAAO,EAAE;QAC3B,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC;QACvC,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE,MAAM,EAAE,CAAC;QAC3D,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["\"use client\";\n\nimport { layer } from \"@hjmds/design-contracts/foundations\";\nimport { isLargeTextScale } from \"@hjmds/design-contracts/components/design-system-provider\";\nimport {\n cloneElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type AriaAttributes,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { composeRefs } from \"./internal.js\";\nimport { getPopoverOwner } from \"./portal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport { createHjmThemeStyle } from \"./theme.js\";\n\n/*\n Shared modal machinery for Dialog, AlertDialog, Sheet, and SidePanel. Keeping it\n inside overlays.tsx would drag the Menu and Tooltip graph into SidePanel's granular\n entry; copying it would split `activeModalStack` in two, so a Dialog and a SidePanel\n would each believe they are topmost. The stack, the body-scroll lock, and background\n isolation must stay single module-level instances, so they live here alone.\n*/\n\nexport type TriggerElementProps = Readonly<{\n ref?: Ref<HTMLElement>;\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n onMouseEnter?: MouseEventHandler<HTMLElement>;\n onMouseLeave?: MouseEventHandler<HTMLElement>;\n onPointerDown?: React.PointerEventHandler<HTMLElement>;\n onPointerEnter?: React.PointerEventHandler<HTMLElement>;\n onPointerLeave?: React.PointerEventHandler<HTMLElement>;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLElement>;\n \"aria-controls\"?: string;\n \"aria-describedby\"?: string;\n \"aria-disabled\"?: AriaAttributes[\"aria-disabled\"];\n \"aria-expanded\"?: AriaAttributes[\"aria-expanded\"];\n \"aria-haspopup\"?: AriaAttributes[\"aria-haspopup\"];\n}>;\n\nexport type OverlayTrigger = ReactElement<TriggerElementProps>;\n\nexport function containsEventTarget(\n container: Node | null,\n target: EventTarget | null,\n): boolean {\n return target !== null &&\n \"nodeType\" in target &&\n container?.contains(target as Node) === true;\n}\n\ntype ModalPortalProps = Readonly<{\n children: ReactNode;\n container?: HTMLElement;\n}>;\n\nexport function HjmPortal({ children, container }: ModalPortalProps) {\n const [mounted, setMounted] = useState(false);\n const theme = useOptionalHjmTheme();\n useEffect(() => setMounted(true), []);\n if (!mounted) return null;\n return createPortal(\n theme ? (\n <div\n className=\"hjm-root hjm-portal\"\n data-hjm-portal=\"\"\n data-motion={theme.environment.reducedMotion ? \"reduced\" : \"full\"}\n data-theme={theme.environment.theme}\n data-text-scale={theme.environment.textScale}\n data-large-text={isLargeTextScale(theme.environment.textScale) ? \"true\" : undefined}\n dir={theme.environment.direction}\n style={createHjmThemeStyle(theme)}\n >\n {children}\n </div>\n ) : children,\n container ?? document.body,\n );\n}\n\nexport type OpenState<Detail> =\n | Readonly<{\n open: boolean;\n defaultOpen?: never;\n onOpenChange: (open: boolean, detail: Detail) => void;\n }>\n | Readonly<{\n open?: never;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n }>;\n\nexport type ModalOpenState<Detail> =\n | Readonly<{\n open: boolean;\n defaultOpen?: never;\n onOpenChange: (open: boolean, detail: Detail) => void;\n /** Optional for product-owned, programmatically controlled overlays. */\n trigger?: OverlayTrigger;\n }>\n | Readonly<{\n open?: never;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n /** Uncontrolled overlays need a first-party activation target. */\n trigger: OverlayTrigger;\n }>;\n\nexport function useOpenState<Detail>({\n open,\n defaultOpen = false,\n onOpenChange,\n}: Readonly<{\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, detail: Detail) => void;\n}>) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const controlled = open !== undefined;\n const currentOpen = controlled ? open : internalOpen;\n const pendingRequestRef = useRef<boolean | undefined>(undefined);\n useEffect(() => {\n if (pendingRequestRef.current === currentOpen) {\n pendingRequestRef.current = undefined;\n }\n }, [currentOpen]);\n const changeOpen = useCallback(\n (nextOpen: boolean, detail: Detail) => {\n if (\n nextOpen === currentOpen ||\n pendingRequestRef.current === nextOpen\n ) return;\n pendingRequestRef.current = nextOpen;\n if (!controlled) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen, detail);\n if (controlled) {\n queueMicrotask(() => {\n if (pendingRequestRef.current === nextOpen) {\n pendingRequestRef.current = undefined;\n }\n });\n }\n },\n [controlled, currentOpen, onOpenChange],\n );\n return [currentOpen, changeOpen] as const;\n}\n\nconst focusableSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nexport function getFocusable(container: HTMLElement): HTMLElement[] {\n return [...container.querySelectorAll<HTMLElement>(focusableSelector)].filter(\n (element) => element.tabIndex >= 0 && !element.matches(\":disabled\") &&\n !element.closest('[hidden],[inert],[aria-hidden=\"true\"]') &&\n element.getClientRects().length > 0 && getComputedStyle(element).visibility !== \"hidden\",\n );\n}\n\nlet bodyLockCount = 0;\nlet previousBodyOverflow = \"\";\nexport type ActiveModal = Readonly<{\n element: HTMLElement;\n order: number;\n priority: number;\n}>;\nconst activeModalStack: ActiveModal[] = [];\nlet activeModalOrder = 0;\nconst modalCloseListeners = new Set<() => void>();\n/** Called after a modal released and its return focus ran: a screen that entered under it may focus now. */\nexport function subscribeModalClose(listener: () => void): () => void {\n modalCloseListeners.add(listener);\n return () => { modalCloseListeners.delete(listener); };\n}\nconst isolatedModalBackground = new Map<\n HTMLElement,\n Readonly<{ ariaHidden: string | null; inert: boolean }>\n>();\nlet modalIsolationObserver: MutationObserver | null = null;\n\nfunction getOwnedPopupHosts(modal: ActiveModal): HTMLElement[] {\n const ownerId = modal.element.id;\n if (ownerId.length === 0) return [];\n return [...document.querySelectorAll<HTMLElement>(\"[data-hjm-popup-owner]\")]\n .filter((host) => host.getAttribute(\"data-hjm-popup-owner\") === ownerId);\n}\n\nfunction modalContainsNode(modal: ActiveModal, node: Node): boolean {\n return modal.element.contains(node) ||\n getOwnedPopupHosts(modal).some((host) => host.contains(node));\n}\n\nfunction getModalFocusable(modal: ActiveModal): HTMLElement[] {\n return [\n ...getFocusable(modal.element),\n ...getOwnedPopupHosts(modal).flatMap((host) => getFocusable(host)),\n ];\n}\n\nexport function getModalLayer(priority: number): number {\n if (!Number.isSafeInteger(priority)) {\n throw new TypeError(\"modalPriority must be a safe integer\");\n }\n // Keep priority ordering inside the shared modal tier; copied Web-only bases\n // made product layer tokens disagree with actual overlay order.\n return layer.modal + priority;\n}\n\nexport function getTopModal(): ActiveModal | undefined {\n let top: ActiveModal | undefined;\n for (const modal of activeModalStack) {\n if (!modal.element.isConnected) continue;\n if (\n top === undefined ||\n modal.priority > top.priority ||\n (modal.priority === top.priority && modal.order > top.order)\n ) top = modal;\n }\n return top;\n}\n\nfunction modalRanksAbove(candidate: ActiveModal, reference: ActiveModal): boolean {\n return candidate.priority > reference.priority ||\n (candidate.priority === reference.priority && candidate.order > reference.order);\n}\n\nfunction restoreModalBackground(): void {\n for (const [element, previous] of isolatedModalBackground) {\n element.inert = previous.inert;\n if (previous.ariaHidden === null) element.removeAttribute(\"aria-hidden\");\n else element.setAttribute(\"aria-hidden\", previous.ariaHidden);\n }\n isolatedModalBackground.clear();\n}\n\nfunction isolateModalBackgroundElement(element: HTMLElement): void {\n if (isolatedModalBackground.has(element)) return;\n isolatedModalBackground.set(element, {\n ariaHidden: element.getAttribute(\"aria-hidden\"),\n inert: element.inert,\n });\n element.inert = true;\n element.setAttribute(\"aria-hidden\", \"true\");\n}\n\n/** Keeps only the top modal's ancestor path interactive, including late portals. */\nfunction synchronizeModalBackgroundIsolation(): void {\n restoreModalBackground();\n for (let index = activeModalStack.length - 1; index >= 0; index -= 1) {\n if (!activeModalStack[index]?.element.isConnected) activeModalStack.splice(index, 1);\n }\n const top = getTopModal();\n if (!top) {\n modalIsolationObserver?.disconnect();\n modalIsolationObserver = null;\n return;\n }\n\n const interactivePath = new Set<HTMLElement>();\n for (const root of [top.element, ...getOwnedPopupHosts(top)]) {\n let pathNode: HTMLElement | null = root;\n while (pathNode) {\n if (pathNode === document.body) break;\n interactivePath.add(pathNode);\n pathNode = pathNode.parentElement;\n }\n }\n const inspectedParents = new Set<HTMLElement>();\n for (const pathNode of interactivePath) {\n const parent = pathNode.parentElement;\n if (!parent || inspectedParents.has(parent)) continue;\n inspectedParents.add(parent);\n for (const sibling of parent.children) {\n if (sibling instanceof HTMLElement && !interactivePath.has(sibling)) {\n isolateModalBackgroundElement(sibling);\n }\n }\n }\n\n if (modalIsolationObserver === null) {\n modalIsolationObserver = new MutationObserver(() => {\n synchronizeModalBackgroundIsolation();\n });\n modalIsolationObserver.observe(document.body, {\n attributes: true,\n attributeFilter: [\"data-hjm-popup-owner\"],\n childList: true,\n subtree: true,\n });\n }\n}\n\nfunction lockBodyScroll(): () => void {\n if (bodyLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n }\n bodyLockCount += 1;\n return () => {\n bodyLockCount = Math.max(0, bodyLockCount - 1);\n if (bodyLockCount === 0) document.body.style.overflow = previousBodyOverflow;\n };\n}\n\ntype ModalFocusOptions = Readonly<{\n active: boolean;\n priority?: number;\n contentRef: React.RefObject<HTMLElement | null>;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Entry-focus field (screen-patterns `resolveEntryFocus`), before the first focusable element. Always called on\n * activation; `explicit` is true when `initialFocusRef` already names the target, which then wins.\n */\n resolveInitialFocus?: (explicit: boolean) => HTMLElement | null;\n /** Receives this modal's stack entry while active, so entry-focus scopes can tell what is above them. */\n layerRef?: { current: ActiveModal | null };\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n fallbackReturnRef?: React.RefObject<HTMLElement | null>;\n onEscape(): void;\n}>;\n\nexport function useModalFocus({\n active,\n priority = 0,\n contentRef,\n initialFocusRef,\n resolveInitialFocus,\n layerRef,\n returnFocusRef,\n fallbackReturnRef,\n onEscape,\n}: ModalFocusOptions): void {\n const escapeRef = useRef(onEscape);\n escapeRef.current = onEscape;\n const resolveInitialFocusRef = useRef(resolveInitialFocus);\n resolveInitialFocusRef.current = resolveInitialFocus;\n\n useEffect(() => {\n if (!active) return;\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n let release: (() => void) | undefined;\n let cancelled = false;\n\n const activate = () => {\n const content = contentRef.current;\n if (!content) {\n retryTimer = setTimeout(activate, 0);\n return;\n }\n const previouslyFocused = document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n const releaseScroll = lockBodyScroll();\n const modal: ActiveModal = {\n element: content,\n order: activeModalOrder += 1,\n priority,\n };\n activeModalStack.push(modal);\n if (layerRef) layerRef.current = modal;\n synchronizeModalBackgroundIsolation();\n const explicit = initialFocusRef?.current ?? null;\n const resolved = resolveInitialFocusRef.current?.(explicit !== null) ?? null;\n const initial = explicit ?? resolved ?? getFocusable(content)[0] ?? content;\n if (getTopModal() === modal) initial.focus();\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (getTopModal() !== modal || event.isComposing || event.keyCode === 229) return;\n if (event.key === \"Escape\") {\n // A focused non-modal child owns its first Escape. Let its content (or\n // nested menu) handle it before dismissing the containing modal.\n if (event.target instanceof Node && (getPopoverOwner(event.target) ||\n getOwnedPopupHosts(modal).some((host) => host.contains(event.target as Node)))) return;\n // Menubar keeps focus on its expanded trigger while its menu is portaled.\n const trigger = event.target instanceof Element\n ? event.target.closest<HTMLElement>('[aria-expanded=\"true\"][aria-controls]') : null;\n const popup = trigger ? document.getElementById(trigger.getAttribute(\"aria-controls\")!) : null;\n if (popup && getOwnedPopupHosts(modal).some((host) => host.contains(popup))) return;\n const descriptions = event.target instanceof Element\n ? event.target.getAttribute(\"aria-describedby\")?.split(/\\s+/) ?? [] : [];\n if (descriptions.some((id) => document.getElementById(id)?.getAttribute(\"role\") === \"tooltip\")) return;\n event.preventDefault();\n escapeRef.current();\n return;\n }\n if (event.key !== \"Tab\") return;\n const focusable = getModalFocusable(modal);\n if (focusable.length === 0) {\n event.preventDefault();\n content.focus();\n return;\n }\n const first = focusable[0]!;\n const last = focusable.at(-1)!;\n const current = document.activeElement;\n if (event.shiftKey && (current === first || !(current instanceof Node) || !modalContainsNode(modal, current))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (current === last || !(current instanceof Node) || !modalContainsNode(modal, current))) {\n event.preventDefault();\n first.focus();\n }\n };\n const handleFocusIn = (event: FocusEvent) => {\n if (getTopModal() !== modal) return;\n if (event.target instanceof Node && !modalContainsNode(modal, event.target)) {\n (initialFocusRef?.current ?? getFocusable(content)[0] ?? content).focus();\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown, true);\n document.addEventListener(\"focusin\", handleFocusIn, true);\n release = () => {\n const wasTop = !activeModalStack.some(\n (candidate) =>\n candidate !== modal && candidate.element.isConnected && modalRanksAbove(candidate, modal),\n );\n document.removeEventListener(\"keydown\", handleKeyDown, true);\n document.removeEventListener(\"focusin\", handleFocusIn, true);\n const stackIndex = activeModalStack.lastIndexOf(modal);\n if (stackIndex >= 0) activeModalStack.splice(stackIndex, 1);\n if (layerRef?.current === modal) layerRef.current = null;\n synchronizeModalBackgroundIsolation();\n releaseScroll();\n // After the return-focus microtask below, so a pending entry focus sees where focus landed.\n setTimeout(() => { for (const listener of [...modalCloseListeners]) listener(); }, 0);\n const returnTarget =\n returnFocusRef?.current ?? fallbackReturnRef?.current ?? previouslyFocused;\n if (wasTop) {\n queueMicrotask(() => {\n const nextTop = getTopModal();\n if (!nextTop) {\n returnTarget?.focus();\n return;\n }\n if (returnTarget && modalContainsNode(nextTop, returnTarget)) returnTarget.focus();\n else (getModalFocusable(nextTop)[0] ?? nextTop.element).focus();\n });\n }\n };\n if (cancelled) release();\n };\n activate();\n return () => {\n cancelled = true;\n if (retryTimer !== undefined) clearTimeout(retryTimer);\n release?.();\n };\n }, [active, contentRef, fallbackReturnRef, initialFocusRef, layerRef, priority, returnFocusRef]);\n}\n\nexport function renderTrigger(\n trigger: OverlayTrigger,\n triggerRef: React.RefObject<HTMLElement | null>,\n open: boolean,\n contentId: string,\n popup: \"dialog\" | \"menu\",\n onOpen: () => void,\n): ReactElement {\n const props = trigger.props;\n return cloneElement(trigger, {\n ref: composeRefs(props.ref, triggerRef),\n \"aria-controls\": contentId,\n \"aria-expanded\": open,\n \"aria-haspopup\": popup,\n onClick: (event) => {\n props.onClick?.(event);\n if (!event.defaultPrevented && !props.disabled) onOpen();\n },\n });\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-bar.d.ts","sourceRoot":"","sources":["../src/navigation-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,kBAAkB,+BAQjG"}
1
+ {"version":3,"file":"navigation-bar.d.ts","sourceRoot":"","sources":["../src/navigation-bar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,kBAAkB,+BAQjG"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import { useOptionalHjmTheme } from "./provider.js";
3
4
  /** Site navigation composition; Menu/SearchField continue to own their behavior. */
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-bar.js","sourceRoot":"","sources":["../src/navigation-bar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAYpD,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAsB;IAChG,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACrF,OAAO,6BAAiB,KAAK,EAAE,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,aACjH,cAAK,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAO,EACxD,cAAK,SAAS,EAAC,kCAAkC,YAAE,QAAQ,GAAO,EACjE,OAAO,IAAI,cAAK,SAAS,EAAC,6BAA6B,YAAE,OAAO,GAAO,IACpE,CAAC;AACT,CAAC","sourcesContent":["import type { ReactNode } from \"react\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type NavigationBarProps = Readonly<{\n label: string;\n brand: ReactNode;\n children: ReactNode;\n actions?: ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\n/** Site navigation composition; Menu/SearchField continue to own their behavior. */\nexport function NavigationBar({ label, brand, children, actions, layoutStyle }: NavigationBarProps) {\n const theme = useOptionalHjmTheme();\n if (!label.trim()) throw new TypeError(\"NavigationBar requires an accessible label\");\n return <nav aria-label={label} className=\"hjm-navigation-bar\" style={layoutStyle} dir={theme?.environment.direction}>\n <div className=\"hjm-navigation-bar__brand\">{brand}</div>\n <div className=\"hjm-navigation-bar__destinations\">{children}</div>\n {actions && <div className=\"hjm-navigation-bar__actions\">{actions}</div>}\n </nav>;\n}\n"]}
1
+ {"version":3,"file":"navigation-bar.js","sourceRoot":"","sources":["../src/navigation-bar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAYpD,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAsB;IAChG,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACrF,OAAO,6BAAiB,KAAK,EAAE,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,aACjH,cAAK,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAO,EACxD,cAAK,SAAS,EAAC,kCAAkC,YAAE,QAAQ,GAAO,EACjE,OAAO,IAAI,cAAK,SAAS,EAAC,6BAA6B,YAAE,OAAO,GAAO,IACpE,CAAC;AACT,CAAC","sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type NavigationBarProps = Readonly<{\n label: string;\n brand: ReactNode;\n children: ReactNode;\n actions?: ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\n/** Site navigation composition; Menu/SearchField continue to own their behavior. */\nexport function NavigationBar({ label, brand, children, actions, layoutStyle }: NavigationBarProps) {\n const theme = useOptionalHjmTheme();\n if (!label.trim()) throw new TypeError(\"NavigationBar requires an accessible label\");\n return <nav aria-label={label} className=\"hjm-navigation-bar\" style={layoutStyle} dir={theme?.environment.direction}>\n <div className=\"hjm-navigation-bar__brand\">{brand}</div>\n <div className=\"hjm-navigation-bar__destinations\">{children}</div>\n {actions && <div className=\"hjm-navigation-bar__actions\">{actions}</div>}\n </nav>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import { resolveSwipeTabIndicator, resolveTabIndicator, resolveTabsAppearance } from "@hjmds/design-contracts/gooey-navigation";
3
4
  import { easing } from "@hjmds/design-contracts/foundations";
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { resolveSwipeTabIndicator, type TabSwipePosition, resolveTabIndicator, resolveTabsAppearance, type TabsAppearance, type GooeyIndicatorRect } from \"@hjmds/design-contracts/gooey-navigation\";\nimport { easing } from \"@hjmds/design-contracts/foundations\";\nexport type { TabsAppearance };\nimport {\n getTabNavigationIntent,\n getTabNavigationTarget,\n resolveInitialTabValue,\n tabsBehaviorDefaults,\n type TabsActivationMode,\n type TabsDirection,\n type TabsMountPolicy,\n type TabsOrientation,\n type TabsPanelMode,\n} from \"@hjmds/design-contracts/behaviors\";\nimport {\n iconRecipe,\n tabsRecipe,\n type TabSize,\n type TabsIndicator,\n type TabsLayout,\n type TabsOverflow,\n} from \"@hjmds/design-contracts/recipes\";\nimport {\n forwardRef,\n useEffect,\n useLayoutEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { classNames, useControllableState } from \"./internal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type TabLeadingRenderProps = Readonly<{\n selected: boolean;\n disabled: boolean;\n color: \"currentColor\";\n /** Pixel size resolved from `tabsRecipe.icon.glyph`. */\n size: number;\n}>;\n\nexport type TabItem = Readonly<{\n id: string;\n label: ReactNode;\n panel?: ReactNode;\n renderLeading?: (state: TabLeadingRenderProps) => ReactNode;\n disabled?: boolean;\n}>;\n\ntype TabsSelection =\n | Readonly<{\n value: string;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n value?: never;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n }>;\n\nexport type TabsProps = Omit<HTMLAttributes<HTMLDivElement>, \"dir\" | \"onChange\"> &\n TabsSelection &\n Readonly<{\n label: string;\n items: readonly TabItem[];\n activationMode?: TabsActivationMode;\n mountPolicy?: TabsMountPolicy;\n panelMode?: TabsPanelMode;\n appearance?: TabsAppearance;\n /** Fractional pager position; selection commits through onValueChange. Horizontal only. */\n swipePosition?: TabSwipePosition;\n orientation?: TabsOrientation;\n direction?: TabsDirection;\n loop?: boolean;\n size?: TabSize;\n layout?: TabsLayout;\n overflow?: TabsOverflow;\n /** Selection mark: the 2pt underline (default) or a brand-tinted pill behind the selected tab. */\n indicator?: TabsIndicator;\n /** Set false when panels are rendered separately with `TabPanel`. */\n renderPanels?: boolean;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nfunction validateItems(items: readonly TabItem[]): void {\n if (items.length === 0) throw new TypeError(\"Tabs requires at least one item\");\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Tabs item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Tabs item id: ${item.id}`);\n ids.add(item.id);\n }\n if (!items.some((item) => !item.disabled)) {\n throw new TypeError(\"Tabs requires at least one enabled item\");\n }\n}\n\nconst panelFocusableSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\ntype TabPanelHostProps = HTMLAttributes<HTMLDivElement> & Readonly<{\n id: string;\n labelledBy: string;\n selected: boolean;\n dynamic: boolean;\n children: ReactNode;\n}>;\n\nfunction TabPanelHost({\n id,\n labelledBy,\n selected,\n dynamic,\n children,\n className,\n ...props\n}: TabPanelHostProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [hasFocusableContent, setHasFocusableContent] = useState(false);\n useEffect(() => {\n setHasFocusableContent(\n ref.current?.querySelector(panelFocusableSelector) !== null,\n );\n }, [children]);\n\n return (\n <div\n {...props}\n ref={ref}\n id={id}\n role=\"tabpanel\"\n className={classNames(\"hjm-tabs__panel\", className)}\n aria-labelledby={labelledBy}\n tabIndex={selected && !hasFocusableContent ? 0 : undefined}\n hidden={!selected}\n inert={selected ? undefined : true}\n data-state={selected ? \"active\" : \"inactive\"}\n data-panel-mode={dynamic ? \"dynamic\" : \"keyed\"}\n >\n {children}\n </div>\n );\n}\n\nfunction encodedTabId(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport function getTabId(tabsId: string, value: string): string {\n return `${tabsId}-tab-${encodedTabId(value)}`;\n}\n\nexport function getTabPanelId(\n tabsId: string,\n value: string,\n mode: TabsPanelMode = \"keyed\",\n): string {\n return mode === \"dynamic\"\n ? `${tabsId}-panel`\n : `${tabsId}-panel-${encodedTabId(value)}`;\n}\n\nexport function getDynamicTabPanelId(tabsId: string): string {\n return getTabPanelId(tabsId, \"\", \"dynamic\");\n}\n\ntype ExternalTabPanelBaseProps = Omit<HTMLAttributes<HTMLDivElement>, \"id\"> &\n Readonly<{\n tabsId: string;\n activeValue: string;\n children: ReactNode;\n /** Canonical layout-only placement on the panel element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport type TabPanelProps = ExternalTabPanelBaseProps &\n (\n | Readonly<{\n mode: \"dynamic\";\n value?: never;\n mountPolicy?: never;\n }>\n | Readonly<{\n mode?: \"keyed\";\n value: string;\n mountPolicy?: TabsMountPolicy;\n }>\n );\n\n/** External panel host for products that keep routing, query, or scroll state outside Tabs. */\nexport function TabPanel(props: TabPanelProps) {\n const { tabsId, activeValue, children } = props;\n const dynamic = props.mode === \"dynamic\";\n const value = dynamic ? activeValue : props.value;\n const selected = value === activeValue;\n const mountPolicy = dynamic ? \"active\" : props.mountPolicy ?? tabsBehaviorDefaults.mountPolicy;\n let hostProps: Omit<HTMLAttributes<HTMLDivElement>, \"id\">;\n if (props.mode === \"dynamic\") {\n const {\n tabsId: _tabsId,\n activeValue: _activeValue,\n children: _children,\n mode: _mode,\n layoutStyle,\n ...htmlProps\n } = props;\n hostProps = { ...htmlProps, style: { ...htmlProps.style, ...layoutStyle } };\n } else {\n const {\n tabsId: _tabsId,\n activeValue: _activeValue,\n children: _children,\n mode: _mode,\n value: _value,\n mountPolicy: _mountPolicy,\n layoutStyle,\n ...htmlProps\n } = props;\n hostProps = { ...htmlProps, style: { ...htmlProps.style, ...layoutStyle } };\n }\n const [visited, setVisited] = useState(selected);\n useEffect(() => {\n if (selected) setVisited(true);\n }, [selected]);\n const mounted =\n dynamic ||\n selected ||\n mountPolicy === \"always\" ||\n (mountPolicy === \"visited\" && visited);\n if (!mounted) return null;\n return (\n <TabPanelHost\n {...hostProps}\n id={getTabPanelId(tabsId, value, dynamic ? \"dynamic\" : \"keyed\")}\n labelledBy={getTabId(tabsId, dynamic ? activeValue : value)}\n selected={selected}\n dynamic={dynamic}\n >\n {children}\n </TabPanelHost>\n );\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n props,\n ref,\n) {\n const {\n label,\n items,\n activationMode = tabsBehaviorDefaults.activationMode,\n mountPolicy = tabsBehaviorDefaults.mountPolicy,\n panelMode = tabsBehaviorDefaults.panelMode,\n appearance: suppliedAppearance,\n swipePosition,\n orientation = tabsBehaviorDefaults.orientation,\n direction: directionProp,\n loop = tabsBehaviorDefaults.loop,\n size = tabsRecipe.defaults.size,\n layout = tabsRecipe.defaults.layout,\n overflow = tabsRecipe.defaults.overflow,\n indicator = tabsRecipe.defaults.indicator,\n renderPanels = true,\n className,\n id,\n value: valueProp,\n defaultValue,\n onValueChange,\n layoutStyle,\n ...rest\n } = props;\n validateItems(items);\n if (label.trim().length === 0) throw new TypeError(\"Tabs label must not be empty\");\n if (!(indicator in tabsRecipe.indicators)) throw new TypeError(`Unsupported Tabs indicator: ${String(indicator)}`);\n if (panelMode === \"dynamic\" && mountPolicy !== \"active\") {\n throw new TypeError(\"Tabs dynamic panelMode requires active mountPolicy\");\n }\n const descriptors = items.map((item) => ({\n id: item.id,\n label: item.id,\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string }> | null>(null);\n if (initialValueRef.current === null) {\n const resolved = resolveInitialTabValue(descriptors, defaultValue);\n if (resolved === undefined) throw new TypeError(\"Tabs requires an enabled item\");\n initialValueRef.current = { value: resolved };\n }\n const initialValue = initialValueRef.current.value;\n const collectionFallback = items.find((item) => !item.disabled)?.id;\n if (collectionFallback === undefined) throw new TypeError(\"Tabs requires an enabled item\");\n const [storedValue, setValue] = useControllableState({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValue,\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n const storedSelectionIsValid = items.some(\n (item) => item.id === storedValue && !item.disabled,\n );\n if (controlled && !storedSelectionIsValid) {\n throw new RangeError(`Tabs value must identify an enabled item: ${storedValue}`);\n }\n const value = storedSelectionIsValid ? storedValue : collectionFallback;\n const [focusValue, setFocusValue] = useState(value);\n const resolvedFocusValue = items.some(\n (item) => item.id === focusValue && !item.disabled,\n )\n ? focusValue\n : value;\n const [visited, setVisited] = useState<ReadonlySet<string>>(() => new Set([value]));\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n const focusedTabRef = useRef<HTMLButtonElement | null>(null);\n const stripDrag = useRef<{ pointer: number; x: number; start: number; moved: boolean } | null>(null);\n const suppressDragClick = useRef(false);\n const itemOrder = JSON.stringify(items.map(item => item.id));\n const theme = useOptionalHjmTheme();\n const direction = directionProp ?? theme?.environment.direction ?? tabsBehaviorDefaults.direction;\n // Native touch scrolling already works; mouse dragging needs an explicit path\n // so narrow desktop previews can reach the same offscreen tabs without selecting them.\n useLayoutEffect(() => {\n if (overflow !== \"scroll\" || orientation !== \"horizontal\") return;\n const tab = tabRefs.current.get(value);\n const list = tab?.parentElement;\n if (!tab || !list) return;\n const reveal = () => {\n const rect = tab.getBoundingClientRect(), viewport = list.getBoundingClientRect();\n if (rect.left < viewport.left) list.scrollLeft += rect.left - viewport.left;\n else if (rect.right > viewport.right) list.scrollLeft += rect.right - viewport.right;\n };\n reveal();\n // Responsive widths and translated labels can hide an unchanged selection.\n // Adjust only the rail, preserving page scroll and deliberate manual browsing.\n const observer = new ResizeObserver(reveal);\n observer.observe(list);\n for (const node of tabRefs.current.values()) observer.observe(node);\n return () => observer.disconnect();\n }, [value, overflow, orientation, itemOrder, direction]);\n const generatedId = useId().replaceAll(\":\", \"\");\n const baseId = id ?? `hjm-${generatedId}`;\n const appearance = resolveTabsAppearance(suppliedAppearance, theme?.designProfile?.interactions.selectionMotion, orientation);\n const movingIndicator = appearance !== \"standard\" || (orientation === \"horizontal\" && swipePosition !== undefined);\n // Recreated label/panel elements must not cancel motion on unrelated draft edits;\n // resize observation covers their geometry, while stable IDs detect reordering.\n const indicatorRef = useRef<HTMLSpanElement>(null);\n const previousIndicator = useRef<{ value: string; rect: GooeyIndicatorRect } | null>(null);\n const interruptedIndicator = useRef<GooeyIndicatorRect | null>(null);\n useLayoutEffect(() => {\n const indicator = indicatorRef.current;\n const tab = tabRefs.current.get(value);\n if (swipePosition || appearance === \"standard\" || !indicator || !tab) { previousIndicator.current = null; interruptedIndicator.current = null; return; }\n let animation: Animation | undefined;\n const sample = () => {\n const style = getComputedStyle(indicator);\n const rect = { x: Number.parseFloat(style.left), width: Number.parseFloat(style.width) };\n return Number.isFinite(rect.x) && Number.isFinite(rect.width) && rect.width > 0 ? rect : null;\n };\n const place = (animate: boolean) => {\n const current = (animation?.playState === \"running\" || animation?.playState === \"paused\") ? sample() : interruptedIndicator.current;\n interruptedIndicator.current = null;\n animation?.cancel();\n const rect = { x: tab.offsetLeft, width: tab.offsetWidth };\n if (rect.width <= 0) return;\n indicator.style.left = `${rect.x}px`;\n indicator.style.width = `${rect.width}px`;\n const previous = previousIndicator.current;\n if (animate && previous && previous.value !== value && !theme?.environment.reducedMotion && !document.hidden) {\n const recipe = resolveTabIndicator(current ?? previous.rect, rect, appearance);\n animation = indicator.animate(recipe.input.map((offset, index) => ({ offset, left: `${recipe.x[index]}px`, width: `${recipe.width[index]}px` })), { duration: recipe.duration, easing: appearance === \"slide\" ? `cubic-bezier(${easing.standard.join(\",\")})` : \"ease-out\" });\n }\n previousIndicator.current = { value, rect };\n };\n place(true);\n // Font loading, resizing and large text change measurements without changing selection.\n const observer = new ResizeObserver(() => {\n const previous = previousIndicator.current?.rect;\n if (previous?.x !== tab.offsetLeft || previous.width !== tab.offsetWidth) place(false);\n });\n const list = tab.parentElement!;\n for (const child of list.children) if (child !== indicator) observer.observe(child);\n const visibility = () => { if (document.hidden) animation?.cancel(); };\n document.addEventListener(\"visibilitychange\", visibility);\n // RTL fitted lists can shift x even when tab widths do not change.\n observer.observe(list);\n return () => {\n interruptedIndicator.current = (animation?.playState === \"running\" || animation?.playState === \"paused\") ? sample() : null;\n animation?.cancel(); observer.disconnect(); document.removeEventListener(\"visibilitychange\", visibility);\n };\n }, [movingIndicator, appearance, value, itemOrder, direction, theme?.environment.reducedMotion, swipePosition]);\n\n\n useLayoutEffect(() => {\n if (!swipePosition || orientation !== \"horizontal\") return;\n const indicator = indicatorRef.current;\n if (!indicator) return;\n const place = (position = swipePosition.get()) => {\n const rect = resolveSwipeTabIndicator(items.map(item => { const tab = tabRefs.current.get(item.id); return tab ? { x: tab.offsetLeft, width: tab.offsetWidth } : undefined; }), position);\n if (!rect) return;\n indicator.style.left = `${rect.x}px`; indicator.style.width = `${rect.width}px`;\n };\n place();\n const unsubscribe = swipePosition.subscribe(place);\n const observer = new ResizeObserver(() => place());\n for (const tab of tabRefs.current.values()) observer.observe(tab);\n // RTL natural-width lists can move physical x when only the list width changes.\n const list = indicator.parentElement;\n if (list) observer.observe(list);\n return () => { unsubscribe(); observer.disconnect(); };\n }, [swipePosition, itemOrder, orientation, direction]);\n\n useEffect(() => {\n if (!controlled && !storedSelectionIsValid) setValue(collectionFallback);\n }, [collectionFallback, controlled, setValue, storedSelectionIsValid]);\n useLayoutEffect(() => {\n if (!items.some((item) => item.id === focusValue && !item.disabled)) {\n setFocusValue(value);\n // Collection updates can remove the actual focused host; roving tabindex alone cannot restore keyboard position.\n const previous = focusedTabRef.current;\n if (previous && (document.activeElement === previous || document.activeElement === document.body)) {\n tabRefs.current.get(value)?.focus();\n }\n }\n }, [focusValue, items, value]);\n useEffect(() => {\n setVisited((current) => {\n const known = new Set(items.map((item) => item.id));\n const next = new Set([...current].filter((id) => known.has(id)));\n next.add(value);\n if (\n next.size === current.size &&\n [...next].every((id) => current.has(id))\n ) return current;\n return next;\n });\n }, [items, value]);\n\n const focusItem = (id: string) => {\n setFocusValue(id);\n if (activationMode === \"automatic\") setValue(id);\n queueMicrotask(() => {\n const node = tabRefs.current.get(id);\n if (!node) return;\n node.focus();\n // The tab strip is horizontally scrollable; keyboard focus must bring an offscreen roving tab into view.\n // `auto` preserves the consumer's scroll behavior, while `instant` prevents CSS smooth scrolling under reduced motion.\n node.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n behavior: theme?.environment.reducedMotion ? \"instant\" : \"auto\",\n });\n });\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, id: string) => {\n const intent = getTabNavigationIntent(\n event.key === \" \" ? \"Space\" : event.key as Parameters<typeof getTabNavigationIntent>[0],\n orientation,\n direction,\n );\n if (intent !== undefined) {\n const target = getTabNavigationTarget(descriptors, id, intent, loop);\n if (target !== undefined) {\n event.preventDefault();\n focusItem(target);\n }\n return;\n }\n if (\n activationMode === \"manual\" &&\n (event.key === \"Enter\" || event.key === \" \")\n ) {\n event.preventDefault();\n setValue(id);\n }\n };\n const panelId = (value: string) => getTabPanelId(baseId, value, panelMode);\n\n return (\n <div\n {...rest}\n style={{ ...rest.style, ...layoutStyle }}\n ref={ref}\n id={baseId}\n className={classNames(\"hjm-tabs\", className)}\n data-size={size}\n data-layout={layout}\n data-overflow={overflow}\n data-appearance={appearance}\n data-indicator={indicator}\n data-indicator-motion={movingIndicator ? \"moving\" : \"static\"}\n data-orientation={orientation}\n data-mount-policy={mountPolicy}\n data-panel-mode={panelMode}\n data-state=\"ready\"\n dir={direction}\n >\n <div\n className=\"hjm-tabs__list\"\n onPointerDown={(event) => {\n suppressDragClick.current = false;\n if (event.pointerType !== \"mouse\" || event.button !== 0 || overflow !== \"scroll\" || orientation !== \"horizontal\") return;\n stripDrag.current = { pointer: event.pointerId, x: event.clientX, start: event.currentTarget.scrollLeft, moved: false };\n }}\n onPointerMove={(event) => {\n const drag = stripDrag.current;\n if (!drag || drag.pointer !== event.pointerId || event.buttons !== 1) return;\n const delta = event.clientX - drag.x;\n if (!drag.moved && Math.abs(delta) < 5) return;\n drag.moved = true;\n suppressDragClick.current = true;\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n event.currentTarget.scrollLeft = drag.start - delta;\n }}\n onPointerUp={(event) => {\n stripDrag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n }}\n onPointerCancel={() => { stripDrag.current = null; suppressDragClick.current = false; }}\n onLostPointerCapture={() => { stripDrag.current = null; }}\n onClickCapture={(event) => {\n if (!suppressDragClick.current) return;\n suppressDragClick.current = false;\n event.preventDefault(); event.stopPropagation();\n }}\n role=\"tablist\"\n aria-label={label}\n aria-orientation={orientation}\n >\n {movingIndicator ? <span ref={indicatorRef} aria-hidden=\"true\" className={classNames(\"hjm-tabs__indicator\", appearance === \"gooey\" && \"hjm-tabs__gooey\")} /> : null}\n {items.map((item) => {\n const selected = item.id === value;\n const tabId = getTabId(baseId, item.id);\n const leadingSize = iconRecipe.sizes[tabsRecipe.icon.glyph];\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) tabRefs.current.set(item.id, node);\n else tabRefs.current.delete(item.id);\n }}\n id={tabId}\n type=\"button\"\n role=\"tab\"\n className=\"hjm-tabs__tab\"\n data-state={selected ? \"selected\" : \"idle\"}\n aria-selected={selected}\n aria-controls={panelId(item.id)}\n tabIndex={item.id === resolvedFocusValue ? 0 : -1}\n disabled={item.disabled}\n onClick={() => {\n setFocusValue(item.id);\n setValue(item.id);\n }}\n onFocus={(event) => { focusedTabRef.current = event.currentTarget; setFocusValue(item.id); }}\n onKeyDown={(event) => handleKeyDown(event, item.id)}\n >\n {item.renderLeading ? (\n <span aria-hidden=\"true\" className=\"hjm-tabs__leading\">\n {item.renderLeading({\n selected,\n disabled: item.disabled ?? false,\n color: \"currentColor\",\n size: leadingSize,\n })}\n </span>\n ) : null}\n {item.label}\n </button>\n );\n })}\n </div>\n {!renderPanels ? null : panelMode === \"dynamic\" ? (\n <TabPanelHost\n id={panelId(value)}\n labelledBy={getTabId(baseId, value)}\n selected\n dynamic\n >\n {items.find((item) => item.id === value)?.panel}\n </TabPanelHost>\n ) : items.map((item) => {\n const selected = item.id === value;\n const mounted = mountPolicy === \"always\" ||\n (mountPolicy === \"visited\" && (visited.has(item.id) || selected)) ||\n (mountPolicy === \"active\" && selected);\n return mounted ? (\n <TabPanelHost\n key={item.id}\n id={panelId(item.id)}\n labelledBy={getTabId(baseId, item.id)}\n selected={selected}\n dynamic={false}\n >\n {item.panel}\n </TabPanelHost>\n ) : null;\n })}\n </div>\n );\n});\n"]}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { resolveSwipeTabIndicator, type TabSwipePosition, resolveTabIndicator, resolveTabsAppearance, type TabsAppearance, type GooeyIndicatorRect } from \"@hjmds/design-contracts/gooey-navigation\";\nimport { easing } from \"@hjmds/design-contracts/foundations\";\nexport type { TabsAppearance };\nimport {\n getTabNavigationIntent,\n getTabNavigationTarget,\n resolveInitialTabValue,\n tabsBehaviorDefaults,\n type TabsActivationMode,\n type TabsDirection,\n type TabsMountPolicy,\n type TabsOrientation,\n type TabsPanelMode,\n} from \"@hjmds/design-contracts/behaviors\";\nimport {\n iconRecipe,\n tabsRecipe,\n type TabSize,\n type TabsIndicator,\n type TabsLayout,\n type TabsOverflow,\n} from \"@hjmds/design-contracts/recipes\";\nimport {\n forwardRef,\n useEffect,\n useLayoutEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { classNames, useControllableState } from \"./internal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type TabLeadingRenderProps = Readonly<{\n selected: boolean;\n disabled: boolean;\n color: \"currentColor\";\n /** Pixel size resolved from `tabsRecipe.icon.glyph`. */\n size: number;\n}>;\n\nexport type TabItem = Readonly<{\n id: string;\n label: ReactNode;\n panel?: ReactNode;\n renderLeading?: (state: TabLeadingRenderProps) => ReactNode;\n disabled?: boolean;\n}>;\n\ntype TabsSelection =\n | Readonly<{\n value: string;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n value?: never;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n }>;\n\nexport type TabsProps = Omit<HTMLAttributes<HTMLDivElement>, \"dir\" | \"onChange\"> &\n TabsSelection &\n Readonly<{\n label: string;\n items: readonly TabItem[];\n activationMode?: TabsActivationMode;\n mountPolicy?: TabsMountPolicy;\n panelMode?: TabsPanelMode;\n appearance?: TabsAppearance;\n /** Fractional pager position; selection commits through onValueChange. Horizontal only. */\n swipePosition?: TabSwipePosition;\n orientation?: TabsOrientation;\n direction?: TabsDirection;\n loop?: boolean;\n size?: TabSize;\n layout?: TabsLayout;\n overflow?: TabsOverflow;\n /** Selection mark: the 2pt underline (default) or a brand-tinted pill behind the selected tab. */\n indicator?: TabsIndicator;\n /** Set false when panels are rendered separately with `TabPanel`. */\n renderPanels?: boolean;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nfunction validateItems(items: readonly TabItem[]): void {\n if (items.length === 0) throw new TypeError(\"Tabs requires at least one item\");\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Tabs item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Tabs item id: ${item.id}`);\n ids.add(item.id);\n }\n if (!items.some((item) => !item.disabled)) {\n throw new TypeError(\"Tabs requires at least one enabled item\");\n }\n}\n\nconst panelFocusableSelector = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\ntype TabPanelHostProps = HTMLAttributes<HTMLDivElement> & Readonly<{\n id: string;\n labelledBy: string;\n selected: boolean;\n dynamic: boolean;\n children: ReactNode;\n}>;\n\nfunction TabPanelHost({\n id,\n labelledBy,\n selected,\n dynamic,\n children,\n className,\n ...props\n}: TabPanelHostProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [hasFocusableContent, setHasFocusableContent] = useState(false);\n useEffect(() => {\n setHasFocusableContent(\n ref.current?.querySelector(panelFocusableSelector) !== null,\n );\n }, [children]);\n\n return (\n <div\n {...props}\n ref={ref}\n id={id}\n role=\"tabpanel\"\n className={classNames(\"hjm-tabs__panel\", className)}\n aria-labelledby={labelledBy}\n tabIndex={selected && !hasFocusableContent ? 0 : undefined}\n hidden={!selected}\n inert={selected ? undefined : true}\n data-state={selected ? \"active\" : \"inactive\"}\n data-panel-mode={dynamic ? \"dynamic\" : \"keyed\"}\n >\n {children}\n </div>\n );\n}\n\nfunction encodedTabId(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport function getTabId(tabsId: string, value: string): string {\n return `${tabsId}-tab-${encodedTabId(value)}`;\n}\n\nexport function getTabPanelId(\n tabsId: string,\n value: string,\n mode: TabsPanelMode = \"keyed\",\n): string {\n return mode === \"dynamic\"\n ? `${tabsId}-panel`\n : `${tabsId}-panel-${encodedTabId(value)}`;\n}\n\nexport function getDynamicTabPanelId(tabsId: string): string {\n return getTabPanelId(tabsId, \"\", \"dynamic\");\n}\n\ntype ExternalTabPanelBaseProps = Omit<HTMLAttributes<HTMLDivElement>, \"id\"> &\n Readonly<{\n tabsId: string;\n activeValue: string;\n children: ReactNode;\n /** Canonical layout-only placement on the panel element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport type TabPanelProps = ExternalTabPanelBaseProps &\n (\n | Readonly<{\n mode: \"dynamic\";\n value?: never;\n mountPolicy?: never;\n }>\n | Readonly<{\n mode?: \"keyed\";\n value: string;\n mountPolicy?: TabsMountPolicy;\n }>\n );\n\n/** External panel host for products that keep routing, query, or scroll state outside Tabs. */\nexport function TabPanel(props: TabPanelProps) {\n const { tabsId, activeValue, children } = props;\n const dynamic = props.mode === \"dynamic\";\n const value = dynamic ? activeValue : props.value;\n const selected = value === activeValue;\n const mountPolicy = dynamic ? \"active\" : props.mountPolicy ?? tabsBehaviorDefaults.mountPolicy;\n let hostProps: Omit<HTMLAttributes<HTMLDivElement>, \"id\">;\n if (props.mode === \"dynamic\") {\n const {\n tabsId: _tabsId,\n activeValue: _activeValue,\n children: _children,\n mode: _mode,\n layoutStyle,\n ...htmlProps\n } = props;\n hostProps = { ...htmlProps, style: { ...htmlProps.style, ...layoutStyle } };\n } else {\n const {\n tabsId: _tabsId,\n activeValue: _activeValue,\n children: _children,\n mode: _mode,\n value: _value,\n mountPolicy: _mountPolicy,\n layoutStyle,\n ...htmlProps\n } = props;\n hostProps = { ...htmlProps, style: { ...htmlProps.style, ...layoutStyle } };\n }\n const [visited, setVisited] = useState(selected);\n useEffect(() => {\n if (selected) setVisited(true);\n }, [selected]);\n const mounted =\n dynamic ||\n selected ||\n mountPolicy === \"always\" ||\n (mountPolicy === \"visited\" && visited);\n if (!mounted) return null;\n return (\n <TabPanelHost\n {...hostProps}\n id={getTabPanelId(tabsId, value, dynamic ? \"dynamic\" : \"keyed\")}\n labelledBy={getTabId(tabsId, dynamic ? activeValue : value)}\n selected={selected}\n dynamic={dynamic}\n >\n {children}\n </TabPanelHost>\n );\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n props,\n ref,\n) {\n const {\n label,\n items,\n activationMode = tabsBehaviorDefaults.activationMode,\n mountPolicy = tabsBehaviorDefaults.mountPolicy,\n panelMode = tabsBehaviorDefaults.panelMode,\n appearance: suppliedAppearance,\n swipePosition,\n orientation = tabsBehaviorDefaults.orientation,\n direction: directionProp,\n loop = tabsBehaviorDefaults.loop,\n size = tabsRecipe.defaults.size,\n layout = tabsRecipe.defaults.layout,\n overflow = tabsRecipe.defaults.overflow,\n indicator = tabsRecipe.defaults.indicator,\n renderPanels = true,\n className,\n id,\n value: valueProp,\n defaultValue,\n onValueChange,\n layoutStyle,\n ...rest\n } = props;\n validateItems(items);\n if (label.trim().length === 0) throw new TypeError(\"Tabs label must not be empty\");\n if (!(indicator in tabsRecipe.indicators)) throw new TypeError(`Unsupported Tabs indicator: ${String(indicator)}`);\n if (panelMode === \"dynamic\" && mountPolicy !== \"active\") {\n throw new TypeError(\"Tabs dynamic panelMode requires active mountPolicy\");\n }\n const descriptors = items.map((item) => ({\n id: item.id,\n label: item.id,\n ...(item.disabled === undefined ? {} : { disabled: item.disabled }),\n }));\n const initialValueRef = useRef<Readonly<{ value: string }> | null>(null);\n if (initialValueRef.current === null) {\n const resolved = resolveInitialTabValue(descriptors, defaultValue);\n if (resolved === undefined) throw new TypeError(\"Tabs requires an enabled item\");\n initialValueRef.current = { value: resolved };\n }\n const initialValue = initialValueRef.current.value;\n const collectionFallback = items.find((item) => !item.disabled)?.id;\n if (collectionFallback === undefined) throw new TypeError(\"Tabs requires an enabled item\");\n const [storedValue, setValue] = useControllableState({\n ...(valueProp === undefined ? {} : { value: valueProp }),\n defaultValue: initialValue,\n ...(onValueChange === undefined ? {} : { onChange: onValueChange }),\n });\n const controlled = valueProp !== undefined;\n const storedSelectionIsValid = items.some(\n (item) => item.id === storedValue && !item.disabled,\n );\n if (controlled && !storedSelectionIsValid) {\n throw new RangeError(`Tabs value must identify an enabled item: ${storedValue}`);\n }\n const value = storedSelectionIsValid ? storedValue : collectionFallback;\n const [focusValue, setFocusValue] = useState(value);\n const resolvedFocusValue = items.some(\n (item) => item.id === focusValue && !item.disabled,\n )\n ? focusValue\n : value;\n const [visited, setVisited] = useState<ReadonlySet<string>>(() => new Set([value]));\n const tabRefs = useRef(new Map<string, HTMLButtonElement>());\n const focusedTabRef = useRef<HTMLButtonElement | null>(null);\n const stripDrag = useRef<{ pointer: number; x: number; start: number; moved: boolean } | null>(null);\n const suppressDragClick = useRef(false);\n const itemOrder = JSON.stringify(items.map(item => item.id));\n const theme = useOptionalHjmTheme();\n const direction = directionProp ?? theme?.environment.direction ?? tabsBehaviorDefaults.direction;\n // Native touch scrolling already works; mouse dragging needs an explicit path\n // so narrow desktop previews can reach the same offscreen tabs without selecting them.\n useLayoutEffect(() => {\n if (overflow !== \"scroll\" || orientation !== \"horizontal\") return;\n const tab = tabRefs.current.get(value);\n const list = tab?.parentElement;\n if (!tab || !list) return;\n const reveal = () => {\n const rect = tab.getBoundingClientRect(), viewport = list.getBoundingClientRect();\n if (rect.left < viewport.left) list.scrollLeft += rect.left - viewport.left;\n else if (rect.right > viewport.right) list.scrollLeft += rect.right - viewport.right;\n };\n reveal();\n // Responsive widths and translated labels can hide an unchanged selection.\n // Adjust only the rail, preserving page scroll and deliberate manual browsing.\n const observer = new ResizeObserver(reveal);\n observer.observe(list);\n for (const node of tabRefs.current.values()) observer.observe(node);\n return () => observer.disconnect();\n }, [value, overflow, orientation, itemOrder, direction]);\n const generatedId = useId().replaceAll(\":\", \"\");\n const baseId = id ?? `hjm-${generatedId}`;\n const appearance = resolveTabsAppearance(suppliedAppearance, theme?.designProfile?.interactions.selectionMotion, orientation);\n const movingIndicator = appearance !== \"standard\" || (orientation === \"horizontal\" && swipePosition !== undefined);\n // Recreated label/panel elements must not cancel motion on unrelated draft edits;\n // resize observation covers their geometry, while stable IDs detect reordering.\n const indicatorRef = useRef<HTMLSpanElement>(null);\n const previousIndicator = useRef<{ value: string; rect: GooeyIndicatorRect } | null>(null);\n const interruptedIndicator = useRef<GooeyIndicatorRect | null>(null);\n useLayoutEffect(() => {\n const indicator = indicatorRef.current;\n const tab = tabRefs.current.get(value);\n if (swipePosition || appearance === \"standard\" || !indicator || !tab) { previousIndicator.current = null; interruptedIndicator.current = null; return; }\n let animation: Animation | undefined;\n const sample = () => {\n const style = getComputedStyle(indicator);\n const rect = { x: Number.parseFloat(style.left), width: Number.parseFloat(style.width) };\n return Number.isFinite(rect.x) && Number.isFinite(rect.width) && rect.width > 0 ? rect : null;\n };\n const place = (animate: boolean) => {\n const current = (animation?.playState === \"running\" || animation?.playState === \"paused\") ? sample() : interruptedIndicator.current;\n interruptedIndicator.current = null;\n animation?.cancel();\n const rect = { x: tab.offsetLeft, width: tab.offsetWidth };\n if (rect.width <= 0) return;\n indicator.style.left = `${rect.x}px`;\n indicator.style.width = `${rect.width}px`;\n const previous = previousIndicator.current;\n if (animate && previous && previous.value !== value && !theme?.environment.reducedMotion && !document.hidden) {\n const recipe = resolveTabIndicator(current ?? previous.rect, rect, appearance);\n animation = indicator.animate(recipe.input.map((offset, index) => ({ offset, left: `${recipe.x[index]}px`, width: `${recipe.width[index]}px` })), { duration: recipe.duration, easing: appearance === \"slide\" ? `cubic-bezier(${easing.standard.join(\",\")})` : \"ease-out\" });\n }\n previousIndicator.current = { value, rect };\n };\n place(true);\n // Font loading, resizing and large text change measurements without changing selection.\n const observer = new ResizeObserver(() => {\n const previous = previousIndicator.current?.rect;\n if (previous?.x !== tab.offsetLeft || previous.width !== tab.offsetWidth) place(false);\n });\n const list = tab.parentElement!;\n for (const child of list.children) if (child !== indicator) observer.observe(child);\n const visibility = () => { if (document.hidden) animation?.cancel(); };\n document.addEventListener(\"visibilitychange\", visibility);\n // RTL fitted lists can shift x even when tab widths do not change.\n observer.observe(list);\n return () => {\n interruptedIndicator.current = (animation?.playState === \"running\" || animation?.playState === \"paused\") ? sample() : null;\n animation?.cancel(); observer.disconnect(); document.removeEventListener(\"visibilitychange\", visibility);\n };\n }, [movingIndicator, appearance, value, itemOrder, direction, theme?.environment.reducedMotion, swipePosition]);\n\n\n useLayoutEffect(() => {\n if (!swipePosition || orientation !== \"horizontal\") return;\n const indicator = indicatorRef.current;\n if (!indicator) return;\n const place = (position = swipePosition.get()) => {\n const rect = resolveSwipeTabIndicator(items.map(item => { const tab = tabRefs.current.get(item.id); return tab ? { x: tab.offsetLeft, width: tab.offsetWidth } : undefined; }), position);\n if (!rect) return;\n indicator.style.left = `${rect.x}px`; indicator.style.width = `${rect.width}px`;\n };\n place();\n const unsubscribe = swipePosition.subscribe(place);\n const observer = new ResizeObserver(() => place());\n for (const tab of tabRefs.current.values()) observer.observe(tab);\n // RTL natural-width lists can move physical x when only the list width changes.\n const list = indicator.parentElement;\n if (list) observer.observe(list);\n return () => { unsubscribe(); observer.disconnect(); };\n }, [swipePosition, itemOrder, orientation, direction]);\n\n useEffect(() => {\n if (!controlled && !storedSelectionIsValid) setValue(collectionFallback);\n }, [collectionFallback, controlled, setValue, storedSelectionIsValid]);\n useLayoutEffect(() => {\n if (!items.some((item) => item.id === focusValue && !item.disabled)) {\n setFocusValue(value);\n // Collection updates can remove the actual focused host; roving tabindex alone cannot restore keyboard position.\n const previous = focusedTabRef.current;\n if (previous && (document.activeElement === previous || document.activeElement === document.body)) {\n tabRefs.current.get(value)?.focus();\n }\n }\n }, [focusValue, items, value]);\n useEffect(() => {\n setVisited((current) => {\n const known = new Set(items.map((item) => item.id));\n const next = new Set([...current].filter((id) => known.has(id)));\n next.add(value);\n if (\n next.size === current.size &&\n [...next].every((id) => current.has(id))\n ) return current;\n return next;\n });\n }, [items, value]);\n\n const focusItem = (id: string) => {\n setFocusValue(id);\n if (activationMode === \"automatic\") setValue(id);\n queueMicrotask(() => {\n const node = tabRefs.current.get(id);\n if (!node) return;\n node.focus();\n // The tab strip is horizontally scrollable; keyboard focus must bring an offscreen roving tab into view.\n // `auto` preserves the consumer's scroll behavior, while `instant` prevents CSS smooth scrolling under reduced motion.\n node.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n behavior: theme?.environment.reducedMotion ? \"instant\" : \"auto\",\n });\n });\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>, id: string) => {\n const intent = getTabNavigationIntent(\n event.key === \" \" ? \"Space\" : event.key as Parameters<typeof getTabNavigationIntent>[0],\n orientation,\n direction,\n );\n if (intent !== undefined) {\n const target = getTabNavigationTarget(descriptors, id, intent, loop);\n if (target !== undefined) {\n event.preventDefault();\n focusItem(target);\n }\n return;\n }\n if (\n activationMode === \"manual\" &&\n (event.key === \"Enter\" || event.key === \" \")\n ) {\n event.preventDefault();\n setValue(id);\n }\n };\n const panelId = (value: string) => getTabPanelId(baseId, value, panelMode);\n\n return (\n <div\n {...rest}\n style={{ ...rest.style, ...layoutStyle }}\n ref={ref}\n id={baseId}\n className={classNames(\"hjm-tabs\", className)}\n data-size={size}\n data-layout={layout}\n data-overflow={overflow}\n data-appearance={appearance}\n data-indicator={indicator}\n data-indicator-motion={movingIndicator ? \"moving\" : \"static\"}\n data-orientation={orientation}\n data-mount-policy={mountPolicy}\n data-panel-mode={panelMode}\n data-state=\"ready\"\n dir={direction}\n >\n <div\n className=\"hjm-tabs__list\"\n onPointerDown={(event) => {\n suppressDragClick.current = false;\n if (event.pointerType !== \"mouse\" || event.button !== 0 || overflow !== \"scroll\" || orientation !== \"horizontal\") return;\n stripDrag.current = { pointer: event.pointerId, x: event.clientX, start: event.currentTarget.scrollLeft, moved: false };\n }}\n onPointerMove={(event) => {\n const drag = stripDrag.current;\n if (!drag || drag.pointer !== event.pointerId || event.buttons !== 1) return;\n const delta = event.clientX - drag.x;\n if (!drag.moved && Math.abs(delta) < 5) return;\n drag.moved = true;\n suppressDragClick.current = true;\n event.currentTarget.setPointerCapture(event.pointerId);\n event.preventDefault();\n event.currentTarget.scrollLeft = drag.start - delta;\n }}\n onPointerUp={(event) => {\n stripDrag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n }}\n onPointerCancel={() => { stripDrag.current = null; suppressDragClick.current = false; }}\n onLostPointerCapture={() => { stripDrag.current = null; }}\n onClickCapture={(event) => {\n if (!suppressDragClick.current) return;\n suppressDragClick.current = false;\n event.preventDefault(); event.stopPropagation();\n }}\n role=\"tablist\"\n aria-label={label}\n aria-orientation={orientation}\n >\n {movingIndicator ? <span ref={indicatorRef} aria-hidden=\"true\" className={classNames(\"hjm-tabs__indicator\", appearance === \"gooey\" && \"hjm-tabs__gooey\")} /> : null}\n {items.map((item) => {\n const selected = item.id === value;\n const tabId = getTabId(baseId, item.id);\n const leadingSize = iconRecipe.sizes[tabsRecipe.icon.glyph];\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) tabRefs.current.set(item.id, node);\n else tabRefs.current.delete(item.id);\n }}\n id={tabId}\n type=\"button\"\n role=\"tab\"\n className=\"hjm-tabs__tab\"\n data-state={selected ? \"selected\" : \"idle\"}\n aria-selected={selected}\n aria-controls={panelId(item.id)}\n tabIndex={item.id === resolvedFocusValue ? 0 : -1}\n disabled={item.disabled}\n onClick={() => {\n setFocusValue(item.id);\n setValue(item.id);\n }}\n onFocus={(event) => { focusedTabRef.current = event.currentTarget; setFocusValue(item.id); }}\n onKeyDown={(event) => handleKeyDown(event, item.id)}\n >\n {item.renderLeading ? (\n <span aria-hidden=\"true\" className=\"hjm-tabs__leading\">\n {item.renderLeading({\n selected,\n disabled: item.disabled ?? false,\n color: \"currentColor\",\n size: leadingSize,\n })}\n </span>\n ) : null}\n {item.label}\n </button>\n );\n })}\n </div>\n {!renderPanels ? null : panelMode === \"dynamic\" ? (\n <TabPanelHost\n id={panelId(value)}\n labelledBy={getTabId(baseId, value)}\n selected\n dynamic\n >\n {items.find((item) => item.id === value)?.panel}\n </TabPanelHost>\n ) : items.map((item) => {\n const selected = item.id === value;\n const mounted = mountPolicy === \"always\" ||\n (mountPolicy === \"visited\" && (visited.has(item.id) || selected)) ||\n (mountPolicy === \"active\" && selected);\n return mounted ? (\n <TabPanelHost\n key={item.id}\n id={panelId(item.id)}\n labelledBy={getTabId(baseId, item.id)}\n selected={selected}\n dynamic={false}\n >\n {item.panel}\n </TabPanelHost>\n ) : null;\n })}\n </div>\n );\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { HjmCompositionStyleProp } from "./composition-style.js";
3
- import type { IconButtonEdge } from "@hjmds/design-contracts/recipes";
3
+ import { type IconButtonEdge } from "@hjmds/design-contracts/recipes";
4
4
  export type NotificationBellProps = Readonly<{
5
5
  label: string;
6
6
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"notification-bell.d.ts","sourceRoot":"","sources":["../src/notification-bell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACtJ,2HAA2H;IAC3H,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,8JAA8J;IAC9J,WAAW,CAAC,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAAC;AAC3C,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAgB,EAAE,MAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,qBAAqB,+BAoB1I"}
1
+ {"version":3,"file":"notification-bell.d.ts","sourceRoot":"","sources":["../src/notification-bell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACxF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACtJ,2HAA2H;IAC3H,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,8JAA8J;IAC9J,WAAW,CAAC,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAAC;AAC3C,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAgB,EAAE,MAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,qBAAqB,+BAsB1I"}
@@ -1,8 +1,10 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import { useEffect, useRef } from "react";
3
4
  import { IconButton } from "./actions.js";
4
5
  import { CounterBadge } from "./supplemental-display.js";
5
6
  import { useHjmTheme } from "./provider.js";
7
+ import { iconButtonRecipe } from "@hjmds/design-contracts/recipes";
6
8
  export function NotificationBell({ label, count, icon, onPress, disabled = false, active = true, edge, layoutStyle }) {
7
9
  if (!Number.isSafeInteger(count) || count < 0)
8
10
  throw new RangeError("Unread count must be a nonnegative integer");
@@ -27,6 +29,8 @@ export function NotificationBell({ label, count, icon, onPress, disabled = false
27
29
  // `edge` puts the IconButton edge overhang on this root (.hjm-notification-bell[data-edge]), not on the button: the
28
30
  // badge is anchored to the root's end, and a margin on the inner button would shrink the root and pull the badge in
29
31
  // by the overhang (2026-10-17 1.27.2 adoption, as Native).
30
- return _jsxs("span", { className: "hjm-notification-bell", "data-edge": edge, style: { alignSelf: 'flex-start', position: 'relative', display: 'inline-flex', ...layoutStyle, width: 'max-content' }, children: [_jsx(IconButton, { size: "small", hitSlop: 0, label: label, disabled: disabled, onClick: onPress, children: _jsx("span", { ref: art, "aria-hidden": "true", style: { display: 'inline-flex', transformOrigin: 'top center' }, children: icon }) }), _jsx("span", { "aria-hidden": "true", style: { position: 'absolute', insetInlineEnd: 0, top: 0, pointerEvents: 'none' }, children: _jsx(CounterBadge, { count: count, variant: "floating" }) })] });
32
+ // The badge's size and offset come from iconButtonRecipe.badge (.hjm-notification-bell__badge): it rides above the
33
+ // glyph so only its floating ring touches it (2026-10-23: the medium badge at top 0 hid 82% of an 18px glyph).
34
+ return _jsxs("span", { className: "hjm-notification-bell", "data-edge": edge, style: { alignSelf: 'flex-start', position: 'relative', display: 'inline-flex', ...layoutStyle, width: 'max-content' }, children: [_jsx(IconButton, { size: "small", hitSlop: 0, label: label, disabled: disabled, onClick: onPress, children: _jsx("span", { ref: art, "aria-hidden": "true", style: { display: 'inline-flex', transformOrigin: 'top center' }, children: icon }) }), _jsx("span", { className: "hjm-notification-bell__badge", "aria-hidden": "true", children: _jsx(CounterBadge, { count: count, size: iconButtonRecipe.badge.size, variant: iconButtonRecipe.badge.variant }) })] });
31
35
  }
32
36
  //# sourceMappingURL=notification-bell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification-bell.js","sourceRoot":"","sources":["../src/notification-bell.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, type ReactNode } from \"react\";\nimport { IconButton } from \"./actions.js\";\nimport { CounterBadge } from \"./supplemental-display.js\";\nimport { useHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nimport type { IconButtonEdge } from \"@hjmds/design-contracts/recipes\";\nexport type NotificationBellProps = Readonly<{ label: string; count: number; icon: ReactNode; onPress: () => void; disabled?: boolean; active?: boolean;\n /** Container edge(s) the bell sits on, as IconButton `edge`: its glyph slot lands on the container inset (top-bar end). */\n edge?: IconButtonEdge;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. `width` is ignored: the badge is anchored to the icon's edge. */\n layoutStyle?: HjmCompositionStyleProp }>;\nexport function NotificationBell({ label, count, icon, onPress, disabled = false, active = true, edge, layoutStyle }: NotificationBellProps) {\n if (!Number.isSafeInteger(count) || count < 0) throw new RangeError(\"Unread count must be a nonnegative integer\");\n const { environment } = useHjmTheme();\n const art = useRef<HTMLSpanElement>(null);\n const previous = useRef(count);\n useEffect(() => {\n const increased = count > previous.current; previous.current = count;\n if (!increased || !active || environment.reducedMotion || document.hidden || !art.current?.animate) return;\n // One bounded pulse for new unread items; never ring continuously or on mount.\n const animation = art.current.animate([{transform:'rotate(0deg)'},{transform:'rotate(12deg)'},{transform:'rotate(-12deg)'},{transform:'rotate(6deg)'},{transform:'rotate(0deg)'}],{duration:400,easing:'ease-out'});\n const stop=()=>{if(document.hidden)animation.cancel();};document.addEventListener('visibilitychange',stop);\n return ()=>{animation.cancel();document.removeEventListener('visibilitychange',stop);};\n },[count,active,environment.reducedMotion]);\n // Keep the badge anchored to the icon even in a stretching Stack or grid. layoutStyle comes\n // after the defaults (alignSelf included) except `width`: the floating badge sits on the root's\n // inline-end edge, so a wider root would detach it from the icon. Use margins or alignSelf to place.\n // `edge` puts the IconButton edge overhang on this root (.hjm-notification-bell[data-edge]), not on the button: the\n // badge is anchored to the root's end, and a margin on the inner button would shrink the root and pull the badge in\n // by the overhang (2026-10-17 1.27.2 adoption, as Native).\n return <span className=\"hjm-notification-bell\" data-edge={edge} style={{alignSelf:'flex-start',position:'relative',display:'inline-flex',...layoutStyle,width:'max-content'}}><IconButton size=\"small\" hitSlop={0} label={label} disabled={disabled} onClick={onPress}><span ref={art} aria-hidden=\"true\" style={{display:'inline-flex',transformOrigin:'top center'}}>{icon}</span></IconButton><span aria-hidden=\"true\" style={{position:'absolute',insetInlineEnd:0,top:0,pointerEvents:'none'}}><CounterBadge count={count} variant=\"floating\"/></span></span>;\n}\n"]}
1
+ {"version":3,"file":"notification-bell.js","sourceRoot":"","sources":["../src/notification-bell.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, type ReactNode } from \"react\";\nimport { IconButton } from \"./actions.js\";\nimport { CounterBadge } from \"./supplemental-display.js\";\nimport { useHjmTheme } from \"./provider.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nimport { iconButtonRecipe, type IconButtonEdge } from \"@hjmds/design-contracts/recipes\";\nexport type NotificationBellProps = Readonly<{ label: string; count: number; icon: ReactNode; onPress: () => void; disabled?: boolean; active?: boolean;\n /** Container edge(s) the bell sits on, as IconButton `edge`: its glyph slot lands on the container inset (top-bar end). */\n edge?: IconButtonEdge;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. `width` is ignored: the badge is anchored to the icon's edge. */\n layoutStyle?: HjmCompositionStyleProp }>;\nexport function NotificationBell({ label, count, icon, onPress, disabled = false, active = true, edge, layoutStyle }: NotificationBellProps) {\n if (!Number.isSafeInteger(count) || count < 0) throw new RangeError(\"Unread count must be a nonnegative integer\");\n const { environment } = useHjmTheme();\n const art = useRef<HTMLSpanElement>(null);\n const previous = useRef(count);\n useEffect(() => {\n const increased = count > previous.current; previous.current = count;\n if (!increased || !active || environment.reducedMotion || document.hidden || !art.current?.animate) return;\n // One bounded pulse for new unread items; never ring continuously or on mount.\n const animation = art.current.animate([{transform:'rotate(0deg)'},{transform:'rotate(12deg)'},{transform:'rotate(-12deg)'},{transform:'rotate(6deg)'},{transform:'rotate(0deg)'}],{duration:400,easing:'ease-out'});\n const stop=()=>{if(document.hidden)animation.cancel();};document.addEventListener('visibilitychange',stop);\n return ()=>{animation.cancel();document.removeEventListener('visibilitychange',stop);};\n },[count,active,environment.reducedMotion]);\n // Keep the badge anchored to the icon even in a stretching Stack or grid. layoutStyle comes\n // after the defaults (alignSelf included) except `width`: the floating badge sits on the root's\n // inline-end edge, so a wider root would detach it from the icon. Use margins or alignSelf to place.\n // `edge` puts the IconButton edge overhang on this root (.hjm-notification-bell[data-edge]), not on the button: the\n // badge is anchored to the root's end, and a margin on the inner button would shrink the root and pull the badge in\n // by the overhang (2026-10-17 1.27.2 adoption, as Native).\n // The badge's size and offset come from iconButtonRecipe.badge (.hjm-notification-bell__badge): it rides above the\n // glyph so only its floating ring touches it (2026-10-23: the medium badge at top 0 hid 82% of an 18px glyph).\n return <span className=\"hjm-notification-bell\" data-edge={edge} style={{alignSelf:'flex-start',position:'relative',display:'inline-flex',...layoutStyle,width:'max-content'}}><IconButton size=\"small\" hitSlop={0} label={label} disabled={disabled} onClick={onPress}><span ref={art} aria-hidden=\"true\" style={{display:'inline-flex',transformOrigin:'top center'}}>{icon}</span></IconButton><span className=\"hjm-notification-bell__badge\" aria-hidden=\"true\"><CounterBadge count={count} size={iconButtonRecipe.badge.size} variant={iconButtonRecipe.badge.variant}/></span></span>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../src/number-field.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE,KAAK,sBAAsB,GAAG,IAAI,CAChC,mBAAmB,CAAC,gBAAgB,CAAC,EACnC,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,cAAc,GACd,UAAU,GACV,KAAK,GACL,KAAK,GACL,UAAU,GACV,UAAU,GACV,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,CACV,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GACnD,QAAQ,CAAC;IACP,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAWL;;;GAGG;AACH,eAAO,MAAM,WAAW;WAzCb,SAAS;SACX,MAAM;SACN,MAAM;WACJ,MAAM;YACL,gBAAgB;mBACT,gBAAgB;oBACf,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;kBACnC,SAAS;YACf,SAAS;eACN,OAAO;eACP,OAAO;eACP,OAAO;WACX,eAAe;IACtB,kEAAkE;oBAClD,MAAM;IACtB,kEAAkE;oBAClD,MAAM;IACtB,iFAAiF;mBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;gBAC5B,MAAM;qBACD,MAAM;IACvB;;;OAGG;kBACW,uBAAuB;qDA8NxC,CAAC"}
1
+ {"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../src/number-field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE,KAAK,sBAAsB,GAAG,IAAI,CAChC,mBAAmB,CAAC,gBAAgB,CAAC,EACnC,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,cAAc,GACd,UAAU,GACV,KAAK,GACL,KAAK,GACL,UAAU,GACV,UAAU,GACV,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,CACV,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GACnD,QAAQ,CAAC;IACP,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAWL;;;GAGG;AACH,eAAO,MAAM,WAAW;WAzCb,SAAS;SACX,MAAM;SACN,MAAM;WACJ,MAAM;YACL,gBAAgB;mBACT,gBAAgB;oBACf,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI;kBACnC,SAAS;YACf,SAAS;eACN,OAAO;eACP,OAAO;eACP,OAAO;WACX,eAAe;IACtB,kEAAkE;oBAClD,MAAM;IACtB,kEAAkE;oBAClD,MAAM;IACtB,iFAAiF;mBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;gBAC5B,MAAM;qBACD,MAAM;IACvB;;;OAGG;kBACW,uBAAuB;qDA8NxC,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import { commitNumberFieldInput, numberFieldRecipe, parseNumberFieldInput, resolveNumberFieldDescriptor, resolveNumberFieldInputStepperState, stepNumberFieldInput, } from "@hjmds/design-contracts/components/number-field";
3
4
  import { forwardRef, useEffect, useId, useRef, useState, } from "react";