@hjmds/react 1.26.1 → 1.27.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 (273) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -0
  2. package/dist/advanced-display.d.ts +1 -0
  3. package/dist/advanced-display.d.ts.map +1 -1
  4. package/dist/advanced-display.js +3 -2
  5. package/dist/advanced-display.js.map +1 -1
  6. package/dist/agreement.d.ts.map +1 -1
  7. package/dist/agreement.js +2 -1
  8. package/dist/agreement.js.map +1 -1
  9. package/dist/bottom-cta.d.ts.map +1 -1
  10. package/dist/bottom-cta.js +5 -2
  11. package/dist/bottom-cta.js.map +1 -1
  12. package/dist/bottom-navigation.d.ts.map +1 -1
  13. package/dist/bottom-navigation.js +3 -0
  14. package/dist/bottom-navigation.js.map +1 -1
  15. package/dist/calendar.js +1 -1
  16. package/dist/calendar.js.map +1 -1
  17. package/dist/carousel-motion.d.ts.map +1 -1
  18. package/dist/carousel-motion.js +4 -3
  19. package/dist/carousel-motion.js.map +1 -1
  20. package/dist/carousel.d.ts.map +1 -1
  21. package/dist/carousel.js +3 -2
  22. package/dist/carousel.js.map +1 -1
  23. package/dist/chart.d.ts +3 -1
  24. package/dist/chart.d.ts.map +1 -1
  25. package/dist/chart.js +9 -4
  26. package/dist/chart.js.map +1 -1
  27. package/dist/clipboard.d.ts +27 -1
  28. package/dist/clipboard.d.ts.map +1 -1
  29. package/dist/clipboard.js +26 -12
  30. package/dist/clipboard.js.map +1 -1
  31. package/dist/collapsible.d.ts +9 -0
  32. package/dist/collapsible.d.ts.map +1 -1
  33. package/dist/collapsible.js +9 -2
  34. package/dist/collapsible.js.map +1 -1
  35. package/dist/collection-editing.d.ts.map +1 -1
  36. package/dist/collection-editing.js +15 -10
  37. package/dist/collection-editing.js.map +1 -1
  38. package/dist/collection-rail.d.ts.map +1 -1
  39. package/dist/collection-rail.js +3 -2
  40. package/dist/collection-rail.js.map +1 -1
  41. package/dist/communication.d.ts.map +1 -1
  42. package/dist/communication.js +5 -2
  43. package/dist/communication.js.map +1 -1
  44. package/dist/context-menu.d.ts +9 -1
  45. package/dist/context-menu.d.ts.map +1 -1
  46. package/dist/context-menu.js +1 -1
  47. package/dist/context-menu.js.map +1 -1
  48. package/dist/conversation-row.js +1 -1
  49. package/dist/conversation-row.js.map +1 -1
  50. package/dist/data-workflows.d.ts.map +1 -1
  51. package/dist/data-workflows.js +4 -3
  52. package/dist/data-workflows.js.map +1 -1
  53. package/dist/date-picker.d.ts.map +1 -1
  54. package/dist/date-picker.js +5 -3
  55. package/dist/date-picker.js.map +1 -1
  56. package/dist/design-profile.d.ts.map +1 -1
  57. package/dist/design-profile.js +4 -2
  58. package/dist/design-profile.js.map +1 -1
  59. package/dist/effect-surface.d.ts +9 -3
  60. package/dist/effect-surface.d.ts.map +1 -1
  61. package/dist/effect-surface.js +3 -2
  62. package/dist/effect-surface.js.map +1 -1
  63. package/dist/evidence.d.ts +1 -1
  64. package/dist/evidence.js +1 -1
  65. package/dist/evidence.js.map +1 -1
  66. package/dist/feedback.d.ts +8 -19
  67. package/dist/feedback.d.ts.map +1 -1
  68. package/dist/feedback.js +7 -3
  69. package/dist/feedback.js.map +1 -1
  70. package/dist/field-group.d.ts.map +1 -1
  71. package/dist/field-group.js +15 -8
  72. package/dist/field-group.js.map +1 -1
  73. package/dist/file-picker.d.ts +14 -2
  74. package/dist/file-picker.d.ts.map +1 -1
  75. package/dist/file-picker.js +5 -2
  76. package/dist/file-picker.js.map +1 -1
  77. package/dist/folder-preview.d.ts.map +1 -1
  78. package/dist/folder-preview.js +2 -2
  79. package/dist/folder-preview.js.map +1 -1
  80. package/dist/forms.d.ts.map +1 -1
  81. package/dist/forms.js +2 -1
  82. package/dist/forms.js.map +1 -1
  83. package/dist/image-choice.d.ts +30 -0
  84. package/dist/image-choice.d.ts.map +1 -0
  85. package/dist/image-choice.js +24 -0
  86. package/dist/image-choice.js.map +1 -0
  87. package/dist/image-comparison.d.ts.map +1 -1
  88. package/dist/image-comparison.js +2 -1
  89. package/dist/image-comparison.js.map +1 -1
  90. package/dist/index.d.ts +3 -3
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +2 -2
  93. package/dist/index.js.map +1 -1
  94. package/dist/internal/message-reactions.d.ts +28 -2
  95. package/dist/internal/message-reactions.d.ts.map +1 -1
  96. package/dist/internal/message-reactions.js +11 -4
  97. package/dist/internal/message-reactions.js.map +1 -1
  98. package/dist/internal/screen-exit.d.ts +11 -0
  99. package/dist/internal/screen-exit.d.ts.map +1 -0
  100. package/dist/internal/screen-exit.js +10 -0
  101. package/dist/internal/screen-exit.js.map +1 -0
  102. package/dist/internal/screen-footer.d.ts +7 -0
  103. package/dist/internal/screen-footer.d.ts.map +1 -0
  104. package/dist/internal/screen-footer.js +8 -0
  105. package/dist/internal/screen-footer.js.map +1 -0
  106. package/dist/layout.d.ts.map +1 -1
  107. package/dist/layout.js +8 -4
  108. package/dist/layout.js.map +1 -1
  109. package/dist/masonry.d.ts +5 -3
  110. package/dist/masonry.d.ts.map +1 -1
  111. package/dist/masonry.js +25 -3
  112. package/dist/masonry.js.map +1 -1
  113. package/dist/menu-morph.d.ts.map +1 -1
  114. package/dist/menu-morph.js +30 -7
  115. package/dist/menu-morph.js.map +1 -1
  116. package/dist/overlays.d.ts +2 -0
  117. package/dist/overlays.d.ts.map +1 -1
  118. package/dist/overlays.js +48 -11
  119. package/dist/overlays.js.map +1 -1
  120. package/dist/popover.d.ts +6 -0
  121. package/dist/popover.d.ts.map +1 -1
  122. package/dist/popover.js +3 -3
  123. package/dist/popover.js.map +1 -1
  124. package/dist/qr-code.js +1 -1
  125. package/dist/qr-code.js.map +1 -1
  126. package/dist/reaction-picker.d.ts.map +1 -1
  127. package/dist/reaction-picker.js +14 -1
  128. package/dist/reaction-picker.js.map +1 -1
  129. package/dist/saved-items.d.ts +8 -2
  130. package/dist/saved-items.d.ts.map +1 -1
  131. package/dist/saved-items.js +4 -4
  132. package/dist/saved-items.js.map +1 -1
  133. package/dist/screen-flows.d.ts +52 -6
  134. package/dist/screen-flows.d.ts.map +1 -1
  135. package/dist/screen-flows.js +48 -19
  136. package/dist/screen-flows.js.map +1 -1
  137. package/dist/screens.d.ts +56 -8
  138. package/dist/screens.d.ts.map +1 -1
  139. package/dist/screens.js +41 -15
  140. package/dist/screens.js.map +1 -1
  141. package/dist/selection.d.ts.map +1 -1
  142. package/dist/selection.js +4 -4
  143. package/dist/selection.js.map +1 -1
  144. package/dist/social-compositions.d.ts.map +1 -1
  145. package/dist/social-compositions.js +3 -2
  146. package/dist/social-compositions.js.map +1 -1
  147. package/dist/sortable.d.ts.map +1 -1
  148. package/dist/sortable.js +9 -3
  149. package/dist/sortable.js.map +1 -1
  150. package/dist/status-text.d.ts.map +1 -1
  151. package/dist/status-text.js +5 -2
  152. package/dist/status-text.js.map +1 -1
  153. package/dist/styles.css +219 -126
  154. package/dist/styles.layered.css +219 -126
  155. package/dist/table-family.d.ts +1 -1
  156. package/dist/table-family.d.ts.map +1 -1
  157. package/dist/table-family.js +24 -7
  158. package/dist/table-family.js.map +1 -1
  159. package/dist/task-controls.d.ts.map +1 -1
  160. package/dist/task-controls.js +9 -4
  161. package/dist/task-controls.js.map +1 -1
  162. package/dist/task-list.d.ts +1 -1
  163. package/dist/task-list.d.ts.map +1 -1
  164. package/dist/task-list.js +4 -3
  165. package/dist/task-list.js.map +1 -1
  166. package/dist/theme.d.ts.map +1 -1
  167. package/dist/theme.js +4 -0
  168. package/dist/theme.js.map +1 -1
  169. package/dist/top-bar.d.ts +5 -0
  170. package/dist/top-bar.d.ts.map +1 -1
  171. package/dist/top-bar.js +6 -1
  172. package/dist/top-bar.js.map +1 -1
  173. package/dist/transfer-list.d.ts.map +1 -1
  174. package/dist/transfer-list.js +13 -3
  175. package/dist/transfer-list.js.map +1 -1
  176. package/dist/upload-item.d.ts.map +1 -1
  177. package/dist/upload-item.js +3 -1
  178. package/dist/upload-item.js.map +1 -1
  179. package/fonts/pretendard/LICENSE.txt +94 -0
  180. package/fonts/pretendard/pretendard.css +927 -0
  181. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.0.woff2 +0 -0
  182. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.1.woff2 +0 -0
  183. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.10.woff2 +0 -0
  184. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.11.woff2 +0 -0
  185. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.12.woff2 +0 -0
  186. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.13.woff2 +0 -0
  187. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.14.woff2 +0 -0
  188. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.15.woff2 +0 -0
  189. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.16.woff2 +0 -0
  190. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.17.woff2 +0 -0
  191. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.18.woff2 +0 -0
  192. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.19.woff2 +0 -0
  193. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.2.woff2 +0 -0
  194. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.20.woff2 +0 -0
  195. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.21.woff2 +0 -0
  196. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.22.woff2 +0 -0
  197. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.23.woff2 +0 -0
  198. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.24.woff2 +0 -0
  199. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.25.woff2 +0 -0
  200. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.26.woff2 +0 -0
  201. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.27.woff2 +0 -0
  202. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.28.woff2 +0 -0
  203. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.29.woff2 +0 -0
  204. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.3.woff2 +0 -0
  205. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.30.woff2 +0 -0
  206. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.31.woff2 +0 -0
  207. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.32.woff2 +0 -0
  208. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.33.woff2 +0 -0
  209. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.34.woff2 +0 -0
  210. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.35.woff2 +0 -0
  211. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.36.woff2 +0 -0
  212. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.37.woff2 +0 -0
  213. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.38.woff2 +0 -0
  214. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.39.woff2 +0 -0
  215. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.4.woff2 +0 -0
  216. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.40.woff2 +0 -0
  217. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.41.woff2 +0 -0
  218. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.42.woff2 +0 -0
  219. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.43.woff2 +0 -0
  220. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.44.woff2 +0 -0
  221. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.45.woff2 +0 -0
  222. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.46.woff2 +0 -0
  223. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.47.woff2 +0 -0
  224. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.48.woff2 +0 -0
  225. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.49.woff2 +0 -0
  226. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.5.woff2 +0 -0
  227. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.50.woff2 +0 -0
  228. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.51.woff2 +0 -0
  229. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.52.woff2 +0 -0
  230. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.53.woff2 +0 -0
  231. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.54.woff2 +0 -0
  232. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.55.woff2 +0 -0
  233. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.56.woff2 +0 -0
  234. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.57.woff2 +0 -0
  235. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.58.woff2 +0 -0
  236. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.59.woff2 +0 -0
  237. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.6.woff2 +0 -0
  238. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.60.woff2 +0 -0
  239. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.61.woff2 +0 -0
  240. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.62.woff2 +0 -0
  241. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.63.woff2 +0 -0
  242. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.64.woff2 +0 -0
  243. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.65.woff2 +0 -0
  244. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.66.woff2 +0 -0
  245. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.67.woff2 +0 -0
  246. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.68.woff2 +0 -0
  247. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.69.woff2 +0 -0
  248. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.7.woff2 +0 -0
  249. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.70.woff2 +0 -0
  250. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.71.woff2 +0 -0
  251. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.72.woff2 +0 -0
  252. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.73.woff2 +0 -0
  253. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.74.woff2 +0 -0
  254. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.75.woff2 +0 -0
  255. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.76.woff2 +0 -0
  256. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.77.woff2 +0 -0
  257. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.78.woff2 +0 -0
  258. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.79.woff2 +0 -0
  259. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.8.woff2 +0 -0
  260. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.80.woff2 +0 -0
  261. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.81.woff2 +0 -0
  262. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.82.woff2 +0 -0
  263. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.83.woff2 +0 -0
  264. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.84.woff2 +0 -0
  265. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.85.woff2 +0 -0
  266. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.86.woff2 +0 -0
  267. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.87.woff2 +0 -0
  268. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.88.woff2 +0 -0
  269. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.89.woff2 +0 -0
  270. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.9.woff2 +0 -0
  271. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.90.woff2 +0 -0
  272. package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.91.woff2 +0 -0
  273. package/package.json +10 -3
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","sourceRoot":"","sources":["../src/popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import { cloneElement, createContext, forwardRef, useCallback, useContext, useEffect, useId, useRef, useState, useSyncExternalStore, type CSSProperties, type ReactNode, type RefObject } from \"react\";\nimport { canDismissPopover, popoverBehaviorDefaults, popoverHoverDelay, popoverRecipe, resolvePopoverDescriptor, validatePopoverOpenState, type PopoverDescriptor, type PopoverDismissPolicy, type PopoverDismissReason, type PopoverOpenChangeDetails, type PopoverOpenOn, type PopoverOpenState } from \"@hjmds/design-contracts/components/popover\";\nimport { easing, layer } from \"@hjmds/design-contracts/foundations\";\nimport type { TransitionRect } from \"@hjmds/design-contracts/content-transition\";\nimport { useOverlayOriginMotion } from \"./internal/overlay-origin-motion.js\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs } from \"./internal.js\";\nimport { AnchoredPortal, getPopoverOwner, useAnchoredPopup } from \"./portal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { OverlayTrigger } from \"./overlays.js\";\n\nexport type PopoverContentActions = Readonly<{ close(): void }>;\n// No `layoutStyle`: renders the caller's trigger plus an anchored portal; place the trigger instead.\nexport type PopoverProps = PopoverOpenState & Readonly<{\n trigger: OverlayTrigger;\n title: string;\n closeLabel: string;\n description?: string;\n descriptor?: PopoverDescriptor;\n children?: ReactNode | ((actions: PopoverContentActions) => ReactNode);\n dismissPolicy?: Partial<PopoverDismissPolicy>;\n /**\n * `\"hover\"` adds pointer enter/leave on top of the click path; it never\n * replaces it, because hover does not exist on touch or for a keyboard.\n */\n openOn?: PopoverOpenOn;\n /** Optional trigger bounds in viewport coordinates; state and focus remain non-modal. */\n motionOrigin?: TransitionRect;\n initialFocusRef?: RefObject<HTMLElement | null>;\n portalContainer?: HTMLElement;\n className?: string;\n}>;\nconst ParentPopoverOpen = createContext(true);\nconst motionQuery = \"(prefers-reduced-motion: reduce)\";\nfunction subscribeSystemMotion(notify: () => void) {\n const media = window.matchMedia(motionQuery); media.addEventListener(\"change\", notify);\n return () => media.removeEventListener(\"change\", notify);\n}\nconst readSystemMotion = () => window.matchMedia(motionQuery).matches;\nconst readServerMotion = () => false;\nconst focusable = 'a[href],button,input,select,textarea,[tabindex]';\nfunction tabStops(container: HTMLElement): HTMLElement[] {\n return [...container.querySelectorAll<HTMLElement>(focusable)].filter((node) =>\n node.tabIndex >= 0 && !node.matches(\":disabled\") && !node.closest('[inert],[hidden],[aria-hidden=\"true\"]') && node.getClientRects().length > 0 && getComputedStyle(node).visibility !== \"hidden\",\n ).sort((a, b) => (a.tabIndex > 0 ? a.tabIndex : Infinity) - (b.tabIndex > 0 ? b.tabIndex : Infinity));\n}\nfunction contains(content: HTMLElement, target: Node): boolean {\n if (content.contains(target)) return true;\n const visited = new Set<HTMLElement>(); let owner = getPopoverOwner(target);\n while (owner && !visited.has(owner)) {\n if (owner === content) return true;\n visited.add(owner); owner = getPopoverOwner(owner.parentElement);\n }\n return false;\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover({ trigger, title, closeLabel,\n description, descriptor = {}, children, dismissPolicy, openOn = popoverBehaviorDefaults.openOn, initialFocusRef, portalContainer, className, motionOrigin,\n open: controlledOpen, defaultOpen, onOpenChange }, ref) {\n if (!title.trim() || !closeLabel.trim()) throw new TypeError(\"Popover title and closeLabel must not be empty\");\n const resolved = resolvePopoverDescriptor(descriptor);\n validatePopoverOpenState({ ...(controlledOpen === undefined ? {} : { open: controlledOpen }), ...(defaultOpen === undefined ? {} : { defaultOpen }), ...(onOpenChange ? { onOpenChange } : {}) } as PopoverOpenState);\n const policy = { ...popoverBehaviorDefaults, ...dismissPolicy };\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const parentOpen = useContext(ParentPopoverOpen);\n const open = parentOpen && (controlledOpen ?? internalOpen);\n const previousParentOpen = useRef(parentOpen);\n useEffect(() => {\n if (!parentOpen && previousParentOpen.current && (controlledOpen ?? internalOpen)) {\n // A closed parent ends the child's session; reopening it must not resurrect\n // a stale uncontrolled submenu or leave a controlled owner uninformed.\n if (controlledOpen === undefined) setInternalOpen(false);\n onOpenChange?.(false, { reason: \"programmatic\" });\n }\n previousParentOpen.current = parentOpen;\n }, [parentOpen, controlledOpen, internalOpen, onOpenChange]);\n const theme = useOptionalHjmTheme();\n const systemReduced = useSyncExternalStore(subscribeSystemMotion, readSystemMotion, readServerMotion);\n const reduced = theme?.environment.reducedMotion ?? systemReduced;\n const [present, setPresent] = useState(open);\n const [node, setNode] = useState<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const closeReason = useRef<PopoverDismissReason | undefined>(undefined);\n const focusWasInside = useRef(false);\n const didFocus = useRef(false);\n const requestPending = useRef(false);\n const id = `${useId().replaceAll(\":\", \"\")}-popover`;\n const state = useRef({ open, policy, onOpenChange, controlledOpen }); state.current = { open, policy, onOpenChange, controlledOpen };\n const change = useCallback((next: boolean, reason: PopoverOpenChangeDetails[\"reason\"]) => {\n const current = state.current;\n if (next === current.open || requestPending.current) return;\n if (!next && !canDismissPopover(reason as PopoverDismissReason, current.policy)) return;\n requestPending.current = true;\n // Deduplicate one interaction, but let a controlled owner reject it and receive a later attempt.\n queueMicrotask(() => { requestPending.current = false; });\n closeReason.current = next ? undefined : reason as PopoverDismissReason;\n if (current.controlledOpen === undefined) setInternalOpen(next);\n current.onOpenChange?.(next, { reason });\n }, []);\n useEffect(() => {\n if (open) { setPresent(true); return; }\n if (!present) return;\n // Keep only the exit surface briefly; inert/aria-hidden exclude it immediately.\n // A parent context closes nested popovers in the same render, including their portals.\n if (reduced) { setPresent(false); return; }\n const timeout = setTimeout(() => setPresent(false), popoverRecipe.transition.exit.duration);\n return () => clearTimeout(timeout);\n }, [open, present, reduced]);\n const position = useAnchoredPopup(triggerRef, open || present ? node : null, {\n placement: resolved.placement, align: resolved.align, gap: popoverRecipe.sideOffset,\n // Contextual forms share the dropdown tier with menus (DOM order puts a popover opened\n // from a menu above it) and stay below tooltips; a modal owner supplies its own layer\n // through the shared positioning helper.\n viewportPadding: popoverRecipe.collisionPadding, zIndex: layer.dropdown, fallbackAxis: true, layoutDimensions: motionOrigin !== undefined,\n });\n const motion = useOverlayOriginMotion(open, motionOrigin, reduced, {\n ready: position.style.visibility === \"visible\", transition: popoverRecipe.transition,\n });\n const setContent = useCallback((value: HTMLDivElement | null) => { setNode(value); }, []);\n const contentRef = useCallback(composeRefs(setContent, ref, motion.setNode), [setContent, ref, motion.setNode]);\n useEffect(() => {\n if (!open) {\n if (didFocus.current) {\n didFocus.current = false;\n const reason = closeReason.current;\n if ((reason === undefined || reason === \"programmatic\" || reason === \"escape\" || reason === \"close-action\") && focusWasInside.current) {\n queueMicrotask(() => {\n const active = document.activeElement;\n if (active === document.body || (node && active instanceof Node && contains(node, active))) triggerRef.current?.focus({ preventScroll: true });\n });\n }\n }\n closeReason.current = undefined; return;\n }\n if (!node || position.style.visibility !== \"visible\" || didFocus.current) return;\n didFocus.current = true;\n const initial = initialFocusRef?.current;\n const target = initial && contains(node, initial) ? initial : tabStops(node.querySelector<HTMLElement>(\"[data-hjm-popover-body]\")!)[0] ?? node;\n target.focus({ preventScroll: true }); focusWasInside.current = true;\n }, [open, node, position.style.visibility, initialFocusRef]);\n useEffect(() => {\n if (!open || !node) return;\n let pointerOutside = false;\n const inside = (target: EventTarget | null): target is Node => target instanceof Node && (contains(node, target) || triggerRef.current?.contains(target) === true);\n const pointer = (event: PointerEvent) => {\n pointerOutside = !inside(event.target);\n if (pointerOutside) change(false, \"outside-pointer\");\n };\n const pointerEnd = () => { pointerOutside = false; };\n const focus = (event: FocusEvent) => {\n focusWasInside.current = event.target instanceof Node && contains(node, event.target);\n if (!inside(event.target) && !pointerOutside) change(false, \"outside-focus\");\n };\n const keyboard = (event: KeyboardEvent) => {\n if (event.defaultPrevented || !inside(event.target)) return;\n const owner = getPopoverOwner(event.target instanceof Node ? event.target : null);\n if (owner && owner !== node) return;\n if (event.key === \"Escape\") { event.preventDefault(); event.stopPropagation(); change(false, \"escape\"); }\n if (event.key !== \"Tab\" || !(event.target instanceof Node) || !contains(node, event.target)) return;\n const stops = tabStops(node); const first = stops[0]; const last = stops.at(-1);\n if (event.shiftKey && (document.activeElement === first || document.activeElement === node)) {\n event.preventDefault(); triggerRef.current?.focus(); change(false, \"outside-focus\");\n } else if (!event.shiftKey && (document.activeElement === last || stops.length === 0)) {\n const all = tabStops(document.body).filter((item) => !contains(node, item));\n const index = all.indexOf(triggerRef.current!); const next = index >= 0 ? all[index + 1] : undefined;\n // Portals sit at the end of body; continue after the trigger's logical position.\n if (next) { event.preventDefault(); next.focus(); change(false, \"outside-focus\"); }\n }\n };\n document.addEventListener(\"pointerdown\", pointer); document.addEventListener(\"pointerup\", pointerEnd); document.addEventListener(\"pointercancel\", pointerEnd);\n document.addEventListener(\"focusin\", focus); document.addEventListener(\"keydown\", keyboard);\n return () => { document.removeEventListener(\"pointerdown\", pointer); document.removeEventListener(\"pointerup\", pointerEnd); document.removeEventListener(\"pointercancel\", pointerEnd); document.removeEventListener(\"focusin\", focus); document.removeEventListener(\"keydown\", keyboard); };\n }, [open, node, change]);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const cancelHover = useCallback(() => { if (hoverTimer.current !== undefined) { clearTimeout(hoverTimer.current); hoverTimer.current = undefined; } }, []);\n useEffect(() => cancelHover, [cancelHover]);\n const scheduleHover = useCallback((next: boolean) => {\n cancelHover();\n // Delays on both edges: opening instantly turns a pass-through into a flash,\n // and closing instantly makes the gap between trigger and panel untraversable.\n hoverTimer.current = setTimeout(\n () => change(next, next ? \"trigger\" : \"outside-pointer\"),\n next ? popoverHoverDelay.open : popoverHoverDelay.close,\n );\n }, [cancelHover, change]);\n const hoverHandlers = openOn === \"hover\"\n ? {\n onPointerEnter: (event: { pointerType?: string }) => { if (event.pointerType !== \"touch\") scheduleHover(true); },\n onPointerLeave: (event: { pointerType?: string }) => { if (event.pointerType !== \"touch\") scheduleHover(false); },\n }\n : {};\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef), \"aria-haspopup\": \"dialog\", \"aria-expanded\": open, \"aria-controls\": id,\n ...hoverHandlers,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || triggerProps[\"aria-disabled\"] === true || triggerProps[\"aria-disabled\"] === \"true\") return;\n change(!open, open ? \"close-action\" : \"trigger\");\n },\n });\n const style = { ...position.style, \"--hjm-popover-max-width\": `${popoverRecipe.maxWidth}px`,\n \"--hjm-popover-duration\": `${open ? popoverRecipe.transition.enter.duration : reduced ? 0 : popoverRecipe.transition.exit.duration}ms`,\n \"--hjm-popover-easing\": `cubic-bezier(${easing[open ? popoverRecipe.transition.enter.easing : popoverRecipe.transition.exit.easing].join(\", \")})`,\n minWidth: Math.min(popoverRecipe.minWidth, Number(position.style.maxWidth ?? popoverRecipe.minWidth)),\n // Keep the legacy recipe without a profile; portal context variables follow\n // the nearest provider so an open editor cannot retain neutral elevation.\n boxShadow: theme?.designProfile ? \"var(--hjm-shadow-floating)\" : `0 ${popoverRecipe.surface.shadow.offsetY}px ${popoverRecipe.surface.shadow.radius}px ${popoverRecipe.surface.shadow.color}${Math.round(popoverRecipe.surface.shadow.opacity * 255).toString(16).padStart(2, \"0\")}`,\n\n } as CSSProperties;\n return <>{renderedTrigger}{open || present || motion.visible ? <AnchoredPortal anchorRef={triggerRef} ssrFallback=\"inline\" {...(portalContainer ? { container: portalContainer } : {})}>\n <ParentPopoverOpen.Provider value={open}><div ref={contentRef} id={id} role=\"dialog\" tabIndex={-1} data-hjm-popover-content=\"\" data-state={open ? \"open\" : \"closed\"}\n aria-hidden={!open || undefined} inert={!open || undefined} aria-label={resolved.accessibilityLabel} aria-labelledby={resolved.accessibilityLabel ? undefined : `${id}-title`} aria-describedby={description ? `${id}-description` : undefined}\n className={classNames(\"hjm-popover\", className)} style={style} data-placement={position.placement} data-align={position.align} {...hoverHandlers}\n onAnimationEnd={(event) => { if (!open && event.target === event.currentTarget) setPresent(false); }}>\n <div className=\"hjm-popover__header\"><h2 id={`${id}-title`} className=\"hjm-popover__title\">{title}</h2><Button tone=\"ghost\" onClick={() => change(false, \"close-action\")}>{closeLabel}</Button></div>\n {description ? <p id={`${id}-description`} className=\"hjm-popover__description\">{description}</p> : null}\n <div data-hjm-popover-body=\"\" className=\"hjm-popover__body\">{typeof children === \"function\" ? children({ close: () => change(false, \"close-action\") }) : children}</div>\n </div></ParentPopoverOpen.Provider>\n </AnchoredPortal> : null}</>;\n});\n"]}
1
+ {"version":3,"file":"popover.js","sourceRoot":"","sources":["../src/popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import { cloneElement, createContext, forwardRef, useCallback, useContext, useEffect, useId, useRef, useState, useSyncExternalStore, type CSSProperties, type ReactNode, type RefObject } from \"react\";\nimport { canDismissPopover, popoverBehaviorDefaults, popoverHoverDelay, popoverRecipe, resolvePopoverDescriptor, validatePopoverOpenState, type PopoverDescriptor, type PopoverDismissPolicy, type PopoverDismissReason, type PopoverOpenChangeDetails, type PopoverOpenOn, type PopoverOpenState } from \"@hjmds/design-contracts/components/popover\";\nimport { easing, layer } from \"@hjmds/design-contracts/foundations\";\nimport type { TransitionRect } from \"@hjmds/design-contracts/content-transition\";\nimport { useOverlayOriginMotion } from \"./internal/overlay-origin-motion.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { classNames, composeRefs } from \"./internal.js\";\nimport { AnchoredPortal, getPopoverOwner, useAnchoredPopup } from \"./portal.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport type { OverlayTrigger } from \"./overlays.js\";\n\nexport type PopoverContentActions = Readonly<{ close(): void }>;\n// No `layoutStyle`: renders the caller's trigger plus an anchored portal; place the trigger instead.\nexport type PopoverProps = PopoverOpenState & Readonly<{\n trigger: OverlayTrigger;\n title: string;\n closeLabel: string;\n /**\n * Product-supplied glyph for the header close. When present it renders an IconButton named by\n * `closeLabel` (tool actions use icons, 2026-10-17 usage rule in docs/usage/components/icon-button.md);\n * omitted keeps the text close for existing products.\n */\n closeIcon?: ReactNode;\n description?: string;\n descriptor?: PopoverDescriptor;\n children?: ReactNode | ((actions: PopoverContentActions) => ReactNode);\n dismissPolicy?: Partial<PopoverDismissPolicy>;\n /**\n * `\"hover\"` adds pointer enter/leave on top of the click path; it never\n * replaces it, because hover does not exist on touch or for a keyboard.\n */\n openOn?: PopoverOpenOn;\n /** Optional trigger bounds in viewport coordinates; state and focus remain non-modal. */\n motionOrigin?: TransitionRect;\n initialFocusRef?: RefObject<HTMLElement | null>;\n portalContainer?: HTMLElement;\n className?: string;\n}>;\nconst ParentPopoverOpen = createContext(true);\nconst motionQuery = \"(prefers-reduced-motion: reduce)\";\nfunction subscribeSystemMotion(notify: () => void) {\n const media = window.matchMedia(motionQuery); media.addEventListener(\"change\", notify);\n return () => media.removeEventListener(\"change\", notify);\n}\nconst readSystemMotion = () => window.matchMedia(motionQuery).matches;\nconst readServerMotion = () => false;\nconst focusable = 'a[href],button,input,select,textarea,[tabindex]';\nfunction tabStops(container: HTMLElement): HTMLElement[] {\n return [...container.querySelectorAll<HTMLElement>(focusable)].filter((node) =>\n node.tabIndex >= 0 && !node.matches(\":disabled\") && !node.closest('[inert],[hidden],[aria-hidden=\"true\"]') && node.getClientRects().length > 0 && getComputedStyle(node).visibility !== \"hidden\",\n ).sort((a, b) => (a.tabIndex > 0 ? a.tabIndex : Infinity) - (b.tabIndex > 0 ? b.tabIndex : Infinity));\n}\nfunction contains(content: HTMLElement, target: Node): boolean {\n if (content.contains(target)) return true;\n const visited = new Set<HTMLElement>(); let owner = getPopoverOwner(target);\n while (owner && !visited.has(owner)) {\n if (owner === content) return true;\n visited.add(owner); owner = getPopoverOwner(owner.parentElement);\n }\n return false;\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover({ trigger, title, closeLabel, closeIcon,\n description, descriptor = {}, children, dismissPolicy, openOn = popoverBehaviorDefaults.openOn, initialFocusRef, portalContainer, className, motionOrigin,\n open: controlledOpen, defaultOpen, onOpenChange }, ref) {\n if (!title.trim() || !closeLabel.trim()) throw new TypeError(\"Popover title and closeLabel must not be empty\");\n const resolved = resolvePopoverDescriptor(descriptor);\n validatePopoverOpenState({ ...(controlledOpen === undefined ? {} : { open: controlledOpen }), ...(defaultOpen === undefined ? {} : { defaultOpen }), ...(onOpenChange ? { onOpenChange } : {}) } as PopoverOpenState);\n const policy = { ...popoverBehaviorDefaults, ...dismissPolicy };\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const parentOpen = useContext(ParentPopoverOpen);\n const open = parentOpen && (controlledOpen ?? internalOpen);\n const previousParentOpen = useRef(parentOpen);\n useEffect(() => {\n if (!parentOpen && previousParentOpen.current && (controlledOpen ?? internalOpen)) {\n // A closed parent ends the child's session; reopening it must not resurrect\n // a stale uncontrolled submenu or leave a controlled owner uninformed.\n if (controlledOpen === undefined) setInternalOpen(false);\n onOpenChange?.(false, { reason: \"programmatic\" });\n }\n previousParentOpen.current = parentOpen;\n }, [parentOpen, controlledOpen, internalOpen, onOpenChange]);\n const theme = useOptionalHjmTheme();\n const systemReduced = useSyncExternalStore(subscribeSystemMotion, readSystemMotion, readServerMotion);\n const reduced = theme?.environment.reducedMotion ?? systemReduced;\n const [present, setPresent] = useState(open);\n const [node, setNode] = useState<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const closeReason = useRef<PopoverDismissReason | undefined>(undefined);\n const focusWasInside = useRef(false);\n const didFocus = useRef(false);\n const requestPending = useRef(false);\n const id = `${useId().replaceAll(\":\", \"\")}-popover`;\n const state = useRef({ open, policy, onOpenChange, controlledOpen }); state.current = { open, policy, onOpenChange, controlledOpen };\n const change = useCallback((next: boolean, reason: PopoverOpenChangeDetails[\"reason\"]) => {\n const current = state.current;\n if (next === current.open || requestPending.current) return;\n if (!next && !canDismissPopover(reason as PopoverDismissReason, current.policy)) return;\n requestPending.current = true;\n // Deduplicate one interaction, but let a controlled owner reject it and receive a later attempt.\n queueMicrotask(() => { requestPending.current = false; });\n closeReason.current = next ? undefined : reason as PopoverDismissReason;\n if (current.controlledOpen === undefined) setInternalOpen(next);\n current.onOpenChange?.(next, { reason });\n }, []);\n useEffect(() => {\n if (open) { setPresent(true); return; }\n if (!present) return;\n // Keep only the exit surface briefly; inert/aria-hidden exclude it immediately.\n // A parent context closes nested popovers in the same render, including their portals.\n if (reduced) { setPresent(false); return; }\n const timeout = setTimeout(() => setPresent(false), popoverRecipe.transition.exit.duration);\n return () => clearTimeout(timeout);\n }, [open, present, reduced]);\n const position = useAnchoredPopup(triggerRef, open || present ? node : null, {\n placement: resolved.placement, align: resolved.align, gap: popoverRecipe.sideOffset,\n // Contextual forms share the dropdown tier with menus (DOM order puts a popover opened\n // from a menu above it) and stay below tooltips; a modal owner supplies its own layer\n // through the shared positioning helper.\n viewportPadding: popoverRecipe.collisionPadding, zIndex: layer.dropdown, fallbackAxis: true, layoutDimensions: motionOrigin !== undefined,\n });\n const motion = useOverlayOriginMotion(open, motionOrigin, reduced, {\n ready: position.style.visibility === \"visible\", transition: popoverRecipe.transition,\n });\n const setContent = useCallback((value: HTMLDivElement | null) => { setNode(value); }, []);\n const contentRef = useCallback(composeRefs(setContent, ref, motion.setNode), [setContent, ref, motion.setNode]);\n useEffect(() => {\n if (!open) {\n if (didFocus.current) {\n didFocus.current = false;\n const reason = closeReason.current;\n if ((reason === undefined || reason === \"programmatic\" || reason === \"escape\" || reason === \"close-action\") && focusWasInside.current) {\n queueMicrotask(() => {\n const active = document.activeElement;\n if (active === document.body || (node && active instanceof Node && contains(node, active))) triggerRef.current?.focus({ preventScroll: true });\n });\n }\n }\n closeReason.current = undefined; return;\n }\n if (!node || position.style.visibility !== \"visible\" || didFocus.current) return;\n didFocus.current = true;\n const initial = initialFocusRef?.current;\n const target = initial && contains(node, initial) ? initial : tabStops(node.querySelector<HTMLElement>(\"[data-hjm-popover-body]\")!)[0] ?? node;\n target.focus({ preventScroll: true }); focusWasInside.current = true;\n }, [open, node, position.style.visibility, initialFocusRef]);\n useEffect(() => {\n if (!open || !node) return;\n let pointerOutside = false;\n const inside = (target: EventTarget | null): target is Node => target instanceof Node && (contains(node, target) || triggerRef.current?.contains(target) === true);\n const pointer = (event: PointerEvent) => {\n pointerOutside = !inside(event.target);\n if (pointerOutside) change(false, \"outside-pointer\");\n };\n const pointerEnd = () => { pointerOutside = false; };\n const focus = (event: FocusEvent) => {\n focusWasInside.current = event.target instanceof Node && contains(node, event.target);\n if (!inside(event.target) && !pointerOutside) change(false, \"outside-focus\");\n };\n const keyboard = (event: KeyboardEvent) => {\n if (event.defaultPrevented || !inside(event.target)) return;\n const owner = getPopoverOwner(event.target instanceof Node ? event.target : null);\n if (owner && owner !== node) return;\n if (event.key === \"Escape\") { event.preventDefault(); event.stopPropagation(); change(false, \"escape\"); }\n if (event.key !== \"Tab\" || !(event.target instanceof Node) || !contains(node, event.target)) return;\n const stops = tabStops(node); const first = stops[0]; const last = stops.at(-1);\n if (event.shiftKey && (document.activeElement === first || document.activeElement === node)) {\n event.preventDefault(); triggerRef.current?.focus(); change(false, \"outside-focus\");\n } else if (!event.shiftKey && (document.activeElement === last || stops.length === 0)) {\n const all = tabStops(document.body).filter((item) => !contains(node, item));\n const index = all.indexOf(triggerRef.current!); const next = index >= 0 ? all[index + 1] : undefined;\n // Portals sit at the end of body; continue after the trigger's logical position.\n if (next) { event.preventDefault(); next.focus(); change(false, \"outside-focus\"); }\n }\n };\n document.addEventListener(\"pointerdown\", pointer); document.addEventListener(\"pointerup\", pointerEnd); document.addEventListener(\"pointercancel\", pointerEnd);\n document.addEventListener(\"focusin\", focus); document.addEventListener(\"keydown\", keyboard);\n return () => { document.removeEventListener(\"pointerdown\", pointer); document.removeEventListener(\"pointerup\", pointerEnd); document.removeEventListener(\"pointercancel\", pointerEnd); document.removeEventListener(\"focusin\", focus); document.removeEventListener(\"keydown\", keyboard); };\n }, [open, node, change]);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const cancelHover = useCallback(() => { if (hoverTimer.current !== undefined) { clearTimeout(hoverTimer.current); hoverTimer.current = undefined; } }, []);\n useEffect(() => cancelHover, [cancelHover]);\n const scheduleHover = useCallback((next: boolean) => {\n cancelHover();\n // Delays on both edges: opening instantly turns a pass-through into a flash,\n // and closing instantly makes the gap between trigger and panel untraversable.\n hoverTimer.current = setTimeout(\n () => change(next, next ? \"trigger\" : \"outside-pointer\"),\n next ? popoverHoverDelay.open : popoverHoverDelay.close,\n );\n }, [cancelHover, change]);\n const hoverHandlers = openOn === \"hover\"\n ? {\n onPointerEnter: (event: { pointerType?: string }) => { if (event.pointerType !== \"touch\") scheduleHover(true); },\n onPointerLeave: (event: { pointerType?: string }) => { if (event.pointerType !== \"touch\") scheduleHover(false); },\n }\n : {};\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef), \"aria-haspopup\": \"dialog\", \"aria-expanded\": open, \"aria-controls\": id,\n ...hoverHandlers,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || triggerProps[\"aria-disabled\"] === true || triggerProps[\"aria-disabled\"] === \"true\") return;\n change(!open, open ? \"close-action\" : \"trigger\");\n },\n });\n const style = { ...position.style, \"--hjm-popover-max-width\": `${popoverRecipe.maxWidth}px`,\n \"--hjm-popover-duration\": `${open ? popoverRecipe.transition.enter.duration : reduced ? 0 : popoverRecipe.transition.exit.duration}ms`,\n \"--hjm-popover-easing\": `cubic-bezier(${easing[open ? popoverRecipe.transition.enter.easing : popoverRecipe.transition.exit.easing].join(\", \")})`,\n minWidth: Math.min(popoverRecipe.minWidth, Number(position.style.maxWidth ?? popoverRecipe.minWidth)),\n // Keep the legacy recipe without a profile; portal context variables follow\n // the nearest provider so an open editor cannot retain neutral elevation.\n boxShadow: theme?.designProfile ? \"var(--hjm-shadow-floating)\" : `0 ${popoverRecipe.surface.shadow.offsetY}px ${popoverRecipe.surface.shadow.radius}px ${popoverRecipe.surface.shadow.color}${Math.round(popoverRecipe.surface.shadow.opacity * 255).toString(16).padStart(2, \"0\")}`,\n\n } as CSSProperties;\n return <>{renderedTrigger}{open || present || motion.visible ? <AnchoredPortal anchorRef={triggerRef} ssrFallback=\"inline\" {...(portalContainer ? { container: portalContainer } : {})}>\n <ParentPopoverOpen.Provider value={open}><div ref={contentRef} id={id} role=\"dialog\" tabIndex={-1} data-hjm-popover-content=\"\" data-state={open ? \"open\" : \"closed\"}\n aria-hidden={!open || undefined} inert={!open || undefined} aria-label={resolved.accessibilityLabel} aria-labelledby={resolved.accessibilityLabel ? undefined : `${id}-title`} aria-describedby={description ? `${id}-description` : undefined}\n className={classNames(\"hjm-popover\", className)} style={style} data-placement={position.placement} data-align={position.align} {...hoverHandlers}\n onAnimationEnd={(event) => { if (!open && event.target === event.currentTarget) setPresent(false); }}>\n <div className=\"hjm-popover__header\"><h2 id={`${id}-title`} className=\"hjm-popover__title\">{title}</h2>{closeIcon === undefined ? <Button tone=\"ghost\" onClick={() => change(false, \"close-action\")}>{closeLabel}</Button> : <IconButton label={closeLabel} tone=\"ghost\" onClick={() => change(false, \"close-action\")}>{closeIcon}</IconButton>}</div>\n {description ? <p id={`${id}-description`} className=\"hjm-popover__description\">{description}</p> : null}\n <div data-hjm-popover-body=\"\" className=\"hjm-popover__body\">{typeof children === \"function\" ? children({ close: () => change(false, \"close-action\") }) : children}</div>\n </div></ParentPopoverOpen.Provider>\n </AnchoredPortal> : null}</>;\n});\n"]}
package/dist/qr-code.js CHANGED
@@ -9,6 +9,6 @@ export function QRCode({ value, label, size = 192, level = "M", fallback, layout
9
9
  throw new TypeError("QRCode needs an accessible label, alternative action and at least two pixels per module");
10
10
  // Integer-sized modules plus a four-module white quiet zone preserve scan geometry in both themes.
11
11
  const actualSize = Math.floor(size / modules) * modules;
12
- return _jsxs("div", { "data-hjm-qr-code": true, style: layoutStyle, children: [_jsxs("svg", { role: "img", "aria-label": label, width: actualSize, height: actualSize, viewBox: `0 0 ${modules} ${modules}`, shapeRendering: "crispEdges", children: [_jsx("rect", { width: modules, height: modules, fill: qrCodeRecipe.background }), _jsx("path", { d: qrPath(matrix), fill: qrCodeRecipe.foreground })] }), fallback] });
12
+ return _jsxs("div", { "data-hjm-qr-code": true, style: { display: "flex", flexDirection: "column", alignItems: "center", gap: qrCodeRecipe.fallbackGap, ...layoutStyle }, children: [_jsxs("svg", { role: "img", "aria-label": label, width: actualSize, height: actualSize, viewBox: `0 0 ${modules} ${modules}`, shapeRendering: "crispEdges", children: [_jsx("rect", { width: modules, height: modules, fill: qrCodeRecipe.background }), _jsx("path", { d: qrPath(matrix), fill: qrCodeRecipe.foreground })] }), fallback] });
13
13
  }
14
14
  //# sourceMappingURL=qr-code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../src/qr-code.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAA0B,MAAM,4CAA4C,CAAC;AAK1H,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAe;IAClG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,OAAO,GAAG,YAAY,CAAC,aAAa;QAAE,MAAM,IAAI,SAAS,CAAC,yFAAyF,CAAC,CAAC;IACrP,mGAAmG;IACnG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;IACxD,OAAO,yCAAsB,KAAK,EAAE,WAAW,aAAE,eAAK,IAAI,EAAC,KAAK,gBAAa,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,OAAO,IAAI,OAAO,EAAE,EAAE,cAAc,EAAC,YAAY,aAC1L,eAAM,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,EAAA,eAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,IAC9H,EAAC,QAAQ,IAAO,CAAC;AACzB,CAAC","sourcesContent":["import qrcode from \"qrcode-generator\";\nimport { useMemo, type ReactNode } from \"react\";\nimport { createQRMatrix, qrPath, qrCodeRecipe, type QRErrorCorrection } from \"@hjmds/design-contracts/components/qr-code\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type QRCodeProps = { value: string; label: string; size?: number; level?: QRErrorCorrection; fallback: ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp };\nexport function QRCode({ value, label, size = 192, level = \"M\", fallback, layoutStyle }: QRCodeProps) {\n const matrix = useMemo(() => createQRMatrix(value, qrcode, level), [value, level]);\n const modules = matrix.count + matrix.quietZone * 2;\n if (!label.trim() || fallback == null || fallback === false || !Number.isFinite(size) || size < modules * qrCodeRecipe.minModuleSize) throw new TypeError(\"QRCode needs an accessible label, alternative action and at least two pixels per module\");\n // Integer-sized modules plus a four-module white quiet zone preserve scan geometry in both themes.\n const actualSize = Math.floor(size / modules) * modules;\n return <div data-hjm-qr-code style={layoutStyle}><svg role=\"img\" aria-label={label} width={actualSize} height={actualSize} viewBox={`0 0 ${modules} ${modules}`} shapeRendering=\"crispEdges\">\n <rect width={modules} height={modules} fill={qrCodeRecipe.background} /><path d={qrPath(matrix)} fill={qrCodeRecipe.foreground} />\n </svg>{fallback}</div>;\n}\n"]}
1
+ {"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../src/qr-code.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAA0B,MAAM,4CAA4C,CAAC;AAK1H,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAe;IAClG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,OAAO,GAAG,YAAY,CAAC,aAAa;QAAE,MAAM,IAAI,SAAS,CAAC,yFAAyF,CAAC,CAAC;IACrP,mGAAmG;IACnG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;IACxD,OAAO,yCAAsB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,GAAG,WAAW,EAAE,aAAE,eAAK,IAAI,EAAC,KAAK,gBAAa,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,OAAO,IAAI,OAAO,EAAE,EAAE,cAAc,EAAC,YAAY,aAChS,eAAM,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,EAAA,eAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,IAC9H,EAAC,QAAQ,IAAO,CAAC;AACzB,CAAC","sourcesContent":["import qrcode from \"qrcode-generator\";\nimport { useMemo, type ReactNode } from \"react\";\nimport { createQRMatrix, qrPath, qrCodeRecipe, type QRErrorCorrection } from \"@hjmds/design-contracts/components/qr-code\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type QRCodeProps = { value: string; label: string; size?: number; level?: QRErrorCorrection; fallback: ReactNode;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp };\nexport function QRCode({ value, label, size = 192, level = \"M\", fallback, layoutStyle }: QRCodeProps) {\n const matrix = useMemo(() => createQRMatrix(value, qrcode, level), [value, level]);\n const modules = matrix.count + matrix.quietZone * 2;\n if (!label.trim() || fallback == null || fallback === false || !Number.isFinite(size) || size < modules * qrCodeRecipe.minModuleSize) throw new TypeError(\"QRCode needs an accessible label, alternative action and at least two pixels per module\");\n // Integer-sized modules plus a four-module white quiet zone preserve scan geometry in both themes.\n const actualSize = Math.floor(size / modules) * modules;\n return <div data-hjm-qr-code style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: qrCodeRecipe.fallbackGap, ...layoutStyle }}><svg role=\"img\" aria-label={label} width={actualSize} height={actualSize} viewBox={`0 0 ${modules} ${modules}`} shapeRendering=\"crispEdges\">\n <rect width={modules} height={modules} fill={qrCodeRecipe.background} /><path d={qrPath(matrix)} fill={qrCodeRecipe.foreground} />\n </svg>{fallback}</div>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reaction-picker.d.ts","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3J,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAAC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACzR,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAgB,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,mBAAmB,+BAkBjJ"}
1
+ {"version":3,"file":"reaction-picker.d.ts","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3J,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAAC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACzR,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAgB,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,mBAAmB,+BA+BjJ"}
@@ -11,6 +11,11 @@ export function ReactionPicker({ label, options, value, onValueChange, disabled
11
11
  const all = resolveReactionOptions(options, more);
12
12
  validateReactions(all, value);
13
13
  const showingAll = expanded && !!more;
14
+ // The wrap layout sits on the page background, where a ghost Button's selected treatment (content color on the
15
+ // canvas) cannot show: an emoji ignores text color. It uses the chip frame instead — hairline at rest, brand
16
+ // border and accent fill when chosen — with toggle-button semantics (aria-pressed), matching Native. The strip
17
+ // layout keeps ghost Buttons because the message bubble supplies its surface (2026-10-17 review).
18
+ const chips = layout === "wrap";
14
19
  const visible = showingAll ? all : options;
15
20
  const choose = (id) => { if (!disabled) {
16
21
  refocus.current = !!root.current?.contains(document.activeElement);
@@ -20,6 +25,14 @@ export function ReactionPicker({ label, options, value, onValueChange, disabled
20
25
  // A catalog-only button unmounts on collapse: refocus the toggle, not <body>. Inert hosts restore their own trigger.
21
26
  useLayoutEffect(() => { const node = root.current; if (refocus.current && !showingAll && node && !node.closest("[inert]") && !node.contains(document.activeElement))
22
27
  toggle.current?.focus(); refocus.current = false; });
23
- return _jsxs("div", { ref: root, role: "group", "aria-label": label, className: "hjm-reaction-picker", "data-layout": layout, "data-expanded": showingAll || undefined, style: layoutStyle, children: [_jsx("div", { className: "hjm-reaction-picker__options", children: visible.map(option => _jsx(Button, { tone: "ghost", shape: "pill", selected: value === option.id, disabled: disabled || option.disabled, "aria-label": option.label, onClick: () => choose(option.id), children: _jsxs("span", { "aria-hidden": "true", className: "hjm-reaction-picker__glyph", children: [option.emoji, option.count === undefined ? null : ` ${option.count}`] }) }, option.id)) }), _jsx("div", { children: more ? _jsx(Button, { ref: toggle, tone: "ghost", shape: "pill", "aria-label": more.label, "aria-expanded": showingAll, disabled: disabled, onClick: () => setExpanded(current => !current), children: _jsx("span", { "aria-hidden": "true", className: "hjm-reaction-picker__glyph", children: showingAll ? "−" : "+" }) }) : null })] });
28
+ return _jsxs("div", { ref: root, role: "group", "aria-label": label, className: "hjm-reaction-picker", "data-layout": layout, "data-expanded": showingAll || undefined, style: layoutStyle, children: [_jsx("div", { className: "hjm-reaction-picker__options", children: visible.map(option => {
29
+ const glyph = _jsxs("span", { "aria-hidden": "true", className: "hjm-reaction-picker__glyph", children: [option.emoji, option.count === undefined ? null : ` ${option.count}`] });
30
+ const selected = value === option.id;
31
+ return chips
32
+ ? _jsx("button", { type: "button", className: "hjm-chip hjm-reaction-picker__chip", "data-size": "small", "data-selected": selected || undefined, "aria-pressed": selected, disabled: disabled || option.disabled, "aria-label": option.label, onClick: () => choose(option.id), children: glyph }, option.id)
33
+ : _jsx(Button, { tone: "ghost", shape: "pill", selected: selected, disabled: disabled || option.disabled, "aria-label": option.label, onClick: () => choose(option.id), children: glyph }, option.id);
34
+ }) }), _jsx("div", { children: more ? chips
35
+ ? _jsx("button", { ref: toggle, type: "button", className: "hjm-chip hjm-reaction-picker__chip", "data-size": "small", "aria-label": more.label, "aria-expanded": showingAll, disabled: disabled, onClick: () => setExpanded(current => !current), children: _jsx("span", { "aria-hidden": "true", className: "hjm-reaction-picker__glyph", children: showingAll ? "−" : "+" }) })
36
+ : _jsx(Button, { ref: toggle, tone: "ghost", shape: "pill", "aria-label": more.label, "aria-expanded": showingAll, disabled: disabled, onClick: () => setExpanded(current => !current), children: _jsx("span", { "aria-hidden": "true", className: "hjm-reaction-picker__glyph", children: showingAll ? "−" : "+" }) }) : null })] });
24
37
  }
25
38
  //# sourceMappingURL=reaction-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reaction-picker.js","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useLayoutEffect, useRef, useState } from \"react\";\nimport { nextReaction, validateReactions, resolveReactionOptions, type ReactionMoreOptions, type ReactionOption } from \"@hjmds/design-contracts/reactions\";\nimport { Button } from \"./actions.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type ReactionPickerProps = Readonly<{ label: string; options: readonly ReactionOption[]; value: string | null; onValueChange: (value: string | null) => void; disabled?: boolean; layout?: \"wrap\" | \"strip\"; layoutStyle?: HjmCompositionStyleProp; more?: ReactionMoreOptions }>;\n/** Controlled single reaction; counts and persistence belong to the product. */\nexport function ReactionPicker({ label, options, value, onValueChange, disabled = false, layout = \"wrap\", more, layoutStyle }: ReactionPickerProps) {\n const [expanded, setExpanded] = useState(false);\n const root = useRef<HTMLDivElement>(null);\n const toggle = useRef<HTMLButtonElement>(null);\n const refocus = useRef(false);\n const all = resolveReactionOptions(options, more);\n validateReactions(all, value);\n const showingAll = expanded && !!more;\n const visible = showingAll ? all : options;\n const choose = (id: string) => { if (!disabled) { refocus.current = !!root.current?.contains(document.activeElement); onValueChange(nextReaction(all, value, id)); setExpanded(false); } };\n // A catalog-only button unmounts on collapse: refocus the toggle, not <body>. Inert hosts restore their own trigger.\n useLayoutEffect(() => { const node = root.current; if (refocus.current && !showingAll && node && !node.closest(\"[inert]\") && !node.contains(document.activeElement)) toggle.current?.focus(); refocus.current = false; });\n return <div ref={root} role=\"group\" aria-label={label} className=\"hjm-reaction-picker\" data-layout={layout} data-expanded={showingAll || undefined} style={layoutStyle}>\n <div className=\"hjm-reaction-picker__options\">\n {visible.map(option => <Button key={option.id} tone=\"ghost\" shape=\"pill\" selected={value === option.id} disabled={disabled || option.disabled} aria-label={option.label} onClick={() => choose(option.id)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{option.emoji}{option.count === undefined ? null : ` ${option.count}`}</span></Button>)}\n </div>\n <div>{more ? <Button ref={toggle} tone=\"ghost\" shape=\"pill\" aria-label={more.label} aria-expanded={showingAll} disabled={disabled} onClick={() => setExpanded(current => !current)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{showingAll ? \"−\" : \"+\"}</span></Button> : null}</div>\n </div>;\n}\n"]}
1
+ {"version":3,"file":"reaction-picker.js","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useLayoutEffect, useRef, useState } from \"react\";\nimport { nextReaction, validateReactions, resolveReactionOptions, type ReactionMoreOptions, type ReactionOption } from \"@hjmds/design-contracts/reactions\";\nimport { Button } from \"./actions.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type ReactionPickerProps = Readonly<{ label: string; options: readonly ReactionOption[]; value: string | null; onValueChange: (value: string | null) => void; disabled?: boolean; layout?: \"wrap\" | \"strip\"; layoutStyle?: HjmCompositionStyleProp; more?: ReactionMoreOptions }>;\n/** Controlled single reaction; counts and persistence belong to the product. */\nexport function ReactionPicker({ label, options, value, onValueChange, disabled = false, layout = \"wrap\", more, layoutStyle }: ReactionPickerProps) {\n const [expanded, setExpanded] = useState(false);\n const root = useRef<HTMLDivElement>(null);\n const toggle = useRef<HTMLButtonElement>(null);\n const refocus = useRef(false);\n const all = resolveReactionOptions(options, more);\n validateReactions(all, value);\n const showingAll = expanded && !!more;\n // The wrap layout sits on the page background, where a ghost Button's selected treatment (content color on the\n // canvas) cannot show: an emoji ignores text color. It uses the chip frame instead — hairline at rest, brand\n // border and accent fill when chosen — with toggle-button semantics (aria-pressed), matching Native. The strip\n // layout keeps ghost Buttons because the message bubble supplies its surface (2026-10-17 review).\n const chips = layout === \"wrap\";\n const visible = showingAll ? all : options;\n const choose = (id: string) => { if (!disabled) { refocus.current = !!root.current?.contains(document.activeElement); onValueChange(nextReaction(all, value, id)); setExpanded(false); } };\n // A catalog-only button unmounts on collapse: refocus the toggle, not <body>. Inert hosts restore their own trigger.\n useLayoutEffect(() => { const node = root.current; if (refocus.current && !showingAll && node && !node.closest(\"[inert]\") && !node.contains(document.activeElement)) toggle.current?.focus(); refocus.current = false; });\n return <div ref={root} role=\"group\" aria-label={label} className=\"hjm-reaction-picker\" data-layout={layout} data-expanded={showingAll || undefined} style={layoutStyle}>\n <div className=\"hjm-reaction-picker__options\">\n {visible.map(option => {\n const glyph = <span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{option.emoji}{option.count === undefined ? null : ` ${option.count}`}</span>;\n const selected = value === option.id;\n return chips\n ? <button key={option.id} type=\"button\" className=\"hjm-chip hjm-reaction-picker__chip\" data-size=\"small\" data-selected={selected || undefined} aria-pressed={selected} disabled={disabled || option.disabled} aria-label={option.label} onClick={() => choose(option.id)}>{glyph}</button>\n : <Button key={option.id} tone=\"ghost\" shape=\"pill\" selected={selected} disabled={disabled || option.disabled} aria-label={option.label} onClick={() => choose(option.id)}>{glyph}</Button>;\n })}\n </div>\n <div>{more ? chips\n ? <button ref={toggle} type=\"button\" className=\"hjm-chip hjm-reaction-picker__chip\" data-size=\"small\" aria-label={more.label} aria-expanded={showingAll} disabled={disabled} onClick={() => setExpanded(current => !current)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{showingAll ? \"−\" : \"+\"}</span></button>\n : <Button ref={toggle} tone=\"ghost\" shape=\"pill\" aria-label={more.label} aria-expanded={showingAll} disabled={disabled} onClick={() => setExpanded(current => !current)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{showingAll ? \"−\" : \"+\"}</span></Button> : null}</div>\n </div>;\n}\n"]}
@@ -18,6 +18,12 @@ export type SavedItemsScreenProps<T extends SavedItem> = Omit<ListDetailScreenPr
18
18
  */
19
19
  onBack(): void;
20
20
  onCreateCollection(): void;
21
+ /**
22
+ * Product-supplied glyph for the create-collection header action, rendered as an IconButton named
23
+ * by `labels.createCollection`. Required because header tool actions are icons (2026-10-17 usage
24
+ * rule in docs/usage/components/icon-button.md); a text-button fallback let screens drift from it.
25
+ */
26
+ createCollectionIcon: ReactNode;
21
27
  renderThumbnail(item: T): ReactNode;
22
28
  renderDetail(item: T): ReactNode;
23
29
  };
@@ -25,9 +31,9 @@ export type SavedItemsScreenProps<T extends SavedItem> = Omit<ListDetailScreenPr
25
31
  * Collection membership and persistence belong to the app; the shell preserves the grid on detail visits.
26
32
  *
27
33
  * Header slots per level: on the collection home the shell owns `actions` (the create-collection
28
- * button) and the product's `leading`; inside a collection it owns `leading` (back) and keeps the
34
+ * button) and the product's `exit`; inside a collection it owns `exit` (back) and keeps the
29
35
  * product's `actions`. A product `actions` passed for the home is therefore not rendered there —
30
36
  * Native ships the same rule, so changing it is a cross-platform API decision, not a Web fix.
31
37
  */
32
- export declare function SavedItemsScreen<T extends SavedItem>({ items, collections, collectionId, selectedItemId, labels, onOpenCollection, onOpenItem, onBack, onCreateCollection, renderThumbnail, renderDetail, ...screen }: SavedItemsScreenProps<T>): import("react").JSX.Element;
38
+ export declare function SavedItemsScreen<T extends SavedItem>({ items, collections, collectionId, selectedItemId, labels, onOpenCollection, onOpenItem, onBack, onCreateCollection, createCollectionIcon, renderThumbnail, renderDetail, ...screen }: SavedItemsScreenProps<T>): import("react").JSX.Element;
33
39
  //# sourceMappingURL=saved-items.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"saved-items.d.ts","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACzI,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC5G,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,IAAI,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAC1I,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;IACf,kBAAkB,IAAI,IAAI,CAAC;IAC3B,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EAAC,KAAK,EAAC,WAAW,EAAC,YAAY,EAAC,cAAc,EAAC,MAAM,EAAC,gBAAgB,EAAC,UAAU,EAAC,MAAM,EAAC,kBAAkB,EAAC,eAAe,EAAC,YAAY,EAAC,GAAG,MAAM,EAAC,EAAC,qBAAqB,CAAC,CAAC,CAAC,+BAqBjO"}
1
+ {"version":3,"file":"saved-items.d.ts","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACzI,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC5G,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,IAAI,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAC1I,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;IACf,kBAAkB,IAAI,IAAI,CAAC;IAC3B;;;;OAIG;IACH,oBAAoB,EAAE,SAAS,CAAC;IAChC,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EAAC,KAAK,EAAC,WAAW,EAAC,YAAY,EAAC,cAAc,EAAC,MAAM,EAAC,gBAAgB,EAAC,UAAU,EAAC,MAAM,EAAC,kBAAkB,EAAC,oBAAoB,EAAC,eAAe,EAAC,YAAY,EAAC,GAAG,MAAM,EAAC,EAAC,qBAAqB,CAAC,CAAC,CAAC,+BAqBtP"}
@@ -1,17 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { ListDetailScreen } from "./screen-flows.js";
3
3
  import { Stack, Text, Grid } from "./layout.js";
4
- import { Button } from "./actions.js";
4
+ import { IconButton } from "./actions.js";
5
5
  import { resolveSavedItems } from "@hjmds/design-contracts/screen-patterns";
6
6
  /**
7
7
  * Collection membership and persistence belong to the app; the shell preserves the grid on detail visits.
8
8
  *
9
9
  * Header slots per level: on the collection home the shell owns `actions` (the create-collection
10
- * button) and the product's `leading`; inside a collection it owns `leading` (back) and keeps the
10
+ * button) and the product's `exit`; inside a collection it owns `exit` (back) and keeps the
11
11
  * product's `actions`. A product `actions` passed for the home is therefore not rendered there —
12
12
  * Native ships the same rule, so changing it is a cross-platform API decision, not a Web fix.
13
13
  */
14
- export function SavedItemsScreen({ items, collections, collectionId, selectedItemId, labels, onOpenCollection, onOpenItem, onBack, onCreateCollection, renderThumbnail, renderDetail, ...screen }) {
14
+ export function SavedItemsScreen({ items, collections, collectionId, selectedItemId, labels, onOpenCollection, onOpenItem, onBack, onCreateCollection, createCollectionIcon, renderThumbnail, renderDetail, ...screen }) {
15
15
  const { home, collection, visible, selected } = resolveSavedItems(items, collections, collectionId, selectedItemId);
16
16
  const groups = [{ id: null, title: labels.allItems, itemIds: items.map(item => item.id) }, ...collections];
17
17
  // Empty is a full body state, not a short text row at the top of the grid.
@@ -19,6 +19,6 @@ export function SavedItemsScreen({ items, collections, collectionId, selectedIte
19
19
  ? { kind: "empty", title: labels.empty } : screen.state ?? { kind: "ready" };
20
20
  // Resolve each cover once; four thumbnails must not each rescan membership.
21
21
  const covers = new Map(groups.map(group => { const ids = new Set(group.itemIds); return [group.id, items.filter(item => ids.has(item.id)).slice(0, 4)]; }));
22
- return _jsx(ListDetailScreen, { ...screen, state: state, title: home ? screen.title : collection?.title ?? labels.allItems, leading: home ? screen.leading : _jsx(Button, { tone: "ghost", onClick: onBack, children: labels.back }), actions: home ? _jsx(Button, { tone: "ghost", onClick: onCreateCollection, children: labels.createCollection }) : screen.actions, back: { label: labels.back, onAction: onBack }, ...(selected ? { detail: { title: selected.title, content: renderDetail(selected) } } : {}), list: _jsx(Stack, { gap: "md", children: home ? _jsxs(_Fragment, { children: [_jsx(Text, { variant: "caption", tone: "muted", children: labels.privateNotice }), _jsx(Grid, { columns: { compact: 2 }, gap: { compact: "md" }, minColumnWidth: { compact: 80 }, children: groups.map(group => _jsxs("button", { type: "button", className: "hjm-saved-collection", onClick: () => onOpenCollection(group.id), "aria-label": group.title, children: [_jsx("span", { className: "hjm-saved-collection__cover", "aria-hidden": "true", children: Array.from({ length: 4 }, (_, index) => { const item = covers.get(group.id)?.[index]; return _jsx("span", { children: item ? renderThumbnail(item) : null }, index); }) }), _jsx(Text, { emphasis: "strong", children: group.title })] }, group.id === null ? "all" : `collection:${group.id}`)) })] }) : visible.length ? _jsx(Grid, { columns: { compact: 3 }, gap: { compact: "xxs" }, minColumnWidth: { compact: 44 }, children: visible.map(item => _jsx("button", { type: "button", className: "hjm-saved-post", "aria-label": item.title, onClick: () => onOpenItem(item.id), children: renderThumbnail(item) }, item.id)) }) : null }) });
22
+ return _jsx(ListDetailScreen, { ...screen, state: state, title: home ? screen.title : collection?.title ?? labels.allItems, ...(home ? (screen.exit ? { exit: screen.exit } : {}) : { exit: { kind: "back", label: labels.back, onClick: onBack } }), actions: home ? _jsx(IconButton, { label: labels.createCollection, tone: "ghost", onClick: onCreateCollection, children: createCollectionIcon }) : screen.actions, back: { label: labels.back, onAction: onBack }, ...(selected ? { detail: { title: selected.title, content: renderDetail(selected) } } : {}), list: _jsx(Stack, { gap: "md", children: home ? _jsxs(_Fragment, { children: [_jsx(Text, { variant: "caption", tone: "muted", children: labels.privateNotice }), _jsx(Grid, { columns: { compact: 2 }, gap: { compact: "md" }, minColumnWidth: { compact: 80 }, children: groups.map(group => _jsxs("button", { type: "button", className: "hjm-saved-collection", onClick: () => onOpenCollection(group.id), "aria-label": group.title, children: [_jsx("span", { className: "hjm-saved-collection__cover", "aria-hidden": "true", children: Array.from({ length: 4 }, (_, index) => { const item = covers.get(group.id)?.[index]; return _jsx("span", { children: item ? renderThumbnail(item) : null }, index); }) }), _jsx(Text, { emphasis: "strong", children: group.title })] }, group.id === null ? "all" : `collection:${group.id}`)) })] }) : visible.length ? _jsx(Grid, { columns: { compact: 3 }, gap: { compact: "xxs" }, minColumnWidth: { compact: 44 }, children: visible.map(item => _jsx("button", { type: "button", className: "hjm-saved-post", "aria-label": item.title, onClick: () => onOpenItem(item.id), children: renderThumbnail(item) }, item.id)) }) : null }) });
23
23
  }
24
24
  //# sourceMappingURL=saved-items.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"saved-items.js","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ReactNode } from \"react\";\nimport { ListDetailScreen, type ListDetailScreenProps } from \"./screen-flows.js\";\nimport { Stack, Text, Grid } from \"./layout.js\";\nimport { Button } from \"./actions.js\";\n\nimport { resolveSavedItems, type SavedItem, type SavedCollection, type SavedItemsLabels } from \"@hjmds/design-contracts/screen-patterns\";\nexport type { SavedItem, SavedCollection, SavedItemsLabels } from \"@hjmds/design-contracts/screen-patterns\";\nexport type SavedItemsScreenProps<T extends SavedItem> = Omit<ListDetailScreenProps, \"list\" | \"detail\" | \"back\" | \"refresh\" | \"loadMore\"> & {\n items: readonly T[];\n collections: readonly SavedCollection[];\n /** Omitted shows collections; null selects all saved items. */\n collectionId?: string | null;\n selectedItemId?: string | null;\n labels: SavedItemsLabels;\n onOpenCollection(id: string | null): void;\n onOpenItem(id: string): void;\n /**\n * One level up, from either the item detail or a collection grid. The shell does not know the\n * host's history, so the host pops a single level: clear `selectedItemId` when an item is open,\n * otherwise clear `collectionId` (back to the collection home).\n */\n onBack(): void;\n onCreateCollection(): void;\n renderThumbnail(item: T): ReactNode;\n renderDetail(item: T): ReactNode;\n};\n\n/**\n * Collection membership and persistence belong to the app; the shell preserves the grid on detail visits.\n *\n * Header slots per level: on the collection home the shell owns `actions` (the create-collection\n * button) and the product's `leading`; inside a collection it owns `leading` (back) and keeps the\n * product's `actions`. A product `actions` passed for the home is therefore not rendered there —\n * Native ships the same rule, so changing it is a cross-platform API decision, not a Web fix.\n */\nexport function SavedItemsScreen<T extends SavedItem>({items,collections,collectionId,selectedItemId,labels,onOpenCollection,onOpenItem,onBack,onCreateCollection,renderThumbnail,renderDetail,...screen}:SavedItemsScreenProps<T>) {\n const {home,collection,visible,selected}=resolveSavedItems(items,collections,collectionId,selectedItemId);\n const groups=[{id:null,title:labels.allItems,itemIds:items.map(item=>item.id)},...collections];\n // Empty is a full body state, not a short text row at the top of the grid.\n const state=(screen.state?.kind??\"ready\")===\"ready\"&&!home&&!visible.length\n ? {kind:\"empty\" as const,title:labels.empty} : screen.state??{kind:\"ready\" as const};\n // Resolve each cover once; four thumbnails must not each rescan membership.\n const covers=new Map(groups.map(group=>{const ids=new Set(group.itemIds);return [group.id,items.filter(item=>ids.has(item.id)).slice(0,4)] as const;}));\n return <ListDetailScreen {...screen} state={state} title={home?screen.title:collection?.title??labels.allItems}\n leading={home?screen.leading:<Button tone=\"ghost\" onClick={onBack}>{labels.back}</Button>}\n actions={home?<Button tone=\"ghost\" onClick={onCreateCollection}>{labels.createCollection}</Button>:screen.actions}\n back={{label:labels.back,onAction:onBack}}\n {...(selected?{detail:{title:selected.title,content:renderDetail(selected)}}:{})}\n list={<Stack gap=\"md\">\n {home?<><Text variant=\"caption\" tone=\"muted\">{labels.privateNotice}</Text><Grid columns={{compact:2}} gap={{compact:\"md\"}} minColumnWidth={{compact:80}}>\n {groups.map(group=><button key={group.id===null?\"all\":`collection:${group.id}`} type=\"button\" className=\"hjm-saved-collection\" onClick={()=>onOpenCollection(group.id)} aria-label={group.title}>\n <span className=\"hjm-saved-collection__cover\" aria-hidden=\"true\">{Array.from({length:4},(_,index)=>{const item=covers.get(group.id)?.[index];return <span key={index}>{item?renderThumbnail(item):null}</span>})}</span>\n <Text emphasis=\"strong\">{group.title}</Text>\n </button>)}\n </Grid></>:visible.length?<Grid columns={{compact:3}} gap={{compact:\"xxs\"}} minColumnWidth={{compact:44}}>{visible.map(item=><button key={item.id} type=\"button\" className=\"hjm-saved-post\" aria-label={item.title} onClick={()=>onOpenItem(item.id)}>{renderThumbnail(item)}</button>)}</Grid>:null}\n </Stack>}/>\n}\n"]}
1
+ {"version":3,"file":"saved-items.js","sourceRoot":"","sources":["../src/saved-items.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ReactNode } from \"react\";\nimport { ListDetailScreen, type ListDetailScreenProps } from \"./screen-flows.js\";\nimport { Stack, Text, Grid } from \"./layout.js\";\nimport { IconButton } from \"./actions.js\";\n\nimport { resolveSavedItems, type SavedItem, type SavedCollection, type SavedItemsLabels } from \"@hjmds/design-contracts/screen-patterns\";\nexport type { SavedItem, SavedCollection, SavedItemsLabels } from \"@hjmds/design-contracts/screen-patterns\";\nexport type SavedItemsScreenProps<T extends SavedItem> = Omit<ListDetailScreenProps, \"list\" | \"detail\" | \"back\" | \"refresh\" | \"loadMore\"> & {\n items: readonly T[];\n collections: readonly SavedCollection[];\n /** Omitted shows collections; null selects all saved items. */\n collectionId?: string | null;\n selectedItemId?: string | null;\n labels: SavedItemsLabels;\n onOpenCollection(id: string | null): void;\n onOpenItem(id: string): void;\n /**\n * One level up, from either the item detail or a collection grid. The shell does not know the\n * host's history, so the host pops a single level: clear `selectedItemId` when an item is open,\n * otherwise clear `collectionId` (back to the collection home).\n */\n onBack(): void;\n onCreateCollection(): void;\n /**\n * Product-supplied glyph for the create-collection header action, rendered as an IconButton named\n * by `labels.createCollection`. Required because header tool actions are icons (2026-10-17 usage\n * rule in docs/usage/components/icon-button.md); a text-button fallback let screens drift from it.\n */\n createCollectionIcon: ReactNode;\n renderThumbnail(item: T): ReactNode;\n renderDetail(item: T): ReactNode;\n};\n\n/**\n * Collection membership and persistence belong to the app; the shell preserves the grid on detail visits.\n *\n * Header slots per level: on the collection home the shell owns `actions` (the create-collection\n * button) and the product's `exit`; inside a collection it owns `exit` (back) and keeps the\n * product's `actions`. A product `actions` passed for the home is therefore not rendered there —\n * Native ships the same rule, so changing it is a cross-platform API decision, not a Web fix.\n */\nexport function SavedItemsScreen<T extends SavedItem>({items,collections,collectionId,selectedItemId,labels,onOpenCollection,onOpenItem,onBack,onCreateCollection,createCollectionIcon,renderThumbnail,renderDetail,...screen}:SavedItemsScreenProps<T>) {\n const {home,collection,visible,selected}=resolveSavedItems(items,collections,collectionId,selectedItemId);\n const groups=[{id:null,title:labels.allItems,itemIds:items.map(item=>item.id)},...collections];\n // Empty is a full body state, not a short text row at the top of the grid.\n const state=(screen.state?.kind??\"ready\")===\"ready\"&&!home&&!visible.length\n ? {kind:\"empty\" as const,title:labels.empty} : screen.state??{kind:\"ready\" as const};\n // Resolve each cover once; four thumbnails must not each rescan membership.\n const covers=new Map(groups.map(group=>{const ids=new Set(group.itemIds);return [group.id,items.filter(item=>ids.has(item.id)).slice(0,4)] as const;}));\n return <ListDetailScreen {...screen} state={state} title={home?screen.title:collection?.title??labels.allItems}\n {...(home?(screen.exit?{exit:screen.exit}:{}):{exit:{kind:\"back\" as const,label:labels.back,onClick:onBack}})}\n actions={home?<IconButton label={labels.createCollection} tone=\"ghost\" onClick={onCreateCollection}>{createCollectionIcon}</IconButton>:screen.actions}\n back={{label:labels.back,onAction:onBack}}\n {...(selected?{detail:{title:selected.title,content:renderDetail(selected)}}:{})}\n list={<Stack gap=\"md\">\n {home?<><Text variant=\"caption\" tone=\"muted\">{labels.privateNotice}</Text><Grid columns={{compact:2}} gap={{compact:\"md\"}} minColumnWidth={{compact:80}}>\n {groups.map(group=><button key={group.id===null?\"all\":`collection:${group.id}`} type=\"button\" className=\"hjm-saved-collection\" onClick={()=>onOpenCollection(group.id)} aria-label={group.title}>\n <span className=\"hjm-saved-collection__cover\" aria-hidden=\"true\">{Array.from({length:4},(_,index)=>{const item=covers.get(group.id)?.[index];return <span key={index}>{item?renderThumbnail(item):null}</span>})}</span>\n <Text emphasis=\"strong\">{group.title}</Text>\n </button>)}\n </Grid></>:visible.length?<Grid columns={{compact:3}} gap={{compact:\"xxs\"}} minColumnWidth={{compact:44}}>{visible.map(item=><button key={item.id} type=\"button\" className=\"hjm-saved-post\" aria-label={item.title} onClick={()=>onOpenItem(item.id)}>{renderThumbnail(item)}</button>)}</Grid>:null}\n </Stack>}/>\n}\n"]}
@@ -1,16 +1,25 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { type ScreenLayoutProps } from "./screens.js";
3
+ import { type MessageMenuAction } from "./internal/message-reactions.js";
4
+ import type { ReactionPickerProps } from "./reaction-picker.js";
3
5
  import { type SheetProps } from "./overlays.js";
4
6
  import { type UploadItemDescriptor, type UploadItemLabels } from "@hjmds/design-contracts/components/upload-item";
5
7
  import { type AlertDialogRequest } from "@hjmds/design-contracts/components/alert-dialog";
6
- import { type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from "@hjmds/design-contracts/screen-patterns";
8
+ import { type CommentMenuItemDescriptor, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from "@hjmds/design-contracts/screen-patterns";
7
9
  import { type ContainerGutter } from "@hjmds/design-contracts/components/container";
8
10
  /** Copy, pending state and mutations are controlled by the consuming product. */
11
+ /** `icon` renders an icon-only button named by `label`; header actions (top-right) use it so a centered title keeps its width (2026-10-17). */
9
12
  export type ScreenFlowAction = Readonly<{
10
13
  label: string;
11
14
  onAction(): void;
12
15
  disabled?: boolean;
13
16
  pending?: boolean;
17
+ icon?: ReactNode;
18
+ }>;
19
+ /** Header tool action (refresh, add): icon-only so it never pushes the centered title. A required text `add` made
20
+ * products route exits ("취소") through it as a header text button (2026-10-17 screen review); exits use `exit`. */
21
+ export type ScreenFlowIconAction = ScreenFlowAction & Readonly<{
22
+ icon: ReactNode;
14
23
  }>;
15
24
  type Base = Omit<ScreenLayoutProps, "children" | "footer">;
16
25
  export type ListDetailScreenProps = Base & {
@@ -19,12 +28,12 @@ export type ListDetailScreenProps = Base & {
19
28
  content: ReactNode;
20
29
  };
21
30
  back: ScreenFlowAction;
22
- refresh?: ScreenFlowAction;
31
+ refresh?: ScreenFlowIconAction;
23
32
  loadMore?: ScreenFlowAction;
24
33
  };
25
34
  /** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */
26
35
  export declare function ListDetailScreen({ list, detail, back, refresh, loadMore, layoutStyle, ...screen }: ListDetailScreenProps): import("react").JSX.Element;
27
- export type EditorScreenProps = Base & {
36
+ export type EditorScreenProps = Omit<Base, "leading" | "exit"> & {
28
37
  children: ReactNode;
29
38
  submitPlacement?: "header" | "footer";
30
39
  dirty: boolean;
@@ -82,7 +91,7 @@ export type MediaSelectionScreenProps = Base & {
82
91
  library?: ReactNode;
83
92
  selectionSummary?: ReactNode;
84
93
  items: readonly MediaSelectionItem[];
85
- add: ScreenFlowAction;
94
+ add?: ScreenFlowIconAction;
86
95
  done: ScreenFlowAction;
87
96
  labels: UploadItemLabels;
88
97
  actionLabels: {
@@ -310,6 +319,41 @@ export type CommentThreadItem = Readonly<{
310
319
  actions?: ReactNode;
311
320
  canReply?: boolean;
312
321
  replyDisabled?: boolean;
322
+ /** Long-press the comment (author and body) to react; the product owns the stored value and summary. */
323
+ reactions?: CommentReactions;
324
+ reactionSummary?: ReactNode;
325
+ /** Optional photo or sticker under the body; HJM bounds its width and corners, the product sizes the image. */
326
+ media?: ReactNode;
327
+ }>;
328
+ export type CommentReactions = ReactionPickerProps & Readonly<{
329
+ closeLabel: string;
330
+ menuAction?: Readonly<{
331
+ label: string;
332
+ onPress(): void;
333
+ disabled?: boolean;
334
+ }>;
335
+ menuActions?: readonly MessageMenuAction[];
336
+ reportAction?: Readonly<{
337
+ label: string;
338
+ onPress(): void;
339
+ disabled?: boolean;
340
+ icon?: ReactNode;
341
+ }>;
342
+ interactiveContent?: boolean; /** Icon for the automatic "reply" row of the hold menu. */
343
+ replyIcon?: ReactNode;
344
+ }>;
345
+ /**
346
+ * HJM-owned "more" menu per comment (2026-10-17: common comment structure belongs to HJM, review S4#7). HJM draws the
347
+ * vertical-dots button at the row's trailing edge and opens the shared Menu with danger items last; the product supplies
348
+ * only the localized button name, the items allowed for that comment and the action callback.
349
+ */
350
+ export type CommentMenu = Readonly<{
351
+ /** Localized accessible name of the button, e.g. "seoyeon 댓글 더 보기". */
352
+ label(item: CommentThreadItem): string;
353
+ /** Items allowed for this comment (permission is product-owned). An empty list omits the button for that row. */
354
+ items(item: CommentThreadItem): readonly CommentMenuItemDescriptor[];
355
+ /** Runs after the menu closes, so a confirmation dialog can open without competing with the menu for focus. */
356
+ onAction(item: CommentThreadItem, id: string): void;
313
357
  }>;
314
358
  export type CommentThreadScreenProps = Base & {
315
359
  items: readonly CommentThreadItem[];
@@ -322,6 +366,7 @@ export type CommentThreadScreenProps = Base & {
322
366
  composer?: ReactNode;
323
367
  threadHeader?: ReactNode;
324
368
  threadFooter?: ReactNode;
369
+ commentMenu?: CommentMenu;
325
370
  };
326
371
  export type CommentThreadRowProps = Readonly<{
327
372
  layoutStyle?: ScreenLayoutProps["layoutStyle"];
@@ -329,11 +374,12 @@ export type CommentThreadRowProps = Readonly<{
329
374
  onLike(id: string): void;
330
375
  onReply(id: string): void;
331
376
  replyLabel: string;
377
+ commentMenu?: CommentMenu;
332
378
  }>;
333
379
  /** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */
334
- export declare function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle }: CommentThreadRowProps): import("react").JSX.Element;
380
+ export declare function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle, commentMenu }: CommentThreadRowProps): import("react").JSX.Element;
335
381
  /** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
336
- export declare function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadHeader, threadFooter, ...screen }: CommentThreadScreenProps): import("react").JSX.Element;
382
+ export declare function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadHeader, threadFooter, commentMenu, ...screen }: CommentThreadScreenProps): import("react").JSX.Element;
337
383
  export type ProfileSummaryProps = Readonly<{
338
384
  name: string;
339
385
  headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
@@ -1 +1 @@
1
- {"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}