admin-ui-starter-kit 0.4.2 → 0.4.3

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 (478) hide show
  1. package/.agents/skills/component-library-rules/SKILL.md +7 -1
  2. package/.agents/skills/component-library-rules/references/base-wrapper.md +24 -4
  3. package/.agents/skills/component-library-rules/references/components/INDEX.json +4 -3
  4. package/.agents/skills/component-library-rules/references/components/INDEX.md +4 -3
  5. package/.agents/skills/component-library-rules/references/components/ui__inputs.md +117 -18
  6. package/.agents/skills/component-library-rules/references/components/ui__layout-primitives.md +71 -0
  7. package/.agents/skills/component-library-rules/references/components/ui__menus.md +125 -43
  8. package/.agents/skills/component-library-rules/references/components/ui__overlays.md +117 -42
  9. package/AGENTS.md +7 -4
  10. package/README.md +28 -4
  11. package/dist/_shared/{header-BUAddfdE.js → header-CyBTcM-L.js} +9 -9
  12. package/dist/_shared/header-CyBTcM-L.js.map +1 -0
  13. package/dist/_shared/header-kwvkesfq.cjs +2 -0
  14. package/dist/_shared/header-kwvkesfq.cjs.map +1 -0
  15. package/dist/_shared/{sidebar-Bl_KRk-S.cjs → sidebar-B_L_dnAe.cjs} +2 -2
  16. package/dist/_shared/{sidebar-Bl_KRk-S.cjs.map → sidebar-B_L_dnAe.cjs.map} +1 -1
  17. package/dist/_shared/{sidebar-ux-yk-Ph.js → sidebar-C5DApiDy.js} +26 -19
  18. package/dist/_shared/{sidebar-ux-yk-Ph.js.map → sidebar-C5DApiDy.js.map} +1 -1
  19. package/dist/_shared/{sidebar-BML5ZZ5s.js → sidebar-CIlGkVbF.js} +156 -155
  20. package/dist/_shared/sidebar-CIlGkVbF.js.map +1 -0
  21. package/dist/_shared/sidebar-D3sK9otF.cjs +2 -0
  22. package/dist/_shared/sidebar-D3sK9otF.cjs.map +1 -0
  23. package/dist/components/base/sidebar/index.cjs +1 -1
  24. package/dist/components/base/sidebar/index.js +2 -2
  25. package/dist/components/base/sidebar/sidebar.d.ts +5 -3
  26. package/dist/components/base/sidebar/sidebar.d.ts.map +1 -1
  27. package/dist/components/layout/header/index.cjs +1 -1
  28. package/dist/components/layout/header/index.js +1 -1
  29. package/dist/components/layout/header/partials/header-search.d.ts.map +1 -1
  30. package/dist/components/layout/index.cjs +1 -1
  31. package/dist/components/layout/index.js +2 -2
  32. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts.map +1 -1
  33. package/dist/components/layout/sidebar/index.cjs +1 -1
  34. package/dist/components/layout/sidebar/index.js +1 -1
  35. package/dist/components/ui/alert-dialog.d.ts +19 -0
  36. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  37. package/dist/components/ui/aspect-ratio.d.ts +5 -0
  38. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  39. package/dist/components/ui/carousel.d.ts +29 -0
  40. package/dist/components/ui/carousel.d.ts.map +1 -0
  41. package/dist/components/ui/direction.d.ts +2 -0
  42. package/dist/components/ui/direction.d.ts.map +1 -0
  43. package/dist/components/ui/drawer.d.ts +14 -0
  44. package/dist/components/ui/drawer.d.ts.map +1 -0
  45. package/dist/components/ui/field.d.ts +25 -0
  46. package/dist/components/ui/field.d.ts.map +1 -0
  47. package/dist/components/ui/input-otp.d.ts +12 -0
  48. package/dist/components/ui/input-otp.d.ts.map +1 -0
  49. package/dist/components/ui/kbd.d.ts +4 -0
  50. package/dist/components/ui/kbd.d.ts.map +1 -0
  51. package/dist/components/ui/label.d.ts +4 -0
  52. package/dist/components/ui/label.d.ts.map +1 -0
  53. package/dist/components/ui/menubar.d.ts +30 -0
  54. package/dist/components/ui/menubar.d.ts.map +1 -0
  55. package/dist/components/ui/native-select.d.ts +9 -0
  56. package/dist/components/ui/native-select.d.ts.map +1 -0
  57. package/dist/components/ui/navigation-menu.d.ts +12 -0
  58. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  59. package/dist/components/ui/resizable.d.ts +8 -0
  60. package/dist/components/ui/resizable.d.ts.map +1 -0
  61. package/dist/showcase/assets/{AreaChart-DUe3j5uB.js → AreaChart-BkAbL-UV.js} +1 -1
  62. package/dist/showcase/assets/CSPContext-B11tftuK.js +1 -0
  63. package/dist/showcase/assets/CompositeItem-Dzu0MfUC.js +1 -0
  64. package/dist/showcase/assets/CompositeRoot-CQvQ_uj2.js +1 -0
  65. package/dist/showcase/assets/DialogTrigger-BxVhSw4D.js +1 -0
  66. package/dist/showcase/assets/FieldItemContext-BSFHjS7g.js +1 -0
  67. package/dist/showcase/assets/LabelableContext-DapqaNeY.js +1 -0
  68. package/dist/showcase/assets/{PreviewLayout-BG1B5TzA.js → PreviewLayout-CGEkbS-i.js} +1 -1
  69. package/dist/showcase/assets/RadioGroup-DBA3iBQw.js +1 -0
  70. package/dist/showcase/assets/Separator-BEMr82IS.js +1 -0
  71. package/dist/showcase/assets/ToolbarRootContext-xN-ruoGR.js +1 -0
  72. package/dist/showcase/assets/{accordion-BWkuKg77.js → accordion-B-Iy0jKu.js} +3 -3
  73. package/dist/showcase/assets/accordion-variants-B9GD0oBE.js +1 -0
  74. package/dist/showcase/assets/{action-menu-BOUHlGba.js → action-menu-CMUF6gPp.js} +1 -1
  75. package/dist/showcase/assets/{activities-DMDQje7Y.js → activities-C1P9bsJm.js} +2 -2
  76. package/dist/showcase/assets/{activities-feed-card-B8wpu4F3.js → activities-feed-card-WZUuGHmT.js} +1 -1
  77. package/dist/showcase/assets/{activity-B-FxNryB.js → activity-BVP5C805.js} +1 -1
  78. package/dist/showcase/assets/{admin-CAhEeKt_.js → admin-DWOK4sj4.js} +2 -2
  79. package/dist/showcase/assets/{ai-UioEgJ90.js → ai-Dteb3y6G.js} +2 -2
  80. package/dist/showcase/assets/{ai-artifact-CUAlhcSX.js → ai-artifact-B0d7GveY.js} +2 -2
  81. package/dist/showcase/assets/{ai-chat-C_w2PSmy.js → ai-chat-IJ0b2FOw.js} +7 -7
  82. package/dist/showcase/assets/{ai-elements-DmxqXR6H.js → ai-elements-Cr8GgtEV.js} +3 -3
  83. package/dist/showcase/assets/{ai-new-PG02TWQq.js → ai-new-BJN9wNvX.js} +2 -2
  84. package/dist/showcase/assets/{ai-tool-call-BaJx1rR4.js → ai-tool-call-BqlQuR1P.js} +1 -1
  85. package/dist/showcase/assets/{alert-DIelf1qF.js → alert-2_0J7Vv6.js} +1 -1
  86. package/dist/showcase/assets/{alert-D7n-kQoO.js → alert-7wEOpEor.js} +1 -1
  87. package/dist/showcase/assets/{alert-TQCZEcn-.js → alert-C_FOBilU.js} +2 -2
  88. package/dist/showcase/assets/{api-key-list-CSt4trYG.js → api-key-list-CGV1k52v.js} +2 -2
  89. package/dist/showcase/assets/app-sidebar-S6oUYO4h.js +1 -0
  90. package/dist/showcase/assets/arrow-down-VNr82bS3.js +1 -0
  91. package/dist/showcase/assets/arrow-left-BSVeKWNq.js +1 -0
  92. package/dist/showcase/assets/arrow-right-D6hTB0Bd.js +1 -0
  93. package/dist/showcase/assets/arrow-up-p9oA4cIz.js +1 -0
  94. package/dist/showcase/assets/arrow-up-right-BtlQ62bc.js +1 -0
  95. package/dist/showcase/assets/{avatar-DLpnivU0.js → avatar-BxcQUuh0.js} +1 -1
  96. package/dist/showcase/assets/avatar-LGWm52rv.js +1 -0
  97. package/dist/showcase/assets/{badge-yFoRqbiq.js → badge-COn5psy3.js} +2 -2
  98. package/dist/showcase/assets/{badge-check-BRAVo7dA.js → badge-check-D2C2BPUT.js} +1 -1
  99. package/dist/showcase/assets/{bell-Dt3Nz2y2.js → bell-C80n9VRl.js} +1 -1
  100. package/dist/showcase/assets/{bot-5Ro5Dayc.js → bot-C83bUUi9.js} +1 -1
  101. package/dist/showcase/assets/{box-mt6TbZO6.js → box-rZ0pA-02.js} +1 -1
  102. package/dist/showcase/assets/{brain-736080Wh.js → brain-BJtktdVu.js} +1 -1
  103. package/dist/showcase/assets/{brand-4K8xsJ91.js → brand-CxdIBpyJ.js} +1 -1
  104. package/dist/showcase/assets/{breadcrumb-CAlApdCw.js → breadcrumb-BZsr_A8k.js} +1 -1
  105. package/dist/showcase/assets/{breadcrumb-DHeGqoTD.js → breadcrumb-CSU8FvWB.js} +1 -1
  106. package/dist/showcase/assets/{breadcrumbs-D_lniGJs.js → breadcrumbs-BUm4gHzL.js} +1 -1
  107. package/dist/showcase/assets/{briefcase-B_Uti-Iu.js → briefcase-0WhUdLn5.js} +1 -1
  108. package/dist/showcase/assets/{building-2-zgcwuzxP.js → building-2-1D6zVdCI.js} +1 -1
  109. package/dist/showcase/assets/{button-PmqgeJKm.js → button-C22Gs6y0.js} +2 -2
  110. package/dist/showcase/assets/{button-group-DAOmmujV.js → button-group-C0Ts4-x3.js} +1 -1
  111. package/dist/showcase/assets/{buttons-PtpR_v16.js → buttons-Dfn6hmwe.js} +3 -3
  112. package/dist/showcase/assets/{calendar-DTgagmt7.js → calendar-7a4yQlzJ.js} +1 -1
  113. package/dist/showcase/assets/{calendar-BiOGjB7a.js → calendar-Bo17POsN.js} +1 -1
  114. package/dist/showcase/assets/{calendar-C1A98cz0.js → calendar-D6XNDRVQ.js} +1 -1
  115. package/dist/showcase/assets/{calendar-days-pr8kXiTx.js → calendar-days-C4mG2tOe.js} +1 -1
  116. package/dist/showcase/assets/{camera-CGKLOOep.js → camera-C16z6v0m.js} +1 -1
  117. package/dist/showcase/assets/{card-CFIG8Dgg.js → card-BjqRQxxz.js} +1 -1
  118. package/dist/showcase/assets/{card-CRd07Iun.js → card-IzYmUTpI.js} +2 -2
  119. package/dist/showcase/assets/{card-primitives-YgCOqVDI.js → card-primitives-BDj4DtS8.js} +1 -1
  120. package/dist/showcase/assets/{card-radio-group-Du6yaMZ-.js → card-radio-group-7GU9AtWs.js} +1 -1
  121. package/dist/showcase/assets/{cards-H7ywhTNM.js → cards-DAqpr8CM.js} +8 -8
  122. package/dist/showcase/assets/{carousel-Dwll5oz1.js → carousel-D1n4Kkoo.js} +4 -4
  123. package/dist/showcase/assets/{chart-BWnVf-d-.js → chart-D2EGeI3b.js} +5 -5
  124. package/dist/showcase/assets/{chart-column-DjAyOA-t.js → chart-column-DKcP77Dx.js} +1 -1
  125. package/dist/showcase/assets/checkbox-BI3gcjED.js +1 -0
  126. package/dist/showcase/assets/chevron-down-ByPPEdNm.js +1 -0
  127. package/dist/showcase/assets/chevron-left-BNByuq3g.js +1 -0
  128. package/dist/showcase/assets/chevron-right-D4pIMCh9.js +1 -0
  129. package/dist/showcase/assets/chevron-up-Cha879Nz.js +1 -0
  130. package/dist/showcase/assets/chevrons-up-down-eAgHau5X.js +1 -0
  131. package/dist/showcase/assets/circle-V5hdlsIn.js +1 -0
  132. package/dist/showcase/assets/{circle-alert-ysbx8rsZ.js → circle-alert-BW-Btwgh.js} +1 -1
  133. package/dist/showcase/assets/circle-check-1MSds3Vu.js +1 -0
  134. package/dist/showcase/assets/circle-check-big-vBWkmhCZ.js +1 -0
  135. package/dist/showcase/assets/circle-dot-CsD5uXwH.js +1 -0
  136. package/dist/showcase/assets/{circle-question-mark-Dbi-WTYN.js → circle-question-mark-xYn9p1nL.js} +1 -1
  137. package/dist/showcase/assets/{circle-x-c5z6-eYV.js → circle-x-VSqZOeGt.js} +1 -1
  138. package/dist/showcase/assets/clock-3-CP_t59kW.js +1 -0
  139. package/dist/showcase/assets/clock-9xbB7EnW.js +1 -0
  140. package/dist/showcase/assets/{code-xml-SoYTMEdm.js → code-xml-CeGA85eB.js} +1 -1
  141. package/dist/showcase/assets/{collapsible-Cv3oGVkH.js → collapsible-C2W51-wl.js} +2 -2
  142. package/dist/showcase/assets/collapsible-C4eof15p.js +1 -0
  143. package/dist/showcase/assets/{combobox-CPC4a_MH.js → combobox-i8o4u6Q0.js} +4 -4
  144. package/dist/showcase/assets/{command-C37Q471b.js → command-C4F78Ppy.js} +1 -1
  145. package/dist/showcase/assets/command-wjOXUieO.js +1 -0
  146. package/dist/showcase/assets/{comment-composer-W0xfh_HP.js → comment-composer-DeURrlgL.js} +1 -1
  147. package/dist/showcase/assets/comment-item-D07Qk-Nt.js +1 -0
  148. package/dist/showcase/assets/{comments-BODDdRry.js → comments-Bo-lZU18.js} +2 -2
  149. package/dist/showcase/assets/{commerce-extras-DsgnTkBH.js → commerce-extras-Cio3xn_B.js} +2 -2
  150. package/dist/showcase/assets/{commerce-B9MICTY2.js → commerce-jqA58sCZ.js} +2 -2
  151. package/dist/showcase/assets/{composite-B-19wwf9.js → composite-BQFpnmS9.js} +1 -1
  152. package/dist/showcase/assets/{contact-card-CqP3YxTq.js → contact-card-4ajPhcd_.js} +2 -2
  153. package/dist/showcase/assets/{content-container-x2tsQKwH.js → content-container-B83BnjFb.js} +1 -1
  154. package/dist/showcase/assets/{copyable-DH0w0i_h.js → copyable-DKkroGJ3.js} +3 -3
  155. package/dist/showcase/assets/{course-card-qpC4JUUM.js → course-card-DShYl03k.js} +2 -2
  156. package/dist/showcase/assets/{cpu-DjJeD_0Z.js → cpu-BZTsuaUu.js} +1 -1
  157. package/dist/showcase/assets/{credit-card-CYgRtM77.js → credit-card-CAI3F3HB.js} +1 -1
  158. package/dist/showcase/assets/{currency-hguqIjWU.js → currency-PXgbngHk.js} +6 -6
  159. package/dist/showcase/assets/{dark-surfaces-Cj34O9A0.js → dark-surfaces-pSCicdm4.js} +2 -2
  160. package/dist/showcase/assets/{database-BVwSMeGM.js → database-oHsxHUj-.js} +1 -1
  161. package/dist/showcase/assets/{date-block-LCTDXG5-.js → date-block-CvCdJr8d.js} +1 -1
  162. package/dist/showcase/assets/{date-picker-CbYq8wZ7.js → date-picker-Cd5vsEEd.js} +1 -1
  163. package/dist/showcase/assets/{date-pickers-BaSX23MK.js → date-pickers-CBK-zvSB.js} +4 -4
  164. package/dist/showcase/assets/{dense-info-kY1QmtaP.js → dense-info-zOdJpez6.js} +2 -2
  165. package/dist/showcase/assets/{dialog-B85US9Ue.js → dialog-D9-MRCRg.js} +1 -1
  166. package/dist/showcase/assets/{dialog-iIgfMvTJ.js → dialog-EDw9DvZs.js} +1 -1
  167. package/dist/showcase/assets/display-CE9JWinr.js +403 -0
  168. package/dist/showcase/assets/dist-CjZ6RM9v.js +45 -0
  169. package/dist/showcase/assets/{dollar-sign-DlK6XF_v.js → dollar-sign-BXD_x2mP.js} +1 -1
  170. package/dist/showcase/assets/{download-B_EY5cGA.js → download-D0ur_d_N.js} +1 -1
  171. package/dist/showcase/assets/dropdown-menu-Cto8-yDW.js +1 -0
  172. package/dist/showcase/assets/{dropzone-Bl7RO_Uk.js → dropzone-9Gb4mR4x.js} +1 -1
  173. package/dist/showcase/assets/{earth-C7n2JAYm.js → earth-BN1w3w7h.js} +1 -1
  174. package/dist/showcase/assets/{ellipsis-ntuo3ejh.js → ellipsis-DsrebD1Y.js} +1 -1
  175. package/dist/showcase/assets/{ellipsis-vertical-yH8S83bc.js → ellipsis-vertical-CAiMV7G2.js} +1 -1
  176. package/dist/showcase/assets/{empty-CY8f7iFe.js → empty-DoJF3uif.js} +1 -1
  177. package/dist/showcase/assets/{empty-item-Ct7uCr40.js → empty-item-zZ85qI6s.js} +2 -2
  178. package/dist/showcase/assets/{empty-state-IAAUTn6f.js → empty-state-CGfB7sOE.js} +1 -1
  179. package/dist/showcase/assets/{empty-state-DlO8SJi8.js → empty-state-Y_4qnNWt.js} +1 -1
  180. package/dist/showcase/assets/{enhanced-activities-DLwShhof.js → enhanced-activities-B41hAxhb.js} +2 -2
  181. package/dist/showcase/assets/enhanced-combobox-BOimEW-1.js +1 -0
  182. package/dist/showcase/assets/{event-calendar-C4KlumlG.js → event-calendar-BjcfC6fM.js} +3 -3
  183. package/dist/showcase/assets/{event-log-BvUU5Rj8.js → event-log-BhoMXcix.js} +2 -2
  184. package/dist/showcase/assets/example-Cz_880po.js +1 -0
  185. package/dist/showcase/assets/{external-link-DuJlM_H4.js → external-link-Cy1-PP8k.js} +1 -1
  186. package/dist/showcase/assets/{eye-CnRPL_H8.js → eye-C85PNNdH.js} +1 -1
  187. package/dist/showcase/assets/feature-announcement-_tpahla3.js +34 -0
  188. package/dist/showcase/assets/{file-Dc5UHkfE.js → file-C8PCBEtY.js} +1 -1
  189. package/dist/showcase/assets/{file-text-D3AE37vP.js → file-text-DwqbUujq.js} +1 -1
  190. package/dist/showcase/assets/{filters-CsovNSxS.js → filters-ChqGg_1z.js} +3 -3
  191. package/dist/showcase/assets/{flag-CJJ43K4x.js → flag-csHQcBml.js} +1 -1
  192. package/dist/showcase/assets/{folder-open-Dp0sceCi.js → folder-open-BThTng3d.js} +1 -1
  193. package/dist/showcase/assets/{form-field-Cxm4APa9.js → form-field-B5g_5Zjm.js} +1 -1
  194. package/dist/showcase/assets/{format-bDaUGCSP.js → format-DrTwpH65.js} +1 -1
  195. package/dist/showcase/assets/{forms-BrVikK1p.js → forms-BukyUSKs.js} +9 -9
  196. package/dist/showcase/assets/{frame-CkLEABTd.js → frame-BNKhZVlb.js} +4 -4
  197. package/dist/showcase/assets/getPseudoElementBounds-DwyQgIj-.js +1 -0
  198. package/dist/showcase/assets/{gift-Bx8IO1FQ.js → gift-CtM--bDo.js} +1 -1
  199. package/dist/showcase/assets/{giftcard-cards-CZTXBjv0.js → giftcard-cards-imm4Br0H.js} +2 -2
  200. package/dist/showcase/assets/{git-branch-D9jt-u1q.js → git-branch-Dl3AzbqP.js} +1 -1
  201. package/dist/showcase/assets/{global-search-D9XJ747r.js → global-search-Bhl7z_vN.js} +1 -1
  202. package/dist/showcase/assets/{global-search-C2R_3Pb3.js → global-search-C4yaPFSW.js} +1 -1
  203. package/dist/showcase/assets/{globe-BJHI134i.js → globe-BCikLfKc.js} +1 -1
  204. package/dist/showcase/assets/{gradient-card-CV8w2JG5.js → gradient-card-Dh_5ZYv0.js} +2 -2
  205. package/dist/showcase/assets/{hash-CtBGoIvf.js → hash-C8m0EECO.js} +1 -1
  206. package/dist/showcase/assets/{header-B3FSlVv4.js → header-BXjw7Lm_.js} +1 -1
  207. package/dist/showcase/assets/header-notifications-CShSQ8kR.js +1 -0
  208. package/dist/showcase/assets/{heart-BWZYF4xJ.js → heart-BJVBFZ-j.js} +1 -1
  209. package/dist/showcase/assets/{house-CAQOnHLO.js → house-C3fXPhlL.js} +1 -1
  210. package/dist/showcase/assets/{icon-badge-CxvxB8Vd.js → icon-badge-dwVx3Hxf.js} +1 -1
  211. package/dist/showcase/assets/{image-Byz-p7hT.js → image-gc4qX_7C.js} +1 -1
  212. package/dist/showcase/assets/{inbox-D4UE_W9O.js → inbox-C0GJ1KEC.js} +1 -1
  213. package/dist/showcase/assets/{index-Cz4UGUT2.js → index-BQIv1ffM.js} +2 -2
  214. package/dist/showcase/assets/index-DN3tqopz.css +2 -0
  215. package/dist/showcase/assets/inertValue-DeVQ2cCe.js +1 -0
  216. package/dist/showcase/assets/{info-DFu8OfxV.js → info-BimmreJ-.js} +1 -1
  217. package/dist/showcase/assets/{inline-stat-DqI70yoJ.js → inline-stat-DcNP6bcO.js} +1 -1
  218. package/dist/showcase/assets/input-DJAWOJEx.js +1 -0
  219. package/dist/showcase/assets/{input-BPDdWrB1.js → input-NIgvB9CZ.js} +1 -1
  220. package/dist/showcase/assets/{input-group-BYZYeQ7j.js → input-group-BmqJ20bA.js} +1 -1
  221. package/dist/showcase/assets/{input-group-YIWmmLJ6.js → input-group-gOUubhee.js} +1 -1
  222. package/dist/showcase/assets/inputs-Dk8YOVkI.js +155 -0
  223. package/dist/showcase/assets/{invoice-header-B00JrPAb.js → invoice-header-BnNpWej2.js} +2 -2
  224. package/dist/showcase/assets/{invoice-items-CUt5D3Wz.js → invoice-items-BdPmW10L.js} +2 -2
  225. package/dist/showcase/assets/{invoice-mini-CRoaQ9g9.js → invoice-mini-CbSYyHIb.js} +2 -2
  226. package/dist/showcase/assets/{invoice-table-DYNnDTQl.js → invoice-table-DjnWG3KF.js} +2 -2
  227. package/dist/showcase/assets/isSameDay-B2KDl_YX.js +1 -0
  228. package/dist/showcase/assets/isToday-CXNS7ELW.js +1 -0
  229. package/dist/showcase/assets/{italic-AbetEb3d.js → italic-BRS-PpYL.js} +1 -1
  230. package/dist/showcase/assets/{item-BJOYyqeO.js → item--6Hx9AXZ.js} +1 -1
  231. package/dist/showcase/assets/{item-BGA6_5Zh.js → item-BszVRzXj.js} +2 -2
  232. package/dist/showcase/assets/{item-CbiuwbAN.js → item-YF6wMI9W.js} +1 -1
  233. package/dist/showcase/assets/{kanban-Br-Yz002.js → kanban-BWBbWLVe.js} +2 -2
  234. package/dist/showcase/assets/{label-BlCKlLE-.js → label-BgpcD3V6.js} +1 -1
  235. package/dist/showcase/assets/{languages-CKcUvHnt.js → languages-DDgmIDFe.js} +1 -1
  236. package/dist/showcase/assets/{layers-CakZLRSD.js → layers-nkkXRmvA.js} +1 -1
  237. package/dist/showcase/assets/{layout-app-shell-ukDXqPxC.js → layout-app-shell-D3MbPoGC.js} +2 -2
  238. package/dist/showcase/assets/{layout-auth-BFza65L3.js → layout-auth-DIeRtG0B.js} +4 -4
  239. package/dist/showcase/assets/{layout-containers-v1jG_b7r.js → layout-containers-Dc3-IAgV.js} +2 -2
  240. package/dist/showcase/assets/{layout-header-CqBf9wjY.js → layout-header-Cg6GfMST.js} +2 -2
  241. package/dist/showcase/assets/{layout-page-WJcljCac.js → layout-page-DojPq8S6.js} +2 -2
  242. package/dist/showcase/assets/layout-primitives-JBSQS72B.js +34 -0
  243. package/dist/showcase/assets/{layout-sidebar-DL6TLuQC.js → layout-sidebar-C6jUJRhx.js} +2 -2
  244. package/dist/showcase/assets/{layout-users-B8qpsvV9.js → layout-users-uzPscfo7.js} +2 -2
  245. package/dist/showcase/assets/{layout-workspace-iOKZ4-9K.js → layout-workspace-B3leaOKl.js} +2 -2
  246. package/dist/showcase/assets/{lock-Dn4-vUBz.js → lock-DLIcOBUd.js} +1 -1
  247. package/dist/showcase/assets/{lock-keyhole-M6KZ_7RC.js → lock-keyhole-DY6aV7Mq.js} +1 -1
  248. package/dist/showcase/assets/{mail-w1nhszbW.js → mail-AES_tOd2.js} +1 -1
  249. package/dist/showcase/assets/{mail-check-DXqQwivW.js → mail-check-dJTzg2bD.js} +1 -1
  250. package/dist/showcase/assets/{map-CquesVXo.js → map-CZ2l0iGH.js} +1 -1
  251. package/dist/showcase/assets/{map-pin-DUl-Lt6t.js → map-pin-0O7GD5Dz.js} +1 -1
  252. package/dist/showcase/assets/{media-library-CCJBQRPu.js → media-library-CRllxSGQ.js} +3 -3
  253. package/dist/showcase/assets/mention-inline-suggestions-Dx2Z1GHF.js +1 -0
  254. package/dist/showcase/assets/{mentions-Ea4pSJqG.js → mentions-CDqqGCE4.js} +2 -2
  255. package/dist/showcase/assets/menus-CDgE79I5.js +165 -0
  256. package/dist/showcase/assets/{message-square-B0RnrJV6.js → message-square-CBNI_sf8.js} +1 -1
  257. package/dist/showcase/assets/{metadata-list-fm8e58ID.js → metadata-list-BoEVt7cX.js} +1 -1
  258. package/dist/showcase/assets/{metadata-list-DkN9yfTj.js → metadata-list-NtWuY9W8.js} +4 -4
  259. package/dist/showcase/assets/{metric-guQTLTAa.js → metric-Bx_LWobe.js} +1 -1
  260. package/dist/showcase/assets/{metric-bar-BydkmggA.js → metric-bar-BldYHNLQ.js} +1 -1
  261. package/dist/showcase/assets/{metric-grid-BKjrYpt9.js → metric-grid-BDw7w7d2.js} +1 -1
  262. package/dist/showcase/assets/{metric-trend-chip-DehaJ3nC.js → metric-trend-chip-lSjDkUEo.js} +1 -1
  263. package/dist/showcase/assets/{metrics-analytics-bar-YjwFT4ae.js → metrics-analytics-bar-CCFhTmQZ.js} +1 -1
  264. package/dist/showcase/assets/{metrics-analytics-cards-B6DspERM.js → metrics-analytics-cards-C1AjZqJU.js} +2 -2
  265. package/dist/showcase/assets/{metrics-comparison-Nru5wypZ.js → metrics-comparison-vEE6BtuW.js} +2 -2
  266. package/dist/showcase/assets/{metrics-heatmap-CcumN0Or.js → metrics-heatmap-DKkz8ibX.js} +2 -2
  267. package/dist/showcase/assets/{metrics-inline-badge-2WB7w9mz.js → metrics-inline-badge-CZmVnReB.js} +2 -2
  268. package/dist/showcase/assets/{metrics-kpi-row-jU3hsB3C.js → metrics-kpi-row-s2FYIYB1.js} +2 -2
  269. package/dist/showcase/assets/{metrics-micro-grid-CaJ99RXL.js → metrics-micro-grid-DDlCl9Ep.js} +2 -2
  270. package/dist/showcase/assets/{metrics-overview-Sa7z6jct.js → metrics-overview-BgliK2L1.js} +2 -2
  271. package/dist/showcase/assets/{metrics-stat-cards-PLvMkA0M.js → metrics-stat-cards-Cn5sRZsB.js} +1 -1
  272. package/dist/showcase/assets/minus-DByvcC8K.js +1 -0
  273. package/dist/showcase/assets/{money-display-23DKz-jK.js → money-display-DG4IaEaA.js} +1 -1
  274. package/dist/showcase/assets/{month-year-picker-oEoInnKW.js → month-year-picker-CVurc9L7.js} +1 -1
  275. package/dist/showcase/assets/{navigation-Dufz6qnF.js → navigation-CHYgQTsY.js} +2 -2
  276. package/dist/showcase/assets/{navigation-Ds60FMAs.js → navigation-C_6gS4FA.js} +3 -3
  277. package/dist/showcase/assets/{navigation-extras-DKufT82I.js → navigation-extras-CflOar2P.js} +2 -2
  278. package/dist/showcase/assets/{onboarding-checklist-DSkS2ktA.js → onboarding-checklist-CYiciKwv.js} +2 -2
  279. package/dist/showcase/assets/{overlays-BptoR4sm.js → overlays-HrH2wdTK.js} +2 -2
  280. package/dist/showcase/assets/overlays-cp7VMq3b.js +159 -0
  281. package/dist/showcase/assets/{package-0ZgMoFm1.js → package-CjcwDJKu.js} +1 -1
  282. package/dist/showcase/assets/{package-check-CT0dhSM8.js → package-check-CCH3ax-x.js} +1 -1
  283. package/dist/showcase/assets/{page-action-button-DrHJKFbp.js → page-action-button-Cn5j2_EP.js} +1 -1
  284. package/dist/showcase/assets/page-header-CkvCF1MQ.js +1 -0
  285. package/dist/showcase/assets/{pagination-CxuA2zkE.js → pagination-DM5QGPo2.js} +1 -1
  286. package/dist/showcase/assets/{pagination-DsPLs2Tx.js → pagination-DUzHnhJ6.js} +1 -1
  287. package/dist/showcase/assets/{paperclip-CDMZ_JAo.js → paperclip-DoqDQQVa.js} +1 -1
  288. package/dist/showcase/assets/{password-input-BVaUPw7a.js → password-input-CfS4sfCl.js} +1 -1
  289. package/dist/showcase/assets/{pencil-BouoJ5x7.js → pencil-C2OfFQMj.js} +1 -1
  290. package/dist/showcase/assets/{phone-DCNFH5yg.js → phone-CLvml_XI.js} +1 -1
  291. package/dist/showcase/assets/plus-D5swsZCz.js +1 -0
  292. package/dist/showcase/assets/{popover-menu-CuA8fb7i.js → popover-menu-Bu9q96nE.js} +1 -1
  293. package/dist/showcase/assets/{popover-CECpX3MQ.js → popover-nCGXR4Yd.js} +1 -1
  294. package/dist/showcase/assets/popover-xC8qczvP.js +1 -0
  295. package/dist/showcase/assets/{products-BJHNTW62.js → products-BbSzEFvw.js} +2 -2
  296. package/dist/showcase/assets/progress-DYfoy7pk.js +1 -0
  297. package/dist/showcase/assets/{progress-tpxRVOkp.js → progress-ENNwjW3X.js} +1 -1
  298. package/dist/showcase/assets/{props-table-BR-KjRNe.js → props-table-2pIZzGC-.js} +1 -1
  299. package/dist/showcase/assets/{props.generated-qdUud3iu.json → props.generated-DggzG-JL.json} +3 -3
  300. package/dist/showcase/assets/{quote-CN-Sodsj.js → quote-BO1bufuX.js} +1 -1
  301. package/dist/showcase/assets/{receipt-T8B9lscp.js → receipt-kIVP3kxJ.js} +1 -1
  302. package/dist/showcase/assets/{receipt-text-CeBruM29.js → receipt-text-BDQIvI4l.js} +1 -1
  303. package/dist/showcase/assets/{refresh-cw-DnxNcOMm.js → refresh-cw-UdL93poQ.js} +1 -1
  304. package/dist/showcase/assets/resolveAriaLabelledBy-iFo8AzEr.js +1 -0
  305. package/dist/showcase/assets/resolveValueLabel-DfiI3G4i.js +1 -0
  306. package/dist/showcase/assets/{rich-text-editor-Bha0lSKT.js → rich-text-editor-CNtfwLC2.js} +1 -1
  307. package/dist/showcase/assets/{rich-text-editor-NeOPmoZF.js → rich-text-editor-DB4QWptQ.js} +3 -3
  308. package/dist/showcase/assets/rotate-ccw-DQPoMfMY.js +1 -0
  309. package/dist/showcase/assets/{save-AT8JlA8E.js → save-Cd0ZM40i.js} +1 -1
  310. package/dist/showcase/assets/{schema-form-BpkVygoO.js → schema-form-Cyc6vCVO.js} +2 -2
  311. package/dist/showcase/assets/{scroll-area-B0wmaMAD.js → scroll-area-B5NZsDdi.js} +1 -1
  312. package/dist/showcase/assets/scroll-area-BvTq99pz.js +1 -0
  313. package/dist/showcase/assets/{select-t6dryszf.js → select-BRbyPtx8.js} +1 -1
  314. package/dist/showcase/assets/select-Dymyvyh6.js +1 -0
  315. package/dist/showcase/assets/{send-BzGRF4t-.js → send-BWzI7mwi.js} +1 -1
  316. package/dist/showcase/assets/{separator-BjGdXNcn.js → separator-BsYPzBlF.js} +1 -1
  317. package/dist/showcase/assets/{separator-DbiGagrP.js → separator-Osp0OJ78.js} +1 -1
  318. package/dist/showcase/assets/{settings-BSRT_96A.js → settings-DRmWJILI.js} +1 -1
  319. package/dist/showcase/assets/{sheet-CEuKOBxr.js → sheet-BKsjMYMo.js} +1 -1
  320. package/dist/showcase/assets/{shield-CcR2q5u_.js → shield-D1EaWJMG.js} +1 -1
  321. package/dist/showcase/assets/{shield-alert-DhbgXV1X.js → shield-alert-DWsbR2jn.js} +1 -1
  322. package/dist/showcase/assets/{shield-check-CRbBJXw2.js → shield-check-DUTAPADm.js} +1 -1
  323. package/dist/showcase/assets/{shopping-bag-B5BzpLV5.js → shopping-bag-XmeqUqk9.js} +1 -1
  324. package/dist/showcase/assets/sidebar-B5uO9sUB.js +1 -0
  325. package/dist/showcase/assets/{sidebar.context-BCb20eIt.js → sidebar.context-CRjgeYJL.js} +1 -1
  326. package/dist/showcase/assets/{skeleton-BeVdks4r.js → skeleton-BtiPkfxB.js} +1 -1
  327. package/dist/showcase/assets/{skeleton-DijlT51X.js → skeleton-DbybIpkV.js} +1 -1
  328. package/dist/showcase/assets/slider-vuwVVBby.js +1 -0
  329. package/dist/showcase/assets/{sliders-horizontal-C8RwUn0S.js → sliders-horizontal-BE_cwUn0.js} +1 -1
  330. package/dist/showcase/assets/{smart-card-B4P_C0nk.js → smart-card-Dhu_1A_u.js} +1 -1
  331. package/dist/showcase/assets/{sonner-CLYYRmEW.js → sonner-DZB-G4q5.js} +2 -2
  332. package/dist/showcase/assets/{sortable.esm-CoekVJlU.js → sortable.esm-YOwRw8Hr.js} +1 -1
  333. package/dist/showcase/assets/{sparkles-DFJmoAFP.js → sparkles-N8rqKQez.js} +1 -1
  334. package/dist/showcase/assets/{spinner-DMKANM9S.js → spinner-B5zKCNXu.js} +2 -2
  335. package/dist/showcase/assets/{spinner-WEI7TMVk.js → spinner-BOjRziLu.js} +1 -1
  336. package/dist/showcase/assets/{spinner-CeQHboSs.js → spinner-PIr8y8av.js} +1 -1
  337. package/dist/showcase/assets/{square-pen-CfvmmXYo.js → square-pen-ImRrVwT8.js} +1 -1
  338. package/dist/showcase/assets/{stacked-avatars-CcCnnUrA.js → stacked-avatars-DnIAc098.js} +1 -1
  339. package/dist/showcase/assets/{star-DK5onZCp.js → star-BaV-UTPq.js} +1 -1
  340. package/dist/showcase/assets/startOfDay-CtTeiGV0.js +1 -0
  341. package/dist/showcase/assets/stringifyLocale-CkHjdQTJ.js +1 -0
  342. package/dist/showcase/assets/{styles-BStlbPXe.js → styles-Bv0pDLVi.js} +1 -1
  343. package/dist/showcase/assets/{suggestions-Cd_XUmz3.js → suggestions-QnLPdgnG.js} +2 -2
  344. package/dist/showcase/assets/switch-DwAS_TXx.js +1 -0
  345. package/dist/showcase/assets/{switch-arjWj-n7.js → switch-xzxCDtyg.js} +1 -1
  346. package/dist/showcase/assets/{sync-DorQdMfx.js → sync-LeYxWAap.js} +2 -2
  347. package/dist/showcase/assets/{table-ClYkDRAk.js → table-BbEFanNu.js} +1 -1
  348. package/dist/showcase/assets/{table-D9q0odD8.js → table-CVVHBty6.js} +5 -5
  349. package/dist/showcase/assets/{table-actions-UJbkGb44.js → table-actions-DvI9U67L.js} +1 -1
  350. package/dist/showcase/assets/tabs-CLcyGwLd.js +1 -0
  351. package/dist/showcase/assets/{tabs-BENBPFif.js → tabs-ck8y1Bjr.js} +1 -1
  352. package/dist/showcase/assets/{tags-input-DRlg3zQH.js → tags-input-DmBY2CKI.js} +1 -1
  353. package/dist/showcase/assets/{text-button-CQvP6Kic.js → text-button-C54O1rZM.js} +1 -1
  354. package/dist/showcase/assets/{text-link-DT-nOORV.js → text-link-9_mZpq_f.js} +1 -1
  355. package/dist/showcase/assets/{textarea-BGHGV17m.js → textarea-CHvnWHWH.js} +1 -1
  356. package/dist/showcase/assets/{textarea-pstF1OBP.js → textarea-jexcMklP.js} +1 -1
  357. package/dist/showcase/assets/{timelines-D8y-IyxW.js → timelines-uvFVjEQv.js} +2 -2
  358. package/dist/showcase/assets/toggle-group-B3fORi8i.js +1 -0
  359. package/dist/showcase/assets/{toggles-dhLpAHSR.js → toggles-Cox6Yk2k.js} +1 -1
  360. package/dist/showcase/assets/{toggles-group-BJ5Jio2p.js → toggles-group-CSvSPqCB.js} +1 -1
  361. package/dist/showcase/assets/{trash-2-OsaEm8cc.js → trash-2-CE9bDw49.js} +1 -1
  362. package/dist/showcase/assets/trending-up-0iJl0XvC.js +1 -0
  363. package/dist/showcase/assets/{truck-CvvBxBeB.js → truck-DlhOPoCD.js} +1 -1
  364. package/dist/showcase/assets/{typography-D_99bjSh.js → typography-BotOITw4.js} +17 -17
  365. package/dist/showcase/assets/{ui-badge-C1bu7wRu.js → ui-badge-hfmO1K3-.js} +2 -2
  366. package/dist/showcase/assets/{ui-card-Ct1FFUxv.js → ui-card-Aigzxhn3.js} +1 -1
  367. package/dist/showcase/assets/{ui-table-Dxu9Jjq0.js → ui-table-CKif9sNO.js} +1 -1
  368. package/dist/showcase/assets/{upload-tray-BeOBVU1z.js → upload-tray-BnKDNrw9.js} +3 -3
  369. package/dist/showcase/assets/{use-layout-link-BK_oEoBg.js → use-layout-link-BQ6Y9z__.js} +1 -1
  370. package/dist/showcase/assets/useAnchoredPopupScrollLock-CP1vkwD7.js +1 -0
  371. package/dist/showcase/assets/useAriaLabelledBy-J_Rvjwx3.js +1 -0
  372. package/dist/showcase/assets/useCollapsiblePanel-BwUOowW2.js +1 -0
  373. package/dist/showcase/assets/useCompositeItem-D3XOIML-.js +1 -0
  374. package/dist/showcase/assets/useCompositeListItem-BWfShNPP.js +1 -0
  375. package/dist/showcase/assets/useControlled-BF8maje6.js +1 -0
  376. package/dist/showcase/assets/useLabelableId-DxorZ3YW.js +1 -0
  377. package/dist/showcase/assets/useOpenInteractionType-DLUX6CcH.js +1 -0
  378. package/dist/showcase/assets/useRender-B9zzqKA1.js +1 -0
  379. package/dist/showcase/assets/useTriggerFocusGuards-BSvL8pKg.js +1 -0
  380. package/dist/showcase/assets/useValueChanged-DSoTBFAJ.js +1 -0
  381. package/dist/showcase/assets/user-BZog6aIh.js +1 -0
  382. package/dist/showcase/assets/{user-plus-MMxrhI4h.js → user-plus-CPxlPoxf.js} +1 -1
  383. package/dist/showcase/assets/{users-ERTaffcv.js → users-BgXAp2UO.js} +1 -1
  384. package/dist/showcase/assets/valueToPercent-gleKSaFe.js +1 -0
  385. package/dist/showcase/assets/{vendor-profile-BAwCE0wP.js → vendor-profile-BLYiDIrO.js} +2 -2
  386. package/dist/showcase/assets/{video-DJm0ubTE.js → video-YBnCbmIb.js} +1 -1
  387. package/dist/showcase/assets/{wrench-gaXnvr_b.js → wrench-BFTavxzg.js} +1 -1
  388. package/dist/showcase/assets/x-D8UN9pOu.js +1 -0
  389. package/dist/showcase/assets/{zap-DHBVTfYZ.js → zap-DIJUAJEb.js} +1 -1
  390. package/dist/showcase/index.html +2 -2
  391. package/dist/style.css +1 -1
  392. package/package.json +5 -2
  393. package/dist/_shared/header-BUAddfdE.js.map +0 -1
  394. package/dist/_shared/header-BnxWOiNm.cjs +0 -2
  395. package/dist/_shared/header-BnxWOiNm.cjs.map +0 -1
  396. package/dist/_shared/sidebar-BML5ZZ5s.js.map +0 -1
  397. package/dist/_shared/sidebar-C89O5ho_.cjs +0 -2
  398. package/dist/_shared/sidebar-C89O5ho_.cjs.map +0 -1
  399. package/dist/showcase/assets/CSPContext-ImKusJJ_.js +0 -1
  400. package/dist/showcase/assets/CompositeItem-DleE4kTc.js +0 -1
  401. package/dist/showcase/assets/CompositeRoot-BbNkvtLz.js +0 -1
  402. package/dist/showcase/assets/DialogTrigger-C0DB0bXw.js +0 -1
  403. package/dist/showcase/assets/FieldItemContext-CFTR-INZ.js +0 -1
  404. package/dist/showcase/assets/FormContext-lmjYAh4E.js +0 -1
  405. package/dist/showcase/assets/LabelableContext-CDv6gSfU.js +0 -1
  406. package/dist/showcase/assets/RadioGroup-C-0MNAYY.js +0 -1
  407. package/dist/showcase/assets/Separator-KsPLUEno.js +0 -1
  408. package/dist/showcase/assets/ToolbarRootContext-AV8xAl2m.js +0 -1
  409. package/dist/showcase/assets/accordion-variants-CVT_62VO.js +0 -1
  410. package/dist/showcase/assets/app-sidebar-DixqrLf2.js +0 -1
  411. package/dist/showcase/assets/arrow-down-CYh_aUsd.js +0 -1
  412. package/dist/showcase/assets/arrow-left-pYYsNkZE.js +0 -1
  413. package/dist/showcase/assets/arrow-right-Bf1Tl6D5.js +0 -1
  414. package/dist/showcase/assets/arrow-up-BhmQRZs9.js +0 -1
  415. package/dist/showcase/assets/arrow-up-right-CuAsO3-r.js +0 -1
  416. package/dist/showcase/assets/avatar-5EFTnHEG.js +0 -1
  417. package/dist/showcase/assets/checkbox-fwuAAaUZ.js +0 -1
  418. package/dist/showcase/assets/chevron-down-CSn8HCwf.js +0 -1
  419. package/dist/showcase/assets/chevron-left-Ddj6-KOu.js +0 -1
  420. package/dist/showcase/assets/chevron-right-d-umkBru.js +0 -1
  421. package/dist/showcase/assets/chevron-up-CeFY6O0I.js +0 -1
  422. package/dist/showcase/assets/chevrons-up-down-Ck3rUZtc.js +0 -1
  423. package/dist/showcase/assets/circle-Dy08kACD.js +0 -1
  424. package/dist/showcase/assets/circle-check-TT7cFQrr.js +0 -1
  425. package/dist/showcase/assets/circle-check-big-4RnJfeaC.js +0 -1
  426. package/dist/showcase/assets/circle-dot-CvoDXS-W.js +0 -1
  427. package/dist/showcase/assets/clock-3-DDEsD4Tb.js +0 -1
  428. package/dist/showcase/assets/clock-DuBsP5t3.js +0 -1
  429. package/dist/showcase/assets/collapsible-DagkA3To.js +0 -1
  430. package/dist/showcase/assets/command-BtaMPVtf.js +0 -45
  431. package/dist/showcase/assets/comment-item-Ctcpx1GX.js +0 -1
  432. package/dist/showcase/assets/display-DTaQWVJp.js +0 -403
  433. package/dist/showcase/assets/dropdown-menu-bPWrLPgm.js +0 -1
  434. package/dist/showcase/assets/enhanced-combobox-Cs_-wq9p.js +0 -1
  435. package/dist/showcase/assets/example-BIrQab7K.js +0 -1
  436. package/dist/showcase/assets/feature-announcement-0dOcSH7F.js +0 -34
  437. package/dist/showcase/assets/getPseudoElementBounds-Bznj386s.js +0 -1
  438. package/dist/showcase/assets/header-notifications-3VH9lzzJ.js +0 -1
  439. package/dist/showcase/assets/index-ADfexGMA.css +0 -2
  440. package/dist/showcase/assets/inertValue-BVXUUuS4.js +0 -1
  441. package/dist/showcase/assets/input-BzafMIDj.js +0 -1
  442. package/dist/showcase/assets/inputs-DjzrYJdb.js +0 -49
  443. package/dist/showcase/assets/isSameDay-DVNkwpSk.js +0 -1
  444. package/dist/showcase/assets/isToday-DZ1HTCty.js +0 -1
  445. package/dist/showcase/assets/mention-inline-suggestions-DyW6IwL8.js +0 -1
  446. package/dist/showcase/assets/menus-CJjtE4fD.js +0 -89
  447. package/dist/showcase/assets/minus-OyRBql2C.js +0 -1
  448. package/dist/showcase/assets/overlays-CVGJ_FEg.js +0 -88
  449. package/dist/showcase/assets/page-header-CikNDnqI.js +0 -1
  450. package/dist/showcase/assets/plus-DkHZm34I.js +0 -1
  451. package/dist/showcase/assets/popover-BSB11Qjp.js +0 -1
  452. package/dist/showcase/assets/progress-DGvRQyPS.js +0 -1
  453. package/dist/showcase/assets/resolveAriaLabelledBy-B2ZzrlGb.js +0 -1
  454. package/dist/showcase/assets/resolveValueLabel-CGuVi0Dj.js +0 -1
  455. package/dist/showcase/assets/rotate-ccw-7aUlKQpX.js +0 -1
  456. package/dist/showcase/assets/scroll-area-CgXTHlpJ.js +0 -1
  457. package/dist/showcase/assets/select-BG_Iad8E.js +0 -1
  458. package/dist/showcase/assets/sidebar--2nHUTn3.js +0 -1
  459. package/dist/showcase/assets/slider-Cp4m3NTK.js +0 -1
  460. package/dist/showcase/assets/startOfDay-BuizEr24.js +0 -1
  461. package/dist/showcase/assets/switch-5f1vwEZ7.js +0 -1
  462. package/dist/showcase/assets/tabs-ePpje8sU.js +0 -1
  463. package/dist/showcase/assets/toggle-group-BVyFo04r.js +0 -1
  464. package/dist/showcase/assets/trending-up-HlQQXTth.js +0 -1
  465. package/dist/showcase/assets/useAnchoredPopupScrollLock-DLXArfPo.js +0 -1
  466. package/dist/showcase/assets/useAriaLabelledBy-etINba8U.js +0 -1
  467. package/dist/showcase/assets/useCollapsiblePanel-BNe9r1t_.js +0 -1
  468. package/dist/showcase/assets/useCompositeItem-CvG1CBEV.js +0 -1
  469. package/dist/showcase/assets/useCompositeListItem-CcY0U1bY.js +0 -1
  470. package/dist/showcase/assets/useControlled-Cpg8gDqb.js +0 -1
  471. package/dist/showcase/assets/useLabelableId-Czdg4nY8.js +0 -1
  472. package/dist/showcase/assets/useOpenInteractionType-eyZ6twES.js +0 -1
  473. package/dist/showcase/assets/useRender-BAZlIYnj.js +0 -1
  474. package/dist/showcase/assets/useTriggerFocusGuards-C2I8g7TT.js +0 -1
  475. package/dist/showcase/assets/useValueChanged-Bz3WRSDy.js +0 -1
  476. package/dist/showcase/assets/user-Bqmz8M16.js +0 -1
  477. package/dist/showcase/assets/valueToPercent-B5BHWU68.js +0 -1
  478. package/dist/showcase/assets/x-BqJnRkKw.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admin-ui-starter-kit",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Opinionated React component kit for admin panels and SaaS dashboards, built on top of shadcn/ui + Tailwind CSS v4. Callback-driven, framework-agnostic, i18n-ready.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -423,12 +423,15 @@
