@hjmds/react 1.12.0 → 1.13.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 (356) hide show
  1. package/dist/actions.d.ts +4 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +4 -1
  4. package/dist/actions.js.map +1 -1
  5. package/dist/activity-heatmap.d.ts +4 -1
  6. package/dist/activity-heatmap.d.ts.map +1 -1
  7. package/dist/activity-heatmap.js +1 -1
  8. package/dist/activity-heatmap.js.map +1 -1
  9. package/dist/advanced-display.d.ts +31 -3
  10. package/dist/advanced-display.d.ts.map +1 -1
  11. package/dist/advanced-display.js +26 -27
  12. package/dist/advanced-display.js.map +1 -1
  13. package/dist/advanced-forms.d.ts +27 -2
  14. package/dist/advanced-forms.d.ts.map +1 -1
  15. package/dist/advanced-forms.js +11 -7
  16. package/dist/advanced-forms.js.map +1 -1
  17. package/dist/affix.d.ts +4 -1
  18. package/dist/affix.d.ts.map +1 -1
  19. package/dist/affix.js +2 -2
  20. package/dist/affix.js.map +1 -1
  21. package/dist/agreement.d.ts +3 -0
  22. package/dist/agreement.d.ts.map +1 -1
  23. package/dist/agreement.js +14 -3
  24. package/dist/agreement.js.map +1 -1
  25. package/dist/anchor.d.ts +5 -0
  26. package/dist/anchor.d.ts.map +1 -1
  27. package/dist/anchor.js +2 -2
  28. package/dist/anchor.js.map +1 -1
  29. package/dist/asset.d.ts +8 -1
  30. package/dist/asset.d.ts.map +1 -1
  31. package/dist/asset.js +4 -4
  32. package/dist/asset.js.map +1 -1
  33. package/dist/auth-screen.d.ts +5 -0
  34. package/dist/auth-screen.d.ts.map +1 -1
  35. package/dist/auth-screen.js +2 -1
  36. package/dist/auth-screen.js.map +1 -1
  37. package/dist/bottom-cta.d.ts +5 -0
  38. package/dist/bottom-cta.d.ts.map +1 -1
  39. package/dist/bottom-cta.js +2 -2
  40. package/dist/bottom-cta.js.map +1 -1
  41. package/dist/bottom-info.d.ts +5 -0
  42. package/dist/bottom-info.d.ts.map +1 -1
  43. package/dist/bottom-info.js +2 -2
  44. package/dist/bottom-info.js.map +1 -1
  45. package/dist/bottom-navigation.d.ts +3 -0
  46. package/dist/bottom-navigation.d.ts.map +1 -1
  47. package/dist/bottom-navigation.js +2 -1
  48. package/dist/bottom-navigation.js.map +1 -1
  49. package/dist/breadcrumb.d.ts +3 -0
  50. package/dist/breadcrumb.d.ts.map +1 -1
  51. package/dist/breadcrumb.js +2 -2
  52. package/dist/breadcrumb.js.map +1 -1
  53. package/dist/calendar.d.ts +4 -1
  54. package/dist/calendar.d.ts.map +1 -1
  55. package/dist/calendar.js +2 -2
  56. package/dist/calendar.js.map +1 -1
  57. package/dist/carousel-motion.d.ts +3 -0
  58. package/dist/carousel-motion.d.ts.map +1 -1
  59. package/dist/carousel-motion.js +1 -1
  60. package/dist/carousel-motion.js.map +1 -1
  61. package/dist/carousel.d.ts +3 -0
  62. package/dist/carousel.d.ts.map +1 -1
  63. package/dist/carousel.js +2 -2
  64. package/dist/carousel.js.map +1 -1
  65. package/dist/celebration.d.ts.map +1 -1
  66. package/dist/celebration.js.map +1 -1
  67. package/dist/clipboard.d.ts.map +1 -1
  68. package/dist/clipboard.js +6 -2
  69. package/dist/clipboard.js.map +1 -1
  70. package/dist/code-block.d.ts +4 -1
  71. package/dist/code-block.d.ts.map +1 -1
  72. package/dist/code-block.js +1 -1
  73. package/dist/code-block.js.map +1 -1
  74. package/dist/collapsible.d.ts +3 -0
  75. package/dist/collapsible.d.ts.map +1 -1
  76. package/dist/collapsible.js +2 -2
  77. package/dist/collapsible.js.map +1 -1
  78. package/dist/color-picker.d.ts +4 -1
  79. package/dist/color-picker.d.ts.map +1 -1
  80. package/dist/color-picker.js +2 -2
  81. package/dist/color-picker.js.map +1 -1
  82. package/dist/command-palette.d.ts +6 -0
  83. package/dist/command-palette.d.ts.map +1 -1
  84. package/dist/command-palette.js +49 -15
  85. package/dist/command-palette.js.map +1 -1
  86. package/dist/composition-style.d.ts +14 -1
  87. package/dist/composition-style.d.ts.map +1 -1
  88. package/dist/composition-style.js.map +1 -1
  89. package/dist/content-transition.d.ts +6 -2
  90. package/dist/content-transition.d.ts.map +1 -1
  91. package/dist/content-transition.js +4 -4
  92. package/dist/content-transition.js.map +1 -1
  93. package/dist/context-menu.d.ts +4 -1
  94. package/dist/context-menu.d.ts.map +1 -1
  95. package/dist/context-menu.js +2 -2
  96. package/dist/context-menu.js.map +1 -1
  97. package/dist/data-table.d.ts +3 -0
  98. package/dist/data-table.d.ts.map +1 -1
  99. package/dist/data-table.js +31 -11
  100. package/dist/data-table.js.map +1 -1
  101. package/dist/date-picker.d.ts +4 -1
  102. package/dist/date-picker.d.ts.map +1 -1
  103. package/dist/date-picker.js +2 -2
  104. package/dist/date-picker.js.map +1 -1
  105. package/dist/date-range.d.ts +4 -1
  106. package/dist/date-range.d.ts.map +1 -1
  107. package/dist/date-range.js +2 -2
  108. package/dist/date-range.js.map +1 -1
  109. package/dist/display.d.ts +4 -0
  110. package/dist/display.d.ts.map +1 -1
  111. package/dist/display.js.map +1 -1
  112. package/dist/duration-field.d.ts +4 -2
  113. package/dist/duration-field.d.ts.map +1 -1
  114. package/dist/duration-field.js +2 -2
  115. package/dist/duration-field.js.map +1 -1
  116. package/dist/effect-surface.d.ts +4 -2
  117. package/dist/effect-surface.d.ts.map +1 -1
  118. package/dist/effect-surface.js +2 -2
  119. package/dist/effect-surface.js.map +1 -1
  120. package/dist/evidence.d.ts +1 -1
  121. package/dist/evidence.js +1 -1
  122. package/dist/evidence.js.map +1 -1
  123. package/dist/feedback.d.ts +24 -13
  124. package/dist/feedback.d.ts.map +1 -1
  125. package/dist/feedback.js +17 -15
  126. package/dist/feedback.js.map +1 -1
  127. package/dist/file-picker.d.ts +5 -0
  128. package/dist/file-picker.d.ts.map +1 -1
  129. package/dist/file-picker.js +2 -2
  130. package/dist/file-picker.js.map +1 -1
  131. package/dist/floating-action-button.d.ts.map +1 -1
  132. package/dist/floating-action-button.js.map +1 -1
  133. package/dist/folder-preview.d.ts +4 -1
  134. package/dist/folder-preview.d.ts.map +1 -1
  135. package/dist/folder-preview.js +2 -2
  136. package/dist/folder-preview.js.map +1 -1
  137. package/dist/forms.d.ts +35 -3
  138. package/dist/forms.d.ts.map +1 -1
  139. package/dist/forms.js +55 -36
  140. package/dist/forms.js.map +1 -1
  141. package/dist/gravity-letters.d.ts +4 -2
  142. package/dist/gravity-letters.d.ts.map +1 -1
  143. package/dist/gravity-letters.js +2 -2
  144. package/dist/gravity-letters.js.map +1 -1
  145. package/dist/grid-reveal.d.ts +4 -2
  146. package/dist/grid-reveal.d.ts.map +1 -1
  147. package/dist/grid-reveal.js +2 -2
  148. package/dist/grid-reveal.js.map +1 -1
  149. package/dist/heading.d.ts +5 -0
  150. package/dist/heading.d.ts.map +1 -1
  151. package/dist/heading.js +8 -1
  152. package/dist/heading.js.map +1 -1
  153. package/dist/inline-confirm.d.ts +3 -0
  154. package/dist/inline-confirm.d.ts.map +1 -1
  155. package/dist/inline-confirm.js +3 -3
  156. package/dist/inline-confirm.js.map +1 -1
  157. package/dist/internal/message-reactions.d.ts +16 -0
  158. package/dist/internal/message-reactions.d.ts.map +1 -0
  159. package/dist/internal/message-reactions.js +42 -0
  160. package/dist/internal/message-reactions.js.map +1 -0
  161. package/dist/internal/spinner.d.ts +18 -0
  162. package/dist/internal/spinner.d.ts.map +1 -0
  163. package/dist/internal/spinner.js +10 -0
  164. package/dist/internal/spinner.js.map +1 -0
  165. package/dist/layout.d.ts +12 -0
  166. package/dist/layout.d.ts.map +1 -1
  167. package/dist/layout.js +6 -6
  168. package/dist/layout.js.map +1 -1
  169. package/dist/masonry.d.ts +4 -1
  170. package/dist/masonry.d.ts.map +1 -1
  171. package/dist/masonry.js +5 -3
  172. package/dist/masonry.js.map +1 -1
  173. package/dist/mentions.d.ts.map +1 -1
  174. package/dist/mentions.js +12 -3
  175. package/dist/mentions.js.map +1 -1
  176. package/dist/menu-morph.d.ts +8 -1
  177. package/dist/menu-morph.d.ts.map +1 -1
  178. package/dist/menu-morph.js +3 -3
  179. package/dist/menu-morph.js.map +1 -1
  180. package/dist/menubar.d.ts +4 -1
  181. package/dist/menubar.d.ts.map +1 -1
  182. package/dist/menubar.js +4 -3
  183. package/dist/menubar.js.map +1 -1
  184. package/dist/modal.d.ts.map +1 -1
  185. package/dist/modal.js +4 -1
  186. package/dist/modal.js.map +1 -1
  187. package/dist/navigation-bar.d.ts +4 -1
  188. package/dist/navigation-bar.d.ts.map +1 -1
  189. package/dist/navigation-bar.js +2 -2
  190. package/dist/navigation-bar.js.map +1 -1
  191. package/dist/navigation.d.ts +5 -0
  192. package/dist/navigation.d.ts.map +1 -1
  193. package/dist/navigation.js +6 -6
  194. package/dist/navigation.js.map +1 -1
  195. package/dist/notification-bell.d.ts +4 -1
  196. package/dist/notification-bell.d.ts.map +1 -1
  197. package/dist/notification-bell.js +5 -3
  198. package/dist/notification-bell.js.map +1 -1
  199. package/dist/number-field.d.ts +11 -0
  200. package/dist/number-field.d.ts.map +1 -1
  201. package/dist/number-field.js +8 -3
  202. package/dist/number-field.js.map +1 -1
  203. package/dist/overlay-stack.d.ts.map +1 -1
  204. package/dist/overlay-stack.js.map +1 -1
  205. package/dist/overlays.d.ts +5 -0
  206. package/dist/overlays.d.ts.map +1 -1
  207. package/dist/overlays.js +35 -11
  208. package/dist/overlays.js.map +1 -1
  209. package/dist/pagination.d.ts +5 -0
  210. package/dist/pagination.d.ts.map +1 -1
  211. package/dist/pagination.js +2 -2
  212. package/dist/pagination.js.map +1 -1
  213. package/dist/popover.d.ts.map +1 -1
  214. package/dist/popover.js +5 -4
  215. package/dist/popover.js.map +1 -1
  216. package/dist/portal.d.ts.map +1 -1
  217. package/dist/portal.js +2 -1
  218. package/dist/portal.js.map +1 -1
  219. package/dist/provider-button.d.ts +5 -0
  220. package/dist/provider-button.d.ts.map +1 -1
  221. package/dist/provider-button.js +2 -2
  222. package/dist/provider-button.js.map +1 -1
  223. package/dist/provider.d.ts.map +1 -1
  224. package/dist/provider.js.map +1 -1
  225. package/dist/qr-code.d.ts +4 -1
  226. package/dist/qr-code.d.ts.map +1 -1
  227. package/dist/qr-code.js +2 -2
  228. package/dist/qr-code.js.map +1 -1
  229. package/dist/reaction-picker.d.ts +6 -2
  230. package/dist/reaction-picker.d.ts.map +1 -1
  231. package/dist/reaction-picker.js +20 -4
  232. package/dist/reaction-picker.js.map +1 -1
  233. package/dist/saved-items.d.ts +33 -0
  234. package/dist/saved-items.d.ts.map +1 -0
  235. package/dist/saved-items.js +19 -0
  236. package/dist/saved-items.js.map +1 -0
  237. package/dist/screen-flows.d.ts +323 -0
  238. package/dist/screen-flows.d.ts.map +1 -0
  239. package/dist/screen-flows.js +212 -0
  240. package/dist/screen-flows.js.map +1 -0
  241. package/dist/screens.d.ts +120 -0
  242. package/dist/screens.d.ts.map +1 -0
  243. package/dist/screens.js +66 -0
  244. package/dist/screens.js.map +1 -0
  245. package/dist/select.d.ts +6 -0
  246. package/dist/select.d.ts.map +1 -1
  247. package/dist/select.js +13 -3
  248. package/dist/select.js.map +1 -1
  249. package/dist/selection.d.ts +28 -1
  250. package/dist/selection.d.ts.map +1 -1
  251. package/dist/selection.js +12 -12
  252. package/dist/selection.js.map +1 -1
  253. package/dist/side-panel.d.ts.map +1 -1
  254. package/dist/side-panel.js.map +1 -1
  255. package/dist/sidebar.d.ts +3 -0
  256. package/dist/sidebar.d.ts.map +1 -1
  257. package/dist/sidebar.js +2 -2
  258. package/dist/sidebar.js.map +1 -1
  259. package/dist/skip-nav.d.ts.map +1 -1
  260. package/dist/skip-nav.js.map +1 -1
  261. package/dist/slider.d.ts +5 -0
  262. package/dist/slider.d.ts.map +1 -1
  263. package/dist/slider.js +2 -1
  264. package/dist/slider.js.map +1 -1
  265. package/dist/sortable.d.ts +3 -0
  266. package/dist/sortable.d.ts.map +1 -1
  267. package/dist/sortable.js +1 -1
  268. package/dist/sortable.js.map +1 -1
  269. package/dist/splitter.d.ts +5 -0
  270. package/dist/splitter.d.ts.map +1 -1
  271. package/dist/splitter.js +28 -3
  272. package/dist/splitter.js.map +1 -1
  273. package/dist/step-player.d.ts +4 -1
  274. package/dist/step-player.d.ts.map +1 -1
  275. package/dist/step-player.js +2 -2
  276. package/dist/step-player.js.map +1 -1
  277. package/dist/steps.d.ts +5 -0
  278. package/dist/steps.d.ts.map +1 -1
  279. package/dist/steps.js +2 -2
  280. package/dist/steps.js.map +1 -1
  281. package/dist/styles.css +245 -65
  282. package/dist/styles.layered.css +245 -65
  283. package/dist/supplemental-display.d.ts +4 -0
  284. package/dist/supplemental-display.d.ts.map +1 -1
  285. package/dist/supplemental-display.js +7 -4
  286. package/dist/supplemental-display.js.map +1 -1
  287. package/dist/supplemental-navigation.d.ts +5 -0
  288. package/dist/supplemental-navigation.d.ts.map +1 -1
  289. package/dist/supplemental-navigation.js +2 -2
  290. package/dist/supplemental-navigation.js.map +1 -1
  291. package/dist/swipe-actions.d.ts +4 -1
  292. package/dist/swipe-actions.d.ts.map +1 -1
  293. package/dist/swipe-actions.js +2 -2
  294. package/dist/swipe-actions.js.map +1 -1
  295. package/dist/tags-input.d.ts +5 -0
  296. package/dist/tags-input.d.ts.map +1 -1
  297. package/dist/tags-input.js +2 -2
  298. package/dist/tags-input.js.map +1 -1
  299. package/dist/task-list.d.ts +4 -1
  300. package/dist/task-list.d.ts.map +1 -1
  301. package/dist/task-list.js +3 -3
  302. package/dist/task-list.js.map +1 -1
  303. package/dist/text-formats.d.ts +5 -0
  304. package/dist/text-formats.d.ts.map +1 -1
  305. package/dist/text-formats.js +2 -1
  306. package/dist/text-formats.js.map +1 -1
  307. package/dist/theme.d.ts.map +1 -1
  308. package/dist/theme.js +22 -2
  309. package/dist/theme.js.map +1 -1
  310. package/dist/thinking-orb.d.ts +4 -1
  311. package/dist/thinking-orb.d.ts.map +1 -1
  312. package/dist/thinking-orb.js +2 -2
  313. package/dist/thinking-orb.js.map +1 -1
  314. package/dist/toast.d.ts.map +1 -1
  315. package/dist/toast.js +10 -4
  316. package/dist/toast.js.map +1 -1
  317. package/dist/toggle-group.d.ts +3 -0
  318. package/dist/toggle-group.d.ts.map +1 -1
  319. package/dist/toggle-group.js +2 -1
  320. package/dist/toggle-group.js.map +1 -1
  321. package/dist/top-bar.d.ts +5 -0
  322. package/dist/top-bar.d.ts.map +1 -1
  323. package/dist/top-bar.js +2 -2
  324. package/dist/top-bar.js.map +1 -1
  325. package/dist/top.d.ts +5 -0
  326. package/dist/top.d.ts.map +1 -1
  327. package/dist/top.js +2 -2
  328. package/dist/top.js.map +1 -1
  329. package/dist/tour.d.ts.map +1 -1
  330. package/dist/tour.js +3 -2
  331. package/dist/tour.js.map +1 -1
  332. package/dist/transfer-list.d.ts +3 -0
  333. package/dist/transfer-list.d.ts.map +1 -1
  334. package/dist/transfer-list.js +2 -2
  335. package/dist/transfer-list.js.map +1 -1
  336. package/dist/tree.d.ts +3 -0
  337. package/dist/tree.d.ts.map +1 -1
  338. package/dist/tree.js +17 -5
  339. package/dist/tree.js.map +1 -1
  340. package/dist/upload-item.d.ts +5 -0
  341. package/dist/upload-item.d.ts.map +1 -1
  342. package/dist/upload-item.js +2 -2
  343. package/dist/upload-item.js.map +1 -1
  344. package/dist/virtual-list.d.ts +4 -1
  345. package/dist/virtual-list.d.ts.map +1 -1
  346. package/dist/virtual-list.js +2 -2
  347. package/dist/virtual-list.js.map +1 -1
  348. package/dist/voice-note.d.ts +4 -1
  349. package/dist/voice-note.d.ts.map +1 -1
  350. package/dist/voice-note.js +2 -2
  351. package/dist/voice-note.js.map +1 -1
  352. package/dist/watermark.d.ts +4 -1
  353. package/dist/watermark.d.ts.map +1 -1
  354. package/dist/watermark.js +2 -2
  355. package/dist/watermark.js.map +1 -1
  356. package/package.json +18 -3
