admin-ui-starter-kit 0.6.1 → 0.6.4

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 (498) hide show
  1. package/.agents/skills/component-library-rules/references/components/services__hooks.md +6 -1
  2. package/dist/_shared/{auth-B_KVUjsB.cjs → auth-DdezEtKK.cjs} +2 -2
  3. package/dist/_shared/{auth-B_KVUjsB.cjs.map → auth-DdezEtKK.cjs.map} +1 -1
  4. package/dist/_shared/{auth-C_TgyzDl.js → auth-e7yab9pK.js} +2 -2
  5. package/dist/_shared/{auth-C_TgyzDl.js.map → auth-e7yab9pK.js.map} +1 -1
  6. package/dist/_shared/{buttons-C8jy-jMd.cjs → buttons-Bek9F7qK.cjs} +2 -2
  7. package/dist/_shared/{buttons-C8jy-jMd.cjs.map → buttons-Bek9F7qK.cjs.map} +1 -1
  8. package/dist/_shared/{buttons-MxvdokeK.js → buttons-DcynMPnE.js} +2 -2
  9. package/dist/_shared/{buttons-MxvdokeK.js.map → buttons-DcynMPnE.js.map} +1 -1
  10. package/dist/_shared/cards-CbbHly7W.cjs +2 -0
  11. package/dist/_shared/cards-CbbHly7W.cjs.map +1 -0
  12. package/dist/_shared/{cards-CtBoSZG9.js → cards-RZxRLx3f.js} +6 -6
  13. package/dist/_shared/cards-RZxRLx3f.js.map +1 -0
  14. package/dist/_shared/{comments-DGBxF9fD.js → comments-BJqgvSFY.js} +2 -2
  15. package/dist/_shared/{comments-DGBxF9fD.js.map → comments-BJqgvSFY.js.map} +1 -1
  16. package/dist/_shared/{comments-C8iXy9XO.cjs → comments-BjPciQfo.cjs} +2 -2
  17. package/dist/_shared/{comments-C8iXy9XO.cjs.map → comments-BjPciQfo.cjs.map} +1 -1
  18. package/dist/_shared/{data-display-C_44_V-W.cjs → data-display-C21skrV4.cjs} +2 -2
  19. package/dist/_shared/{data-display-C_44_V-W.cjs.map → data-display-C21skrV4.cjs.map} +1 -1
  20. package/dist/_shared/{data-display-CRFaMkxT.js → data-display-C5-1dZua.js} +71 -71
  21. package/dist/_shared/{data-display-CRFaMkxT.js.map → data-display-C5-1dZua.js.map} +1 -1
  22. package/dist/_shared/{forms-qnwoUqxf.js → forms-BoquZE2Y.js} +3 -3
  23. package/dist/_shared/{forms-qnwoUqxf.js.map → forms-BoquZE2Y.js.map} +1 -1
  24. package/dist/_shared/{forms-rmKcy5uO.cjs → forms-CzrEYejY.cjs} +2 -2
  25. package/dist/_shared/{forms-rmKcy5uO.cjs.map → forms-CzrEYejY.cjs.map} +1 -1
  26. package/dist/_shared/{overlays-CdtMAkKG.js → overlays-DW8OIK5R.js} +134 -47
  27. package/dist/_shared/overlays-DW8OIK5R.js.map +1 -0
  28. package/dist/_shared/overlays-Du65iCkx.cjs +2 -0
  29. package/dist/_shared/overlays-Du65iCkx.cjs.map +1 -0
  30. package/dist/_shared/{page-C6EzwvTz.cjs → page-D8UMXREv.cjs} +2 -2
  31. package/dist/_shared/{page-C6EzwvTz.cjs.map → page-D8UMXREv.cjs.map} +1 -1
  32. package/dist/_shared/{page-DCW1eWCJ.js → page-D9LNsHMN.js} +2 -2
  33. package/dist/_shared/{page-DCW1eWCJ.js.map → page-D9LNsHMN.js.map} +1 -1
  34. package/dist/_shared/{settings-QOBrbgdN.js → settings-BeZOIEJB.js} +2 -2
  35. package/dist/_shared/{settings-QOBrbgdN.js.map → settings-BeZOIEJB.js.map} +1 -1
  36. package/dist/_shared/{settings-DbAyxMrX.cjs → settings-DI-K34bW.cjs} +2 -2
  37. package/dist/_shared/{settings-DbAyxMrX.cjs.map → settings-DI-K34bW.cjs.map} +1 -1
  38. package/dist/_shared/{table-CUA_A-oO.js → table-B_pqCQxC.js} +3 -3
  39. package/dist/_shared/table-B_pqCQxC.js.map +1 -0
  40. package/dist/_shared/table-CGVOXtdv.cjs +2 -0
  41. package/dist/_shared/table-CGVOXtdv.cjs.map +1 -0
  42. package/dist/components/base/buttons/index.cjs +1 -1
  43. package/dist/components/base/buttons/index.js +1 -1
  44. package/dist/components/base/cards/index.cjs +1 -1
  45. package/dist/components/base/cards/index.js +1 -1
  46. package/dist/components/base/forms/index.cjs +1 -1
  47. package/dist/components/base/forms/index.js +1 -1
  48. package/dist/components/base/table/index.cjs +1 -1
  49. package/dist/components/base/table/index.js +1 -1
  50. package/dist/components/composed/admin/index.cjs +1 -1
  51. package/dist/components/composed/admin/index.js +2 -2
  52. package/dist/components/composed/ai/index.cjs +1 -1
  53. package/dist/components/composed/ai/index.js +2 -2
  54. package/dist/components/composed/analytics/index.cjs +1 -1
  55. package/dist/components/composed/analytics/index.js +1 -1
  56. package/dist/components/composed/cards/index.cjs +1 -1
  57. package/dist/components/composed/cards/index.js +2 -2
  58. package/dist/components/composed/commerce/index.cjs +1 -1
  59. package/dist/components/composed/commerce/index.js +2 -2
  60. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  61. package/dist/components/composed/dark-surfaces/index.js +1 -1
  62. package/dist/components/composed/data-display/index.cjs +1 -1
  63. package/dist/components/composed/data-display/index.js +1 -1
  64. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  65. package/dist/components/composed/navigation/index.cjs +1 -1
  66. package/dist/components/composed/navigation/index.js +1 -1
  67. package/dist/components/composed/timelines/index.cjs +1 -1
  68. package/dist/components/composed/timelines/index.js +1 -1
  69. package/dist/components/features/activities/index.cjs +1 -1
  70. package/dist/components/features/activities/index.js +1 -1
  71. package/dist/components/features/card/index.cjs +1 -1
  72. package/dist/components/features/card/index.js +2 -2
  73. package/dist/components/features/comments/index.cjs +1 -1
  74. package/dist/components/features/comments/index.js +1 -1
  75. package/dist/components/features/event-log/index.cjs +1 -1
  76. package/dist/components/features/event-log/index.js +2 -2
  77. package/dist/components/features/media-library/index.cjs +1 -1
  78. package/dist/components/features/media-library/index.js +2 -2
  79. package/dist/components/features/overlays/hooks/index.d.ts +1 -0
  80. package/dist/components/features/overlays/hooks/index.d.ts.map +1 -1
  81. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +33 -0
  82. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts.map +1 -0
  83. package/dist/components/features/overlays/index.cjs +1 -1
  84. package/dist/components/features/overlays/index.d.ts +1 -1
  85. package/dist/components/features/overlays/index.d.ts.map +1 -1
  86. package/dist/components/features/overlays/index.js +2 -2
  87. package/dist/components/features/products/index.cjs +1 -1
  88. package/dist/components/features/products/index.js +4 -4
  89. package/dist/components/features/resource/index.cjs +1 -1
  90. package/dist/components/features/resource/index.js +2 -2
  91. package/dist/components/features/schema-form/index.cjs +1 -1
  92. package/dist/components/features/schema-form/index.js +2 -2
  93. package/dist/components/layout/auth/index.cjs +1 -1
  94. package/dist/components/layout/auth/index.js +1 -1
  95. package/dist/components/layout/index.cjs +1 -1
  96. package/dist/components/layout/index.js +3 -3
  97. package/dist/components/layout/page/index.cjs +1 -1
  98. package/dist/components/layout/page/index.js +1 -1
  99. package/dist/components/layout/settings/index.cjs +1 -1
  100. package/dist/components/layout/settings/index.js +1 -1
  101. package/dist/services/actions/index.cjs +1 -1
  102. package/dist/services/actions/index.js +1 -1
  103. package/dist/showcase/assets/{AreaChart-CGkuyNyy.js → AreaChart-Y0ZwblHU.js} +1 -1
  104. package/dist/showcase/assets/{CompositeItem-DAQ048AO.js → CompositeItem-BIY_Cp7P.js} +1 -1
  105. package/dist/showcase/assets/{CompositeRoot-8-OuCMMq.js → CompositeRoot-DSPvBRQr.js} +1 -1
  106. package/dist/showcase/assets/{DialogTrigger-1P-jwcoH.js → DialogTrigger-DHUp8vXe.js} +1 -1
  107. package/dist/showcase/assets/{LabelableContext-BDyZArAc.js → LabelableContext-CasUI4hR.js} +1 -1
  108. package/dist/showcase/assets/{PreviewLayout-wYGhlcJt.js → PreviewLayout-B_l930k0.js} +1 -1
  109. package/dist/showcase/assets/{RadioGroup-DuiI4W--.js → RadioGroup-BgZ-UH79.js} +1 -1
  110. package/dist/showcase/assets/{ScrollAreaCorner-Df5uTkWT.js → ScrollAreaCorner-BbwFElLA.js} +1 -1
  111. package/dist/showcase/assets/{Separator-BuTBo5a_.js → Separator-dQuencsA.js} +1 -1
  112. package/dist/showcase/assets/{ToolbarRootContext-B4S4Fn7d.js → ToolbarRootContext-BE0hbejq.js} +1 -1
  113. package/dist/showcase/assets/{accordion-D3beuJpC.js → accordion-D93ZNsLn.js} +1 -1
  114. package/dist/showcase/assets/{accordion-variants-BTMpfSPI.js → accordion-variants-Bl4bIQH4.js} +1 -1
  115. package/dist/showcase/assets/{action-menu-DsAr1OqF.js → action-menu--rEgMzDi.js} +1 -1
  116. package/dist/showcase/assets/{actions-BzyHAEZR.js → actions-3iedOWD9.js} +1 -1
  117. package/dist/showcase/assets/{activities-BgoelWKu.js → activities-CyrAWFlu.js} +1 -1
  118. package/dist/showcase/assets/{activities-feed-card-DI4MIm3-.js → activities-feed-card-bhIATc2O.js} +1 -1
  119. package/dist/showcase/assets/{admin-n-JemkNh.js → admin-CZzNsj2q.js} +1 -1
  120. package/dist/showcase/assets/{ai-BXyk1mT0.js → ai-CasHwkW4.js} +1 -1
  121. package/dist/showcase/assets/{ai-artifact-C8CmZ94f.js → ai-artifact-BgWvrLAb.js} +1 -1
  122. package/dist/showcase/assets/{ai-chat-CTQQ4e4X.js → ai-chat-seS9aW-1.js} +1 -1
  123. package/dist/showcase/assets/{ai-elements-DGnlBq8E.js → ai-elements-Tku5_ous.js} +1 -1
  124. package/dist/showcase/assets/{ai-tool-call-bHnWNBtN.js → ai-tool-call-BU6xbmXG.js} +1 -1
  125. package/dist/showcase/assets/{alert-bPnj3_cC.js → alert-6Emt6KX2.js} +1 -1
  126. package/dist/showcase/assets/{alert-CIHGXUul.js → alert-B6aLWiRW.js} +1 -1
  127. package/dist/showcase/assets/{alert-N79A6qIx.js → alert-CtoTQ0vN.js} +1 -1
  128. package/dist/showcase/assets/{api-key-list-Bf1KoRJq.js → api-key-list-C0glWR3z.js} +1 -1
  129. package/dist/showcase/assets/{api-key-list-DyZ_DaRx.js → api-key-list-DcWSbY3u.js} +1 -1
  130. package/dist/showcase/assets/{app-sidebar-Co0LUSvz.js → app-sidebar-D_eNP_jh.js} +1 -1
  131. package/dist/showcase/assets/arrow-down-qyKZ1H5j.js +1 -0
  132. package/dist/showcase/assets/arrow-left-C9I0h_su.js +1 -0
  133. package/dist/showcase/assets/arrow-right-DswaRsr6.js +1 -0
  134. package/dist/showcase/assets/arrow-up-5BijPOxK.js +1 -0
  135. package/dist/showcase/assets/arrow-up-right-CbVVNT6g.js +1 -0
  136. package/dist/showcase/assets/{avatar-DKLsNeBi.js → avatar-BYHVCvVW.js} +1 -1
  137. package/dist/showcase/assets/{avatar-D3kvVy00.js → avatar-BlLAVC87.js} +1 -1
  138. package/dist/showcase/assets/{avatar-CJaCYGWf.js → avatar-DQTXjcS4.js} +1 -1
  139. package/dist/showcase/assets/{avatar-CxwFyL4T.js → avatar-DveZy09C.js} +1 -1
  140. package/dist/showcase/assets/{badge-CSMmwDLr.js → badge-Bth3mRTh.js} +1 -1
  141. package/dist/showcase/assets/{badge-check-TQRmqI7C.js → badge-check-DocF8Ho3.js} +1 -1
  142. package/dist/showcase/assets/{bell-CwRy7zpP.js → bell-DXBoeAzi.js} +1 -1
  143. package/dist/showcase/assets/{bot-Bt02Uzhq.js → bot-Ch-Y1HK8.js} +1 -1
  144. package/dist/showcase/assets/{box-Bfv5RQBf.js → box-72m9QSDa.js} +1 -1
  145. package/dist/showcase/assets/{braces-CxUoAPd4.js → braces-CC17X3TE.js} +1 -1
  146. package/dist/showcase/assets/{brain-CNapE0CP.js → brain-Dvbla_5x.js} +1 -1
  147. package/dist/showcase/assets/{brand-CBq1YoS0.js → brand-D5ciAq8v.js} +1 -1
  148. package/dist/showcase/assets/{breadcrumb-DyXpErBT.js → breadcrumb-BBCaOVyz.js} +1 -1
  149. package/dist/showcase/assets/{breadcrumb-DRioiUd_.js → breadcrumb-Bt8yVTCj.js} +1 -1
  150. package/dist/showcase/assets/{breadcrumbs-BzHeoItO.js → breadcrumbs-CkVWfcAN.js} +1 -1
  151. package/dist/showcase/assets/{briefcase-N74Hu0O2.js → briefcase-8rQTJwpE.js} +1 -1
  152. package/dist/showcase/assets/{building-2-D81ygy-F.js → building-2-CV7gTtXz.js} +1 -1
  153. package/dist/showcase/assets/{button-Bgqg7AmN.js → button-HGjoBio3.js} +1 -1
  154. package/dist/showcase/assets/{button-group-DPV1XIW3.js → button-group-LWToSCrp.js} +1 -1
  155. package/dist/showcase/assets/{buttons-qpZWlILG.js → buttons-Bn_dX6Kk.js} +1 -1
  156. package/dist/showcase/assets/{calendar-DcYyOrNY.js → calendar-BTsffmY8.js} +1 -1
  157. package/dist/showcase/assets/{calendar-BXG5CwbY.js → calendar-Bhpyn4u0.js} +1 -1
  158. package/dist/showcase/assets/{calendar-D-CSqGtC.js → calendar-DjrUTKcD.js} +1 -1
  159. package/dist/showcase/assets/{calendar-days-CNNiyV9e.js → calendar-days-BKCkzWjV.js} +1 -1
  160. package/dist/showcase/assets/{camera-D0yVo0xC.js → camera-EjpDG3mc.js} +1 -1
  161. package/dist/showcase/assets/{card-CH7Ev3xS.js → card-Bp6iGuOF.js} +1 -1
  162. package/dist/showcase/assets/{card-Bl-y9-8y.js → card-CHc6AVFt.js} +1 -1
  163. package/dist/showcase/assets/card-primitives-Bv6XGPJd.js +1 -0
  164. package/dist/showcase/assets/{card-radio-group-DpeIWyiO.js → card-radio-group-Ce9FsiSv.js} +1 -1
  165. package/dist/showcase/assets/{cards-7xave3ub.js → cards-_CGG9zir.js} +1 -1
  166. package/dist/showcase/assets/{carousel--kHTFkC7.js → carousel-BVbsKH2W.js} +1 -1
  167. package/dist/showcase/assets/{cell-renderers-Cx8rAZln.js → cell-renderers-CosD6Gby.js} +1 -1
  168. package/dist/showcase/assets/{chart-DU8INHbt.js → chart-CwOp8Sf8.js} +1 -1
  169. package/dist/showcase/assets/{chart-column-Dbekq8cy.js → chart-column-sz871NdJ.js} +1 -1
  170. package/dist/showcase/assets/{checkbox-ClPnzko9.js → checkbox-BO38TYqr.js} +1 -1
  171. package/dist/showcase/assets/checkbox-W4MhlPlJ.js +1 -0
  172. package/dist/showcase/assets/chevron-down-BFh1Fz2P.js +1 -0
  173. package/dist/showcase/assets/chevron-left-C5_X5glO.js +1 -0
  174. package/dist/showcase/assets/chevron-up-DPH3boVS.js +1 -0
  175. package/dist/showcase/assets/chevrons-up-down-CM5mIDaw.js +1 -0
  176. package/dist/showcase/assets/circle-BFDzL1iF.js +1 -0
  177. package/dist/showcase/assets/{circle-alert-9j29FrsT.js → circle-alert-C6MbOB0m.js} +1 -1
  178. package/dist/showcase/assets/circle-check-C0X85t4j.js +1 -0
  179. package/dist/showcase/assets/circle-check-big-CBaodck_.js +1 -0
  180. package/dist/showcase/assets/circle-dot-DdRpIhnL.js +1 -0
  181. package/dist/showcase/assets/{circle-question-mark-BRiF5RV4.js → circle-question-mark-CKlcead7.js} +1 -1
  182. package/dist/showcase/assets/{circle-x-BF20gddw.js → circle-x-MO44aKHe.js} +1 -1
  183. package/dist/showcase/assets/clock-3-CXQJFcbh.js +1 -0
  184. package/dist/showcase/assets/clock-GhBJJ6n1.js +1 -0
  185. package/dist/showcase/assets/{code-xml-D2f-X63y.js → code-xml-BSX7Qyi5.js} +1 -1
  186. package/dist/showcase/assets/{collapsible-CF0oQTVS.js → collapsible-CZLTO5EH.js} +1 -1
  187. package/dist/showcase/assets/{collapsible-Ru5-bssh.js → collapsible-LrDO_sSQ.js} +1 -1
  188. package/dist/showcase/assets/{combobox-DpJTW_Rq.js → combobox-TmDBXkM-.js} +1 -1
  189. package/dist/showcase/assets/{command-Dno8Ogez.js → command-9-r1qrJt.js} +1 -1
  190. package/dist/showcase/assets/{command-LRFStKBy.js → command-DGne3l9s.js} +1 -1
  191. package/dist/showcase/assets/{comment-composer-Dht7nfbv.js → comment-composer-BI0qnvuY.js} +1 -1
  192. package/dist/showcase/assets/{comment-item-B6IgQsMr.js → comment-item-Cedds6Lm.js} +1 -1
  193. package/dist/showcase/assets/{comments-B3ksV3Mn.js → comments-De02NOns.js} +1 -1
  194. package/dist/showcase/assets/{commerce-B1_Offbz.js → commerce-DldtS83o.js} +1 -1
  195. package/dist/showcase/assets/{composite-BjQWIYF-.js → composite-BjZZlzzb.js} +1 -1
  196. package/dist/showcase/assets/{contact-card-Bss4YHZz.js → contact-card-muCZ3uXV.js} +1 -1
  197. package/dist/showcase/assets/{content-container-D4BM1Zro.js → content-container-BxSLICeL.js} +1 -1
  198. package/dist/showcase/assets/{copyable-Dst8oaw5.js → copyable-DYhhmTqM.js} +1 -1
  199. package/dist/showcase/assets/{copyable-C0J88R_R.js → copyable-MNU75-J9.js} +1 -1
  200. package/dist/showcase/assets/{course-card-BuqwjqtO.js → course-card-Dl1wsuJx.js} +1 -1
  201. package/dist/showcase/assets/{cpu-CFy0M0rN.js → cpu-CsWq4fcX.js} +1 -1
  202. package/dist/showcase/assets/{credit-card-CFq0S1Ma.js → credit-card-B0AUZiWw.js} +1 -1
  203. package/dist/showcase/assets/{css-variables-BAALjDwD.js → css-variables-Be7DzahT.js} +1 -1
  204. package/dist/showcase/assets/{currency-BZzZRv2_.js → currency-BtPM_Xtw.js} +1 -1
  205. package/dist/showcase/assets/{dark-surfaces-CVKt2Yww.js → dark-surfaces-DRFERSEv.js} +1 -1
  206. package/dist/showcase/assets/{data-view-Be0uoLqL.js → data-view-DmWd0h7G.js} +2 -2
  207. package/dist/showcase/assets/{data-view-D6_zyFwk.js → data-view-DnLH2o0i.js} +1 -1
  208. package/dist/showcase/assets/{database-DSC-ysYT.js → database-C0YqGaQ_.js} +1 -1
  209. package/dist/showcase/assets/{date-block-Bgu_LMxB.js → date-block-BQH25FLS.js} +1 -1
  210. package/dist/showcase/assets/{date-picker-ByYEZGMg.js → date-picker-BF-jevhh.js} +1 -1
  211. package/dist/showcase/assets/{date-pickers-DzSQrvWs.js → date-pickers-q2v3ajJm.js} +1 -1
  212. package/dist/showcase/assets/{dense-info-BhFkOQbt.js → dense-info-Cb-roqDU.js} +1 -1
  213. package/dist/showcase/assets/{design-system-consistency-D6iCJLcr.js → design-system-consistency-DMSJknaM.js} +1 -1
  214. package/dist/showcase/assets/{dialog-C1heXuxu.js → dialog-C0ALRmbP.js} +1 -1
  215. package/dist/showcase/assets/{dialog-DzrcsKvl.js → dialog-CbXon08k.js} +1 -1
  216. package/dist/showcase/assets/{display-utilities-eu-EVMrx.js → display-utilities-kBUVw7o3.js} +1 -1
  217. package/dist/showcase/assets/{dist-DV4Tv32d.js → dist-CTSkWj_M.js} +1 -1
  218. package/dist/showcase/assets/{dist-BlIID0_L.js → dist-W8bxVfew.js} +1 -1
  219. package/dist/showcase/assets/{dollar-sign-qp4G3P_K.js → dollar-sign-VNxVZleW.js} +1 -1
  220. package/dist/showcase/assets/{download-zlcHjSdS.js → download-Ds_6eIpx.js} +1 -1
  221. package/dist/showcase/assets/{dropdown-menu-DZ47rJaE.js → dropdown-menu-C1G_y9dv.js} +1 -1
  222. package/dist/showcase/assets/{dropzone-Dx4EqBHu.js → dropzone-CxOLmdkt.js} +1 -1
  223. package/dist/showcase/assets/{earth-BuXqXHh6.js → earth-HLyEI1oq.js} +1 -1
  224. package/dist/showcase/assets/{ellipsis-DgAjMZHc.js → ellipsis-BLyAd9A-.js} +1 -1
  225. package/dist/showcase/assets/{ellipsis-vertical-BA8_YMyV.js → ellipsis-vertical-TG4mYU2J.js} +1 -1
  226. package/dist/showcase/assets/{empty-DXjKmyNv.js → empty-B54k9xAG.js} +1 -1
  227. package/dist/showcase/assets/{empty-item-DIGWYsI0.js → empty-item-BmA4rmq7.js} +1 -1
  228. package/dist/showcase/assets/{empty-state-BSc0tQNC.js → empty-state-CH7gjjg7.js} +1 -1
  229. package/dist/showcase/assets/{empty-state-CkixFVN1.js → empty-state-hUKvmKa-.js} +1 -1
  230. package/dist/showcase/assets/{enhanced-activities-CKbHgR4f.js → enhanced-activities-BRDVL9RR.js} +1 -1
  231. package/dist/showcase/assets/{enhanced-combobox-DAKQyFUg.js → enhanced-combobox-2wbQJS6R.js} +1 -1
  232. package/dist/showcase/assets/{esm-C3PfkuOc.js → esm-CUTefMLr.js} +1 -1
  233. package/dist/showcase/assets/{event-calendar-rNju8jaT.js → event-calendar-Bf9xFZlt.js} +1 -1
  234. package/dist/showcase/assets/{event-log-BUK1blGb.js → event-log-CeRDSL-h.js} +1 -1
  235. package/dist/showcase/assets/{example-PsbgbESI.js → example-CJMJcnb4.js} +1 -1
  236. package/dist/showcase/assets/{external-link-CgB9zfWz.js → external-link-CvXhYrnd.js} +1 -1
  237. package/dist/showcase/assets/{eye-YnIHbdKe.js → eye-Cl_GfUKH.js} +1 -1
  238. package/dist/showcase/assets/{feature-announcement-CWwjAPI1.js → feature-announcement-Dw0SokLo.js} +1 -1
  239. package/dist/showcase/assets/{file-3Z2xkc-8.js → file-CJFWrwy1.js} +1 -1
  240. package/dist/showcase/assets/{file-text-BQeGXxPG.js → file-text-BTTFP8Jo.js} +1 -1
  241. package/dist/showcase/assets/{filter-layout-D7YskzbC.js → filter-layout-DUVqG5Ql.js} +1 -1
  242. package/dist/showcase/assets/{filters-2YY_wVwq.js → filters-BLcCaplV.js} +1 -1
  243. package/dist/showcase/assets/{flag-Bw3wwRgF.js → flag-BxI3EGPG.js} +1 -1
  244. package/dist/showcase/assets/{folder-open-CZ5Bq4lK.js → folder-open-4d8qsiAj.js} +1 -1
  245. package/dist/showcase/assets/{form-field-AWNJL9FM.js → form-field-Dhy0eM5B.js} +1 -1
  246. package/dist/showcase/assets/{format-DUU7-42g.js → format-zGqa9Olc.js} +1 -1
  247. package/dist/showcase/assets/{forms-CWJ3HBbk.js → forms-D99qG5Gb.js} +1 -1
  248. package/dist/showcase/assets/{funnel-vxNNph7w.js → funnel-Cg7SOShf.js} +1 -1
  249. package/dist/showcase/assets/{generic-DlyFJDj6.js → generic-CfrG943t.js} +1 -1
  250. package/dist/showcase/assets/{getPseudoElementBounds-CibNto5h.js → getPseudoElementBounds-lw5shsdM.js} +1 -1
  251. package/dist/showcase/assets/{gift-BjRHqTcQ.js → gift-BXtKbzvA.js} +1 -1
  252. package/dist/showcase/assets/{giftcard-cards-DcujCFff.js → giftcard-cards-CqYaN0jC.js} +1 -1
  253. package/dist/showcase/assets/{git-branch-B7XnpQE0.js → git-branch-BWAuIMOQ.js} +1 -1
  254. package/dist/showcase/assets/{global-search-CWvNfmpe.js → global-search-CHUva8pR.js} +1 -1
  255. package/dist/showcase/assets/{global-search-Ct7I1Xd2.js → global-search-Df7JovOG.js} +1 -1
  256. package/dist/showcase/assets/{globe-CHleXWd2.js → globe-CvIW_foU.js} +1 -1
  257. package/dist/showcase/assets/{gradient-card-Bw4oJljh.js → gradient-card-CdM2J1Hv.js} +1 -1
  258. package/dist/showcase/assets/{hash-BVGqnm6_.js → hash-wBs5gyr_.js} +1 -1
  259. package/dist/showcase/assets/{header-CgApizpk.js → header-DXPFmpUT.js} +1 -1
  260. package/dist/showcase/assets/{header-notifications-B2v1Mdri.js → header-notifications-FsnCJLpe.js} +1 -1
  261. package/dist/showcase/assets/{heart-BwvHCA-d.js → heart-B4fOMIr6.js} +1 -1
  262. package/dist/showcase/assets/{hooks-A_AQLIRZ.js → hooks-DtMOMalj.js} +6 -3
  263. package/dist/showcase/assets/{house-opqNxOmP.js → house-hebmAxEE.js} +1 -1
  264. package/dist/showcase/assets/{icon-badge-ognVhKWR.js → icon-badge-DrZ5qGpa.js} +1 -1
  265. package/dist/showcase/assets/{icon-badge-CsG95J1Z.js → icon-badge-JEug_P_U.js} +1 -1
  266. package/dist/showcase/assets/{image-apDSlTAx.js → image-CxNywgkb.js} +1 -1
  267. package/dist/showcase/assets/{inbox-WrbeTKEw.js → inbox-DqAmGdDd.js} +1 -1
  268. package/dist/showcase/assets/index-DujM0kEF.css +2 -0
  269. package/dist/showcase/assets/{index-QESvAJrb.js → index-jD-KSiHu.js} +2 -2
  270. package/dist/showcase/assets/inertValue-Dg9TwvOb.js +1 -0
  271. package/dist/showcase/assets/{info-C3G9KRCx.js → info-B5fZn_ZC.js} +1 -1
  272. package/dist/showcase/assets/{inline-stat-CO01t7SJ.js → inline-stat-CklKufoA.js} +1 -1
  273. package/dist/showcase/assets/{inline-stat-BnjUqzDM.js → inline-stat-Dep7oHIi.js} +1 -1
  274. package/dist/showcase/assets/{input-yYoqWQQ7.js → input-CkNgwwCs.js} +1 -1
  275. package/dist/showcase/assets/{input-CBJy1dMs.js → input-DAPMRlKO.js} +1 -1
  276. package/dist/showcase/assets/{input-group-CZyYSq4r.js → input-group-06D68uB6.js} +1 -1
  277. package/dist/showcase/assets/{input-group-Dfqufdp4.js → input-group-Bq9aXQPG.js} +1 -1
  278. package/dist/showcase/assets/{inputs-Bhw_FGDY.js → inputs-C8G3y-zR.js} +1 -1
  279. package/dist/showcase/assets/{installation-DnvS2ZUn.js → installation-BV5xOvoE.js} +1 -1
  280. package/dist/showcase/assets/{invoice-header-B9Ak8GXX.js → invoice-header-BcUxzT68.js} +1 -1
  281. package/dist/showcase/assets/{invoice-items-DY5zUZhE.js → invoice-items-B42Jfxl7.js} +1 -1
  282. package/dist/showcase/assets/{invoice-mini-BAryECEH.js → invoice-mini-RJGdlErg.js} +1 -1
  283. package/dist/showcase/assets/{invoice-table-BUvjee74.js → invoice-table--MdP6ysv.js} +1 -1
  284. package/dist/showcase/assets/isSameDay-srttAIjD.js +1 -0
  285. package/dist/showcase/assets/isToday-BPub5Zvi.js +1 -0
  286. package/dist/showcase/assets/{italic-CjQCLJci.js → italic-1BNA_XlU.js} +1 -1
  287. package/dist/showcase/assets/{item-DxPwk321.js → item-B9KyqUGa.js} +1 -1
  288. package/dist/showcase/assets/{item-D1Jxrpia.js → item-DoIlPm6J.js} +1 -1
  289. package/dist/showcase/assets/{item-BMSdEK3V.js → item-ffIfXEGd.js} +1 -1
  290. package/dist/showcase/assets/{kanban-DXWCGieQ.js → kanban-Cfad3edR.js} +1 -1
  291. package/dist/showcase/assets/{key-round-DpuhXiJQ.js → key-round-J11Zc216.js} +1 -1
  292. package/dist/showcase/assets/{label-D1wLK5nY.js → label-DqaB8ZB2.js} +1 -1
  293. package/dist/showcase/assets/{languages-CGYZVmbV.js → languages-D9UaP3QU.js} +1 -1
  294. package/dist/showcase/assets/{layers-DJZSVGAu.js → layers-QXZ9Jfej.js} +1 -1
  295. package/dist/showcase/assets/{layout-app-shell-UX63nzTO.js → layout-app-shell-CW1eRJmU.js} +1 -1
  296. package/dist/showcase/assets/{layout-auth-Bav5BBqp.js → layout-auth-j4K6lveg.js} +1 -1
  297. package/dist/showcase/assets/{layout-containers-DMHD2zdV.js → layout-containers-NclLtsV0.js} +1 -1
  298. package/dist/showcase/assets/{layout-header-CGesu_kM.js → layout-header-B8AOTiwL.js} +1 -1
  299. package/dist/showcase/assets/{layout-page-DHXu8SIv.js → layout-page-DM79QHyW.js} +1 -1
  300. package/dist/showcase/assets/{layout-primitives-CokzGwd2.js → layout-primitives-Dyop-WMt.js} +1 -1
  301. package/dist/showcase/assets/{layout-sidebar-CLUYajcu.js → layout-sidebar-uBNaHqjD.js} +1 -1
  302. package/dist/showcase/assets/{layout-users-DHUNAnFA.js → layout-users-BkhDiOOz.js} +1 -1
  303. package/dist/showcase/assets/{layout-workspace-y0v2FpDW.js → layout-workspace-C2hSimZW.js} +1 -1
  304. package/dist/showcase/assets/{lib-g_kR7X9Z.js → lib-CDssULuD.js} +1 -1
  305. package/dist/showcase/assets/{list-checks-CXt8visd.js → list-checks-DA2jqXdm.js} +1 -1
  306. package/dist/showcase/assets/{lock-CpZ5kLUd.js → lock-BDZLNQLR.js} +1 -1
  307. package/dist/showcase/assets/{lock-keyhole-Cy2raRO6.js → lock-keyhole-CWYENd9O.js} +1 -1
  308. package/dist/showcase/assets/{mail-Cj6uT4TA.js → mail-CCdaRmft.js} +1 -1
  309. package/dist/showcase/assets/{mail-check-Di70bdf6.js → mail-check-DZF1VbCX.js} +1 -1
  310. package/dist/showcase/assets/{map-DMXbG_04.js → map-CDFEmmZH.js} +3 -3
  311. package/dist/showcase/assets/{map-pin-EKhu7vEj.js → map-pin-CdV-R6nt.js} +1 -1
  312. package/dist/showcase/assets/{media-library-Dnp9S0oW.js → media-library-BJyn1s9d.js} +1 -1
  313. package/dist/showcase/assets/{mention-inline-suggestions-Bp-fVNYF.js → mention-inline-suggestions-DPO6FhXx.js} +1 -1
  314. package/dist/showcase/assets/{mentions-DNRk30XZ.js → mentions-DtWHbcS6.js} +1 -1
  315. package/dist/showcase/assets/{menus-DFURb5VL.js → menus-BmjngFE4.js} +1 -1
  316. package/dist/showcase/assets/{message-square-DG0qIsG_.js → message-square-bM29txT3.js} +1 -1
  317. package/dist/showcase/assets/{metadata-list-Cb1DQd4S.js → metadata-list-DvYTAJri.js} +1 -1
  318. package/dist/showcase/assets/metadata-list-xVUTVyy9.js +1 -0
  319. package/dist/showcase/assets/{metric-BkzIsP8H.js → metric-BPNCh4eA.js} +1 -1
  320. package/dist/showcase/assets/{metric-bar-CU73nx89.js → metric-bar-BX4sCMrM.js} +1 -1
  321. package/dist/showcase/assets/{metric-grid-BMLMbLjE.js → metric-grid-IyHP3nmU.js} +1 -1
  322. package/dist/showcase/assets/{metric-trend-chip-Dutl5uZo.js → metric-trend-chip-Dih8eR17.js} +1 -1
  323. package/dist/showcase/assets/{metrics-analytics-bar-AqG2oyIy.js → metrics-analytics-bar-DK16RNMs.js} +1 -1
  324. package/dist/showcase/assets/{metrics-analytics-cards-CrFHmR2f.js → metrics-analytics-cards-Byyl13YT.js} +1 -1
  325. package/dist/showcase/assets/{metrics-comparison-CY-DyLv7.js → metrics-comparison-DGHFMBL-.js} +1 -1
  326. package/dist/showcase/assets/{metrics-heatmap-BmX_CkiP.js → metrics-heatmap-Bl6C7i0j.js} +1 -1
  327. package/dist/showcase/assets/{metrics-inline-badge-C1IFjdJN.js → metrics-inline-badge-Bz79zbNK.js} +1 -1
  328. package/dist/showcase/assets/{metrics-kpi-row-8Kbn034e.js → metrics-kpi-row-DzZ9dRFY.js} +1 -1
  329. package/dist/showcase/assets/{metrics-micro-grid-CodO02yA.js → metrics-micro-grid-DyoQiuzr.js} +1 -1
  330. package/dist/showcase/assets/{metrics-overview-CdPqEAAG.js → metrics-overview-DoyHPEZw.js} +1 -1
  331. package/dist/showcase/assets/{metrics-stat-cards-Cw7UMWmb.js → metrics-stat-cards-B1b7NFqW.js} +1 -1
  332. package/dist/showcase/assets/minus-BE2L5hVc.js +1 -0
  333. package/dist/showcase/assets/{money-display-CFfUZLus.js → money-display-CXQ_8LfA.js} +1 -1
  334. package/dist/showcase/assets/{month-year-picker-ChVcYm9f.js → month-year-picker-ra8FEN8F.js} +1 -1
  335. package/dist/showcase/assets/{navigation-Boyt1q-1.js → navigation-CFfVZQJ1.js} +1 -1
  336. package/dist/showcase/assets/{navigation-CThYYxkL.js → navigation-Da0MVkqr.js} +1 -1
  337. package/dist/showcase/assets/{navigation-extras-CxLc-Mqx.js → navigation-extras-LpsdoXfx.js} +1 -1
  338. package/dist/showcase/assets/{onboarding-checklist-C15gqmFc.js → onboarding-checklist-DPNatNOk.js} +1 -1
  339. package/dist/showcase/assets/{overflow-tab-bar-B2Htn-Ft.js → overflow-tab-bar-C0vTzcEY.js} +1 -1
  340. package/dist/showcase/assets/{overlays-Cpj4akiw.js → overlays-Blmbun0J.js} +1 -1
  341. package/dist/showcase/assets/{overlays-CPZfp0nk.js → overlays-t0joc10Y.js} +1 -1
  342. package/dist/showcase/assets/{overview-BB-Xbkff.js → overview-Ckq8vbOR.js} +1 -1
  343. package/dist/showcase/assets/{package-DLn6nx-u.js → package-Cjod_a06.js} +1 -1
  344. package/dist/showcase/assets/{package-check-B0wyBUSU.js → package-check-JRHaNnkl.js} +1 -1
  345. package/dist/showcase/assets/{page-BPFNsNh7.js → page-9xr7xnuW.js} +1 -1
  346. package/dist/showcase/assets/page-action-button-BRXnfsEx.js +1 -0
  347. package/dist/showcase/assets/{page-header-BGqE9hzO.js → page-header-Bdlxfn_9.js} +1 -1
  348. package/dist/showcase/assets/{pagination-T4FmLNHn.js → pagination-CeaYhOvv.js} +1 -1
  349. package/dist/showcase/assets/{pagination-Be6ynLCp.js → pagination-DdZZHvNF.js} +1 -1
  350. package/dist/showcase/assets/{paperclip-B_kxXzSN.js → paperclip-BRM-yXTB.js} +1 -1
  351. package/dist/showcase/assets/{password-input-qfQ5eIU4.js → password-input-1FVEugoO.js} +1 -1
  352. package/dist/showcase/assets/{pencil-DlDLApli.js → pencil-DiG2dQ8F.js} +1 -1
  353. package/dist/showcase/assets/{phone-D8tvvbSQ.js → phone-BREyNZN-.js} +1 -1
  354. package/dist/showcase/assets/plus-CQcelTNc.js +1 -0
  355. package/dist/showcase/assets/{popover-Bu7aaPjE.js → popover-Czmwspmc.js} +1 -1
  356. package/dist/showcase/assets/{popover-menu-CD_JfEeq.js → popover-menu-beuCaiLt.js} +1 -1
  357. package/dist/showcase/assets/{popover-BsCx2XMI.js → popover-uqk7myG2.js} +1 -1
  358. package/dist/showcase/assets/{products-BzHX1ta0.js → products-DGNqIbLs.js} +1 -1
  359. package/dist/showcase/assets/{progress-jIJ_EIKE.js → progress-D76Df908.js} +1 -1
  360. package/dist/showcase/assets/{progress-CpW2ZGAy.js → progress-DjUprSDD.js} +1 -1
  361. package/dist/showcase/assets/{props-table-CCcohuyT.js → props-table-DoDq8Mvr.js} +1 -1
  362. package/dist/showcase/assets/{quote-Bc9eHVKi.js → quote-BvGGgyJ0.js} +1 -1
  363. package/dist/showcase/assets/{receipt-B77_VWtt.js → receipt-rgnlMgyi.js} +1 -1
  364. package/dist/showcase/assets/{receipt-text-BlL_TJsS.js → receipt-text-CBQrVlnU.js} +1 -1
  365. package/dist/showcase/assets/{refinement-guide-BpzOvT_R.js → refinement-guide-B_BpIMxm.js} +1 -1
  366. package/dist/showcase/assets/{refresh-cw-CELG4taF.js → refresh-cw-C-yHy6B7.js} +1 -1
  367. package/dist/showcase/assets/{resolveValueLabel-LRTUaJTb.js → resolveValueLabel-0bwEvIG-.js} +1 -1
  368. package/dist/showcase/assets/{resource-BT8_ck3n.js → resource-8f61BZ8t.js} +1 -1
  369. package/dist/showcase/assets/{resource-C7J3yZp6.js → resource-BEh6R0gu.js} +1 -1
  370. package/dist/showcase/assets/{resource-selector-card-Ay8ImvKg.js → resource-selector-card-DJwXY_Ms.js} +1 -1
  371. package/dist/showcase/assets/{rich-text-editor-CdGVvtsm.js → rich-text-editor-D433iv0N.js} +1 -1
  372. package/dist/showcase/assets/{rich-text-editor-DVtTVuZ6.js → rich-text-editor-vTRfWsOK.js} +1 -1
  373. package/dist/showcase/assets/rotate-ccw-JuE4H14F.js +1 -0
  374. package/dist/showcase/assets/{route-CgBh1oKF.js → route-eSu1bFNn.js} +1 -1
  375. package/dist/showcase/assets/{save-BFsAGR7O.js → save-Bpjj-rBP.js} +1 -1
  376. package/dist/showcase/assets/{schema-form-CaF-lBkN.js → schema-form-DmOpxd96.js} +1 -1
  377. package/dist/showcase/assets/{scroll-area-CpDi_6FP.js → scroll-area-B9OdCBy9.js} +1 -1
  378. package/dist/showcase/assets/{scroll-area-BkZULoZA.js → scroll-area-BH80l2As.js} +1 -1
  379. package/dist/showcase/assets/{section-D-N8Ze16.js → section-BPNIPavy.js} +1 -1
  380. package/dist/showcase/assets/{select-ReMZs8K6.js → select-BauiG1a3.js} +1 -1
  381. package/dist/showcase/assets/{select-C9Mfb_Gj.js → select-CPopSr5c.js} +1 -1
  382. package/dist/showcase/assets/{send-C6PbwpHN.js → send-DNCcBKXs.js} +1 -1
  383. package/dist/showcase/assets/{separator-CywPSoE0.js → separator-BK0beCOv.js} +1 -1
  384. package/dist/showcase/assets/{separator-Ha9YxI2x.js → separator-CKM9A-mm.js} +1 -1
  385. package/dist/showcase/assets/{settings-2-CVq5Uyv5.js → settings-2-B8fz7JZB.js} +1 -1
  386. package/dist/showcase/assets/{settings-DkTHc0Ob.js → settings-Cy2y3sQw.js} +1 -1
  387. package/dist/showcase/assets/{sheet-k-P0gWlk.js → sheet-C7VWkXE1.js} +1 -1
  388. package/dist/showcase/assets/{shield-Cme7_JJR.js → shield-ClPev4gS.js} +1 -1
  389. package/dist/showcase/assets/{shield-alert-CxV0S5w0.js → shield-alert-6XO5YZ5u.js} +1 -1
  390. package/dist/showcase/assets/{shield-check-BW_7p6Xf.js → shield-check-DSfGVZq0.js} +1 -1
  391. package/dist/showcase/assets/{shopping-bag-CoR8AMYU.js → shopping-bag-DzMrGvpF.js} +1 -1
  392. package/dist/showcase/assets/{showcase-m3FzbvoC.js → showcase-DuZaO6q9.js} +1 -1
  393. package/dist/showcase/assets/{sidebar-bz_FzvjM.js → sidebar-7y9EQYWf.js} +1 -1
  394. package/dist/showcase/assets/{sidebar.context-BWMPnGn6.js → sidebar.context-DUheJD8t.js} +1 -1
  395. package/dist/showcase/assets/{skeleton-BJMnQDgf.js → skeleton-Dgr8Vabr.js} +1 -1
  396. package/dist/showcase/assets/{skeleton-DoWW5XZD.js → skeleton-HSpErFqw.js} +1 -1
  397. package/dist/showcase/assets/{slider-BH1Gtp_p.js → slider-B7f81APg.js} +1 -1
  398. package/dist/showcase/assets/{smart-card-C6-idFYI.js → smart-card-p97LLZCW.js} +1 -1
  399. package/dist/showcase/assets/{sonner-CGZ3FC4U.js → sonner-CWazrN19.js} +1 -1
  400. package/dist/showcase/assets/{sortable.esm-CE0TA9V_.js → sortable.esm-uufol7Mz.js} +1 -1
  401. package/dist/showcase/assets/{sparkles-8yQFcmte.js → sparkles-Z4V23xKK.js} +1 -1
  402. package/dist/showcase/assets/{spinner-CNveVfOr.js → spinner-BUgjAjWE.js} +1 -1
  403. package/dist/showcase/assets/{spinner-CO8LjtjY.js → spinner-CXu7z8-j.js} +1 -1
  404. package/dist/showcase/assets/{spinner-BYUX0luk.js → spinner-DCwR0mnD.js} +1 -1
  405. package/dist/showcase/assets/{square-pen-CWylvezY.js → square-pen-jwp_OWMQ.js} +1 -1
  406. package/dist/showcase/assets/{stacked-avatars-DiNA5OJK.js → stacked-avatars-CHEpTotO.js} +1 -1
  407. package/dist/showcase/assets/{star-t53uwwyp.js → star-Ck8Lg5hm.js} +1 -1
  408. package/dist/showcase/assets/startOfDay-BzULZHy4.js +1 -0
  409. package/dist/showcase/assets/{styles-CwpnwrEQ.js → styles-CNYitflH.js} +1 -1
  410. package/dist/showcase/assets/{suggestions-CvxZxsmc.js → suggestions-CSF9MlKl.js} +1 -1
  411. package/dist/showcase/assets/{switch-CewkokYT.js → switch-BX9KSLIF.js} +1 -1
  412. package/dist/showcase/assets/{switch-D-7uqDR8.js → switch-Bn0WaWa9.js} +1 -1
  413. package/dist/showcase/assets/{sync-DnBSRAwH.js → sync-BuKBnqWW.js} +1 -1
  414. package/dist/showcase/assets/{table-3cUcSCBR.js → table-DNJcLaud.js} +42 -20
  415. package/dist/showcase/assets/{table-ds5oNU0h.js → table-NfpOWGsG.js} +1 -1
  416. package/dist/showcase/assets/{table-actions-CrujG5R-.js → table-actions-Ci9Yszp0.js} +1 -1
  417. package/dist/showcase/assets/{tabs-C-hJfSn5.js → tabs-CYNFQdIr.js} +1 -1
  418. package/dist/showcase/assets/{tabs-GG911oaV.js → tabs-Cm_p6znb.js} +1 -1
  419. package/dist/showcase/assets/{tags-input-DBeIaeVn.js → tags-input-DE4QZqS_.js} +1 -1
  420. package/dist/showcase/assets/{text-button-EZojp9Ye.js → text-button-D9llh4pU.js} +1 -1
  421. package/dist/showcase/assets/{text-link-DcKeYjEX.js → text-link-ZT6QGJOL.js} +1 -1
  422. package/dist/showcase/assets/{textarea-DgNgSl1g.js → textarea-CgcHuGVq.js} +1 -1
  423. package/dist/showcase/assets/{textarea-PXKZSiRa.js → textarea-D2uT_GJt.js} +1 -1
  424. package/dist/showcase/assets/{timelines-CaF_Ze8z.js → timelines-BEFO7tJ0.js} +1 -1
  425. package/dist/showcase/assets/{toggle-group-D_iuhL1G.js → toggle-group-oYpa59lN.js} +1 -1
  426. package/dist/showcase/assets/{toggles-BKaayRmE.js → toggles-BL93YmQo.js} +1 -1
  427. package/dist/showcase/assets/{toggles-group-DRAksOw2.js → toggles-group-BG-xiQCY.js} +1 -1
  428. package/dist/showcase/assets/{tooltip-B_LnC5D2.js → tooltip-BMI7zHwP.js} +1 -1
  429. package/dist/showcase/assets/{trash-2-DhUpICQq.js → trash-2-CtRtVsCy.js} +1 -1
  430. package/dist/showcase/assets/trending-up-2NQ-P8vB.js +1 -0
  431. package/dist/showcase/assets/{truck-D6SGLjv1.js → truck-Cl0nyN_j.js} +1 -1
  432. package/dist/showcase/assets/{typography-qEz6MMn9.js → typography-C7pCPhg7.js} +1 -1
  433. package/dist/showcase/assets/{ui-badge-BA334hdB.js → ui-badge-BvmuMzSq.js} +1 -1
  434. package/dist/showcase/assets/{ui-card-CjqUyGvB.js → ui-card-B7ziOMAn.js} +1 -1
  435. package/dist/showcase/assets/{ui-table-cDgI6WMk.js → ui-table-BEFHakBU.js} +1 -1
  436. package/dist/showcase/assets/{upload-tray-BcA-7pqW.js → upload-tray-CMKqTtEp.js} +1 -1
  437. package/dist/showcase/assets/{use-layout-link-DIUWH-oo.js → use-layout-link-nEU6ctSs.js} +1 -1
  438. package/dist/showcase/assets/{useAnchoredPopupScrollLock-BavpibMb.js → useAnchoredPopupScrollLock-B1xyKMh7.js} +1 -1
  439. package/dist/showcase/assets/{useAriaLabelledBy-HDEJjv0f.js → useAriaLabelledBy-BMlFgz-H.js} +1 -1
  440. package/dist/showcase/assets/{useCollapsiblePanel-CL0pCuxO.js → useCollapsiblePanel-BEzH6TC2.js} +1 -1
  441. package/dist/showcase/assets/{useCompositeItem-LkMSD9DW.js → useCompositeItem-CIuww7-p.js} +1 -1
  442. package/dist/showcase/assets/{useCompositeListItem-C_oLUvf8.js → useCompositeListItem-PrMTh4tz.js} +1 -1
  443. package/dist/showcase/assets/{useLabelableId-DDpjUdIO.js → useLabelableId-BBLkeLGr.js} +1 -1
  444. package/dist/showcase/assets/{useOpenInteractionType-DQOSh-Eu.js → useOpenInteractionType-CW0quo3l.js} +1 -1
  445. package/dist/showcase/assets/useRender-6NNMHJJU.js +1 -0
  446. package/dist/showcase/assets/{useTriggerFocusGuards-BPFrAxlp.js → useTriggerFocusGuards-DEza_iee.js} +1 -1
  447. package/dist/showcase/assets/{useValueChanged-lYlHqRM1.js → useValueChanged-BmWIb3SN.js} +1 -1
  448. package/dist/showcase/assets/user-BDIP5UPS.js +1 -0
  449. package/dist/showcase/assets/{user-plus-B1Pi7SNv.js → user-plus-BCqHFh2h.js} +1 -1
  450. package/dist/showcase/assets/{users-DAlxvktS.js → users-Bh7xGRX2.js} +1 -1
  451. package/dist/showcase/assets/{vendor-profile-ClJ6G6SO.js → vendor-profile-BlYcRbPI.js} +1 -1
  452. package/dist/showcase/assets/{video-DxooIkh-.js → video-BucshqNW.js} +1 -1
  453. package/dist/showcase/assets/{wrench-BiwmotMF.js → wrench-DQvhyTEb.js} +1 -1
  454. package/dist/showcase/assets/x-DyuS4YRT.js +1 -0
  455. package/dist/showcase/assets/{zap-a90eC6iO.js → zap-Dpn8_pnQ.js} +1 -1
  456. package/dist/showcase/index.html +2 -2
  457. package/dist/style.css +1 -1
  458. package/package.json +1 -1
  459. package/dist/_shared/cards-BKFwMTjM.cjs +0 -2
  460. package/dist/_shared/cards-BKFwMTjM.cjs.map +0 -1
  461. package/dist/_shared/cards-CtBoSZG9.js.map +0 -1
  462. package/dist/_shared/overlays-CdtMAkKG.js.map +0 -1
  463. package/dist/_shared/overlays-Diy_H0Au.cjs +0 -2
  464. package/dist/_shared/overlays-Diy_H0Au.cjs.map +0 -1
  465. package/dist/_shared/table-CUA_A-oO.js.map +0 -1
  466. package/dist/_shared/table-mPchjiRn.cjs +0 -2
  467. package/dist/_shared/table-mPchjiRn.cjs.map +0 -1
  468. package/dist/showcase/assets/arrow-down-BttnoDxP.js +0 -1
  469. package/dist/showcase/assets/arrow-left-B1kFGJ8v.js +0 -1
  470. package/dist/showcase/assets/arrow-right-Md96ra7v.js +0 -1
  471. package/dist/showcase/assets/arrow-up-B9e9cP-q.js +0 -1
  472. package/dist/showcase/assets/arrow-up-right-BOHJNdrp.js +0 -1
  473. package/dist/showcase/assets/card-primitives-CiU5lL3a.js +0 -1
  474. package/dist/showcase/assets/checkbox-Qhh92dbS.js +0 -1
  475. package/dist/showcase/assets/chevron-down-BqrI6QzQ.js +0 -1
  476. package/dist/showcase/assets/chevron-left-TJKYH3rG.js +0 -1
  477. package/dist/showcase/assets/chevron-up-CPuAmh-d.js +0 -1
  478. package/dist/showcase/assets/chevrons-up-down-DZB44PVY.js +0 -1
  479. package/dist/showcase/assets/circle-CY0DkTje.js +0 -1
  480. package/dist/showcase/assets/circle-check-BkFKejsY.js +0 -1
  481. package/dist/showcase/assets/circle-check-big-vu3Znqdx.js +0 -1
  482. package/dist/showcase/assets/circle-dot-CsBIkbEH.js +0 -1
  483. package/dist/showcase/assets/clock-3-mhWDhdka.js +0 -1
  484. package/dist/showcase/assets/clock-Dd-urPd2.js +0 -1
  485. package/dist/showcase/assets/index-CCxHwV7T.css +0 -2
  486. package/dist/showcase/assets/inertValue-DrANZiJk.js +0 -1
  487. package/dist/showcase/assets/isSameDay-DVP1ae2V.js +0 -1
  488. package/dist/showcase/assets/isToday-CNAQB-p9.js +0 -1
  489. package/dist/showcase/assets/metadata-list-BhlsEWYT.js +0 -1
  490. package/dist/showcase/assets/minus-B1es6KJX.js +0 -1
  491. package/dist/showcase/assets/page-action-button-DMS8Vcmz.js +0 -1
  492. package/dist/showcase/assets/plus-BkhJjfUv.js +0 -1
  493. package/dist/showcase/assets/rotate-ccw-MwEZ1b11.js +0 -1
  494. package/dist/showcase/assets/startOfDay-BKFJecZ3.js +0 -1
  495. package/dist/showcase/assets/trending-up-Kfm5l65O.js +0 -1
  496. package/dist/showcase/assets/useRender-CnmFaF3Y.js +0 -1
  497. package/dist/showcase/assets/user-DLuRcjl0.js +0 -1
  498. package/dist/showcase/assets/x-idpnOHil.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays-Du65iCkx.cjs","names":[],"sources":["../../src/components/features/overlays/hooks/use-native-dialog.ts","../../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/dialog.tsx","../../src/components/features/overlays/drawer.tsx","../../src/components/features/overlays/alert-dialog.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type RefObject,\n} from 'react';\n\nexport interface UseNativeDialogOptions {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onClose?: () => void;\n closeOnEscape?: boolean;\n closeOnBackdropClick?: boolean;\n initialFocusRef?: RefObject<HTMLElement>;\n}\n\nexport interface UseNativeDialogReturn {\n dialogRef: RefObject<HTMLDialogElement | null>;\n isOpen: boolean;\n isClosing: boolean;\n openDialog: () => void;\n closeDialog: () => void;\n toggleDialog: () => void;\n dialogProps: {\n ref: RefObject<HTMLDialogElement | null>;\n open: boolean;\n onKeyDown: (e: React.KeyboardEvent<HTMLDialogElement>) => void;\n };\n handleBackdropClick: () => void;\n}\n\nconst ANIMATION_TIMEOUT_MS = 350;\n\nlet bodyScrollLockCount = 0;\n\n/**\n * Lock body scroll using a CSS-class-based approach.\n *\n * Uses a `data-overlay-scroll-locked` attribute on `<html>` combined with a\n * CSS rule (`html[data-overlay-scroll-locked] body { overflow: hidden }`)\n * instead of directly manipulating `body.style.overflow`.\n *\n * This avoids a conflict with @base-ui's own `SCROLL_LOCKER` singleton (used\n * by Select, Combobox, etc.) which independently saves and restores inline\n * body styles. When both systems saved/restored the same inline property,\n * unlocking in the wrong order left `overflow: hidden` permanently on the body.\n */\nfunction lockBodyScroll(): () => void {\n if (bodyScrollLockCount === 0) {\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.setProperty(\n '--overlay-scrollbar-width',\n `${scrollbarWidth}px`,\n );\n document.documentElement.setAttribute(\n 'data-overlay-scroll-locked',\n '',\n );\n }\n\n bodyScrollLockCount += 1;\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n\n released = true;\n bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);\n\n if (bodyScrollLockCount > 0) {\n return;\n }\n\n document.documentElement.removeAttribute('data-overlay-scroll-locked');\n document.body.style.removeProperty('--overlay-scrollbar-width');\n };\n}\n\nexport function useNativeDialog({\n open: controlledOpen,\n onOpenChange,\n onClose,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n initialFocusRef,\n}: UseNativeDialogOptions = {}): UseNativeDialogReturn {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [internalOpen, setInternalOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const unlockScrollRef = useRef<(() => void) | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const animationListenerRef = useRef<(() => void) | null>(null);\n const focusRafRef = useRef<number | null>(null);\n const finishCloseHandledRef = useRef(false);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Refs track the latest values so closeDialog can bail out from stale\n // closures (e.g. when useOverlayActions.handleConfirm awaits an async\n // operation while the action store already sets isOpen=false or while\n // a prior closeDialog call already set isClosing=true).\n const isOpenRef = useRef(isOpen);\n isOpenRef.current = isOpen;\n\n const isClosingRef = useRef(isClosing);\n isClosingRef.current = isClosing;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n\n if (!nextOpen) {\n onClose?.();\n }\n },\n [isControlled, onOpenChange, onClose],\n );\n\n const cleanupAnimation = useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n if (animationListenerRef.current) {\n animationListenerRef.current();\n animationListenerRef.current = null;\n }\n }, []);\n\n const finishClose = useCallback(() => {\n cleanupAnimation();\n\n // Mark that finishClose handled this close cycle so the safety-net\n // useEffect doesn't interfere with a redundant cleanup pass.\n finishCloseHandledRef.current = true;\n\n // CRITICAL: Release the scroll lock BEFORE calling setOpen, which\n // invokes external callbacks (onOpenChange, onClose) that may throw.\n const unlock = unlockScrollRef.current;\n unlockScrollRef.current = null;\n\n const prevFocus = previousActiveElementRef.current;\n previousActiveElementRef.current = null;\n\n try {\n unlock?.();\n } catch {\n // Scroll unlock must never propagate.\n }\n\n // Notify parent first — this triggers onOpenChange(false) which updates\n // the controlled open prop. Do NOT remove the .closing class or clear\n // isClosing before this: removing .closing reverts the dialog to its\n // entry animation CSS for one frame before React unmounts, causing a flash.\n try {\n setOpen(false);\n } catch {\n // If onOpenChange / onClose throws we still need to restore focus.\n }\n\n // Now safe to clear — React will unmount the portal on the next render,\n // so the .closing class removal is cosmetic (element is about to be removed).\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n\n try {\n prevFocus?.focus();\n } catch {\n // focus() on a disconnected node can throw in some browsers.\n }\n }, [cleanupAnimation, setOpen]);\n\n const openDialog = useCallback(() => {\n // Use refs (always fresh) instead of closure-captured values so that\n // stale references from trigger cloneElement or external callers\n // cannot bypass the guard.\n if (isOpenRef.current || isClosingRef.current) return;\n\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n unlockScrollRef.current = lockBodyScroll();\n\n setOpen(true);\n\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n }, [setOpen, initialFocusRef]);\n\n const closeDialog = useCallback(() => {\n const dialog = dialogRef.current;\n // Use isOpenRef and isClosingRef (always fresh) instead of closure-\n // captured values so that stale closures from useOverlayActions\n // (which await async confirm while the action store or a prior\n // closeDialog call already changed state) correctly bail out instead\n // of starting a duplicate close animation.\n if (!dialog || !isOpenRef.current || isClosingRef.current) return;\n\n setIsClosing(true);\n dialog.classList.add('closing');\n\n // Force reflow so the browser picks up the new class before we read computed style\n void dialog.offsetHeight;\n\n const hasAnimation =\n getComputedStyle(dialog).animationName !== 'none';\n\n if (hasAnimation) {\n const handleAnimationEnd = () => {\n finishClose();\n };\n\n dialog.addEventListener('animationend', handleAnimationEnd, {\n once: true,\n });\n\n // Store cleanup function for unmount safety\n animationListenerRef.current = () => {\n dialog.removeEventListener(\n 'animationend',\n handleAnimationEnd,\n );\n };\n\n // Timeout fallback in case animationend never fires\n closeTimeoutRef.current = setTimeout(() => {\n finishClose();\n }, ANIMATION_TIMEOUT_MS);\n } else {\n finishClose();\n }\n }, [finishClose]);\n\n const toggleDialog = useCallback(() => {\n if (isOpen) {\n closeDialog();\n } else {\n openDialog();\n }\n }, [isOpen, openDialog, closeDialog]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDialogElement>) => {\n if (e.key === 'Escape' && closeOnEscape) {\n e.preventDefault();\n e.stopPropagation();\n closeDialog();\n }\n },\n [closeOnEscape, closeDialog],\n );\n\n const handleBackdropClick = useCallback(() => {\n if (closeOnBackdropClick) {\n closeDialog();\n }\n }, [closeOnBackdropClick, closeDialog]);\n\n // Sync controlled open state → lock scroll + focus\n useEffect(() => {\n if (isOpen && !isClosing) {\n if (!previousActiveElementRef.current) {\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n }\n\n if (!unlockScrollRef.current) {\n unlockScrollRef.current = lockBodyScroll();\n }\n\n // Cancel any pending focus rAF (e.g. from openDialog) before\n // scheduling a new one, preventing duplicate focus calls.\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n }\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n } else if (!isOpen) {\n // If finishClose already handled this close cycle, skip the\n // safety-net to avoid a redundant cleanup pass that would cause\n // a flash (clearing isClosing in a separate render).\n if (finishCloseHandledRef.current) {\n finishCloseHandledRef.current = false;\n\n return;\n }\n\n // Safety net for the controlled-close path where closeDialog()\n // is never called directly (e.g. action store sets isOpen=false).\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n\n if (isClosing) {\n cleanupAnimation();\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n }\n\n if (previousActiveElementRef.current) {\n try {\n previousActiveElementRef.current.focus();\n } catch {\n // focus() on a disconnected node — ignore\n }\n previousActiveElementRef.current = null;\n }\n }\n\n return () => {\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n };\n }, [isOpen, isClosing, initialFocusRef, cleanupAnimation]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanupAnimation();\n\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n };\n }, [cleanupAnimation]);\n\n return {\n dialogRef,\n isOpen,\n isClosing,\n openDialog,\n closeDialog,\n toggleDialog,\n dialogProps: {\n ref: dialogRef,\n open: isOpen,\n onKeyDown: handleKeyDown,\n },\n handleBackdropClick,\n };\n}\n","/**\n * Default user-facing strings shared by `<Dialog>`, `<Drawer>`, and\n * `<AlertDialog>` overlays.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <Dialog strings={{ confirm: t('common.confirm') }} … />\n */\n\nexport interface OverlayStrings {\n\tconfirm: string;\n\tcancel: string;\n\tclose: string;\n\tloading: string;\n}\n\nexport const defaultOverlayStrings: OverlayStrings = {\n\tconfirm: 'Confirm',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n\nexport const defaultAlertDialogStrings: OverlayStrings = {\n\tconfirm: 'Continue',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n","import { useCallback, useMemo, 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\tButtonVariant,\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| 'confirmVariant'\n\t\t| 'isLoading'\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. Library DEV-logs the error;\n\t * consumer wires telemetry. */\n\tonError?: (error: unknown) => void;\n}\n\nexport interface UseOverlayActionsReturn {\n\tstrings: OverlayStrings;\n\tisExecuting: boolean;\n\thandleConfirm: () => Promise<void>;\n\thandleCancel: () => void;\n\tfinalConfirmVariant: ButtonVariant;\n\tconfirmButtonOnClick: (() => Promise<void>) | undefined;\n\teffectiveLoading: boolean;\n}\n\nexport function useOverlayActions({\n\tcloseDialog,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tisLoading = false,\n\tformId,\n\tonCancel,\n\tcustomStrings,\n\temphasis = false,\n\ttone = 'default',\n\tonError,\n}: UseOverlayActionsOptions): UseOverlayActionsReturn {\n\tconst strings = useStrings(defaultOverlayStrings, customStrings);\n\n\tconst [isExecuting, setIsExecuting] = useState(false);\n\n\tconst handleConfirm = useCallback(async () => {\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\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\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.error('Overlay async confirm failed:', error);\n\t\t\t\t}\n\t\t\t\tonError?.(error);\n\t\t\t} finally {\n\t\t\t\tsetIsExecuting(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcloseDialog();\n\t}, [onConfirm, onAsyncConfirm, closeOnAsyncComplete, closeDialog, onError]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tonCancel?.();\n\t\tcloseDialog();\n\t}, [onCancel, closeDialog]);\n\n\tconst handleFormSubmit = useCallback(async () => {\n\t\tif (!formId) {\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]);\n\n\tconst finalConfirmVariant = useMemo<ButtonVariant>(() => {\n\t\tif (!emphasis) return confirmVariant ?? 'primary';\n\t\tif (tone === 'error') return 'error';\n\t\tif (tone === 'warning') return 'warning';\n\t\tif (tone === 'success') return 'success';\n\t\treturn confirmVariant ?? 'primary';\n\t}, [emphasis, tone, confirmVariant]);\n\n\tconst confirmButtonOnClick = formId ? handleFormSubmit : handleConfirm;\n\n\treturn {\n\t\tstrings,\n\t\tisExecuting,\n\t\thandleConfirm,\n\t\thandleCancel,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading: isExecuting || isLoading,\n\t};\n}\n","import {\n\tuseCallback,\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\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n}\n\nexport interface UseOverlayVisibilityOptions {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tonOpen?: () => void;\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\tdefaultOpen?: Partial<Record<TKey, boolean>>;\n\topen?: Partial<Record<TKey, boolean>>;\n\tonOpenChange?: (\n\t\tkey: TKey,\n\t\topen: boolean,\n\t\tstate: OverlayVisibilityGroupState<TKey>,\n\t) => void;\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\topenRef.current = open;\n\n\tconst setOpen = useCallback<OverlayOpenSetter>(\n\t\t(nextOpen) => {\n\t\t\tconst resolvedOpen = resolveOpenValue(nextOpen, openRef.current);\n\t\t\tconst changed = openRef.current !== resolvedOpen;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(resolvedOpen);\n\t\t\t}\n\n\t\t\tif (!changed) return;\n\n\t\t\topenRef.current = resolvedOpen;\n\t\t\tonOpenChange?.(resolvedOpen);\n\t\t\tif (resolvedOpen) {\n\t\t\t\tonOpen?.();\n\t\t\t} else {\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t},\n\t\t[isControlled, onClose, onOpen, 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\tstateRef.current = 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\tconst changed = hasGroupStateChanged(previousState, nextState, keyList);\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(nextState);\n\t\t\t}\n\n\t\t\tif (!changed) return;\n\n\t\t\tstateRef.current = nextState;\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 {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DialogProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst SIZE_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; classes: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\t\tclasses: '',\n\t},\n\terror: {\n\t\ticon: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\t\tclasses: 'border-destructive/50',\n\t},\n\twarning: {\n\t\ticon: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\t\tclasses: 'border-warning/50',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"text-info h-5 w-5\" />,\n\t\tclasses: 'border-info/50',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"text-success h-5 w-5\" />,\n\t\tclasses: 'border-success/50',\n\t},\n};\n\nfunction DialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tsize = 'lg',\n\ttrigger,\n}: DialogProps) {\n\tconst dialogTitleId = useId();\n\tconst dialogDescriptionId = useId();\n\tconst ariaLabelledBy = title ? dialogTitleId : undefined;\n\tconst ariaDescribedBy = description ? dialogDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showCancel || showConfirm || footer;\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'dialog--component relative z-10 m-0 p-0',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'max-h-[90vh] w-full',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tSIZE_CLASSES[size],\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\temphasis && toneStyles.classes,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\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\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-3 top-3 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tshowIcon && 'items-start',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"pr-6\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description\n\t\t\t\t\t\t\t\t\t\t\t? visuallyHideHeader\n\t\t\t\t\t\t\t\t\t\t\t\t? 'py-6'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'pb-6'\n\t\t\t\t\t\t\t\t\t\t\t: 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Dialog = memo(DialogImpl);\nDialog.displayName = 'Dialog';\n","import {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DrawerDirection, DrawerProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst WIDTH_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst DIRECTION_STYLES: Record<\n\tDrawerDirection,\n\t{ position: string; size: string; animation: string; rounded: string }\n> = {\n\tright: {\n\t\tposition: 'fixed top-0 right-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-right duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-right [&.closing]:duration-200',\n\t\trounded: 'rounded-l-xl',\n\t},\n\tleft: {\n\t\tposition: 'fixed top-0 left-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-left duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-left [&.closing]:duration-200',\n\t\trounded: 'rounded-r-xl',\n\t},\n\ttop: {\n\t\tposition: 'fixed top-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-top duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-top [&.closing]:duration-200',\n\t\trounded: 'rounded-b-xl',\n\t},\n\tbottom: {\n\t\tposition: 'fixed bottom-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-bottom duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-bottom [&.closing]:duration-200',\n\t\trounded: 'rounded-t-xl',\n\t},\n};\n\nconst TONE_ICONS: Record<OverlayTone, ReactNode> = {\n\tdefault: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\terror: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\twarning: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\tinfo: <Info className=\"text-info h-5 w-5\" />,\n\tsuccess: <CheckCircle className=\"text-success h-5 w-5\" />,\n};\n\nfunction DrawerImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tdirection = 'right',\n\twidth = 'lg',\n\tshowFooter = true,\n\ttrigger,\n}: DrawerProps) {\n\tconst drawerTitleId = useId();\n\tconst drawerDescriptionId = useId();\n\tconst ariaLabelledBy = title ? drawerTitleId : undefined;\n\tconst ariaDescribedBy = description ? drawerDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst directionStyles = DIRECTION_STYLES[direction];\n\tconst isHorizontal = direction === 'left' || direction === 'right';\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showFooter && (showCancel || showConfirm || footer);\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-300',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-300',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'drawer--component inset-auto m-0 p-0',\n\t\t\t\t\t\t\t\tdirectionStyles.position,\n\t\t\t\t\t\t\t\tdirectionStyles.size,\n\t\t\t\t\t\t\t\t'border shadow-xl',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\tdirectionStyles.rounded,\n\t\t\t\t\t\t\t\tisHorizontal && 'w-full',\n\t\t\t\t\t\t\t\tisHorizontal && WIDTH_CLASSES[width],\n\t\t\t\t\t\t\t\t!isHorizontal && 'max-h-[85vh]',\n\t\t\t\t\t\t\t\tdirectionStyles.animation,\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\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\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-4 top-4 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex items-start gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{TONE_ICONS[tone]}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1 pr-6\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description ? 'pb-6' : 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Drawer = memo(DrawerImpl);\nDrawer.displayName = 'Drawer';\n","import { AlertCircle, AlertTriangle, CheckCircle, HelpCircle, Info } from 'lucide-react';\nimport React, {\n\tcloneElement,\n\tisValidElement,\n\tmemo,\n\tuseId,\n\tuseMemo,\n\ttype ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport { defaultAlertDialogStrings } from './overlays.strings';\nimport type { AlertDialogProps, OverlayTone } from './overlays.types';\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; iconColor: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-muted-foreground',\n\t},\n\terror: { icon: <AlertCircle className=\"h-6 w-6\" />, iconColor: 'text-destructive' },\n\twarning: {\n\t\ticon: <AlertTriangle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-warning',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-info',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-success',\n\t},\n};\n\nfunction AlertDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = false,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant,\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\ttone = 'default',\n\tshowIcon = true,\n\talertMessage,\n\ttrigger,\n\tdestructive = false,\n}: AlertDialogProps) {\n\tconst alertTitleId = useId();\n\tconst alertDescriptionId = useId();\n\tconst ariaLabelledBy = title ? alertTitleId : undefined;\n\tconst ariaDescribedBy = description ? alertDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst mergedStrings = useStrings(defaultAlertDialogStrings, customStrings);\n\n\tconst resolvedConfirmVariant = useMemo(() => {\n\t\tif (destructive) return 'error' as const;\n\t\tif (confirmVariant) return confirmVariant;\n\t\tconst toneMap: Record<OverlayTone, string> = {\n\t\t\tdefault: 'primary',\n\t\t\terror: 'error',\n\t\t\twarning: 'warning',\n\t\t\tinfo: 'primary',\n\t\t\tsuccess: 'success',\n\t\t};\n\t\treturn toneMap[tone] as 'primary' | 'error' | 'warning' | 'success';\n\t}, [destructive, confirmVariant, tone]);\n\n\tconst { strings, confirmButtonOnClick, effectiveLoading, handleCancel } =\n\t\tuseOverlayActions({\n\t\t\tcloseDialog,\n\t\t\tonConfirm,\n\t\t\tonAsyncConfirm,\n\t\t\tcloseOnAsyncComplete,\n\t\t\tconfirmVariant: resolvedConfirmVariant,\n\t\t\tisLoading,\n\t\t\tformId,\n\t\t\tonCancel,\n\t\t\tcustomStrings: mergedStrings,\n\t\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'alert-dialog--component relative z-10 m-0 w-full max-w-md p-0',\n\t\t\t\t\t\t\t\t'max-h-[90vh] flex flex-col',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\trole=\"alertdialog\"\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex-1 overflow-auto p-6\">\n\t\t\t\t\t\t\t\t{!!showIcon && !visuallyHideHeader && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' && 'bg-destructive/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' && 'bg-warning/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' && 'bg-info/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' && 'bg-success/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' && 'bg-muted',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className={toneStyles.iconColor}>\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t\t<div className={cn(visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mt-4 rounded-md border p-3 text-left',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"p\">\n\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!children && (\n\t\t\t\t\t\t\t\t\t<div className={cn('mt-4', contentClassName)}>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{!!(showCancel || showConfirm || footer) && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={resolvedConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const AlertDialog = memo(AlertDialogImpl);\nAlertDialog.displayName = 'AlertDialog';\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/strings.cjs"),t=require("../lib/utils.cjs"),n=require("./button-Bd5bEIiB.cjs"),r=require("./buttons-C8jy-jMd.cjs"),i=require("./typography-CO9uwZhF.cjs"),a=require("./badge-BeSKxX1u.cjs"),o=require("./dropdown-menu-CHQzQWUK.cjs"),s=require("./separator-q42IlFFA.cjs"),c=require("./action-menu-B6yFRDz1.cjs"),l=require("./hooks-sfHAyDgD.cjs"),u=require("./content-container-CVUJCLhn.cjs");let d=require("react"),f=require("react/jsx-runtime"),p=require("lucide-react");var m={h1:`border-0 pb-0 text-xl`,h2:`border-0 pb-0 text-lg`,h3:`text-base`,h4:`text-sm`,h5:`text-sm`,h6:`text-sm`};function h({title:e,description:r,headingTag:o=`h3`,backHref:c,onBack:u,backLabel:d=`Back`,titleBadges:h=[],actions:g,slots:_,renderLink:v,LinkComponent:y,className:b,contentClassName:x,actionsClassName:S,titleClassName:C,descriptionClassName:w}){let T=l.d({renderLink:v,LinkComponent:y}),E=c||u?(0,f.jsxs)(`div`,{className:`flex items-center gap-1.5 pt-1`,children:[c&&!u?T({href:c,"aria-label":d,children:(0,f.jsxs)(n.t,{variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`h-7 w-7 rounded p-1`,children:[(0,f.jsx)(p.ArrowLeft,{className:`size-4`,"aria-hidden":`true`}),(0,f.jsx)(`span`,{className:`sr-only`,children:d})]})}):(0,f.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`h-7 w-7 rounded p-1`,onClick:u,"aria-label":d,children:(0,f.jsx)(p.ArrowLeft,{className:`size-4`,"aria-hidden":`true`})}),(0,f.jsx)(s.t,{orientation:`vertical`,className:`h-7`})]}):null;return(0,f.jsxs)(`header`,{className:t.cn(`flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between`,b),children:[(0,f.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[_?.back??E,(0,f.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[_?.beforeTitle,(0,f.jsxs)(`div`,{className:t.cn(`flex max-w-3xl flex-col gap-0.5`,x),children:[(0,f.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,f.jsx)(i.o,{tag:o,containerClassName:`space-y-0`,className:t.cn(m[o],C),children:e}),h.length>0&&(0,f.jsx)(`div`,{className:`flex items-center gap-1.5`,children:h.map((e,t)=>(0,f.jsx)(a.t,{variant:e.variant??`secondary`,children:e.label},e.key??t))})]}),!!r&&(0,f.jsx)(i.s,{size:`xs`,type:`secondary`,className:w,children:r}),_?.afterDescription]})]})]}),_?.actions??(!!g&&(0,f.jsx)(`div`,{className:t.cn(`shrink-0`,S),children:g}))]})}function g({header:e,width:n=`narrow`,children:r,className:i,bodyClassName:a,renderLink:o,LinkComponent:s}){return(0,f.jsxs)(u.t,{width:n,className:i,children:[!!e&&(0,f.jsx)(h,{...e,renderLink:e.renderLink??o,LinkComponent:e.LinkComponent??s}),!!r&&(0,f.jsx)(`div`,{className:t.cn(`relative block w-full`,a),children:r})]})}var _={sm:`max-w-screen-sm`,md:`max-w-screen-md`,lg:`max-w-screen-lg`,xl:`max-w-screen-xl`,"2xl":`max-w-screen-2xl`,full:`max-w-full`};function v({noPadding:e=!1,maxWidth:n,className:r,children:i,...a}){return(0,f.jsx)(`main`,{className:t.cn(`flex-1`,!e&&`p-4 md:p-6`,n&&t.cn(`mx-auto w-full`,_[n]),r),...a,children:i})}var y={menuLabel:`Page actions`},b=e=>e===`destructive`?`error`:e===`primary`||e===`success`||e===`warning`?`primary`:`secondary`,x=`max-h-[80vh] overflow-y-auto overscroll-contain`,S=4;function C(e,t,n){if(e.visible===!1)return null;if(e.element)return(0,f.jsx)(`div`,{children:e.element},e.id??t.index);if(n)return n(e,t);let i=e.id??t.index,a=!!e.disabled||!!e.loading,o=e.icon,s=(0,f.jsxs)(r.t,{variant:b(e.variant),onClick:e.onClick,disabled:a,children:[!!o&&(0,f.jsx)(o,{className:`size-3.5`,"aria-hidden":`true`}),e.label]},i);return e.href&&!e.onClick?t.renderLink({href:e.href,children:s,className:`inline-flex`,target:e.target,rel:e.rel,external:e.external,disabled:a}):s}function w(e,n,r){let a=[],c=null;return e.forEach(({action:e,index:l})=>{let u={...n,index:l,isInline:!1},d=e.group??null,p=d!==c;if(a.length>0&&p&&a.push((0,f.jsx)(s.t,{className:`my-1`},`sep-${c??`root`}-${d??`root`}-${e.id??l}`)),p&&(c=d,d&&a.push((0,f.jsx)(`div`,{className:`px-2 pt-1`,children:(0,f.jsx)(i.s,{size:`xxs`,weight:`semibold`,type:`secondary`,className:`uppercase tracking-wider`,children:d})},`group-${d}-${e.id??l}`))),e.element){a.push((0,f.jsx)(`div`,{children:e.element},e.id??l));return}if(r){a.push((0,f.jsx)(`div`,{children:r(e,u)},e.id??l));return}let m=e.icon,h=!!e.disabled||!!e.loading,g=(0,f.jsxs)(f.Fragment,{children:[!!m&&(0,f.jsx)(m,{className:`size-3.5`,"aria-hidden":`true`}),typeof e.label==`string`?(0,f.jsx)(i.s,{tag:`span`,size:`xs`,className:`text-inherit`,children:e.label}):e.label]}),_=t.cn(`gap-1.5 px-2 py-1.5 text-xs`,e.variant===`destructive`&&`text-destructive focus-visible:text-destructive`);if(e.href&&!e.onClick&&!h){a.push((0,f.jsx)(o.s,{href:e.href,className:_,render:t=>u.renderLink({...t,href:e.href,children:t.children,target:e.target,rel:e.rel,external:e.external}),children:g},e.id??l));return}a.push((0,f.jsx)(o.a,{disabled:h,onClick:e.onClick,className:_,children:g},e.id??l))}),a}function T({actions:n,display:r=`dropdown`,breakpoint:i=1040,maxInlineActions:a=S,renderLink:o,LinkComponent:s,strings:u,className:m,inlineClassName:h,menuClassName:g,renderAction:_}){let v=e.useStrings(y,u),b=l.d({renderLink:o,LinkComponent:s}),T=(0,d.useMemo)(()=>(n??[]).map((e,t)=>({action:e,index:t})).filter(({action:e})=>e.visible!==!1),[n]),[E,D]=(0,d.useState)(!1);if((0,d.useEffect)(()=>{if(r!==`auto`||typeof window>`u`)return;let e=()=>D(window.innerWidth<=i);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[r,i]),T.length===0)return null;let O={renderLink:b},k=t.cn(`flex items-center gap-2`,h,m),A=t.cn(x,g);if(r===`dropdown`||r===`auto`&&E)return(0,f.jsx)(c.t,{icon:p.MoreHorizontal,srText:v.menuLabel,align:`end`,closeOnSelect:!0,contentClassName:A,children:w(T,O,_)});let j=Math.max(0,a),M=T.filter(({action:e})=>(e.placement??`auto`)!==`menu`),N=M.slice(0,j),P=[...M.slice(j),...T.filter(({action:e})=>(e.placement??`auto`)===`menu`)];return(0,f.jsxs)(`div`,{className:k,children:[N.map(e=>(0,f.jsx)(d.Fragment,{children:C(e.action,{...O,index:e.index,isInline:!0},_)},e.action.id??e.index)),P.length>0&&(0,f.jsx)(c.t,{icon:p.MoreHorizontal,srText:v.menuLabel,align:`end`,closeOnSelect:!0,contentClassName:A,children:w(P,O,_)})]})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
2
- //# sourceMappingURL=page-C6EzwvTz.cjs.map
1
+ const e=require("../lib/strings.cjs"),t=require("../lib/utils.cjs"),n=require("./button-Bd5bEIiB.cjs"),r=require("./buttons-Bek9F7qK.cjs"),i=require("./typography-CO9uwZhF.cjs"),a=require("./badge-BeSKxX1u.cjs"),o=require("./dropdown-menu-CHQzQWUK.cjs"),s=require("./separator-q42IlFFA.cjs"),c=require("./action-menu-B6yFRDz1.cjs"),l=require("./hooks-sfHAyDgD.cjs"),u=require("./content-container-CVUJCLhn.cjs");let d=require("react"),f=require("react/jsx-runtime"),p=require("lucide-react");var m={h1:`border-0 pb-0 text-xl`,h2:`border-0 pb-0 text-lg`,h3:`text-base`,h4:`text-sm`,h5:`text-sm`,h6:`text-sm`};function h({title:e,description:r,headingTag:o=`h3`,backHref:c,onBack:u,backLabel:d=`Back`,titleBadges:h=[],actions:g,slots:_,renderLink:v,LinkComponent:y,className:b,contentClassName:x,actionsClassName:S,titleClassName:C,descriptionClassName:w}){let T=l.d({renderLink:v,LinkComponent:y}),E=c||u?(0,f.jsxs)(`div`,{className:`flex items-center gap-1.5 pt-1`,children:[c&&!u?T({href:c,"aria-label":d,children:(0,f.jsxs)(n.t,{variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`h-7 w-7 rounded p-1`,children:[(0,f.jsx)(p.ArrowLeft,{className:`size-4`,"aria-hidden":`true`}),(0,f.jsx)(`span`,{className:`sr-only`,children:d})]})}):(0,f.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`h-7 w-7 rounded p-1`,onClick:u,"aria-label":d,children:(0,f.jsx)(p.ArrowLeft,{className:`size-4`,"aria-hidden":`true`})}),(0,f.jsx)(s.t,{orientation:`vertical`,className:`h-7`})]}):null;return(0,f.jsxs)(`header`,{className:t.cn(`flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between`,b),children:[(0,f.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[_?.back??E,(0,f.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[_?.beforeTitle,(0,f.jsxs)(`div`,{className:t.cn(`flex max-w-3xl flex-col gap-0.5`,x),children:[(0,f.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,f.jsx)(i.o,{tag:o,containerClassName:`space-y-0`,className:t.cn(m[o],C),children:e}),h.length>0&&(0,f.jsx)(`div`,{className:`flex items-center gap-1.5`,children:h.map((e,t)=>(0,f.jsx)(a.t,{variant:e.variant??`secondary`,children:e.label},e.key??t))})]}),!!r&&(0,f.jsx)(i.s,{size:`xs`,type:`secondary`,className:w,children:r}),_?.afterDescription]})]})]}),_?.actions??(!!g&&(0,f.jsx)(`div`,{className:t.cn(`shrink-0`,S),children:g}))]})}function g({header:e,width:n=`narrow`,children:r,className:i,bodyClassName:a,renderLink:o,LinkComponent:s}){return(0,f.jsxs)(u.t,{width:n,className:i,children:[!!e&&(0,f.jsx)(h,{...e,renderLink:e.renderLink??o,LinkComponent:e.LinkComponent??s}),!!r&&(0,f.jsx)(`div`,{className:t.cn(`relative block w-full`,a),children:r})]})}var _={sm:`max-w-screen-sm`,md:`max-w-screen-md`,lg:`max-w-screen-lg`,xl:`max-w-screen-xl`,"2xl":`max-w-screen-2xl`,full:`max-w-full`};function v({noPadding:e=!1,maxWidth:n,className:r,children:i,...a}){return(0,f.jsx)(`main`,{className:t.cn(`flex-1`,!e&&`p-4 md:p-6`,n&&t.cn(`mx-auto w-full`,_[n]),r),...a,children:i})}var y={menuLabel:`Page actions`},b=e=>e===`destructive`?`error`:e===`primary`||e===`success`||e===`warning`?`primary`:`secondary`,x=`max-h-[80vh] overflow-y-auto overscroll-contain`,S=4;function C(e,t,n){if(e.visible===!1)return null;if(e.element)return(0,f.jsx)(`div`,{children:e.element},e.id??t.index);if(n)return n(e,t);let i=e.id??t.index,a=!!e.disabled||!!e.loading,o=e.icon,s=(0,f.jsxs)(r.t,{variant:b(e.variant),onClick:e.onClick,disabled:a,children:[!!o&&(0,f.jsx)(o,{className:`size-3.5`,"aria-hidden":`true`}),e.label]},i);return e.href&&!e.onClick?t.renderLink({href:e.href,children:s,className:`inline-flex`,target:e.target,rel:e.rel,external:e.external,disabled:a}):s}function w(e,n,r){let a=[],c=null;return e.forEach(({action:e,index:l})=>{let u={...n,index:l,isInline:!1},d=e.group??null,p=d!==c;if(a.length>0&&p&&a.push((0,f.jsx)(s.t,{className:`my-1`},`sep-${c??`root`}-${d??`root`}-${e.id??l}`)),p&&(c=d,d&&a.push((0,f.jsx)(`div`,{className:`px-2 pt-1`,children:(0,f.jsx)(i.s,{size:`xxs`,weight:`semibold`,type:`secondary`,className:`uppercase tracking-wider`,children:d})},`group-${d}-${e.id??l}`))),e.element){a.push((0,f.jsx)(`div`,{children:e.element},e.id??l));return}if(r){a.push((0,f.jsx)(`div`,{children:r(e,u)},e.id??l));return}let m=e.icon,h=!!e.disabled||!!e.loading,g=(0,f.jsxs)(f.Fragment,{children:[!!m&&(0,f.jsx)(m,{className:`size-3.5`,"aria-hidden":`true`}),typeof e.label==`string`?(0,f.jsx)(i.s,{tag:`span`,size:`xs`,className:`text-inherit`,children:e.label}):e.label]}),_=t.cn(`gap-1.5 px-2 py-1.5 text-xs`,e.variant===`destructive`&&`text-destructive focus-visible:text-destructive`);if(e.href&&!e.onClick&&!h){a.push((0,f.jsx)(o.s,{href:e.href,className:_,render:t=>u.renderLink({...t,href:e.href,children:t.children,target:e.target,rel:e.rel,external:e.external}),children:g},e.id??l));return}a.push((0,f.jsx)(o.a,{disabled:h,onClick:e.onClick,className:_,children:g},e.id??l))}),a}function T({actions:n,display:r=`dropdown`,breakpoint:i=1040,maxInlineActions:a=S,renderLink:o,LinkComponent:s,strings:u,className:m,inlineClassName:h,menuClassName:g,renderAction:_}){let v=e.useStrings(y,u),b=l.d({renderLink:o,LinkComponent:s}),T=(0,d.useMemo)(()=>(n??[]).map((e,t)=>({action:e,index:t})).filter(({action:e})=>e.visible!==!1),[n]),[E,D]=(0,d.useState)(!1);if((0,d.useEffect)(()=>{if(r!==`auto`||typeof window>`u`)return;let e=()=>D(window.innerWidth<=i);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[r,i]),T.length===0)return null;let O={renderLink:b},k=t.cn(`flex items-center gap-2`,h,m),A=t.cn(x,g);if(r===`dropdown`||r===`auto`&&E)return(0,f.jsx)(c.t,{icon:p.MoreHorizontal,srText:v.menuLabel,align:`end`,closeOnSelect:!0,contentClassName:A,children:w(T,O,_)});let j=Math.max(0,a),M=T.filter(({action:e})=>(e.placement??`auto`)!==`menu`),N=M.slice(0,j),P=[...M.slice(j),...T.filter(({action:e})=>(e.placement??`auto`)===`menu`)];return(0,f.jsxs)(`div`,{className:k,children:[N.map(e=>(0,f.jsx)(d.Fragment,{children:C(e.action,{...O,index:e.index,isInline:!0},_)},e.action.id??e.index)),P.length>0&&(0,f.jsx)(c.t,{icon:p.MoreHorizontal,srText:v.menuLabel,align:`end`,closeOnSelect:!0,contentClassName:A,children:w(P,O,_)})]})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
2
+ //# sourceMappingURL=page-D8UMXREv.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-C6EzwvTz.cjs","names":[],"sources":["../../src/components/layout/page/partials/page-header.tsx","../../src/components/layout/page/page.tsx","../../src/components/layout/page/page-content.tsx","../../src/components/layout/page/page.types.ts","../../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/**\n * PageHeader — page title, back control, title badges, and actions.\n *\n * Navigation goes through `renderLink`; consumer apps wire framework links at\n * the boundary. Slots let consumers replace any structural region without\n * forking the page wrapper.\n */\nimport { ArrowLeft } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Separator } from '@/components/base/display/separator';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeadingTag } from '../page.types';\n\nconst PAGE_TITLE_CLASS: Record<PageHeadingTag, string> = {\n\th1: 'border-0 pb-0 text-xl',\n\th2: 'border-0 pb-0 text-lg',\n\th3: 'text-base',\n\th4: 'text-sm',\n\th5: 'text-sm',\n\th6: 'text-sm',\n};\n\nexport function PageHeader({\n\ttitle,\n\tdescription,\n\theadingTag = 'h3',\n\tbackHref,\n\tonBack,\n\tbackLabel = 'Back',\n\ttitleBadges = [],\n\tactions,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tactionsClassName,\n\ttitleClassName,\n\tdescriptionClassName,\n}: PageHeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst hasBack = !!backHref || !!onBack;\n\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-1.5 pt-1\">\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\tchildren: (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t<span className=\"sr-only\">{backLabel}</span>\n\t\t\t\t\t\t</Button>\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\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\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-4\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t<Separator orientation=\"vertical\" className=\"h-7\" />\n\t\t</div>\n\t) : null;\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 items-start gap-3\">\n\t\t\t\t{slots?.back ?? defaultBack}\n\n\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n\t\t\t\t\t{slots?.beforeTitle}\n\t\t\t\t\t<div className={cn('flex max-w-3xl flex-col gap-0.5', contentClassName)}>\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag={headingTag}\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tclassName={cn(PAGE_TITLE_CLASS[headingTag], titleClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t{titleBadges.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t{titleBadges.map((badge, index) => (\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tkey={badge.key ?? index}\n\t\t\t\t\t\t\t\t\t\t\tvariant={badge.variant ?? 'secondary'}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{badge.label}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className={descriptionClassName}>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{slots?.afterDescription}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{slots?.actions ?? (\n\t\t\t\t!!actions && <div className={cn('shrink-0', actionsClassName)}>{actions}</div>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n","/**\n * Page — convenience wrapper that pairs `<PageHeader>` with `<Container>`.\n * For full control, compose `<PageHeader />`, `<PageContent />`, and\n * `<Container />` directly.\n */\nimport { Container } from '../containers/content-container';\nimport { PageHeader } from './partials/page-header';\nimport type { PageProps } from './page.types';\nimport { cn } from '@/lib/utils';\n\nexport function Page({\n\theader,\n\twidth = 'narrow',\n\tchildren,\n\tclassName,\n\tbodyClassName,\n\trenderLink,\n\tLinkComponent,\n}: PageProps) {\n\treturn (\n\t\t<Container width={width} className={className}>\n\t\t\t{!!header && (\n\t\t\t\t<PageHeader\n\t\t\t\t\t{...header}\n\t\t\t\t\trenderLink={header.renderLink ?? renderLink}\n\t\t\t\t\tLinkComponent={header.LinkComponent ?? LinkComponent}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!children && (\n\t\t\t\t<div className={cn('relative block w-full', bodyClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n","/**\n * PageContent — `<main>` wrapper for the body region of an app shell.\n *\n * Provides consistent padding and an optional width clamp. Lighter-weight\n * than `Page` — use directly inside an `AppShell` flexbox where the surrounding\n * structure (header, sidebar) is already in place.\n */\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageContentMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport interface PageContentProps extends HTMLAttributes<HTMLElement> {\n\t/** Body content. */\n\tchildren?: ReactNode;\n\t/** When true, removes default `p-4 md:p-6` padding. */\n\tnoPadding?: boolean;\n\t/** Optional max-width clamp (centers when set). */\n\tmaxWidth?: PageContentMaxWidth;\n}\n\nconst MAX_WIDTH_CLASS: Record<PageContentMaxWidth, string> = {\n\tsm: 'max-w-screen-sm',\n\tmd: 'max-w-screen-md',\n\tlg: 'max-w-screen-lg',\n\txl: 'max-w-screen-xl',\n\t'2xl': 'max-w-screen-2xl',\n\tfull: 'max-w-full',\n};\n\nexport function PageContent({\n\tnoPadding = false,\n\tmaxWidth,\n\tclassName,\n\tchildren,\n\t...props\n}: PageContentProps) {\n\treturn (\n\t\t<main\n\t\t\tclassName={cn(\n\t\t\t\t'flex-1',\n\t\t\t\t!noPadding && 'p-4 md:p-6',\n\t\t\t\tmaxWidth && cn('mx-auto w-full', MAX_WIDTH_CLASS[maxWidth]),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</main>\n\t);\n}\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\tLinkComponent,\n} from '../layout.types';\nimport type { ContainerWidth } from '../containers/containers.types';\nimport type { StringsProp } from '@/lib/strings';\n\nexport type PageHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface PageTitleBadge {\n\tlabel: ReactNode;\n\tvariant?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';\n\tkey?: Key;\n}\n\nexport interface PageHeaderSlots {\n\t/** Replaces the leading back control entirely. */\n\tback?: ReactNode;\n\t/** Additional content before the title line. */\n\tbeforeTitle?: ReactNode;\n\t/** Additional content after the description. */\n\tafterDescription?: ReactNode;\n\t/** Replaces the trailing actions region. */\n\tactions?: ReactNode;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\t/** Semantic heading level for the title. Defaults to `h3` for nested app pages. */\n\theadingTag?: PageHeadingTag;\n\tbackHref?: string;\n\tonBack?: () => void;\n\tbackLabel?: string;\n\ttitleBadges?: PageTitleBadge[];\n\tactions?: ReactNode;\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\tdescriptionClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type PageActionVariant =\n\t| 'primary'\n\t| 'secondary'\n\t| 'destructive'\n\t| 'success'\n\t| 'warning';\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface PageAction {\n\tid?: string;\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\ticon?: ComponentType<{ className?: string }>;\n\tvariant?: PageActionVariant;\n\tvisible?: boolean;\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: 'Page actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\tactions?: PageAction[];\n\tdisplay?: PageActionsDisplay;\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\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\tinlineClassName?: string;\n\tmenuClassName?: string;\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface PageProps extends LayoutNavigationAdapter {\n\theader?: PageHeaderProps;\n\twidth?: ContainerWidth;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tbodyClassName?: string;\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 { Fragment, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { PageActionButton } from '@/components/base/buttons/page-action-button';\nimport { Separator } from '@/components/base/display/separator';\nimport { ActionMenu } from '@/components/base/navigation/action-menu';\nimport {\n\tDropdownMenuItem,\n\tDropdownMenuLinkItem,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\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 PageActionVariant,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst resolveBaseVariant = (\n\tvariant: PageActionVariant | undefined,\n): 'primary' | 'secondary' | 'error' => {\n\tif (variant === 'destructive') return 'error';\n\tif (variant === 'primary' || variant === 'success' || variant === 'warning') return 'primary';\n\treturn 'secondary';\n};\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction renderInlineAction(\n\taction: PageAction,\n\tcontext: PageActionContext,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode {\n\tif (action.visible === false) return null;\n\tif (action.element) return <div key={action.id ?? context.index}>{action.element}</div>;\n\tif (renderAction) return renderAction(action, context);\n\n\tconst key = action.id ?? context.index;\n\tconst disabled = !!action.disabled || !!action.loading;\n\tconst Icon = action.icon;\n\tconst button = (\n\t\t<PageActionButton\n\t\t\tkey={key}\n\t\t\tvariant={resolveBaseVariant(action.variant)}\n\t\t\tonClick={action.onClick}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t{action.label}\n\t\t</PageActionButton>\n\t);\n\n\tif (action.href && !action.onClick) {\n\t\treturn context.renderLink({\n\t\t\thref: action.href,\n\t\t\tchildren: button,\n\t\t\tclassName: 'inline-flex',\n\t\t\ttarget: action.target,\n\t\t\trel: action.rel,\n\t\t\texternal: action.external,\n\t\t\tdisabled,\n\t\t});\n\t}\n\n\treturn button;\n}\n\nfunction renderMenuItems(\n\tentries: PageActionEntry[],\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode[] {\n\tconst items: ReactNode[] = [];\n\tlet currentGroup: string | null = null;\n\n\tentries.forEach(({ action, index }) => {\n\t\tconst context: PageActionContext = { ...contextBase, index, isInline: false };\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (items.length > 0 && groupChanged) {\n\t\t\titems.push(\n\t\t\t\t<Separator\n\t\t\t\t\tkey={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${action.id ?? index}`}\n\t\t\t\t\tclassName=\"my-1\"\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (nextGroup) {\n\t\t\t\titems.push(\n\t\t\t\t\t<div key={`group-${nextGroup}-${action.id ?? index}`} className=\"px-2 pt-1\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"uppercase tracking-wider\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{nextGroup}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</div>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (action.element) {\n\t\t\titems.push(<div key={action.id ?? index}>{action.element}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tif (renderAction) {\n\t\t\titems.push(<div key={action.id ?? index}>{renderAction(action, context)}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tconst Icon = action.icon;\n\t\tconst disabled = !!action.disabled || !!action.loading;\n\t\tconst children = (\n\t\t\t<>\n\t\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t\t{typeof action.label === 'string' ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</Text>\n\t\t\t\t) : action.label}\n\t\t\t</>\n\t\t);\n\n\t\tconst itemClassName = cn(\n\t\t\t'gap-1.5 px-2 py-1.5 text-xs',\n\t\t\taction.variant === 'destructive' && 'text-destructive focus-visible:text-destructive',\n\t\t);\n\n\t\tif (action.href && !action.onClick && !disabled) {\n\t\t\titems.push(\n\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\tkey={action.id ?? index}\n\t\t\t\t\thref={action.href}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\tcontext.renderLink({\n\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\thref: action.href,\n\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</DropdownMenuLinkItem>,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\titems.push(\n\t\t\t<DropdownMenuItem\n\t\t\t\tkey={action.id ?? index}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\tclassName={itemClassName}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenuItem>,\n\t\t);\n\t});\n\n\treturn items;\n}\n\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\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 inlineClass = cn('flex items-center gap-2', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t{renderMenuItems(filtered, inlineContextBase, renderAction)}\n\t\t\t</ActionMenu>\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\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t{inline.map((action) => (\n\t\t\t\t<Fragment key={action.action.id ?? action.index}>\n\t\t\t\t\t{renderInlineAction(\n\t\t\t\t\t\taction.action,\n\t\t\t\t\t\t{ ...inlineContextBase, index: action.index, isInline: true },\n\t\t\t\t\t\trenderAction,\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t\t{renderMenuItems(menu, inlineContextBase, renderAction)}\n\t\t\t\t</ActionMenu>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"page-D8UMXREv.cjs","names":[],"sources":["../../src/components/layout/page/partials/page-header.tsx","../../src/components/layout/page/page.tsx","../../src/components/layout/page/page-content.tsx","../../src/components/layout/page/page.types.ts","../../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/**\n * PageHeader — page title, back control, title badges, and actions.\n *\n * Navigation goes through `renderLink`; consumer apps wire framework links at\n * the boundary. Slots let consumers replace any structural region without\n * forking the page wrapper.\n */\nimport { ArrowLeft } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Separator } from '@/components/base/display/separator';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeadingTag } from '../page.types';\n\nconst PAGE_TITLE_CLASS: Record<PageHeadingTag, string> = {\n\th1: 'border-0 pb-0 text-xl',\n\th2: 'border-0 pb-0 text-lg',\n\th3: 'text-base',\n\th4: 'text-sm',\n\th5: 'text-sm',\n\th6: 'text-sm',\n};\n\nexport function PageHeader({\n\ttitle,\n\tdescription,\n\theadingTag = 'h3',\n\tbackHref,\n\tonBack,\n\tbackLabel = 'Back',\n\ttitleBadges = [],\n\tactions,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tactionsClassName,\n\ttitleClassName,\n\tdescriptionClassName,\n}: PageHeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst hasBack = !!backHref || !!onBack;\n\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-1.5 pt-1\">\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\tchildren: (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t<span className=\"sr-only\">{backLabel}</span>\n\t\t\t\t\t\t</Button>\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\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\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-4\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t<Separator orientation=\"vertical\" className=\"h-7\" />\n\t\t</div>\n\t) : null;\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 items-start gap-3\">\n\t\t\t\t{slots?.back ?? defaultBack}\n\n\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n\t\t\t\t\t{slots?.beforeTitle}\n\t\t\t\t\t<div className={cn('flex max-w-3xl flex-col gap-0.5', contentClassName)}>\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag={headingTag}\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tclassName={cn(PAGE_TITLE_CLASS[headingTag], titleClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t{titleBadges.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t{titleBadges.map((badge, index) => (\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tkey={badge.key ?? index}\n\t\t\t\t\t\t\t\t\t\t\tvariant={badge.variant ?? 'secondary'}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{badge.label}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className={descriptionClassName}>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{slots?.afterDescription}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{slots?.actions ?? (\n\t\t\t\t!!actions && <div className={cn('shrink-0', actionsClassName)}>{actions}</div>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n","/**\n * Page — convenience wrapper that pairs `<PageHeader>` with `<Container>`.\n * For full control, compose `<PageHeader />`, `<PageContent />`, and\n * `<Container />` directly.\n */\nimport { Container } from '../containers/content-container';\nimport { PageHeader } from './partials/page-header';\nimport type { PageProps } from './page.types';\nimport { cn } from '@/lib/utils';\n\nexport function Page({\n\theader,\n\twidth = 'narrow',\n\tchildren,\n\tclassName,\n\tbodyClassName,\n\trenderLink,\n\tLinkComponent,\n}: PageProps) {\n\treturn (\n\t\t<Container width={width} className={className}>\n\t\t\t{!!header && (\n\t\t\t\t<PageHeader\n\t\t\t\t\t{...header}\n\t\t\t\t\trenderLink={header.renderLink ?? renderLink}\n\t\t\t\t\tLinkComponent={header.LinkComponent ?? LinkComponent}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!children && (\n\t\t\t\t<div className={cn('relative block w-full', bodyClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n","/**\n * PageContent — `<main>` wrapper for the body region of an app shell.\n *\n * Provides consistent padding and an optional width clamp. Lighter-weight\n * than `Page` — use directly inside an `AppShell` flexbox where the surrounding\n * structure (header, sidebar) is already in place.\n */\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageContentMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport interface PageContentProps extends HTMLAttributes<HTMLElement> {\n\t/** Body content. */\n\tchildren?: ReactNode;\n\t/** When true, removes default `p-4 md:p-6` padding. */\n\tnoPadding?: boolean;\n\t/** Optional max-width clamp (centers when set). */\n\tmaxWidth?: PageContentMaxWidth;\n}\n\nconst MAX_WIDTH_CLASS: Record<PageContentMaxWidth, string> = {\n\tsm: 'max-w-screen-sm',\n\tmd: 'max-w-screen-md',\n\tlg: 'max-w-screen-lg',\n\txl: 'max-w-screen-xl',\n\t'2xl': 'max-w-screen-2xl',\n\tfull: 'max-w-full',\n};\n\nexport function PageContent({\n\tnoPadding = false,\n\tmaxWidth,\n\tclassName,\n\tchildren,\n\t...props\n}: PageContentProps) {\n\treturn (\n\t\t<main\n\t\t\tclassName={cn(\n\t\t\t\t'flex-1',\n\t\t\t\t!noPadding && 'p-4 md:p-6',\n\t\t\t\tmaxWidth && cn('mx-auto w-full', MAX_WIDTH_CLASS[maxWidth]),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</main>\n\t);\n}\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\tLinkComponent,\n} from '../layout.types';\nimport type { ContainerWidth } from '../containers/containers.types';\nimport type { StringsProp } from '@/lib/strings';\n\nexport type PageHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface PageTitleBadge {\n\tlabel: ReactNode;\n\tvariant?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';\n\tkey?: Key;\n}\n\nexport interface PageHeaderSlots {\n\t/** Replaces the leading back control entirely. */\n\tback?: ReactNode;\n\t/** Additional content before the title line. */\n\tbeforeTitle?: ReactNode;\n\t/** Additional content after the description. */\n\tafterDescription?: ReactNode;\n\t/** Replaces the trailing actions region. */\n\tactions?: ReactNode;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\t/** Semantic heading level for the title. Defaults to `h3` for nested app pages. */\n\theadingTag?: PageHeadingTag;\n\tbackHref?: string;\n\tonBack?: () => void;\n\tbackLabel?: string;\n\ttitleBadges?: PageTitleBadge[];\n\tactions?: ReactNode;\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\tdescriptionClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type PageActionVariant =\n\t| 'primary'\n\t| 'secondary'\n\t| 'destructive'\n\t| 'success'\n\t| 'warning';\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface PageAction {\n\tid?: string;\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\ticon?: ComponentType<{ className?: string }>;\n\tvariant?: PageActionVariant;\n\tvisible?: boolean;\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: 'Page actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\tactions?: PageAction[];\n\tdisplay?: PageActionsDisplay;\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\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\tinlineClassName?: string;\n\tmenuClassName?: string;\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface PageProps extends LayoutNavigationAdapter {\n\theader?: PageHeaderProps;\n\twidth?: ContainerWidth;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tbodyClassName?: string;\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 { Fragment, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { PageActionButton } from '@/components/base/buttons/page-action-button';\nimport { Separator } from '@/components/base/display/separator';\nimport { ActionMenu } from '@/components/base/navigation/action-menu';\nimport {\n\tDropdownMenuItem,\n\tDropdownMenuLinkItem,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\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 PageActionVariant,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst resolveBaseVariant = (\n\tvariant: PageActionVariant | undefined,\n): 'primary' | 'secondary' | 'error' => {\n\tif (variant === 'destructive') return 'error';\n\tif (variant === 'primary' || variant === 'success' || variant === 'warning') return 'primary';\n\treturn 'secondary';\n};\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction renderInlineAction(\n\taction: PageAction,\n\tcontext: PageActionContext,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode {\n\tif (action.visible === false) return null;\n\tif (action.element) return <div key={action.id ?? context.index}>{action.element}</div>;\n\tif (renderAction) return renderAction(action, context);\n\n\tconst key = action.id ?? context.index;\n\tconst disabled = !!action.disabled || !!action.loading;\n\tconst Icon = action.icon;\n\tconst button = (\n\t\t<PageActionButton\n\t\t\tkey={key}\n\t\t\tvariant={resolveBaseVariant(action.variant)}\n\t\t\tonClick={action.onClick}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t{action.label}\n\t\t</PageActionButton>\n\t);\n\n\tif (action.href && !action.onClick) {\n\t\treturn context.renderLink({\n\t\t\thref: action.href,\n\t\t\tchildren: button,\n\t\t\tclassName: 'inline-flex',\n\t\t\ttarget: action.target,\n\t\t\trel: action.rel,\n\t\t\texternal: action.external,\n\t\t\tdisabled,\n\t\t});\n\t}\n\n\treturn button;\n}\n\nfunction renderMenuItems(\n\tentries: PageActionEntry[],\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode[] {\n\tconst items: ReactNode[] = [];\n\tlet currentGroup: string | null = null;\n\n\tentries.forEach(({ action, index }) => {\n\t\tconst context: PageActionContext = { ...contextBase, index, isInline: false };\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (items.length > 0 && groupChanged) {\n\t\t\titems.push(\n\t\t\t\t<Separator\n\t\t\t\t\tkey={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${action.id ?? index}`}\n\t\t\t\t\tclassName=\"my-1\"\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (nextGroup) {\n\t\t\t\titems.push(\n\t\t\t\t\t<div key={`group-${nextGroup}-${action.id ?? index}`} className=\"px-2 pt-1\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"uppercase tracking-wider\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{nextGroup}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</div>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (action.element) {\n\t\t\titems.push(<div key={action.id ?? index}>{action.element}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tif (renderAction) {\n\t\t\titems.push(<div key={action.id ?? index}>{renderAction(action, context)}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tconst Icon = action.icon;\n\t\tconst disabled = !!action.disabled || !!action.loading;\n\t\tconst children = (\n\t\t\t<>\n\t\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t\t{typeof action.label === 'string' ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</Text>\n\t\t\t\t) : action.label}\n\t\t\t</>\n\t\t);\n\n\t\tconst itemClassName = cn(\n\t\t\t'gap-1.5 px-2 py-1.5 text-xs',\n\t\t\taction.variant === 'destructive' && 'text-destructive focus-visible:text-destructive',\n\t\t);\n\n\t\tif (action.href && !action.onClick && !disabled) {\n\t\t\titems.push(\n\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\tkey={action.id ?? index}\n\t\t\t\t\thref={action.href}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\tcontext.renderLink({\n\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\thref: action.href,\n\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</DropdownMenuLinkItem>,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\titems.push(\n\t\t\t<DropdownMenuItem\n\t\t\t\tkey={action.id ?? index}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\tclassName={itemClassName}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenuItem>,\n\t\t);\n\t});\n\n\treturn items;\n}\n\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\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 inlineClass = cn('flex items-center gap-2', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t{renderMenuItems(filtered, inlineContextBase, renderAction)}\n\t\t\t</ActionMenu>\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\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t{inline.map((action) => (\n\t\t\t\t<Fragment key={action.action.id ?? action.index}>\n\t\t\t\t\t{renderInlineAction(\n\t\t\t\t\t\taction.action,\n\t\t\t\t\t\t{ ...inlineContextBase, index: action.index, isInline: true },\n\t\t\t\t\t\trenderAction,\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t\t{renderMenuItems(menu, inlineContextBase, renderAction)}\n\t\t\t\t</ActionMenu>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { useStrings as e } from "../lib/strings.js";
2
2
  import { cn as t } from "../lib/utils.js";
3
3
  import { t as n } from "./button-DHksjMvc.js";
4
- import { t as r } from "./buttons-MxvdokeK.js";
4
+ import { t as r } from "./buttons-DcynMPnE.js";
5
5
  import { o as i, s as a } from "./typography-DE0NGEIE.js";
6
6
  import { t as o } from "./badge-a2Z3K5aQ.js";
7
7
  import { a as s, s as c } from "./dropdown-menu-CoWmrjYX.js";
@@ -259,4 +259,4 @@ function N({ actions: n, display: r = "dropdown", breakpoint: i = 1040, maxInlin
259
259
  //#endregion
260
260
  export { C as a, w as i, D as n, E as r, N as t };
261
261
 
262
- //# sourceMappingURL=page-DCW1eWCJ.js.map
262
+ //# sourceMappingURL=page-D9LNsHMN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-DCW1eWCJ.js","names":[],"sources":["../../src/components/layout/page/partials/page-header.tsx","../../src/components/layout/page/page.tsx","../../src/components/layout/page/page-content.tsx","../../src/components/layout/page/page.types.ts","../../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/**\n * PageHeader — page title, back control, title badges, and actions.\n *\n * Navigation goes through `renderLink`; consumer apps wire framework links at\n * the boundary. Slots let consumers replace any structural region without\n * forking the page wrapper.\n */\nimport { ArrowLeft } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Separator } from '@/components/base/display/separator';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeadingTag } from '../page.types';\n\nconst PAGE_TITLE_CLASS: Record<PageHeadingTag, string> = {\n\th1: 'border-0 pb-0 text-xl',\n\th2: 'border-0 pb-0 text-lg',\n\th3: 'text-base',\n\th4: 'text-sm',\n\th5: 'text-sm',\n\th6: 'text-sm',\n};\n\nexport function PageHeader({\n\ttitle,\n\tdescription,\n\theadingTag = 'h3',\n\tbackHref,\n\tonBack,\n\tbackLabel = 'Back',\n\ttitleBadges = [],\n\tactions,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tactionsClassName,\n\ttitleClassName,\n\tdescriptionClassName,\n}: PageHeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst hasBack = !!backHref || !!onBack;\n\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-1.5 pt-1\">\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\tchildren: (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t<span className=\"sr-only\">{backLabel}</span>\n\t\t\t\t\t\t</Button>\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\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\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-4\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t<Separator orientation=\"vertical\" className=\"h-7\" />\n\t\t</div>\n\t) : null;\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 items-start gap-3\">\n\t\t\t\t{slots?.back ?? defaultBack}\n\n\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n\t\t\t\t\t{slots?.beforeTitle}\n\t\t\t\t\t<div className={cn('flex max-w-3xl flex-col gap-0.5', contentClassName)}>\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag={headingTag}\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tclassName={cn(PAGE_TITLE_CLASS[headingTag], titleClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t{titleBadges.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t{titleBadges.map((badge, index) => (\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tkey={badge.key ?? index}\n\t\t\t\t\t\t\t\t\t\t\tvariant={badge.variant ?? 'secondary'}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{badge.label}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className={descriptionClassName}>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{slots?.afterDescription}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{slots?.actions ?? (\n\t\t\t\t!!actions && <div className={cn('shrink-0', actionsClassName)}>{actions}</div>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n","/**\n * Page — convenience wrapper that pairs `<PageHeader>` with `<Container>`.\n * For full control, compose `<PageHeader />`, `<PageContent />`, and\n * `<Container />` directly.\n */\nimport { Container } from '../containers/content-container';\nimport { PageHeader } from './partials/page-header';\nimport type { PageProps } from './page.types';\nimport { cn } from '@/lib/utils';\n\nexport function Page({\n\theader,\n\twidth = 'narrow',\n\tchildren,\n\tclassName,\n\tbodyClassName,\n\trenderLink,\n\tLinkComponent,\n}: PageProps) {\n\treturn (\n\t\t<Container width={width} className={className}>\n\t\t\t{!!header && (\n\t\t\t\t<PageHeader\n\t\t\t\t\t{...header}\n\t\t\t\t\trenderLink={header.renderLink ?? renderLink}\n\t\t\t\t\tLinkComponent={header.LinkComponent ?? LinkComponent}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!children && (\n\t\t\t\t<div className={cn('relative block w-full', bodyClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n","/**\n * PageContent — `<main>` wrapper for the body region of an app shell.\n *\n * Provides consistent padding and an optional width clamp. Lighter-weight\n * than `Page` — use directly inside an `AppShell` flexbox where the surrounding\n * structure (header, sidebar) is already in place.\n */\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageContentMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport interface PageContentProps extends HTMLAttributes<HTMLElement> {\n\t/** Body content. */\n\tchildren?: ReactNode;\n\t/** When true, removes default `p-4 md:p-6` padding. */\n\tnoPadding?: boolean;\n\t/** Optional max-width clamp (centers when set). */\n\tmaxWidth?: PageContentMaxWidth;\n}\n\nconst MAX_WIDTH_CLASS: Record<PageContentMaxWidth, string> = {\n\tsm: 'max-w-screen-sm',\n\tmd: 'max-w-screen-md',\n\tlg: 'max-w-screen-lg',\n\txl: 'max-w-screen-xl',\n\t'2xl': 'max-w-screen-2xl',\n\tfull: 'max-w-full',\n};\n\nexport function PageContent({\n\tnoPadding = false,\n\tmaxWidth,\n\tclassName,\n\tchildren,\n\t...props\n}: PageContentProps) {\n\treturn (\n\t\t<main\n\t\t\tclassName={cn(\n\t\t\t\t'flex-1',\n\t\t\t\t!noPadding && 'p-4 md:p-6',\n\t\t\t\tmaxWidth && cn('mx-auto w-full', MAX_WIDTH_CLASS[maxWidth]),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</main>\n\t);\n}\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\tLinkComponent,\n} from '../layout.types';\nimport type { ContainerWidth } from '../containers/containers.types';\nimport type { StringsProp } from '@/lib/strings';\n\nexport type PageHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface PageTitleBadge {\n\tlabel: ReactNode;\n\tvariant?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';\n\tkey?: Key;\n}\n\nexport interface PageHeaderSlots {\n\t/** Replaces the leading back control entirely. */\n\tback?: ReactNode;\n\t/** Additional content before the title line. */\n\tbeforeTitle?: ReactNode;\n\t/** Additional content after the description. */\n\tafterDescription?: ReactNode;\n\t/** Replaces the trailing actions region. */\n\tactions?: ReactNode;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\t/** Semantic heading level for the title. Defaults to `h3` for nested app pages. */\n\theadingTag?: PageHeadingTag;\n\tbackHref?: string;\n\tonBack?: () => void;\n\tbackLabel?: string;\n\ttitleBadges?: PageTitleBadge[];\n\tactions?: ReactNode;\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\tdescriptionClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type PageActionVariant =\n\t| 'primary'\n\t| 'secondary'\n\t| 'destructive'\n\t| 'success'\n\t| 'warning';\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface PageAction {\n\tid?: string;\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\ticon?: ComponentType<{ className?: string }>;\n\tvariant?: PageActionVariant;\n\tvisible?: boolean;\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: 'Page actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\tactions?: PageAction[];\n\tdisplay?: PageActionsDisplay;\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\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\tinlineClassName?: string;\n\tmenuClassName?: string;\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface PageProps extends LayoutNavigationAdapter {\n\theader?: PageHeaderProps;\n\twidth?: ContainerWidth;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tbodyClassName?: string;\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 { Fragment, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { PageActionButton } from '@/components/base/buttons/page-action-button';\nimport { Separator } from '@/components/base/display/separator';\nimport { ActionMenu } from '@/components/base/navigation/action-menu';\nimport {\n\tDropdownMenuItem,\n\tDropdownMenuLinkItem,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\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 PageActionVariant,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst resolveBaseVariant = (\n\tvariant: PageActionVariant | undefined,\n): 'primary' | 'secondary' | 'error' => {\n\tif (variant === 'destructive') return 'error';\n\tif (variant === 'primary' || variant === 'success' || variant === 'warning') return 'primary';\n\treturn 'secondary';\n};\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction renderInlineAction(\n\taction: PageAction,\n\tcontext: PageActionContext,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode {\n\tif (action.visible === false) return null;\n\tif (action.element) return <div key={action.id ?? context.index}>{action.element}</div>;\n\tif (renderAction) return renderAction(action, context);\n\n\tconst key = action.id ?? context.index;\n\tconst disabled = !!action.disabled || !!action.loading;\n\tconst Icon = action.icon;\n\tconst button = (\n\t\t<PageActionButton\n\t\t\tkey={key}\n\t\t\tvariant={resolveBaseVariant(action.variant)}\n\t\t\tonClick={action.onClick}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t{action.label}\n\t\t</PageActionButton>\n\t);\n\n\tif (action.href && !action.onClick) {\n\t\treturn context.renderLink({\n\t\t\thref: action.href,\n\t\t\tchildren: button,\n\t\t\tclassName: 'inline-flex',\n\t\t\ttarget: action.target,\n\t\t\trel: action.rel,\n\t\t\texternal: action.external,\n\t\t\tdisabled,\n\t\t});\n\t}\n\n\treturn button;\n}\n\nfunction renderMenuItems(\n\tentries: PageActionEntry[],\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode[] {\n\tconst items: ReactNode[] = [];\n\tlet currentGroup: string | null = null;\n\n\tentries.forEach(({ action, index }) => {\n\t\tconst context: PageActionContext = { ...contextBase, index, isInline: false };\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (items.length > 0 && groupChanged) {\n\t\t\titems.push(\n\t\t\t\t<Separator\n\t\t\t\t\tkey={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${action.id ?? index}`}\n\t\t\t\t\tclassName=\"my-1\"\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (nextGroup) {\n\t\t\t\titems.push(\n\t\t\t\t\t<div key={`group-${nextGroup}-${action.id ?? index}`} className=\"px-2 pt-1\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"uppercase tracking-wider\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{nextGroup}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</div>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (action.element) {\n\t\t\titems.push(<div key={action.id ?? index}>{action.element}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tif (renderAction) {\n\t\t\titems.push(<div key={action.id ?? index}>{renderAction(action, context)}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tconst Icon = action.icon;\n\t\tconst disabled = !!action.disabled || !!action.loading;\n\t\tconst children = (\n\t\t\t<>\n\t\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t\t{typeof action.label === 'string' ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</Text>\n\t\t\t\t) : action.label}\n\t\t\t</>\n\t\t);\n\n\t\tconst itemClassName = cn(\n\t\t\t'gap-1.5 px-2 py-1.5 text-xs',\n\t\t\taction.variant === 'destructive' && 'text-destructive focus-visible:text-destructive',\n\t\t);\n\n\t\tif (action.href && !action.onClick && !disabled) {\n\t\t\titems.push(\n\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\tkey={action.id ?? index}\n\t\t\t\t\thref={action.href}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\tcontext.renderLink({\n\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\thref: action.href,\n\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</DropdownMenuLinkItem>,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\titems.push(\n\t\t\t<DropdownMenuItem\n\t\t\t\tkey={action.id ?? index}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\tclassName={itemClassName}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenuItem>,\n\t\t);\n\t});\n\n\treturn items;\n}\n\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\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 inlineClass = cn('flex items-center gap-2', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t{renderMenuItems(filtered, inlineContextBase, renderAction)}\n\t\t\t</ActionMenu>\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\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t{inline.map((action) => (\n\t\t\t\t<Fragment key={action.action.id ?? action.index}>\n\t\t\t\t\t{renderInlineAction(\n\t\t\t\t\t\taction.action,\n\t\t\t\t\t\t{ ...inlineContextBase, index: action.index, isInline: true },\n\t\t\t\t\t\trenderAction,\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t\t{renderMenuItems(menu, inlineContextBase, renderAction)}\n\t\t\t\t</ActionMenu>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"page-D9LNsHMN.js","names":[],"sources":["../../src/components/layout/page/partials/page-header.tsx","../../src/components/layout/page/page.tsx","../../src/components/layout/page/page-content.tsx","../../src/components/layout/page/page.types.ts","../../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/**\n * PageHeader — page title, back control, title badges, and actions.\n *\n * Navigation goes through `renderLink`; consumer apps wire framework links at\n * the boundary. Slots let consumers replace any structural region without\n * forking the page wrapper.\n */\nimport { ArrowLeft } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Separator } from '@/components/base/display/separator';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps, PageHeadingTag } from '../page.types';\n\nconst PAGE_TITLE_CLASS: Record<PageHeadingTag, string> = {\n\th1: 'border-0 pb-0 text-xl',\n\th2: 'border-0 pb-0 text-lg',\n\th3: 'text-base',\n\th4: 'text-sm',\n\th5: 'text-sm',\n\th6: 'text-sm',\n};\n\nexport function PageHeader({\n\ttitle,\n\tdescription,\n\theadingTag = 'h3',\n\tbackHref,\n\tonBack,\n\tbackLabel = 'Back',\n\ttitleBadges = [],\n\tactions,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tactionsClassName,\n\ttitleClassName,\n\tdescriptionClassName,\n}: PageHeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst hasBack = !!backHref || !!onBack;\n\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-1.5 pt-1\">\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\tchildren: (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t<span className=\"sr-only\">{backLabel}</span>\n\t\t\t\t\t\t</Button>\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\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\tclassName=\"h-7 w-7 rounded p-1\"\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-4\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t<Separator orientation=\"vertical\" className=\"h-7\" />\n\t\t</div>\n\t) : null;\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full flex-col gap-4 md:flex-row md:items-start md:justify-between',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 items-start gap-3\">\n\t\t\t\t{slots?.back ?? defaultBack}\n\n\t\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n\t\t\t\t\t{slots?.beforeTitle}\n\t\t\t\t\t<div className={cn('flex max-w-3xl flex-col gap-0.5', contentClassName)}>\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag={headingTag}\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tclassName={cn(PAGE_TITLE_CLASS[headingTag], titleClassName)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t{titleBadges.length > 0 && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t{titleBadges.map((badge, index) => (\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tkey={badge.key ?? index}\n\t\t\t\t\t\t\t\t\t\t\tvariant={badge.variant ?? 'secondary'}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{badge.label}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className={descriptionClassName}>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{slots?.afterDescription}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{slots?.actions ?? (\n\t\t\t\t!!actions && <div className={cn('shrink-0', actionsClassName)}>{actions}</div>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n","/**\n * Page — convenience wrapper that pairs `<PageHeader>` with `<Container>`.\n * For full control, compose `<PageHeader />`, `<PageContent />`, and\n * `<Container />` directly.\n */\nimport { Container } from '../containers/content-container';\nimport { PageHeader } from './partials/page-header';\nimport type { PageProps } from './page.types';\nimport { cn } from '@/lib/utils';\n\nexport function Page({\n\theader,\n\twidth = 'narrow',\n\tchildren,\n\tclassName,\n\tbodyClassName,\n\trenderLink,\n\tLinkComponent,\n}: PageProps) {\n\treturn (\n\t\t<Container width={width} className={className}>\n\t\t\t{!!header && (\n\t\t\t\t<PageHeader\n\t\t\t\t\t{...header}\n\t\t\t\t\trenderLink={header.renderLink ?? renderLink}\n\t\t\t\t\tLinkComponent={header.LinkComponent ?? LinkComponent}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!children && (\n\t\t\t\t<div className={cn('relative block w-full', bodyClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n","/**\n * PageContent — `<main>` wrapper for the body region of an app shell.\n *\n * Provides consistent padding and an optional width clamp. Lighter-weight\n * than `Page` — use directly inside an `AppShell` flexbox where the surrounding\n * structure (header, sidebar) is already in place.\n */\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageContentMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n\nexport interface PageContentProps extends HTMLAttributes<HTMLElement> {\n\t/** Body content. */\n\tchildren?: ReactNode;\n\t/** When true, removes default `p-4 md:p-6` padding. */\n\tnoPadding?: boolean;\n\t/** Optional max-width clamp (centers when set). */\n\tmaxWidth?: PageContentMaxWidth;\n}\n\nconst MAX_WIDTH_CLASS: Record<PageContentMaxWidth, string> = {\n\tsm: 'max-w-screen-sm',\n\tmd: 'max-w-screen-md',\n\tlg: 'max-w-screen-lg',\n\txl: 'max-w-screen-xl',\n\t'2xl': 'max-w-screen-2xl',\n\tfull: 'max-w-full',\n};\n\nexport function PageContent({\n\tnoPadding = false,\n\tmaxWidth,\n\tclassName,\n\tchildren,\n\t...props\n}: PageContentProps) {\n\treturn (\n\t\t<main\n\t\t\tclassName={cn(\n\t\t\t\t'flex-1',\n\t\t\t\t!noPadding && 'p-4 md:p-6',\n\t\t\t\tmaxWidth && cn('mx-auto w-full', MAX_WIDTH_CLASS[maxWidth]),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</main>\n\t);\n}\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\tLinkComponent,\n} from '../layout.types';\nimport type { ContainerWidth } from '../containers/containers.types';\nimport type { StringsProp } from '@/lib/strings';\n\nexport type PageHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface PageTitleBadge {\n\tlabel: ReactNode;\n\tvariant?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error';\n\tkey?: Key;\n}\n\nexport interface PageHeaderSlots {\n\t/** Replaces the leading back control entirely. */\n\tback?: ReactNode;\n\t/** Additional content before the title line. */\n\tbeforeTitle?: ReactNode;\n\t/** Additional content after the description. */\n\tafterDescription?: ReactNode;\n\t/** Replaces the trailing actions region. */\n\tactions?: ReactNode;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\t/** Semantic heading level for the title. Defaults to `h3` for nested app pages. */\n\theadingTag?: PageHeadingTag;\n\tbackHref?: string;\n\tonBack?: () => void;\n\tbackLabel?: string;\n\ttitleBadges?: PageTitleBadge[];\n\tactions?: ReactNode;\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\tdescriptionClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type PageActionVariant =\n\t| 'primary'\n\t| 'secondary'\n\t| 'destructive'\n\t| 'success'\n\t| 'warning';\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface PageAction {\n\tid?: string;\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\ticon?: ComponentType<{ className?: string }>;\n\tvariant?: PageActionVariant;\n\tvisible?: boolean;\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: 'Page actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\tactions?: PageAction[];\n\tdisplay?: PageActionsDisplay;\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\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\tinlineClassName?: string;\n\tmenuClassName?: string;\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface PageProps extends LayoutNavigationAdapter {\n\theader?: PageHeaderProps;\n\twidth?: ContainerWidth;\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tbodyClassName?: string;\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 { Fragment, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { PageActionButton } from '@/components/base/buttons/page-action-button';\nimport { Separator } from '@/components/base/display/separator';\nimport { ActionMenu } from '@/components/base/navigation/action-menu';\nimport {\n\tDropdownMenuItem,\n\tDropdownMenuLinkItem,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\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 PageActionVariant,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst resolveBaseVariant = (\n\tvariant: PageActionVariant | undefined,\n): 'primary' | 'secondary' | 'error' => {\n\tif (variant === 'destructive') return 'error';\n\tif (variant === 'primary' || variant === 'success' || variant === 'warning') return 'primary';\n\treturn 'secondary';\n};\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction renderInlineAction(\n\taction: PageAction,\n\tcontext: PageActionContext,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode {\n\tif (action.visible === false) return null;\n\tif (action.element) return <div key={action.id ?? context.index}>{action.element}</div>;\n\tif (renderAction) return renderAction(action, context);\n\n\tconst key = action.id ?? context.index;\n\tconst disabled = !!action.disabled || !!action.loading;\n\tconst Icon = action.icon;\n\tconst button = (\n\t\t<PageActionButton\n\t\t\tkey={key}\n\t\t\tvariant={resolveBaseVariant(action.variant)}\n\t\t\tonClick={action.onClick}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t{action.label}\n\t\t</PageActionButton>\n\t);\n\n\tif (action.href && !action.onClick) {\n\t\treturn context.renderLink({\n\t\t\thref: action.href,\n\t\t\tchildren: button,\n\t\t\tclassName: 'inline-flex',\n\t\t\ttarget: action.target,\n\t\t\trel: action.rel,\n\t\t\texternal: action.external,\n\t\t\tdisabled,\n\t\t});\n\t}\n\n\treturn button;\n}\n\nfunction renderMenuItems(\n\tentries: PageActionEntry[],\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\trenderAction?: PageActionsProps['renderAction'],\n): ReactNode[] {\n\tconst items: ReactNode[] = [];\n\tlet currentGroup: string | null = null;\n\n\tentries.forEach(({ action, index }) => {\n\t\tconst context: PageActionContext = { ...contextBase, index, isInline: false };\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (items.length > 0 && groupChanged) {\n\t\t\titems.push(\n\t\t\t\t<Separator\n\t\t\t\t\tkey={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${action.id ?? index}`}\n\t\t\t\t\tclassName=\"my-1\"\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (nextGroup) {\n\t\t\t\titems.push(\n\t\t\t\t\t<div key={`group-${nextGroup}-${action.id ?? index}`} className=\"px-2 pt-1\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"uppercase tracking-wider\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{nextGroup}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</div>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (action.element) {\n\t\t\titems.push(<div key={action.id ?? index}>{action.element}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tif (renderAction) {\n\t\t\titems.push(<div key={action.id ?? index}>{renderAction(action, context)}</div>);\n\t\t\treturn;\n\t\t}\n\n\t\tconst Icon = action.icon;\n\t\tconst disabled = !!action.disabled || !!action.loading;\n\t\tconst children = (\n\t\t\t<>\n\t\t\t\t{!!Icon && <Icon className=\"size-3.5\" aria-hidden=\"true\" />}\n\t\t\t\t{typeof action.label === 'string' ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</Text>\n\t\t\t\t) : action.label}\n\t\t\t</>\n\t\t);\n\n\t\tconst itemClassName = cn(\n\t\t\t'gap-1.5 px-2 py-1.5 text-xs',\n\t\t\taction.variant === 'destructive' && 'text-destructive focus-visible:text-destructive',\n\t\t);\n\n\t\tif (action.href && !action.onClick && !disabled) {\n\t\t\titems.push(\n\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\tkey={action.id ?? index}\n\t\t\t\t\thref={action.href}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\tcontext.renderLink({\n\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\thref: action.href,\n\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</DropdownMenuLinkItem>,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\titems.push(\n\t\t\t<DropdownMenuItem\n\t\t\t\tkey={action.id ?? index}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\tclassName={itemClassName}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenuItem>,\n\t\t);\n\t});\n\n\treturn items;\n}\n\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\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 inlineClass = cn('flex items-center gap-2', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t{renderMenuItems(filtered, inlineContextBase, renderAction)}\n\t\t\t</ActionMenu>\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\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t{inline.map((action) => (\n\t\t\t\t<Fragment key={action.action.id ?? action.index}>\n\t\t\t\t\t{renderInlineAction(\n\t\t\t\t\t\taction.action,\n\t\t\t\t\t\t{ ...inlineContextBase, index: action.index, isInline: true },\n\t\t\t\t\t\trenderAction,\n\t\t\t\t\t)}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\ticon={MoreHorizontal}\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>\n\t\t\t\t\t{renderMenuItems(menu, inlineContextBase, renderAction)}\n\t\t\t\t</ActionMenu>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { useStrings as e } from "../lib/strings.js";
2
2
  import { cn as t } from "../lib/utils.js";
3
3
  import { o as n, s as r } from "./typography-DE0NGEIE.js";
4
4
  import { t as i } from "./badge-a2Z3K5aQ.js";
5
- import { t as a } from "./cards-CtBoSZG9.js";
5
+ import { t as a } from "./cards-RZxRLx3f.js";
6
6
  import { r as o } from "./layout.types-j7zZAPtg.js";
7
7
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
8
8
  //#region src/components/layout/settings/settings.tsx
@@ -140,4 +140,4 @@ f.displayName = "AsideNavShell";
140
140
  //#endregion
141
141
  export { p as n, l as r, f as t };
142
142
 
143
- //# sourceMappingURL=settings-QOBrbgdN.js.map
143
+ //# sourceMappingURL=settings-BeZOIEJB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-QOBrbgdN.js","names":[],"sources":["../../src/components/layout/settings/settings.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { SmartCard } from '@/components/base/cards';\nimport { Heading, Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tresolveLayoutLinkRenderer,\n\ttype LayoutNavigationAdapter,\n} from '../layout.types';\n\nexport interface AsideNavShellStrings {\n\tnavigationAriaLabel: string;\n}\n\nexport const defaultAsideNavShellStrings: AsideNavShellStrings = {\n\tnavigationAriaLabel: 'Settings navigation',\n};\n\nexport interface AsideNavItem {\n\tid: string;\n\tlabel: ReactNode;\n\thref?: string;\n\tdescription?: ReactNode;\n\ticon?: ComponentType<{ className?: string }>;\n\tbadge?: ReactNode;\n\tdisabled?: boolean;\n\texternal?: boolean;\n\tonSelect?: (id: string) => void;\n}\n\nexport interface AsideNavGroup {\n\tid: string;\n\tlabel?: ReactNode;\n\titems: AsideNavItem[];\n}\n\nexport interface AsideNavShellProps extends LayoutNavigationAdapter {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tgroups: AsideNavGroup[];\n\tcurrentId?: string;\n\tcurrentPath?: string;\n\tchildren?: ReactNode;\n\taside?: ReactNode;\n\tactions?: ReactNode;\n\tfooter?: ReactNode;\n\tclassName?: string;\n\tnavClassName?: string;\n\tcontentClassName?: string;\n\tstrings?: StringsProp<AsideNavShellStrings>;\n}\n\nexport type SettingsShellProps = AsideNavShellProps;\n\nfunction normalizePath(rawUrl?: string): string {\n\tif (!rawUrl) return '';\n\ttry {\n\t\tconst baseOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, baseOrigin);\n\t\tconst trimmed = parsed.pathname.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t} catch {\n\t\tconst clean = rawUrl.split('?')[0] ?? rawUrl;\n\t\tconst trimmed = clean.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t}\n}\n\nfunction isActiveItem(item: AsideNavItem, currentId?: string, currentPath?: string): boolean {\n\tif (currentId) return item.id === currentId;\n\tif (!currentPath || !item.href) return false;\n\tconst activePath = normalizePath(currentPath);\n\tconst itemPath = normalizePath(item.href);\n\treturn activePath === itemPath || activePath.startsWith(`${itemPath}/`);\n}\n\nexport function AsideNavShell({\n\ttitle,\n\tdescription,\n\tgroups,\n\tcurrentId,\n\tcurrentPath,\n\tchildren,\n\taside,\n\tactions,\n\tfooter,\n\tclassName,\n\tnavClassName,\n\tcontentClassName,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n}: AsideNavShellProps) {\n\tconst strings = useStrings(defaultAsideNavShellStrings, stringsProp);\n\tconst linkRenderer = resolveLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<section\n\t\t\tdata-component=\"aside-nav-shell\"\n\t\t\tdata-slot=\"aside-nav-shell\"\n\t\t\tclassName={cn('aside-nav-shell--component grid min-w-0 gap-5 lg:grid-cols-[17rem_minmax(0,1fr)]', className)}\n\t\t>\n\t\t\t<aside data-slot=\"aside-nav-shell-aside\" className=\"aside-nav-shell--aside min-w-0\">\n\t\t\t\t<SmartCard\n\t\t\t\t\tpadding=\"default\"\n\t\t\t\t\tsurface=\"card\"\n\t\t\t\t\tclassName={cn('aside-nav-shell--nav-card sticky top-[calc(var(--topbar-height)_+_1rem)]', navClassName)}\n\t\t\t\t\tcontentClassName=\"grid gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{!!aside && <div className=\"aside-nav-shell--aside-header\">{aside}</div>}\n\t\t\t\t\t<nav aria-label={strings.navigationAriaLabel} className=\"grid gap-4\">\n\t\t\t\t\t\t{groups.map((group) => (\n\t\t\t\t\t\t\t<div key={group.id} className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t{!!group.label && (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"px-2 uppercase tracking-normal\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className=\"grid gap-0.5\">\n\t\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\t\tconst active = isActiveItem(item, currentId, currentPath);\n\t\t\t\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-4 shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tactive ? 'text-primary' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"grid min-w-0 flex-1 gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight={active ? 'semibold' : 'medium'} className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge variant={active ? 'primary' : 'secondary'} className=\"shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={item.id} onClick={() => item.onSelect?.(item.id)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{linkRenderer({\n\t\t\t\t\t\t\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\t\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\texternal: item.external,\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'aside-nav-shell--item flex min-w-0 rounded-md px-2 py-2 text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary/8 text-foreground'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'text-muted-foreground hover:bg-muted/60 hover:text-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t'aria-label': typeof item.label === 'string' ? item.label : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</nav>\n\t\t\t\t</SmartCard>\n\t\t\t</aside>\n\n\t\t\t<div data-slot=\"aside-nav-shell-main\" className={cn('aside-nav-shell--main min-w-0 space-y-4', contentClassName)}>\n\t\t\t\t{(title || description || actions) && (\n\t\t\t\t\t<header className=\"aside-nav-shell--header flex min-w-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t{!!title && <Heading tag=\"h2\" className=\"border-0 pb-0\">{title}</Heading>}\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"mt-1 max-w-3xl\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!actions && <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div>}\n\t\t\t\t\t</header>\n\t\t\t\t)}\n\t\t\t\t<div data-slot=\"aside-nav-shell-content\" className=\"aside-nav-shell--content min-w-0\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t{!!footer && <footer className=\"aside-nav-shell--footer\">{footer}</footer>}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\nexport const SettingsShell = AsideNavShell;\n\nAsideNavShell.displayName = 'AsideNavShell';\n"],"mappings":"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"}
1
+ {"version":3,"file":"settings-BeZOIEJB.js","names":[],"sources":["../../src/components/layout/settings/settings.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { SmartCard } from '@/components/base/cards';\nimport { Heading, Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tresolveLayoutLinkRenderer,\n\ttype LayoutNavigationAdapter,\n} from '../layout.types';\n\nexport interface AsideNavShellStrings {\n\tnavigationAriaLabel: string;\n}\n\nexport const defaultAsideNavShellStrings: AsideNavShellStrings = {\n\tnavigationAriaLabel: 'Settings navigation',\n};\n\nexport interface AsideNavItem {\n\tid: string;\n\tlabel: ReactNode;\n\thref?: string;\n\tdescription?: ReactNode;\n\ticon?: ComponentType<{ className?: string }>;\n\tbadge?: ReactNode;\n\tdisabled?: boolean;\n\texternal?: boolean;\n\tonSelect?: (id: string) => void;\n}\n\nexport interface AsideNavGroup {\n\tid: string;\n\tlabel?: ReactNode;\n\titems: AsideNavItem[];\n}\n\nexport interface AsideNavShellProps extends LayoutNavigationAdapter {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tgroups: AsideNavGroup[];\n\tcurrentId?: string;\n\tcurrentPath?: string;\n\tchildren?: ReactNode;\n\taside?: ReactNode;\n\tactions?: ReactNode;\n\tfooter?: ReactNode;\n\tclassName?: string;\n\tnavClassName?: string;\n\tcontentClassName?: string;\n\tstrings?: StringsProp<AsideNavShellStrings>;\n}\n\nexport type SettingsShellProps = AsideNavShellProps;\n\nfunction normalizePath(rawUrl?: string): string {\n\tif (!rawUrl) return '';\n\ttry {\n\t\tconst baseOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, baseOrigin);\n\t\tconst trimmed = parsed.pathname.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t} catch {\n\t\tconst clean = rawUrl.split('?')[0] ?? rawUrl;\n\t\tconst trimmed = clean.replace(/\\/+$/, '');\n\t\treturn trimmed.length > 0 ? trimmed : '/';\n\t}\n}\n\nfunction isActiveItem(item: AsideNavItem, currentId?: string, currentPath?: string): boolean {\n\tif (currentId) return item.id === currentId;\n\tif (!currentPath || !item.href) return false;\n\tconst activePath = normalizePath(currentPath);\n\tconst itemPath = normalizePath(item.href);\n\treturn activePath === itemPath || activePath.startsWith(`${itemPath}/`);\n}\n\nexport function AsideNavShell({\n\ttitle,\n\tdescription,\n\tgroups,\n\tcurrentId,\n\tcurrentPath,\n\tchildren,\n\taside,\n\tactions,\n\tfooter,\n\tclassName,\n\tnavClassName,\n\tcontentClassName,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n}: AsideNavShellProps) {\n\tconst strings = useStrings(defaultAsideNavShellStrings, stringsProp);\n\tconst linkRenderer = resolveLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<section\n\t\t\tdata-component=\"aside-nav-shell\"\n\t\t\tdata-slot=\"aside-nav-shell\"\n\t\t\tclassName={cn('aside-nav-shell--component grid min-w-0 gap-5 lg:grid-cols-[17rem_minmax(0,1fr)]', className)}\n\t\t>\n\t\t\t<aside data-slot=\"aside-nav-shell-aside\" className=\"aside-nav-shell--aside min-w-0\">\n\t\t\t\t<SmartCard\n\t\t\t\t\tpadding=\"default\"\n\t\t\t\t\tsurface=\"card\"\n\t\t\t\t\tclassName={cn('aside-nav-shell--nav-card sticky top-[calc(var(--topbar-height)_+_1rem)]', navClassName)}\n\t\t\t\t\tcontentClassName=\"grid gap-4\"\n\t\t\t\t>\n\t\t\t\t\t{!!aside && <div className=\"aside-nav-shell--aside-header\">{aside}</div>}\n\t\t\t\t\t<nav aria-label={strings.navigationAriaLabel} className=\"grid gap-4\">\n\t\t\t\t\t\t{groups.map((group) => (\n\t\t\t\t\t\t\t<div key={group.id} className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t{!!group.label && (\n\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"px-2 uppercase tracking-normal\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className=\"grid gap-0.5\">\n\t\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\t\tconst active = isActiveItem(item, currentId, currentPath);\n\t\t\t\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-4 shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tactive ? 'text-primary' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"grid min-w-0 flex-1 gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight={active ? 'semibold' : 'medium'} className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge variant={active ? 'primary' : 'secondary'} className=\"shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={item.id} onClick={() => item.onSelect?.(item.id)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{linkRenderer({\n\t\t\t\t\t\t\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\t\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\texternal: item.external,\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'aside-nav-shell--item flex min-w-0 rounded-md px-2 py-2 text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-primary/8 text-foreground'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'text-muted-foreground hover:bg-muted/60 hover:text-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t'aria-label': typeof item.label === 'string' ? item.label : undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</nav>\n\t\t\t\t</SmartCard>\n\t\t\t</aside>\n\n\t\t\t<div data-slot=\"aside-nav-shell-main\" className={cn('aside-nav-shell--main min-w-0 space-y-4', contentClassName)}>\n\t\t\t\t{(title || description || actions) && (\n\t\t\t\t\t<header className=\"aside-nav-shell--header flex min-w-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t{!!title && <Heading tag=\"h2\" className=\"border-0 pb-0\">{title}</Heading>}\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"mt-1 max-w-3xl\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!actions && <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div>}\n\t\t\t\t\t</header>\n\t\t\t\t)}\n\t\t\t\t<div data-slot=\"aside-nav-shell-content\" className=\"aside-nav-shell--content min-w-0\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t{!!footer && <footer className=\"aside-nav-shell--footer\">{footer}</footer>}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\nexport const SettingsShell = AsideNavShell;\n\nAsideNavShell.displayName = 'AsideNavShell';\n"],"mappings":"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"}