423
423
  }
424
424
  },
425
425
  "dependencies": {
426
- "@base-ui/react": "^1.4.1",
426
+ "@base-ui/react": "^1.6.0",
427
427
  "@radix-ui/react-slot": "^1.2.4",
428
428
  "class-variance-authority": "^0.7.1",
429
429
  "clsx": "^2.1.1",
430
430
  "date-fns": "^4.1.0",
431
+ "input-otp": "^1.4.2",
432
+ "react-resizable-panels": "^4.11.2",
431
433
  "tailwind-merge": "^3.5.0",
434
+ "vaul": "^1.1.2",
432
435
  "zustand": "^5.0.12"
433
436
  },
434
437
  "peerDependencies": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"header-BUAddfdE.js","names":[],"sources":["../../src/components/layout/header/partials/header-breadcrumbs.tsx","../../src/components/layout/header/header.tsx","../../src/components/layout/header/header.types.ts","../../src/components/layout/header/partials/header-search.tsx","../../src/components/layout/header/partials/header-user-menu.tsx","../../src/components/layout/header/partials/header-notifications.tsx"],"sourcesContent":["/** HeaderBreadcrumbs — breadcrumbs trail with optional sidebar trigger. */\nimport * as React from 'react';\n\nimport { Separator } from '@/components/base/display/separator';\nimport { Breadcrumbs } from '@/components/base/navigation/breadcrumbs';\nimport { SidebarTrigger } from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { BreadcrumbItem } from '../../layout.types';\nimport type { HeaderBreadcrumbsProps } from '../header.types';\n\nexport function HeaderBreadcrumbs({\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\ttriggerSlot,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n}: HeaderBreadcrumbsProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst items = React.useMemo<BreadcrumbItem[]>(() => {\n\t\tconst out: BreadcrumbItem[] = [];\n\t\tif (homeBreadcrumb) out.push(homeBreadcrumb);\n\t\tout.push(...breadcrumbs);\n\t\treturn out;\n\t}, [homeBreadcrumb, breadcrumbs]);\n\n\tconst showCrumbs = items.length > 0;\n\n\treturn (\n\t\t<div className={cn('relative flex min-h-9 min-w-0 items-stretch gap-3 overflow-hidden', className)}>\n\t\t\t{!!showSidebarTrigger && (\n\t\t\t\t<div className=\"relative flex min-h-9 items-center justify-center gap-2\">\n\t\t\t\t\t{triggerSlot ?? <SidebarTrigger className=\"size-7 [&_svg]:size-4\" />}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!showCrumbs && (\n\t\t\t\t<>\n\t\t\t\t\t{!!showSidebarTrigger && <Separator orientation=\"vertical\" className=\"h-auto self-stretch\" />}\n\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center overflow-hidden\">\n\t\t\t\t\t\t<Breadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={items}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'min-w-0 overflow-hidden',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-list]]:flex-nowrap [&_[data-slot=breadcrumb-list]]:overflow-hidden [&_[data-slot=breadcrumb-list]]:break-normal',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-item]]:min-w-0 [&_[data-slot=breadcrumb-item]]:shrink',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-link]]:truncate [&_[data-slot=breadcrumb-page]]:truncate',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/** Header — sticky top bar with breadcrumbs and slot-driven content regions. */\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { HeaderBreadcrumbs } from './partials/header-breadcrumbs';\nimport type { HeaderProps } from './header.types';\n\nexport function Header({\n\tshowBreadcrumbs = true,\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\tbrand,\n\tleftContent,\n\tcenterContent,\n\trightContent,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tleftClassName,\n\tcenterClassName,\n\trightClassName,\n\tbreadcrumbsClassName,\n}: HeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'sticky top-0 z-40 flex min-h-[var(--topbar-height)] items-center border-b bg-background/70 px-4 py-2 backdrop-blur-md transition-[width,height] ease-linear md:px-5',\n\t\t\t\t'dark:bg-topbar',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className={cn('flex min-h-9 min-w-0 flex-1 items-stretch gap-4', contentClassName)}>\n\t\t\t\t{!!(slots?.brand ?? brand) && (\n\t\t\t\t\t<div className=\"hidden min-w-0 shrink-0 items-center md:flex\">\n\t\t\t\t\t\t{slots?.brand ?? brand}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!showBreadcrumbs && (slots?.breadcrumbs ?? (\n\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t<HeaderBreadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={breadcrumbs}\n\t\t\t\t\t\t\thomeBreadcrumb={homeBreadcrumb}\n\t\t\t\t\t\t\tshowSidebarTrigger={showSidebarTrigger}\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={breadcrumbsClassName}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\n\t\t\t\t{!!(slots?.left ?? leftContent) && (\n\t\t\t\t\t<div className={cn('flex min-w-0 items-center', leftClassName)}>\n\t\t\t\t\t\t{slots?.left ?? leftContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!(slots?.center ?? centerContent) && (\n\t\t\t\t\t<div className={cn('hidden min-w-0 shrink-0 items-center justify-center lg:flex', centerClassName)}>\n\t\t\t\t\t\t{slots?.center ?? centerContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!(slots?.right ?? rightContent) && (\n\t\t\t\t\t<div className={cn('ml-auto flex shrink-0 items-center gap-2', rightClassName)}>\n\t\t\t\t\t\t{slots?.right ?? rightContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</header>\n\t);\n}\n","/**\n * Header layout and partial types.\n *\n * This layer is intentionally framework-neutral: links and route state enter\n * through `renderLink`, and app-specific content enters through slots.\n */\nimport type { ReactNode } from 'react';\n\nimport type {\n\tBreadcrumbItem,\n\tLayoutNavigationAdapter,\n\tLayoutUser,\n\tLinkComponent,\n} from '../layout.types';\n\nexport interface HeaderBreadcrumbsProps extends LayoutNavigationAdapter {\n\tbreadcrumbs?: BreadcrumbItem[];\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\tshowSidebarTrigger?: boolean;\n\ttriggerSlot?: ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type NotificationTone = 'info' | 'success' | 'warning' | 'error';\n\nexport interface HeaderNotification {\n\tid: string | number;\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\ttime?: ReactNode;\n\tread?: boolean;\n\ttone?: NotificationTone;\n\thref?: string;\n}\n\nexport interface HeaderNotificationsStrings {\n\ttriggerLabel: string;\n\theading: string;\n\tmarkAllRead: string;\n\tempty: string;\n\tviewAll: string;\n}\n\nexport const defaultHeaderNotificationsStrings: HeaderNotificationsStrings = {\n\ttriggerLabel: 'Notifications',\n\theading: 'Notifications',\n\tmarkAllRead: 'Mark all as read',\n\tempty: 'No new notifications',\n\tviewAll: 'View all notifications',\n};\n\nexport interface HeaderNotificationsProps extends LayoutNavigationAdapter {\n\tnotifications?: HeaderNotification[];\n\tunreadCount?: number;\n\tonNotificationClick?: (notification: HeaderNotification) => void;\n\tonMarkAllRead?: () => void;\n\tonViewAll?: () => void;\n\tviewAllHref?: string;\n\talign?: 'start' | 'center' | 'end';\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\tstrings?: Partial<HeaderNotificationsStrings>;\n\tclassName?: string;\n\tcontentClassName?: string;\n\trenderNotification?: (notification: HeaderNotification) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface HeaderSearchStrings {\n\tplaceholder: string;\n\tshortcutMac: string;\n\tshortcutPc: string;\n}\n\nexport const defaultHeaderSearchStrings: HeaderSearchStrings = {\n\tplaceholder: 'Search...',\n\tshortcutMac: '⌘K',\n\tshortcutPc: 'Ctrl+K',\n};\n\nexport interface HeaderSearchProps {\n\tonOpen?: () => void;\n\tisMac?: boolean;\n\tenableShortcut?: boolean;\n\tstrings?: Partial<HeaderSearchStrings>;\n\tclassName?: string;\n\ticonClassName?: string;\n\tshortcutSlot?: ReactNode;\n}\n\nexport interface HeaderUserMenuProps {\n\tuser: LayoutUser;\n\tshowEmail?: boolean;\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\talign?: 'start' | 'center' | 'end';\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\tstrings?: Partial<HeaderUserMenuStrings>;\n\ttriggerClassName?: string;\n\tcontentClassName?: string;\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nexport interface HeaderUserMenuStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultHeaderUserMenuStrings: HeaderUserMenuStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface HeaderSlots {\n\t/** Leading brand/logo region before breadcrumbs. */\n\tbrand?: ReactNode;\n\t/** Replaces the breadcrumb/sidebar-trigger region. */\n\tbreadcrumbs?: ReactNode;\n\t/** Leading content after breadcrumbs. Prefer this over `leftContent` for new code. */\n\tleft?: ReactNode;\n\t/** Center content, usually search or a scope switcher. */\n\tcenter?: ReactNode;\n\t/** Trailing content, usually notifications/user menu/actions. */\n\tright?: ReactNode;\n}\n\nexport interface HeaderProps extends LayoutNavigationAdapter {\n\tshowBreadcrumbs?: boolean;\n\tbreadcrumbs?: BreadcrumbItem[];\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\tshowSidebarTrigger?: boolean;\n\tbrand?: ReactNode;\n\t/** @deprecated Prefer `slots.left`. */\n\tleftContent?: ReactNode;\n\t/** @deprecated Prefer `slots.center`. */\n\tcenterContent?: ReactNode;\n\t/** @deprecated Prefer `slots.right`. */\n\trightContent?: ReactNode;\n\tslots?: HeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tleftClassName?: string;\n\tcenterClassName?: string;\n\trightClassName?: string;\n\tbreadcrumbsClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n","/** HeaderSearch — framework-neutral search trigger with optional Cmd/Ctrl+K. */\nimport { useMemo } from 'react';\nimport { Command, Search } from 'lucide-react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useCommandShortcut } from '../../hooks';\nimport {\n\tdefaultHeaderSearchStrings,\n\ttype HeaderSearchProps,\n} from '../header.types';\n\nfunction detectMac(): boolean {\n\tif (typeof navigator === 'undefined') return false;\n\tconst ua = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData;\n\tif (ua?.platform) return ua.platform === 'macOS';\n\treturn /Mac|iPhone|iPad/.test(navigator.platform);\n}\n\nexport function HeaderSearch({\n\tonOpen,\n\tisMac,\n\tenableShortcut = true,\n\tstrings: stringsProp,\n\tclassName,\n\ticonClassName,\n\tshortcutSlot,\n}: HeaderSearchProps) {\n\tconst strings = useStrings(defaultHeaderSearchStrings, stringsProp);\n\tconst isMacResolved = useMemo(() => isMac ?? detectMac(), [isMac]);\n\tuseCommandShortcut({ key: 'k', enabled: enableShortcut, onTrigger: onOpen });\n\n\tconst shortcutTitle = isMacResolved ? strings.shortcutMac : strings.shortcutPc;\n\tconst shortcut = shortcutSlot ?? (\n\t\t<kbd className=\"header-search--shortcut hidden h-5 shrink-0 items-center gap-1 rounded bg-muted px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex dark:bg-muted/20\">\n\t\t\t{isMacResolved ? (\n\t\t\t\t<>\n\t\t\t\t\t<Command className=\"size-3 dark:text-muted/60\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"dark:text-muted/60\">K</Text>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"dark:text-muted/60\">Ctrl+K</Text>\n\t\t\t)}\n\t\t</kbd>\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"secondary\"\n\t\t\tbuttonStyle=\"outline\"\n\t\t\tonClick={onOpen}\n\t\t\tclassName={cn(\n\t\t\t\t'header-search--component header-search--trigger h-8 w-full min-w-[205px] justify-start gap-2 rounded-lg border-input bg-background px-2.5 shadow-none hover:bg-accent/50',\n\t\t\t\t'dark:border-topbar-accent/80 dark:bg-topbar-accent/40',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={shortcutTitle}\n\t\t>\n\t\t\t<Search className={cn('header-search--icon size-3.5 shrink-0 text-muted-foreground dark:text-muted/60', iconClassName)} aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"header-search--placeholder flex-1 text-left dark:text-muted/60\">\n\t\t\t\t{strings.placeholder}\n\t\t\t</Text>\n\t\t\t{shortcut}\n\t\t\t<span className=\"sr-only\">{strings.placeholder}</span>\n\t\t</Button>\n\t);\n}\n","/** HeaderUserMenu — avatar/name trigger with consumer-wired menu callbacks. */\nimport type { ReactElement } from 'react';\n\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultHeaderUserMenuStrings,\n\ttype HeaderUserMenuProps,\n} from '../header.types';\n\nfunction deriveInitials(name: string): string {\n\treturn name\n\t\t.split(' ')\n\t\t.map((part) => part[0])\n\t\t.filter(Boolean)\n\t\t.slice(0, 2)\n\t\t.join('')\n\t\t.toUpperCase();\n}\n\nexport function HeaderUserMenu({\n\tuser,\n\tshowEmail = true,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\ttriggerClassName,\n\tcontentClassName,\n\trenderTrigger,\n}: HeaderUserMenuProps) {\n\tconst strings = useStrings(defaultHeaderUserMenuStrings, stringsProp);\n\tconst initials = deriveInitials(user.name);\n\n\tconst defaultContent = (\n\t\t<>\n\t\t\t{!!onProfile && (\n\t\t\t\t<DropdownMenuItem onClick={onProfile}>\n\t\t\t\t\t<User className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.profile}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!onSettings && (\n\t\t\t\t<DropdownMenuItem onClick={onSettings}>\n\t\t\t\t\t<Settings className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.settings}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!(onProfile || onSettings) && !!onLogout && <DropdownMenuSeparator />}\n\t\t\t{!!onLogout && (\n\t\t\t\t<DropdownMenuItem onClick={onLogout}>\n\t\t\t\t\t<LogOut className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.logout}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst trigger = renderTrigger?.(user) ?? (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tclassName={cn(\n\t\t\t\t'header-user-menu--component header-user-menu--trigger group h-10 max-w-56 justify-start gap-2 rounded-lg px-1.5 pr-2 text-foreground shadow-none hover:bg-foreground/5 data-[state=open]:bg-foreground/5',\n\t\t\t\tshowEmail ? 'py-1.5' : 'py-1',\n\t\t\t\t'dark:text-background dark:hover:bg-topbar-accent/50',\n\t\t\t\ttriggerClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Avatar className=\"header-user-menu--avatar size-6 overflow-hidden rounded-full ring-1 ring-border/60\">\n\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t<AvatarFallback className=\"rounded-md bg-success text-[length:var(--text-xxs)] font-semibold text-background\">\n\t\t\t\t\t{initials}\n\t\t\t\t</AvatarFallback>\n\t\t\t</Avatar>\n\t\t\t<div className=\"header-user-menu--identity grid min-w-0 flex-1 text-left leading-none\">\n\t\t\t\t<Text size=\"xs\" weight=\"medium\" className=\"truncate\">{user.name}</Text>\n\t\t\t\t{!!showEmail && !!user.email && (\n\t\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"truncate\">{user.email}</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<ChevronsUpDown className=\"header-user-menu--chevron size-3 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t</Button>\n\t);\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger render={trigger as ReactElement} />\n\t\t\t<DropdownMenuContent\n\t\t\t\tclassName={cn('header-user-menu--content w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg p-3', contentClassName)}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t>\n\t\t\t\t{customContent ?? defaultContent}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/** HeaderNotifications — bell dropdown for consumer-supplied notifications. */\nimport type { ReactElement } from 'react';\n\nimport { Bell } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuLinkItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultHeaderNotificationsStrings,\n\ttype HeaderNotification,\n\ttype HeaderNotificationsProps,\n} from '../header.types';\n\nexport function HeaderNotifications({\n\tnotifications = [],\n\tunreadCount = 0,\n\tonNotificationClick,\n\tonMarkAllRead,\n\tonViewAll,\n\tviewAllHref,\n\trenderLink,\n\tLinkComponent,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\tclassName,\n\tcontentClassName,\n\trenderNotification,\n}: HeaderNotificationsProps) {\n\tconst strings = useStrings(defaultHeaderNotificationsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst badgeText = unreadCount > 99 ? '99+' : String(unreadCount);\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={strings.triggerLabel}\n\t\t\t\t\t\tclassName={cn('header-notifications--component header-notifications--trigger relative', className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Bell className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t{unreadCount > 0 && (\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"error\"\n\t\t\t\t\t\t\t\tclassName=\"absolute -right-1 -top-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full px-1 py-0 text-xxs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{badgeText}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<DropdownMenuContent\n\t\t\t\tclassName={cn('header-notifications--content w-80 max-w-[calc(100vw-2rem)]', contentClassName)}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t>\n\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t<DropdownMenuLabel className=\"header-notifications--label flex items-center justify-between gap-3\">\n\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">{strings.heading}</Text>\n\t\t\t\t\t\t{unreadCount > 0 && !!onMarkAllRead && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tonClick={onMarkAllRead}\n\t\t\t\t\t\t\t\tclassName=\"h-auto px-1 py-0 text-xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.markAllRead}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuSeparator />\n\n\t\t\t\t\t{notifications.length === 0 ? (\n\t\t\t\t\t\t<div className=\"header-notifications--empty p-4 text-center\">\n\t\t\t\t\t\t\t<Text type=\"secondary\">{strings.empty}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"space-y-1 p-1\">\n\t\t\t\t\t\t\t{notifications.map((notification) => (\n\t\t\t\t\t\t\t\t<NotificationRow\n\t\t\t\t\t\t\t\t\tkey={notification.id}\n\t\t\t\t\t\t\t\t\tnotification={notification}\n\t\t\t\t\t\t\t\t\tonClick={onNotificationClick}\n\t\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\t\trenderNotification={renderNotification}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</DropdownMenuGroup>\n\n\t\t\t\t{!!(onViewAll || viewAllHref) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t{viewAllHref ? (\n\t\t\t\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\t\t\t\thref={viewAllHref}\n\t\t\t\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\t\t\t\tresolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\t\t\t\thref: viewAllHref,\n\t\t\t\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\t\t\t}) as ReactElement\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.viewAll}\n\t\t\t\t\t\t\t</DropdownMenuLinkItem>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownMenuItem onClick={onViewAll}>{strings.viewAll}</DropdownMenuItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n\nfunction NotificationRow({\n\tnotification,\n\tonClick,\n\trenderLink,\n\trenderNotification,\n}: {\n\tnotification: HeaderNotification;\n\tonClick?: (n: HeaderNotification) => void;\n\trenderLink: NonNullable<HeaderNotificationsProps['renderLink']>;\n\trenderNotification?: HeaderNotificationsProps['renderNotification'];\n}) {\n\tif (renderNotification) return renderNotification(notification);\n\n\tconst content = (\n\t\t<div className=\"header-notifications--item-content min-w-0 space-y-1\">\n\t\t\t<Text weight=\"medium\">{notification.title}</Text>\n\t\t\t{!!notification.description && <Text size=\"xs\" type=\"secondary\">{notification.description}</Text>}\n\t\t\t{!!notification.time && <Text size=\"xxs\" type=\"secondary\">{notification.time}</Text>}\n\t\t</div>\n\t);\n\n\tconst className = cn(\n\t\t'header-notifications--item items-start rounded-md px-3 py-2',\n\t\t!notification.read && 'bg-muted/40',\n\t);\n\n\tif (notification.href) {\n\t\treturn (\n\t\t\t<DropdownMenuLinkItem\n\t\t\t\thref={notification.href}\n\t\t\t\tclassName={className}\n\t\t\t\tonClick={() => onClick?.(notification)}\n\t\t\t\trender={(props) =>\n\t\t\t\t\trenderLink({\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\thref: notification.href,\n\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t}) as ReactElement\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuLinkItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DropdownMenuItem onClick={() => onClick?.(notification)} className={className}>\n\t\t\t{content}\n\t\t</DropdownMenuItem>\n\t);\n}\n\n/** @deprecated Re-exported for backwards compat — use `HeaderNotification`. */\nexport type Notification = HeaderNotification;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("../lib/utils.cjs"),r=require("./heading-0DYCOrgC.cjs"),i=require("./badge--o9wFHB_.cjs"),a=require("./button-C1qc97U1.cjs"),o=require("./dropdown-menu-CHQzQWUK.cjs"),s=require("./separator-q42IlFFA.cjs"),c=require("./avatar-0spfQEHG.cjs"),l=require("./breadcrumbs-Dqp2qAmo.cjs"),u=require("./sidebar-Bl_KRk-S.cjs"),d=require("./hooks-MW0UTO3q.cjs");let f=require("react");f=e.t(f,1);let p=require("react/jsx-runtime"),m=require("lucide-react");function h({breadcrumbs:e=[],homeBreadcrumb:t=null,showSidebarTrigger:r=!0,triggerSlot:i,renderLink:a,LinkComponent:o,className:c}){let m=d.d({renderLink:a,LinkComponent:o}),h=f.useMemo(()=>{let n=[];return t&&n.push(t),n.push(...e),n},[t,e]),g=h.length>0;return(0,p.jsxs)(`div`,{className:n.cn(`relative flex min-h-9 min-w-0 items-stretch gap-3 overflow-hidden`,c),children:[!!r&&(0,p.jsx)(`div`,{className:`relative flex min-h-9 items-center justify-center gap-2`,children:i??(0,p.jsx)(u.C,{className:`size-7 [&_svg]:size-4`})}),!!g&&(0,p.jsxs)(p.Fragment,{children:[!!r&&(0,p.jsx)(s.t,{orientation:`vertical`,className:`h-auto self-stretch`}),(0,p.jsx)(`div`,{className:`flex min-w-0 flex-1 items-center overflow-hidden`,children:(0,p.jsx)(l.t,{breadcrumbs:h,size:`xs`,renderLink:m,className:n.cn(`min-w-0 overflow-hidden`,`[&_[data-slot=breadcrumb-list]]:flex-nowrap [&_[data-slot=breadcrumb-list]]:overflow-hidden [&_[data-slot=breadcrumb-list]]:break-normal`,`[&_[data-slot=breadcrumb-item]]:min-w-0 [&_[data-slot=breadcrumb-item]]:shrink`,`[&_[data-slot=breadcrumb-link]]:truncate [&_[data-slot=breadcrumb-page]]:truncate`)})})]})]})}function g({showBreadcrumbs:e=!0,breadcrumbs:t=[],homeBreadcrumb:r=null,showSidebarTrigger:i=!0,brand:a,leftContent:o,centerContent:s,rightContent:c,slots:l,renderLink:u,LinkComponent:f,className:m,contentClassName:g,leftClassName:_,centerClassName:v,rightClassName:y,breadcrumbsClassName:b}){let x=d.d({renderLink:u,LinkComponent:f});return(0,p.jsx)(`header`,{className:n.cn(`sticky top-0 z-40 flex min-h-[var(--topbar-height)] items-center border-b bg-background/70 px-4 py-2 backdrop-blur-md transition-[width,height] ease-linear md:px-5`,`dark:bg-topbar`,m),children:(0,p.jsxs)(`div`,{className:n.cn(`flex min-h-9 min-w-0 flex-1 items-stretch gap-4`,g),children:[!!(l?.brand??a)&&(0,p.jsx)(`div`,{className:`hidden min-w-0 shrink-0 items-center md:flex`,children:l?.brand??a}),!!e&&(l?.breadcrumbs??(0,p.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,p.jsx)(h,{breadcrumbs:t,homeBreadcrumb:r,showSidebarTrigger:i,renderLink:x,className:b})})),!!(l?.left??o)&&(0,p.jsx)(`div`,{className:n.cn(`flex min-w-0 items-center`,_),children:l?.left??o}),!!(l?.center??s)&&(0,p.jsx)(`div`,{className:n.cn(`hidden min-w-0 shrink-0 items-center justify-center lg:flex`,v),children:l?.center??s}),!!(l?.right??c)&&(0,p.jsx)(`div`,{className:n.cn(`ml-auto flex shrink-0 items-center gap-2`,y),children:l?.right??c})]})})}var _={triggerLabel:`Notifications`,heading:`Notifications`,markAllRead:`Mark all as read`,empty:`No new notifications`,viewAll:`View all notifications`},v={placeholder:`Search...`,shortcutMac:`⌘K`,shortcutPc:`Ctrl+K`},y={profile:`Profile`,settings:`Settings`,logout:`Log out`};function b(){if(typeof navigator>`u`)return!1;let e=navigator.userAgentData;return e?.platform?e.platform===`macOS`:/Mac|iPhone|iPad/.test(navigator.platform)}function x({onOpen:e,isMac:i,enableShortcut:o=!0,strings:s,className:c,iconClassName:l,shortcutSlot:u}){let h=t.useStrings(v,s),g=(0,f.useMemo)(()=>i??b(),[i]);d.t({key:`k`,enabled:o,onTrigger:e});let _=g?h.shortcutMac:h.shortcutPc,y=u??(0,p.jsx)(`kbd`,{className:`header-search--shortcut hidden h-5 shrink-0 items-center gap-1 rounded bg-muted px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex dark:bg-muted/20`,children:g?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(m.Command,{className:`size-3 dark:text-muted/60`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`dark:text-muted/60`,children:`K`})]}):(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`dark:text-muted/60`,children:`Ctrl+K`})});return(0,p.jsxs)(a.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:e,className:n.cn(`header-search--component header-search--trigger h-8 w-full min-w-[205px] justify-start gap-2 rounded-lg border-input bg-background px-2.5 shadow-none hover:bg-accent/50`,`dark:border-topbar-accent/80 dark:bg-topbar-accent/40`,c),title:_,children:[(0,p.jsx)(m.Search,{className:n.cn(`header-search--icon size-3.5 shrink-0 text-muted-foreground dark:text-muted/60`,l),"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,type:`secondary`,className:`header-search--placeholder flex-1 text-left dark:text-muted/60`,children:h.placeholder}),y,(0,p.jsx)(`span`,{className:`sr-only`,children:h.placeholder})]})}function S(e){return e.split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase()}function C({user:e,showEmail:i=!0,customContent:s,onProfile:l,onSettings:u,onLogout:d,align:f=`end`,side:h=`bottom`,strings:g,triggerClassName:_,contentClassName:v,renderTrigger:b}){let x=t.useStrings(y,g),C=S(e.name),w=(0,p.jsxs)(p.Fragment,{children:[!!l&&(0,p.jsxs)(o.a,{onClick:l,children:[(0,p.jsx)(m.User,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:x.profile})]}),!!u&&(0,p.jsxs)(o.a,{onClick:u,children:[(0,p.jsx)(m.Settings,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:x.settings})]}),!!(l||u)&&!!d&&(0,p.jsx)(o.d,{}),!!d&&(0,p.jsxs)(o.a,{onClick:d,children:[(0,p.jsx)(m.LogOut,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:x.logout})]})]});return(0,p.jsxs)(o.t,{children:[(0,p.jsx)(o.g,{render:b?.(e)??(0,p.jsxs)(a.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,className:n.cn(`header-user-menu--component header-user-menu--trigger group h-10 max-w-56 justify-start gap-2 rounded-lg px-1.5 pr-2 text-foreground shadow-none hover:bg-foreground/5 data-[state=open]:bg-foreground/5`,i?`py-1.5`:`py-1`,`dark:text-background dark:hover:bg-topbar-accent/50`,_),children:[(0,p.jsxs)(c.t,{className:`header-user-menu--avatar size-6 overflow-hidden rounded-full ring-1 ring-border/60`,children:[!!e.avatar&&(0,p.jsx)(c.o,{src:e.avatar,alt:e.name}),(0,p.jsx)(c.r,{className:`rounded-md bg-success text-[length:var(--text-xxs)] font-semibold text-background`,children:C})]}),(0,p.jsxs)(`div`,{className:`header-user-menu--identity grid min-w-0 flex-1 text-left leading-none`,children:[(0,p.jsx)(r.n,{size:`xs`,weight:`medium`,className:`truncate`,children:e.name}),!!i&&!!e.email&&(0,p.jsx)(r.n,{size:`xxs`,type:`secondary`,className:`truncate`,children:e.email})]}),(0,p.jsx)(m.ChevronsUpDown,{className:`header-user-menu--chevron size-3 shrink-0 text-muted-foreground`,"aria-hidden":`true`})]})}),(0,p.jsx)(o.r,{className:n.cn(`header-user-menu--content w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg p-3`,v),align:f,side:h,children:s??w})]})}function w({notifications:e=[],unreadCount:s=0,onNotificationClick:c,onMarkAllRead:l,onViewAll:u,viewAllHref:f,renderLink:h,LinkComponent:g,align:v=`end`,side:y=`bottom`,strings:b,className:x,contentClassName:S,renderNotification:C}){let w=t.useStrings(_,b),E=d.d({renderLink:h,LinkComponent:g}),D=s>99?`99+`:String(s);return(0,p.jsxs)(o.t,{children:[(0,p.jsx)(o.g,{render:(0,p.jsxs)(a.t,{variant:`secondary`,buttonStyle:`ghost`,size:`icon-sm`,"aria-label":w.triggerLabel,className:n.cn(`header-notifications--component header-notifications--trigger relative`,x),children:[(0,p.jsx)(m.Bell,{className:`size-4`,"aria-hidden":`true`}),s>0&&(0,p.jsx)(i.t,{variant:`error`,className:`absolute -right-1 -top-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full px-1 py-0 text-xxs`,children:D})]})}),(0,p.jsxs)(o.r,{className:n.cn(`header-notifications--content w-80 max-w-[calc(100vw-2rem)]`,S),align:v,side:y,children:[(0,p.jsxs)(o.i,{children:[(0,p.jsxs)(o.o,{className:`header-notifications--label flex items-center justify-between gap-3`,children:[(0,p.jsx)(r.n,{tag:`span`,weight:`semibold`,children:w.heading}),s>0&&!!l&&(0,p.jsx)(a.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`xs`,onClick:l,className:`h-auto px-1 py-0 text-xs`,children:w.markAllRead})]}),(0,p.jsx)(o.d,{}),e.length===0?(0,p.jsx)(`div`,{className:`header-notifications--empty p-4 text-center`,children:(0,p.jsx)(r.n,{type:`secondary`,children:w.empty})}):(0,p.jsx)(`div`,{className:`space-y-1 p-1`,children:e.map(e=>(0,p.jsx)(T,{notification:e,onClick:c,renderLink:E,renderNotification:C},e.id))})]}),!!(u||f)&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(o.d,{}),f?(0,p.jsx)(o.s,{href:f,render:e=>E({...e,href:f,children:e.children}),children:w.viewAll}):(0,p.jsx)(o.a,{onClick:u,children:w.viewAll})]})]})]})}function T({notification:e,onClick:t,renderLink:i,renderNotification:a}){if(a)return a(e);let s=(0,p.jsxs)(`div`,{className:`header-notifications--item-content min-w-0 space-y-1`,children:[(0,p.jsx)(r.n,{weight:`medium`,children:e.title}),!!e.description&&(0,p.jsx)(r.n,{size:`xs`,type:`secondary`,children:e.description}),!!e.time&&(0,p.jsx)(r.n,{size:`xxs`,type:`secondary`,children:e.time})]}),c=n.cn(`header-notifications--item items-start rounded-md px-3 py-2`,!e.read&&`bg-muted/40`);return e.href?(0,p.jsx)(o.s,{href:e.href,className:c,onClick:()=>t?.(e),render:t=>i({...t,href:e.href,children:t.children}),children:s}):(0,p.jsx)(o.a,{onClick:()=>t?.(e),className:c,children:s})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return w}});