package/dist/overlays.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { layer } from "@hjmds/design-contracts/foundations";
2
3
  import { resolveMenuTypeahead } from "./menu-typeahead.js";
3
4
  import { createAlertDialogSession, getAlertDialogInitialFocus, validateAlertDialogRequest, } from "@hjmds/design-contracts/components/alert-dialog";
4
5
  import { createSheetLifecycle, resolveNextSheetDetent, sheetBehaviorDefaults, } from "@hjmds/design-contracts/components/sheet";
5
6
  import { resolveTooltipDescriptor, tooltipBehaviorDefaults, } from "@hjmds/design-contracts/components/tooltip";
6
- import { dialogRecipe, menuRecipe, sheetRecipe, } from "@hjmds/design-contracts/recipes";
7
+ import { dialogRecipe, menuRecipe, sheetRecipe, tooltipRecipe, } from "@hjmds/design-contracts/recipes";
7
8
  import { cloneElement, forwardRef, useCallback, useEffect, useId, useRef, useState, useSyncExternalStore, } from "react";
8
9
  import { Button } from "./actions.js";
9
10
  import { classNames, composeRefs, useControllableState } from "./internal.js";
@@ -80,8 +81,12 @@ export const Dialog = forwardRef(function Dialog({ trigger, title, description,
80
81
  onEscape: () => requestClose("escape"),
81
82
  });
82
83
  return (_jsxs(_Fragment, { children: [trigger === undefined ? null : renderTrigger(trigger, triggerRef, open, contentId, "dialog", () => changeOpen(true, { reason: "trigger" })), open ? (_jsx(HjmPortal, { ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsx("div", { className: "hjm-overlay", "data-kind": "dialog", "data-modal-priority": modalPriority, "data-state": "open", style: { zIndex: modalLayer }, onMouseDown: (event) => {
83
- if (event.target === event.currentTarget)
84
+ if (event.target === event.currentTarget) {
85
+ // Diairy QA W16: Chrome's default backdrop blur can run after focus
86
+ // cleanup and undo its return target. Cancel that default, not the modal's dismissal.
87
+ event.preventDefault();
84
88
  requestClose("outside");
89
+ }
85
90
  }, children: _jsxs("div", { ref: mergedContentRef, id: contentId, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": description ? descriptionId : undefined, "aria-busy": busy || undefined, tabIndex: -1, className: classNames("hjm-dialog", className), "data-hjm-modal-content": "", "data-size": size, "data-state": busy ? "busy" : "idle", children: [_jsxs("header", { className: "hjm-dialog__header", children: [_jsx("h2", { id: titleId, className: "hjm-dialog__title", children: title }), dismissible ? (_jsx("button", { type: "button", className: "hjm-dialog__close", "aria-label": closeLabel, disabled: busy, onClick: () => requestClose("close-action"), children: "\u00D7" })) : null] }), description ? _jsx("p", { id: descriptionId, className: "hjm-dialog__description", children: description }) : null, children ? _jsx("div", { className: "hjm-dialog__body", children: children }) : null, footer ? _jsx("footer", { className: "hjm-dialog__footer", children: footer }) : null] }) }) })) : null] }));
86
91
  });
87
92
  export const AlertDialog = forwardRef(function AlertDialog({ trigger, request, icon, size = dialogRecipe.defaults.size, returnFocusRef, modalPriority = 0, portalContainer, open: openProp, defaultOpen, onOpenChange, className, }, forwardedRef) {
@@ -239,9 +244,13 @@ export const Sheet = forwardRef(function Sheet({ trigger, title, description, ch
239
244
  ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),
240
245
  onEscape: () => requestClose("escape"),
241
246
  });
242
- return (_jsxs(_Fragment, { children: [trigger === undefined ? null : renderTrigger(trigger, triggerRef, open, contentId, "dialog", () => changeOpen(true, { reason: "trigger" })), open ? (_jsx(HjmPortal, { ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsx("div", { className: "hjm-overlay hjm-sheet-positioner", "data-kind": "sheet", "data-modal-priority": modalPriority, "data-placement": placement, "data-state": "open", style: { zIndex: modalLayer }, onMouseDown: (event) => {
243
- if (event.target === event.currentTarget)
247
+ return (_jsxs(_Fragment, { children: [trigger === undefined ? null : renderTrigger(trigger, triggerRef, open, contentId, "dialog", () => changeOpen(true, { reason: "trigger" })), open ? (_jsx(HjmPortal, { ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsx("div", { className: "hjm-overlay hjm-sheet-positioner", "data-kind": "sheet", "data-modal-priority": modalPriority, "data-placement": placement, "data-detent": activeDetent ?? (size === "auto" ? undefined : size), "data-state": "open", style: { zIndex: modalLayer }, onMouseDown: (event) => {
248
+ if (event.target === event.currentTarget) {
249
+ // Match Dialog: a real backdrop click must not undo return focus or
250
+ // move focus to body when busy/outside-dismiss policy keeps the sheet open.
251
+ event.preventDefault();
244
252
  requestClose("outside");
253
+ }
245
254
  }, children: _jsxs("div", { ref: composeRefs(contentRef, forwardedRef), id: contentId, role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": description ? descriptionId : undefined, "aria-busy": busy || undefined, tabIndex: -1, className: classNames("hjm-sheet", className), "data-hjm-modal-content": "", "data-placement": placement, "data-detent": activeDetent ?? (size === "auto" ? undefined : size), "data-has-footer": footer ? true : undefined, "data-state": busy ? "busy" : "idle", children: [detents && detentLabels && activeDetent ? (_jsx("div", { className: "hjm-sheet__handle-row", children: _jsx("button", { type: "button", className: "hjm-sheet__handle", "aria-label": resolveNextSheetDetent(detents, activeDetent, "expand") === null
246
255
  ? detentLabels.collapse
247
256
  : detentLabels.expand, onClick: () => {
@@ -251,7 +260,7 @@ export const Sheet = forwardRef(function Sheet({ trigger, title, description, ch
251
260
  onDetentChange?.(next);
252
261
  }, children: _jsx("span", { "aria-hidden": "true", className: "hjm-sheet__handle-bar" }) }) })) : null, _jsxs("header", { className: "hjm-sheet__header", children: [_jsxs("div", { children: [_jsx("h2", { id: titleId, className: "hjm-sheet__title", children: title }), description ? _jsx("p", { id: descriptionId, className: "hjm-sheet__description", children: description }) : null] }), policy.dismissible ? (_jsx("button", { type: "button", className: "hjm-dialog__close", "aria-label": closeLabel, disabled: busy && !policy.dismissWhileBusy, onClick: () => requestClose("close-action"), children: "\u00D7" })) : null] }), children ? _jsx("div", { className: "hjm-sheet__body", children: children }) : null, footer ? _jsx("footer", { className: "hjm-sheet__footer", children: footer }) : null] }) }) })) : null] }));
253
262
  });
254
- export const Tooltip = forwardRef(function Tooltip({ trigger, content, placement, align, pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs, focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs, portalContainer, open: openProp, defaultOpen, onOpenChange, className, }, ref) {
263
+ export const Tooltip = forwardRef(function Tooltip({ trigger, content, placement, align, pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs, focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs, portalContainer, open: openProp, defaultOpen, onOpenChange, className, layoutStyle, }, ref) {
255
264
  const descriptor = resolveTooltipDescriptor({
256
265
  content,
257
266
  ...(placement === undefined ? {} : { placement }),
@@ -396,12 +405,16 @@ export const Tooltip = forwardRef(function Tooltip({ trigger, content, placement
396
405
  const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {
397
406
  align: descriptor.align,
398
407
  placement: descriptor.placement,
399
- zIndex: 1100,
408
+ // tooltipRecipe.positioning (2026-10-06 follow-up): 4 from the trigger and 12 from the edge;
409
+ // the helper defaults 8/16 had made Web tooltips float further away than Native.
410
+ gap: tooltipRecipe.positioning.sideOffset,
411
+ viewportPadding: tooltipRecipe.positioning.collisionPadding,
412
+ zIndex: layer.tooltip,
400
413
  });
401
414
  const setTooltipRef = useCallback((node) => {
402
415
  setTooltipNode(node);
403
416
  }, []);
404
- return (_jsxs("span", { ref: ref, className: classNames("hjm-tooltip", className), "data-placement": descriptor.placement, "data-align": descriptor.align, "data-state": visible ? "open" : "closed", onPointerEnter: (event) => {
417
+ return (_jsxs("span", { ref: ref, style: layoutStyle, className: classNames("hjm-tooltip", className), "data-placement": descriptor.placement, "data-align": descriptor.align, "data-state": visible ? "open" : "closed", onPointerEnter: (event) => {
405
418
  if (event.pointerType !== "touch")
406
419
  clearTimer();
407
420
  }, onPointerLeave: (event) => {
@@ -413,7 +426,15 @@ export const Tooltip = forwardRef(function Tooltip({ trigger, content, placement
413
426
  return;
414
427
  }
415
428
  schedule(false, 0, { reason: "pointer-leave" });
416
- }, children: [renderedTrigger, visible ? (_jsx(AnchoredPortal, { anchorRef: triggerRef, ssrFallback: "inline", ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsx("span", { ref: setTooltipRef, id: id, role: "tooltip", className: "hjm-tooltip__content", "data-placement": popupPosition.placement, "data-align": popupPosition.align, style: popupPosition.style, onPointerEnter: (event) => {
429
+ }, children: [renderedTrigger, visible ? (_jsx(AnchoredPortal, { anchorRef: triggerRef, ssrFallback: "inline", ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsx("span", { ref: setTooltipRef, id: id, role: "tooltip", className: "hjm-tooltip__content", "data-placement": popupPosition.placement, "data-align": popupPosition.align,
430
+ // The positioner's inline maxWidth (space left in the viewport) would override the stylesheet cap,
431
+ // so tooltipRecipe.content.maxWidth (280) is applied here too (2026-10-06; Web had grown to 320).
432
+ style: {
433
+ ...popupPosition.style,
434
+ maxWidth: typeof popupPosition.style.maxWidth === "number"
435
+ ? Math.min(popupPosition.style.maxWidth, tooltipRecipe.content.maxWidth)
436
+ : tooltipRecipe.content.maxWidth,
437
+ }, onPointerEnter: (event) => {
417
438
  if (event.pointerType !== "touch")
418
439
  clearTimer();
419
440
  }, onPointerLeave: (event) => {
@@ -474,7 +495,7 @@ export const Menu = forwardRef(function Menu(props, ref) {
474
495
  comfortable: menuRecipe.defaults.density,
475
496
  compact: "compact",
476
497
  });
477
- const { trigger, label, density: densityProp, align = "start", disabled = false, asyncState = { status: "idle" }, onAction, onActionAfterDismiss, portalContainer, open: openProp, defaultOpen, onOpenChange, className, } = props;
498
+ const { trigger, label, density: densityProp, align = "start", disabled = false, asyncState = { status: "idle" }, onAction, onActionAfterDismiss, portalContainer, open: openProp, defaultOpen, onOpenChange, className, layoutStyle, } = props;
478
499
  const density = densityProp ?? densityDefault;
479
500
  const sections = props.sections;
480
501
  const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);
@@ -536,7 +557,10 @@ export const Menu = forwardRef(function Menu(props, ref) {
536
557
  const afterDismissIdRef = useRef(undefined);
537
558
  const typeaheadRef = useRef({ value: "", time: 0 });
538
559
  const id = `${useId().replaceAll(":", "")}-menu`;
539
- const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });
560
+ // menuRecipe offset/edge padding (2026-10-06 follow-up; helper default edge padding was 16).
561
+ const popupPosition = useAnchoredPopup(triggerRef, contentNode, {
562
+ align, gap: menuRecipe.sideOffset, viewportPadding: menuRecipe.collisionPadding, zIndex: layer.dropdown,
563
+ });
540
564
  const setMenuContentRef = useCallback((node) => {
541
565
  contentRef.current = node;
542
566
  setContentNode(node);
@@ -706,7 +730,7 @@ export const Menu = forwardRef(function Menu(props, ref) {
706
730
  }
707
731
  };
708
732
  const showItems = asyncState.status !== "empty" && asyncState.status !== "error";
709
- return (_jsxs("span", { ref: wrapperRef, className: "hjm-menu", "data-state": open ? "open" : "closed", children: [renderedTrigger, open ? (_jsx(AnchoredPortal, { anchorRef: triggerRef, ssrFallback: "inline", ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsxs("div", { ref: setMenuContentRef, id: id, role: "menu", "aria-label": label, className: classNames("hjm-menu__content", className), "data-density": density, "data-async-state": asyncState.status, "data-placement": popupPosition.placement, "data-align": popupPosition.align, "aria-busy": asyncState.status === "loading" || asyncState.status === "loadingMore" || undefined, style: popupPosition.style, tabIndex: -1, onKeyDown: handleMenuKeyDown, children: [asyncState.status !== "idle" ? (_jsx("div", { className: "hjm-menu__state-message", role: asyncState.status === "error" ? "alert" : "status", children: asyncState.message })) : null, showItems ? (sections === undefined ? items.map((item, index) => {
733
+ return (_jsxs("span", { ref: wrapperRef, className: "hjm-menu", style: layoutStyle, "data-state": open ? "open" : "closed", children: [renderedTrigger, open ? (_jsx(AnchoredPortal, { anchorRef: triggerRef, ssrFallback: "inline", ...(portalContainer === undefined ? {} : { container: portalContainer }), children: _jsxs("div", { ref: setMenuContentRef, id: id, role: "menu", "aria-label": label, className: classNames("hjm-menu__content", className), "data-density": density, "data-async-state": asyncState.status, "data-placement": popupPosition.placement, "data-align": popupPosition.align, "aria-busy": asyncState.status === "loading" || asyncState.status === "loadingMore" || undefined, style: popupPosition.style, tabIndex: -1, onKeyDown: handleMenuKeyDown, children: [asyncState.status !== "idle" ? (_jsx("div", { className: "hjm-menu__state-message", role: asyncState.status === "error" ? "alert" : "status", children: asyncState.message })) : null, showItems ? (sections === undefined ? items.map((item, index) => {
710
734
  const selected = itemSelected(item.id);
711
735
  const itemDisabled = itemIsDisabled(item);
712
736
  const role = selectionMode === "single"
@@ -1 +1 @@
1
- {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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","sourcesContent":["import { resolveMenuTypeahead } from \"./menu-typeahead.js\";\nimport {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const touchTapRef = useRef<{ wasVisible: boolean } | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerDown: (event) => {\n triggerProps.onPointerDown?.(event);\n touchTapRef.current = event.pointerType === \"touch\" ? { wasVisible: visible } : null;\n },\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n const touchTap = touchTapRef.current;\n touchTapRef.current = null;\n if (event.defaultPrevented) return;\n // Touch has no hover, so a tap is the only way to show the hint. The tap's\n // own focus already opened it; closing here (the mouse/keyboard path) made it\n // flash for 1ms (2026-09-30 audit WR-0930-1). A second tap closes instead.\n if (touchTap !== null && !touchTap.wasVisible) {\n if (!visible) schedule(true, 0, { reason: \"pointer\" });\n return;\n }\n if (visible) changeOpen(false, { reason: \"trigger-activation\" });\n },\n });\n useEffect(() => {\n if (!visible) return;\n // Tap-opened tooltips have no pointer-leave; an outside press dismisses them.\n // Mobile Safari does not focus buttons on tap, so blur alone is not enough.\n const onOutsidePress = (event: PointerEvent) => {\n if (\n containsEventTarget(triggerRef.current, event.target) ||\n containsEventTarget(tooltipNode, event.target)\n ) return;\n clearTimer();\n changeOpen(false, { reason: \"blur\" });\n };\n document.addEventListener(\"pointerdown\", onOutsidePress, true);\n return () => document.removeEventListener(\"pointerdown\", onOutsidePress, true);\n }, [changeOpen, tooltipNode, visible]);\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n zIndex: 1100,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n style={popupPosition.style}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const result = resolveMenuTypeahead(\n items.map((item) => ({ textValue: menuTextValue(item), disabled: itemIsDisabled(item) })),\n focusIndex, key, typeaheadRef.current, Date.now(),\n );\n typeaheadRef.current = result.state;\n if (result.index !== undefined) focusAt(result.index);\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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","sourcesContent":["import { layer } from \"@hjmds/design-contracts/foundations\";\nimport { resolveMenuTypeahead } from \"./menu-typeahead.js\";\nimport {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n tooltipRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Diairy QA W16: Chrome's default backdrop blur can run after focus\n // cleanup and undo its return target. Cancel that default, not the modal's dismissal.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\n// No `layoutStyle`: rendered in a modal portal centred by the recipe; there is no in-flow root to place.\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\n// No `layoutStyle`: an edge-attached modal portal; its geometry is the recipe's.\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n // Mirrors the content's detent so a `full` sheet can drop the positioner's top gutter (sheetRecipe.sizes.full).\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n // Match Dialog: a real backdrop click must not undo return focus or\n // move focus to body when busy/outside-dismiss policy keeps the sheet open.\n event.preventDefault();\n requestClose(\"outside\");\n }\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const touchTapRef = useRef<{ wasVisible: boolean } | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerDown: (event) => {\n triggerProps.onPointerDown?.(event);\n touchTapRef.current = event.pointerType === \"touch\" ? { wasVisible: visible } : null;\n },\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n const touchTap = touchTapRef.current;\n touchTapRef.current = null;\n if (event.defaultPrevented) return;\n // Touch has no hover, so a tap is the only way to show the hint. The tap's\n // own focus already opened it; closing here (the mouse/keyboard path) made it\n // flash for 1ms (2026-09-30 audit WR-0930-1). A second tap closes instead.\n if (touchTap !== null && !touchTap.wasVisible) {\n if (!visible) schedule(true, 0, { reason: \"pointer\" });\n return;\n }\n if (visible) changeOpen(false, { reason: \"trigger-activation\" });\n },\n });\n useEffect(() => {\n if (!visible) return;\n // Tap-opened tooltips have no pointer-leave; an outside press dismisses them.\n // Mobile Safari does not focus buttons on tap, so blur alone is not enough.\n const onOutsidePress = (event: PointerEvent) => {\n if (\n containsEventTarget(triggerRef.current, event.target) ||\n containsEventTarget(tooltipNode, event.target)\n ) return;\n clearTimer();\n changeOpen(false, { reason: \"blur\" });\n };\n document.addEventListener(\"pointerdown\", onOutsidePress, true);\n return () => document.removeEventListener(\"pointerdown\", onOutsidePress, true);\n }, [changeOpen, tooltipNode, visible]);\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n // tooltipRecipe.positioning (2026-10-06 follow-up): 4 from the trigger and 12 from the edge;\n // the helper defaults 8/16 had made Web tooltips float further away than Native.\n gap: tooltipRecipe.positioning.sideOffset,\n viewportPadding: tooltipRecipe.positioning.collisionPadding,\n zIndex: layer.tooltip,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n style={layoutStyle}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n // The positioner's inline maxWidth (space left in the viewport) would override the stylesheet cap,\n // so tooltipRecipe.content.maxWidth (280) is applied here too (2026-10-06; Web had grown to 320).\n style={{\n ...popupPosition.style,\n maxWidth: typeof popupPosition.style.maxWidth === \"number\"\n ? Math.min(popupPosition.style.maxWidth, tooltipRecipe.content.maxWidth)\n : tooltipRecipe.content.maxWidth,\n }}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n /** Canonical layout-only placement on the in-flow wrapper around the trigger; the popup stays anchored. */\n layoutStyle?: HjmCompositionStyleProp;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n layoutStyle,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n // menuRecipe offset/edge padding (2026-10-06 follow-up; helper default edge padding was 16).\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, {\n align, gap: menuRecipe.sideOffset, viewportPadding: menuRecipe.collisionPadding, zIndex: layer.dropdown,\n });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const result = resolveMenuTypeahead(\n items.map((item) => ({ textValue: menuTextValue(item), disabled: itemIsDisabled(item) })),\n focusIndex, key, typeaheadRef.current, Date.now(),\n );\n typeaheadRef.current = result.state;\n if (result.index !== undefined) focusAt(result.index);\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" style={layoutStyle} data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}