themelia-react-ui 2.0.5 → 2.0.6

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 (489) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/MIGRATION.md +119 -0
  3. package/README.md +13 -6
  4. package/dist/{accordion-B9MHG0cT.js → accordion-0tQUZ20r.js} +7 -7
  5. package/dist/accordion-0tQUZ20r.js.map +1 -0
  6. package/dist/{action-menu-Dr8K-ghE.js → action-menu-C0gjzLyE.js} +7 -7
  7. package/dist/{action-menu-Dr8K-ghE.js.map → action-menu-C0gjzLyE.js.map} +1 -1
  8. package/dist/{ai-artifact-C58tQcBy.js → ai-artifact-CGGpQryR.js} +172 -157
  9. package/dist/ai-artifact-CGGpQryR.js.map +1 -0
  10. package/dist/{app-shell-B_IuNWOo.js → app-shell-EHuuRDGy.js} +5 -5
  11. package/dist/{app-shell-B_IuNWOo.js.map → app-shell-EHuuRDGy.js.map} +1 -1
  12. package/dist/{attachment-Dg_69lPS.js → attachment-BCpA4e7i.js} +8 -8
  13. package/dist/{attachment-Dg_69lPS.js.map → attachment-BCpA4e7i.js.map} +1 -1
  14. package/dist/{auth-DTkkshS8.js → auth-B0girIk_.js} +15 -15
  15. package/dist/auth-B0girIk_.js.map +1 -0
  16. package/dist/{avatar-CeZaFmNH.js → avatar-B9Jnp-T-.js} +3 -3
  17. package/dist/{avatar-CeZaFmNH.js.map → avatar-B9Jnp-T-.js.map} +1 -1
  18. package/dist/{badge-xIiV_E7f.js → badge-wWauMgAt.js} +3 -3
  19. package/dist/{badge-xIiV_E7f.js.map → badge-wWauMgAt.js.map} +1 -1
  20. package/dist/base/accordion.js +1 -1
  21. package/dist/base/action-menu.js +1 -1
  22. package/dist/base/attachment.js +1 -1
  23. package/dist/base/avatar.js +1 -1
  24. package/dist/base/badge.js +1 -1
  25. package/dist/base/batch-action-bar.js +1 -1
  26. package/dist/base/buttons.js +1 -1
  27. package/dist/base/cards.js +2 -2
  28. package/dist/base/carousel.js +3 -3
  29. package/dist/base/cascader.js +1 -1
  30. package/dist/base/chart.js +1 -1
  31. package/dist/base/choice-inputs.js +2 -2
  32. package/dist/base/code-block.js +1 -1
  33. package/dist/base/combobox.js +1 -1
  34. package/dist/base/command.js +1 -1
  35. package/dist/base/copyable.js +1 -1
  36. package/dist/base/date-pickers.js +2 -2
  37. package/dist/base/display.js +6 -6
  38. package/dist/base/feedback.js +4 -4
  39. package/dist/base/forms-numeric.js +1 -1
  40. package/dist/base/forms.js +2 -2
  41. package/dist/base/inline-edit.js +8 -8
  42. package/dist/base/item.js +1 -1
  43. package/dist/base/media-gallery.js +1 -1
  44. package/dist/base/metadata-list.js +1 -1
  45. package/dist/base/navigation.js +6 -6
  46. package/dist/base/popover-menu.js +1 -1
  47. package/dist/base/popover.js +1 -1
  48. package/dist/base/qr-code.js +1 -1
  49. package/dist/base/repeaters.js +195 -188
  50. package/dist/base/repeaters.js.map +1 -1
  51. package/dist/base/sheet.js +1 -1
  52. package/dist/base/sidebar.js +2 -2
  53. package/dist/base/signature-pad.js +7 -7
  54. package/dist/base/skeleton.js +1 -1
  55. package/dist/base/spinner.js +5 -5
  56. package/dist/base/spinner.js.map +1 -1
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +1 -1
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-BoqWIIpV.js} +5 -5
  66. package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-BoqWIIpV.js.map} +1 -1
  67. package/dist/blocks/admin.js +17 -17
  68. package/dist/blocks/ai.js +227 -221
  69. package/dist/blocks/ai.js.map +1 -1
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +424 -449
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +225 -220
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-J-K2kl4c.js → breadcrumbs-Bp9Ke7kd.js} +4 -4
  82. package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
  83. package/dist/{button-S2Cubiiz.js → button-ChBovTx0.js} +2 -2
  84. package/dist/{button-S2Cubiiz.js.map → button-ChBovTx0.js.map} +1 -1
  85. package/dist/{buttons-BedGfygC.js → buttons-DeW0bQeK.js} +6 -6
  86. package/dist/{buttons-BedGfygC.js.map → buttons-DeW0bQeK.js.map} +1 -1
  87. package/dist/{cards-rNX1M4Xn.js → cards-CNXnmvV5.js} +8 -8
  88. package/dist/{cards-rNX1M4Xn.js.map → cards-CNXnmvV5.js.map} +1 -1
  89. package/dist/{cascader-B1MiqkBq.js → cascader-CrAl9zD5.js} +15 -15
  90. package/dist/{cascader-B1MiqkBq.js.map → cascader-CrAl9zD5.js.map} +1 -1
  91. package/dist/{chart-Darg_0Kv.js → chart-I7ROnsl8.js} +5 -5
  92. package/dist/{chart-Darg_0Kv.js.map → chart-I7ROnsl8.js.map} +1 -1
  93. package/dist/{checkbox-fflqmODR.js → checkbox-MoyHIAPs.js} +3 -3
  94. package/dist/{checkbox-fflqmODR.js.map → checkbox-MoyHIAPs.js.map} +1 -1
  95. package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-DHGtx0QV.js} +122 -110
  96. package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
  97. package/dist/{code-block-BzmM9Eig.js → code-block-BSJyq9e-.js} +7 -7
  98. package/dist/{code-block-BzmM9Eig.js.map → code-block-BSJyq9e-.js.map} +1 -1
  99. package/dist/{collapsible-BkAI_XD4.js → collapsible-BzJ91LUG.js} +3 -3
  100. package/dist/{collapsible-BkAI_XD4.js.map → collapsible-BzJ91LUG.js.map} +1 -1
  101. package/dist/{collection-content-gDh1v6O4.js → collection-content-CSnwtOTH.js} +3 -3
  102. package/dist/{collection-content-gDh1v6O4.js.map → collection-content-CSnwtOTH.js.map} +1 -1
  103. package/dist/{combobox-BEx0vJgF.js → combobox-Bcvu5J8O.js} +11 -10
  104. package/dist/{combobox-BEx0vJgF.js.map → combobox-Bcvu5J8O.js.map} +1 -1
  105. package/dist/combobox-C2JiSQPc.js +915 -0
  106. package/dist/combobox-C2JiSQPc.js.map +1 -0
  107. package/dist/{command-CrlPIL6m.js → command-9e52NPgK.js} +6 -6
  108. package/dist/{command-CrlPIL6m.js.map → command-9e52NPgK.js.map} +1 -1
  109. package/dist/{comments-Dmpp0YIc.js → comments-BsgErEqd.js} +33 -28
  110. package/dist/comments-BsgErEqd.js.map +1 -0
  111. package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
  112. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
  113. package/dist/components/base/combobox/combobox-field.d.ts +2 -2
  114. package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
  115. package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
  116. package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
  117. package/dist/components/base/feedback/state-display.d.ts +5 -1
  118. package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
  119. package/dist/components/base/forms/form-field.d.ts +7 -2
  120. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
  121. package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
  122. package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
  123. package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
  124. package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
  125. package/dist/components/base/navigation/language-switcher.d.ts +12 -4
  126. package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
  127. package/dist/components/base/sidebar/sidebar.d.ts +2 -0
  128. package/dist/components/base/upload/avatar-upload.d.ts +2 -1
  129. package/dist/components/base/upload/image-upload.d.ts +2 -1
  130. package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
  131. package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
  132. package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
  133. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +2 -0
  134. package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
  135. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  136. package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
  137. package/dist/components/blocks/analytics/types.d.ts +2 -2
  138. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  139. package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
  140. package/dist/components/features/activities/activities.types.d.ts +18 -11
  141. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
  142. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
  143. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
  144. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
  145. package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
  146. package/dist/components/features/combobox/combobox.d.ts +2 -2
  147. package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
  148. package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
  149. package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
  150. package/dist/components/features/combobox/types.d.ts +37 -8
  151. package/dist/components/features/email-composer/types.d.ts +3 -1
  152. package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
  153. package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
  154. package/dist/components/features/filters/filters.types.d.ts +3 -3
  155. package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
  156. package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
  157. package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
  158. package/dist/components/features/filters/utils/filter-utils.d.ts +5 -1
  159. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  160. package/dist/components/features/media-library/media-library.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  162. package/dist/components/features/media-library/media-library.types.d.ts +36 -8
  163. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  164. package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
  165. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
  166. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
  167. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
  168. package/dist/components/features/products/products.types.d.ts +2 -2
  169. package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
  170. package/dist/components/features/resource/resource.d.ts +1 -1
  171. package/dist/components/features/resource/resource.types.d.ts +2 -0
  172. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
  173. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
  174. package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
  175. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
  176. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  177. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
  178. package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
  179. package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
  180. package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
  181. package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
  182. package/dist/components/features/table/data-table.d.ts +1 -1
  183. package/dist/components/features/table/index.d.ts +1 -0
  184. package/dist/components/features/table/table-body.d.ts +1 -1
  185. package/dist/components/features/table/table-helpers.d.ts +6 -3
  186. package/dist/components/features/table/table.strings.d.ts +3 -0
  187. package/dist/components/features/table/table.types.d.ts +17 -1
  188. package/dist/components/layout/header/header.types.d.ts +3 -2
  189. package/dist/components/layout/layout.types.d.ts +5 -3
  190. package/dist/components/layout/navigation/side-nav.d.ts +3 -2
  191. package/dist/components/layout/normalize-layout-path.d.ts +1 -0
  192. package/dist/components/layout/settings/settings.d.ts +1 -1
  193. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  194. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +3 -1
  195. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
  196. package/dist/components/layout/sidebar/sidebar.types.d.ts +2 -0
  197. package/dist/components/primitives/link.d.ts +3 -2
  198. package/dist/components/primitives/money.d.ts +1 -1
  199. package/dist/components/primitives/number.d.ts +1 -1
  200. package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
  201. package/dist/{containers-CIxwbZt5.js → containers-CSdc32h9.js} +2 -2
  202. package/dist/{containers-CIxwbZt5.js.map → containers-CSdc32h9.js.map} +1 -1
  203. package/dist/{copyable-DIznBqiT.js → copyable-3fdHfMR3.js} +4 -4
  204. package/dist/{copyable-DIznBqiT.js.map → copyable-3fdHfMR3.js.map} +1 -1
  205. package/dist/{data-display-BdgCAw8T.js → data-display-Cmj-xZYl.js} +16 -15
  206. package/dist/data-display-Cmj-xZYl.js.map +1 -0
  207. package/dist/{date-Cq8ioE4o.js → date-Br0FicVv.js} +4 -4
  208. package/dist/{date-Cq8ioE4o.js.map → date-Br0FicVv.js.map} +1 -1
  209. package/dist/date-picker-CyQlFYsP.js +1617 -0
  210. package/dist/date-picker-CyQlFYsP.js.map +1 -0
  211. package/dist/date-pickers-tj2MXmXd.js +185 -0
  212. package/dist/date-pickers-tj2MXmXd.js.map +1 -0
  213. package/dist/{display-KsZLw9Ov.js → display-CT_N2a3w.js} +7 -7
  214. package/dist/{display-KsZLw9Ov.js.map → display-CT_N2a3w.js.map} +1 -1
  215. package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-C08iIugv.js} +6 -6
  216. package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-C08iIugv.js.map} +1 -1
  217. package/dist/features/activities.js +283 -270
  218. package/dist/features/activities.js.map +1 -1
  219. package/dist/features/ai-chat.js +40 -27
  220. package/dist/features/ai-chat.js.map +1 -1
  221. package/dist/features/appointment-calendar.js +126 -126
  222. package/dist/features/appointment-calendar.js.map +1 -1
  223. package/dist/features/async-preview.js +9 -9
  224. package/dist/features/combobox.js +1 -1
  225. package/dist/features/comments.js +1 -1
  226. package/dist/features/data-view.js +10 -10
  227. package/dist/features/email-composer.js +24 -19
  228. package/dist/features/email-composer.js.map +1 -1
  229. package/dist/features/event-calendar.js +129 -125
  230. package/dist/features/event-calendar.js.map +1 -1
  231. package/dist/features/filters.js +2 -2
  232. package/dist/features/global-search.js +16 -20
  233. package/dist/features/global-search.js.map +1 -1
  234. package/dist/features/kanban.js +18 -28
  235. package/dist/features/kanban.js.map +1 -1
  236. package/dist/features/map/style.css +15 -0
  237. package/dist/features/map.js +331 -314
  238. package/dist/features/map.js.map +1 -1
  239. package/dist/features/media-library.js +1044 -866
  240. package/dist/features/media-library.js.map +1 -1
  241. package/dist/features/mentions.js +2 -2
  242. package/dist/features/overlays.js +1 -1
  243. package/dist/features/products.js +978 -964
  244. package/dist/features/products.js.map +1 -1
  245. package/dist/features/questionnaire.js +159 -152
  246. package/dist/features/questionnaire.js.map +1 -1
  247. package/dist/features/resource-assignment.js +8 -8
  248. package/dist/features/resource.js +74 -71
  249. package/dist/features/resource.js.map +1 -1
  250. package/dist/features/rich-text-editor.js +28 -19
  251. package/dist/features/rich-text-editor.js.map +1 -1
  252. package/dist/features/schema-form.js +297 -256
  253. package/dist/features/schema-form.js.map +1 -1
  254. package/dist/features/suggestions.js +57 -50
  255. package/dist/features/suggestions.js.map +1 -1
  256. package/dist/features/sync.js +3 -3
  257. package/dist/features/table.js +1 -1
  258. package/dist/features/theme-tweaker.js +400 -399
  259. package/dist/features/theme-tweaker.js.map +1 -1
  260. package/dist/feedback-Dzo1xtAU.js +246 -0
  261. package/dist/feedback-Dzo1xtAU.js.map +1 -0
  262. package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-D6H7tVJi.js} +2 -2
  263. package/dist/{field-affordance-recipes-DWcNcOjh.js.map → field-affordance-recipes-D6H7tVJi.js.map} +1 -1
  264. package/dist/field-control-attributes-B6i335wr.js +18 -0
  265. package/dist/field-control-attributes-B6i335wr.js.map +1 -0
  266. package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
  267. package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
  268. package/dist/{filters-DzgSJpMK.js → filters-Dl80yYtN.js} +763 -605
  269. package/dist/filters-Dl80yYtN.js.map +1 -0
  270. package/dist/form-field-CAPdwdnZ.js +74 -0
  271. package/dist/form-field-CAPdwdnZ.js.map +1 -0
  272. package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-CgcrUbLU.js} +2 -2
  273. package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-CgcrUbLU.js.map} +1 -1
  274. package/dist/{forms-C0RGnJTe.js → forms-B3W8CH7-.js} +8 -8
  275. package/dist/{forms-C0RGnJTe.js.map → forms-B3W8CH7-.js.map} +1 -1
  276. package/dist/forms-numeric-CwjQJe-O.js +991 -0
  277. package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
  278. package/dist/{header-DMMxG__r.js → header-ZIIsRKxP.js} +113 -113
  279. package/dist/header-ZIIsRKxP.js.map +1 -0
  280. package/dist/hooks/use-files.d.ts +2 -0
  281. package/dist/{hooks-DB6CJ4MR.js → hooks-BitHSh-Y.js} +3 -3
  282. package/dist/{hooks-DB6CJ4MR.js.map → hooks-BitHSh-Y.js.map} +1 -1
  283. package/dist/{icon-badge-DZF-YjQp.js → icon-badge-npxF1SLX.js} +2 -2
  284. package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-npxF1SLX.js.map} +1 -1
  285. package/dist/index.js +1 -1
  286. package/dist/{input-CvyDQlY7.js → input-7KAc7XQL.js} +6 -6
  287. package/dist/{input-CvyDQlY7.js.map → input-7KAc7XQL.js.map} +1 -1
  288. package/dist/{input-DMBwAZmr.js → input-DIREVYHs.js} +3 -3
  289. package/dist/{input-DMBwAZmr.js.map → input-DIREVYHs.js.map} +1 -1
  290. package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
  291. package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
  292. package/dist/{item-DjCcM18E.js → item-FfWnaYST.js} +99 -98
  293. package/dist/item-FfWnaYST.js.map +1 -0
  294. package/dist/layout/app-shell.js +1 -1
  295. package/dist/layout/auth.js +1 -1
  296. package/dist/layout/containers.js +1 -1
  297. package/dist/layout/header.js +1 -1
  298. package/dist/layout/hooks.js +1 -1
  299. package/dist/layout/navigation.js +1 -1
  300. package/dist/layout/page.js +1 -1
  301. package/dist/layout/settings.js +1 -1
  302. package/dist/layout/sidebar.js +2 -2
  303. package/dist/layout/workspace.js +1 -1
  304. package/dist/layout.js +11 -11
  305. package/dist/layout.types-E_GAApzO.js +30 -0
  306. package/dist/layout.types-E_GAApzO.js.map +1 -0
  307. package/dist/lib/field-control-attributes.d.ts +11 -0
  308. package/dist/lib/field-state-recipes.d.ts +2 -0
  309. package/dist/lib/format.d.ts +1 -0
  310. package/dist/lib/surface-recipes.d.ts +1 -1
  311. package/dist/lib/token-merge.generated.d.ts +6 -6
  312. package/dist/lib/utils.js +1 -1
  313. package/dist/{media-gallery-C-vChPmE.js → media-gallery-C81DAnKI.js} +6 -6
  314. package/dist/{media-gallery-C-vChPmE.js.map → media-gallery-C81DAnKI.js.map} +1 -1
  315. package/dist/{mentions-0_4nWuI-.js → mentions-qOnedSt4.js} +236 -167
  316. package/dist/mentions-qOnedSt4.js.map +1 -0
  317. package/dist/message-BJHnn43M.js +135 -0
  318. package/dist/message-BJHnn43M.js.map +1 -0
  319. package/dist/{metadata-list-C3MkU-Om.js → metadata-list-XkqZ_UXH.js} +11 -11
  320. package/dist/{metadata-list-C3MkU-Om.js.map → metadata-list-XkqZ_UXH.js.map} +1 -1
  321. package/dist/{navigation-DaRjthVk.js → navigation-BgtPJAhi.js} +119 -119
  322. package/dist/navigation-BgtPJAhi.js.map +1 -0
  323. package/dist/{navigation-C90-oQFq.js → navigation-Bt-v7rWP.js} +52 -46
  324. package/dist/navigation-Bt-v7rWP.js.map +1 -0
  325. package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
  326. package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
  327. package/dist/{number-CRU3kGuk.js → number-CYqBcrSj.js} +78 -86
  328. package/dist/number-CYqBcrSj.js.map +1 -0
  329. package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-BQCA2Zn2.js} +7 -7
  330. package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-BQCA2Zn2.js.map} +1 -1
  331. package/dist/{overlays-BSgCtM2v.js → overlays-CC8zI3Du.js} +264 -260
  332. package/dist/overlays-CC8zI3Du.js.map +1 -0
  333. package/dist/{page-DUUKDAjo.js → page-BoQ1VaFJ.js} +13 -13
  334. package/dist/{page-DUUKDAjo.js.map → page-BoQ1VaFJ.js.map} +1 -1
  335. package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-DIKspJfx.js} +4 -4
  336. package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-DIKspJfx.js.map} +1 -1
  337. package/dist/{pagination-CgCjElfu.js → pagination-Br8TdV9A.js} +4 -4
  338. package/dist/{pagination-CgCjElfu.js.map → pagination-Br8TdV9A.js.map} +1 -1
  339. package/dist/{popover-B85RenIl.js → popover-k8TdUcAt.js} +10 -10
  340. package/dist/popover-k8TdUcAt.js.map +1 -0
  341. package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-yn-o0kyA.js} +7 -7
  342. package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
  343. package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-DJ0AkUan.js} +2 -2
  344. package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-DJ0AkUan.js.map} +1 -1
  345. package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-DyUXqUtD.js} +2 -2
  346. package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-DyUXqUtD.js.map} +1 -1
  347. package/dist/{primitives-ByWgGUgt.js → primitives-BkkQjYl7.js} +22 -17
  348. package/dist/primitives-BkkQjYl7.js.map +1 -0
  349. package/dist/primitives.js +4 -4
  350. package/dist/{progress-BJhQP9WX.js → progress-DZFXXzPs.js} +4 -4
  351. package/dist/{progress-BJhQP9WX.js.map → progress-DZFXXzPs.js.map} +1 -1
  352. package/dist/{receipt-tOc7B3hw.js → receipt-C7LhOg7Q.js} +6 -6
  353. package/dist/{receipt-tOc7B3hw.js.map → receipt-C7LhOg7Q.js.map} +1 -1
  354. package/dist/rich-text-BnTzZjIo.js +45 -0
  355. package/dist/rich-text-BnTzZjIo.js.map +1 -0
  356. package/dist/rich-text-editor-CAurDwT5.js +1273 -0
  357. package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
  358. package/dist/{rich-text-editor-toolbar-laT3tpBT.js → rich-text-editor-toolbar-DbXig7Jk.js} +36 -35
  359. package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
  360. package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
  361. package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
  362. package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
  363. package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
  364. package/dist/{scroll-area-B0dB2cBi.js → scroll-area-Bj6CRUif.js} +2 -2
  365. package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
  366. package/dist/{separator-Bb17I4pu.js → separator-B9ewiCGO.js} +2 -2
  367. package/dist/{separator-Bb17I4pu.js.map → separator-B9ewiCGO.js.map} +1 -1
  368. package/dist/{separator-Ct_WSWTJ.js → separator-DM6gs2vu.js} +3 -3
  369. package/dist/{separator-Ct_WSWTJ.js.map → separator-DM6gs2vu.js.map} +1 -1
  370. package/dist/services/actions.js +1 -1
  371. package/dist/settings-DZPHgpx4.js +155 -0
  372. package/dist/settings-DZPHgpx4.js.map +1 -0
  373. package/dist/{sheet-BGPERY55.js → sheet-C4DHsgLk.js} +6 -6
  374. package/dist/{sheet-BGPERY55.js.map → sheet-C4DHsgLk.js.map} +1 -1
  375. package/dist/sidebar-C8BnDwTH.js +709 -0
  376. package/dist/sidebar-C8BnDwTH.js.map +1 -0
  377. package/dist/{sidebar-f9gRWXIR.js → sidebar-CmD6a-HK.js} +16 -13
  378. package/dist/sidebar-CmD6a-HK.js.map +1 -0
  379. package/dist/{skeleton-BapcJd9C.js → skeleton-DDgdhmu9.js} +5 -5
  380. package/dist/{skeleton-BapcJd9C.js.map → skeleton-DDgdhmu9.js.map} +1 -1
  381. package/dist/{smart-card-CW0hjetE.js → smart-card-B6vLxqa_.js} +8 -8
  382. package/dist/{smart-card-CW0hjetE.js.map → smart-card-B6vLxqa_.js.map} +1 -1
  383. package/dist/{structure-DuxKl954.js → structure-DZJ2wbAU.js} +2 -2
  384. package/dist/{structure-DuxKl954.js.map → structure-DZJ2wbAU.js.map} +1 -1
  385. package/dist/style.css +1 -1
  386. package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
  387. package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
  388. package/dist/{table-CFOWY9pQ.js → table-CBonSdTp.js} +534 -486
  389. package/dist/table-CBonSdTp.js.map +1 -0
  390. package/dist/{table-B4TE7iOV.js → table-CXSPHH25.js} +75 -71
  391. package/dist/table-CXSPHH25.js.map +1 -0
  392. package/dist/{tabs-e7ko9S2o.js → tabs-C4Kr_hCr.js} +50 -49
  393. package/dist/tabs-C4Kr_hCr.js.map +1 -0
  394. package/dist/{text-inputs-B1culiSK.js → text-inputs-jdkS3ReG.js} +9 -9
  395. package/dist/{text-inputs-B1culiSK.js.map → text-inputs-jdkS3ReG.js.map} +1 -1
  396. package/dist/{timelines-D3Sl9ueq.js → timelines-CoPwdJP0.js} +10 -10
  397. package/dist/{timelines-D3Sl9ueq.js.map → timelines-CoPwdJP0.js.map} +1 -1
  398. package/dist/{tooltip-8wz5S_Zr.js → tooltip-31NwIpTo.js} +4 -4
  399. package/dist/{tooltip-8wz5S_Zr.js.map → tooltip-31NwIpTo.js.map} +1 -1
  400. package/dist/{tree-CzUJHnFs.js → tree-CeYVzdFE.js} +6 -6
  401. package/dist/{tree-CzUJHnFs.js.map → tree-CeYVzdFE.js.map} +1 -1
  402. package/dist/typography/rich-text.js +1 -1
  403. package/dist/{typography-BQnine1k.js → typography-C7-YMW1S.js} +2 -2
  404. package/dist/{typography-BQnine1k.js.map → typography-C7-YMW1S.js.map} +1 -1
  405. package/dist/typography.js +1 -1
  406. package/dist/{upload-BOW6U2tI.js → upload-Hdm5gObf.js} +303 -291
  407. package/dist/upload-Hdm5gObf.js.map +1 -0
  408. package/dist/{upload-queue-qUXn1ykN.js → upload-queue-D0sYPuqo.js} +8 -8
  409. package/dist/{upload-queue-qUXn1ykN.js.map → upload-queue-D0sYPuqo.js.map} +1 -1
  410. package/dist/{usage-card-BeSLY0i0.js → usage-card-9s8hLDfn.js} +9 -9
  411. package/dist/{usage-card-BeSLY0i0.js.map → usage-card-9s8hLDfn.js.map} +1 -1
  412. package/dist/{utils-B6kKb8jB.js → utils-DhuoqFy4.js} +31 -37
  413. package/dist/utils-DhuoqFy4.js.map +1 -0
  414. package/dist/{value-inputs-skdVB2zh.js → value-inputs-D3aPgq9H.js} +15 -15
  415. package/dist/{value-inputs-skdVB2zh.js.map → value-inputs-D3aPgq9H.js.map} +1 -1
  416. package/dist/{value-typography-uAmWUAL1.js → value-typography-uSzzG9Gf.js} +32 -26
  417. package/dist/value-typography-uSzzG9Gf.js.map +1 -0
  418. package/dist/{workspace-DHeHv0qw.js → workspace-CC8Vchiu.js} +12 -12
  419. package/dist/{workspace-DHeHv0qw.js.map → workspace-CC8Vchiu.js.map} +1 -1
  420. package/docs/consumer-skill/examples/edit.tsx +3 -3
  421. package/docs/consumer-skill/references/agents-md.md +19 -19
  422. package/docs/consumer-skill/references/analytics.md +15 -0
  423. package/docs/consumer-skill/references/component-contracts.json +14724 -13057
  424. package/docs/consumer-skill/references/composition.md +21 -4
  425. package/docs/consumer-skill/references/design-contract.md +1 -0
  426. package/docs/consumer-skill/references/installation.md +51 -8
  427. package/docs/consumer-skill/references/integration.md +24 -1
  428. package/docs/consumer-skill/references/public-api.json +172 -34
  429. package/docs/consumer-skill/references/review.md +51 -11
  430. package/docs/consumer-skill/references/rhf-workflows.md +72 -0
  431. package/docs/consumer-skill/references/theming.md +7 -2
  432. package/docs/consumer-skill/references/tokens.json +1 -1
  433. package/docs/consumer-skill/scripts/composition-policy.mjs +144 -30
  434. package/docs/consumer-skill/scripts/setup-skills.mjs +46 -9
  435. package/package.json +4 -2
  436. package/templates/admin-shell-template.tsx +1 -2
  437. package/templates/customers-template.tsx +18 -16
  438. package/dist/accordion-B9MHG0cT.js.map +0 -1
  439. package/dist/ai-artifact-C58tQcBy.js.map +0 -1
  440. package/dist/auth-DTkkshS8.js.map +0 -1
  441. package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
  442. package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
  443. package/dist/combobox-BwzoXFSG.js +0 -884
  444. package/dist/combobox-BwzoXFSG.js.map +0 -1
  445. package/dist/comments-Dmpp0YIc.js.map +0 -1
  446. package/dist/data-display-BdgCAw8T.js.map +0 -1
  447. package/dist/date-picker-RlIzKom_.js +0 -1551
  448. package/dist/date-picker-RlIzKom_.js.map +0 -1
  449. package/dist/date-pickers-DY-CpXS1.js +0 -179
  450. package/dist/date-pickers-DY-CpXS1.js.map +0 -1
  451. package/dist/feedback-Dm4izqFn.js +0 -240
  452. package/dist/feedback-Dm4izqFn.js.map +0 -1
  453. package/dist/filters-DzgSJpMK.js.map +0 -1
  454. package/dist/form-field-BriWAXyg.js +0 -63
  455. package/dist/form-field-BriWAXyg.js.map +0 -1
  456. package/dist/forms-numeric-DIhghX1Q.js +0 -910
  457. package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
  458. package/dist/header-DMMxG__r.js.map +0 -1
  459. package/dist/item-DjCcM18E.js.map +0 -1
  460. package/dist/layout.types-Cn7aUzJp.js +0 -20
  461. package/dist/layout.types-Cn7aUzJp.js.map +0 -1
  462. package/dist/mentions-0_4nWuI-.js.map +0 -1
  463. package/dist/message-g8p7eVtN.js +0 -128
  464. package/dist/message-g8p7eVtN.js.map +0 -1
  465. package/dist/navigation-C90-oQFq.js.map +0 -1
  466. package/dist/navigation-DaRjthVk.js.map +0 -1
  467. package/dist/number-CRU3kGuk.js.map +0 -1
  468. package/dist/overlays-BSgCtM2v.js.map +0 -1
  469. package/dist/popover-B85RenIl.js.map +0 -1
  470. package/dist/primitives-ByWgGUgt.js.map +0 -1
  471. package/dist/rich-text-Dth5E882.js +0 -78
  472. package/dist/rich-text-Dth5E882.js.map +0 -1
  473. package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
  474. package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
  475. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
  476. package/dist/safe-image-src-C6kQSMBZ.js +0 -17
  477. package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
  478. package/dist/sanitize-html-DsQmI48u.js.map +0 -1
  479. package/dist/settings-Bar5wiSo.js +0 -167
  480. package/dist/settings-Bar5wiSo.js.map +0 -1
  481. package/dist/sidebar-D-JYMMbY.js +0 -686
  482. package/dist/sidebar-D-JYMMbY.js.map +0 -1
  483. package/dist/sidebar-f9gRWXIR.js.map +0 -1
  484. package/dist/table-B4TE7iOV.js.map +0 -1
  485. package/dist/table-CFOWY9pQ.js.map +0 -1
  486. package/dist/tabs-e7ko9S2o.js.map +0 -1
  487. package/dist/upload-BOW6U2tI.js.map +0 -1
  488. package/dist/utils-B6kKb8jB.js.map +0 -1
  489. package/dist/value-typography-uAmWUAL1.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays-CC8zI3Du.js","names":["Dialog","DialogPrimitive","DialogTrigger","DialogClose","DialogContent","Button","DialogHeader","DialogFooter","DialogTitle","DialogDescription","isSimpleText","titleTypography","Dialog","DialogPrimitive","React","DialogTriggerPrimitive","DialogClosePrimitive","DialogContentPrimitive","DialogHeaderPrimitive","DialogFooterPrimitive","DialogTitlePrimitive","DialogDescriptionPrimitive","BaseDialog","AlertDialog","AlertDialogPrimitive","AlertDialogTrigger","AlertDialogContent","AlertDialogFooter","AlertDialogMedia","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","Button","AlertDialogCancel","AlertDialog","AlertDialogPrimitive","React","AlertDialogTriggerPrimitive","AlertDialogContentPrimitive","AlertDialogFooterPrimitive","AlertDialogTitlePrimitive","AlertDialogDescriptionPrimitive","AlertDialogMediaPrimitive","AlertDialogActionPrimitive","AlertDialogCancelPrimitive","BaseAlertDialog","useOverlayConfig","useThemePortalContainer","cn","SheetDescription","SheetTitle","useInsideOverlayLayer","useOpenerFinalFocus","SheetContent","SheetBody","SheetFooter","overlayAnatomyRecipes","SheetClose","SheetHeader","Sheet","OverlayLayer","Button","Text","textWeights","textLineHeights","textSizes","portalClassName","motionRecipes","Slot","Button$1","Stack","toneRecipes","AlertDescription","Alert","surfaceDividerRecipes","modalRegionRecipes","compositionRhythm","modalBackdropRecipe","usePopupFocusRecovery","interactionRecipes","React$1","Dialog$2","props","Dialog","DialogTrigger$1","renderSlot","asChild","DialogPortal","resolvedContainer","container","className","DialogClose$1","DialogOverlay","DialogContent$1","finalFocusProp","recoverFocus","onFocusCapture","insideOverlay","capture","showCloseButton","XIcon","DialogHeader$1","DialogFooter$1","children","DialogTitle$1","DialogDescription$1","isSimpleText$1","value","titleTypography$1","Dialog$1","DialogTrigger","DialogClose","DialogContent","DialogHeader","textGap","DialogBody","DialogFooter","DialogTitle","DialogDescription","defaultOverlayStrings","defaultAlertDialogStrings","useOverlayActions","strings","useStrings","customStrings","isExecuting","setIsExecuting","useState","executingRef","useRef","handleConfirm","useCallback","onConfirm","closeDialog","onAsyncConfirm","closeOnAsyncComplete","error","onError","loading","handleCancel","onCancel","handleFormSubmit","formId","form","useMemo","emphasis","tone","confirmTone","resolveOpenValue","nextOpen","currentOpen","normalizeGroupState","result","key","keys","state","hasGroupStateChanged","previous","next","useOverlayVisibility","controlledOpen","internalOpen","setInternalOpen","defaultOpen","isControlled","open","openRef","previousVisibility","useLayoutEffect","useEffect","onOpen","onClose","setOpen","resolvedOpen","onOpenChange","useOverlayVisibilityGroup","keyList","stateRef","setKeyOpen","previousState","nextState","closeOthersOnOpen","item","usePendingOverlayFocus","popupRef","popup","pending","modal","active","overlayToneGlyphs","HelpCircle","AlertCircle","AlertTriangle","Info","CheckCircle","OverlayToneIcon","Glyph","color","SIZE_CLASSES","ActionDialogImpl","centered","align","defaultDialogAlign","visibility","pendingFocusRef","effectiveLoading","hasContent","alertMessage","hasFooter","showCancel","showConfirm","footer","closeOnBackdropClick","details","closeOnEscape","trigger","isValidElement","surfaceStyle","initialFocusRef","title","size","description","visuallyHideHeader","showIcon","contentClassName","finalConfirmTone","confirmStyle","confirmButtonOnClick","X","ActionDialog","memo","WIDTH_CLASSES","ActionDrawerImpl","isHorizontal","direction","showFooter","SheetTrigger","width","ActionDrawer","AlertDialog$2","AlertDialog","AlertDialogTrigger$1","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent$1","AlertDialogFooter$1","AlertDialogMedia$1","AlertDialogTitle$1","AlertDialogDescription$1","AlertDialogAction$1","AlertDialogCancel$1","isSimpleText","titleTypography","AlertDialog$1","AlertDialogTrigger","AlertDialogContent","AlertDialogHeader","AlertDialogBody","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogMedia","AlertDialogAction","AlertDialogCancel","ConfirmDialogImpl","resolvedAlign","defaultConfirmAlign","mergedStrings","resolvedConfirmTone","destructive","resolvedTone","toneGlyph","hasHeading","ConfirmDialog"],"sources":["../src/components/ui/dialog.tsx","../src/components/base/display/dialog.tsx","../src/components/features/overlays/overlays.strings.ts","../src/components/features/overlays/hooks/use-overlay-actions.ts","../src/components/features/overlays/hooks/use-overlay-visibility.ts","../src/components/features/overlays/hooks/use-pending-overlay-focus.ts","../src/components/features/overlays/overlay-tone-icon.tsx","../src/components/features/overlays/dialog.tsx","../src/components/features/overlays/drawer.tsx","../src/components/ui/alert-dialog.tsx","../src/components/base/display/alert-dialog.tsx","../src/components/features/overlays/alert-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { overlayAnatomyRecipes } from '../../lib/overlay-anatomy-recipes';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { portalClassName } from '../../lib/portal-recipes';\nimport { modalBackdropRecipe } from './overlay.recipes';\nimport { OverlayLayer, useInsideOverlayLayer, useOpenerFinalFocus } from './overlay-layer';\nimport { usePopupFocusRecovery } from '../../lib/use-popup-focus-recovery';\n\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"./button\"\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" modal=\"trap-focus\" {...props} />\n}\n\nfunction DialogTrigger({\n asChild = false,\n ...props\n}: DialogPrimitive.Trigger.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Trigger\n data-slot=\"dialog-trigger\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction DialogPortal({ container, className, ...props }: DialogPrimitive.Portal.Props) {\n const resolvedContainer = useThemePortalContainer(container)\n return <DialogPrimitive.Portal container={resolvedContainer} data-slot=\"dialog-portal\" className={portalClassName(className)} {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(modalBackdropRecipe, motionRecipes.backdrop, \"isolate\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n container,\n children,\n showCloseButton = true,\n onFocusCapture,\n finalFocus: finalFocusProp,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n} & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n const recoverFocus = usePopupFocusRecovery(onFocusCapture)\n const insideOverlay = useInsideOverlayLayer()\n const { capture, finalFocus } = useOpenerFinalFocus(finalFocusProp)\n return (\n <DialogPortal container={resolvedContainer}>\n <DialogOverlay forceRender={!insideOverlay} />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n motionRecipes.dialog,\n \"bg-background grid max-w-[calc(100%-2rem)] gap-space-xl rounded-surface p-surface text-sm sm:max-w-md fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n className\n )}\n {...props}\n finalFocus={finalFocus}\n onFocusCapture={recoverFocus}\n >\n {capture}\n <OverlayLayer>{children}</OverlayLayer>\n {!!showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n data-overlay-close=\"\"\n className={overlayAnatomyRecipes.close}\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {!!showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n Close\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n asChild = false,\n ...props\n}: DialogPrimitive.Title.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n render={renderSlot}\n className={cn(\"leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n asChild = false,\n ...props\n}: DialogPrimitive.Description.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n render={renderSlot}\n className={cn(\"text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import { modalRegionRecipes, surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport type { TextGap } from '../structure';\n/**\n * Dialog — internal modal anatomy behind `ActionDialog`.\n *\n * Not published from any entrypoint: applications use `ActionDialog` (or\n * `ConfirmDialog`) from `themelia-react-ui/features/overlays`, which owns the\n * lifecycle, focus, dismissal and action contract. This wrapper supplies the\n * modal geometry those features share: one framed popover surface whose\n * header, scrolling body and footer each own their inset, with exactly one rule\n * between adjacent visible regions (`modalRegionRecipes`).\n */\nimport * as React from 'react';\n\nimport {\n\tDialog as DialogPrimitive,\n\tDialogClose as DialogClosePrimitive,\n\tDialogContent as DialogContentPrimitive,\n\tDialogDescription as DialogDescriptionPrimitive,\n\tDialogFooter as DialogFooterPrimitive,\n\tDialogHeader as DialogHeaderPrimitive,\n\tDialogOverlay,\n\tDialogPortal,\n\tDialogTitle as DialogTitlePrimitive,\n\tDialogTrigger as DialogTriggerPrimitive,\n} from '../../ui/dialog';\nimport { Text } from '../../typography';\nimport { textLineHeights, textSizes, textWeights } from '../../typography/text.styles';\nimport { cn } from '../../../lib/utils';\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/**\n * The title element carries the canonical title role, so custom title nodes\n * match scalar titles and its line box never differs from the Text inside.\n * Descriptions keep the configurable Text default instead.\n */\nconst titleTypography = cn(textSizes.base, textWeights.semibold, textLineHeights.snug);\n\nexport const Dialog = DialogPrimitive;\n\nexport const DialogTrigger = React.forwardRef<\n\tReact.ElementRef<typeof DialogTriggerPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogTriggerPrimitive>\n>(function DialogTrigger({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogTriggerPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-trigger--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogTrigger.displayName = 'DialogTrigger';\n\nexport const DialogClose = React.forwardRef<\n\tReact.ElementRef<typeof DialogClosePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogClosePrimitive>\n>(function DialogClose({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogClosePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-close--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogClose.displayName = 'DialogClose';\n\nexport const DialogContent = React.forwardRef<\n\tReact.ElementRef<typeof DialogContentPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogContentPrimitive>\n>(function DialogContent({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogContentPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t// The shell is flush: each region owns its inset once and the rules\n\t\t\t\t// between regions run edge to edge.\n\t\t\t\t'dialog-content--component flex max-h-[min(90vh,48rem)] flex-col gap-0 overflow-hidden rounded-surface bg-popover p-0 text-popover-foreground shadow-xl sm:max-w-lg', surfaceDividerRecipes.modal.shell,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogContent.displayName = 'DialogContent';\n\nexport const DialogHeader = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof DialogHeaderPrimitive> & { textGap?: TextGap }\n>(function DialogHeader({ className, textGap = 'normal', ...props }, ref) {\n\treturn (\n\t\t<DialogHeaderPrimitive\n\t\t\tref={ref}\n\t\t\tdata-modal-region=\"\"\n\t\t\tclassName={cn(\n\t\t\t\t'dialog-header--component', modalRegionRecipes.header,\n\t\t\t\toverlayAnatomyRecipes.header,\n\t\t\t\ttextGap === 'dense' ? 'gap-dense' : 'gap-normal',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogHeader.displayName = 'DialogHeader';\n\n/** Scroll-owning content region between the pinned dialog header and footer. */\nexport const DialogBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n\tfunction DialogBody({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"dialog-body\"\n\t\t\t\tdata-modal-region=\"\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'dialog-body--component', modalRegionRecipes.body,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nDialogBody.displayName = 'DialogBody';\n\nexport const DialogFooter = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof DialogFooterPrimitive>\n>(function DialogFooter({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogFooterPrimitive\n\t\t\tref={ref}\n\t\t\tdata-modal-region=\"\"\n\t\t\tclassName={cn(\n\t\t\t\t'dialog-footer--component', modalRegionRecipes.footer,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogFooter.displayName = 'DialogFooter';\n\nexport const DialogTitle = React.forwardRef<\n\tReact.ElementRef<typeof DialogTitlePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogTitlePrimitive>\n>(function DialogTitle({ children, className, ...props }, ref) {\n\treturn (\n\t\t<DialogTitlePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-title--component m-0', titleTypography, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tsize=\"base\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tlineHeight=\"snug\"\n\t\t\t\t\tclassName=\"dialog-title--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</DialogTitlePrimitive>\n\t);\n});\n\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = React.forwardRef<\n\tReact.ElementRef<typeof DialogDescriptionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogDescriptionPrimitive>\n>(function DialogDescription({ children, className, ...props }, ref) {\n\treturn (\n\t\t<DialogDescriptionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-description--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tlineHeight=\"relaxed\"\n\t\t\t\t\tclassName=\"dialog-description--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</DialogDescriptionPrimitive>\n\t);\n});\n\nDialogDescription.displayName = 'DialogDescription';\n\nexport { DialogOverlay, DialogPortal };\n","/**\n * Default user-facing strings shared by ActionDialog, ActionDrawer, and\n * ConfirmDialog recipes.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <ActionDialog strings={{ confirm: t('common.confirm') }} … />\n */\n\nexport interface OverlayStrings {\n\tconfirm: string;\n\tcancel: string;\n\tclose: string;\n\tloading: string;\n\tdialogLabel: string;\n\tdrawerLabel: string;\n\talertDialogLabel: string;\n}\n\nexport const defaultOverlayStrings: OverlayStrings = {\n\tconfirm: 'Confirm',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n\tdialogLabel: 'Dialog',\n\tdrawerLabel: 'Drawer',\n\talertDialogLabel: 'Confirmation',\n};\n\nexport const defaultAlertDialogStrings: OverlayStrings = {\n\tconfirm: 'Continue',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n\tdialogLabel: 'Dialog',\n\tdrawerLabel: 'Drawer',\n\talertDialogLabel: 'Confirmation',\n};\n","import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\n\nimport {\n\tdefaultOverlayStrings,\n\ttype OverlayStrings,\n} from '../overlays.strings';\nimport type {\n\tOverlayButtonTone,\n\tOverlayActionProps,\n\tOverlayTone,\n} from '../overlays.types';\n\nexport interface UseOverlayActionsOptions\n\textends Pick<\n\t\tOverlayActionProps,\n\t\t| 'onConfirm'\n\t\t| 'onAsyncConfirm'\n\t\t| 'closeOnAsyncComplete'\n\t\t| 'confirmTone'\n\t\t| 'loading'\n\t\t| 'formId'\n\t> {\n\tcloseDialog: () => void;\n\tonCancel?: () => void;\n\tcustomStrings?: StringsProp<OverlayStrings>;\n\temphasis?: boolean;\n\ttone?: OverlayTone;\n\t/** Called when `onAsyncConfirm` throws; the consumer reports or retries.\n\t * Without it the library logs the rejection in development only. */\n\tonError?: (error: unknown) => void;\n}\n\nexport interface UseOverlayActionsReturn {\n\t/** Overrides this surface's own copy. */\n\tstrings: OverlayStrings;\n\tisExecuting: boolean;\n\thandleConfirm: () => Promise<void>;\n\thandleCancel: () => void;\n\tfinalConfirmTone: OverlayButtonTone;\n\tconfirmButtonOnClick: (() => Promise<void>) | undefined;\n\teffectiveLoading: boolean;\n}\n\nexport function useOverlayActions({\n\tcloseDialog,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tloading = false,\n\tformId,\n\tonCancel,\n\tcustomStrings,\n\temphasis = false,\n\ttone = 'neutral',\n\tonError,\n}: UseOverlayActionsOptions): UseOverlayActionsReturn {\n\tconst strings = useStrings(defaultOverlayStrings, customStrings);\n\n\tconst [isExecuting, setIsExecuting] = useState(false);\n\tconst executingRef = useRef(false);\n\n\tconst handleConfirm = useCallback(async () => {\n\t\tif (loading || executingRef.current) return;\n\t\tif (onConfirm) {\n\t\t\tonConfirm();\n\t\t\tcloseDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tif (onAsyncConfirm) {\n\t\t\texecutingRef.current = true;\n\t\t\tsetIsExecuting(true);\n\t\t\ttry {\n\t\t\t\tawait onAsyncConfirm();\n\t\t\t\tif (closeOnAsyncComplete) {\n\t\t\t\t\tcloseDialog();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// A consumer that handles the failure owns its reporting; only an\n\t\t\t\t// unhandled rejection is surfaced in development.\n\t\t\t\tif (onError) onError(error);\n\t\t\t\telse if (import.meta.env?.DEV) console.error('Overlay async confirm failed:', error);\n\t\t\t} finally {\n\t\t\t\texecutingRef.current = false;\n\t\t\t\tsetIsExecuting(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcloseDialog();\n\t}, [loading, onConfirm, onAsyncConfirm, closeOnAsyncComplete, closeDialog, onError]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tif (loading || executingRef.current) return;\n\t\tonCancel?.();\n\t\tcloseDialog();\n\t}, [loading, onCancel, closeDialog]);\n\n\tconst handleFormSubmit = useCallback(async () => {\n\t\tif (!formId || loading || executingRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst form = document.getElementById(formId);\n\n\t\tif (!(form instanceof HTMLFormElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tform.requestSubmit();\n\t}, [formId, loading]);\n\n\tconst finalConfirmTone = useMemo<OverlayButtonTone>(() => {\n\t\tif (!emphasis) return confirmTone ?? 'primary';\n\t\tif (tone === 'destructive') return 'destructive';\n\t\tif (tone === 'warning') return 'warning';\n\t\tif (tone === 'success') return 'success';\n\t\treturn confirmTone ?? 'primary';\n\t}, [emphasis, tone, confirmTone]);\n\n\tconst confirmButtonOnClick = formId ? handleFormSubmit : handleConfirm;\n\n\treturn {\n\t\tstrings,\n\t\tisExecuting,\n\t\thandleConfirm,\n\t\thandleCancel,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading: isExecuting || loading,\n\t};\n}\n","import {\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype Dispatch,\n\ttype SetStateAction,\n} from 'react';\n\nexport type OverlayOpenSetter = Dispatch<SetStateAction<boolean>>;\n\nexport interface OverlayVisibilityProps {\n\t/** Current visibility. */\n\topen: boolean;\n\t/** Requests a visibility change; spread both onto an overlay. */\n\tonOpenChange: (open: boolean) => void;\n}\n\nexport interface UseOverlayVisibilityOptions {\n\t/** Initial visibility when uncontrolled. Default: `false`. */\n\tdefaultOpen?: boolean;\n\t/** Controlled visibility. Omit to let the hook own it. */\n\topen?: boolean;\n\t/** Fired for each request that differs from the current visibility. */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Fired after a change to open. */\n\tonOpen?: () => void;\n\t/** Fired after a change to closed, whatever dismissed the overlay. */\n\tonClose?: () => void;\n}\n\nexport interface UseOverlayVisibilityReturn {\n\topen: boolean;\n\tisOpen: boolean;\n\tsetOpen: OverlayOpenSetter;\n\tshow: () => void;\n\thide: () => void;\n\ttoggle: () => void;\n\toverlayProps: OverlayVisibilityProps;\n}\n\nexport type OverlayVisibilityGroupState<TKey extends string = string> = Record<TKey, boolean>;\n\nexport interface UseOverlayVisibilityGroupOptions<TKey extends string = string> {\n\t/** Initial visibility per key when uncontrolled. */\n\tdefaultOpen?: Partial<Record<TKey, boolean>>;\n\t/** Controlled visibility per key. */\n\topen?: Partial<Record<TKey, boolean>>;\n\t/** Fired for each requested change, with the key, its visibility and the proposed group state. */\n\tonOpenChange?: (\n\t\tkey: TKey,\n\t\topen: boolean,\n\t\tstate: OverlayVisibilityGroupState<TKey>,\n\t) => void;\n\t/** Opening one key closes the others, for one-at-a-time overlays. Default: `false`. */\n\tcloseOthersOnOpen?: boolean;\n}\n\nexport type UseOverlayVisibilityGroupReturn<TKey extends string = string> = Record<\n\tTKey,\n\tUseOverlayVisibilityReturn\n>;\n\nfunction resolveOpenValue(\n\tnextOpen: SetStateAction<boolean>,\n\tcurrentOpen: boolean,\n): boolean {\n\tif (typeof nextOpen === 'function') {\n\t\treturn (nextOpen as (open: boolean) => boolean)(currentOpen);\n\t}\n\treturn nextOpen;\n}\n\nfunction normalizeGroupState<TKey extends string>(\n\tkeys: readonly TKey[],\n\tstate?: Partial<Record<TKey, boolean>>,\n): OverlayVisibilityGroupState<TKey> {\n\tconst result = {} as OverlayVisibilityGroupState<TKey>;\n\tfor (const key of keys) {\n\t\tresult[key] = Boolean(state?.[key]);\n\t}\n\treturn result;\n}\n\nfunction hasGroupStateChanged<TKey extends string>(\n\tprevious: OverlayVisibilityGroupState<TKey>,\n\tnext: OverlayVisibilityGroupState<TKey>,\n\tkeys: readonly TKey[],\n): boolean {\n\treturn keys.some((key) => previous[key] !== next[key]);\n}\n\nexport function useOverlayVisibility({\n\tdefaultOpen = false,\n\topen: controlledOpen,\n\tonOpenChange,\n\tonOpen,\n\tonClose,\n}: UseOverlayVisibilityOptions = {}): UseOverlayVisibilityReturn {\n\tconst [internalOpen, setInternalOpen] = useState(defaultOpen);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\tconst openRef = useRef(open);\n\tconst previousVisibility = useRef(open);\n\tuseLayoutEffect(() => {\n\t\topenRef.current = open;\n\t}, [isControlled, open]);\n\tuseEffect(() => {\n\t\tif (previousVisibility.current === open) return;\n\t\tpreviousVisibility.current = open;\n\t\tif (open) onOpen?.();\n\t\telse onClose?.();\n\t}, [onClose, onOpen, open]);\n\n\tconst setOpen = useCallback<OverlayOpenSetter>(\n\t\t(nextOpen) => {\n\t\t\tconst resolvedOpen = resolveOpenValue(nextOpen, openRef.current);\n\t\t\tif (openRef.current === resolvedOpen) return;\n\n\t\t\tif (!isControlled) {\n\t\t\t\topenRef.current = resolvedOpen;\n\t\t\t\tsetInternalOpen(resolvedOpen);\n\t\t\t}\n\n\t\t\tonOpenChange?.(resolvedOpen);\n\t\t},\n\t\t[isControlled, onOpenChange],\n\t);\n\n\tconst show = useCallback(() => {\n\t\tsetOpen(true);\n\t}, [setOpen]);\n\n\tconst hide = useCallback(() => {\n\t\tsetOpen(false);\n\t}, [setOpen]);\n\n\tconst toggle = useCallback(() => {\n\t\tsetOpen((currentOpen) => !currentOpen);\n\t}, [setOpen]);\n\n\tconst overlayProps = useMemo(\n\t\t() => ({\n\t\t\topen,\n\t\t\tonOpenChange: setOpen,\n\t\t}),\n\t\t[open, setOpen],\n\t);\n\n\treturn {\n\t\topen,\n\t\tisOpen: open,\n\t\tsetOpen,\n\t\tshow,\n\t\thide,\n\t\ttoggle,\n\t\toverlayProps,\n\t};\n}\n\nexport function useOverlayVisibilityGroup<const TKeys extends readonly string[]>(\n\tkeys: TKeys,\n\t{\n\t\tdefaultOpen,\n\t\topen: controlledOpen,\n\t\tonOpenChange,\n\t\tcloseOthersOnOpen = false,\n\t}: UseOverlayVisibilityGroupOptions<TKeys[number] & string> = {},\n): UseOverlayVisibilityGroupReturn<TKeys[number] & string> {\n\ttype TKey = TKeys[number] & string;\n\n\tconst keyList = keys as readonly TKey[];\n\tconst [internalOpen, setInternalOpen] = useState<OverlayVisibilityGroupState<TKey>>(\n\t\t() => normalizeGroupState(keyList, defaultOpen),\n\t);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst state = normalizeGroupState(keyList, isControlled ? controlledOpen : internalOpen);\n\tconst stateRef = useRef(state);\n\tuseLayoutEffect(() => {\n\t\tstateRef.current = state;\n\t}, [state]);\n\n\tconst setKeyOpen = useCallback(\n\t\t(key: TKey, nextOpen: SetStateAction<boolean>) => {\n\t\t\tconst previousState = stateRef.current;\n\t\t\tconst resolvedOpen = resolveOpenValue(nextOpen, previousState[key]);\n\t\t\tconst nextState = {\n\t\t\t\t...previousState,\n\t\t\t\t[key]: resolvedOpen,\n\t\t\t} as OverlayVisibilityGroupState<TKey>;\n\n\t\t\tif (closeOthersOnOpen && resolvedOpen) {\n\t\t\t\tfor (const item of keyList) {\n\t\t\t\t\tif (item !== key) {\n\t\t\t\t\t\tnextState[item] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!hasGroupStateChanged(previousState, nextState, keyList)) return;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tstateRef.current = nextState;\n\t\t\t\tsetInternalOpen(nextState);\n\t\t\t}\n\n\t\t\tonOpenChange?.(key, resolvedOpen, nextState);\n\t\t},\n\t\t[closeOthersOnOpen, isControlled, keyList, onOpenChange],\n\t);\n\n\treturn useMemo(() => {\n\t\tconst result = {} as UseOverlayVisibilityGroupReturn<TKey>;\n\n\t\tfor (const key of keyList) {\n\t\t\tconst open = state[key];\n\t\t\tconst setOpen: OverlayOpenSetter = (nextOpen) => {\n\t\t\t\tsetKeyOpen(key, nextOpen);\n\t\t\t};\n\n\t\t\tresult[key] = {\n\t\t\t\topen,\n\t\t\t\tisOpen: open,\n\t\t\t\tsetOpen,\n\t\t\t\tshow: () => setKeyOpen(key, true),\n\t\t\t\thide: () => setKeyOpen(key, false),\n\t\t\t\ttoggle: () => setKeyOpen(key, (currentOpen) => !currentOpen),\n\t\t\t\toverlayProps: {\n\t\t\t\t\topen,\n\t\t\t\t\tonOpenChange: setOpen,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}, [keyList, setKeyOpen, state]);\n}\n","import { useLayoutEffect, useRef } from 'react';\n\n/** Keep modal focus anchored when its focused action becomes disabled. */\nexport function usePendingOverlayFocus(pending: boolean, modal: boolean | 'trap-focus' = true) {\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\tuseLayoutEffect(() => {\n\t\tconst popup = popupRef.current;\n\t\tif (!pending || !modal || !popup) return;\n\t\tconst active = popup.ownerDocument.activeElement;\n\t\t// Preserve enabled fields and consumer-owned custom footer controls.\n\t\tif (active === popup.ownerDocument.body || (active && popup.contains(active) && active.matches(':disabled'))) {\n\t\t\tpopup.focus({ preventScroll: true });\n\t\t}\n\t}, [pending, modal]);\n\treturn popupRef;\n}\n","import { AlertCircle, AlertTriangle, CheckCircle, HelpCircle, Info } from 'lucide-react';\n\nimport { textLineHeights, textSizes } from '../../typography/text.styles';\nimport { cn } from '../../../lib/utils';\n\nimport type { OverlayTone } from './overlays.types';\nimport { toneRecipes } from '../../../lib/tone-recipes';\n\n/** One glyph and colour per tone, shared by every overlay's opt-in `showIcon`. */\nexport const overlayToneGlyphs = {\n\tneutral: { Glyph: HelpCircle, color: 'text-muted-foreground', surface: 'bg-muted' },\n\tdestructive: { Glyph: AlertCircle, color: 'text-destructive', surface: toneRecipes.destructive.tint },\n\twarning: { Glyph: AlertTriangle, color: 'text-warning-accent', surface: toneRecipes.warning.tint },\n\tinfo: { Glyph: Info, color: 'text-info', surface: toneRecipes.info.tint },\n\tsuccess: { Glyph: CheckCircle, color: 'text-success', surface: toneRecipes.success.tint },\n} as const satisfies Record<OverlayTone, { Glyph: typeof Info; color: string; surface: string }>;\n\n/**\n * Inline tone glyph for a heading row. The wrapper takes the title's own line\n * box (base size, snug leading, `h-lh`), so the glyph centres on the first title\n * line at any density instead of relying on an optical offset.\n */\nexport function OverlayToneIcon({ tone }: { tone: OverlayTone }) {\n\tconst { Glyph, color } = overlayToneGlyphs[tone];\n\treturn (\n\t\t<span aria-hidden=\"true\" className={cn('overlay-tone-icon--component flex h-lh shrink-0 items-center', textSizes.base, textLineHeights.snug)}>\n\t\t\t<Glyph className={cn('size-icon', color)} />\n\t\t</span>\n\t);\n}\n","import { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport { X } from 'lucide-react';\nimport { isValidElement, memo } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tDialog as BaseDialog,\n\tDialogBody,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from '../../base/display/dialog';\nimport { Stack } from '../../base/structure';\nimport { compositionRhythm } from '../../base/structure/composition.recipes';\nimport { useOverlayConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport { OverlayToneIcon } from './overlay-tone-icon';\nimport type { ActionDialogProps, OverlaySize } from './overlays.types';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nconst SIZE_CLASSES: Record<OverlaySize, string> = {\n\txs: 'sm:max-w-xs',\n\tsm: 'sm:max-w-sm',\n\tmd: 'sm:max-w-md',\n\tlg: 'sm:max-w-lg',\n\txl: 'sm:max-w-xl',\n\t'2xl': 'sm:max-w-2xl',\n\t'3xl': 'sm:max-w-3xl',\n\t'4xl': 'sm:max-w-4xl',\n\t'5xl': 'sm:max-w-5xl',\n\tfull: 'sm:max-w-[calc(100vw-2rem)]',\n};\n\nfunction ActionDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tshowCloseButton = true,\n\tsurfaceStyle,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'neutral',\n\tshowIcon = false,\n\talertMessage,\n\tsize = 'lg',\n\ttrigger,\n\talign,\n}: ActionDialogProps) {\n\tconst { defaultDialogAlign } = useOverlayConfig();\n\tconst centered = (align ?? defaultDialogAlign ?? 'start') === 'center';\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog: visibility.hide,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tonError,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmTone,\n\t\tloading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading);\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showCancel || showConfirm || footer;\n\n\treturn (\n\t\t<BaseDialog\n\t\t\topen={visibility.open}\n\t\t\tmodal\n\t\t\tdisablePointerDismissal={effectiveLoading || !closeOnBackdropClick}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<DialogTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<DialogTrigger render={<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" />} className=\"overlay-trigger--fallback\">\n\t\t\t\t\t{trigger}\n\t\t\t\t</DialogTrigger>\n\t\t\t))}\n\n\t\t\t<DialogContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tstyle={surfaceStyle}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.dialogLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-dialog--component dialog--component',\n\t\t\t\t\tSIZE_CLASSES[size],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t<DialogHeader\n\t\t\t\t\t\tdata-align={centered ? 'center' : 'start'}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'dialog--header',\n\t\t\t\t\t\t\tcentered && cn('text-center', overlayAnatomyRecipes.headerCentered),\n\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction={centered ? 'vertical' : 'horizontal'} gap=\"sm\" align={centered ? 'center' : 'start'} wrap={false}>\n\t\t\t\t\t\t\t{!!showIcon && <OverlayToneIcon tone={tone} />}\n\t\t\t\t\t\t\t<Stack gap=\"normal\" align={centered ? 'center' : undefined} className={cn('min-w-0', centered ? 'w-full' : 'flex-1')}>\n\t\t\t\t\t\t\t\t{!!title && <DialogTitle>{title}</DialogTitle>}\n\t\t\t\t\t\t\t\t{!!description && <DialogDescription>{description}</DialogDescription>}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasContent && (\n\t\t\t\t\t<DialogBody className={cn('dialog--body', contentClassName)}>\n\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t<Alert tone={tone} className=\"mb-space-md\">\n\t\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</DialogBody>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t<DialogFooter className=\"dialog--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap={compositionRhythm.commands}\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify={centered ? 'center' : 'end'}\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone={finalConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DialogFooter>\n\t\t\t\t)}\n\n\t\t\t\t{/*\n\t\t\t\t * Last in the DOM, drawn in the corner: opening focuses the first\n\t\t\t\t * field or action rather than the dismiss control, and the reading\n\t\t\t\t * order stays title → content → actions.\n\t\t\t\t */}\n\t\t\t\t{!!showCloseButton && (\n\t\t\t\t\t<DialogClose\n\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\trender={(\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\tdata-overlay-close=\"\"\n\t\t\t\t\t\t\t\tclassName={cn(overlayAnatomyRecipes.close, `z-10 text-muted-foreground ${interactionRecipes.rowHover}`)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"size-icon\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</DialogContent>\n\t\t</BaseDialog>\n\t);\n}\n\nexport const ActionDialog = memo(ActionDialogImpl);\nActionDialog.displayName = 'ActionDialog';\n","import { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport { X } from 'lucide-react';\nimport { isValidElement, memo } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tSheet,\n\tSheetBody,\n\tSheetClose,\n\tSheetContent,\n\tSheetDescription,\n\tSheetFooter,\n\tSheetHeader,\n\tSheetTitle,\n\tSheetTrigger,\n} from '../../base/sheet/sheet';\nimport { Stack } from '../../base/structure';\nimport { compositionRhythm } from '../../base/structure/composition.recipes';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport { OverlayToneIcon } from './overlay-tone-icon';\nimport type { ActionDrawerProps, OverlaySize } from './overlays.types';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nconst WIDTH_CLASSES: Record<OverlaySize, string> = {\n\txs: 'data-[side=left]:sm:max-w-xs data-[side=right]:sm:max-w-xs',\n\tsm: 'data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm',\n\tmd: 'data-[side=left]:sm:max-w-md data-[side=right]:sm:max-w-md',\n\tlg: 'data-[side=left]:sm:max-w-lg data-[side=right]:sm:max-w-lg',\n\txl: 'data-[side=left]:sm:max-w-xl data-[side=right]:sm:max-w-xl',\n\t'2xl': 'data-[side=left]:sm:max-w-2xl data-[side=right]:sm:max-w-2xl',\n\t'3xl': 'data-[side=left]:sm:max-w-3xl data-[side=right]:sm:max-w-3xl',\n\t'4xl': 'data-[side=left]:sm:max-w-4xl data-[side=right]:sm:max-w-4xl',\n\t'5xl': 'data-[side=left]:sm:max-w-5xl data-[side=right]:sm:max-w-5xl',\n\tfull: 'data-[side=left]:sm:max-w-[calc(100vw-2rem)] data-[side=right]:sm:max-w-[calc(100vw-2rem)]',\n};\n\nfunction ActionDrawerImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tshowCloseButton = true,\n\tclassName,\n\tcontentClassName,\n\tsurfaceStyle,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'neutral',\n\tshowIcon = false,\n\talertMessage,\n\tdirection = 'right',\n\twidth = 'lg',\n\tshowFooter = true,\n\tmodal = true,\n\ttrigger,\n}: ActionDrawerProps) {\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog: visibility.hide,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tonError,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmTone,\n\t\tloading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst isHorizontal = direction === 'left' || direction === 'right';\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading, modal);\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showFooter && (showCancel || showConfirm || footer);\n\n\treturn (\n\t\t<Sheet\n\t\t\topen={visibility.open}\n\t\t\tmodal={modal}\n\t\t\t// A non-modal panel sits beside the page you keep working in, so a page\n\t\t\t// press must not dismiss it; it closes from its own controls or Escape.\n\t\t\tdisablePointerDismissal={effectiveLoading || !closeOnBackdropClick || modal === false}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<SheetTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<SheetTrigger render={<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" />} className=\"overlay-trigger--fallback\">\n\t\t\t\t\t{trigger}\n\t\t\t\t</SheetTrigger>\n\t\t\t))}\n\n\t\t\t<SheetContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tside={direction}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tstyle={surfaceStyle}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.drawerLabel}\n\t\t\t\t// The vendored SheetContent renders its backdrop unconditionally,\n\t\t\t\t// so a non-modal drawer would still sit behind a full-viewport\n\t\t\t\t// scrim. This marks the panel so the token layer can drop it.\n\t\t\t\tdata-modal={modal === false ? 'false' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-drawer--component drawer--component',\n\t\t\t\t\tisHorizontal && 'data-[side=left]:w-full data-[side=right]:w-full',\n\t\t\t\t\tisHorizontal && WIDTH_CLASSES[width],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t<SheetHeader className={cn('drawer--header', visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"start\" wrap={false}>\n\t\t\t\t\t\t\t{!!showIcon && <OverlayToneIcon tone={tone} />}\n\t\t\t\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t{!!title && <SheetTitle>{title}</SheetTitle>}\n\t\t\t\t\t\t\t\t{!!description && <SheetDescription>{description}</SheetDescription>}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasContent && (\n\t\t\t\t\t<SheetBody className={cn('drawer--body', contentClassName)}>\n\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t<Alert tone={tone} className=\"mb-space-md\">\n\t\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SheetBody>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t<SheetFooter className=\"drawer--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap={compositionRhythm.commands}\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone={finalConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</SheetFooter>\n\t\t\t\t)}\n\n\t\t\t\t{/*\n\t\t\t\t * Last in the DOM, drawn in the corner: opening focuses the first\n\t\t\t\t * field or action rather than the dismiss control, and the reading\n\t\t\t\t * order stays title → content → actions.\n\t\t\t\t */}\n\t\t\t\t{!!showCloseButton && (\n\t\t\t\t\t<SheetClose\n\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\trender={(\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\tdata-overlay-close=\"\"\n\t\t\t\t\t\t\t\tclassName={cn(overlayAnatomyRecipes.close, `z-10 text-muted-foreground ${interactionRecipes.rowHover}`)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"size-icon\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SheetContent>\n\t\t</Sheet>\n\t);\n}\n\nexport const ActionDrawer = memo(ActionDrawerImpl);\nActionDrawer.displayName = 'ActionDrawer';\n","\"use client\";\n\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { portalClassName } from '../../lib/portal-recipes';\nimport { modalBackdropRecipe } from './overlay.recipes';\nimport { OverlayLayer, useInsideOverlayLayer, useOpenerFinalFocus } from './overlay-layer';\n\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"@base-ui/react/alert-dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({ container, className, ...props }: AlertDialogPrimitive.Portal.Props) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <AlertDialogPrimitive.Portal container={resolvedContainer} data-slot=\"alert-dialog-portal\" className={portalClassName(className)} {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: AlertDialogPrimitive.Backdrop.Props) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(modalBackdropRecipe, motionRecipes.backdrop,\n \"isolate\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n container,\n size = \"default\",\n children,\n finalFocus: finalFocusProp,\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: \"default\" | \"sm\"\n} & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n const insideOverlay = useInsideOverlayLayer()\n const { capture, finalFocus } = useOpenerFinalFocus(finalFocusProp)\n return (\n <AlertDialogPortal container={resolvedContainer}>\n <AlertDialogOverlay forceRender={!insideOverlay} />\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n motionRecipes.dialog,\n \"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-space-xl rounded-surface bg-popover p-surface text-popover-foreground shadow-xl outline-none data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md\",\n className\n )}\n {...props}\n finalFocus={finalFocus}\n >\n {capture}\n <OverlayLayer>{children}</OverlayLayer>\n </AlertDialogPrimitive.Popup>\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-space-2xl sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-space-md inline-flex size-16 items-center justify-center rounded-full bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof Button>) {\n return (\n <Button\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: AlertDialogPrimitive.Close.Props &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n render={<Button variant={variant} size={size} />}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import { modalRegionRecipes, surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport type { TextGap } from '../structure';\n/**\n * AlertDialog — internal confirmation anatomy behind `ConfirmDialog`.\n *\n * Not published from any entrypoint: applications use `ConfirmDialog` from\n * `themelia-react-ui/features/overlays`, which owns the decision lifecycle.\n * The surface shares the modal shell, region, rule and typography geometry of\n * the internal Dialog wrapper: a pinned heading region, an optional scrolling\n * body and pinned answers, with one rule between adjacent visible regions.\n */\nimport * as React from 'react';\n\nimport {\n\tAlertDialog as AlertDialogPrimitive,\n\tAlertDialogAction as AlertDialogActionPrimitive,\n\tAlertDialogCancel as AlertDialogCancelPrimitive,\n\tAlertDialogContent as AlertDialogContentPrimitive,\n\tAlertDialogDescription as AlertDialogDescriptionPrimitive,\n\tAlertDialogFooter as AlertDialogFooterPrimitive,\n\tAlertDialogMedia as AlertDialogMediaPrimitive,\n\tAlertDialogOverlay,\n\tAlertDialogPortal,\n\tAlertDialogTitle as AlertDialogTitlePrimitive,\n\tAlertDialogTrigger as AlertDialogTriggerPrimitive,\n} from '../../ui/alert-dialog';\nimport { Text } from '../../typography';\nimport { textLineHeights, textSizes, textWeights } from '../../typography/text.styles';\nimport { cn } from '../../../lib/utils';\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/** Same title role as Dialog, set on the element so its line box matches the Text inside. */\nconst titleTypography = cn('font-sans', textSizes.base, textWeights.semibold, textLineHeights.snug);\n\nexport const AlertDialog = AlertDialogPrimitive;\n\nexport const AlertDialogTrigger = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogTriggerPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogTriggerPrimitive>\n>(function AlertDialogTrigger({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogTriggerPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-trigger--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogTrigger.displayName = 'AlertDialogTrigger';\n\nexport const AlertDialogContent = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogContentPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogContentPrimitive>\n>(function AlertDialogContent({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogContentPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t// Same flush shell as Dialog: regions own their insets and the rules between them.\n\t\t\t\t'alert-dialog-content--component flex max-h-[min(90vh,48rem)] flex-col gap-0 overflow-hidden rounded-surface bg-popover p-0 text-popover-foreground sm:max-w-md', surfaceDividerRecipes.modal.shell,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogContent.displayName = 'AlertDialogContent';\n\nexport const AlertDialogHeader = React.forwardRef<\n\tHTMLDivElement,\n\tReact.HTMLAttributes<HTMLDivElement> & { textGap?: TextGap; align?: 'start' | 'center' }\n>(function AlertDialogHeader({ className, textGap = 'normal', align = 'start', ...props }, ref) {\n\t// Owned here rather than by the raw header, whose responsive variants force\n\t// start alignment from `sm`; a confirmation chooses its own alignment.\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-slot=\"alert-dialog-header\"\n\t\t\tdata-modal-region=\"\"\n\t\t\tdata-align={align}\n\t\t\tclassName={cn(\n\t\t\t\t'alert-dialog-header--component flex flex-col',\n\t\t\t\tmodalRegionRecipes.header,\n\t\t\t\talign === 'center' ? 'items-center text-center' : 'items-start text-start',\n\t\t\t\ttextGap === 'dense' ? 'gap-dense' : 'gap-normal',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogHeader.displayName = 'AlertDialogHeader';\n\n/** Scroll-owning region between the pinned heading and the pinned answers. */\nexport const AlertDialogBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n\tfunction AlertDialogBody({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-dialog-body\"\n\t\t\t\tdata-modal-region=\"\"\n\t\t\t\tclassName={cn('alert-dialog-body--component', modalRegionRecipes.body, className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nAlertDialogBody.displayName = 'AlertDialogBody';\n\nexport const AlertDialogFooter = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogFooterPrimitive>\n>(function AlertDialogFooter({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogFooterPrimitive\n\t\t\tref={ref}\n\t\t\tdata-modal-region=\"\"\n\t\t\tclassName={cn(\n\t\t\t\t'alert-dialog-footer--component', modalRegionRecipes.footer,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogFooter.displayName = 'AlertDialogFooter';\n\nexport const AlertDialogTitle = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogTitlePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogTitlePrimitive>\n>(function AlertDialogTitle({ children, className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogTitlePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-title--component m-0', titleTypography, className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" type=\"inherit\" size=\"base\" weight=\"semibold\" lineHeight=\"snug\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</AlertDialogTitlePrimitive>\n\t);\n});\n\nAlertDialogTitle.displayName = 'AlertDialogTitle';\n\nexport const AlertDialogDescription = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogDescriptionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogDescriptionPrimitive>\n>(function AlertDialogDescription({ children, className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogDescriptionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-description--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"relaxed\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</AlertDialogDescriptionPrimitive>\n\t);\n});\n\nAlertDialogDescription.displayName = 'AlertDialogDescription';\n\nexport const AlertDialogMedia = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogMediaPrimitive>\n>(function AlertDialogMedia({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogMediaPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-media--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogMedia.displayName = 'AlertDialogMedia';\n\nexport const AlertDialogAction = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogActionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogActionPrimitive>\n>(function AlertDialogAction({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogActionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-action--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogAction.displayName = 'AlertDialogAction';\n\nexport const AlertDialogCancel = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogCancelPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogCancelPrimitive>\n>(function AlertDialogCancel({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogCancelPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-cancel--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogCancel.displayName = 'AlertDialogCancel';\n\nexport { AlertDialogOverlay, AlertDialogPortal };\n","import { isValidElement, memo, useMemo } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tAlertDialog as BaseAlertDialog,\n\tAlertDialogBody,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n} from '../../base/display/alert-dialog';\nimport { Stack } from '../../base/structure';\nimport { compositionRhythm } from '../../base/structure/composition.recipes';\nimport { useStrings } from '../../../lib/strings';\nimport { useOverlayConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport { overlayToneGlyphs } from './overlay-tone-icon';\nimport { defaultAlertDialogStrings } from './overlays.strings';\nimport type { ConfirmDialogProps } from './overlays.types';\n\nfunction ConfirmDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tsurfaceStyle,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone,\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\ttone = 'neutral',\n\tshowIcon = false,\n\talertMessage,\n\ttrigger,\n\tdestructive = false,\n\talign,\n}: ConfirmDialogProps) {\n\tconst { defaultConfirmAlign } = useOverlayConfig();\n\tconst resolvedAlign = align ?? defaultConfirmAlign ?? 'center';\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst mergedStrings = useStrings(defaultAlertDialogStrings, customStrings);\n\tconst resolvedConfirmTone = useMemo(() => {\n\t\tif (destructive) return 'destructive' as const;\n\t\tif (confirmTone) return confirmTone;\n\t\tconst toneMap = {\n\t\t\tneutral: 'primary',\n\t\t\tdestructive: 'destructive',\n\t\t\twarning: 'warning',\n\t\t\tinfo: 'primary',\n\t\t\tsuccess: 'success',\n\t\t} as const;\n\t\treturn toneMap[tone];\n\t}, [destructive, confirmTone, tone]);\n\n\tconst { strings, confirmButtonOnClick, effectiveLoading, handleCancel } =\n\t\tuseOverlayActions({\n\t\t\tcloseDialog: visibility.hide,\n\t\t\tonConfirm,\n\t\t\tonAsyncConfirm,\n\t\t\tonError,\n\t\t\tcloseOnAsyncComplete,\n\t\t\tconfirmTone: resolvedConfirmTone,\n\t\t\tloading,\n\t\t\tformId,\n\t\t\tonCancel,\n\t\t\tcustomStrings: mergedStrings,\n\t\t});\n\n\t/*\n\t * `destructive` is documented as the destructive *presentation*, but it only\n\t * ever reached the confirm button — the icon and the inline alert still came\n\t * from `tone`, which defaults to neutral. The result was a red confirm button\n\t * beside a grey question mark: two signals disagreeing about how serious the\n\t * action is. An explicit `tone` still wins, so this only fills the gap.\n\t */\n\tconst resolvedTone = destructive && tone === 'neutral' ? ('destructive' as const) : tone;\n\tconst toneGlyph = overlayToneGlyphs[resolvedTone];\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading);\n\tconst hasHeading = Boolean(title || description || (showIcon && !visuallyHideHeader));\n\tconst hasContent = Boolean(children || alertMessage);\n\n\treturn (\n\t\t<BaseAlertDialog\n\t\t\topen={visibility.open}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<AlertDialogTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<AlertDialogTrigger render={<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" />} className=\"overlay-trigger--fallback\">\n\t\t\t\t\t{trigger}\n\t\t\t\t</AlertDialogTrigger>\n\t\t\t))}\n\n\t\t\t<AlertDialogContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tstyle={surfaceStyle}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.alertDialogLabel}\n\t\t\t\tclassName={cn('confirm-dialog--component alert-dialog--component', className)}\n\t\t\t>\n\t\t\t\t{!!hasHeading && (\n\t\t\t\t\t<AlertDialogHeader\n\t\t\t\t\t\talign={resolvedAlign}\n\t\t\t\t\t\tclassName={cn('alert-dialog--header', visuallyHideHeader && 'sr-only')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!showIcon && !visuallyHideHeader && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'mb-space-sm flex size-avatar-lg shrink-0 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\t\ttoneGlyph.surface,\n\t\t\t\t\t\t\t\t\ttoneGlyph.color,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<toneGlyph.Glyph className=\"size-icon-lg\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!title && <AlertDialogTitle>{title}</AlertDialogTitle>}\n\t\t\t\t\t\t{!!description && <AlertDialogDescription>{description}</AlertDialogDescription>}\n\t\t\t\t\t</AlertDialogHeader>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasContent && (\n\t\t\t\t\t<AlertDialogBody className={cn('alert-dialog--body', contentClassName)}>\n\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t<Alert tone={resolvedTone} className={cn(!!children && 'mb-space-md')}>\n\t\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</AlertDialogBody>\n\t\t\t\t)}\n\n\t\t\t\t{!!(showCancel || showConfirm || footer) && (\n\t\t\t\t\t<AlertDialogFooter className=\"alert-dialog--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap={compositionRhythm.commands}\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify={resolvedAlign === 'center' ? 'center' : 'end'}\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\ttone={resolvedConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AlertDialogFooter>\n\t\t\t\t)}\n\t\t\t</AlertDialogContent>\n\t\t</BaseAlertDialog>\n\t);\n}\n\nexport const ConfirmDialog = memo(ConfirmDialogImpl);\nConfirmDialog.displayName = 'ConfirmDialog';\n"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-B6kKb8jB.js";
4
- import { a as n, n as r } from "./buttons-BedGfygC.js";
5
- import { c as i, s as a } from "./typography-BQnine1k.js";
3
+ import { t } from "./utils-DhuoqFy4.js";
4
+ import { a as n, n as r } from "./buttons-DeW0bQeK.js";
5
+ import { c as i, s as a } from "./typography-C7-YMW1S.js";
6
6
  import { n as o, t as s } from "./text.styles-B64My8RZ.js";
7
- import { t as c } from "./structure-DuxKl954.js";
8
- import { a as l, c as u, n as d, o as f, r as p, t as m } from "./feedback-Dm4izqFn.js";
7
+ import { t as c } from "./structure-DZJ2wbAU.js";
8
+ import { i as l, l as u, n as d, o as f, s as p, t as m } from "./feedback-Dzo1xtAU.js";
9
9
  import { n as h, t as g } from "./composition.recipes-COdiFhxB.js";
10
- import { n as _, t as v } from "./action-menu-Dr8K-ghE.js";
11
- import { t as y } from "./badge-xIiV_E7f.js";
12
- import { n as b, t as x } from "./page-header-commands-7P3sfE9u.js";
13
- import { t as S } from "./overflow-tab-bar-IVFVQFV6.js";
14
- import { f as C } from "./hooks-DB6CJ4MR.js";
15
- import { i as w, t as T } from "./containers-CIxwbZt5.js";
10
+ import { n as _, t as v } from "./action-menu-C0gjzLyE.js";
11
+ import { t as y } from "./badge-wWauMgAt.js";
12
+ import { n as b, t as x } from "./page-header-commands-DIKspJfx.js";
13
+ import { t as S } from "./overflow-tab-bar-BQCA2Zn2.js";
14
+ import { f as C } from "./hooks-BitHSh-Y.js";
15
+ import { i as w, t as T } from "./containers-CSdc32h9.js";
16
16
  import { forwardRef as E, useEffect as D, useMemo as O, useState as k } from "react";
17
17
  import { Fragment as A, jsx as j, jsxs as M } from "react/jsx-runtime";
18
18
  import { ArrowLeft as N } from "lucide-react";
@@ -208,7 +208,7 @@ var ee = {
208
208
  description: re,
209
209
  onRetry: A,
210
210
  retryLabel: H.retryLabel
211
- }) : N ? a?.empty ?? F ?? /* @__PURE__ */ j(p, { children: /* @__PURE__ */ M(f, { children: [/* @__PURE__ */ j(u, { children: H.emptyTitle }), /* @__PURE__ */ j(l, { children: H.emptyDescription })] }) }) : r, $ = Q == null ? null : /* @__PURE__ */ j("div", {
211
+ }) : N ? a?.empty ?? F ?? /* @__PURE__ */ j(l, { children: /* @__PURE__ */ M(p, { children: [/* @__PURE__ */ j(u, { children: H.emptyTitle }), /* @__PURE__ */ j(f, { children: H.emptyDescription })] }) }) : r, $ = Q == null ? null : /* @__PURE__ */ j("div", {
212
212
  ...te,
213
213
  "data-slot": "page-body",
214
214
  className: t("page--body relative flex min-w-0 w-full flex-col", g.subjects, U),
@@ -328,4 +328,4 @@ function H({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: a
328
328
  //#endregion
329
329
  export { P as a, I as i, R as n, L as r, H as t };
330
330
 
331
- //# sourceMappingURL=page-DUUKDAjo.js.map
331
+ //# sourceMappingURL=page-BoQ1VaFJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-DUUKDAjo.js","names":["_Fragment","buttonVariants","Button","Text","Heading","headingRoleSizes","copyRoleProps","Stack","EmptyDescription","EmptyTitle","LoadingState","EmptyHeader","Empty","ErrorState","compositionRhythm","compositionClasses","ActionMenu","ActionButtons","Badge","hasPageHeaderCommands","PageHeaderCommands","OverflowTabBar","useLayoutLinkRenderer","Container","TwoColumnLayout","Fragment$1","defaultPageStrings","resolveSlot","slot","context","PageHeader","TitleIcon","resolvedRenderLink","defaultBack","backHref","onBack","backLabel","cn","ArrowLeft","titleIconNode","icon","iconClassName","titleIconClassName","titleIconHref","onTitleIconClick","titleIconLabel","backControl","slots","titleStart","hasPrefix","hasCommands","primaryAction","secondaryActions","defaultActions","actions","actionsRegion","hasActions","beforeTitle","afterDescription","defaultSuffix","titleBadges","item","index","titleSuffix","simpleDescription","description","simpleTitle","title","className","contentClassName","textGap","headingTag","titleClassName","descriptionClassName","actionsClassName","tabs","blockPadding","Page","forwardRef","stringsProp","containerProps","strings","useStrings","bodyClassName","bodyProps","slotProps","toolbarClassName","toolbarProps","footerClassName","footerProps","resolvedAside","aside","hasAside","toolbarNode","toolbar","afterHeader","headerNode","header","renderLink","errorDescription","error","customError","body","loading","empty","emptySlot","children","bodyNode","maxWidth","narrow","padding","beforeHeader","asideRatio","defaultPageActionsStrings","PAGE_ACTIONS_MENU_CLASS","DEFAULT_MAX_INLINE_ACTIONS","toActionMenuAction","contextBase","disabled","action","renderAction","PageActions","filtered","useMemo","isNarrow","setIsNarrow","useState","useEffect","display","check","breakpoint","inlineContextBase","renderActionLink","props","inlineClass","inlineClassName","menuContentClass","menuClassName","dropdownActions","entry","inlineLimit","maxInlineActions","inlineCandidates","inline","menu","inlineActions","menuActions"],"sources":["../src/components/layout/page/page.strings.ts","../src/components/layout/page/partials/page-header.tsx","../src/components/layout/page/page.tsx","../src/components/layout/page/page.types.ts","../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/** Copy for Page's primary-body lifecycle states. */\nexport interface PageStrings {\n\tloadingLabel: string;\n\tloadingDescription: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretryLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultPageStrings: PageStrings = {\n\tloadingLabel: 'Loading content',\n\tloadingDescription: 'Preparing the latest data for this view.',\n\terrorTitle: 'Content unavailable',\n\terrorDescription: 'The content could not be loaded.',\n\tretryLabel: 'Try again',\n\temptyTitle: 'No content found',\n\temptyDescription: 'There is no content available for this view.',\n};\n","/** Route header anatomy with four content slots and shared responsive commands. */\nimport { ArrowLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { OverflowTabBar } from '../../../base/navigation/overflow-tab-bar';\nimport { hasPageHeaderCommands, PageHeaderCommands } from '../../../base/navigation/page-header/page-header-commands';\nimport { buttonVariants } from '../../../base/buttons/button.variants';\nimport { Heading, Text } from '../../../typography';\nimport { copyRoleProps, headingRoleSizes } from '../../../typography/text.styles';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeaderRenderContext, PageHeaderRenderSlot } from '../page.types';\n\nfunction resolveSlot(slot: PageHeaderRenderSlot, context: PageHeaderRenderContext): ReactNode {\n return typeof slot === 'function' ? slot(context) : slot ?? context.defaultContent;\n}\n\nexport function PageHeader({\n title, description, textGap = 'dense', headingTag = 'h1',\n titleIcon: TitleIcon, titleIconHref, onTitleIconClick, titleIconLabel = 'Open title link',\n backHref, onBack, backLabel = 'Back', titleBadges = [],\n primaryAction, secondaryActions, maxVisibleSecondaryActions, moreActionsLabel = 'More actions', tabs, actions, slots,\n renderLink, className, contentClassName, actionsClassName, titleClassName,\n titleIconClassName, descriptionClassName,\n}: PageHeaderProps) {\n const resolvedRenderLink = useLayoutLinkRenderer({renderLink});\n const hasBack = !!backHref || !!onBack;\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-space-sm shrink-0\">\n\t\t\t{backHref && !onBack ? (\n\t\t\t\tresolvedRenderLink({\n\t\t\t\t\thref: backHref,\n\t\t\t\t\t'aria-label': backLabel,\n\t\t\t\t\tclassName: cn('page-header--back-link', buttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true})),\n\t\t\t\t\tchildren: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t) : (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName=\"page-header--back-button\"\n\t\t\t\t\tonClick={onBack}\n\t\t\t\t\taria-label={backLabel}\n\t\t\t\t>\n\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : null;\n\tconst titleIconNode = (() => {\n\t\tif (!TitleIcon) return null;\n\n\t\tconst icon = <TitleIcon className=\"size-icon\" aria-hidden=\"true\" />;\n\t\tconst iconClassName = cn(\n\t\t\t'page-header--title-icon flex size-icon shrink-0 items-center justify-center text-muted-foreground',\n\t\t\ttitleIconClassName,\n\t\t);\n\n\t\tif (titleIconHref && !onTitleIconClick) {\n\t\t\treturn resolvedRenderLink({\n\t\t\t\thref: titleIconHref,\n\t\t\t\t'aria-label': titleIconLabel,\n\t\t\t\tclassName: cn(\n\t\t\t\t\t'page-header--title-icon-link',\n\t\t\t\t\tbuttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true}),\n\t\t\t\t\ttitleIconClassName,\n\t\t\t\t),\n\t\t\t\tchildren: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t});\n\t\t}\n\n\t\tif (onTitleIconClick) {\n\t\t\treturn (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName={cn('page-header--title-icon-button', titleIconClassName)}\n\t\t\t\t\tonClick={onTitleIconClick}\n\t\t\t\t\taria-label={titleIconLabel}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span aria-hidden=\"true\" className={iconClassName}>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t);\n\t})();\n\n const backControl = slots?.back ?? defaultBack;\n const titleStart = backControl || titleIconNode ? (\n <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" wrap={false}>{backControl}{titleIconNode}</Stack>\n ) : null;\n const hasPrefix = titleStart != null;\n const hasCommands = hasPageHeaderCommands(primaryAction, secondaryActions);\n const defaultActions = hasCommands ? <>{actions}<PageHeaderCommands primaryAction={primaryAction} secondaryActions={secondaryActions} maxVisibleSecondaryActions={maxVisibleSecondaryActions} moreActionsLabel={moreActionsLabel} renderLink={resolvedRenderLink} /></> : actions;\n const actionsRegion = resolveSlot(slots?.actions, {renderLink:resolvedRenderLink, defaultContent:defaultActions});\n const hasActions = actionsRegion != null && actionsRegion !== false;\n const beforeTitle = resolveSlot(slots?.beforeTitle, {renderLink:resolvedRenderLink, defaultContent:null});\n const afterDescription = resolveSlot(slots?.afterDescription, {renderLink:resolvedRenderLink, defaultContent:null});\n const defaultSuffix = titleBadges.length ? <Stack direction=\"horizontal\" gap=\"sm\" wrap className=\"page-header--badges min-w-0 max-w-full\">\n {titleBadges.map((item,index)=><Badge key={item.key ?? index} tone={item.tone ?? 'secondary'}>{item.label}</Badge>)}\n </Stack> : null;\n const titleSuffix = resolveSlot(slots?.titleSuffix, {renderLink:resolvedRenderLink, defaultContent:defaultSuffix});\n const simpleDescription = typeof description === 'string' || typeof description === 'number' || typeof description === 'bigint';\n const simpleTitle = typeof title === 'string' || typeof title === 'number' || typeof title === 'bigint';\n\n return <header className={cn('layout-page-header--component page-heading--component page-header--component @container/page-header w-full min-w-0', className)}>\n <Stack gap=\"xl\">\n <Stack gap=\"sm\" className={cn('page-header--content-row min-w-0', contentClassName)}>\n {beforeTitle}\n {/* The actions sit beside the copy only while the copy keeps a readable measure\n (12rem beside the compact menu, 24rem once inline commands show at 40rem of\n header width);\n otherwise they wrap below it, so commands never cramp the title. */}\n <div className=\"page-header--headline-row flex min-w-0 flex-wrap items-start gap-x-space-xl gap-y-space-lg\">\n <div className={cn('page-header--copy-column page-header--title-row grid min-w-0 flex-1 basis-48 items-start gap-x-space-md @min-[40rem]/page-header:basis-96', hasPrefix ? 'grid-cols-[auto_minmax(0,1fr)]' : 'grid-cols-1', textGap === 'normal' ? 'gap-y-normal' : 'gap-y-dense')}>\n {hasPrefix && <span className=\"page-header--title-prefix inline-flex shrink-0 items-center self-start\">{titleStart}</span>}\n <Stack gap={textGap} className=\"page-header--copy-content min-w-0\">\n <Stack direction=\"horizontal\" gap=\"md\" align=\"center\" wrap className=\"page-header--title-line min-w-0\">\n {simpleTitle ? <Heading tag={headingTag} size={headingRoleSizes.route} className={cn('page-header--title min-w-0 [overflow-wrap:anywhere] border-0 pb-0',titleClassName)}>{title}</Heading> : title}\n {titleSuffix}\n </Stack>\n {((description != null && description !== false) || (afterDescription != null && afterDescription !== false)) && <Stack gap=\"dense\" className=\"page-header--title-block min-w-0\">\n {simpleDescription ? <Text {...copyRoleProps.structuralDescription} className={cn('page-header--description max-w-2xl [overflow-wrap:anywhere]',descriptionClassName)}>{description}</Text> : description}\n {afterDescription}\n </Stack>}\n </Stack>\n </div>\n {hasActions && <Stack direction=\"horizontal\" gap=\"md\" className={cn('page-header--actions max-w-full shrink-0 self-start', hasCommands && slots?.actions == null && 'justify-end', actionsClassName)}>{actionsRegion}</Stack>}\n </div>\n </Stack>\n {tabs && tabs.items.length > 0 && <OverflowTabBar items={tabs.items} value={tabs.value} onValueChange={tabs.onValueChange} className=\"page-header--tabs\" strings={{navigationLabel:tabs.label ?? 'Sections',more:tabs.moreLabel ?? 'More'}} />}\n </Stack>\n </header>;\n}\n","import { forwardRef } from 'react';\n\nimport { ErrorState, LoadingState, Empty, EmptyHeader, EmptyTitle, EmptyDescription } from '../../base/feedback';\nimport { Stack } from '../../base/structure';\nimport { compositionClasses, compositionRhythm } from '../../base/structure/composition.recipes';\nimport { Container, TwoColumnLayout } from '../containers';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport type { PageProps } from './page.types';\nimport { defaultPageStrings } from './page.strings';\nimport { PageHeader } from './partials/page-header';\n\nconst blockPadding = {none: 'py-0', sm: 'py-surface-xs', md: 'py-surface', lg: 'py-surface-lg'} as const;\n\n/** Route containment, header, lifecycle states and optional secondary context, without owning scrolling. */\nexport const Page = forwardRef<HTMLDivElement, PageProps>(function Page({\n header, children, slotProps, slots, renderLink, maxWidth, narrow = false,\n gutter = 'lg', padding = 'lg', aside, asideRatio = '7/5', stickyAside,\n toolbar, beforeHeader, afterHeader, loading = false, error, onRetry,\n empty = false, emptySlot, strings: stringsProp, className, render,\n ...containerProps\n}, ref) {\n const strings = useStrings(defaultPageStrings, stringsProp);\n const {className: bodyClassName, ...bodyProps} = slotProps?.body ?? {};\n const {className: toolbarClassName, ...toolbarProps} = slotProps?.toolbar ?? {};\n const {className: footerClassName, ...footerProps} = slotProps?.footer ?? {};\n const resolvedAside = slots?.aside ?? aside;\n const hasAside = resolvedAside !== undefined && resolvedAside !== null && resolvedAside !== false;\n const toolbarNode = slots?.toolbar ?? toolbar ?? afterHeader;\n const headerNode = slots?.header ?? (header ? <PageHeader {...header} renderLink={header.renderLink ?? renderLink} /> : null);\n const errorDescription = error instanceof Error ? error.message\n : typeof error === 'string' || typeof error === 'number' ? String(error) : strings.errorDescription;\n const customError = error && typeof error !== 'boolean' && typeof error !== 'string' && typeof error !== 'number' && !(error instanceof Error) ? error : undefined;\n const body = loading ? slots?.loading ?? <LoadingState variant=\"panel\" label={strings.loadingLabel} description={strings.loadingDescription} skeleton lines={4} />\n : error ? slots?.error ?? customError ?? <ErrorState variant=\"panel\" title={strings.errorTitle} description={errorDescription} onRetry={onRetry} retryLabel={strings.retryLabel} />\n : empty ? slots?.empty ?? emptySlot ?? <Empty><EmptyHeader><EmptyTitle>{strings.emptyTitle}</EmptyTitle><EmptyDescription>{strings.emptyDescription}</EmptyDescription></EmptyHeader></Empty>\n : children;\n const bodyNode = body !== undefined && body !== null ? (\n <div {...bodyProps} data-slot=\"page-body\" className={cn('page--body relative flex min-w-0 w-full flex-col', compositionClasses.subjects, bodyClassName)}>\n {body}\n </div>\n ) : null;\n\n return (\n <Container {...containerProps} ref={ref} render={render} maxWidth={maxWidth ?? (narrow ? 'md' : hasAside ? 'xl' : 'lg')}\n gutter={gutter} className={cn('font-sans', blockPadding[padding], className)}>\n <Stack gap={compositionRhythm.page} className=\"page--component\">\n {beforeHeader}\n {headerNode}\n {toolbarNode != null && toolbarNode !== false && <div {...toolbarProps} data-slot=\"page-toolbar\" className={cn('page--toolbar min-w-0', toolbarClassName)}>{toolbarNode}</div>}\n {hasAside ? <TwoColumnLayout adaptTo=\"container\" ratio={asideRatio} stickyAside={stickyAside} main={bodyNode} aside={resolvedAside} slotProps={{aside: slotProps?.aside}} /> : bodyNode}\n {slots?.footer != null && slots.footer !== false && <div {...footerProps} data-slot=\"page-footer\" className={cn('page--footer min-w-0', footerClassName)}>{slots.footer}</div>}\n </Stack>\n </Container>\n );\n});\nPage.displayName = 'Page';\n","/**\n * Page-level types for `Page`, `PageHeader`, `PageActions`, and exported\n * partials. All navigation is framework-neutral via `renderLink`.\n */\nimport type { ComponentType, JSX, Key, ReactNode } from 'react';\n\nimport type {\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n\tLayoutSlotAttributes,\n} from '../layout.types';\nimport type { TextGap } from '../../base/structure';\nimport type { ButtonSize } from '../../base/buttons';\nimport type { HeadingTag } from '../../typography';\nimport type { ContainerGutter, ContainerMaxWidth, ContainerProps } from '../containers/containers.types';\nimport type { StringsProp } from '../../../lib/strings';\nimport type { BadgeTone } from '../../base/badge';\nimport type { ActionPresentation } from '../../../lib/action-presentation';\nimport type { PageHeaderAction } from '../../base/navigation/page-header';\nimport type { OverflowTabItem } from '../../base/navigation';\nimport type { TwoColumnLayoutProps } from '../containers';\nimport type { PageStrings } from './page.strings';\n\nexport interface PageTitleBadge {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Semantic color intent. */\n\ttone?: BadgeTone;\n\tkey?: Key;\n}\n\nexport type { PageHeaderAction } from '../../base/navigation/page-header';\n\n/** Section tabs under a record's header. */\nexport interface PageHeaderTabs {\n\t/** Sections in order. `badge` shows a count chip beside the label. */\n\titems: OverflowTabItem[];\n\t/** Id of the active section. */\n\tvalue?: string;\n\t/**\n\t * Fired with the id of the chosen section. Switch the content or route here;\n\t * an item `href` renders a native link.\n\t */\n\tonValueChange?: (id: string) => void;\n\t/** Accessible name of the tab list. Default: `'Sections'`. */\n\tlabel?: string;\n\t/** Label of the trigger that holds tabs which do not fit. Default: `'More'`. */\n\tmoreLabel?: string;\n}\n\nexport interface PageHeaderRenderContext {\n\t/** The framework-neutral link renderer used by this header. */\n\trenderLink: LayoutLinkRenderer;\n\t/** Existing content for this position; actions includes the responsive command row. */\n\tdefaultContent: ReactNode;\n}\n\n/** A content node, or a render callback that can keep or replace its default content. */\nexport type PageHeaderRenderSlot = ReactNode | ((context: PageHeaderRenderContext) => ReactNode);\n\nexport interface PageHeaderSlots {\n\t/** @deprecated Use backHref/onBack for navigation. Retained as a custom back-control escape hatch. */\n\tback?: ReactNode;\n\t/** Context above the title, such as breadcrumbs. */\n\tbeforeTitle?: PageHeaderRenderSlot;\n\t/** Content beside the title, such as a status or count. */\n\ttitleSuffix?: PageHeaderRenderSlot;\n\t/** Context below the description. Compose metadata or other content here. */\n\tafterDescription?: PageHeaderRenderSlot;\n\t/** Keep, wrap or replace defaultContent's responsive command row. */\n\tactions?: PageHeaderRenderSlot;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription?: ReactNode;\n\t/** Shared title/description rhythm. Defaults to dense for page copy. */\n\ttextGap?: TextGap;\n\t/** Semantic heading level for the title. Defaults to `h1`, the route's main heading; use `h2` when the page sits inside another titled page. */\n\theadingTag?: HeadingTag;\n\t/** @deprecated Compose custom title content with slots.titleSuffix or a React-node title. */\n\ttitleIcon?: ComponentType<{ className?: string }>;\n\t/** @deprecated Compose a linked item in a render slot using its renderLink context. */\n\ttitleIconHref?: string;\n\t/** @deprecated Compose a command in slots.actions or describe it with primaryAction/secondaryActions. */\n\tonTitleIconClick?: () => void;\n\t/** @deprecated Accessible name for the compatibility title-icon control. */\n\ttitleIconLabel?: string;\n\t/** Destination for the back control. */\n\tbackHref?: string;\n\tonBack?: () => void;\n\t/** Copy for the back control. */\n\tbackLabel?: string;\n\t/** @deprecated Render title content with slots.titleSuffix. Retained for existing badge definitions. */\n\ttitleBadges?: PageTitleBadge[];\n\t/**\n\t * The page's one main command: a solid primary button after the secondary\n\t * commands. Compact headers place it first in the More actions menu.\n\t */\n\tprimaryAction?: PageHeaderAction;\n\t/**\n\t * Supporting commands in priority order. The first two render as outline\n\t * buttons before the primary command; the rest, and every destructive\n\t * command, move into the More actions menu, which always closes the row.\n\t * Below 40rem of header width, all commands collapse into that menu.\n\t */\n\tsecondaryActions?: readonly PageHeaderAction[];\n\t/**\n\t * How many routine secondary commands render as outline buttons on wide\n\t * headers; later ones join the More actions menu. Use `1` or `0` when long\n\t * labels beside the primary command would crowd the header; `Infinity`\n\t * keeps every routine command inline. @default 2\n\t */\n\tmaxVisibleSecondaryActions?: number;\n\t/** Accessible name of the More actions menu trigger. */\n\tmoreActionsLabel?: string;\n\t/**\n\t * Section tabs under the header, for a record split into sections such as\n\t * documents and history. Tabs that do not fit move into a More menu, and\n\t * the active tab stays visible.\n\t */\n\ttabs?: PageHeaderTabs;\n\t/**\n\t * @deprecated Customize commands with slots.actions; put other controls in Page toolbar.\n\t */\n\tactions?: ReactNode;\n\t/** Replaces individual regions of the shell. */\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\ttitleIconClassName?: string;\n\tdescriptionClassName?: string;\n}\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\n/** @deprecated Use PageHeaderAction with `primaryAction` and `secondaryActions`. */\nexport interface PageAction extends ActionPresentation {\n\tid?: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\t/** Shows the pending indicator. */\n\tloading?: boolean;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/** Optional inline button size. Defaults to the PageActions `size` prop. */\n\tsize?: ButtonSize;\n\tgroup?: string;\n\tplacement?: 'auto' | 'inline' | 'menu';\n\t/** Escape hatch for one action only. Prefer `renderAction` for consistent customization. */\n\telement?: ReactNode | JSX.Element;\n}\n\nexport type PageActionsDisplay = 'flat' | 'dropdown' | 'auto';\n\nexport interface PageActionsStrings {\n\tmenuLabel: string;\n}\n\nexport const defaultPageActionsStrings: PageActionsStrings = {\n\tmenuLabel: 'More actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\t/** Controls offered on the surface. */\n\tactions?: PageAction[];\n\t/** How actions are presented — inline, menu, or responsive. */\n\tdisplay?: PageActionsDisplay;\n\t/**\n\t * Inline action button scale, which the More actions square beside them\n\t * matches. Defaults to `sm`; set `md` for normal page-header buttons. A\n\t * menu-only ribbon follows the provider scale.\n\t */\n\tsize?: ButtonSize;\n\t/** Width at which responsive actions collapse into a menu. */\n\tbreakpoint?: number;\n\t/**\n\t * Maximum non-menu actions rendered inline before overflow moves them into\n\t * the dropdown menu. Defaults to 4 for admin header density.\n\t */\n\tmaxInlineActions?: number;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\t/** Merged onto the inline action row. */\n\tinlineClassName?: string;\n\t/** Merged onto the action menu. */\n\tmenuClassName?: string;\n\t/** Replaces the default action rendering. */\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n}\n\nexport interface PageSlotProps {\n\t/** Native attributes merged onto the page body region. */\n\tbody?: LayoutSlotAttributes<HTMLDivElement>;\n\taside?: LayoutSlotAttributes<HTMLElement>;\n\ttoolbar?: LayoutSlotAttributes<HTMLDivElement>;\n\tfooter?: LayoutSlotAttributes<HTMLDivElement>;\n}\n\nexport interface PageSlots {\n\t/** Replaces the generated PageHeader. */\n\theader?: ReactNode;\n\ttoolbar?: ReactNode;\n\taside?: ReactNode;\n\tfooter?: ReactNode;\n\tloading?: ReactNode;\n\terror?: ReactNode;\n\tempty?: ReactNode;\n}\n\nexport interface PageProps\n\textends LayoutNavigationAdapter, Omit<ContainerProps, 'children'> {\n\t/** Header region of the shell. */\n\theader?: PageHeaderProps;\n\t/** Explicit width wins; otherwise narrow uses md, aside uses xl, and a single column uses lg. */\n\tmaxWidth?: ContainerMaxWidth;\n\t/** Center one resource or form at the existing `md` content measure. */\n\tnarrow?: boolean;\n\t/** Inline page gutters. Defaults to `lg`; none requires an existing padded parent. */\n\tgutter?: ContainerGutter;\n\t/** Block padding around the whole page. Defaults to `lg`, independent of gutter. */\n\tpadding?: ContainerGutter;\n\t/** Secondary context beside the primary body, adapting to the available container width. */\n\taside?: ReactNode;\n\t/** Main/aside proportions. Defaults to 7/5. */\n\tasideRatio?: TwoColumnLayoutProps['ratio'];\n\tstickyAside?: boolean;\n\t/** Query controls or context between header and body. */\n\ttoolbar?: ReactNode;\n\t/** Content above the header. */\n\tbeforeHeader?: ReactNode;\n\t/** Compatible toolbar fallback when toolbar and slots.toolbar are omitted. */\n\tafterHeader?: ReactNode;\n\t/** Replaces only the primary body; header, toolbar and aside remain mounted. */\n\tloading?: boolean;\n\terror?: ReactNode | Error;\n\tonRetry?: () => void;\n\tempty?: boolean;\n\temptySlot?: ReactNode;\n\t/** Region overrides take precedence over direct props. */\n\tslots?: PageSlots;\n\t/** Copy for the default loading, error and empty states. */\n\tstrings?: StringsProp<PageStrings>;\n\tchildren?: ReactNode;\n\t/** Native attributes for stable page regions. */\n\tslotProps?: PageSlotProps;\n}\n","/**\n * PageActions — composable action ribbon for page headers.\n *\n * Links go through `renderLink`, never router imports or DOM click hacks.\n * Use `renderAction` for app-specific rendering while keeping grouping,\n * filtering, breakpoint, and menu placement logic centralized.\n */\nimport { useEffect, useMemo, useState, type ReactElement } from 'react';\n\nimport {\n\tActionButtons,\n\tActionMenu,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../../../base/action-menu';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultPageActionsStrings,\n\ttype PageAction,\n\ttype PageActionContext,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\t/** The action this surface performs. */\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction toActionMenuAction(\n\t{ action, index }: PageActionEntry,\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\tisInline: boolean,\n\trenderAction?: PageActionsProps['renderAction'],\n): ActionMenuAction {\n\tconst context: PageActionContext = { ...contextBase, index, isInline };\n\tconst disabled = !!action.disabled || !!action.loading;\n\n\treturn {\n\t\tid: action.id ?? String(index),\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tonClick: action.onClick,\n\t\thref: action.href && !action.onClick ? action.href : undefined,\n\t\ttarget: action.target,\n\t\trel: action.rel,\n\t\texternal: action.external,\n\t\tdisabled,\n\t\ttone: action.tone ?? 'secondary',\n\t\tbuttonStyle: action.buttonStyle ?? 'solid',\n\t\tbuttonSize: action.size,\n\t\tgroup: action.group,\n\t\trender: action.element ?? renderAction?.(action, context),\n\t};\n}\n\n/** @deprecated Pass page commands as `primaryAction` and `secondaryActions`; use ActionButtons for a toolbar row. */\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tsize = 'sm',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\n\tconst filtered = useMemo<PageActionEntry[]>(\n\t\t() => (actions ?? [])\n\t\t\t.map((action, index) => ({ action, index }))\n\t\t\t.filter(({ action }) => action.visible !== false),\n\t\t[actions],\n\t);\n\n\tconst [isNarrow, setIsNarrow] = useState(false);\n\tuseEffect(() => {\n\t\tif (display !== 'auto' || typeof window === 'undefined') return;\n\n\t\tconst check = () => setIsNarrow(window.innerWidth <= breakpoint);\n\t\tcheck();\n\t\twindow.addEventListener('resize', check);\n\t\treturn () => window.removeEventListener('resize', check);\n\t}, [display, breakpoint]);\n\n\tif (filtered.length === 0) return null;\n\n\tconst inlineContextBase = { renderLink: resolvedRenderLink };\n\tconst renderActionLink = (props: ActionMenuLinkRenderProps) =>\n\t\tresolvedRenderLink({\n\t\t\t...props,\n\t\t\tchildren: props.children ?? null,\n\t\t}) as ReactElement;\n\tconst inlineClass = cn('flex min-w-0 max-w-full flex-wrap items-center gap-space-sm', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\tconst dropdownActions = filtered.map((entry) =>\n\t\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t\t);\n\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\tactions={dropdownActions}\n\t\t\t\tcontext=\"commands\"\n\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\talign=\"end\"\n\t\t\t\tcloseOnSelect\n\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\tpreserveOrder\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst inlineLimit = Math.max(0, maxInlineActions);\n\tconst inlineCandidates = filtered.filter(({ action }) => (action.placement ?? 'auto') !== 'menu');\n\tconst inline = inlineCandidates.slice(0, inlineLimit);\n\tconst overflow = inlineCandidates.slice(inlineLimit);\n\tconst menu = [\n\t\t...overflow,\n\t\t...filtered.filter(({ action }) => (action.placement ?? 'auto') === 'menu'),\n\t];\n\tconst inlineActions = inline.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, true, renderAction),\n\t);\n\tconst menuActions = menu.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t);\n\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t<ActionButtons\n\t\t\t\tactions={inlineActions}\n\t\t\t\tsize={size}\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={menuActions}\n\t\t\t\t\tcontext=\"commands\"\n\t\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\t\tpreserveOrder\n\t\t\t\t\trenderLink={renderActionLink}\n\t\t\t\t\t// The square matches the inline commands it ends.\n\t\t\t\t\tbuttonProps={{ size }}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"page-BoQ1VaFJ.js","names":["_Fragment","buttonVariants","Button","Text","Heading","headingRoleSizes","copyRoleProps","Stack","Empty","EmptyTitle","LoadingState","EmptyDescription","EmptyHeader","ErrorState","compositionRhythm","compositionClasses","ActionMenu","ActionButtons","Badge","hasPageHeaderCommands","PageHeaderCommands","OverflowTabBar","useLayoutLinkRenderer","Container","TwoColumnLayout","Fragment$1","defaultPageStrings","resolveSlot","slot","context","PageHeader","TitleIcon","resolvedRenderLink","defaultBack","backHref","onBack","backLabel","cn","ArrowLeft","titleIconNode","icon","iconClassName","titleIconClassName","titleIconHref","onTitleIconClick","titleIconLabel","backControl","slots","titleStart","hasPrefix","hasCommands","primaryAction","secondaryActions","defaultActions","actions","actionsRegion","hasActions","beforeTitle","afterDescription","defaultSuffix","titleBadges","item","index","titleSuffix","simpleDescription","description","simpleTitle","title","className","contentClassName","textGap","headingTag","titleClassName","descriptionClassName","actionsClassName","tabs","blockPadding","Page","forwardRef","stringsProp","containerProps","strings","useStrings","bodyClassName","bodyProps","slotProps","toolbarClassName","toolbarProps","footerClassName","footerProps","resolvedAside","aside","hasAside","toolbarNode","toolbar","afterHeader","headerNode","header","renderLink","errorDescription","error","customError","body","loading","empty","emptySlot","children","bodyNode","maxWidth","narrow","padding","beforeHeader","asideRatio","defaultPageActionsStrings","PAGE_ACTIONS_MENU_CLASS","DEFAULT_MAX_INLINE_ACTIONS","toActionMenuAction","contextBase","disabled","action","renderAction","PageActions","filtered","useMemo","isNarrow","setIsNarrow","useState","useEffect","display","check","breakpoint","inlineContextBase","renderActionLink","props","inlineClass","inlineClassName","menuContentClass","menuClassName","dropdownActions","entry","inlineLimit","maxInlineActions","inlineCandidates","inline","menu","inlineActions","menuActions"],"sources":["../src/components/layout/page/page.strings.ts","../src/components/layout/page/partials/page-header.tsx","../src/components/layout/page/page.tsx","../src/components/layout/page/page.types.ts","../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/** Copy for Page's primary-body lifecycle states. */\nexport interface PageStrings {\n\tloadingLabel: string;\n\tloadingDescription: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretryLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultPageStrings: PageStrings = {\n\tloadingLabel: 'Loading content',\n\tloadingDescription: 'Preparing the latest data for this view.',\n\terrorTitle: 'Content unavailable',\n\terrorDescription: 'The content could not be loaded.',\n\tretryLabel: 'Try again',\n\temptyTitle: 'No content found',\n\temptyDescription: 'There is no content available for this view.',\n};\n","/** Route header anatomy with four content slots and shared responsive commands. */\nimport { ArrowLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { OverflowTabBar } from '../../../base/navigation/overflow-tab-bar';\nimport { hasPageHeaderCommands, PageHeaderCommands } from '../../../base/navigation/page-header/page-header-commands';\nimport { buttonVariants } from '../../../base/buttons/button.variants';\nimport { Heading, Text } from '../../../typography';\nimport { copyRoleProps, headingRoleSizes } from '../../../typography/text.styles';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeaderRenderContext, PageHeaderRenderSlot } from '../page.types';\n\nfunction resolveSlot(slot: PageHeaderRenderSlot, context: PageHeaderRenderContext): ReactNode {\n return typeof slot === 'function' ? slot(context) : slot ?? context.defaultContent;\n}\n\nexport function PageHeader({\n title, description, textGap = 'dense', headingTag = 'h1',\n titleIcon: TitleIcon, titleIconHref, onTitleIconClick, titleIconLabel = 'Open title link',\n backHref, onBack, backLabel = 'Back', titleBadges = [],\n primaryAction, secondaryActions, maxVisibleSecondaryActions, moreActionsLabel = 'More actions', tabs, actions, slots,\n renderLink, className, contentClassName, actionsClassName, titleClassName,\n titleIconClassName, descriptionClassName,\n}: PageHeaderProps) {\n const resolvedRenderLink = useLayoutLinkRenderer({renderLink});\n const hasBack = !!backHref || !!onBack;\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-space-sm shrink-0\">\n\t\t\t{backHref && !onBack ? (\n\t\t\t\tresolvedRenderLink({\n\t\t\t\t\thref: backHref,\n\t\t\t\t\t'aria-label': backLabel,\n\t\t\t\t\tclassName: cn('page-header--back-link', buttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true})),\n\t\t\t\t\tchildren: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t) : (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName=\"page-header--back-button\"\n\t\t\t\t\tonClick={onBack}\n\t\t\t\t\taria-label={backLabel}\n\t\t\t\t>\n\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : null;\n\tconst titleIconNode = (() => {\n\t\tif (!TitleIcon) return null;\n\n\t\tconst icon = <TitleIcon className=\"size-icon\" aria-hidden=\"true\" />;\n\t\tconst iconClassName = cn(\n\t\t\t'page-header--title-icon flex size-icon shrink-0 items-center justify-center text-muted-foreground',\n\t\t\ttitleIconClassName,\n\t\t);\n\n\t\tif (titleIconHref && !onTitleIconClick) {\n\t\t\treturn resolvedRenderLink({\n\t\t\t\thref: titleIconHref,\n\t\t\t\t'aria-label': titleIconLabel,\n\t\t\t\tclassName: cn(\n\t\t\t\t\t'page-header--title-icon-link',\n\t\t\t\t\tbuttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true}),\n\t\t\t\t\ttitleIconClassName,\n\t\t\t\t),\n\t\t\t\tchildren: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t});\n\t\t}\n\n\t\tif (onTitleIconClick) {\n\t\t\treturn (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName={cn('page-header--title-icon-button', titleIconClassName)}\n\t\t\t\t\tonClick={onTitleIconClick}\n\t\t\t\t\taria-label={titleIconLabel}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span aria-hidden=\"true\" className={iconClassName}>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t);\n\t})();\n\n const backControl = slots?.back ?? defaultBack;\n const titleStart = backControl || titleIconNode ? (\n <Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" wrap={false}>{backControl}{titleIconNode}</Stack>\n ) : null;\n const hasPrefix = titleStart != null;\n const hasCommands = hasPageHeaderCommands(primaryAction, secondaryActions);\n const defaultActions = hasCommands ? <>{actions}<PageHeaderCommands primaryAction={primaryAction} secondaryActions={secondaryActions} maxVisibleSecondaryActions={maxVisibleSecondaryActions} moreActionsLabel={moreActionsLabel} renderLink={resolvedRenderLink} /></> : actions;\n const actionsRegion = resolveSlot(slots?.actions, {renderLink:resolvedRenderLink, defaultContent:defaultActions});\n const hasActions = actionsRegion != null && actionsRegion !== false;\n const beforeTitle = resolveSlot(slots?.beforeTitle, {renderLink:resolvedRenderLink, defaultContent:null});\n const afterDescription = resolveSlot(slots?.afterDescription, {renderLink:resolvedRenderLink, defaultContent:null});\n const defaultSuffix = titleBadges.length ? <Stack direction=\"horizontal\" gap=\"sm\" wrap className=\"page-header--badges min-w-0 max-w-full\">\n {titleBadges.map((item,index)=><Badge key={item.key ?? index} tone={item.tone ?? 'secondary'}>{item.label}</Badge>)}\n </Stack> : null;\n const titleSuffix = resolveSlot(slots?.titleSuffix, {renderLink:resolvedRenderLink, defaultContent:defaultSuffix});\n const simpleDescription = typeof description === 'string' || typeof description === 'number' || typeof description === 'bigint';\n const simpleTitle = typeof title === 'string' || typeof title === 'number' || typeof title === 'bigint';\n\n return <header className={cn('layout-page-header--component page-heading--component page-header--component @container/page-header w-full min-w-0', className)}>\n <Stack gap=\"xl\">\n <Stack gap=\"sm\" className={cn('page-header--content-row min-w-0', contentClassName)}>\n {beforeTitle}\n {/* The actions sit beside the copy only while the copy keeps a readable measure\n (12rem beside the compact menu, 24rem once inline commands show at 40rem of\n header width);\n otherwise they wrap below it, so commands never cramp the title. */}\n <div className=\"page-header--headline-row flex min-w-0 flex-wrap items-start gap-x-space-xl gap-y-space-lg\">\n <div className={cn('page-header--copy-column page-header--title-row grid min-w-0 flex-1 basis-48 items-start gap-x-space-md @min-[40rem]/page-header:basis-96', hasPrefix ? 'grid-cols-[auto_minmax(0,1fr)]' : 'grid-cols-1', textGap === 'normal' ? 'gap-y-normal' : 'gap-y-dense')}>\n {hasPrefix && <span className=\"page-header--title-prefix inline-flex shrink-0 items-center self-start\">{titleStart}</span>}\n <Stack gap={textGap} className=\"page-header--copy-content min-w-0\">\n <Stack direction=\"horizontal\" gap=\"md\" align=\"center\" wrap className=\"page-header--title-line min-w-0\">\n {simpleTitle ? <Heading tag={headingTag} size={headingRoleSizes.route} className={cn('page-header--title min-w-0 [overflow-wrap:anywhere] border-0 pb-0',titleClassName)}>{title}</Heading> : title}\n {titleSuffix}\n </Stack>\n {((description != null && description !== false) || (afterDescription != null && afterDescription !== false)) && <Stack gap=\"dense\" className=\"page-header--title-block min-w-0\">\n {simpleDescription ? <Text {...copyRoleProps.structuralDescription} className={cn('page-header--description max-w-2xl [overflow-wrap:anywhere]',descriptionClassName)}>{description}</Text> : description}\n {afterDescription}\n </Stack>}\n </Stack>\n </div>\n {hasActions && <Stack direction=\"horizontal\" gap=\"md\" className={cn('page-header--actions max-w-full shrink-0 self-start', hasCommands && slots?.actions == null && 'justify-end', actionsClassName)}>{actionsRegion}</Stack>}\n </div>\n </Stack>\n {tabs && tabs.items.length > 0 && <OverflowTabBar items={tabs.items} value={tabs.value} onValueChange={tabs.onValueChange} className=\"page-header--tabs\" strings={{navigationLabel:tabs.label ?? 'Sections',more:tabs.moreLabel ?? 'More'}} />}\n </Stack>\n </header>;\n}\n","import { forwardRef } from 'react';\n\nimport { ErrorState, LoadingState, Empty, EmptyHeader, EmptyTitle, EmptyDescription } from '../../base/feedback';\nimport { Stack } from '../../base/structure';\nimport { compositionClasses, compositionRhythm } from '../../base/structure/composition.recipes';\nimport { Container, TwoColumnLayout } from '../containers';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport type { PageProps } from './page.types';\nimport { defaultPageStrings } from './page.strings';\nimport { PageHeader } from './partials/page-header';\n\nconst blockPadding = {none: 'py-0', sm: 'py-surface-xs', md: 'py-surface', lg: 'py-surface-lg'} as const;\n\n/** Route containment, header, lifecycle states and optional secondary context, without owning scrolling. */\nexport const Page = forwardRef<HTMLDivElement, PageProps>(function Page({\n header, children, slotProps, slots, renderLink, maxWidth, narrow = false,\n gutter = 'lg', padding = 'lg', aside, asideRatio = '7/5', stickyAside,\n toolbar, beforeHeader, afterHeader, loading = false, error, onRetry,\n empty = false, emptySlot, strings: stringsProp, className, render,\n ...containerProps\n}, ref) {\n const strings = useStrings(defaultPageStrings, stringsProp);\n const {className: bodyClassName, ...bodyProps} = slotProps?.body ?? {};\n const {className: toolbarClassName, ...toolbarProps} = slotProps?.toolbar ?? {};\n const {className: footerClassName, ...footerProps} = slotProps?.footer ?? {};\n const resolvedAside = slots?.aside ?? aside;\n const hasAside = resolvedAside !== undefined && resolvedAside !== null && resolvedAside !== false;\n const toolbarNode = slots?.toolbar ?? toolbar ?? afterHeader;\n const headerNode = slots?.header ?? (header ? <PageHeader {...header} renderLink={header.renderLink ?? renderLink} /> : null);\n const errorDescription = error instanceof Error ? error.message\n : typeof error === 'string' || typeof error === 'number' ? String(error) : strings.errorDescription;\n const customError = error && typeof error !== 'boolean' && typeof error !== 'string' && typeof error !== 'number' && !(error instanceof Error) ? error : undefined;\n const body = loading ? slots?.loading ?? <LoadingState variant=\"panel\" label={strings.loadingLabel} description={strings.loadingDescription} skeleton lines={4} />\n : error ? slots?.error ?? customError ?? <ErrorState variant=\"panel\" title={strings.errorTitle} description={errorDescription} onRetry={onRetry} retryLabel={strings.retryLabel} />\n : empty ? slots?.empty ?? emptySlot ?? <Empty><EmptyHeader><EmptyTitle>{strings.emptyTitle}</EmptyTitle><EmptyDescription>{strings.emptyDescription}</EmptyDescription></EmptyHeader></Empty>\n : children;\n const bodyNode = body !== undefined && body !== null ? (\n <div {...bodyProps} data-slot=\"page-body\" className={cn('page--body relative flex min-w-0 w-full flex-col', compositionClasses.subjects, bodyClassName)}>\n {body}\n </div>\n ) : null;\n\n return (\n <Container {...containerProps} ref={ref} render={render} maxWidth={maxWidth ?? (narrow ? 'md' : hasAside ? 'xl' : 'lg')}\n gutter={gutter} className={cn('font-sans', blockPadding[padding], className)}>\n <Stack gap={compositionRhythm.page} className=\"page--component\">\n {beforeHeader}\n {headerNode}\n {toolbarNode != null && toolbarNode !== false && <div {...toolbarProps} data-slot=\"page-toolbar\" className={cn('page--toolbar min-w-0', toolbarClassName)}>{toolbarNode}</div>}\n {hasAside ? <TwoColumnLayout adaptTo=\"container\" ratio={asideRatio} stickyAside={stickyAside} main={bodyNode} aside={resolvedAside} slotProps={{aside: slotProps?.aside}} /> : bodyNode}\n {slots?.footer != null && slots.footer !== false && <div {...footerProps} data-slot=\"page-footer\" className={cn('page--footer min-w-0', footerClassName)}>{slots.footer}</div>}\n </Stack>\n </Container>\n );\n});\nPage.displayName = 'Page';\n","/**\n * Page-level types for `Page`, `PageHeader`, `PageActions`, and exported\n * partials. All navigation is framework-neutral via `renderLink`.\n */\nimport type { ComponentType, JSX, Key, ReactNode } from 'react';\n\nimport type {\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n\tLayoutSlotAttributes,\n} from '../layout.types';\nimport type { TextGap } from '../../base/structure';\nimport type { ButtonSize } from '../../base/buttons';\nimport type { HeadingTag } from '../../typography';\nimport type { ContainerGutter, ContainerMaxWidth, ContainerProps } from '../containers/containers.types';\nimport type { StringsProp } from '../../../lib/strings';\nimport type { BadgeTone } from '../../base/badge';\nimport type { ActionPresentation } from '../../../lib/action-presentation';\nimport type { PageHeaderAction } from '../../base/navigation/page-header';\nimport type { OverflowTabItem } from '../../base/navigation';\nimport type { TwoColumnLayoutProps } from '../containers';\nimport type { PageStrings } from './page.strings';\n\nexport interface PageTitleBadge {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Semantic color intent. */\n\ttone?: BadgeTone;\n\tkey?: Key;\n}\n\nexport type { PageHeaderAction } from '../../base/navigation/page-header';\n\n/** Section tabs under a record's header. */\nexport interface PageHeaderTabs {\n\t/** Sections in order. `badge` shows a count chip beside the label. */\n\titems: OverflowTabItem[];\n\t/** Id of the active section. */\n\tvalue?: string;\n\t/**\n\t * Fired with the id of the chosen section. Switch the content or route here;\n\t * an item `href` renders a native link.\n\t */\n\tonValueChange?: (id: string) => void;\n\t/** Accessible name of the tab list. Default: `'Sections'`. */\n\tlabel?: string;\n\t/** Label of the trigger that holds tabs which do not fit. Default: `'More'`. */\n\tmoreLabel?: string;\n}\n\nexport interface PageHeaderRenderContext {\n\t/** The framework-neutral link renderer used by this header. */\n\trenderLink: LayoutLinkRenderer;\n\t/** Existing content for this position; actions includes the responsive command row. */\n\tdefaultContent: ReactNode;\n}\n\n/** A content node, or a render callback that can keep or replace its default content. */\nexport type PageHeaderRenderSlot = ReactNode | ((context: PageHeaderRenderContext) => ReactNode);\n\nexport interface PageHeaderSlots {\n\t/** @deprecated Use backHref/onBack for navigation. Retained as a custom back-control escape hatch. */\n\tback?: ReactNode;\n\t/** Context above the title, such as breadcrumbs. */\n\tbeforeTitle?: PageHeaderRenderSlot;\n\t/** Content beside the title, such as a status or count. */\n\ttitleSuffix?: PageHeaderRenderSlot;\n\t/** Context below the description. Compose metadata or other content here. */\n\tafterDescription?: PageHeaderRenderSlot;\n\t/** Keep, wrap or replace defaultContent's responsive command row. */\n\tactions?: PageHeaderRenderSlot;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription?: ReactNode;\n\t/** Shared title/description rhythm. Defaults to dense for page copy. */\n\ttextGap?: TextGap;\n\t/** Semantic heading level for the title. Defaults to `h1`, the route's main heading; use `h2` when the page sits inside another titled page. */\n\theadingTag?: HeadingTag;\n\t/** @deprecated Compose custom title content with slots.titleSuffix or a React-node title. */\n\ttitleIcon?: ComponentType<{ className?: string }>;\n\t/** @deprecated Compose a linked item in a render slot using its renderLink context. */\n\ttitleIconHref?: string;\n\t/** @deprecated Compose a command in slots.actions or describe it with primaryAction/secondaryActions. */\n\tonTitleIconClick?: () => void;\n\t/** @deprecated Accessible name for the compatibility title-icon control. */\n\ttitleIconLabel?: string;\n\t/** Destination for the back control. */\n\tbackHref?: string;\n\tonBack?: () => void;\n\t/** Copy for the back control. */\n\tbackLabel?: string;\n\t/** @deprecated Render title content with slots.titleSuffix. Retained for existing badge definitions. */\n\ttitleBadges?: PageTitleBadge[];\n\t/**\n\t * The page's one main command: a solid primary button after the secondary\n\t * commands. Compact headers place it first in the More actions menu.\n\t */\n\tprimaryAction?: PageHeaderAction;\n\t/**\n\t * Supporting commands in priority order. The first two render as outline\n\t * buttons before the primary command; the rest, and every destructive\n\t * command, move into the More actions menu, which always closes the row.\n\t * Below 40rem of header width, all commands collapse into that menu.\n\t */\n\tsecondaryActions?: readonly PageHeaderAction[];\n\t/**\n\t * How many routine secondary commands render as outline buttons on wide\n\t * headers; later ones join the More actions menu. Use `1` or `0` when long\n\t * labels beside the primary command would crowd the header; `Infinity`\n\t * keeps every routine command inline. @default 2\n\t */\n\tmaxVisibleSecondaryActions?: number;\n\t/** Accessible name of the More actions menu trigger. */\n\tmoreActionsLabel?: string;\n\t/**\n\t * Section tabs under the header, for a record split into sections such as\n\t * documents and history. Tabs that do not fit move into a More menu, and\n\t * the active tab stays visible.\n\t */\n\ttabs?: PageHeaderTabs;\n\t/**\n\t * @deprecated Customize commands with slots.actions; put other controls in Page toolbar.\n\t */\n\tactions?: ReactNode;\n\t/** Replaces individual regions of the shell. */\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\ttitleIconClassName?: string;\n\tdescriptionClassName?: string;\n}\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\n/** @deprecated Use PageHeaderAction with `primaryAction` and `secondaryActions`. */\nexport interface PageAction extends ActionPresentation {\n\tid?: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\t/** Shows the pending indicator. */\n\tloading?: boolean;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/** Optional inline button size. Defaults to the PageActions `size` prop. */\n\tsize?: ButtonSize;\n\tgroup?: string;\n\tplacement?: 'auto' | 'inline' | 'menu';\n\t/** Escape hatch for one action only. Prefer `renderAction` for consistent customization. */\n\telement?: ReactNode | JSX.Element;\n}\n\nexport type PageActionsDisplay = 'flat' | 'dropdown' | 'auto';\n\nexport interface PageActionsStrings {\n\tmenuLabel: string;\n}\n\nexport const defaultPageActionsStrings: PageActionsStrings = {\n\tmenuLabel: 'More actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\t/** Controls offered on the surface. */\n\tactions?: PageAction[];\n\t/** How actions are presented — inline, menu, or responsive. */\n\tdisplay?: PageActionsDisplay;\n\t/**\n\t * Inline action button scale, which the More actions square beside them\n\t * matches. Defaults to `sm`; set `md` for normal page-header buttons. A\n\t * menu-only ribbon follows the provider scale.\n\t */\n\tsize?: ButtonSize;\n\t/** Width at which responsive actions collapse into a menu. */\n\tbreakpoint?: number;\n\t/**\n\t * Maximum non-menu actions rendered inline before overflow moves them into\n\t * the dropdown menu. Defaults to 4 for admin header density.\n\t */\n\tmaxInlineActions?: number;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\t/** Merged onto the inline action row. */\n\tinlineClassName?: string;\n\t/** Merged onto the action menu. */\n\tmenuClassName?: string;\n\t/** Replaces the default action rendering. */\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n}\n\nexport interface PageSlotProps {\n\t/** Native attributes merged onto the page body region. */\n\tbody?: LayoutSlotAttributes<HTMLDivElement>;\n\taside?: LayoutSlotAttributes<HTMLElement>;\n\ttoolbar?: LayoutSlotAttributes<HTMLDivElement>;\n\tfooter?: LayoutSlotAttributes<HTMLDivElement>;\n}\n\nexport interface PageSlots {\n\t/** Replaces the generated PageHeader. */\n\theader?: ReactNode;\n\ttoolbar?: ReactNode;\n\taside?: ReactNode;\n\tfooter?: ReactNode;\n\tloading?: ReactNode;\n\terror?: ReactNode;\n\tempty?: ReactNode;\n}\n\nexport interface PageProps\n\textends LayoutNavigationAdapter, Omit<ContainerProps, 'children'> {\n\t/** Header region of the shell. */\n\theader?: PageHeaderProps;\n\t/** Explicit width wins; otherwise narrow uses md, aside uses xl, and a single column uses lg. */\n\tmaxWidth?: ContainerMaxWidth;\n\t/** Center one resource or form at the existing `md` content measure. */\n\tnarrow?: boolean;\n\t/** Inline page gutters. Defaults to `lg`; none requires an existing padded parent. */\n\tgutter?: ContainerGutter;\n\t/** Block padding around the whole page. Defaults to `lg`, independent of gutter. */\n\tpadding?: ContainerGutter;\n\t/** Secondary context beside the primary body, adapting to the available container width. */\n\taside?: ReactNode;\n\t/** Main/aside proportions. Defaults to 7/5. */\n\tasideRatio?: TwoColumnLayoutProps['ratio'];\n\tstickyAside?: boolean;\n\t/** Query controls or context between header and body. */\n\ttoolbar?: ReactNode;\n\t/** Content above the header. */\n\tbeforeHeader?: ReactNode;\n\t/** Compatible toolbar fallback when toolbar and slots.toolbar are omitted. */\n\tafterHeader?: ReactNode;\n\t/** Replaces only the primary body; header, toolbar and aside remain mounted. */\n\tloading?: boolean;\n\terror?: ReactNode | Error;\n\tonRetry?: () => void;\n\tempty?: boolean;\n\temptySlot?: ReactNode;\n\t/** Region overrides take precedence over direct props. */\n\tslots?: PageSlots;\n\t/** Copy for the default loading, error and empty states. */\n\tstrings?: StringsProp<PageStrings>;\n\tchildren?: ReactNode;\n\t/** Native attributes for stable page regions. */\n\tslotProps?: PageSlotProps;\n}\n","/**\n * PageActions — composable action ribbon for page headers.\n *\n * Links go through `renderLink`, never router imports or DOM click hacks.\n * Use `renderAction` for app-specific rendering while keeping grouping,\n * filtering, breakpoint, and menu placement logic centralized.\n */\nimport { useEffect, useMemo, useState, type ReactElement } from 'react';\n\nimport {\n\tActionButtons,\n\tActionMenu,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../../../base/action-menu';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultPageActionsStrings,\n\ttype PageAction,\n\ttype PageActionContext,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\t/** The action this surface performs. */\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction toActionMenuAction(\n\t{ action, index }: PageActionEntry,\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\tisInline: boolean,\n\trenderAction?: PageActionsProps['renderAction'],\n): ActionMenuAction {\n\tconst context: PageActionContext = { ...contextBase, index, isInline };\n\tconst disabled = !!action.disabled || !!action.loading;\n\n\treturn {\n\t\tid: action.id ?? String(index),\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tonClick: action.onClick,\n\t\thref: action.href && !action.onClick ? action.href : undefined,\n\t\ttarget: action.target,\n\t\trel: action.rel,\n\t\texternal: action.external,\n\t\tdisabled,\n\t\ttone: action.tone ?? 'secondary',\n\t\tbuttonStyle: action.buttonStyle ?? 'solid',\n\t\tbuttonSize: action.size,\n\t\tgroup: action.group,\n\t\trender: action.element ?? renderAction?.(action, context),\n\t};\n}\n\n/** @deprecated Pass page commands as `primaryAction` and `secondaryActions`; use ActionButtons for a toolbar row. */\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tsize = 'sm',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\n\tconst filtered = useMemo<PageActionEntry[]>(\n\t\t() => (actions ?? [])\n\t\t\t.map((action, index) => ({ action, index }))\n\t\t\t.filter(({ action }) => action.visible !== false),\n\t\t[actions],\n\t);\n\n\tconst [isNarrow, setIsNarrow] = useState(false);\n\tuseEffect(() => {\n\t\tif (display !== 'auto' || typeof window === 'undefined') return;\n\n\t\tconst check = () => setIsNarrow(window.innerWidth <= breakpoint);\n\t\tcheck();\n\t\twindow.addEventListener('resize', check);\n\t\treturn () => window.removeEventListener('resize', check);\n\t}, [display, breakpoint]);\n\n\tif (filtered.length === 0) return null;\n\n\tconst inlineContextBase = { renderLink: resolvedRenderLink };\n\tconst renderActionLink = (props: ActionMenuLinkRenderProps) =>\n\t\tresolvedRenderLink({\n\t\t\t...props,\n\t\t\tchildren: props.children ?? null,\n\t\t}) as ReactElement;\n\tconst inlineClass = cn('flex min-w-0 max-w-full flex-wrap items-center gap-space-sm', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\tconst dropdownActions = filtered.map((entry) =>\n\t\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t\t);\n\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\tactions={dropdownActions}\n\t\t\t\tcontext=\"commands\"\n\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\talign=\"end\"\n\t\t\t\tcloseOnSelect\n\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\tpreserveOrder\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst inlineLimit = Math.max(0, maxInlineActions);\n\tconst inlineCandidates = filtered.filter(({ action }) => (action.placement ?? 'auto') !== 'menu');\n\tconst inline = inlineCandidates.slice(0, inlineLimit);\n\tconst overflow = inlineCandidates.slice(inlineLimit);\n\tconst menu = [\n\t\t...overflow,\n\t\t...filtered.filter(({ action }) => (action.placement ?? 'auto') === 'menu'),\n\t];\n\tconst inlineActions = inline.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, true, renderAction),\n\t);\n\tconst menuActions = menu.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t);\n\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t<ActionButtons\n\t\t\t\tactions={inlineActions}\n\t\t\t\tsize={size}\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={menuActions}\n\t\t\t\t\tcontext=\"commands\"\n\t\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\t\tpreserveOrder\n\t\t\t\t\trenderLink={renderActionLink}\n\t\t\t\t\t// The square matches the inline commands it ends.\n\t\t\t\t\tbuttonProps={{ size }}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { S as e, a as t, d as n, r } from "./ui-provider-C-74NVLc.js";
3
- import { t as i } from "./utils-B6kKb8jB.js";
4
- import { a, n as o } from "./buttons-BedGfygC.js";
3
+ import { t as i } from "./utils-DhuoqFy4.js";
4
+ import { a, n as o } from "./buttons-DeW0bQeK.js";
5
5
  import { t as s } from "./focus-recipes-B653VaLq.js";
6
6
  import { t as c } from "./composition.recipes-COdiFhxB.js";
7
- import { n as l } from "./action-menu-Dr8K-ghE.js";
7
+ import { n as l } from "./action-menu-C0gjzLyE.js";
8
8
  import { useCallback as u, useEffect as d, useRef as f, useState as p } from "react";
9
9
  import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
10
10
  //#region src/components/base/navigation/page-header/page-header-commands.tsx
@@ -190,4 +190,4 @@ function O({ primaryAction: e, secondaryActions: n, maxVisibleSecondaryActions:
190
190
  //#endregion
191
191
  export { C as n, O as t };
192
192
 
193
- //# sourceMappingURL=page-header-commands-7P3sfE9u.js.map
193
+ //# sourceMappingURL=page-header-commands-DIKspJfx.js.map