admin-ui-starter-kit 0.6.2 → 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 (480) hide show
  1. package/dist/_shared/{auth-B_KVUjsB.cjs → auth-DdezEtKK.cjs} +2 -2
  2. package/dist/_shared/{auth-B_KVUjsB.cjs.map → auth-DdezEtKK.cjs.map} +1 -1
  3. package/dist/_shared/{auth-C_TgyzDl.js → auth-e7yab9pK.js} +2 -2
  4. package/dist/_shared/{auth-C_TgyzDl.js.map → auth-e7yab9pK.js.map} +1 -1
  5. package/dist/_shared/{buttons-C8jy-jMd.cjs → buttons-Bek9F7qK.cjs} +2 -2
  6. package/dist/_shared/{buttons-C8jy-jMd.cjs.map → buttons-Bek9F7qK.cjs.map} +1 -1
  7. package/dist/_shared/{buttons-MxvdokeK.js → buttons-DcynMPnE.js} +2 -2
  8. package/dist/_shared/{buttons-MxvdokeK.js.map → buttons-DcynMPnE.js.map} +1 -1
  9. package/dist/_shared/cards-CbbHly7W.cjs +2 -0
  10. package/dist/_shared/cards-CbbHly7W.cjs.map +1 -0
  11. package/dist/_shared/{cards-CtBoSZG9.js → cards-RZxRLx3f.js} +6 -6
  12. package/dist/_shared/cards-RZxRLx3f.js.map +1 -0
  13. package/dist/_shared/{comments-DGBxF9fD.js → comments-BJqgvSFY.js} +2 -2
  14. package/dist/_shared/{comments-DGBxF9fD.js.map → comments-BJqgvSFY.js.map} +1 -1
  15. package/dist/_shared/{comments-C8iXy9XO.cjs → comments-BjPciQfo.cjs} +2 -2
  16. package/dist/_shared/{comments-C8iXy9XO.cjs.map → comments-BjPciQfo.cjs.map} +1 -1
  17. package/dist/_shared/{data-display-C_44_V-W.cjs → data-display-C21skrV4.cjs} +2 -2
  18. package/dist/_shared/{data-display-C_44_V-W.cjs.map → data-display-C21skrV4.cjs.map} +1 -1
  19. package/dist/_shared/{data-display-CRFaMkxT.js → data-display-C5-1dZua.js} +71 -71
  20. package/dist/_shared/{data-display-CRFaMkxT.js.map → data-display-C5-1dZua.js.map} +1 -1
  21. package/dist/_shared/{forms-qnwoUqxf.js → forms-BoquZE2Y.js} +3 -3
  22. package/dist/_shared/{forms-qnwoUqxf.js.map → forms-BoquZE2Y.js.map} +1 -1
  23. package/dist/_shared/{forms-rmKcy5uO.cjs → forms-CzrEYejY.cjs} +2 -2
  24. package/dist/_shared/{forms-rmKcy5uO.cjs.map → forms-CzrEYejY.cjs.map} +1 -1
  25. package/dist/_shared/{page-C6EzwvTz.cjs → page-D8UMXREv.cjs} +2 -2
  26. package/dist/_shared/{page-C6EzwvTz.cjs.map → page-D8UMXREv.cjs.map} +1 -1
  27. package/dist/_shared/{page-DCW1eWCJ.js → page-D9LNsHMN.js} +2 -2
  28. package/dist/_shared/{page-DCW1eWCJ.js.map → page-D9LNsHMN.js.map} +1 -1
  29. package/dist/_shared/{settings-QOBrbgdN.js → settings-BeZOIEJB.js} +2 -2
  30. package/dist/_shared/{settings-QOBrbgdN.js.map → settings-BeZOIEJB.js.map} +1 -1
  31. package/dist/_shared/{settings-DbAyxMrX.cjs → settings-DI-K34bW.cjs} +2 -2
  32. package/dist/_shared/{settings-DbAyxMrX.cjs.map → settings-DI-K34bW.cjs.map} +1 -1
  33. package/dist/_shared/{table-CUA_A-oO.js → table-B_pqCQxC.js} +3 -3
  34. package/dist/_shared/table-B_pqCQxC.js.map +1 -0
  35. package/dist/_shared/table-CGVOXtdv.cjs +2 -0
  36. package/dist/_shared/table-CGVOXtdv.cjs.map +1 -0
  37. package/dist/components/base/buttons/index.cjs +1 -1
  38. package/dist/components/base/buttons/index.js +1 -1
  39. package/dist/components/base/cards/index.cjs +1 -1
  40. package/dist/components/base/cards/index.js +1 -1
  41. package/dist/components/base/forms/index.cjs +1 -1
  42. package/dist/components/base/forms/index.js +1 -1
  43. package/dist/components/base/table/index.cjs +1 -1
  44. package/dist/components/base/table/index.js +1 -1
  45. package/dist/components/composed/admin/index.cjs +1 -1
  46. package/dist/components/composed/admin/index.js +2 -2
  47. package/dist/components/composed/ai/index.cjs +1 -1
  48. package/dist/components/composed/ai/index.js +2 -2
  49. package/dist/components/composed/analytics/index.cjs +1 -1
  50. package/dist/components/composed/analytics/index.js +1 -1
  51. package/dist/components/composed/cards/index.cjs +1 -1
  52. package/dist/components/composed/cards/index.js +2 -2
  53. package/dist/components/composed/commerce/index.cjs +1 -1
  54. package/dist/components/composed/commerce/index.js +2 -2
  55. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  56. package/dist/components/composed/dark-surfaces/index.js +1 -1
  57. package/dist/components/composed/data-display/index.cjs +1 -1
  58. package/dist/components/composed/data-display/index.js +1 -1
  59. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  60. package/dist/components/composed/navigation/index.cjs +1 -1
  61. package/dist/components/composed/navigation/index.js +1 -1
  62. package/dist/components/composed/timelines/index.cjs +1 -1
  63. package/dist/components/composed/timelines/index.js +1 -1
  64. package/dist/components/features/activities/index.cjs +1 -1
  65. package/dist/components/features/activities/index.js +1 -1
  66. package/dist/components/features/card/index.cjs +1 -1
  67. package/dist/components/features/card/index.js +1 -1
  68. package/dist/components/features/comments/index.cjs +1 -1
  69. package/dist/components/features/comments/index.js +1 -1
  70. package/dist/components/features/event-log/index.cjs +1 -1
  71. package/dist/components/features/event-log/index.js +2 -2
  72. package/dist/components/features/media-library/index.cjs +1 -1
  73. package/dist/components/features/media-library/index.js +1 -1
  74. package/dist/components/features/products/index.cjs +1 -1
  75. package/dist/components/features/products/index.js +4 -4
  76. package/dist/components/features/resource/index.cjs +1 -1
  77. package/dist/components/features/resource/index.js +2 -2
  78. package/dist/components/features/schema-form/index.cjs +1 -1
  79. package/dist/components/features/schema-form/index.js +2 -2
  80. package/dist/components/layout/auth/index.cjs +1 -1
  81. package/dist/components/layout/auth/index.js +1 -1
  82. package/dist/components/layout/index.cjs +1 -1
  83. package/dist/components/layout/index.js +3 -3
  84. package/dist/components/layout/page/index.cjs +1 -1
  85. package/dist/components/layout/page/index.js +1 -1
  86. package/dist/components/layout/settings/index.cjs +1 -1
  87. package/dist/components/layout/settings/index.js +1 -1
  88. package/dist/showcase/assets/{AreaChart-CFYg5vW0.js → AreaChart-Y0ZwblHU.js} +1 -1
  89. package/dist/showcase/assets/{CompositeItem-C1v8tfgt.js → CompositeItem-BIY_Cp7P.js} +1 -1
  90. package/dist/showcase/assets/{CompositeRoot-DVtTCBlx.js → CompositeRoot-DSPvBRQr.js} +1 -1
  91. package/dist/showcase/assets/{DialogTrigger-CiVZgbZe.js → DialogTrigger-DHUp8vXe.js} +1 -1
  92. package/dist/showcase/assets/{LabelableContext-CNcXHqnK.js → LabelableContext-CasUI4hR.js} +1 -1
  93. package/dist/showcase/assets/{PreviewLayout-CBTybzKu.js → PreviewLayout-B_l930k0.js} +1 -1
  94. package/dist/showcase/assets/{RadioGroup-DTNAD-0J.js → RadioGroup-BgZ-UH79.js} +1 -1
  95. package/dist/showcase/assets/{ScrollAreaCorner-Gau2B-d1.js → ScrollAreaCorner-BbwFElLA.js} +1 -1
  96. package/dist/showcase/assets/{Separator-DOIh4aar.js → Separator-dQuencsA.js} +1 -1
  97. package/dist/showcase/assets/{ToolbarRootContext-BbugmthZ.js → ToolbarRootContext-BE0hbejq.js} +1 -1
  98. package/dist/showcase/assets/{accordion-CB4ePZYm.js → accordion-D93ZNsLn.js} +1 -1
  99. package/dist/showcase/assets/{accordion-variants-De2q5GIH.js → accordion-variants-Bl4bIQH4.js} +1 -1
  100. package/dist/showcase/assets/{action-menu-wJVcvfmC.js → action-menu--rEgMzDi.js} +1 -1
  101. package/dist/showcase/assets/{actions-BL1lpPFC.js → actions-3iedOWD9.js} +1 -1
  102. package/dist/showcase/assets/{activities-C578ZINa.js → activities-CyrAWFlu.js} +1 -1
  103. package/dist/showcase/assets/{activities-feed-card-BeXMgsNO.js → activities-feed-card-bhIATc2O.js} +1 -1
  104. package/dist/showcase/assets/{admin-DKJPb23G.js → admin-CZzNsj2q.js} +1 -1
  105. package/dist/showcase/assets/{ai-ewP8qLOJ.js → ai-CasHwkW4.js} +1 -1
  106. package/dist/showcase/assets/{ai-artifact-BaYtjrP5.js → ai-artifact-BgWvrLAb.js} +1 -1
  107. package/dist/showcase/assets/{ai-chat-DxxlaytU.js → ai-chat-seS9aW-1.js} +1 -1
  108. package/dist/showcase/assets/{ai-elements-BWraZPyC.js → ai-elements-Tku5_ous.js} +1 -1
  109. package/dist/showcase/assets/{ai-tool-call-Da4srLLe.js → ai-tool-call-BU6xbmXG.js} +1 -1
  110. package/dist/showcase/assets/{alert-CQI2pomK.js → alert-6Emt6KX2.js} +1 -1
  111. package/dist/showcase/assets/{alert-S12iMEhF.js → alert-B6aLWiRW.js} +1 -1
  112. package/dist/showcase/assets/{alert-xINZmLgm.js → alert-CtoTQ0vN.js} +1 -1
  113. package/dist/showcase/assets/{api-key-list-CL6je8dF.js → api-key-list-C0glWR3z.js} +1 -1
  114. package/dist/showcase/assets/{api-key-list-wxmuRN1m.js → api-key-list-DcWSbY3u.js} +1 -1
  115. package/dist/showcase/assets/{app-sidebar-LVtcgiT_.js → app-sidebar-D_eNP_jh.js} +1 -1
  116. package/dist/showcase/assets/arrow-down-qyKZ1H5j.js +1 -0
  117. package/dist/showcase/assets/arrow-left-C9I0h_su.js +1 -0
  118. package/dist/showcase/assets/arrow-right-DswaRsr6.js +1 -0
  119. package/dist/showcase/assets/arrow-up-5BijPOxK.js +1 -0
  120. package/dist/showcase/assets/arrow-up-right-CbVVNT6g.js +1 -0
  121. package/dist/showcase/assets/{avatar-Bv9x1eBh.js → avatar-BYHVCvVW.js} +1 -1
  122. package/dist/showcase/assets/{avatar-D29-FL5U.js → avatar-BlLAVC87.js} +1 -1
  123. package/dist/showcase/assets/{avatar-BEvs3dD_.js → avatar-DQTXjcS4.js} +1 -1
  124. package/dist/showcase/assets/{avatar-CC3R0R-x.js → avatar-DveZy09C.js} +1 -1
  125. package/dist/showcase/assets/{badge-B1YIk7bi.js → badge-Bth3mRTh.js} +1 -1
  126. package/dist/showcase/assets/{badge-check-DGmg0_g_.js → badge-check-DocF8Ho3.js} +1 -1
  127. package/dist/showcase/assets/{bell-Cq9n0a2v.js → bell-DXBoeAzi.js} +1 -1
  128. package/dist/showcase/assets/{bot-DxRjlJlO.js → bot-Ch-Y1HK8.js} +1 -1
  129. package/dist/showcase/assets/{box-CIh-_2DI.js → box-72m9QSDa.js} +1 -1
  130. package/dist/showcase/assets/{braces-BI_smuFG.js → braces-CC17X3TE.js} +1 -1
  131. package/dist/showcase/assets/{brain-BCAmDdGT.js → brain-Dvbla_5x.js} +1 -1
  132. package/dist/showcase/assets/{brand-CYmrK-FI.js → brand-D5ciAq8v.js} +1 -1
  133. package/dist/showcase/assets/{breadcrumb-DXOwTQNp.js → breadcrumb-BBCaOVyz.js} +1 -1
  134. package/dist/showcase/assets/{breadcrumb-DdDGc08y.js → breadcrumb-Bt8yVTCj.js} +1 -1
  135. package/dist/showcase/assets/{breadcrumbs-SwqzwYW_.js → breadcrumbs-CkVWfcAN.js} +1 -1
  136. package/dist/showcase/assets/{briefcase-CKrv_pkI.js → briefcase-8rQTJwpE.js} +1 -1
  137. package/dist/showcase/assets/{building-2-4f1nNGpT.js → building-2-CV7gTtXz.js} +1 -1
  138. package/dist/showcase/assets/{button-B9I1TrfQ.js → button-HGjoBio3.js} +1 -1
  139. package/dist/showcase/assets/{button-group-DUfRVZy2.js → button-group-LWToSCrp.js} +1 -1
  140. package/dist/showcase/assets/{buttons-Crl8nJKG.js → buttons-Bn_dX6Kk.js} +1 -1
  141. package/dist/showcase/assets/{calendar-4Uqeswbn.js → calendar-BTsffmY8.js} +1 -1
  142. package/dist/showcase/assets/{calendar-DxjW_eNc.js → calendar-Bhpyn4u0.js} +1 -1
  143. package/dist/showcase/assets/{calendar-Cl5l4Ip1.js → calendar-DjrUTKcD.js} +1 -1
  144. package/dist/showcase/assets/{calendar-days-DmDuaOAc.js → calendar-days-BKCkzWjV.js} +1 -1
  145. package/dist/showcase/assets/{camera-j8dT39qf.js → camera-EjpDG3mc.js} +1 -1
  146. package/dist/showcase/assets/{card-DRalKV4i.js → card-Bp6iGuOF.js} +1 -1
  147. package/dist/showcase/assets/{card-BQ_zBZlQ.js → card-CHc6AVFt.js} +1 -1
  148. package/dist/showcase/assets/card-primitives-Bv6XGPJd.js +1 -0
  149. package/dist/showcase/assets/{card-radio-group-Dq7AUPTp.js → card-radio-group-Ce9FsiSv.js} +1 -1
  150. package/dist/showcase/assets/{cards-MR2JolOy.js → cards-_CGG9zir.js} +1 -1
  151. package/dist/showcase/assets/{carousel-DMceNGDq.js → carousel-BVbsKH2W.js} +1 -1
  152. package/dist/showcase/assets/{cell-renderers-VbI9xEAd.js → cell-renderers-CosD6Gby.js} +1 -1
  153. package/dist/showcase/assets/{chart-DW4naldz.js → chart-CwOp8Sf8.js} +1 -1
  154. package/dist/showcase/assets/{chart-column-CbUwWFn7.js → chart-column-sz871NdJ.js} +1 -1
  155. package/dist/showcase/assets/{checkbox-BqwbtGCF.js → checkbox-BO38TYqr.js} +1 -1
  156. package/dist/showcase/assets/checkbox-W4MhlPlJ.js +1 -0
  157. package/dist/showcase/assets/chevron-down-BFh1Fz2P.js +1 -0
  158. package/dist/showcase/assets/chevron-left-C5_X5glO.js +1 -0
  159. package/dist/showcase/assets/chevron-up-DPH3boVS.js +1 -0
  160. package/dist/showcase/assets/chevrons-up-down-CM5mIDaw.js +1 -0
  161. package/dist/showcase/assets/circle-BFDzL1iF.js +1 -0
  162. package/dist/showcase/assets/{circle-alert-BObXfzSP.js → circle-alert-C6MbOB0m.js} +1 -1
  163. package/dist/showcase/assets/circle-check-C0X85t4j.js +1 -0
  164. package/dist/showcase/assets/circle-check-big-CBaodck_.js +1 -0
  165. package/dist/showcase/assets/circle-dot-DdRpIhnL.js +1 -0
  166. package/dist/showcase/assets/{circle-question-mark-BeRdyU_C.js → circle-question-mark-CKlcead7.js} +1 -1
  167. package/dist/showcase/assets/{circle-x-Dh3sb4UC.js → circle-x-MO44aKHe.js} +1 -1
  168. package/dist/showcase/assets/clock-3-CXQJFcbh.js +1 -0
  169. package/dist/showcase/assets/clock-GhBJJ6n1.js +1 -0
  170. package/dist/showcase/assets/{code-xml-q7JPxij0.js → code-xml-BSX7Qyi5.js} +1 -1
  171. package/dist/showcase/assets/{collapsible-DDV7VHy5.js → collapsible-CZLTO5EH.js} +1 -1
  172. package/dist/showcase/assets/{collapsible-BbiGHywy.js → collapsible-LrDO_sSQ.js} +1 -1
  173. package/dist/showcase/assets/{combobox-Dv_OkynR.js → combobox-TmDBXkM-.js} +1 -1
  174. package/dist/showcase/assets/{command-BSmiujfZ.js → command-9-r1qrJt.js} +1 -1
  175. package/dist/showcase/assets/{command-Cw81GF7c.js → command-DGne3l9s.js} +1 -1
  176. package/dist/showcase/assets/{comment-composer-C09JANlW.js → comment-composer-BI0qnvuY.js} +1 -1
  177. package/dist/showcase/assets/{comment-item-DsQshj1L.js → comment-item-Cedds6Lm.js} +1 -1
  178. package/dist/showcase/assets/{comments-CO3QCKyX.js → comments-De02NOns.js} +1 -1
  179. package/dist/showcase/assets/{commerce-BvnnX8Ui.js → commerce-DldtS83o.js} +1 -1
  180. package/dist/showcase/assets/{composite-BjZbcKJw.js → composite-BjZZlzzb.js} +1 -1
  181. package/dist/showcase/assets/{contact-card-Dq50G6UK.js → contact-card-muCZ3uXV.js} +1 -1
  182. package/dist/showcase/assets/{content-container-BQZdQhX2.js → content-container-BxSLICeL.js} +1 -1
  183. package/dist/showcase/assets/{copyable-BdfWxV6u.js → copyable-DYhhmTqM.js} +1 -1
  184. package/dist/showcase/assets/{copyable-lUNYfscm.js → copyable-MNU75-J9.js} +1 -1
  185. package/dist/showcase/assets/{course-card-BTIFY84q.js → course-card-Dl1wsuJx.js} +1 -1
  186. package/dist/showcase/assets/{cpu-CzkgJ-zb.js → cpu-CsWq4fcX.js} +1 -1
  187. package/dist/showcase/assets/{credit-card-D_wnXbTK.js → credit-card-B0AUZiWw.js} +1 -1
  188. package/dist/showcase/assets/{css-variables-BVjcOHGr.js → css-variables-Be7DzahT.js} +1 -1
  189. package/dist/showcase/assets/{currency-BCX6yQ2j.js → currency-BtPM_Xtw.js} +1 -1
  190. package/dist/showcase/assets/{dark-surfaces-BO6sWHrV.js → dark-surfaces-DRFERSEv.js} +1 -1
  191. package/dist/showcase/assets/{data-view-DqpNNGp5.js → data-view-DmWd0h7G.js} +2 -2
  192. package/dist/showcase/assets/{data-view-C8ThO9ha.js → data-view-DnLH2o0i.js} +1 -1
  193. package/dist/showcase/assets/{database-Ad0l2Bjl.js → database-C0YqGaQ_.js} +1 -1
  194. package/dist/showcase/assets/{date-block-CMKpiRdA.js → date-block-BQH25FLS.js} +1 -1
  195. package/dist/showcase/assets/{date-picker-CRogiefV.js → date-picker-BF-jevhh.js} +1 -1
  196. package/dist/showcase/assets/{date-pickers-CuRRGP-F.js → date-pickers-q2v3ajJm.js} +1 -1
  197. package/dist/showcase/assets/{dense-info-BL_cGFVK.js → dense-info-Cb-roqDU.js} +1 -1
  198. package/dist/showcase/assets/{design-system-consistency-BarrI2Uj.js → design-system-consistency-DMSJknaM.js} +1 -1
  199. package/dist/showcase/assets/{dialog-DbEG3v2T.js → dialog-C0ALRmbP.js} +1 -1
  200. package/dist/showcase/assets/{dialog-BEKecyE3.js → dialog-CbXon08k.js} +1 -1
  201. package/dist/showcase/assets/{display-utilities-CQRcCpjT.js → display-utilities-kBUVw7o3.js} +1 -1
  202. package/dist/showcase/assets/{dist-q3PLGr1_.js → dist-CTSkWj_M.js} +1 -1
  203. package/dist/showcase/assets/{dist-CS2Ky1_m.js → dist-W8bxVfew.js} +1 -1
  204. package/dist/showcase/assets/{dollar-sign-lghPxE96.js → dollar-sign-VNxVZleW.js} +1 -1
  205. package/dist/showcase/assets/{download-Cx5kUzHm.js → download-Ds_6eIpx.js} +1 -1
  206. package/dist/showcase/assets/{dropdown-menu-CXYQqRJA.js → dropdown-menu-C1G_y9dv.js} +1 -1
  207. package/dist/showcase/assets/{dropzone-DK0kBLfC.js → dropzone-CxOLmdkt.js} +1 -1
  208. package/dist/showcase/assets/{earth-BgJkqIAs.js → earth-HLyEI1oq.js} +1 -1
  209. package/dist/showcase/assets/{ellipsis-CP0hyAeS.js → ellipsis-BLyAd9A-.js} +1 -1
  210. package/dist/showcase/assets/{ellipsis-vertical-BdpRiDbb.js → ellipsis-vertical-TG4mYU2J.js} +1 -1
  211. package/dist/showcase/assets/{empty-CO_e2e_g.js → empty-B54k9xAG.js} +1 -1
  212. package/dist/showcase/assets/{empty-item-D39AT9RK.js → empty-item-BmA4rmq7.js} +1 -1
  213. package/dist/showcase/assets/{empty-state-Luba-tbF.js → empty-state-CH7gjjg7.js} +1 -1
  214. package/dist/showcase/assets/{empty-state-CTQjlkxC.js → empty-state-hUKvmKa-.js} +1 -1
  215. package/dist/showcase/assets/{enhanced-activities-e2k5R4sk.js → enhanced-activities-BRDVL9RR.js} +1 -1
  216. package/dist/showcase/assets/{enhanced-combobox-CY9QcVEl.js → enhanced-combobox-2wbQJS6R.js} +1 -1
  217. package/dist/showcase/assets/{esm-DPz8A4Wl.js → esm-CUTefMLr.js} +1 -1
  218. package/dist/showcase/assets/{event-calendar-DuQntfyO.js → event-calendar-Bf9xFZlt.js} +1 -1
  219. package/dist/showcase/assets/{event-log-B8B_0-q5.js → event-log-CeRDSL-h.js} +1 -1
  220. package/dist/showcase/assets/{example-Rrx9vj75.js → example-CJMJcnb4.js} +1 -1
  221. package/dist/showcase/assets/{external-link-BkCjE03j.js → external-link-CvXhYrnd.js} +1 -1
  222. package/dist/showcase/assets/{eye-BKhfxIeD.js → eye-Cl_GfUKH.js} +1 -1
  223. package/dist/showcase/assets/{feature-announcement-CRN6kk4B.js → feature-announcement-Dw0SokLo.js} +1 -1
  224. package/dist/showcase/assets/{file-BBUnjRPN.js → file-CJFWrwy1.js} +1 -1
  225. package/dist/showcase/assets/{file-text-Clv0qFr3.js → file-text-BTTFP8Jo.js} +1 -1
  226. package/dist/showcase/assets/{filter-layout-Bskvgeps.js → filter-layout-DUVqG5Ql.js} +1 -1
  227. package/dist/showcase/assets/{filters-DqE5xQEz.js → filters-BLcCaplV.js} +1 -1
  228. package/dist/showcase/assets/{flag-BQ0Brbw9.js → flag-BxI3EGPG.js} +1 -1
  229. package/dist/showcase/assets/{folder-open-CuUaUrxa.js → folder-open-4d8qsiAj.js} +1 -1
  230. package/dist/showcase/assets/{form-field-Dg_Az7lk.js → form-field-Dhy0eM5B.js} +1 -1
  231. package/dist/showcase/assets/{format-BnF8gL8z.js → format-zGqa9Olc.js} +1 -1
  232. package/dist/showcase/assets/{forms-D2SGtkKv.js → forms-D99qG5Gb.js} +1 -1
  233. package/dist/showcase/assets/{funnel-qCC9cfXa.js → funnel-Cg7SOShf.js} +1 -1
  234. package/dist/showcase/assets/{generic-0wwhvFWa.js → generic-CfrG943t.js} +1 -1
  235. package/dist/showcase/assets/{getPseudoElementBounds-DyTpOaBA.js → getPseudoElementBounds-lw5shsdM.js} +1 -1
  236. package/dist/showcase/assets/{gift-ibO6X3CO.js → gift-BXtKbzvA.js} +1 -1
  237. package/dist/showcase/assets/{giftcard-cards-BJ0gmgv0.js → giftcard-cards-CqYaN0jC.js} +1 -1
  238. package/dist/showcase/assets/{git-branch-QLvR3_wX.js → git-branch-BWAuIMOQ.js} +1 -1
  239. package/dist/showcase/assets/{global-search-BtYqFKyN.js → global-search-CHUva8pR.js} +1 -1
  240. package/dist/showcase/assets/{global-search-B2zvjiO2.js → global-search-Df7JovOG.js} +1 -1
  241. package/dist/showcase/assets/{globe-Byoz7QmA.js → globe-CvIW_foU.js} +1 -1
  242. package/dist/showcase/assets/{gradient-card-CymI8itB.js → gradient-card-CdM2J1Hv.js} +1 -1
  243. package/dist/showcase/assets/{hash-DL-sHZny.js → hash-wBs5gyr_.js} +1 -1
  244. package/dist/showcase/assets/{header-C9RMgEgD.js → header-DXPFmpUT.js} +1 -1
  245. package/dist/showcase/assets/{header-notifications-BT643QVK.js → header-notifications-FsnCJLpe.js} +1 -1
  246. package/dist/showcase/assets/{heart-gHsYuS4V.js → heart-B4fOMIr6.js} +1 -1
  247. package/dist/showcase/assets/{hooks-Dj4gswMj.js → hooks-DtMOMalj.js} +1 -1
  248. package/dist/showcase/assets/{house-Dew9jimg.js → house-hebmAxEE.js} +1 -1
  249. package/dist/showcase/assets/{icon-badge-GMIN-bca.js → icon-badge-DrZ5qGpa.js} +1 -1
  250. package/dist/showcase/assets/{icon-badge-C-mGQdGQ.js → icon-badge-JEug_P_U.js} +1 -1
  251. package/dist/showcase/assets/{image-Cda8layy.js → image-CxNywgkb.js} +1 -1
  252. package/dist/showcase/assets/{inbox-hJEV8TEx.js → inbox-DqAmGdDd.js} +1 -1
  253. package/dist/showcase/assets/index-DujM0kEF.css +2 -0
  254. package/dist/showcase/assets/{index-o71HAmc3.js → index-jD-KSiHu.js} +2 -2
  255. package/dist/showcase/assets/inertValue-Dg9TwvOb.js +1 -0
  256. package/dist/showcase/assets/{info-B4aULRpz.js → info-B5fZn_ZC.js} +1 -1
  257. package/dist/showcase/assets/{inline-stat-CDQocPgN.js → inline-stat-CklKufoA.js} +1 -1
  258. package/dist/showcase/assets/{inline-stat-BzXB3FNC.js → inline-stat-Dep7oHIi.js} +1 -1
  259. package/dist/showcase/assets/{input-CYTQ9nWN.js → input-CkNgwwCs.js} +1 -1
  260. package/dist/showcase/assets/{input-CLysAarX.js → input-DAPMRlKO.js} +1 -1
  261. package/dist/showcase/assets/{input-group-DYMTMed1.js → input-group-06D68uB6.js} +1 -1
  262. package/dist/showcase/assets/{input-group-DtkAnPaQ.js → input-group-Bq9aXQPG.js} +1 -1
  263. package/dist/showcase/assets/{inputs-C2flJn12.js → inputs-C8G3y-zR.js} +1 -1
  264. package/dist/showcase/assets/{installation-CCvBKDNO.js → installation-BV5xOvoE.js} +1 -1
  265. package/dist/showcase/assets/{invoice-header-C1G_aVIm.js → invoice-header-BcUxzT68.js} +1 -1
  266. package/dist/showcase/assets/{invoice-items-Ak0CMjDh.js → invoice-items-B42Jfxl7.js} +1 -1
  267. package/dist/showcase/assets/{invoice-mini-B7Dda49y.js → invoice-mini-RJGdlErg.js} +1 -1
  268. package/dist/showcase/assets/{invoice-table-Bl9InDl0.js → invoice-table--MdP6ysv.js} +1 -1
  269. package/dist/showcase/assets/isSameDay-srttAIjD.js +1 -0
  270. package/dist/showcase/assets/isToday-BPub5Zvi.js +1 -0
  271. package/dist/showcase/assets/{italic-CJzEjX5j.js → italic-1BNA_XlU.js} +1 -1
  272. package/dist/showcase/assets/{item-BL_Y_0ou.js → item-B9KyqUGa.js} +1 -1
  273. package/dist/showcase/assets/{item-nf1zOtF7.js → item-DoIlPm6J.js} +1 -1
  274. package/dist/showcase/assets/{item-Oe2aHuvr.js → item-ffIfXEGd.js} +1 -1
  275. package/dist/showcase/assets/{kanban-CB5Hghoo.js → kanban-Cfad3edR.js} +1 -1
  276. package/dist/showcase/assets/{key-round-BQwcojkz.js → key-round-J11Zc216.js} +1 -1
  277. package/dist/showcase/assets/{label-HtkE4eII.js → label-DqaB8ZB2.js} +1 -1
  278. package/dist/showcase/assets/{languages-69N5-h2e.js → languages-D9UaP3QU.js} +1 -1
  279. package/dist/showcase/assets/{layers-CBPYgoAb.js → layers-QXZ9Jfej.js} +1 -1
  280. package/dist/showcase/assets/{layout-app-shell-BfNh8jd0.js → layout-app-shell-CW1eRJmU.js} +1 -1
  281. package/dist/showcase/assets/{layout-auth-Ct29XkSH.js → layout-auth-j4K6lveg.js} +1 -1
  282. package/dist/showcase/assets/{layout-containers-DWN4xKbf.js → layout-containers-NclLtsV0.js} +1 -1
  283. package/dist/showcase/assets/{layout-header-DUX4zFrH.js → layout-header-B8AOTiwL.js} +1 -1
  284. package/dist/showcase/assets/{layout-page-CsqULW71.js → layout-page-DM79QHyW.js} +1 -1
  285. package/dist/showcase/assets/{layout-primitives-CQJ0_wTo.js → layout-primitives-Dyop-WMt.js} +1 -1
  286. package/dist/showcase/assets/{layout-sidebar-la-tC4xZ.js → layout-sidebar-uBNaHqjD.js} +1 -1
  287. package/dist/showcase/assets/{layout-users-6fAYxZ3Z.js → layout-users-BkhDiOOz.js} +1 -1
  288. package/dist/showcase/assets/{layout-workspace-BbDOjmrE.js → layout-workspace-C2hSimZW.js} +1 -1
  289. package/dist/showcase/assets/{lib-C46V0Rr-.js → lib-CDssULuD.js} +1 -1
  290. package/dist/showcase/assets/{list-checks-BkQYzehf.js → list-checks-DA2jqXdm.js} +1 -1
  291. package/dist/showcase/assets/{lock-CMrS2EKU.js → lock-BDZLNQLR.js} +1 -1
  292. package/dist/showcase/assets/{lock-keyhole-B1BEkNvm.js → lock-keyhole-CWYENd9O.js} +1 -1
  293. package/dist/showcase/assets/{mail-Bo_4xDQw.js → mail-CCdaRmft.js} +1 -1
  294. package/dist/showcase/assets/{mail-check-BprACMug.js → mail-check-DZF1VbCX.js} +1 -1
  295. package/dist/showcase/assets/{map-Br-xZYf0.js → map-CDFEmmZH.js} +3 -3
  296. package/dist/showcase/assets/{map-pin-COrIVMWa.js → map-pin-CdV-R6nt.js} +1 -1
  297. package/dist/showcase/assets/{media-library-DyPu-kR9.js → media-library-BJyn1s9d.js} +1 -1
  298. package/dist/showcase/assets/{mention-inline-suggestions-BTunE4RJ.js → mention-inline-suggestions-DPO6FhXx.js} +1 -1
  299. package/dist/showcase/assets/{mentions-BXSq2eCS.js → mentions-DtWHbcS6.js} +1 -1
  300. package/dist/showcase/assets/{menus-USrp5qP5.js → menus-BmjngFE4.js} +1 -1
  301. package/dist/showcase/assets/{message-square-Cyrr-QgJ.js → message-square-bM29txT3.js} +1 -1
  302. package/dist/showcase/assets/{metadata-list-BJTye3J8.js → metadata-list-DvYTAJri.js} +1 -1
  303. package/dist/showcase/assets/metadata-list-xVUTVyy9.js +1 -0
  304. package/dist/showcase/assets/{metric-DdC_pWnF.js → metric-BPNCh4eA.js} +1 -1
  305. package/dist/showcase/assets/{metric-bar-PGG8KQS0.js → metric-bar-BX4sCMrM.js} +1 -1
  306. package/dist/showcase/assets/{metric-grid-ZqDufV_5.js → metric-grid-IyHP3nmU.js} +1 -1
  307. package/dist/showcase/assets/{metric-trend-chip-BhCRReMp.js → metric-trend-chip-Dih8eR17.js} +1 -1
  308. package/dist/showcase/assets/{metrics-analytics-bar-U3gehGfQ.js → metrics-analytics-bar-DK16RNMs.js} +1 -1
  309. package/dist/showcase/assets/{metrics-analytics-cards-CzbLGAWi.js → metrics-analytics-cards-Byyl13YT.js} +1 -1
  310. package/dist/showcase/assets/{metrics-comparison-B1z3nUpo.js → metrics-comparison-DGHFMBL-.js} +1 -1
  311. package/dist/showcase/assets/{metrics-heatmap-DZeqRxFz.js → metrics-heatmap-Bl6C7i0j.js} +1 -1
  312. package/dist/showcase/assets/{metrics-inline-badge-CPyhCHXj.js → metrics-inline-badge-Bz79zbNK.js} +1 -1
  313. package/dist/showcase/assets/{metrics-kpi-row-COVuNReW.js → metrics-kpi-row-DzZ9dRFY.js} +1 -1
  314. package/dist/showcase/assets/{metrics-micro-grid-BNSrw6sM.js → metrics-micro-grid-DyoQiuzr.js} +1 -1
  315. package/dist/showcase/assets/{metrics-overview-3IHComMd.js → metrics-overview-DoyHPEZw.js} +1 -1
  316. package/dist/showcase/assets/{metrics-stat-cards-6Owbjvmc.js → metrics-stat-cards-B1b7NFqW.js} +1 -1
  317. package/dist/showcase/assets/minus-BE2L5hVc.js +1 -0
  318. package/dist/showcase/assets/{money-display-CUkeS9k1.js → money-display-CXQ_8LfA.js} +1 -1
  319. package/dist/showcase/assets/{month-year-picker-CCCTmZHv.js → month-year-picker-ra8FEN8F.js} +1 -1
  320. package/dist/showcase/assets/{navigation-BUReVn4R.js → navigation-CFfVZQJ1.js} +1 -1
  321. package/dist/showcase/assets/{navigation-CSzYKdcR.js → navigation-Da0MVkqr.js} +1 -1
  322. package/dist/showcase/assets/{navigation-extras-DmUhDPMz.js → navigation-extras-LpsdoXfx.js} +1 -1
  323. package/dist/showcase/assets/{onboarding-checklist-C3JhV5Gb.js → onboarding-checklist-DPNatNOk.js} +1 -1
  324. package/dist/showcase/assets/{overflow-tab-bar-CEdrls-W.js → overflow-tab-bar-C0vTzcEY.js} +1 -1
  325. package/dist/showcase/assets/{overlays-C1UodoAu.js → overlays-Blmbun0J.js} +1 -1
  326. package/dist/showcase/assets/{overlays-BKKEzmF4.js → overlays-t0joc10Y.js} +1 -1
  327. package/dist/showcase/assets/{overview-Dq0MqK32.js → overview-Ckq8vbOR.js} +1 -1
  328. package/dist/showcase/assets/{package-BaQGBJmO.js → package-Cjod_a06.js} +1 -1
  329. package/dist/showcase/assets/{package-check-C8HJfDxS.js → package-check-JRHaNnkl.js} +1 -1
  330. package/dist/showcase/assets/{page-DvMaeo43.js → page-9xr7xnuW.js} +1 -1
  331. package/dist/showcase/assets/page-action-button-BRXnfsEx.js +1 -0
  332. package/dist/showcase/assets/{page-header-Y-96EPMp.js → page-header-Bdlxfn_9.js} +1 -1
  333. package/dist/showcase/assets/{pagination-yLAHxKpc.js → pagination-CeaYhOvv.js} +1 -1
  334. package/dist/showcase/assets/{pagination-Br1AfDte.js → pagination-DdZZHvNF.js} +1 -1
  335. package/dist/showcase/assets/{paperclip-BBDKiZeH.js → paperclip-BRM-yXTB.js} +1 -1
  336. package/dist/showcase/assets/{password-input-iwrucadb.js → password-input-1FVEugoO.js} +1 -1
  337. package/dist/showcase/assets/{pencil-BUhkJ_Nn.js → pencil-DiG2dQ8F.js} +1 -1
  338. package/dist/showcase/assets/{phone-DtJDFH70.js → phone-BREyNZN-.js} +1 -1
  339. package/dist/showcase/assets/plus-CQcelTNc.js +1 -0
  340. package/dist/showcase/assets/{popover-C8YAdHfL.js → popover-Czmwspmc.js} +1 -1
  341. package/dist/showcase/assets/{popover-menu-C5M9Up4M.js → popover-menu-beuCaiLt.js} +1 -1
  342. package/dist/showcase/assets/{popover-D9ZDWqLl.js → popover-uqk7myG2.js} +1 -1
  343. package/dist/showcase/assets/{products-DrKTk8Aw.js → products-DGNqIbLs.js} +1 -1
  344. package/dist/showcase/assets/{progress-CpD58Wl0.js → progress-D76Df908.js} +1 -1
  345. package/dist/showcase/assets/{progress-C1qKfCZB.js → progress-DjUprSDD.js} +1 -1
  346. package/dist/showcase/assets/{props-table-C6gPyO49.js → props-table-DoDq8Mvr.js} +1 -1
  347. package/dist/showcase/assets/{quote-BXTU9evS.js → quote-BvGGgyJ0.js} +1 -1
  348. package/dist/showcase/assets/{receipt-Dwc4p04P.js → receipt-rgnlMgyi.js} +1 -1
  349. package/dist/showcase/assets/{receipt-text-DBEu6Gym.js → receipt-text-CBQrVlnU.js} +1 -1
  350. package/dist/showcase/assets/{refinement-guide-DeO_yM8U.js → refinement-guide-B_BpIMxm.js} +1 -1
  351. package/dist/showcase/assets/{refresh-cw-BpV3OG_s.js → refresh-cw-C-yHy6B7.js} +1 -1
  352. package/dist/showcase/assets/{resolveValueLabel-DZTrDdG0.js → resolveValueLabel-0bwEvIG-.js} +1 -1
  353. package/dist/showcase/assets/{resource-BLGoRFou.js → resource-8f61BZ8t.js} +1 -1
  354. package/dist/showcase/assets/{resource-D5AQesdN.js → resource-BEh6R0gu.js} +1 -1
  355. package/dist/showcase/assets/{resource-selector-card-BKzeUE0k.js → resource-selector-card-DJwXY_Ms.js} +1 -1
  356. package/dist/showcase/assets/{rich-text-editor-k1dtT5bX.js → rich-text-editor-D433iv0N.js} +1 -1
  357. package/dist/showcase/assets/{rich-text-editor-DYkPamiq.js → rich-text-editor-vTRfWsOK.js} +1 -1
  358. package/dist/showcase/assets/rotate-ccw-JuE4H14F.js +1 -0
  359. package/dist/showcase/assets/{route-5uO9C0gV.js → route-eSu1bFNn.js} +1 -1
  360. package/dist/showcase/assets/{save-DONvClxa.js → save-Bpjj-rBP.js} +1 -1
  361. package/dist/showcase/assets/{schema-form-BMQmx4JI.js → schema-form-DmOpxd96.js} +1 -1
  362. package/dist/showcase/assets/{scroll-area-CxwfyjX3.js → scroll-area-B9OdCBy9.js} +1 -1
  363. package/dist/showcase/assets/{scroll-area-CnAyhKQ_.js → scroll-area-BH80l2As.js} +1 -1
  364. package/dist/showcase/assets/{section-Dd6X6IKg.js → section-BPNIPavy.js} +1 -1
  365. package/dist/showcase/assets/{select-CJSyu7sS.js → select-BauiG1a3.js} +1 -1
  366. package/dist/showcase/assets/{select-Du9VvUxt.js → select-CPopSr5c.js} +1 -1
  367. package/dist/showcase/assets/{send-3ANJL7UB.js → send-DNCcBKXs.js} +1 -1
  368. package/dist/showcase/assets/{separator-BiXjWmP-.js → separator-BK0beCOv.js} +1 -1
  369. package/dist/showcase/assets/{separator-y9i6EG-N.js → separator-CKM9A-mm.js} +1 -1
  370. package/dist/showcase/assets/{settings-2-Ynd1Lcz4.js → settings-2-B8fz7JZB.js} +1 -1
  371. package/dist/showcase/assets/{settings-CqdZB-OI.js → settings-Cy2y3sQw.js} +1 -1
  372. package/dist/showcase/assets/{sheet-CzFOcAwE.js → sheet-C7VWkXE1.js} +1 -1
  373. package/dist/showcase/assets/{shield-Dmxwcn3w.js → shield-ClPev4gS.js} +1 -1
  374. package/dist/showcase/assets/{shield-alert-RrMsBuWp.js → shield-alert-6XO5YZ5u.js} +1 -1
  375. package/dist/showcase/assets/{shield-check-Bnw8RAvI.js → shield-check-DSfGVZq0.js} +1 -1
  376. package/dist/showcase/assets/{shopping-bag-DGXTQNOf.js → shopping-bag-DzMrGvpF.js} +1 -1
  377. package/dist/showcase/assets/{showcase-DMRZCqmg.js → showcase-DuZaO6q9.js} +1 -1
  378. package/dist/showcase/assets/{sidebar-C0tsWnrh.js → sidebar-7y9EQYWf.js} +1 -1
  379. package/dist/showcase/assets/{sidebar.context-DXGEPgaT.js → sidebar.context-DUheJD8t.js} +1 -1
  380. package/dist/showcase/assets/{skeleton-BFa4FHSC.js → skeleton-Dgr8Vabr.js} +1 -1
  381. package/dist/showcase/assets/{skeleton-DOJ1RAcJ.js → skeleton-HSpErFqw.js} +1 -1
  382. package/dist/showcase/assets/{slider-BjQs0C8N.js → slider-B7f81APg.js} +1 -1
  383. package/dist/showcase/assets/{smart-card-BwSFemlj.js → smart-card-p97LLZCW.js} +1 -1
  384. package/dist/showcase/assets/{sonner-BXMIK3eQ.js → sonner-CWazrN19.js} +1 -1
  385. package/dist/showcase/assets/{sortable.esm-BeBA3gT5.js → sortable.esm-uufol7Mz.js} +1 -1
  386. package/dist/showcase/assets/{sparkles-Bc0I4qTf.js → sparkles-Z4V23xKK.js} +1 -1
  387. package/dist/showcase/assets/{spinner-mtwVRe8M.js → spinner-BUgjAjWE.js} +1 -1
  388. package/dist/showcase/assets/{spinner-HyNCtTyd.js → spinner-CXu7z8-j.js} +1 -1
  389. package/dist/showcase/assets/{spinner-LskR5l9T.js → spinner-DCwR0mnD.js} +1 -1
  390. package/dist/showcase/assets/{square-pen-BrZ2OxTe.js → square-pen-jwp_OWMQ.js} +1 -1
  391. package/dist/showcase/assets/{stacked-avatars-DOAFRjmZ.js → stacked-avatars-CHEpTotO.js} +1 -1
  392. package/dist/showcase/assets/{star-lUSxI166.js → star-Ck8Lg5hm.js} +1 -1
  393. package/dist/showcase/assets/startOfDay-BzULZHy4.js +1 -0
  394. package/dist/showcase/assets/{styles-COpnijXU.js → styles-CNYitflH.js} +1 -1
  395. package/dist/showcase/assets/{suggestions-ftPYc9p6.js → suggestions-CSF9MlKl.js} +1 -1
  396. package/dist/showcase/assets/{switch-DirKCDsg.js → switch-BX9KSLIF.js} +1 -1
  397. package/dist/showcase/assets/{switch-DoPIN_UN.js → switch-Bn0WaWa9.js} +1 -1
  398. package/dist/showcase/assets/{sync-C2DEiaQz.js → sync-BuKBnqWW.js} +1 -1
  399. package/dist/showcase/assets/{table-Dex8CcfW.js → table-DNJcLaud.js} +42 -20
  400. package/dist/showcase/assets/{table-D6GywZEx.js → table-NfpOWGsG.js} +1 -1
  401. package/dist/showcase/assets/{table-actions-CJg82sW0.js → table-actions-Ci9Yszp0.js} +1 -1
  402. package/dist/showcase/assets/{tabs-C0fSpkON.js → tabs-CYNFQdIr.js} +1 -1
  403. package/dist/showcase/assets/{tabs-B9tgdMRD.js → tabs-Cm_p6znb.js} +1 -1
  404. package/dist/showcase/assets/{tags-input-CJSpILy6.js → tags-input-DE4QZqS_.js} +1 -1
  405. package/dist/showcase/assets/{text-button-CoPZBQiq.js → text-button-D9llh4pU.js} +1 -1
  406. package/dist/showcase/assets/{text-link-d9JIRU2N.js → text-link-ZT6QGJOL.js} +1 -1
  407. package/dist/showcase/assets/{textarea-BN4PUX-V.js → textarea-CgcHuGVq.js} +1 -1
  408. package/dist/showcase/assets/{textarea-CBhdtg5X.js → textarea-D2uT_GJt.js} +1 -1
  409. package/dist/showcase/assets/{timelines-F_mzbAPA.js → timelines-BEFO7tJ0.js} +1 -1
  410. package/dist/showcase/assets/{toggle-group-8ESepeYW.js → toggle-group-oYpa59lN.js} +1 -1
  411. package/dist/showcase/assets/{toggles-B2Cg5NVG.js → toggles-BL93YmQo.js} +1 -1
  412. package/dist/showcase/assets/{toggles-group-BTmtSzAa.js → toggles-group-BG-xiQCY.js} +1 -1
  413. package/dist/showcase/assets/{tooltip-DNsHZ3ZE.js → tooltip-BMI7zHwP.js} +1 -1
  414. package/dist/showcase/assets/{trash-2-Bf5dpRjn.js → trash-2-CtRtVsCy.js} +1 -1
  415. package/dist/showcase/assets/trending-up-2NQ-P8vB.js +1 -0
  416. package/dist/showcase/assets/{truck-CqmeajvP.js → truck-Cl0nyN_j.js} +1 -1
  417. package/dist/showcase/assets/{typography-DJjQO_Ld.js → typography-C7pCPhg7.js} +1 -1
  418. package/dist/showcase/assets/{ui-badge-BwkZfeBs.js → ui-badge-BvmuMzSq.js} +1 -1
  419. package/dist/showcase/assets/{ui-card-B3mtVa60.js → ui-card-B7ziOMAn.js} +1 -1
  420. package/dist/showcase/assets/{ui-table-DM-avYTi.js → ui-table-BEFHakBU.js} +1 -1
  421. package/dist/showcase/assets/{upload-tray-CFI_7lcB.js → upload-tray-CMKqTtEp.js} +1 -1
  422. package/dist/showcase/assets/{use-layout-link-BI4MRSHG.js → use-layout-link-nEU6ctSs.js} +1 -1
  423. package/dist/showcase/assets/{useAnchoredPopupScrollLock-DRs8fnir.js → useAnchoredPopupScrollLock-B1xyKMh7.js} +1 -1
  424. package/dist/showcase/assets/{useAriaLabelledBy-DhgmwFn7.js → useAriaLabelledBy-BMlFgz-H.js} +1 -1
  425. package/dist/showcase/assets/{useCollapsiblePanel-vGthv_MA.js → useCollapsiblePanel-BEzH6TC2.js} +1 -1
  426. package/dist/showcase/assets/{useCompositeItem-g1FeYTbw.js → useCompositeItem-CIuww7-p.js} +1 -1
  427. package/dist/showcase/assets/{useCompositeListItem-CyULeWSL.js → useCompositeListItem-PrMTh4tz.js} +1 -1
  428. package/dist/showcase/assets/{useLabelableId-CBWpOnwZ.js → useLabelableId-BBLkeLGr.js} +1 -1
  429. package/dist/showcase/assets/{useOpenInteractionType-CQSuD7yw.js → useOpenInteractionType-CW0quo3l.js} +1 -1
  430. package/dist/showcase/assets/useRender-6NNMHJJU.js +1 -0
  431. package/dist/showcase/assets/{useTriggerFocusGuards-B6KAsVMk.js → useTriggerFocusGuards-DEza_iee.js} +1 -1
  432. package/dist/showcase/assets/{useValueChanged-DXek_Wx7.js → useValueChanged-BmWIb3SN.js} +1 -1
  433. package/dist/showcase/assets/user-BDIP5UPS.js +1 -0
  434. package/dist/showcase/assets/{user-plus-C69GplWt.js → user-plus-BCqHFh2h.js} +1 -1
  435. package/dist/showcase/assets/{users-DDgUGkgw.js → users-Bh7xGRX2.js} +1 -1
  436. package/dist/showcase/assets/{vendor-profile-Zfh99jtA.js → vendor-profile-BlYcRbPI.js} +1 -1
  437. package/dist/showcase/assets/{video-CDERYmRS.js → video-BucshqNW.js} +1 -1
  438. package/dist/showcase/assets/{wrench-PjtfaRuJ.js → wrench-DQvhyTEb.js} +1 -1
  439. package/dist/showcase/assets/x-DyuS4YRT.js +1 -0
  440. package/dist/showcase/assets/{zap-CzjU6LH0.js → zap-Dpn8_pnQ.js} +1 -1
  441. package/dist/showcase/index.html +2 -2
  442. package/dist/style.css +1 -1
  443. package/package.json +1 -1
  444. package/dist/_shared/cards-BKFwMTjM.cjs +0 -2
  445. package/dist/_shared/cards-BKFwMTjM.cjs.map +0 -1
  446. package/dist/_shared/cards-CtBoSZG9.js.map +0 -1
  447. package/dist/_shared/table-CUA_A-oO.js.map +0 -1
  448. package/dist/_shared/table-mPchjiRn.cjs +0 -2
  449. package/dist/_shared/table-mPchjiRn.cjs.map +0 -1
  450. package/dist/showcase/assets/arrow-down-JuqwH6gj.js +0 -1
  451. package/dist/showcase/assets/arrow-left-BFq65-Ch.js +0 -1
  452. package/dist/showcase/assets/arrow-right-B4iFg3l1.js +0 -1
  453. package/dist/showcase/assets/arrow-up-RWJP_FHU.js +0 -1
  454. package/dist/showcase/assets/arrow-up-right-DdWl37XF.js +0 -1
  455. package/dist/showcase/assets/card-primitives-Bn6nhqUA.js +0 -1
  456. package/dist/showcase/assets/checkbox-BJ1yDAQ3.js +0 -1
  457. package/dist/showcase/assets/chevron-down-CBa5t2E0.js +0 -1
  458. package/dist/showcase/assets/chevron-left-Dqne-r3m.js +0 -1
  459. package/dist/showcase/assets/chevron-up-DiMFydbr.js +0 -1
  460. package/dist/showcase/assets/chevrons-up-down-umMKLBIL.js +0 -1
  461. package/dist/showcase/assets/circle-check-BPhdxh7K.js +0 -1
  462. package/dist/showcase/assets/circle-check-big-BsQpd0CS.js +0 -1
  463. package/dist/showcase/assets/circle-dbSBYjvr.js +0 -1
  464. package/dist/showcase/assets/circle-dot-Bj1an-fp.js +0 -1
  465. package/dist/showcase/assets/clock-3-R65SwQwa.js +0 -1
  466. package/dist/showcase/assets/clock-BApGqXwn.js +0 -1
  467. package/dist/showcase/assets/index-CCxHwV7T.css +0 -2
  468. package/dist/showcase/assets/inertValue-BRyHstYf.js +0 -1
  469. package/dist/showcase/assets/isSameDay-Bd_8WAf0.js +0 -1
  470. package/dist/showcase/assets/isToday-DSGtoEUa.js +0 -1
  471. package/dist/showcase/assets/metadata-list-CoRYXjEw.js +0 -1
  472. package/dist/showcase/assets/minus-CwzskYaZ.js +0 -1
  473. package/dist/showcase/assets/page-action-button-B5ZGYpYy.js +0 -1
  474. package/dist/showcase/assets/plus-4gOvUk-5.js +0 -1
  475. package/dist/showcase/assets/rotate-ccw-Dajwztf1.js +0 -1
  476. package/dist/showcase/assets/startOfDay-BLhx9b6k.js +0 -1
  477. package/dist/showcase/assets/trending-up-RSklVrcZ.js +0 -1
  478. package/dist/showcase/assets/useRender-Dm8qJkvr.js +0 -1
  479. package/dist/showcase/assets/user-B35DABNz.js +0 -1
  480. package/dist/showcase/assets/x-FNPo6qUv.js +0 -1