2
- //# sourceMappingURL=header-BnxWOiNm.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"header-BnxWOiNm.cjs","names":[],"sources":["../../src/components/layout/header/partials/header-breadcrumbs.tsx","../../src/components/layout/header/header.tsx","../../src/components/layout/header/header.types.ts","../../src/components/layout/header/partials/header-search.tsx","../../src/components/layout/header/partials/header-user-menu.tsx","../../src/components/layout/header/partials/header-notifications.tsx"],"sourcesContent":["/** HeaderBreadcrumbs — breadcrumbs trail with optional sidebar trigger. */\nimport * as React from 'react';\n\nimport { Separator } from '@/components/base/display/separator';\nimport { Breadcrumbs } from '@/components/base/navigation/breadcrumbs';\nimport { SidebarTrigger } from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { BreadcrumbItem } from '../../layout.types';\nimport type { HeaderBreadcrumbsProps } from '../header.types';\n\nexport function HeaderBreadcrumbs({\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\ttriggerSlot,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n}: HeaderBreadcrumbsProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst items = React.useMemo<BreadcrumbItem[]>(() => {\n\t\tconst out: BreadcrumbItem[] = [];\n\t\tif (homeBreadcrumb) out.push(homeBreadcrumb);\n\t\tout.push(...breadcrumbs);\n\t\treturn out;\n\t}, [homeBreadcrumb, breadcrumbs]);\n\n\tconst showCrumbs = items.length > 0;\n\n\treturn (\n\t\t<div className={cn('relative flex min-h-9 min-w-0 items-stretch gap-3 overflow-hidden', className)}>\n\t\t\t{!!showSidebarTrigger && (\n\t\t\t\t<div className=\"relative flex min-h-9 items-center justify-center gap-2\">\n\t\t\t\t\t{triggerSlot ?? <SidebarTrigger className=\"size-7 [&_svg]:size-4\" />}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!showCrumbs && (\n\t\t\t\t<>\n\t\t\t\t\t{!!showSidebarTrigger && <Separator orientation=\"vertical\" className=\"h-auto self-stretch\" />}\n\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center overflow-hidden\">\n\t\t\t\t\t\t<Breadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={items}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'min-w-0 overflow-hidden',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-list]]:flex-nowrap [&_[data-slot=breadcrumb-list]]:overflow-hidden [&_[data-slot=breadcrumb-list]]:break-normal',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-item]]:min-w-0 [&_[data-slot=breadcrumb-item]]:shrink',\n\t\t\t\t\t\t\t\t'[&_[data-slot=breadcrumb-link]]:truncate [&_[data-slot=breadcrumb-page]]:truncate',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/** Header — sticky top bar with breadcrumbs and slot-driven content regions. */\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { HeaderBreadcrumbs } from './partials/header-breadcrumbs';\nimport type { HeaderProps } from './header.types';\n\nexport function Header({\n\tshowBreadcrumbs = true,\n\tbreadcrumbs = [],\n\thomeBreadcrumb = null,\n\tshowSidebarTrigger = true,\n\tbrand,\n\tleftContent,\n\tcenterContent,\n\trightContent,\n\tslots,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n\tcontentClassName,\n\tleftClassName,\n\tcenterClassName,\n\trightClassName,\n\tbreadcrumbsClassName,\n}: HeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'sticky top-0 z-40 flex min-h-[var(--topbar-height)] items-center border-b bg-background/70 px-4 py-2 backdrop-blur-md transition-[width,height] ease-linear md:px-5',\n\t\t\t\t'dark:bg-topbar',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className={cn('flex min-h-9 min-w-0 flex-1 items-stretch gap-4', contentClassName)}>\n\t\t\t\t{!!(slots?.brand ?? brand) && (\n\t\t\t\t\t<div className=\"hidden min-w-0 shrink-0 items-center md:flex\">\n\t\t\t\t\t\t{slots?.brand ?? brand}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!showBreadcrumbs && (slots?.breadcrumbs ?? (\n\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t<HeaderBreadcrumbs\n\t\t\t\t\t\t\tbreadcrumbs={breadcrumbs}\n\t\t\t\t\t\t\thomeBreadcrumb={homeBreadcrumb}\n\t\t\t\t\t\t\tshowSidebarTrigger={showSidebarTrigger}\n\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\tclassName={breadcrumbsClassName}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\n\t\t\t\t{!!(slots?.left ?? leftContent) && (\n\t\t\t\t\t<div className={cn('flex min-w-0 items-center', leftClassName)}>\n\t\t\t\t\t\t{slots?.left ?? leftContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!(slots?.center ?? centerContent) && (\n\t\t\t\t\t<div className={cn('hidden min-w-0 shrink-0 items-center justify-center lg:flex', centerClassName)}>\n\t\t\t\t\t\t{slots?.center ?? centerContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!(slots?.right ?? rightContent) && (\n\t\t\t\t\t<div className={cn('ml-auto flex shrink-0 items-center gap-2', rightClassName)}>\n\t\t\t\t\t\t{slots?.right ?? rightContent}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</header>\n\t);\n}\n","/**\n * Header layout and partial types.\n *\n * This layer is intentionally framework-neutral: links and route state enter\n * through `renderLink`, and app-specific content enters through slots.\n */\nimport type { ReactNode } from 'react';\n\nimport type {\n\tBreadcrumbItem,\n\tLayoutNavigationAdapter,\n\tLayoutUser,\n\tLinkComponent,\n} from '../layout.types';\n\nexport interface HeaderBreadcrumbsProps extends LayoutNavigationAdapter {\n\tbreadcrumbs?: BreadcrumbItem[];\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\tshowSidebarTrigger?: boolean;\n\ttriggerSlot?: ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type NotificationTone = 'info' | 'success' | 'warning' | 'error';\n\nexport interface HeaderNotification {\n\tid: string | number;\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\ttime?: ReactNode;\n\tread?: boolean;\n\ttone?: NotificationTone;\n\thref?: string;\n}\n\nexport interface HeaderNotificationsStrings {\n\ttriggerLabel: string;\n\theading: string;\n\tmarkAllRead: string;\n\tempty: string;\n\tviewAll: string;\n}\n\nexport const defaultHeaderNotificationsStrings: HeaderNotificationsStrings = {\n\ttriggerLabel: 'Notifications',\n\theading: 'Notifications',\n\tmarkAllRead: 'Mark all as read',\n\tempty: 'No new notifications',\n\tviewAll: 'View all notifications',\n};\n\nexport interface HeaderNotificationsProps extends LayoutNavigationAdapter {\n\tnotifications?: HeaderNotification[];\n\tunreadCount?: number;\n\tonNotificationClick?: (notification: HeaderNotification) => void;\n\tonMarkAllRead?: () => void;\n\tonViewAll?: () => void;\n\tviewAllHref?: string;\n\talign?: 'start' | 'center' | 'end';\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\tstrings?: Partial<HeaderNotificationsStrings>;\n\tclassName?: string;\n\tcontentClassName?: string;\n\trenderNotification?: (notification: HeaderNotification) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface HeaderSearchStrings {\n\tplaceholder: string;\n\tshortcutMac: string;\n\tshortcutPc: string;\n}\n\nexport const defaultHeaderSearchStrings: HeaderSearchStrings = {\n\tplaceholder: 'Search...',\n\tshortcutMac: '⌘K',\n\tshortcutPc: 'Ctrl+K',\n};\n\nexport interface HeaderSearchProps {\n\tonOpen?: () => void;\n\tisMac?: boolean;\n\tenableShortcut?: boolean;\n\tstrings?: Partial<HeaderSearchStrings>;\n\tclassName?: string;\n\ticonClassName?: string;\n\tshortcutSlot?: ReactNode;\n}\n\nexport interface HeaderUserMenuProps {\n\tuser: LayoutUser;\n\tshowEmail?: boolean;\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\talign?: 'start' | 'center' | 'end';\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\tstrings?: Partial<HeaderUserMenuStrings>;\n\ttriggerClassName?: string;\n\tcontentClassName?: string;\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nexport interface HeaderUserMenuStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultHeaderUserMenuStrings: HeaderUserMenuStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface HeaderSlots {\n\t/** Leading brand/logo region before breadcrumbs. */\n\tbrand?: ReactNode;\n\t/** Replaces the breadcrumb/sidebar-trigger region. */\n\tbreadcrumbs?: ReactNode;\n\t/** Leading content after breadcrumbs. Prefer this over `leftContent` for new code. */\n\tleft?: ReactNode;\n\t/** Center content, usually search or a scope switcher. */\n\tcenter?: ReactNode;\n\t/** Trailing content, usually notifications/user menu/actions. */\n\tright?: ReactNode;\n}\n\nexport interface HeaderProps extends LayoutNavigationAdapter {\n\tshowBreadcrumbs?: boolean;\n\tbreadcrumbs?: BreadcrumbItem[];\n\thomeBreadcrumb?: BreadcrumbItem | null;\n\tshowSidebarTrigger?: boolean;\n\tbrand?: ReactNode;\n\t/** @deprecated Prefer `slots.left`. */\n\tleftContent?: ReactNode;\n\t/** @deprecated Prefer `slots.center`. */\n\tcenterContent?: ReactNode;\n\t/** @deprecated Prefer `slots.right`. */\n\trightContent?: ReactNode;\n\tslots?: HeaderSlots;\n\tclassName?: string;\n\tcontentClassName?: string;\n\tleftClassName?: string;\n\tcenterClassName?: string;\n\trightClassName?: string;\n\tbreadcrumbsClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n","/** HeaderSearch — framework-neutral search trigger with optional Cmd/Ctrl+K. */\nimport { useMemo } from 'react';\nimport { Command, Search } from 'lucide-react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useCommandShortcut } from '../../hooks';\nimport {\n\tdefaultHeaderSearchStrings,\n\ttype HeaderSearchProps,\n} from '../header.types';\n\nfunction detectMac(): boolean {\n\tif (typeof navigator === 'undefined') return false;\n\tconst ua = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData;\n\tif (ua?.platform) return ua.platform === 'macOS';\n\treturn /Mac|iPhone|iPad/.test(navigator.platform);\n}\n\nexport function HeaderSearch({\n\tonOpen,\n\tisMac,\n\tenableShortcut = true,\n\tstrings: stringsProp,\n\tclassName,\n\ticonClassName,\n\tshortcutSlot,\n}: HeaderSearchProps) {\n\tconst strings = useStrings(defaultHeaderSearchStrings, stringsProp);\n\tconst isMacResolved = useMemo(() => isMac ?? detectMac(), [isMac]);\n\tuseCommandShortcut({ key: 'k', enabled: enableShortcut, onTrigger: onOpen });\n\n\tconst shortcutTitle = isMacResolved ? strings.shortcutMac : strings.shortcutPc;\n\tconst shortcut = shortcutSlot ?? (\n\t\t<kbd className=\"header-search--shortcut hidden h-5 shrink-0 items-center gap-1 rounded bg-muted px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex dark:bg-muted/20\">\n\t\t\t{isMacResolved ? (\n\t\t\t\t<>\n\t\t\t\t\t<Command className=\"size-3 dark:text-muted/60\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"dark:text-muted/60\">K</Text>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"dark:text-muted/60\">Ctrl+K</Text>\n\t\t\t)}\n\t\t</kbd>\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"secondary\"\n\t\t\tbuttonStyle=\"outline\"\n\t\t\tonClick={onOpen}\n\t\t\tclassName={cn(\n\t\t\t\t'header-search--component header-search--trigger h-8 w-full min-w-[205px] justify-start gap-2 rounded-lg border-input bg-background px-2.5 shadow-none hover:bg-accent/50',\n\t\t\t\t'dark:border-topbar-accent/80 dark:bg-topbar-accent/40',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\ttitle={shortcutTitle}\n\t\t>\n\t\t\t<Search className={cn('header-search--icon size-3.5 shrink-0 text-muted-foreground dark:text-muted/60', iconClassName)} aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"header-search--placeholder flex-1 text-left dark:text-muted/60\">\n\t\t\t\t{strings.placeholder}\n\t\t\t</Text>\n\t\t\t{shortcut}\n\t\t\t<span className=\"sr-only\">{strings.placeholder}</span>\n\t\t</Button>\n\t);\n}\n","/** HeaderUserMenu — avatar/name trigger with consumer-wired menu callbacks. */\nimport type { ReactElement } from 'react';\n\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultHeaderUserMenuStrings,\n\ttype HeaderUserMenuProps,\n} from '../header.types';\n\nfunction deriveInitials(name: string): string {\n\treturn name\n\t\t.split(' ')\n\t\t.map((part) => part[0])\n\t\t.filter(Boolean)\n\t\t.slice(0, 2)\n\t\t.join('')\n\t\t.toUpperCase();\n}\n\nexport function HeaderUserMenu({\n\tuser,\n\tshowEmail = true,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\ttriggerClassName,\n\tcontentClassName,\n\trenderTrigger,\n}: HeaderUserMenuProps) {\n\tconst strings = useStrings(defaultHeaderUserMenuStrings, stringsProp);\n\tconst initials = deriveInitials(user.name);\n\n\tconst defaultContent = (\n\t\t<>\n\t\t\t{!!onProfile && (\n\t\t\t\t<DropdownMenuItem onClick={onProfile}>\n\t\t\t\t\t<User className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.profile}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!onSettings && (\n\t\t\t\t<DropdownMenuItem onClick={onSettings}>\n\t\t\t\t\t<Settings className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.settings}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!(onProfile || onSettings) && !!onLogout && <DropdownMenuSeparator />}\n\t\t\t{!!onLogout && (\n\t\t\t\t<DropdownMenuItem onClick={onLogout}>\n\t\t\t\t\t<LogOut className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.logout}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst trigger = renderTrigger?.(user) ?? (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tclassName={cn(\n\t\t\t\t'header-user-menu--component header-user-menu--trigger group h-10 max-w-56 justify-start gap-2 rounded-lg px-1.5 pr-2 text-foreground shadow-none hover:bg-foreground/5 data-[state=open]:bg-foreground/5',\n\t\t\t\tshowEmail ? 'py-1.5' : 'py-1',\n\t\t\t\t'dark:text-background dark:hover:bg-topbar-accent/50',\n\t\t\t\ttriggerClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Avatar className=\"header-user-menu--avatar size-6 overflow-hidden rounded-full ring-1 ring-border/60\">\n\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t<AvatarFallback className=\"rounded-md bg-success text-[length:var(--text-xxs)] font-semibold text-background\">\n\t\t\t\t\t{initials}\n\t\t\t\t</AvatarFallback>\n\t\t\t</Avatar>\n\t\t\t<div className=\"header-user-menu--identity grid min-w-0 flex-1 text-left leading-none\">\n\t\t\t\t<Text size=\"xs\" weight=\"medium\" className=\"truncate\">{user.name}</Text>\n\t\t\t\t{!!showEmail && !!user.email && (\n\t\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"truncate\">{user.email}</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<ChevronsUpDown className=\"header-user-menu--chevron size-3 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t</Button>\n\t);\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger render={trigger as ReactElement} />\n\t\t\t<DropdownMenuContent\n\t\t\t\tclassName={cn('header-user-menu--content w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg p-3', contentClassName)}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t>\n\t\t\t\t{customContent ?? defaultContent}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/** HeaderNotifications — bell dropdown for consumer-supplied notifications. */\nimport type { ReactElement } from 'react';\n\nimport { Bell } from 'lucide-react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuLinkItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultHeaderNotificationsStrings,\n\ttype HeaderNotification,\n\ttype HeaderNotificationsProps,\n} from '../header.types';\n\nexport function HeaderNotifications({\n\tnotifications = [],\n\tunreadCount = 0,\n\tonNotificationClick,\n\tonMarkAllRead,\n\tonViewAll,\n\tviewAllHref,\n\trenderLink,\n\tLinkComponent,\n\talign = 'end',\n\tside = 'bottom',\n\tstrings: stringsProp,\n\tclassName,\n\tcontentClassName,\n\trenderNotification,\n}: HeaderNotificationsProps) {\n\tconst strings = useStrings(defaultHeaderNotificationsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst badgeText = unreadCount > 99 ? '99+' : String(unreadCount);\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={strings.triggerLabel}\n\t\t\t\t\t\tclassName={cn('header-notifications--component header-notifications--trigger relative', className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Bell className=\"size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t\t{unreadCount > 0 && (\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"error\"\n\t\t\t\t\t\t\t\tclassName=\"absolute -right-1 -top-1 flex h-4.5 min-w-4.5 items-center justify-center rounded-full px-1 py-0 text-xxs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{badgeText}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<DropdownMenuContent\n\t\t\t\tclassName={cn('header-notifications--content w-80 max-w-[calc(100vw-2rem)]', contentClassName)}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t>\n\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t<DropdownMenuLabel className=\"header-notifications--label flex items-center justify-between gap-3\">\n\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">{strings.heading}</Text>\n\t\t\t\t\t\t{unreadCount > 0 && !!onMarkAllRead && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tonClick={onMarkAllRead}\n\t\t\t\t\t\t\t\tclassName=\"h-auto px-1 py-0 text-xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.markAllRead}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuSeparator />\n\n\t\t\t\t\t{notifications.length === 0 ? (\n\t\t\t\t\t\t<div className=\"header-notifications--empty p-4 text-center\">\n\t\t\t\t\t\t\t<Text type=\"secondary\">{strings.empty}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"space-y-1 p-1\">\n\t\t\t\t\t\t\t{notifications.map((notification) => (\n\t\t\t\t\t\t\t\t<NotificationRow\n\t\t\t\t\t\t\t\t\tkey={notification.id}\n\t\t\t\t\t\t\t\t\tnotification={notification}\n\t\t\t\t\t\t\t\t\tonClick={onNotificationClick}\n\t\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\t\trenderNotification={renderNotification}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</DropdownMenuGroup>\n\n\t\t\t\t{!!(onViewAll || viewAllHref) && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t{viewAllHref ? (\n\t\t\t\t\t\t\t<DropdownMenuLinkItem\n\t\t\t\t\t\t\t\thref={viewAllHref}\n\t\t\t\t\t\t\t\trender={(props) =>\n\t\t\t\t\t\t\t\t\tresolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\t...props,\n\t\t\t\t\t\t\t\t\t\thref: viewAllHref,\n\t\t\t\t\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t\t\t\t\t}) as ReactElement\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.viewAll}\n\t\t\t\t\t\t\t</DropdownMenuLinkItem>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownMenuItem onClick={onViewAll}>{strings.viewAll}</DropdownMenuItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n\nfunction NotificationRow({\n\tnotification,\n\tonClick,\n\trenderLink,\n\trenderNotification,\n}: {\n\tnotification: HeaderNotification;\n\tonClick?: (n: HeaderNotification) => void;\n\trenderLink: NonNullable<HeaderNotificationsProps['renderLink']>;\n\trenderNotification?: HeaderNotificationsProps['renderNotification'];\n}) {\n\tif (renderNotification) return renderNotification(notification);\n\n\tconst content = (\n\t\t<div className=\"header-notifications--item-content min-w-0 space-y-1\">\n\t\t\t<Text weight=\"medium\">{notification.title}</Text>\n\t\t\t{!!notification.description && <Text size=\"xs\" type=\"secondary\">{notification.description}</Text>}\n\t\t\t{!!notification.time && <Text size=\"xxs\" type=\"secondary\">{notification.time}</Text>}\n\t\t</div>\n\t);\n\n\tconst className = cn(\n\t\t'header-notifications--item items-start rounded-md px-3 py-2',\n\t\t!notification.read && 'bg-muted/40',\n\t);\n\n\tif (notification.href) {\n\t\treturn (\n\t\t\t<DropdownMenuLinkItem\n\t\t\t\thref={notification.href}\n\t\t\t\tclassName={className}\n\t\t\t\tonClick={() => onClick?.(notification)}\n\t\t\t\trender={(props) =>\n\t\t\t\t\trenderLink({\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\thref: notification.href,\n\t\t\t\t\t\tchildren: props.children,\n\t\t\t\t\t}) as ReactElement\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuLinkItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DropdownMenuItem onClick={() => onClick?.(notification)} className={className}>\n\t\t\t{content}\n\t\t</DropdownMenuItem>\n\t);\n}\n\n/** @deprecated Re-exported for backwards compat — use `HeaderNotification`. */\nexport type Notification = HeaderNotification;\n"],"mappings":"+gBAYA,SAAgB,EAAkB,CACjC,cAAc,CAAC,EACf,iBAAiB,KACjB,qBAAqB,GACrB,cACA,aACA,gBACA,aAC0B,CAC1B,IAAM,EAAqB,EAAA,EAAsB,CAAE,aAAY,eAAc,CAAC,EACxE,EAAQ,EAAM,YAAgC,CACnD,IAAM,EAAwB,CAAC,EAG/B,OAFI,GAAgB,EAAI,KAAK,CAAc,EAC3C,EAAI,KAAK,GAAG,CAAW,EAChB,CACR,EAAG,CAAC,EAAgB,CAAW,CAAC,EAE1B,EAAa,EAAM,OAAS,EAElC,OACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,GAAG,oEAAqE,CAAS,WAAjG,CACE,CAAC,CAAC,IACF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mEACb,IAAe,EAAA,EAAA,KAAC,EAAA,EAAD,CAAgB,UAAU,uBAAyB,CAAA,CAC/D,CAAA,EAEL,CAAC,CAAC,IACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACE,CAAC,CAAC,IAAsB,EAAA,EAAA,KAAC,EAAA,EAAD,CAAW,YAAY,WAAW,UAAU,qBAAuB,CAAA,GAC5F,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6DACd,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,YAAa,EACb,KAAK,KACL,WAAY,EACZ,UAAW,EAAA,GACV,0BACA,2IACA,iFACA,mFACD,CACA,CAAA,CACG,CAAA,CACJ,CAAA,CAAA,CAEC,GAEP,CCnDA,SAAgB,EAAO,CACtB,kBAAkB,GAClB,cAAc,CAAC,EACf,iBAAiB,KACjB,qBAAqB,GACrB,QACA,cACA,gBACA,eACA,QACA,aACA,gBACA,YACA,mBACA,gBACA,kBACA,iBACA,wBACe,CACf,IAAM,EAAqB,EAAA,EAAsB,CAAE,aAAY,eAAc,CAAC,EAE9E,OACC,EAAA,EAAA,KAAC,SAAD,CACC,UAAW,EAAA,GACV,sKACA,iBACA,CACD,YAEA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,GAAG,kDAAmD,CAAgB,WAAtF,CACE,CAAC,EAAE,GAAO,OAAS,KACnB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wDACb,GAAO,OAAS,CACb,CAAA,EAGL,CAAC,CAAC,IAAoB,GAAO,cAC7B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2BACd,EAAA,EAAA,KAAC,EAAD,CACc,cACG,iBACI,qBACpB,WAAY,EACZ,UAAW,CACX,CAAA,CACG,CAAA,GAGL,CAAC,EAAE,GAAO,MAAQ,KAClB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,GAAG,4BAA6B,CAAa,WAC3D,GAAO,MAAQ,CACZ,CAAA,EAGL,CAAC,EAAE,GAAO,QAAU,KACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,GAAG,8DAA+D,CAAe,WAC/F,GAAO,QAAU,CACd,CAAA,EAGL,CAAC,EAAE,GAAO,OAAS,KACnB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,GAAG,2CAA4C,CAAc,WAC3E,GAAO,OAAS,CACb,CAAA,CAEF,GACE,CAAA,CAEV,CC9BA,IAAa,EAAgE,CAC5E,aAAc,gBACd,QAAS,gBACT,YAAa,mBACb,MAAO,uBACP,QAAS,wBACV,EAyBa,EAAkD,CAC9D,YAAa,YACb,YAAa,KACb,WAAY,QACb,EAiCa,EAAsD,CAClE,QAAS,UACT,SAAU,WACV,OAAQ,SACT,ECtGA,SAAS,GAAqB,CAC7B,GAAI,OAAO,UAAc,IAAa,MAAO,GAC7C,IAAM,EAAM,UAAoE,cAEhF,OADI,GAAI,SAAiB,EAAG,WAAa,QAClC,kBAAkB,KAAK,UAAU,QAAQ,CACjD,CAEA,SAAgB,EAAa,CAC5B,SACA,QACA,iBAAiB,GACjB,QAAS,EACT,YACA,gBACA,gBACqB,CACrB,IAAM,EAAU,EAAA,WAAW,EAA4B,CAAW,EAC5D,GAAA,EAAA,EAAA,aAA8B,GAAS,EAAU,EAAG,CAAC,CAAK,CAAC,EACjE,EAAA,EAAmB,CAAE,IAAK,IAAK,QAAS,EAAgB,UAAW,CAAO,CAAC,EAE3E,IAAM,EAAgB,EAAgB,EAAQ,YAAc,EAAQ,WAC9D,EAAW,IAChB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2KACb,GACA,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACC,EAAA,EAAA,KAAC,EAAA,QAAD,CAAS,UAAU,4BAA4B,cAAY,MAAQ,CAAA,GACnE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,UAAU,8BAAqB,GAAO,CAAA,CAChE,CAAA,CAAA,GAEF,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,UAAU,8BAAqB,QAAY,CAAA,CAEnE,CAAA,EAGN,OACC,EAAA,EAAA,MAAC,EAAA,EAAD,CACC,KAAK,SACL,QAAQ,YACR,YAAY,UACZ,QAAS,EACT,UAAW,EAAA,GACV,2KACA,wDACA,CACD,EACA,MAAO,WAVR,EAYC,EAAA,EAAA,KAAC,EAAA,OAAD,CAAQ,UAAW,EAAA,GAAG,iFAAkF,CAAa,EAAG,cAAY,MAAQ,CAAA,GAC5I,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,KAAK,YAAY,UAAU,0EACpD,EAAQ,WACJ,CAAA,EACL,GACD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mBAAW,EAAQ,WAAkB,CAAA,CAC9C,GAEV,CC/CA,SAAS,EAAe,EAAsB,CAC7C,OAAO,EACL,MAAM,GAAG,EACT,IAAK,GAAS,EAAK,EAAE,EACrB,OAAO,OAAO,EACd,MAAM,EAAG,CAAC,EACV,KAAK,EAAE,EACP,YAAY,CACf,CAEA,SAAgB,EAAe,CAC9B,OACA,YAAY,GACZ,gBACA,YACA,aACA,WACA,QAAQ,MACR,OAAO,SACP,QAAS,EACT,mBACA,mBACA,iBACuB,CACvB,IAAM,EAAU,EAAA,WAAW,EAA8B,CAAW,EAC9D,EAAW,EAAe,EAAK,IAAI,EAEnC,GACL,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACE,CAAC,CAAC,IACF,EAAA,EAAA,MAAC,EAAA,EAAD,CAAkB,QAAS,WAA3B,EACC,EAAA,EAAA,KAAC,EAAA,KAAD,CAAM,UAAU,cAAc,cAAY,MAAQ,CAAA,GAClD,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,UAAU,wBAAgB,EAAQ,OAAc,CAAA,CAC1D,IAElB,CAAC,CAAC,IACF,EAAA,EAAA,MAAC,EAAA,EAAD,CAAkB,QAAS,WAA3B,EACC,EAAA,EAAA,KAAC,EAAA,SAAD,CAAU,UAAU,cAAc,cAAY,MAAQ,CAAA,GACtD,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,UAAU,wBAAgB,EAAQ,QAAe,CAAA,CAC3D,IAElB,CAAC,EAAE,GAAa,IAAe,CAAC,CAAC,IAAY,EAAA,EAAA,KAAC,EAAA,EAAD,CAAwB,CAAA,EACrE,CAAC,CAAC,IACF,EAAA,EAAA,MAAC,EAAA,EAAD,CAAkB,QAAS,WAA3B,EACC,EAAA,EAAA,KAAC,EAAA,OAAD,CAAQ,UAAU,cAAc,cAAY,MAAQ,CAAA,GACpD,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,UAAU,wBAAgB,EAAQ,MAAa,CAAA,CACzD,GAElB,CAAA,CAAA,EA+BH,OACC,EAAA,EAAA,MAAC,EAAA,EAAD,CAAA,SAAA,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CAAqB,OA9BP,IAAgB,CAAI,IACnC,EAAA,EAAA,MAAC,EAAA,EAAD,CACC,KAAK,SACL,QAAQ,YACR,YAAY,QACZ,UAAW,EAAA,GACV,2MACA,EAAY,SAAW,OACvB,sDACA,CACD,WATD,EAWC,EAAA,EAAA,MAAC,EAAA,EAAD,CAAQ,UAAU,8FAAlB,CACE,CAAC,CAAC,EAAK,SAAU,EAAA,EAAA,KAAC,EAAA,EAAD,CAAa,IAAK,EAAK,OAAQ,IAAK,EAAK,IAAO,CAAA,GAClE,EAAA,EAAA,KAAC,EAAA,EAAD,CAAgB,UAAU,6FACxB,CACc,CAAA,CACT,KACR,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iFAAf,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,KAAK,KAAK,OAAO,SAAS,UAAU,oBAAY,EAAK,IAAW,CAAA,EACrE,CAAC,CAAC,GAAa,CAAC,CAAC,EAAK,QACtB,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,KAAK,MAAM,KAAK,YAAY,UAAU,oBAAY,EAAK,KAAY,CAAA,CAEtE,KACL,EAAA,EAAA,KAAC,EAAA,eAAD,CAAgB,UAAU,kEAAkE,cAAY,MAAQ,CAAA,CACzG,GAKgD,CAAA,GACvD,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,UAAW,EAAA,GAAG,4FAA6F,CAAgB,EACpH,QACD,gBAEL,GAAiB,CACE,CAAA,CACR,CAAA,CAAA,CAEhB,CCtFA,SAAgB,EAAoB,CACnC,gBAAgB,CAAC,EACjB,cAAc,EACd,sBACA,gBACA,YACA,cACA,aACA,gBACA,QAAQ,MACR,OAAO,SACP,QAAS,EACT,YACA,mBACA,sBAC4B,CAC5B,IAAM,EAAU,EAAA,WAAW,EAAmC,CAAW,EACnE,EAAqB,EAAA,EAAsB,CAAE,aAAY,eAAc,CAAC,EACxE,EAAY,EAAc,GAAK,MAAQ,OAAO,CAAW,EAE/D,OACC,EAAA,EAAA,MAAC,EAAA,EAAD,CAAA,SAAA,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,QACC,EAAA,EAAA,MAAC,EAAA,EAAD,CACC,QAAQ,YACR,YAAY,QACZ,KAAK,UACL,aAAY,EAAQ,aACpB,UAAW,EAAA,GAAG,yEAA0E,CAAS,WALlG,EAOC,EAAA,EAAA,KAAC,EAAA,KAAD,CAAM,UAAU,SAAS,cAAY,MAAQ,CAAA,EAC5C,EAAc,IACd,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,QAAQ,QACR,UAAU,qHAET,CACK,CAAA,CAED,GAET,CAAA,GACD,EAAA,EAAA,MAAC,EAAA,EAAD,CACC,UAAW,EAAA,GAAG,8DAA+D,CAAgB,EACtF,QACD,gBAHP,EAKC,EAAA,EAAA,MAAC,EAAA,EAAD,CAAA,SAAA,EACC,EAAA,EAAA,MAAC,EAAA,EAAD,CAAmB,UAAU,+EAA7B,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,OAAO,oBAAY,EAAQ,OAAc,CAAA,EACzD,EAAc,GAAK,CAAC,CAAC,IACrB,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,KAAK,SACL,QAAQ,YACR,YAAY,QACZ,KAAK,KACL,QAAS,EACT,UAAU,oCAET,EAAQ,WACF,CAAA,CAES,KACnB,EAAA,EAAA,KAAC,EAAA,EAAD,CAAwB,CAAA,EAEvB,EAAc,SAAW,GACzB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wDACd,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,KAAK,qBAAa,EAAQ,KAAY,CAAA,CACxC,CAAA,GAEL,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,yBACb,EAAc,IAAK,IACnB,EAAA,EAAA,KAAC,EAAD,CAEe,eACd,QAAS,EACT,WAAY,EACQ,oBACpB,EALK,EAAa,EAKlB,CACD,CACG,CAAA,CAEY,CAAA,CAAA,EAElB,CAAC,EAAE,GAAa,KAChB,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CAAwB,CAAA,EACvB,GACA,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,KAAM,EACN,OAAS,GACR,EAAmB,CAClB,GAAG,EACH,KAAM,EACN,SAAU,EAAM,QACjB,CAAC,WAGD,EAAQ,OACY,CAAA,GAEtB,EAAA,EAAA,KAAC,EAAA,EAAD,CAAkB,QAAS,WAAY,EAAQ,OAA0B,CAAA,CAEzE,CAAA,CAAA,CAEiB,GACR,CAAA,CAAA,CAEhB,CAEA,SAAS,EAAgB,CACxB,eACA,UACA,aACA,sBAME,CACF,GAAI,EAAoB,OAAO,EAAmB,CAAY,EAE9D,IAAM,GACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gEAAf,EACC,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,OAAO,kBAAU,EAAa,KAAY,CAAA,EAC/C,CAAC,CAAC,EAAa,cAAe,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,KAAK,KAAK,KAAK,qBAAa,EAAa,WAAkB,CAAA,EAC/F,CAAC,CAAC,EAAa,OAAQ,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,KAAK,MAAM,KAAK,qBAAa,EAAa,IAAW,CAAA,CAC/E,IAGA,EAAY,EAAA,GACjB,8DACA,CAAC,EAAa,MAAQ,aACvB,EAqBA,OAnBI,EAAa,MAEf,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,KAAM,EAAa,KACR,YACX,YAAe,IAAU,CAAY,EACrC,OAAS,GACR,EAAW,CACV,GAAG,EACH,KAAM,EAAa,KACnB,SAAU,EAAM,QACjB,CAAC,WAGD,CACoB,CAAA,GAKvB,EAAA,EAAA,KAAC,EAAA,EAAD,CAAkB,YAAe,IAAU,CAAY,EAAc,qBACnE,CACgB,CAAA,CAEpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-BML5ZZ5s.js","names":[],"sources":["../../src/components/layout/sidebar/sidebar.context.tsx","../../src/components/layout/sidebar/sidebar.settings.ts","../../src/components/layout/sidebar/sidebar.tsx","../../src/components/layout/sidebar/components/sidebar-grouped-navigation.tsx","../../src/components/layout/sidebar/components/sidebar-logo.tsx","../../src/components/layout/sidebar/components/sidebar-navigation-footer.tsx","../../src/components/layout/sidebar/sidebar.types.ts","../../src/components/layout/sidebar/components/sidebar-workspace-dropdown.tsx","../../src/components/layout/sidebar/app-sidebar.tsx","../../src/components/layout/sidebar/components/sidebar-navigation.tsx","../../src/components/layout/sidebar/components/sidebar-navigation-user.tsx"],"sourcesContent":[" \n/** SidebarProvider — layout-scoped wrapper around the shadcn sidebar context. */\nimport * as React from 'react';\n\nimport { TooltipProvider } from '@/components/base/display/tooltip';\nimport {\n\tSidebarProvider as PrimitiveSidebarProvider,\n\tuseSidebar as primitiveUseSidebar,\n} from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nexport const useSidebar = primitiveUseSidebar;\nexport type SidebarContext = ReturnType<typeof primitiveUseSidebar>;\n\nexport type SidebarProviderProps = React.ComponentProps<'div'> & {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n};\n\nexport function SidebarProvider({\n\tdefaultOpen = true,\n\topen,\n\tonOpenChange,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}: SidebarProviderProps) {\n\treturn (\n\t\t<TooltipProvider delayDuration={0}>\n\t\t\t<PrimitiveSidebarProvider\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tstyle={style}\n\t\t\t\tclassName={cn('min-h-svh', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</PrimitiveSidebarProvider>\n\t\t</TooltipProvider>\n\t);\n}\n","import { cva } from \"class-variance-authority\"\n\nexport const SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nexport const SIDEBAR_WIDTH = \"16rem\"\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\"\nexport const SIDEBAR_WIDTH_ICON = \"3rem\"\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\nexport const sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n"," \n/** Sidebar — responsive shell around the shadcn sidebar primitive pieces. */\nimport * as React from 'react';\n\nimport {\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n} from '@/components/base/sheet';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useSidebar } from './sidebar.context';\nimport { SIDEBAR_WIDTH_MOBILE } from './sidebar.settings';\n\nexport interface SidebarStrings {\n\tmobileTitle: string;\n\tmobileDescription: string;\n}\n\nexport const defaultSidebarStrings: SidebarStrings = {\n\tmobileTitle: 'Sidebar',\n\tmobileDescription: 'Displays the mobile sidebar.',\n};\n\nexport type SidebarProps = React.ComponentProps<'div'> & {\n\tside?: 'left' | 'right';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\tstrings?: Partial<SidebarStrings>;\n\tsurfaceClassName?: string;\n};\n\nexport function Sidebar({\n\tside = 'left',\n\tvariant = 'sidebar',\n\tcollapsible = 'offcanvas',\n\tclassName,\n\tsurfaceClassName,\n\tchildren,\n\tstrings: stringsProp,\n\t...props\n}: SidebarProps) {\n\tconst { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\tconst strings = useStrings(defaultSidebarStrings, stringsProp);\n\n\tif (collapsible === 'none') {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\tclassName={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', surfaceClassName, className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n\t\t\t\t<SheetContent\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\t\tdata-mobile=\"true\"\n\t\t\t\t\tclassName={cn('w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden', surfaceClassName)}\n\t\t\t\t\tstyle={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n\t\t\t\t\tside={side}\n\t\t\t\t>\n\t\t\t\t\t<SheetHeader className=\"sr-only\">\n\t\t\t\t\t\t<SheetTitle>{strings.mobileTitle}</SheetTitle>\n\t\t\t\t\t\t<SheetDescription>{strings.mobileDescription}</SheetDescription>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">{children}</div>\n\t\t\t\t</SheetContent>\n\t\t\t</Sheet>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group peer sticky top-0 hidden h-full text-sidebar-foreground md:block\"\n\t\t\tdata-state={state}\n\t\t\tdata-collapsible={state === 'collapsed' ? collapsible : ''}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t\tdata-slot=\"sidebar\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inset-y-0 z-10 hidden h-full w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n\t\t\t\t\tside === 'left'\n\t\t\t\t\t\t? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n\t\t\t\t\t\t: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'px-2 py-3 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'sidebar flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm',\n\t\t\t\t\t\tsurfaceClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","/** SidebarGroupedNavigation — grouped tree navigation with composable rows. */\nimport * as React from 'react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n\tSidebarMenuSub,\n\tSidebarMenuSubButton,\n\tSidebarMenuSubItem,\n\tSidebarSeparator,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarGroupedNavigationProps, SidebarNavItem, SidebarRenderItemContext } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nfunction NavLabel({ item }: { item: SidebarNavItem }) {\n\tconst label = getNavLabel(item);\n\treturn (\n\t\t<Text tag=\"span\" className=\"truncate text-inherit\">\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport function SidebarGroupedNavigation({\n\tnavigationByGroups,\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\temptySlot,\n\trenderItem,\n\tclassName,\n}: SidebarGroupedNavigationProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst isActive = (href?: string): boolean => !!href && isPathMatch(currentUrl, toPath(href));\n\n\tconst bestMatchIndex = (siblings: SidebarNavItem[]): number => {\n\t\tlet bestIdx = -1;\n\t\tlet bestLen = -1;\n\t\tfor (let i = 0; i < siblings.length; i += 1) {\n\t\t\tconst sibling = siblings[i];\n\t\t\tconst path = sibling?.href ? toPath(sibling.href) : '';\n\t\t\tif (path && isPathMatch(currentUrl, path) && path.length > bestLen) {\n\t\t\t\tbestLen = path.length;\n\t\t\t\tbestIdx = i;\n\t\t\t}\n\t\t}\n\t\treturn bestIdx;\n\t};\n\n\tconst hasActiveChild = (children?: SidebarNavItem[]): boolean =>\n\t\t!!children?.some((child) => isActive(child.href) || hasActiveChild(child.children));\n\n\tconst renderDefaultItem = (item: SidebarNavItem, depth = 0, index = 0): React.ReactNode => {\n\t\tconst hasChildren = !!item.children?.length;\n\t\tconst itemActive = isActive(item.href);\n\t\tconst childActive = hasChildren ? hasActiveChild(item.children) : false;\n\t\tconst expanded = itemActive || childActive;\n\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\tconst label = getNavLabel(item);\n\t\tconst context: SidebarRenderItemContext = {\n\t\t\tdepth,\n\t\t\tactive: itemActive,\n\t\t\texpanded,\n\t\t\tbadge,\n\t\t\trenderLink: resolvedRenderLink,\n\t\t};\n\n\t\tif (renderItem) {\n\t\t\treturn <React.Fragment key={getNavKey(item, index)}>{renderItem(item, context)}</React.Fragment>;\n\t\t}\n\n\t\tif (hasChildren) {\n\t\t\tconst activeChildIdx = bestMatchIndex(item.children ?? []);\n\t\t\tconst content = (\n\t\t\t\t<>\n\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t<NavLabel item={item} />\n\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\tisActive={expanded}\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, expanded) as React.ReactElement\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttooltip={{ children: label }}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\t\t\titemActive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t!itemActive && childActive && 'bg-sidebar-accent/45 text-sidebar-foreground',\n\t\t\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</SidebarMenuButton>\n\n\t\t\t\t\t{!!expanded && (\n\t\t\t\t\t\t<SidebarMenuSub className=\"gap-0.5\">\n\t\t\t\t\t\t\t{item.children?.map((child, childIndex) => {\n\t\t\t\t\t\t\t\tconst childActiveNow = childIndex === activeChildIdx || isActive(child.href);\n\t\t\t\t\t\t\t\tconst childBadge = resolveNavBadge(child.handle, child.badge, liveBadges);\n\t\t\t\t\t\t\t\tconst childLabel = getNavLabel(child);\n\t\t\t\t\t\t\t\tconst childContent = (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{typeof childLabel === 'string' || typeof childLabel === 'number' ? (\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t{childLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : childLabel}\n\t\t\t\t\t\t\t\t\t\t{!!childBadge && <NavBadge value={childBadge} size=\"small\" />}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<SidebarMenuSubItem key={getNavKey(child, childIndex)}>\n\t\t\t\t\t\t\t\t\t\t<SidebarMenuSubButton\n\t\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t\tchild.href && !child.disabled\n\t\t\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, child, childContent, undefined, childActiveNow) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn('w-full', childActiveNow && 'font-semibold text-sidebar-foreground')}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{childContent}\n\t\t\t\t\t\t\t\t\t\t</SidebarMenuSubButton>\n\t\t\t\t\t\t\t\t\t</SidebarMenuSubItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</SidebarMenuSub>\n\t\t\t\t\t)}\n\t\t\t</SidebarMenuItem>\n\t\t);\n\t}\n\n\tconst content = (\n\t\t<>\n\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t<NavLabel item={item} />\n\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t<SidebarMenuButton\n\t\t\t\tisActive={itemActive}\n\t\t\t\trender={\n\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, itemActive) as React.ReactElement\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\ttooltip={{ children: label }}\n\t\t\t\tdisabled={item.disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\titemActive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</SidebarMenuButton>\n\t\t</SidebarMenuItem>\n\t);\n\t};\n\n\tconst groupEntries = Object.entries(navigationByGroups).filter(([, items]) => items.length > 0);\n\tif (groupEntries.length === 0) return emptySlot ?? null;\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t{groupEntries.map(([groupName, items], groupIndex) => (\n\t\t\t\t<React.Fragment key={groupName}>\n\t\t\t\t\t<SidebarGroup className=\"px-2 py-0\">\n\t\t\t\t\t\t{!groupName.startsWith('_') && <SidebarGroupLabel>{groupName}</SidebarGroupLabel>}\n\t\t\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t\t\t{items.map((item, index) => renderDefaultItem(item, 0, index))}\n\t\t\t\t\t\t</SidebarMenu>\n\t\t\t\t\t</SidebarGroup>\n\t\t\t\t\t{groupIndex < groupEntries.length - 1 && (\n\t\t\t\t\t\t<SidebarSeparator className=\"!mx-auto !my-1.5 !w-11/12 overflow-hidden px-4\" />\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","/** SidebarLogo — hides its logo content when the sidebar is icon-collapsed. */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { useSidebar } from '../sidebar.context';\n\nexport interface SidebarLogoProps {\n\tlogo: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tclassName?: string;\n}\n\nexport function SidebarLogo({ logo, collapsedLogo = null, className }: SidebarLogoProps) {\n\tconst { state } = useSidebar();\n\tconst isCollapsed = state === 'collapsed';\n\tconst content = isCollapsed ? collapsedLogo : logo;\n\tif (!content) return null;\n\treturn <div className={cn('min-w-0', className)}>{content}</div>;\n}\n","/** SidebarNavigationFooter — secondary footer navigation using renderLink. */\nimport { ExternalLink } from 'lucide-react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarNavigationFooterProps } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nexport function SidebarNavigationFooter({\n\titems,\n\tlabel,\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n}: SidebarNavigationFooterProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<SidebarGroup className={cn('group-data-[collapsible=icon]:p-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarGroupContent>\n\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst active = !!item.href && isPathMatch(currentUrl, toPath(item.href));\n\t\t\t\t\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\t\t\t\t\tconst labelNode = getNavLabel(item);\n\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t\t{typeof labelNode === 'string' || typeof labelNode === 'number' ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" className=\"truncate text-inherit\">{labelNode}</Text>\n\t\t\t\t\t\t\t\t) : labelNode}\n\t\t\t\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t\t\t\t\t{!!item.external && <ExternalLink className=\"ml-auto size-3 opacity-50\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\t\tisActive={active}\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-7 font-medium text-sidebar-foreground/70 hover:text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\t\tactive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</SidebarMenu>\n\t\t\t</SidebarGroupContent>\n\t\t</SidebarGroup>\n\t);\n}\n","/**\n * Sidebar types — framework-neutral navigation tree, render contexts, slots,\n * strings, and composition props.\n */\nimport type { ComponentType, ReactNode } from 'react';\n\nimport type {\n\tLayoutIconSource,\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n\tLinkComponent,\n} from '../layout.types';\n\nexport interface SidebarNavItem {\n\t/** New preferred label. */\n\tlabel?: ReactNode;\n\t/** Back-compat label used by older call sites. */\n\ttitle?: ReactNode;\n\thref?: string;\n\thandle?: string;\n\ticon?: LayoutIconSource;\n\tdisabled?: boolean;\n\tbadge?: string | number;\n\tchildren?: SidebarNavItem[];\n\tgroup?: string;\n\texternal?: boolean;\n}\n\nexport type SidebarFlatNavItem = Omit<SidebarNavItem, 'children' | 'group'>;\n\nexport interface SidebarRenderItemContext {\n\tdepth: number;\n\tactive: boolean;\n\texpanded: boolean;\n\tbadge?: string | number;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface SidebarSlots {\n\theader?: ReactNode;\n\tbeforeNavigation?: ReactNode;\n\tafterNavigation?: ReactNode;\n\tfooter?: ReactNode;\n\tempty?: ReactNode;\n\tloading?: ReactNode;\n}\n\nexport interface AppSidebarProps extends LayoutNavigationAdapter {\n\tnavigationGroups?: Record<string, SidebarNavItem[]>;\n\tfooterNavItems?: SidebarFlatNavItem[];\n\tfooterLabel?: ReactNode;\n\tlogo?: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tworkspaceLinks?: WorkspaceLink[];\n\tworkspaceStrings?: Partial<SidebarWorkspaceDropdownStrings>;\n\tworkspaceContentClassName?: string;\n\theaderClassName?: string;\n\tlogoClassName?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tcurrentUrl?: string;\n\tliveBadges?: Record<string, string | number>;\n\tloading?: boolean;\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tside?: 'left' | 'right';\n\tclassName?: string;\n\tsurfaceClassName?: string;\n\tcontentClassName?: string;\n\tslots?: SidebarSlots;\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface SidebarGroupedNavigationProps extends LayoutNavigationAdapter {\n\tnavigationByGroups: Record<string, SidebarNavItem[]>;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\temptySlot?: ReactNode;\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface SidebarFlatNavigationProps extends LayoutNavigationAdapter {\n\titems: SidebarFlatNavItem[];\n\tlabel?: ReactNode;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\trenderItem?: (item: SidebarFlatNavItem, context: SidebarRenderItemContext) => ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface WorkspaceLink {\n\tlabel: ReactNode;\n\turl: string;\n\ticon?: ComponentType<{ className?: string }>;\n\texternal?: boolean;\n}\n\nexport interface SidebarWorkspaceDropdownStrings {\n\tlabel: string;\n\tselect: string;\n}\n\nexport const defaultSidebarWorkspaceDropdownStrings: SidebarWorkspaceDropdownStrings = {\n\tlabel: 'Workspace',\n\tselect: 'Select workspace',\n};\n\nexport interface SidebarWorkspaceDropdownProps extends LayoutNavigationAdapter {\n\tlogo: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tworkspaceLinks: WorkspaceLink[];\n\tstrings?: Partial<SidebarWorkspaceDropdownStrings>;\n\tcontentClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type SidebarFooterNavigationItem = SidebarFlatNavItem;\n\nexport interface SidebarNavigationFooterProps extends LayoutNavigationAdapter {\n\titems: SidebarFooterNavigationItem[];\n\tlabel?: ReactNode;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n","/** SidebarWorkspaceDropdown — workspace selector using consumer link rendering. */\nimport { ChevronsUpDown, ExternalLink } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultSidebarWorkspaceDropdownStrings,\n\ttype SidebarWorkspaceDropdownProps,\n} from '../sidebar.types';\nimport { useSidebar } from '../sidebar.context';\n\nexport function SidebarWorkspaceDropdown({\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tcontentClassName,\n}: SidebarWorkspaceDropdownProps) {\n\tconst strings = useStrings(defaultSidebarWorkspaceDropdownStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst { state } = useSidebar();\n\tconst isCollapsed = state === 'collapsed';\n\tconst visibleLogo = isCollapsed ? (collapsedLogo ?? logo) : logo;\n\n\treturn (\n\t\t<SidebarMenu>\n\t\t\t<SidebarMenuItem>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\tclassName=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t{visibleLogo}\n\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t{strings.select}\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{!isCollapsed && <ChevronsUpDown className=\"ml-auto size-4 shrink-0\" aria-hidden=\"true\" />}\n\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t<DropdownMenuContent className={cn('min-w-56', contentClassName)} align=\"start\" side=\"right\" sideOffset={8}>\n\t\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t\t<DropdownMenuLabel>\n\t\t\t\t\t\t\t\t<Text weight=\"semibold\">{strings.label}</Text>\n\t\t\t\t\t\t\t</DropdownMenuLabel>\n\t\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t\t{workspaceLinks.map((link) => {\n\t\t\t\t\t\t\t\tconst Icon = link.icon ?? ExternalLink;\n\t\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{link.label}</Text>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\tkey={link.url}\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\tresolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\t\t\thref: link.url,\n\t\t\t\t\t\t\t\t\t\t\t\texternal: link.external ?? true,\n\t\t\t\t\t\t\t\t\t\t\t\tchildren: null,\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'flex items-center gap-2',\n\t\t\t\t\t\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n","/**\n * AppSidebar — opinionated assembly of logo/header, grouped navigation, and\n * footer links. Consumers still own framework routing through `renderLink`.\n */\nimport * as React from 'react';\n\nimport { ScrollArea } from '@/components/base/display/scroll-area';\nimport { Skeleton } from '@/components/base/display/skeleton';\nimport {\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarHeader,\n\tSidebarMenu,\n\tSidebarMenuItem,\n\tSidebarSeparator,\n} from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nimport { SidebarGroupedNavigation } from './components/sidebar-grouped-navigation';\nimport { SidebarLogo } from './components/sidebar-logo';\nimport { SidebarNavigationFooter } from './components/sidebar-navigation-footer';\nimport { SidebarWorkspaceDropdown } from './components/sidebar-workspace-dropdown';\nimport { Sidebar } from './sidebar';\nimport type { AppSidebarProps } from './sidebar.types';\n\nexport function AppSidebar({\n\tnavigationGroups,\n\tfooterNavItems = [],\n\tfooterLabel,\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks = [],\n\tworkspaceStrings,\n\tworkspaceContentClassName,\n\theaderClassName,\n\tlogoClassName,\n\ticonMap,\n\tcurrentUrl = '/',\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\tloading,\n\tcollapsible = 'icon',\n\tvariant = 'sidebar',\n\tside = 'left',\n\tclassName,\n\tsurfaceClassName,\n\tcontentClassName,\n\tslots,\n\trenderItem,\n}: AppSidebarProps) {\n\tconst hasFooter = footerNavItems.length > 0 || !!slots?.footer;\n\tconst isLoading = loading || !navigationGroups;\n\tconst hasWorkspaceLinks = workspaceLinks.length > 0;\n\n\treturn (\n\t\t<Sidebar collapsible={collapsible} variant={variant} side={side} className={cn('h-svh', className)} surfaceClassName={surfaceClassName}>\n\t\t\t{slots?.header ?? (!!logo && (\n\t\t\t\t<SidebarHeader className={headerClassName}>\n\t\t\t\t\t{hasWorkspaceLinks ? (\n\t\t\t\t\t\t<SidebarWorkspaceDropdown\n\t\t\t\t\t\t\tlogo={logo}\n\t\t\t\t\t\t\tcollapsedLogo={collapsedLogo}\n\t\t\t\t\t\t\tworkspaceLinks={workspaceLinks}\n\t\t\t\t\t\t\tstrings={workspaceStrings}\n\t\t\t\t\t\t\tcontentClassName={workspaceContentClassName}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SidebarLogo logo={logo} collapsedLogo={collapsedLogo} className={logoClassName} />\n\t\t\t\t\t)}\n\t\t\t\t</SidebarHeader>\n\t\t\t))}\n\n\t\t\t<SidebarContent className={contentClassName}>\n\t\t\t\t<ScrollArea className=\"h-full pr-1.5 pt-4\">\n\t\t\t\t\t{slots?.beforeNavigation}\n\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\tslots?.loading ?? <AppSidebarSkeleton />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SidebarGroupedNavigation\n\t\t\t\t\t\t\tnavigationByGroups={navigationGroups}\n\t\t\t\t\t\t\tcurrentUrl={currentUrl}\n\t\t\t\t\t\t\ticonMap={iconMap}\n\t\t\t\t\t\t\tliveBadges={liveBadges}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\temptySlot={slots?.empty}\n\t\t\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{slots?.afterNavigation}\n\t\t\t\t</ScrollArea>\n\t\t\t</SidebarContent>\n\n\t\t\t{hasFooter && (\n\t\t\t\t<SidebarFooter>\n\t\t\t\t\t{slots?.footer ?? (\n\t\t\t\t\t\t<SidebarNavigationFooter\n\t\t\t\t\t\t\titems={footerNavItems}\n\t\t\t\t\t\t\tlabel={footerLabel}\n\t\t\t\t\t\t\tcurrentUrl={currentUrl}\n\t\t\t\t\t\t\ticonMap={iconMap}\n\t\t\t\t\t\t\tliveBadges={liveBadges}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</SidebarFooter>\n\t\t\t)}\n\t\t</Sidebar>\n\t);\n}\n\nfunction AppSidebarSkeleton() {\n\tconst groups = [9, 3, 4, 2, 1];\n\n\treturn (\n\t\t<>\n\t\t\t{groups.map((count, groupIdx) => (\n\t\t\t\t<React.Fragment key={groupIdx}>\n\t\t\t\t\t<SidebarGroup className=\"px-2 py-0\">\n\t\t\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t\t\t\t\t<SidebarMenuItem key={i}>\n\t\t\t\t\t\t\t\t\t<div className=\"flex h-8 items-center gap-2 px-2\">\n\t\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-4 shrink-0 rounded\" />\n\t\t\t\t\t\t\t\t\t\t<Skeleton\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 rounded\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: `${60 + ((groupIdx * 7 + i * 13) % 40)}px` }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</SidebarMenu>\n\t\t\t\t\t</SidebarGroup>\n\t\t\t\t\t{groupIdx < groups.length - 1 && (\n\t\t\t\t\t\t<SidebarSeparator className=\"!mx-auto !my-1 !w-11/12 overflow-hidden px-4\" />\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\t\t</>\n\t);\n}\n","/** SidebarNavigation — flat, framework-neutral sidebar nav list. */\nimport * as React from 'react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarFlatNavigationProps, SidebarFlatNavItem, SidebarRenderItemContext } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nexport { DynamicIcon } from '../sidebar.utils';\nexport { DynamicIcon as Icon } from '../sidebar.utils';\n\nfunction NavLabel({ item }: { item: SidebarFlatNavItem }) {\n\tconst label = getNavLabel(item);\n\treturn (\n\t\t<Text tag=\"span\" className=\"truncate text-inherit\">\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport function SidebarNavigation({\n\titems,\n\tlabel = 'Platform',\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\trenderItem,\n\tclassName,\n}: SidebarFlatNavigationProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<SidebarGroup className={cn('px-2 py-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst active = !!item.href && isPathMatch(currentUrl, toPath(item.href));\n\t\t\t\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\t\t\t\tconst context: SidebarRenderItemContext = {\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tactive,\n\t\t\t\t\t\texpanded: false,\n\t\t\t\t\t\tbadge,\n\t\t\t\t\t\trenderLink: resolvedRenderLink,\n\t\t\t\t\t};\n\t\t\t\t\tconst labelNode = getNavLabel(item);\n\n\t\t\t\t\tif (renderItem) {\n\t\t\t\t\t\treturn <React.Fragment key={getNavKey(item, index)}>{renderItem(item, context)}</React.Fragment>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t<NavLabel item={item} />\n\t\t\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tisActive={active}\n\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\t\t\t\t\tactive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</SidebarMenu>\n\t\t</SidebarGroup>\n\t);\n}\n\n/** @deprecated Use `SidebarFlatNavItem` from `sidebar.types`. */\nexport type SidebarNavigationItem = SidebarFlatNavItem;\n"," \n/** SidebarNavigationUser — user profile dropdown for sidebar footer. */\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { useStrings } from '@/lib/strings';\n\nimport type { LayoutUser } from '../../layout.types';\nimport { useSidebar } from '../sidebar.context';\n\nexport interface SidebarNavigationUserStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultSidebarNavigationUserStrings: SidebarNavigationUserStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface SidebarNavigationUserProps {\n\tuser: LayoutUser;\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\tstrings?: Partial<SidebarNavigationUserStrings>;\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nfunction deriveInitials(name: string): string {\n\treturn name\n\t\t.split(' ')\n\t\t.map((part) => part[0])\n\t\t.filter(Boolean)\n\t\t.slice(0, 2)\n\t\t.join('')\n\t\t.toUpperCase();\n}\n\nexport function SidebarNavigationUser({\n\tuser,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\tstrings: stringsProp,\n\trenderTrigger,\n}: SidebarNavigationUserProps) {\n\tconst strings = useStrings(defaultSidebarNavigationUserStrings, stringsProp);\n\tconst { state, isMobile } = useSidebar();\n\tconst dropdownSide = isMobile || state !== 'collapsed' ? 'bottom' : 'right';\n\tconst initials = deriveInitials(user.name);\n\n\tconst defaultContent = (\n\t\t<>\n\t\t\t{!!onProfile && (\n\t\t\t\t<DropdownMenuItem onClick={onProfile}>\n\t\t\t\t\t<User className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.profile}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!onSettings && (\n\t\t\t\t<DropdownMenuItem onClick={onSettings}>\n\t\t\t\t\t<Settings className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.settings}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!(onProfile || onSettings) && !!onLogout && <DropdownMenuSeparator />}\n\t\t\t{!!onLogout && (\n\t\t\t\t<DropdownMenuItem onClick={onLogout}>\n\t\t\t\t\t<LogOut className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.logout}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<SidebarMenu>\n\t\t\t<SidebarMenuItem>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\tclassName=\"group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderTrigger?.(user) ?? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<Avatar className=\"size-8 rounded-full\">\n\t\t\t\t\t\t\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t\t\t\t\t\t\t<AvatarFallback className=\"bg-sidebar-accent text-xs text-sidebar-accent-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t{initials}\n\t\t\t\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-1 flex-col items-start justify-center overflow-hidden\">\n\t\t\t\t\t\t\t\t\t\t<Text weight=\"medium\" className=\"w-full truncate\">{user.name}</Text>\n\t\t\t\t\t\t\t\t\t\t{!!user.email && <Text size=\"xs\" type=\"secondary\" className=\"w-full truncate\">{user.email}</Text>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<ChevronsUpDown className=\"ml-auto size-4 shrink-0\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DropdownMenuTrigger>\n\n\t\t\t\t\t<DropdownMenuContent\n\t\t\t\t\t\tclassName=\"w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg\"\n\t\t\t\t\t\talign=\"end\"\n\t\t\t\t\t\tside={dropdownSide}\n\t\t\t\t\t\tsideOffset={4}\n\t\t\t\t\t>\n\t\t\t\t\t\t{customContent ?? defaultContent}\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n\n/** @deprecated — use `LayoutUser` from `layout.types`. */\nexport type SidebarUserData = LayoutUser;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("../lib/utils.cjs"),r=require("./heading-0DYCOrgC.cjs"),i=require("./tooltip-mvxZV_Lu.cjs"),a=require("./dropdown-menu-CHQzQWUK.cjs"),o=require("./avatar-0spfQEHG.cjs"),s=require("./scroll-area-u46BOVcC.cjs"),c=require("./skeleton-D1c5OHXa.cjs"),l=require("./sheet-D4yWgkwC.cjs"),u=require("./sidebar-Bl_KRk-S.cjs"),d=require("./hooks-MW0UTO3q.cjs");let f=require("react");f=e.t(f,1);let p=require("react/jsx-runtime"),m=require("lucide-react"),h=require("class-variance-authority");var g=u.w;function _({defaultOpen:e=!0,open:t,onOpenChange:r,className:a,style:o,children:s,...c}){return(0,p.jsx)(i.r,{delayDuration:0,children:(0,p.jsx)(u.b,{defaultOpen:e,open:t,onOpenChange:r,style:o,className:n.cn(`min-h-svh`,a),...c,children:s})})}var v=`18rem`;(0,h.cva)(`peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0`,{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});var y={mobileTitle:`Sidebar`,mobileDescription:`Displays the mobile sidebar.`};function b({side:e=`left`,variant:r=`sidebar`,collapsible:i=`offcanvas`,className:a,surfaceClassName:o,children:s,strings:c,...u}){let{isMobile:d,state:f,openMobile:m,setOpenMobile:h}=g(),_=t.useStrings(y,c);return i===`none`?(0,p.jsx)(`div`,{"data-slot":`sidebar`,className:n.cn(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,o,a),...u,children:s}):d?(0,p.jsx)(l.t,{open:m,onOpenChange:h,...u,children:(0,p.jsxs)(l.r,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:n.cn(`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden`,o),style:{"--sidebar-width":v},side:e,children:[(0,p.jsxs)(l.o,{className:`sr-only`,children:[(0,p.jsx)(l.s,{children:_.mobileTitle}),(0,p.jsx)(l.i,{children:_.mobileDescription})]}),(0,p.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:s})]})}):(0,p.jsx)(`div`,{className:`group peer sticky top-0 hidden h-full text-sidebar-foreground md:block`,"data-state":f,"data-collapsible":f===`collapsed`?i:``,"data-variant":r,"data-side":e,"data-slot":`sidebar`,children:(0,p.jsx)(`div`,{className:n.cn(`inset-y-0 z-10 hidden h-full w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex`,e===`left`?`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,r===`floating`||r===`inset`?`px-2 py-3 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,a),...u,children:(0,p.jsx)(`div`,{"data-sidebar":`sidebar`,className:n.cn(`sidebar flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm`,o),children:s})})})}function x({item:e}){return(0,p.jsx)(r.n,{tag:`span`,className:`truncate text-inherit`,children:d.o(e)})}function S({navigationByGroups:e,currentUrl:t=`/`,iconMap:i={},liveBadges:a,renderLink:o,LinkComponent:s,emptySlot:c,renderItem:l,className:m}){let h=d.d({renderLink:o,LinkComponent:s}),g=e=>!!e&&d.s(t,d.u(e)),_=e=>{let n=-1,r=-1;for(let i=0;i<e.length;i+=1){let a=e[i],o=a?.href?d.u(a.href):``;o&&d.s(t,o)&&o.length>r&&(r=o.length,n=i)}return n},v=e=>!!e?.some(e=>g(e.href)||v(e.children)),y=(e,t=0,o=0)=>{let s=!!e.children?.length,c=g(e.href),m=s?v(e.children):!1,y=c||m,b=d.l(e.handle,e.badge,a),S=d.o(e),C={depth:t,active:c,expanded:y,badge:b,renderLink:h};if(l)return(0,p.jsx)(f.Fragment,{children:l(e,C)},d.a(e,o));if(s){let t=_(e.children??[]),s=(0,p.jsxs)(p.Fragment,{children:[!!e.icon&&(0,p.jsx)(d.r,{icon:e.icon,iconMap:i,className:`size-4`,"aria-hidden":`true`}),(0,p.jsx)(x,{item:e}),!!b&&(0,p.jsx)(d.i,{value:b})]});return(0,p.jsxs)(u.h,{children:[(0,p.jsx)(u.t,{isActive:y,render:e.href&&!e.disabled?d.c(h,e,s,void 0,y):void 0,tooltip:{children:S},disabled:e.disabled,className:n.cn(`h-7 font-medium`,c&&`bg-sidebar-accent text-sidebar-foreground`,!c&&m&&`bg-sidebar-accent/45 text-sidebar-foreground`,e.disabled&&`cursor-not-allowed opacity-50`),children:s}),!!y&&(0,p.jsx)(u._,{className:`gap-0.5`,children:e.children?.map((e,i)=>{let o=i===t||g(e.href),s=d.l(e.handle,e.badge,a),c=d.o(e),l=(0,p.jsxs)(p.Fragment,{children:[typeof c==`string`||typeof c==`number`?(0,p.jsx)(r.n,{tag:`span`,className:`min-w-0 flex-1 truncate text-inherit`,children:c}):c,!!s&&(0,p.jsx)(d.i,{value:s,size:`small`})]});return(0,p.jsx)(u.y,{children:(0,p.jsx)(u.v,{render:e.href&&!e.disabled?d.c(h,e,l,void 0,o):void 0,className:n.cn(`w-full`,o&&`font-semibold text-sidebar-foreground`),children:l})},d.a(e,i))})})]},d.a(e,o))}let w=(0,p.jsxs)(p.Fragment,{children:[!!e.icon&&(0,p.jsx)(d.r,{icon:e.icon,iconMap:i,className:`size-4`,"aria-hidden":`true`}),(0,p.jsx)(x,{item:e}),!!b&&(0,p.jsx)(d.i,{value:b})]});return(0,p.jsx)(u.h,{children:(0,p.jsx)(u.t,{isActive:c,render:e.href&&!e.disabled?d.c(h,e,w,void 0,c):void 0,tooltip:{children:S},disabled:e.disabled,className:n.cn(`h-7 font-medium`,c&&`bg-sidebar-accent text-sidebar-foreground`,e.disabled&&`cursor-not-allowed opacity-50`),children:w})},d.a(e,o))},b=Object.entries(e).filter(([,e])=>e.length>0);return b.length===0?c??null:(0,p.jsx)(`div`,{className:m,children:b.map(([e,t],n)=>(0,p.jsxs)(f.Fragment,{children:[(0,p.jsxs)(u.a,{className:`px-2 py-0`,children:[!e.startsWith(`_`)&&(0,p.jsx)(u.c,{children:e}),(0,p.jsx)(u.f,{className:`gap-0.5`,children:t.map((e,t)=>y(e,0,t))})]}),n<b.length-1&&(0,p.jsx)(u.S,{className:`!mx-auto !my-1.5 !w-11/12 overflow-hidden px-4`})]},e))})}function C({logo:e,collapsedLogo:t=null,className:r}){let{state:i}=g(),a=i===`collapsed`?t:e;return a?(0,p.jsx)(`div`,{className:n.cn(`min-w-0`,r),children:a}):null}function w({items:e,label:t,currentUrl:i=`/`,iconMap:a={},liveBadges:o,renderLink:s,LinkComponent:c,className:l}){let f=d.d({renderLink:s,LinkComponent:c});return(0,p.jsxs)(u.a,{className:n.cn(`group-data-[collapsible=icon]:p-0`,l),children:[!!t&&(0,p.jsx)(u.c,{children:t}),(0,p.jsx)(u.s,{children:(0,p.jsx)(u.f,{className:`gap-0.5`,children:e.map((e,t)=>{let s=!!e.href&&d.s(i,d.u(e.href)),c=d.l(e.handle,e.badge,o),l=d.o(e),h=(0,p.jsxs)(p.Fragment,{children:[!!e.icon&&(0,p.jsx)(d.r,{icon:e.icon,iconMap:a,className:`size-4`,"aria-hidden":`true`}),typeof l==`string`||typeof l==`number`?(0,p.jsx)(r.n,{tag:`span`,className:`truncate text-inherit`,children:l}):l,!!c&&(0,p.jsx)(d.i,{value:c}),!!e.external&&(0,p.jsx)(m.ExternalLink,{className:`ml-auto size-3 opacity-50`,"aria-hidden":`true`})]});return(0,p.jsx)(u.h,{children:(0,p.jsx)(u.t,{isActive:s,render:e.href&&!e.disabled?d.c(f,e,h,void 0,s):void 0,className:n.cn(`h-7 font-medium text-sidebar-foreground/70 hover:text-sidebar-foreground`,s&&`bg-sidebar-accent text-sidebar-foreground`),tooltip:{children:l},disabled:e.disabled,children:h})},d.a(e,t))})})})]})}var T={label:`Workspace`,select:`Select workspace`};function E({logo:e,collapsedLogo:i,workspaceLinks:o,renderLink:s,LinkComponent:c,strings:l,contentClassName:f}){let h=t.useStrings(T,l),_=d.d({renderLink:s,LinkComponent:c}),{state:v}=g(),y=v===`collapsed`;return(0,p.jsx)(u.f,{children:(0,p.jsx)(u.h,{children:(0,p.jsxs)(a.t,{children:[(0,p.jsxs)(a.g,{render:(0,p.jsx)(u.t,{size:`lg`,className:`data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground`}),children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[y?i??e:e,!y&&(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`sr-only`,children:h.select})]}),!y&&(0,p.jsx)(m.ChevronsUpDown,{className:`ml-auto size-4 shrink-0`,"aria-hidden":`true`})]}),(0,p.jsx)(a.r,{className:n.cn(`min-w-56`,f),align:`start`,side:`right`,sideOffset:8,children:(0,p.jsxs)(a.i,{children:[(0,p.jsx)(a.o,{children:(0,p.jsx)(r.n,{weight:`semibold`,children:h.label})}),(0,p.jsx)(a.d,{}),o.map(e=>{let t=(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(e.icon??m.ExternalLink,{className:`size-4 shrink-0`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:e.label})]});return(0,p.jsx)(a.a,{render:_({href:e.url,external:e.external??!0,children:null,className:`flex items-center gap-2`}),children:t},e.url)})]})})]})})})}function D({navigationGroups:e,footerNavItems:t=[],footerLabel:r,logo:i,collapsedLogo:a,workspaceLinks:o=[],workspaceStrings:c,workspaceContentClassName:l,headerClassName:d,logoClassName:f,iconMap:m,currentUrl:h=`/`,liveBadges:g,renderLink:_,LinkComponent:v,loading:y,collapsible:x=`icon`,variant:T=`sidebar`,side:D=`left`,className:k,surfaceClassName:A,contentClassName:j,slots:M,renderItem:N}){let P=t.length>0||!!M?.footer,F=y||!e,I=o.length>0;return(0,p.jsxs)(b,{collapsible:x,variant:T,side:D,className:n.cn(`h-svh`,k),surfaceClassName:A,children:[M?.header??(!!i&&(0,p.jsx)(u.l,{className:d,children:I?(0,p.jsx)(E,{logo:i,collapsedLogo:a,workspaceLinks:o,strings:c,contentClassName:l,renderLink:_,LinkComponent:v}):(0,p.jsx)(C,{logo:i,collapsedLogo:a,className:f})})),(0,p.jsx)(u.r,{className:j,children:(0,p.jsxs)(s.t,{className:`h-full pr-1.5 pt-4`,children:[M?.beforeNavigation,F?M?.loading??(0,p.jsx)(O,{}):(0,p.jsx)(S,{navigationByGroups:e,currentUrl:h,iconMap:m,liveBadges:g,renderLink:_,LinkComponent:v,emptySlot:M?.empty,renderItem:N}),M?.afterNavigation]})}),P&&(0,p.jsx)(u.i,{children:M?.footer??(0,p.jsx)(w,{items:t,label:r,currentUrl:h,iconMap:m,liveBadges:g,renderLink:_,LinkComponent:v})})]})}function O(){let e=[9,3,4,2,1];return(0,p.jsx)(p.Fragment,{children:e.map((t,n)=>(0,p.jsxs)(f.Fragment,{children:[(0,p.jsx)(u.a,{className:`px-2 py-0`,children:(0,p.jsx)(u.f,{className:`gap-0.5`,children:Array.from({length:t},(e,t)=>(0,p.jsx)(u.h,{children:(0,p.jsxs)(`div`,{className:`flex h-8 items-center gap-2 px-2`,children:[(0,p.jsx)(c.t,{className:`h-4 w-4 shrink-0 rounded`}),(0,p.jsx)(c.t,{className:`h-3.5 rounded`,style:{width:`${60+(n*7+t*13)%40}px`}})]})},t))})}),n<e.length-1&&(0,p.jsx)(u.S,{className:`!mx-auto !my-1 !w-11/12 overflow-hidden px-4`})]},n))})}function k({item:e}){return(0,p.jsx)(r.n,{tag:`span`,className:`truncate text-inherit`,children:d.o(e)})}function A({items:e,label:t=`Platform`,currentUrl:r=`/`,iconMap:i={},liveBadges:a,renderLink:o,LinkComponent:s,renderItem:c,className:l}){let m=d.d({renderLink:o,LinkComponent:s});return(0,p.jsxs)(u.a,{className:n.cn(`px-2 py-0`,l),children:[!!t&&(0,p.jsx)(u.c,{children:t}),(0,p.jsx)(u.f,{className:`gap-0.5`,children:e.map((e,t)=>{let o=!!e.href&&d.s(r,d.u(e.href)),s=d.l(e.handle,e.badge,a),l={depth:0,active:o,expanded:!1,badge:s,renderLink:m},h=d.o(e);if(c)return(0,p.jsx)(f.Fragment,{children:c(e,l)},d.a(e,t));let g=(0,p.jsxs)(p.Fragment,{children:[!!e.icon&&(0,p.jsx)(d.r,{icon:e.icon,iconMap:i,className:`size-4`,"aria-hidden":`true`}),(0,p.jsx)(k,{item:e}),!!s&&(0,p.jsx)(d.i,{value:s})]});return(0,p.jsx)(u.h,{children:(0,p.jsx)(u.t,{isActive:o,render:e.href&&!e.disabled?d.c(m,e,g,void 0,o):void 0,tooltip:{children:h},disabled:e.disabled,className:n.cn(`h-7 font-medium`,o&&`bg-sidebar-accent text-sidebar-foreground`,e.disabled&&`cursor-not-allowed opacity-50`),children:g})},d.a(e,t))})})]})}var j={profile:`Profile`,settings:`Settings`,logout:`Log out`};function M(e){return e.split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase()}function N({user:e,customContent:n,onProfile:i,onSettings:s,onLogout:c,strings:l,renderTrigger:d}){let f=t.useStrings(j,l),{state:h,isMobile:_}=g(),v=_||h!==`collapsed`?`bottom`:`right`,y=M(e.name),b=(0,p.jsxs)(p.Fragment,{children:[!!i&&(0,p.jsxs)(a.a,{onClick:i,children:[(0,p.jsx)(m.User,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:f.profile})]}),!!s&&(0,p.jsxs)(a.a,{onClick:s,children:[(0,p.jsx)(m.Settings,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:f.settings})]}),!!(i||s)&&!!c&&(0,p.jsx)(a.d,{}),!!c&&(0,p.jsxs)(a.a,{onClick:c,children:[(0,p.jsx)(m.LogOut,{className:`mr-2 size-4`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,className:`text-inherit`,children:f.logout})]})]});return(0,p.jsx)(u.f,{children:(0,p.jsx)(u.h,{children:(0,p.jsxs)(a.t,{children:[(0,p.jsx)(a.g,{render:(0,p.jsx)(u.t,{size:`lg`,className:`group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent`}),children:d?.(e)??(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,p.jsxs)(o.t,{className:`size-8 rounded-full`,children:[!!e.avatar&&(0,p.jsx)(o.o,{src:e.avatar,alt:e.name}),(0,p.jsx)(o.r,{className:`bg-sidebar-accent text-xs text-sidebar-accent-foreground`,children:y})]}),(0,p.jsxs)(`div`,{className:`flex flex-1 flex-col items-start justify-center overflow-hidden`,children:[(0,p.jsx)(r.n,{weight:`medium`,className:`w-full truncate`,children:e.name}),!!e.email&&(0,p.jsx)(r.n,{size:`xs`,type:`secondary`,className:`w-full truncate`,children:e.email})]})]}),(0,p.jsx)(m.ChevronsUpDown,{className:`ml-auto size-4 shrink-0`,"aria-hidden":`true`})]})}),(0,p.jsx)(a.r,{className:`w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg`,align:`end`,side:v,sideOffset:4,children:n??b})]})})})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return b}});
2
- //# sourceMappingURL=sidebar-C89O5ho_.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-C89O5ho_.cjs","names":[],"sources":["../../src/components/layout/sidebar/sidebar.context.tsx","../../src/components/layout/sidebar/sidebar.settings.ts","../../src/components/layout/sidebar/sidebar.tsx","../../src/components/layout/sidebar/components/sidebar-grouped-navigation.tsx","../../src/components/layout/sidebar/components/sidebar-logo.tsx","../../src/components/layout/sidebar/components/sidebar-navigation-footer.tsx","../../src/components/layout/sidebar/sidebar.types.ts","../../src/components/layout/sidebar/components/sidebar-workspace-dropdown.tsx","../../src/components/layout/sidebar/app-sidebar.tsx","../../src/components/layout/sidebar/components/sidebar-navigation.tsx","../../src/components/layout/sidebar/components/sidebar-navigation-user.tsx"],"sourcesContent":[" \n/** SidebarProvider — layout-scoped wrapper around the shadcn sidebar context. */\nimport * as React from 'react';\n\nimport { TooltipProvider } from '@/components/base/display/tooltip';\nimport {\n\tSidebarProvider as PrimitiveSidebarProvider,\n\tuseSidebar as primitiveUseSidebar,\n} from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nexport const useSidebar = primitiveUseSidebar;\nexport type SidebarContext = ReturnType<typeof primitiveUseSidebar>;\n\nexport type SidebarProviderProps = React.ComponentProps<'div'> & {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n};\n\nexport function SidebarProvider({\n\tdefaultOpen = true,\n\topen,\n\tonOpenChange,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}: SidebarProviderProps) {\n\treturn (\n\t\t<TooltipProvider delayDuration={0}>\n\t\t\t<PrimitiveSidebarProvider\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tstyle={style}\n\t\t\t\tclassName={cn('min-h-svh', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</PrimitiveSidebarProvider>\n\t\t</TooltipProvider>\n\t);\n}\n","import { cva } from \"class-variance-authority\"\n\nexport const SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nexport const SIDEBAR_WIDTH = \"16rem\"\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\"\nexport const SIDEBAR_WIDTH_ICON = \"3rem\"\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\nexport const sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n"," \n/** Sidebar — responsive shell around the shadcn sidebar primitive pieces. */\nimport * as React from 'react';\n\nimport {\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n} from '@/components/base/sheet';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useSidebar } from './sidebar.context';\nimport { SIDEBAR_WIDTH_MOBILE } from './sidebar.settings';\n\nexport interface SidebarStrings {\n\tmobileTitle: string;\n\tmobileDescription: string;\n}\n\nexport const defaultSidebarStrings: SidebarStrings = {\n\tmobileTitle: 'Sidebar',\n\tmobileDescription: 'Displays the mobile sidebar.',\n};\n\nexport type SidebarProps = React.ComponentProps<'div'> & {\n\tside?: 'left' | 'right';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\tstrings?: Partial<SidebarStrings>;\n\tsurfaceClassName?: string;\n};\n\nexport function Sidebar({\n\tside = 'left',\n\tvariant = 'sidebar',\n\tcollapsible = 'offcanvas',\n\tclassName,\n\tsurfaceClassName,\n\tchildren,\n\tstrings: stringsProp,\n\t...props\n}: SidebarProps) {\n\tconst { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\tconst strings = useStrings(defaultSidebarStrings, stringsProp);\n\n\tif (collapsible === 'none') {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\tclassName={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', surfaceClassName, className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n\t\t\t\t<SheetContent\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\t\tdata-mobile=\"true\"\n\t\t\t\t\tclassName={cn('w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden', surfaceClassName)}\n\t\t\t\t\tstyle={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n\t\t\t\t\tside={side}\n\t\t\t\t>\n\t\t\t\t\t<SheetHeader className=\"sr-only\">\n\t\t\t\t\t\t<SheetTitle>{strings.mobileTitle}</SheetTitle>\n\t\t\t\t\t\t<SheetDescription>{strings.mobileDescription}</SheetDescription>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">{children}</div>\n\t\t\t\t</SheetContent>\n\t\t\t</Sheet>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group peer sticky top-0 hidden h-full text-sidebar-foreground md:block\"\n\t\t\tdata-state={state}\n\t\t\tdata-collapsible={state === 'collapsed' ? collapsible : ''}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t\tdata-slot=\"sidebar\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inset-y-0 z-10 hidden h-full w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n\t\t\t\t\tside === 'left'\n\t\t\t\t\t\t? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n\t\t\t\t\t\t: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'px-2 py-3 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'sidebar flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm',\n\t\t\t\t\t\tsurfaceClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","/** SidebarGroupedNavigation — grouped tree navigation with composable rows. */\nimport * as React from 'react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n\tSidebarMenuSub,\n\tSidebarMenuSubButton,\n\tSidebarMenuSubItem,\n\tSidebarSeparator,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarGroupedNavigationProps, SidebarNavItem, SidebarRenderItemContext } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nfunction NavLabel({ item }: { item: SidebarNavItem }) {\n\tconst label = getNavLabel(item);\n\treturn (\n\t\t<Text tag=\"span\" className=\"truncate text-inherit\">\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport function SidebarGroupedNavigation({\n\tnavigationByGroups,\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\temptySlot,\n\trenderItem,\n\tclassName,\n}: SidebarGroupedNavigationProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst isActive = (href?: string): boolean => !!href && isPathMatch(currentUrl, toPath(href));\n\n\tconst bestMatchIndex = (siblings: SidebarNavItem[]): number => {\n\t\tlet bestIdx = -1;\n\t\tlet bestLen = -1;\n\t\tfor (let i = 0; i < siblings.length; i += 1) {\n\t\t\tconst sibling = siblings[i];\n\t\t\tconst path = sibling?.href ? toPath(sibling.href) : '';\n\t\t\tif (path && isPathMatch(currentUrl, path) && path.length > bestLen) {\n\t\t\t\tbestLen = path.length;\n\t\t\t\tbestIdx = i;\n\t\t\t}\n\t\t}\n\t\treturn bestIdx;\n\t};\n\n\tconst hasActiveChild = (children?: SidebarNavItem[]): boolean =>\n\t\t!!children?.some((child) => isActive(child.href) || hasActiveChild(child.children));\n\n\tconst renderDefaultItem = (item: SidebarNavItem, depth = 0, index = 0): React.ReactNode => {\n\t\tconst hasChildren = !!item.children?.length;\n\t\tconst itemActive = isActive(item.href);\n\t\tconst childActive = hasChildren ? hasActiveChild(item.children) : false;\n\t\tconst expanded = itemActive || childActive;\n\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\tconst label = getNavLabel(item);\n\t\tconst context: SidebarRenderItemContext = {\n\t\t\tdepth,\n\t\t\tactive: itemActive,\n\t\t\texpanded,\n\t\t\tbadge,\n\t\t\trenderLink: resolvedRenderLink,\n\t\t};\n\n\t\tif (renderItem) {\n\t\t\treturn <React.Fragment key={getNavKey(item, index)}>{renderItem(item, context)}</React.Fragment>;\n\t\t}\n\n\t\tif (hasChildren) {\n\t\t\tconst activeChildIdx = bestMatchIndex(item.children ?? []);\n\t\t\tconst content = (\n\t\t\t\t<>\n\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t<NavLabel item={item} />\n\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\tisActive={expanded}\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, expanded) as React.ReactElement\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttooltip={{ children: label }}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\t\t\titemActive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t!itemActive && childActive && 'bg-sidebar-accent/45 text-sidebar-foreground',\n\t\t\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</SidebarMenuButton>\n\n\t\t\t\t\t{!!expanded && (\n\t\t\t\t\t\t<SidebarMenuSub className=\"gap-0.5\">\n\t\t\t\t\t\t\t{item.children?.map((child, childIndex) => {\n\t\t\t\t\t\t\t\tconst childActiveNow = childIndex === activeChildIdx || isActive(child.href);\n\t\t\t\t\t\t\t\tconst childBadge = resolveNavBadge(child.handle, child.badge, liveBadges);\n\t\t\t\t\t\t\t\tconst childLabel = getNavLabel(child);\n\t\t\t\t\t\t\t\tconst childContent = (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{typeof childLabel === 'string' || typeof childLabel === 'number' ? (\n\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t{childLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : childLabel}\n\t\t\t\t\t\t\t\t\t\t{!!childBadge && <NavBadge value={childBadge} size=\"small\" />}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<SidebarMenuSubItem key={getNavKey(child, childIndex)}>\n\t\t\t\t\t\t\t\t\t\t<SidebarMenuSubButton\n\t\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\t\tchild.href && !child.disabled\n\t\t\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, child, childContent, undefined, childActiveNow) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn('w-full', childActiveNow && 'font-semibold text-sidebar-foreground')}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{childContent}\n\t\t\t\t\t\t\t\t\t\t</SidebarMenuSubButton>\n\t\t\t\t\t\t\t\t\t</SidebarMenuSubItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</SidebarMenuSub>\n\t\t\t\t\t)}\n\t\t\t</SidebarMenuItem>\n\t\t);\n\t}\n\n\tconst content = (\n\t\t<>\n\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t<NavLabel item={item} />\n\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t<SidebarMenuButton\n\t\t\t\tisActive={itemActive}\n\t\t\t\trender={\n\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, itemActive) as React.ReactElement\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\ttooltip={{ children: label }}\n\t\t\t\tdisabled={item.disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\titemActive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</SidebarMenuButton>\n\t\t</SidebarMenuItem>\n\t);\n\t};\n\n\tconst groupEntries = Object.entries(navigationByGroups).filter(([, items]) => items.length > 0);\n\tif (groupEntries.length === 0) return emptySlot ?? null;\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t{groupEntries.map(([groupName, items], groupIndex) => (\n\t\t\t\t<React.Fragment key={groupName}>\n\t\t\t\t\t<SidebarGroup className=\"px-2 py-0\">\n\t\t\t\t\t\t{!groupName.startsWith('_') && <SidebarGroupLabel>{groupName}</SidebarGroupLabel>}\n\t\t\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t\t\t{items.map((item, index) => renderDefaultItem(item, 0, index))}\n\t\t\t\t\t\t</SidebarMenu>\n\t\t\t\t\t</SidebarGroup>\n\t\t\t\t\t{groupIndex < groupEntries.length - 1 && (\n\t\t\t\t\t\t<SidebarSeparator className=\"!mx-auto !my-1.5 !w-11/12 overflow-hidden px-4\" />\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","/** SidebarLogo — hides its logo content when the sidebar is icon-collapsed. */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { useSidebar } from '../sidebar.context';\n\nexport interface SidebarLogoProps {\n\tlogo: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tclassName?: string;\n}\n\nexport function SidebarLogo({ logo, collapsedLogo = null, className }: SidebarLogoProps) {\n\tconst { state } = useSidebar();\n\tconst isCollapsed = state === 'collapsed';\n\tconst content = isCollapsed ? collapsedLogo : logo;\n\tif (!content) return null;\n\treturn <div className={cn('min-w-0', className)}>{content}</div>;\n}\n","/** SidebarNavigationFooter — secondary footer navigation using renderLink. */\nimport { ExternalLink } from 'lucide-react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarNavigationFooterProps } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nexport function SidebarNavigationFooter({\n\titems,\n\tlabel,\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\tclassName,\n}: SidebarNavigationFooterProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<SidebarGroup className={cn('group-data-[collapsible=icon]:p-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarGroupContent>\n\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst active = !!item.href && isPathMatch(currentUrl, toPath(item.href));\n\t\t\t\t\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\t\t\t\t\tconst labelNode = getNavLabel(item);\n\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t\t{typeof labelNode === 'string' || typeof labelNode === 'number' ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" className=\"truncate text-inherit\">{labelNode}</Text>\n\t\t\t\t\t\t\t\t) : labelNode}\n\t\t\t\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t\t\t\t\t{!!item.external && <ExternalLink className=\"ml-auto size-3 opacity-50\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\t\tisActive={active}\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-7 font-medium text-sidebar-foreground/70 hover:text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\t\tactive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</SidebarMenu>\n\t\t\t</SidebarGroupContent>\n\t\t</SidebarGroup>\n\t);\n}\n","/**\n * Sidebar types — framework-neutral navigation tree, render contexts, slots,\n * strings, and composition props.\n */\nimport type { ComponentType, ReactNode } from 'react';\n\nimport type {\n\tLayoutIconSource,\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n\tLinkComponent,\n} from '../layout.types';\n\nexport interface SidebarNavItem {\n\t/** New preferred label. */\n\tlabel?: ReactNode;\n\t/** Back-compat label used by older call sites. */\n\ttitle?: ReactNode;\n\thref?: string;\n\thandle?: string;\n\ticon?: LayoutIconSource;\n\tdisabled?: boolean;\n\tbadge?: string | number;\n\tchildren?: SidebarNavItem[];\n\tgroup?: string;\n\texternal?: boolean;\n}\n\nexport type SidebarFlatNavItem = Omit<SidebarNavItem, 'children' | 'group'>;\n\nexport interface SidebarRenderItemContext {\n\tdepth: number;\n\tactive: boolean;\n\texpanded: boolean;\n\tbadge?: string | number;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface SidebarSlots {\n\theader?: ReactNode;\n\tbeforeNavigation?: ReactNode;\n\tafterNavigation?: ReactNode;\n\tfooter?: ReactNode;\n\tempty?: ReactNode;\n\tloading?: ReactNode;\n}\n\nexport interface AppSidebarProps extends LayoutNavigationAdapter {\n\tnavigationGroups?: Record<string, SidebarNavItem[]>;\n\tfooterNavItems?: SidebarFlatNavItem[];\n\tfooterLabel?: ReactNode;\n\tlogo?: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tworkspaceLinks?: WorkspaceLink[];\n\tworkspaceStrings?: Partial<SidebarWorkspaceDropdownStrings>;\n\tworkspaceContentClassName?: string;\n\theaderClassName?: string;\n\tlogoClassName?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tcurrentUrl?: string;\n\tliveBadges?: Record<string, string | number>;\n\tloading?: boolean;\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tside?: 'left' | 'right';\n\tclassName?: string;\n\tsurfaceClassName?: string;\n\tcontentClassName?: string;\n\tslots?: SidebarSlots;\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface SidebarGroupedNavigationProps extends LayoutNavigationAdapter {\n\tnavigationByGroups: Record<string, SidebarNavItem[]>;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\temptySlot?: ReactNode;\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface SidebarFlatNavigationProps extends LayoutNavigationAdapter {\n\titems: SidebarFlatNavItem[];\n\tlabel?: ReactNode;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\trenderItem?: (item: SidebarFlatNavItem, context: SidebarRenderItemContext) => ReactNode;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport interface WorkspaceLink {\n\tlabel: ReactNode;\n\turl: string;\n\ticon?: ComponentType<{ className?: string }>;\n\texternal?: boolean;\n}\n\nexport interface SidebarWorkspaceDropdownStrings {\n\tlabel: string;\n\tselect: string;\n}\n\nexport const defaultSidebarWorkspaceDropdownStrings: SidebarWorkspaceDropdownStrings = {\n\tlabel: 'Workspace',\n\tselect: 'Select workspace',\n};\n\nexport interface SidebarWorkspaceDropdownProps extends LayoutNavigationAdapter {\n\tlogo: ReactNode;\n\tcollapsedLogo?: ReactNode;\n\tworkspaceLinks: WorkspaceLink[];\n\tstrings?: Partial<SidebarWorkspaceDropdownStrings>;\n\tcontentClassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n\nexport type SidebarFooterNavigationItem = SidebarFlatNavItem;\n\nexport interface SidebarNavigationFooterProps extends LayoutNavigationAdapter {\n\titems: SidebarFooterNavigationItem[];\n\tlabel?: ReactNode;\n\tcurrentUrl?: string;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\tliveBadges?: Record<string, string | number>;\n\tclassName?: string;\n\t/** @deprecated Prefer `renderLink`. */\n\tLinkComponent?: LinkComponent;\n}\n","/** SidebarWorkspaceDropdown — workspace selector using consumer link rendering. */\nimport { ChevronsUpDown, ExternalLink } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultSidebarWorkspaceDropdownStrings,\n\ttype SidebarWorkspaceDropdownProps,\n} from '../sidebar.types';\nimport { useSidebar } from '../sidebar.context';\n\nexport function SidebarWorkspaceDropdown({\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks,\n\trenderLink,\n\tLinkComponent,\n\tstrings: stringsProp,\n\tcontentClassName,\n}: SidebarWorkspaceDropdownProps) {\n\tconst strings = useStrings(defaultSidebarWorkspaceDropdownStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\tconst { state } = useSidebar();\n\tconst isCollapsed = state === 'collapsed';\n\tconst visibleLogo = isCollapsed ? (collapsedLogo ?? logo) : logo;\n\n\treturn (\n\t\t<SidebarMenu>\n\t\t\t<SidebarMenuItem>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\tclassName=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t{visibleLogo}\n\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t{strings.select}\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{!isCollapsed && <ChevronsUpDown className=\"ml-auto size-4 shrink-0\" aria-hidden=\"true\" />}\n\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t<DropdownMenuContent className={cn('min-w-56', contentClassName)} align=\"start\" side=\"right\" sideOffset={8}>\n\t\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t\t<DropdownMenuLabel>\n\t\t\t\t\t\t\t\t<Text weight=\"semibold\">{strings.label}</Text>\n\t\t\t\t\t\t\t</DropdownMenuLabel>\n\t\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t\t{workspaceLinks.map((link) => {\n\t\t\t\t\t\t\t\tconst Icon = link.icon ?? ExternalLink;\n\t\t\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{link.label}</Text>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\t\tkey={link.url}\n\t\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\t\tresolvedRenderLink({\n\t\t\t\t\t\t\t\t\t\t\t\thref: link.url,\n\t\t\t\t\t\t\t\t\t\t\t\texternal: link.external ?? true,\n\t\t\t\t\t\t\t\t\t\t\t\tchildren: null,\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'flex items-center gap-2',\n\t\t\t\t\t\t\t\t\t\t\t}) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n","/**\n * AppSidebar — opinionated assembly of logo/header, grouped navigation, and\n * footer links. Consumers still own framework routing through `renderLink`.\n */\nimport * as React from 'react';\n\nimport { ScrollArea } from '@/components/base/display/scroll-area';\nimport { Skeleton } from '@/components/base/display/skeleton';\nimport {\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarHeader,\n\tSidebarMenu,\n\tSidebarMenuItem,\n\tSidebarSeparator,\n} from '@/components/base/sidebar';\nimport { cn } from '@/lib/utils';\n\nimport { SidebarGroupedNavigation } from './components/sidebar-grouped-navigation';\nimport { SidebarLogo } from './components/sidebar-logo';\nimport { SidebarNavigationFooter } from './components/sidebar-navigation-footer';\nimport { SidebarWorkspaceDropdown } from './components/sidebar-workspace-dropdown';\nimport { Sidebar } from './sidebar';\nimport type { AppSidebarProps } from './sidebar.types';\n\nexport function AppSidebar({\n\tnavigationGroups,\n\tfooterNavItems = [],\n\tfooterLabel,\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks = [],\n\tworkspaceStrings,\n\tworkspaceContentClassName,\n\theaderClassName,\n\tlogoClassName,\n\ticonMap,\n\tcurrentUrl = '/',\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\tloading,\n\tcollapsible = 'icon',\n\tvariant = 'sidebar',\n\tside = 'left',\n\tclassName,\n\tsurfaceClassName,\n\tcontentClassName,\n\tslots,\n\trenderItem,\n}: AppSidebarProps) {\n\tconst hasFooter = footerNavItems.length > 0 || !!slots?.footer;\n\tconst isLoading = loading || !navigationGroups;\n\tconst hasWorkspaceLinks = workspaceLinks.length > 0;\n\n\treturn (\n\t\t<Sidebar collapsible={collapsible} variant={variant} side={side} className={cn('h-svh', className)} surfaceClassName={surfaceClassName}>\n\t\t\t{slots?.header ?? (!!logo && (\n\t\t\t\t<SidebarHeader className={headerClassName}>\n\t\t\t\t\t{hasWorkspaceLinks ? (\n\t\t\t\t\t\t<SidebarWorkspaceDropdown\n\t\t\t\t\t\t\tlogo={logo}\n\t\t\t\t\t\t\tcollapsedLogo={collapsedLogo}\n\t\t\t\t\t\t\tworkspaceLinks={workspaceLinks}\n\t\t\t\t\t\t\tstrings={workspaceStrings}\n\t\t\t\t\t\t\tcontentClassName={workspaceContentClassName}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SidebarLogo logo={logo} collapsedLogo={collapsedLogo} className={logoClassName} />\n\t\t\t\t\t)}\n\t\t\t\t</SidebarHeader>\n\t\t\t))}\n\n\t\t\t<SidebarContent className={contentClassName}>\n\t\t\t\t<ScrollArea className=\"h-full pr-1.5 pt-4\">\n\t\t\t\t\t{slots?.beforeNavigation}\n\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\tslots?.loading ?? <AppSidebarSkeleton />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SidebarGroupedNavigation\n\t\t\t\t\t\t\tnavigationByGroups={navigationGroups}\n\t\t\t\t\t\t\tcurrentUrl={currentUrl}\n\t\t\t\t\t\t\ticonMap={iconMap}\n\t\t\t\t\t\t\tliveBadges={liveBadges}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t\temptySlot={slots?.empty}\n\t\t\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{slots?.afterNavigation}\n\t\t\t\t</ScrollArea>\n\t\t\t</SidebarContent>\n\n\t\t\t{hasFooter && (\n\t\t\t\t<SidebarFooter>\n\t\t\t\t\t{slots?.footer ?? (\n\t\t\t\t\t\t<SidebarNavigationFooter\n\t\t\t\t\t\t\titems={footerNavItems}\n\t\t\t\t\t\t\tlabel={footerLabel}\n\t\t\t\t\t\t\tcurrentUrl={currentUrl}\n\t\t\t\t\t\t\ticonMap={iconMap}\n\t\t\t\t\t\t\tliveBadges={liveBadges}\n\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\tLinkComponent={LinkComponent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</SidebarFooter>\n\t\t\t)}\n\t\t</Sidebar>\n\t);\n}\n\nfunction AppSidebarSkeleton() {\n\tconst groups = [9, 3, 4, 2, 1];\n\n\treturn (\n\t\t<>\n\t\t\t{groups.map((count, groupIdx) => (\n\t\t\t\t<React.Fragment key={groupIdx}>\n\t\t\t\t\t<SidebarGroup className=\"px-2 py-0\">\n\t\t\t\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t\t\t\t\t<SidebarMenuItem key={i}>\n\t\t\t\t\t\t\t\t\t<div className=\"flex h-8 items-center gap-2 px-2\">\n\t\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-4 shrink-0 rounded\" />\n\t\t\t\t\t\t\t\t\t\t<Skeleton\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 rounded\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: `${60 + ((groupIdx * 7 + i * 13) % 40)}px` }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</SidebarMenu>\n\t\t\t\t\t</SidebarGroup>\n\t\t\t\t\t{groupIdx < groups.length - 1 && (\n\t\t\t\t\t\t<SidebarSeparator className=\"!mx-auto !my-1 !w-11/12 overflow-hidden px-4\" />\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\t\t</>\n\t);\n}\n","/** SidebarNavigation — flat, framework-neutral sidebar nav list. */\nimport * as React from 'react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarFlatNavigationProps, SidebarFlatNavItem, SidebarRenderItemContext } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetNavKey,\n\tgetNavLabel,\n\tisPathMatch,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n\ttoPath,\n} from '../sidebar.utils';\n\nexport { DynamicIcon } from '../sidebar.utils';\nexport { DynamicIcon as Icon } from '../sidebar.utils';\n\nfunction NavLabel({ item }: { item: SidebarFlatNavItem }) {\n\tconst label = getNavLabel(item);\n\treturn (\n\t\t<Text tag=\"span\" className=\"truncate text-inherit\">\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport function SidebarNavigation({\n\titems,\n\tlabel = 'Platform',\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\trenderLink,\n\tLinkComponent,\n\trenderItem,\n\tclassName,\n}: SidebarFlatNavigationProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink, LinkComponent });\n\n\treturn (\n\t\t<SidebarGroup className={cn('px-2 py-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarMenu className=\"gap-0.5\">\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst active = !!item.href && isPathMatch(currentUrl, toPath(item.href));\n\t\t\t\t\tconst badge = resolveNavBadge(item.handle, item.badge, liveBadges);\n\t\t\t\t\tconst context: SidebarRenderItemContext = {\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tactive,\n\t\t\t\t\t\texpanded: false,\n\t\t\t\t\t\tbadge,\n\t\t\t\t\t\trenderLink: resolvedRenderLink,\n\t\t\t\t\t};\n\t\t\t\t\tconst labelNode = getNavLabel(item);\n\n\t\t\t\t\tif (renderItem) {\n\t\t\t\t\t\treturn <React.Fragment key={getNavKey(item, index)}>{renderItem(item, context)}</React.Fragment>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t<NavLabel item={item} />\n\t\t\t\t\t\t\t{!!badge && <NavBadge value={badge} />}\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tisActive={active}\n\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-7 font-medium',\n\t\t\t\t\t\t\t\t\tactive && 'bg-sidebar-accent text-sidebar-foreground',\n\t\t\t\t\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</SidebarMenu>\n\t\t</SidebarGroup>\n\t);\n}\n\n/** @deprecated Use `SidebarFlatNavItem` from `sidebar.types`. */\nexport type SidebarNavigationItem = SidebarFlatNavItem;\n"," \n/** SidebarNavigationUser — user profile dropdown for sidebar footer. */\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/base/navigation/dropdown-menu';\nimport { Text } from '@/components/typography';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '@/components/base/sidebar';\nimport { useStrings } from '@/lib/strings';\n\nimport type { LayoutUser } from '../../layout.types';\nimport { useSidebar } from '../sidebar.context';\n\nexport interface SidebarNavigationUserStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultSidebarNavigationUserStrings: SidebarNavigationUserStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface SidebarNavigationUserProps {\n\tuser: LayoutUser;\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\tstrings?: Partial<SidebarNavigationUserStrings>;\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nfunction deriveInitials(name: string): string {\n\treturn name\n\t\t.split(' ')\n\t\t.map((part) => part[0])\n\t\t.filter(Boolean)\n\t\t.slice(0, 2)\n\t\t.join('')\n\t\t.toUpperCase();\n}\n\nexport function SidebarNavigationUser({\n\tuser,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\tstrings: stringsProp,\n\trenderTrigger,\n}: SidebarNavigationUserProps) {\n\tconst strings = useStrings(defaultSidebarNavigationUserStrings, stringsProp);\n\tconst { state, isMobile } = useSidebar();\n\tconst dropdownSide = isMobile || state !== 'collapsed' ? 'bottom' : 'right';\n\tconst initials = deriveInitials(user.name);\n\n\tconst defaultContent = (\n\t\t<>\n\t\t\t{!!onProfile && (\n\t\t\t\t<DropdownMenuItem onClick={onProfile}>\n\t\t\t\t\t<User className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.profile}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!onSettings && (\n\t\t\t\t<DropdownMenuItem onClick={onSettings}>\n\t\t\t\t\t<Settings className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.settings}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t\t{!!(onProfile || onSettings) && !!onLogout && <DropdownMenuSeparator />}\n\t\t\t{!!onLogout && (\n\t\t\t\t<DropdownMenuItem onClick={onLogout}>\n\t\t\t\t\t<LogOut className=\"mr-2 size-4\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">{strings.logout}</Text>\n\t\t\t\t</DropdownMenuItem>\n\t\t\t)}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<SidebarMenu>\n\t\t\t<SidebarMenuItem>\n\t\t\t\t<DropdownMenu>\n\t\t\t\t\t<DropdownMenuTrigger\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\tclassName=\"group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderTrigger?.(user) ?? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"flex min-w-0 flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<Avatar className=\"size-8 rounded-full\">\n\t\t\t\t\t\t\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t\t\t\t\t\t\t<AvatarFallback className=\"bg-sidebar-accent text-xs text-sidebar-accent-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t{initials}\n\t\t\t\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-1 flex-col items-start justify-center overflow-hidden\">\n\t\t\t\t\t\t\t\t\t\t<Text weight=\"medium\" className=\"w-full truncate\">{user.name}</Text>\n\t\t\t\t\t\t\t\t\t\t{!!user.email && <Text size=\"xs\" type=\"secondary\" className=\"w-full truncate\">{user.email}</Text>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<ChevronsUpDown className=\"ml-auto size-4 shrink-0\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DropdownMenuTrigger>\n\n\t\t\t\t\t<DropdownMenuContent\n\t\t\t\t\t\tclassName=\"w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg\"\n\t\t\t\t\t\talign=\"end\"\n\t\t\t\t\t\tside={dropdownSide}\n\t\t\t\t\t\tsideOffset={4}\n\t\t\t\t\t>\n\t\t\t\t\t\t{customContent ?? defaultContent}\n\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t</DropdownMenu>\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n\n/** @deprecated — use `LayoutUser` from `layout.types`. */\nexport type SidebarUserData = LayoutUser;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";function n(e,t=-(2**53-1),n=2**53-1){return Math.max(t,Math.min(e,n))}var r=e(t()),i=r.createContext(void 0),a={disableStyleElements:!1};function o(){return r.useContext(i)??a}export{n,o as t};
@@ -1 +0,0 @@
1
- import{Gn as e,Jn as t,qn as n}from"./example-BIrQab7K.js";import{t as r}from"./useCompositeItem-CvG1CBEV.js";function i(i){let{render:a,className:o,style:s,state:c=t,props:l=n,refs:u=n,metadata:d,stateAttributesMapping:f,tag:p=`div`,...m}=i,{compositeProps:h,compositeRef:g}=r({metadata:d});return e(p,i,{state:c,ref:[...u,g],props:[h,...l,m],stateAttributesMapping:f})}export{i as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";import{$n as n,At as r,Ct as i,Dt as a,Et as o,Gn as s,Jn as c,Ot as l,Sn as u,St as d,Tt as f,Zn as p,ir as m,jt as h,m as g,qn as _,wt as v}from"./example-BIrQab7K.js";import{s as y}from"./index-Cz4UGUT2.js";import{r as b}from"./useCompositeListItem-CcY0U1bY.js";import{t as x}from"./isElementDisabled-KSuuBj8D.js";import{_ as S,a as C,c as w,g as T,h as E,i as D,l as O,m as ee,n as k,o as A,r as j,t as M,u as N}from"./composite-B-19wwf9.js";var P=e(t()),F=`data-composite-item-active`,I=[];function L(e){let{itemSizes:t,cols:n=1,loopFocus:s=!0,onLoop:c,dense:g=!1,orientation:_=`both`,direction:y,highlightedIndex:b,onHighlightedIndexChange:N,rootRef:F,enableHomeAndEndKeys:L=!1,stopEventPropagation:z=!1,disabledIndices:B,modifierKeys:V=I}=e,[H,U]=P.useState(0),W=n>1,G=P.useRef(null),K=p(G,F),q=P.useRef([]),J=P.useRef(!1),Y=b??H,X=m((e,t=!1)=>{if((N??U)(e),t){let t=q.current[e];S(G.current,t,y,_)}}),Z=m(e=>{if(e.size===0||J.current)return;J.current=!0;let t=Array.from(e.keys()),n=t.find(e=>e?.hasAttribute(`data-composite-item-active`))??null,r=n?t.indexOf(n):-1;r!==-1&&X(r),S(G.current,n,y,_)}),Q=m((e,t,n)=>c?c?.(e,t,n,q):n),$=P.useMemo(()=>({"aria-orientation":_===`both`?void 0:_,ref:K,onFocus(e){let t=G.current,n=u(e.nativeEvent);!t||n==null||!T(n)||n.setSelectionRange(0,n.value.length??0)},onKeyDown(e){let p=L?A:k;if(!p.has(e.key)||R(e,V)||!G.current)return;let m=y===`rtl`,b=m?j:D,S={horizontal:b,vertical:M,both:b}[_],N=m?D:j,P={horizontal:N,vertical:C,both:N}[_],F=u(e.nativeEvent);if(F!=null&&T(F)&&!x(F)){let t=F.selectionStart,n=F.selectionEnd,r=F.value??``;if(t==null||e.shiftKey||t!==n||e.key!==P&&t<r.length||e.key!==S&&t>0)return}let I=Y,H=l(q,B),U=a(q,B);if(W){let r=t||Array.from({length:q.current.length},()=>({width:1,height:1})),i=d(r,n,g),a=i.findIndex(e=>e!=null&&!h(q.current,e,B)),c=i.reduce((e,t,n)=>t!=null&&!h(q.current,t,B)?n:e,-1);I=i[o(i.map(e=>e==null?null:q.current[e]),{event:e,orientation:_,loopFocus:s,onLoop:Q,cols:n,disabledIndices:f([...B||q.current.map((e,t)=>h(q.current,t)?t:void 0),void 0],i),minIndex:a,maxIndex:c,prevIndex:v(Y>U?H:Y,r,i,n,e.key===`ArrowDown`?`bl`:e.key===`ArrowRight`?`tr`:`tl`),rtl:m})]}let K={horizontal:[b],vertical:[M],both:[b,M]}[_],J={horizontal:[N],vertical:[C],both:[N,C]}[_],Z=W?p:{horizontal:L?O:w,vertical:L?E:ee,both:p}[_];L&&(e.key===`Home`?I=H:e.key===`End`&&(I=U)),I===Y&&(K.includes(e.key)||J.includes(e.key))&&(s&&I===U&&K.includes(e.key)?(I=H,c&&(I=c(e,Y,I,q))):s&&I===H&&J.includes(e.key)?(I=U,c&&(I=c(e,Y,I,q))):I=i(q.current,{startingIndex:I,decrement:J.includes(e.key),disabledIndices:B})),I!==Y&&!r(q.current,I)&&(z&&e.stopPropagation(),Z.has(e.key)&&e.preventDefault(),X(I,!0),queueMicrotask(()=>{q.current[I]?.focus()}))}}),[n,g,y,B,q,L,Y,W,t,s,c,Q,K,V,X,_,z]);return P.useMemo(()=>({props:$,highlightedIndex:Y,onHighlightedIndexChange:X,elementsRef:q,disabledIndices:B,onMapChange:Z,relayKeyboardEvent:$.onKeyDown}),[$,Y,X,q,B,Z])}function R(e,t){for(let n of N.values())if(!t.includes(n)&&e.getModifierState(n))return!0;return!1}var z=y();function B(e){let{render:t,className:r,style:i,refs:a=_,props:o=_,state:l=c,stateAttributesMapping:u,highlightedIndex:d,onHighlightedIndexChange:f,orientation:p,dense:m,itemSizes:h,loopFocus:v,onLoop:y,cols:x,enableHomeAndEndKeys:S,onMapChange:C,stopEventPropagation:w=!0,rootRef:T,disabledIndices:E,modifierKeys:D,highlightItemOnHover:O=!1,tag:ee=`div`,...k}=e,{props:A,highlightedIndex:j,onHighlightedIndexChange:M,elementsRef:N,onMapChange:F,relayKeyboardEvent:I}=L({itemSizes:h,cols:x,loopFocus:v,onLoop:y,dense:m,orientation:p,highlightedIndex:d,onHighlightedIndexChange:f,rootRef:T,stopEventPropagation:w,enableHomeAndEndKeys:S,direction:g(),disabledIndices:E,modifierKeys:D}),R=s(ee,e,{state:l,ref:a,props:[A,...o,k],stateAttributesMapping:u}),B=P.useMemo(()=>({highlightedIndex:j,onHighlightedIndexChange:M,highlightItemOnHover:O,relayKeyboardEvent:I}),[j,M,O,I]);return(0,z.jsx)(n.Provider,{value:B,children:(0,z.jsx)(b,{elementsRef:N,onMapChange:e=>{C?.(e),F(e)},children:R})})}export{F as n,B as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";import{A as n,D as r,E as i,F as a,Gn as o,Ht as s,I as c,Jn as l,L as u,M as d,N as f,O as p,P as m,Qn as h,Qt as g,R as _,Rn as v,Sn as y,V as b,W as x,Y as S,Z as C,_ as w,at as T,b as E,g as D,j as O,k,nr as A,qt as j,st as M,tr as N,v as P,xn as F}from"./example-BIrQab7K.js";import{s as I}from"./index-Cz4UGUT2.js";import{a as L,i as ee,n as te,o as ne,r as R}from"./useOpenInteractionType-eyZ6twES.js";import{t as z}from"./inertValue-BVXUUuS4.js";import{o as B}from"./composite-B-19wwf9.js";var V=e(t()),H=V.createContext(!1),U=V.createContext(void 0);function W(e){let t=V.useContext(U);if(e===!1&&t===void 0)throw Error(N(27));return t}var G={...P,...b},K=V.forwardRef(function(e,t){let{render:n,className:r,style:i,forceRender:a=!1,...s}=e,{store:c}=W(),l=c.useState(`open`),u=c.useState(`nested`),d=c.useState(`mounted`);return o(`div`,e,{state:{open:l,transitionStatus:c.useState(`transitionStatus`)},ref:[c.context.backdropRef,t],stateAttributesMapping:G,props:[{role:`presentation`,hidden:!d,style:{userSelect:`none`,WebkitUserSelect:`none`}},s],enabled:a||!u})}),q=V.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:c=!0,...l}=e,{store:u}=W(),d=u.useState(`open`),{getButtonProps:f,buttonRef:p}=h({disabled:a,native:c}),m={disabled:a};function g(e){d&&u.setOpen(!1,s(j,e.nativeEvent))}return o(`button`,e,{state:m,ref:[t,p],props:[{onClick:g},l,f]})}),J=V.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,{store:c}=W(),l=D(a);return c.useSyncedValueWithCleanup(`descriptionElementId`,l),o(`p`,e,{ref:t,props:[{id:l},s]})}),Y=function(e){return e.nestedDialogs=`--nested-dialogs`,e}({}),X=function(e){return e[e.open=w.open]=`open`,e[e.closed=w.closed]=`closed`,e[e.startingStyle=w.startingStyle]=`startingStyle`,e[e.endingStyle=w.endingStyle]=`endingStyle`,e.nested=`data-nested`,e.nestedDialogOpen=`data-nested-dialog-open`,e}({}),Z=V.createContext(void 0);function re(){let e=V.useContext(Z);if(e===void 0)throw Error(N(26));return e}var Q=I(),ie={...P,...b,nestedDialogOpen(e){return e?{[X.nestedDialogOpen]:``}:null}},ae=V.forwardRef(function(e,t){let{render:r,className:i,style:a,finalFocus:s,initialFocus:c,...l}=e,{store:u}=W(),d=u.useState(`descriptionElementId`),f=u.useState(`disablePointerDismissal`),p=u.useState(`floatingRootContext`),m=u.useState(`popupProps`),h=u.useState(`modal`),g=u.useState(`mounted`),v=u.useState(`nested`),y=u.useState(`nestedOpenDialogCount`),b=u.useState(`open`),x=u.useState(`openMethod`),S=u.useState(`titleElementId`),C=u.useState(`transitionStatus`),w=u.useState(`role`),T=p.useState(`floatingId`),E=l.id??T;re(),_({open:b,ref:u.context.popupRef,onComplete(){b&&u.context.onOpenChangeComplete?.(!0)}});function D(e){return e===`touch`?u.context.popupRef.current:!0}let O=c===void 0?D:c,k=y>0,A=u.useStateSetter(`popupElement`),j=o(`div`,e,{state:{open:b,nested:v,transitionStatus:C,nestedDialogOpen:k},props:[m,{id:E,"aria-labelledby":S??void 0,"aria-describedby":d??void 0,role:w,...n,hidden:!g,onKeyDown(e){B.has(e.key)&&e.stopPropagation()},style:{[Y.nestedDialogs]:y}},l],ref:[t,u.context.popupRef,A],stateAttributesMapping:ie});return(0,Q.jsx)(ne,{context:p,openInteractionType:x,disabled:!g,closeOnFocusOut:!f,initialFocus:O,returnFocus:s,modal:h!==!1,restoreFocus:`popup`,children:j})}),oe=V.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i}=W(),a=i.useState(`mounted`),o=i.useState(`modal`),s=i.useState(`open`);return a||n?(0,Q.jsx)(Z.Provider,{value:n,children:(0,Q.jsxs)(T,{ref:t,...r,children:[a&&o===!0&&(0,Q.jsx)(ee,{ref:i.context.internalBackdropRef,inert:z(!s)}),e.children]})}):null});function se(e){let{store:t,parentContext:n,actionsRef:r,isDrawer:i}=e,o=t.useState(`open`);a(t,o),d(t);let{forceUnmount:c}=f(o,t),l=V.useCallback(()=>{t.setOpen(!1,s(g))},[t]);return V.useImperativeHandle(r,()=>({unmount:c,close:l}),[c,l]),{parentContext:n,isDrawer:i}}function ce({store:e,dialogRoot:t}){let{parentContext:r,isDrawer:i}=t,a=e.useState(`open`),o=e.useState(`disablePointerDismissal`),s=e.useState(`modal`),c=e.useState(`popupElement`),u=e.useState(`floatingRootContext`),[d,f]=V.useState(0),[p,h]=V.useState(0),g=d===0,_=C(u,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?`intentional`:{mouse:s===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(t){if(!e.context.outsidePressEnabledRef.current||`button`in t&&t.button!==0||`touches`in t&&t.touches.length!==1)return!1;let n=y(t);if(g&&!o){let t=n;return s&&(e.context.internalBackdropRef.current||e.context.backdropRef.current)?e.context.internalBackdropRef.current===t||e.context.backdropRef.current===t||F(t,c)&&!t?.hasAttribute(`data-base-ui-portal`):!0}return!1},escapeKey:g});return R(a&&s===!0,c),e.useContextCallback(`onNestedDialogOpen`,(e,t)=>{f(e),h(t)}),e.useContextCallback(`onNestedDialogClose`,()=>{f(0),h(0)}),V.useEffect(()=>(r?.onNestedDialogOpen&&a&&r.onNestedDialogOpen(d+1,p+ +!!i),r?.onNestedDialogClose&&!a&&r.onNestedDialogClose(),()=>{r?.onNestedDialogClose&&a&&r.onNestedDialogClose()}),[i,a,d,p,r]),m(e,{activeTriggerProps:_.reference??l,inactiveTriggerProps:_.trigger??l,popupProps:V.useMemo(()=>A(n,_.floating),[_.floating]),nestedOpenDialogCount:d,nestedOpenDrawerCount:p}),null}var le={...p,modal:S(e=>e.modal),nested:S(e=>e.nested),nestedOpenDialogCount:S(e=>e.nestedOpenDialogCount),nestedOpenDrawerCount:S(e=>e.nestedOpenDrawerCount),disablePointerDismissal:S(e=>e.disablePointerDismissal),openMethod:S(e=>e.openMethod),descriptionElementId:S(e=>e.descriptionElementId),titleElementId:S(e=>e.titleElementId),viewportElement:S(e=>e.viewportElement),role:S(e=>e.role)},$=class e extends x{constructor(e,t,n=!1){let i=new k,a=ue(e);a.floatingRootContext=r(i,t,n),super(a,{popupRef:V.createRef(),backdropRef:V.createRef(),internalBackdropRef:V.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:i,onOpenChange:void 0,onOpenChangeComplete:void 0},le)}setOpen=(e,t)=>{if(t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(e,t);let n={open:e};O(n,e,t.trigger),this.update(n)};static useStore(t,n){return c(t,(t,r)=>new e(n,t,r),!0).store}};function ue(e={}){return{...i(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:`dialog`,...e}}function de(e,t=`dialog`){let{children:n,open:r,defaultOpen:i=!1,onOpenChange:a,onOpenChangeComplete:o,disablePointerDismissal:s=!1,modal:c=!0,actionsRef:l,handle:u,triggerId:d,defaultTriggerId:f=null}=e,p=t===`drawer`,m=t===`alert-dialog`,h=m?!0:c,g=m||s,_=m?`alertdialog`:`dialog`,y=W(!0),b={modal:h,disablePointerDismissal:g,nested:!!y,role:_},x=$.useStore(u?.store,{open:i,openProp:r,activeTriggerId:f,triggerIdProp:d,...b});v(()=>{let e=r===void 0&&x.state.open===!1&&i===!0?{open:!0,activeTriggerId:f}:null;m?x.update(e?{...b,...e}:b):e&&x.update(e)}),x.useControlledProp(`openProp`,r),x.useControlledProp(`triggerIdProp`,d),x.useSyncedValues(b),x.useContextCallback(`onOpenChange`,a),x.useContextCallback(`onOpenChangeComplete`,o);let S=x.useState(`open`),C=x.useState(`mounted`),w=x.useState(`payload`),T=se({store:x,actionsRef:l,parentContext:y?.store.context,isDrawer:p}),E=S||C,D=V.useMemo(()=>({store:x}),[x]);return(0,Q.jsx)(H.Provider,{value:!1,children:(0,Q.jsxs)(U.Provider,{value:D,children:[E&&(0,Q.jsx)(ce,{store:x,dialogRoot:T}),typeof n==`function`?n({payload:w}):n]})})}function fe(e){return de(e,V.useContext(H)?`drawer`:`dialog`)}var pe=V.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...s}=e,{store:c}=W(),l=D(a);return c.useSyncedValueWithCleanup(`titleElementId`,l),o(`h2`,e,{ref:t,props:[{id:l},s]})}),me=V.forwardRef(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:s=!0,id:c,payload:l,handle:d,...f}=e,p=W(!0),m=d?.store??p?.store;if(!m)throw Error(N(79));let g=D(c),_=m.useState(`floatingRootContext`),v=m.useState(`isOpenedByTrigger`,g),y=m.useState(`triggerPopupId`,g),b=V.useRef(null),{registerTrigger:x,isMountedByThisTrigger:S}=u(g,b,m,{payload:l}),{getButtonProps:C,buttonRef:w}=h({disabled:a,native:s}),T=L(_,{enabled:_!=null}),O=te(()=>m.select(`open`),e=>{m.set(`openMethod`,e)}),k={disabled:a,open:v},A=m.useState(`triggerProps`,S);return o(`button`,e,{state:k,ref:[w,t,x,b],props:[T.reference,A,O,{[M]:``,id:g,"aria-haspopup":`dialog`,"aria-expanded":v,"aria-controls":y},f,C],stateAttributesMapping:E})});export{ae as a,K as c,oe as i,pe as n,J as o,fe as r,q as s,me as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";var n=e(t()),r=n.createContext({disabled:!1});function i(){return n.useContext(r)}export{i as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";import{Yn as n}from"./example-BIrQab7K.js";var r=e(t()),i=r.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:n,validationMode:`onSubmit`,submitAttemptedRef:{current:!1}});function a(){return r.useContext(i)}export{a as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{n as t}from"./react-dom-Bz4cALsF.js";import{Jn as n,Yn as r,rr as i,tr as a}from"./example-BIrQab7K.js";var o=e(t()),s=function(e){return e.disabled=`data-disabled`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.filled=`data-filled`,e.focused=`data-focused`,e}({}),c={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},l={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},u={disabled:!1,...l},d={valid(e){return e===null?null:e?{[s.valid]:``}:{[s.invalid]:``}}},f={invalid:void 0,name:void 0,validityData:{state:c,errors:[],error:``,value:``,initialValue:null},setValidityData:r,disabled:void 0,touched:l.touched,setTouched:r,dirty:l.dirty,setDirty:r,filled:l.filled,setFilled:r,focused:l.focused,setFocused:r,validate:()=>null,validationMode:`onSubmit`,validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:u,markedDirtyRef:{current:!1},registerFieldControl:r,validation:{getValidationProps:(e=n)=>e,getInputValidationProps:(e=n)=>e,inputRef:{current:null},commit:async()=>{}}},p=o.createContext(f);function m(e=!0){let t=o.useContext(p);if(t.setValidityData===r&&!e)throw Error(a(28));return t}function h(e,t,n,r,a=!0){let{registerFieldControl:s}=m(),c=o.useRef(null);c.current||=Symbol(),i(()=>{let i=c.current;if(!(!i||!a))return s(i,{controlRef:e,getValue:r,id:t,value:n}),()=>{s(i,void 0)}},[e,a,r,t,s,n])}var g=o.createContext({controlId:void 0,registerControlId:r,labelId:void 0,setLabelId:r,messageIds:[],setMessageIds:r,getDescriptionProps:e=>e});function _(){return o.useContext(g)}export{m as a,p as i,h as n,l as o,f as r,d as s,_ as t};