@@ -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":";;;;;;;;AAiBA,IAAa,IAAoD,EAChE,qBAAqB,sBACtB;AAsCA,SAAS,EAAc,GAAyB;CAC/C,IAAI,CAAC,GAAQ,OAAO;CACpB,IAAI;EACH,IAAM,IAAa,OAAO,SAAW,MAAc,OAAO,SAAS,SAAS,oBAEtE,IAAU,IADG,IAAI,GAAQ,CACf,EAAO,SAAS,QAAQ,QAAQ,EAAE;EAClD,OAAO,EAAQ,SAAS,IAAI,IAAU;CACvC,QAAQ;EAEP,IAAM,KADQ,EAAO,MAAM,GAAG,EAAE,MAAM,GAChB,QAAQ,QAAQ,EAAE;EACxC,OAAO,EAAQ,SAAS,IAAI,IAAU;CACvC;AACD;AAEA,SAAS,EAAa,GAAoB,GAAoB,GAA+B;CAC5F,IAAI,GAAW,OAAO,EAAK,OAAO;CAClC,IAAI,CAAC,KAAe,CAAC,EAAK,MAAM,OAAO;CACvC,IAAM,IAAa,EAAc,CAAW,GACtC,IAAW,EAAc,EAAK,IAAI;CACxC,OAAO,MAAe,KAAY,EAAW,WAAW,GAAG,EAAS,EAAE;AACvE;AAEA,SAAgB,EAAc,EAC7B,UACA,gBACA,WACA,cACA,gBACA,aACA,UACA,YACA,WACA,cACA,iBACA,qBACA,eACA,kBACA,SAAS,KACa;CACtB,IAAM,IAAU,EAAW,GAA6B,CAAW,GAC7D,IAAe,EAA0B;EAAE;EAAY;CAAc,CAAC;CAE5E,OACC,kBAAC,WAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAW,EAAG,oFAAoF,CAAS;YAH5G,CAKC,kBAAC,SAAD;GAAO,aAAU;GAAwB,WAAU;aAClD,kBAAC,GAAD;IACC,SAAQ;IACR,SAAQ;IACR,WAAW,EAAG,4EAA4E,CAAY;IACtG,kBAAiB;cAJlB,CAME,CAAC,CAAC,KAAS,kBAAC,OAAD;KAAK,WAAU;eAAiC;IAAW,CAAA,GACvE,kBAAC,OAAD;KAAK,cAAY,EAAQ;KAAqB,WAAU;eACtD,EAAO,KAAK,MACZ,kBAAC,OAAD;MAAoB,WAAU;gBAA9B,CACE,CAAC,CAAC,EAAM,SACR,kBAAC,GAAD;OACC,MAAK;OACL,MAAK;OACL,QAAO;OACP,WAAU;iBAET,EAAM;MACF,CAAA,GAEP,kBAAC,OAAD;OAAK,WAAU;iBACb,EAAM,MAAM,KAAK,MAAS;QAC1B,IAAM,IAAO,EAAK,MACZ,IAAS,EAAa,GAAM,GAAW,CAAW,GAClD,IACL,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,CAAC,CAAC,KACF,kBAAC,GAAD,EACC,WAAW,EACV,mBACA,IAAS,iBAAiB,uBAC3B,EACA,CAAA;UAEF,kBAAC,QAAD;WAAM,WAAU;qBAAhB,CACC,kBAAC,GAAD;YAAM,KAAI;YAAO,QAAQ,IAAS,aAAa;YAAU,WAAU;sBACjE,EAAK;WACD,CAAA,GACL,CAAC,CAAC,EAAK,eACP,kBAAC,GAAD;YAAM,KAAI;YAAO,MAAK;YAAK,MAAK;YAAY,WAAU;sBACpD,EAAK;WACD,CAAA,CAEF;;UACL,CAAC,CAAC,EAAK,SACP,kBAAC,GAAD;WAAO,SAAS,IAAS,YAAY;WAAa,WAAU;qBAC1D,EAAK;UACA,CAAA;SAEH;;QAGP,OACC,kBAAC,OAAD;SAAmB,eAAe,EAAK,WAAW,EAAK,EAAE;mBACvD,EAAa;UACb,MAAM,EAAK;UACX,UAAU;UACV;UACA,UAAU,EAAK;UACf,UAAU,EAAK;UACf,WAAW,EACV,qFACA,8EACA,IACG,iCACA,iEACH,EAAK,YAAY,gCAClB;UACA,cAAc,OAAO,EAAK,SAAU,WAAW,EAAK,QAAQ,KAAA;SAC7D,CAAC;QACG,GAjBK,EAAK,EAiBV;OAEP,CAAC;MACG,CAAA,CACD;QAjEK,EAAM,EAiEX,CACL;IACG,CAAA,CACK;;EACL,CAAA,GAEP,kBAAC,OAAD;GAAK,aAAU;GAAuB,WAAW,EAAG,2CAA2C,CAAgB;aAA/G;KACG,KAAS,KAAe,MACzB,kBAAC,UAAD;KAAQ,WAAU;eAAlB,CACC,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,CAAC,CAAC,KAAS,kBAAC,GAAD;OAAS,KAAI;OAAK,WAAU;iBAAiB;MAAe,CAAA,GACvE,CAAC,CAAC,KACF,kBAAC,GAAD;OAAM,MAAK;OAAY,WAAU;iBAC/B;MACI,CAAA,CAEH;SACJ,CAAC,CAAC,KAAW,kBAAC,OAAD;MAAK,WAAU;gBAA8C;KAAa,CAAA,CACjF;;IAET,kBAAC,OAAD;KAAK,aAAU;KAA0B,WAAU;KACjD;IACG,CAAA;IACJ,CAAC,CAAC,KAAU,kBAAC,UAAD;KAAQ,WAAU;eAA2B;IAAe,CAAA;GACrE;IACG;;AAEX;AAEA,IAAa,IAAgB;AAE7B,EAAc,cAAc"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/strings.cjs"),t=require("../lib/utils.cjs"),n=require("./typography-CO9uwZhF.cjs"),r=require("./badge-BeSKxX1u.cjs"),i=require("./cards-BKFwMTjM.cjs"),a=require("./layout.types-CYuDZ_4h.cjs");let o=require("react/jsx-runtime");var s={navigationAriaLabel:`Settings navigation`};function c(e){if(!e)return``;try{let t=typeof window<`u`?window.location.origin:`http://localhost`,n=new URL(e,t).pathname.replace(/\/+$/,``);return n.length>0?n:`/`}catch{let t=(e.split(`?`)[0]??e).replace(/\/+$/,``);return t.length>0?t:`/`}}function l(e,t,n){if(t)return e.id===t;if(!n||!e.href)return!1;let r=c(n),i=c(e.href);return r===i||r.startsWith(`${i}/`)}function u({title:c,description:u,groups:d,currentId:f,currentPath:p,children:m,aside:h,actions:g,footer:_,className:v,navClassName:y,contentClassName:b,renderLink:x,LinkComponent:S,strings:C}){let w=e.useStrings(s,C),T=a.r({renderLink:x,LinkComponent:S});return(0,o.jsxs)(`section`,{"data-component":`aside-nav-shell`,"data-slot":`aside-nav-shell`,className:t.cn(`aside-nav-shell--component grid min-w-0 gap-5 lg:grid-cols-[17rem_minmax(0,1fr)]`,v),children:[(0,o.jsx)(`aside`,{"data-slot":`aside-nav-shell-aside`,className:`aside-nav-shell--aside min-w-0`,children:(0,o.jsxs)(i.t,{padding:`default`,surface:`card`,className:t.cn(`aside-nav-shell--nav-card sticky top-[calc(var(--topbar-height)_+_1rem)]`,y),contentClassName:`grid gap-4`,children:[!!h&&(0,o.jsx)(`div`,{className:`aside-nav-shell--aside-header`,children:h}),(0,o.jsx)(`nav`,{"aria-label":w.navigationAriaLabel,className:`grid gap-4`,children:d.map(e=>(0,o.jsxs)(`div`,{className:`grid gap-1.5`,children:[!!e.label&&(0,o.jsx)(n.s,{size:`xxs`,type:`secondary`,weight:`medium`,className:`px-2 uppercase tracking-normal`,children:e.label}),(0,o.jsx)(`div`,{className:`grid gap-0.5`,children:e.items.map(e=>{let i=e.icon,a=l(e,f,p),s=(0,o.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[!!i&&(0,o.jsx)(i,{className:t.cn(`size-4 shrink-0`,a?`text-primary`:`text-muted-foreground`)}),(0,o.jsxs)(`span`,{className:`grid min-w-0 flex-1 gap-0.5`,children:[(0,o.jsx)(n.s,{tag:`span`,weight:a?`semibold`:`medium`,className:`truncate`,children:e.label}),!!e.description&&(0,o.jsx)(n.s,{tag:`span`,size:`xs`,type:`secondary`,className:`truncate`,children:e.description})]}),!!e.badge&&(0,o.jsx)(r.t,{variant:a?`primary`:`secondary`,className:`shrink-0`,children:e.badge})]});return(0,o.jsx)(`div`,{onClick:()=>e.onSelect?.(e.id),children:T({href:e.href,children:s,active:a,disabled:e.disabled,external:e.external,className:t.cn(`aside-nav-shell--item flex min-w-0 rounded-md px-2 py-2 text-sm transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,a?`bg-primary/8 text-foreground`:`text-muted-foreground hover:bg-muted/60 hover:text-foreground`,e.disabled&&`pointer-events-none opacity-50`),"aria-label":typeof e.label==`string`?e.label:void 0})},e.id)})})]},e.id))})]})}),(0,o.jsxs)(`div`,{"data-slot":`aside-nav-shell-main`,className:t.cn(`aside-nav-shell--main min-w-0 space-y-4`,b),children:[(c||u||g)&&(0,o.jsxs)(`header`,{className:`aside-nav-shell--header flex min-w-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,o.jsxs)(`div`,{className:`min-w-0`,children:[!!c&&(0,o.jsx)(n.o,{tag:`h2`,className:`border-0 pb-0`,children:c}),!!u&&(0,o.jsx)(n.s,{type:`secondary`,className:`mt-1 max-w-3xl`,children:u})]}),!!g&&(0,o.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:g})]}),(0,o.jsx)(`div`,{"data-slot":`aside-nav-shell-content`,className:`aside-nav-shell--content min-w-0`,children:m}),!!_&&(0,o.jsx)(`footer`,{className:`aside-nav-shell--footer`,children:_})]})]})}var d=u;u.displayName=`AsideNavShell`,Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return u}});
2
- //# sourceMappingURL=settings-DbAyxMrX.cjs.map
1
+ const e=require("../lib/strings.cjs"),t=require("../lib/utils.cjs"),n=require("./typography-CO9uwZhF.cjs"),r=require("./badge-BeSKxX1u.cjs"),i=require("./cards-CbbHly7W.cjs"),a=require("./layout.types-CYuDZ_4h.cjs");let o=require("react/jsx-runtime");var s={navigationAriaLabel:`Settings navigation`};function c(e){if(!e)return``;try{let t=typeof window<`u`?window.location.origin:`http://localhost`,n=new URL(e,t).pathname.replace(/\/+$/,``);return n.length>0?n:`/`}catch{let t=(e.split(`?`)[0]??e).replace(/\/+$/,``);return t.length>0?t:`/`}}function l(e,t,n){if(t)return e.id===t;if(!n||!e.href)return!1;let r=c(n),i=c(e.href);return r===i||r.startsWith(`${i}/`)}function u({title:c,description:u,groups:d,currentId:f,currentPath:p,children:m,aside:h,actions:g,footer:_,className:v,navClassName:y,contentClassName:b,renderLink:x,LinkComponent:S,strings:C}){let w=e.useStrings(s,C),T=a.r({renderLink:x,LinkComponent:S});return(0,o.jsxs)(`section`,{"data-component":`aside-nav-shell`,"data-slot":`aside-nav-shell`,className:t.cn(`aside-nav-shell--component grid min-w-0 gap-5 lg:grid-cols-[17rem_minmax(0,1fr)]`,v),children:[(0,o.jsx)(`aside`,{"data-slot":`aside-nav-shell-aside`,className:`aside-nav-shell--aside min-w-0`,children:(0,o.jsxs)(i.t,{padding:`default`,surface:`card`,className:t.cn(`aside-nav-shell--nav-card sticky top-[calc(var(--topbar-height)_+_1rem)]`,y),contentClassName:`grid gap-4`,children:[!!h&&(0,o.jsx)(`div`,{className:`aside-nav-shell--aside-header`,children:h}),(0,o.jsx)(`nav`,{"aria-label":w.navigationAriaLabel,className:`grid gap-4`,children:d.map(e=>(0,o.jsxs)(`div`,{className:`grid gap-1.5`,children:[!!e.label&&(0,o.jsx)(n.s,{size:`xxs`,type:`secondary`,weight:`medium`,className:`px-2 uppercase tracking-normal`,children:e.label}),(0,o.jsx)(`div`,{className:`grid gap-0.5`,children:e.items.map(e=>{let i=e.icon,a=l(e,f,p),s=(0,o.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[!!i&&(0,o.jsx)(i,{className:t.cn(`size-4 shrink-0`,a?`text-primary`:`text-muted-foreground`)}),(0,o.jsxs)(`span`,{className:`grid min-w-0 flex-1 gap-0.5`,children:[(0,o.jsx)(n.s,{tag:`span`,weight:a?`semibold`:`medium`,className:`truncate`,children:e.label}),!!e.description&&(0,o.jsx)(n.s,{tag:`span`,size:`xs`,type:`secondary`,className:`truncate`,children:e.description})]}),!!e.badge&&(0,o.jsx)(r.t,{variant:a?`primary`:`secondary`,className:`shrink-0`,children:e.badge})]});return(0,o.jsx)(`div`,{onClick:()=>e.onSelect?.(e.id),children:T({href:e.href,children:s,active:a,disabled:e.disabled,external:e.external,className:t.cn(`aside-nav-shell--item flex min-w-0 rounded-md px-2 py-2 text-sm transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,a?`bg-primary/8 text-foreground`:`text-muted-foreground hover:bg-muted/60 hover:text-foreground`,e.disabled&&`pointer-events-none opacity-50`),"aria-label":typeof e.label==`string`?e.label:void 0})},e.id)})})]},e.id))})]})}),(0,o.jsxs)(`div`,{"data-slot":`aside-nav-shell-main`,className:t.cn(`aside-nav-shell--main min-w-0 space-y-4`,b),children:[(c||u||g)&&(0,o.jsxs)(`header`,{className:`aside-nav-shell--header flex min-w-0 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,o.jsxs)(`div`,{className:`min-w-0`,children:[!!c&&(0,o.jsx)(n.o,{tag:`h2`,className:`border-0 pb-0`,children:c}),!!u&&(0,o.jsx)(n.s,{type:`secondary`,className:`mt-1 max-w-3xl`,children:u})]}),!!g&&(0,o.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:g})]}),(0,o.jsx)(`div`,{"data-slot":`aside-nav-shell-content`,className:`aside-nav-shell--content min-w-0`,children:m}),!!_&&(0,o.jsx)(`footer`,{className:`aside-nav-shell--footer`,children:_})]})]})}var d=u;u.displayName=`AsideNavShell`,Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return u}});
2
+ //# sourceMappingURL=settings-DI-K34bW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-DbAyxMrX.cjs","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-DI-K34bW.cjs","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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"}
@@ -724,8 +724,8 @@ function Le() {
724
724
  return x(Ie);
725
725
  }
726
726
  var Re = {
727
- small: "[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y [&_td]:text-xs",
728
- default: "[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y-lg [&_td]:text-sm"
727
+ small: "[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y-lg [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y [&_td]:text-xs",
728
+ default: "[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y-lg [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y-lg [&_td]:text-sm"
729
729
  }, ze = {
730
730
  small: "xs",
731
731
  default: "sm"
@@ -1374,4 +1374,4 @@ it.displayName = "DensityToggle";
1374
1374
  //#endregion
1375
1375
  export { De as A, Me as C, B as D, V as E, Ce as F, Ee as M, Te as N, Ae as O, L as P, Ne as S, je as T, He as _, Ze as a, U as b, Je as c, J as d, qe as f, Ue as g, We as h, nt as i, Oe as j, ke as k, et as l, Ge as m, $ as n, Ye as o, Ke as p, tt as r, X as s, it as t, $e as u, Le as v, H as w, Pe as x, Fe as y };
1376
1376
 
1377
- //# sourceMappingURL=table-CUA_A-oO.js.map
1377
+ //# sourceMappingURL=table-B_pqCQxC.js.map