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
@@ -1,20 +1,24 @@
1
1
  ---
2
2
  id: ui/overlays
3
3
  title: "UI · Overlays"
4
- description: "Dialog, Sheet, Popover, Tooltip, HoverCard."
4
+ description: "Dialog, AlertDialog, Sheet, Drawer, Popover, Tooltip, and HoverCard."
5
5
  layer: ui
6
6
  family: "Overlays"
7
7
  sourcePath: src/components/ui
8
8
  examples:
9
9
  - DialogExample
10
+ - AlertDialogExample
10
11
  - SheetExample
12
+ - DrawerExample
11
13
  - PopoverExample
12
14
  - TooltipExample
13
15
  - HoverCardExample
14
16
  imports:
15
17
  - @/components/base/sheet
18
+ - @/components/ui/alert-dialog
16
19
  - @/components/ui/button
17
20
  - @/components/ui/dialog
21
+ - @/components/ui/drawer
18
22
  - @/components/ui/hover-card
19
23
  - @/components/ui/popover
20
24
  - @/components/ui/tooltip
@@ -22,14 +26,14 @@ tags:
22
26
  - ui
23
27
  - overlays
24
28
  - dialog
29
+ - alertdialog
25
30
  - sheet
26
- - popover
27
- - tooltip
31
+ - drawer
28
32
  ---
29
33
 
30
34
  # UI · Overlays
31
35
 
32
- Dialog, Sheet, Popover, Tooltip, HoverCard.
36
+ Dialog, AlertDialog, Sheet, Drawer, Popover, Tooltip, and HoverCard.
33
37
 
34
38
  **Layer:** `ui`
35
39
  **Source:** `src/components/ui`
@@ -38,8 +42,29 @@ Dialog, Sheet, Popover, Tooltip, HoverCard.
38
42
 
39
43
  ```tsx
40
44
  import { useState } from 'react';
45
+ import {
46
+ AlertDialog,
47
+ AlertDialogAction,
48
+ AlertDialogCancel,
49
+ AlertDialogContent,
50
+ AlertDialogDescription,
51
+ AlertDialogFooter,
52
+ AlertDialogHeader,
53
+ AlertDialogTitle,
54
+ AlertDialogTrigger,
55
+ } from '@/components/ui/alert-dialog';
41
56
  import { Button } from '@/components/ui/button';
42
57
  import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
58
+ import {
59
+ Drawer,
60
+ DrawerClose,
61
+ DrawerContent,
62
+ DrawerDescription,
63
+ DrawerFooter,
64
+ DrawerHeader,
65
+ DrawerTitle,
66
+ DrawerTrigger,
67
+ } from '@/components/ui/drawer';
43
68
  import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/base/sheet';
44
69
  import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
45
70
  import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
@@ -51,18 +76,42 @@ export function DialogExample() {
51
76
  return (
52
77
  <>
53
78
  <Dialog open={open} onOpenChange={setOpen}>
54
- <DialogTrigger render={(p) => <Button {...p}>Open dialog</Button>} />
55
- <DialogContent>
56
- <DialogHeader>
57
- <DialogTitle>Confirm action</DialogTitle>
58
- <DialogDescription>This is a controlled dialog.</DialogDescription>
59
- </DialogHeader>
60
- <DialogFooter>
61
- <Button variant="outline" onClick={() => setOpen(false)}>Cancel</Button>
62
- <Button onClick={() => setOpen(false)}>Confirm</Button>
63
- </DialogFooter>
64
- </DialogContent>
65
- </Dialog>
79
+ <DialogTrigger render={(p) => <Button {...p}>Open dialog</Button>} />
80
+ <DialogContent>
81
+ <DialogHeader>
82
+ <DialogTitle>Confirm action</DialogTitle>
83
+ <DialogDescription>This is a controlled dialog.</DialogDescription>
84
+ </DialogHeader>
85
+ <DialogFooter>
86
+ <Button variant="outline" onClick={() => setOpen(false)}>Cancel</Button>
87
+ <Button onClick={() => setOpen(false)}>Confirm</Button>
88
+ </DialogFooter>
89
+ </DialogContent>
90
+ </Dialog>
91
+ </>
92
+ );
93
+ }
94
+
95
+ export function AlertDialogExample() {
96
+ const [open, setOpen] = useState(false);
97
+
98
+ return (
99
+ <>
100
+ <AlertDialog open={open} onOpenChange={setOpen}>
101
+ <AlertDialogTrigger render={(p) => <Button variant="outline" {...p}>Open alert dialog</Button>} />
102
+ <AlertDialogContent>
103
+ <AlertDialogHeader>
104
+ <AlertDialogTitle>Archive workspace?</AlertDialogTitle>
105
+ <AlertDialogDescription>
106
+ This action removes the workspace from active views.
107
+ </AlertDialogDescription>
108
+ </AlertDialogHeader>
109
+ <AlertDialogFooter>
110
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
111
+ <AlertDialogAction onClick={() => setOpen(false)}>Archive</AlertDialogAction>
112
+ </AlertDialogFooter>
113
+ </AlertDialogContent>
114
+ </AlertDialog>
66
115
  </>
67
116
  );
68
117
  }
@@ -71,15 +120,39 @@ export function SheetExample() {
71
120
  return (
72
121
  <>
73
122
  <Sheet>
74
- <SheetTrigger render={(p) => <Button variant="outline" {...p}>Open sheet</Button>} />
75
- <SheetContent>
76
- <SheetHeader>
77
- <SheetTitle>Sheet title</SheetTitle>
78
- <SheetDescription>Side-anchored panel.</SheetDescription>
79
- </SheetHeader>
80
- <div className="px-4 py-2 text-sm">Sheet body content.</div>
81
- </SheetContent>
82
- </Sheet>
123
+ <SheetTrigger render={(p) => <Button variant="outline" {...p}>Open sheet</Button>} />
124
+ <SheetContent>
125
+ <SheetHeader>
126
+ <SheetTitle>Sheet title</SheetTitle>
127
+ <SheetDescription>Side-anchored panel.</SheetDescription>
128
+ </SheetHeader>
129
+ <div className="px-4 py-2 text-sm">Sheet body content.</div>
130
+ </SheetContent>
131
+ </Sheet>
132
+ </>
133
+ );
134
+ }
135
+
136
+ export function DrawerExample() {
137
+ return (
138
+ <>
139
+ <Drawer direction="right">
140
+ <DrawerTrigger asChild>
141
+ <Button variant="outline">Open drawer</Button>
142
+ </DrawerTrigger>
143
+ <DrawerContent>
144
+ <DrawerHeader>
145
+ <DrawerTitle>Drawer title</DrawerTitle>
146
+ <DrawerDescription>Vaul-powered side panel.</DrawerDescription>
147
+ </DrawerHeader>
148
+ <div className="px-4 py-2 text-sm">Drawer body content.</div>
149
+ <DrawerFooter>
150
+ <DrawerClose asChild>
151
+ <Button variant="outline">Close</Button>
152
+ </DrawerClose>
153
+ </DrawerFooter>
154
+ </DrawerContent>
155
+ </Drawer>
83
156
  </>
84
157
  );
85
158
  }
@@ -88,11 +161,11 @@ export function PopoverExample() {
88
161
  return (
89
162
  <>
90
163
  <Popover>
91
- <PopoverTrigger render={(p) => <Button variant="outline" {...p}>Open popover</Button>} />
92
- <PopoverContent className="w-64 text-sm">
93
- Popover content with arbitrary children.
94
- </PopoverContent>
95
- </Popover>
164
+ <PopoverTrigger render={(p) => <Button variant="outline" {...p}>Open popover</Button>} />
165
+ <PopoverContent className="w-64 text-sm">
166
+ Popover content with arbitrary children.
167
+ </PopoverContent>
168
+ </Popover>
96
169
  </>
97
170
  );
98
171
  }
@@ -101,11 +174,11 @@ export function TooltipExample() {
101
174
  return (
102
175
  <>
103
176
  <Row>
104
- <Tooltip>
105
- <TooltipTrigger render={(p) => <Button variant="outline" {...p}>Hover me</Button>} />
106
- <TooltipContent>Hello, I'm a tooltip.</TooltipContent>
107
- </Tooltip>
108
- </Row>
177
+ <Tooltip>
178
+ <TooltipTrigger render={(p) => <Button variant="outline" {...p}>Hover me</Button>} />
179
+ <TooltipContent>Hello, I'm a tooltip.</TooltipContent>
180
+ </Tooltip>
181
+ </Row>
109
182
  </>
110
183
  );
111
184
  }
@@ -114,13 +187,13 @@ export function HoverCardExample() {
114
187
  return (
115
188
  <>
116
189
  <HoverCard>
117
- <HoverCardTrigger render={(p) => <Button variant="link" {...p}>@maria</Button>} />
118
- <HoverCardContent className="w-64 text-sm">
119
- <div className="font-medium">Sarah Smitha</div>
120
- <div className="text-muted-foreground">Account Manager</div>
121
- <div className="mt-2 text-xs text-muted-foreground">Joined Jan 2023.</div>
122
- </HoverCardContent>
123
- </HoverCard>
190
+ <HoverCardTrigger render={(p) => <Button variant="link" {...p}>@maria</Button>} />
191
+ <HoverCardContent className="w-64 text-sm">
192
+ <div className="font-medium">Sarah Smitha</div>
193
+ <div className="text-muted-foreground">Account Manager</div>
194
+ <div className="mt-2 text-xs text-muted-foreground">Joined Jan 2023.</div>
195
+ </HoverCardContent>
196
+ </HoverCard>
124
197
  </>
125
198
  );
126
199
  }
@@ -129,7 +202,9 @@ export function HoverCardExample() {
129
202
  ## Example exports
130
203
 
131
204
  - `DialogExample`
205
+ - `AlertDialogExample`
132
206
  - `SheetExample`
207
+ - `DrawerExample`
133
208
  - `PopoverExample`
134
209
  - `TooltipExample`
135
210
  - `HoverCardExample`
package/AGENTS.md CHANGED
@@ -13,9 +13,9 @@ good or bad. Fixes propagate everywhere; mistakes do too.
13
13
 
14
14
  The architectural goals — and the reason every rule below exists — are:
15
15
 
16
- 1. **Centralized**: shadcn primitives, typography, base wrappers,
17
- composed surfaces, and feature shells all ship from one place.
18
- Consumers upgrade once.
16
+ 1. **Centralized**: shadcn primitives live internally, while typography,
17
+ base wrappers, composed surfaces, and feature shells ship as the
18
+ public package surface. Consumers upgrade once.
19
19
  2. **Framework-agnostic**: Inertia, Tanstack Router, RR7, Next.js, plain
20
20
  Vite, anywhere. Routing, i18n, and data fetching arrive via callbacks
21
21
  and props at each call site. **The library never imports any framework
@@ -106,7 +106,10 @@ Hard rules (full detail in the skill):
106
106
  data / i18n at the call site via direct props
107
107
  (`onSubmit`, `onSelect`, `fetcher`, `strings`, …).
108
108
  - Direct imports from `@/components/ui/*` are allowed **only** inside
109
- the matching `base/` wrapper. Anywhere else, use the wrapper.
109
+ the matching `base/` wrapper. Anywhere else, use the wrapper. Raw
110
+ `src/components/ui/*` files are not public package entrypoints;
111
+ consumers use `admin-ui-starter-kit/base/<family>`,
112
+ `admin-ui-starter-kit/features/<feature>`, etc.
110
113
  - Published package imports are exact subpaths. The root entrypoint
111
114
  exports only optional-peer-free utilities/provider; `base`,
112
115
  `composed`, and `features` aggregate entrypoints are intentionally
package/README.md CHANGED
@@ -56,7 +56,7 @@ exactly your tool.**
56
56
 
57
57
  ## Seven non-negotiable principles
58
58
 
59
- 1. **Layered architecture.** `ui/` (shadcn primitives, never edited) →
59
+ 1. **Layered architecture.** `ui/` (internal shadcn primitives, never edited) →
60
60
  `typography/` → `base/` (typography-aware wrappers) → `layout/`
61
61
  (app shells) and `composed/` (domain rows + cards) → `features/`
62
62
  (callback-driven feature surfaces). Enforced by `npm run lint:architecture`.
@@ -84,9 +84,9 @@ exactly your tool.**
84
84
 
85
85
  ## What this is not
86
86
 
87
- - **A drop-in replacement for `shadcn/ui`** — it builds on top of shadcn,
88
- doesn't replace it. You still install + customise shadcn primitives the
89
- way shadcn intends.
87
+ - **A public `shadcn/ui` mirror** — it builds on top of shadcn, but raw
88
+ `src/components/ui/*` files are an internal maintainer layer. Consumers use
89
+ the exact package entrypoints documented below.
90
90
  - **A marketing-site UI kit** — no hero sections, no landing-page blocks. Use
91
91
  it for app interiors.
92
92
  - **Coupled to any backend** — everything is callback-driven, you bring the
@@ -362,6 +362,11 @@ Safe public entrypoint shapes:
362
362
  - `admin-ui-starter-kit/lib/strings`
363
363
  - `admin-ui-starter-kit/lib/utils`
364
364
 
365
+ Raw shadcn primitives under `src/components/ui/*` are intentionally not public
366
+ package exports. If a consumer needs Tabs, import the library wrapper surface
367
+ that owns that pattern, such as `admin-ui-starter-kit/base/navigation`, rather
368
+ than `admin-ui-starter-kit/ui/tabs`.
369
+
365
370
  Avoid broad component imports such as `admin-ui-starter-kit/base`,
366
371
  `admin-ui-starter-kit/composed`, or `admin-ui-starter-kit/features`; they are
367
372
  intentionally not exported. Use the exact family subpath so missing optional
@@ -370,6 +375,25 @@ peers fail only when you import the feature that needs them. The package
370
375
  null wildcard blockers are intentionally avoided because bundlers handle them
371
376
  inconsistently.
372
377
 
378
+ ### Internal shadcn primitive inventory
379
+
380
+ Maintainers can add shadcn primitives with
381
+ `npx shadcn@latest add <primitive>`, which writes to `src/components/ui/`.
382
+ Those files are reproducible shadcn output and should be wrapped in `base/`,
383
+ `layout/`, or `features/` before becoming a public package API.
384
+
385
+ Installed internal primitives include:
386
+ `accordion`, `alert-dialog`, `alert`, `aspect-ratio`, `avatar`, `badge`,
387
+ `breadcrumb`, `button`, `button-group`, `calendar`, `card`, `carousel`,
388
+ `chart`, `checkbox`, `collapsible`, `combobox`, `command`, `context-menu`,
389
+ `dialog`, `direction`, `drawer`, `dropdown-menu`, `empty`, `field`,
390
+ `hover-card`, `input`, `input-group`, `input-otp`, `item`, `kbd`, `label`,
391
+ `menubar`, `native-select`, `navigation-menu`, `pagination`, `popover`,
392
+ `progress`, `radio-group`, `resizable`, `scroll-area`, `select`,
393
+ `separator`, `sheet`, `sidebar`, `skeleton`, `slider`, `slot`, `sonner`,
394
+ `spinner`, `switch`, `table`, `tabs`, `textarea`, `toggle`, `toggle-group`,
395
+ and `tooltip`.
396
+
373
397
  Dropdown menus use Base UI's `render` prop for custom triggers, not Radix's
374
398
  `asChild` prop:
375
399
 
@@ -7,7 +7,7 @@ import { a, d as o, g as s, i as c, o as l, r as u, s as d, t as f } from "./dro
7
7
  import { t as p } from "./separator-B8FBp-7E.js";
8
8
  import { o as m, r as h, t as g } from "./avatar-CBi4LGxy.js";
9
9
  import { t as _ } from "./breadcrumbs-bJ-J0oCd.js";
10
- import { C as v } from "./sidebar-ux-yk-Ph.js";
10
+ import { C as v } from "./sidebar-C5DApiDy.js";
11
11
  import { d as y, t as b } from "./hooks-ZiPIvs0_.js";
12
12
  import * as x from "react";
13
13
  import { useMemo as S } from "react";
@@ -115,19 +115,19 @@ function z({ onOpen: r, isMac: a, enableShortcut: o = !0, strings: s, className:
115
115
  onTrigger: r
116
116
  });
117
117
  let p = f ? d.shortcutMac : d.shortcutPc, m = u ?? /* @__PURE__ */ w("kbd", {
118
- 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",
118
+ className: "header-search--shortcut hidden h-5 shrink-0 items-center gap-1 rounded-md border border-border/70 bg-background/60 px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex",
119
119
  children: f ? /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w(O, {
120
- className: "size-3 dark:text-muted/60",
120
+ className: "size-3 text-muted-foreground",
121
121
  "aria-hidden": "true"
122
122
  }), /* @__PURE__ */ w(n, {
123
123
  tag: "span",
124
124
  size: "xs",
125
- className: "dark:text-muted/60",
125
+ type: "secondary",
126
126
  children: "K"
127
127
  })] }) : /* @__PURE__ */ w(n, {
128
128
  tag: "span",
129
129
  size: "xs",
130
- className: "dark:text-muted/60",
130
+ type: "secondary",
131
131
  children: "Ctrl+K"
132
132
  })
133
133
  });
@@ -136,18 +136,18 @@ function z({ onOpen: r, isMac: a, enableShortcut: o = !0, strings: s, className:
136
136
  variant: "secondary",
137
137
  buttonStyle: "outline",
138
138
  onClick: r,
139
- className: 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", "dark:border-topbar-accent/80 dark:bg-topbar-accent/40", c),
139
+ className: t("header-search--component header-search--trigger h-8 w-full min-w-[205px] justify-start gap-2 rounded-lg border-border/80 bg-muted/40 px-2.5 text-foreground shadow-none transition-[background-color,border-color,color,box-shadow] hover:border-border hover:bg-muted/60 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background dark:border-border/80 dark:bg-muted/40 dark:hover:bg-muted/60 dark:hover:text-foreground", c),
140
140
  title: p,
141
141
  children: [
142
142
  /* @__PURE__ */ w(A, {
143
- className: t("header-search--icon size-3.5 shrink-0 text-muted-foreground dark:text-muted/60", l),
143
+ className: t("header-search--icon size-3.5 shrink-0 text-muted-foreground", l),
144
144
  "aria-hidden": "true"
145
145
  }),
146
146
  /* @__PURE__ */ w(n, {
147
147
  tag: "span",
148
148
  size: "xs",
149
149
  type: "secondary",
150
- className: "header-search--placeholder flex-1 text-left dark:text-muted/60",
150
+ className: "header-search--placeholder flex-1 text-left",
151
151
  children: d.placeholder
152
152
  }),
153
153
  m,
@@ -357,4 +357,4 @@ function U({ notification: e, onClick: r, renderLink: i, renderNotification: o }
357
357
  //#endregion
358
358
  export { I as a, N as c, F as i, V as n, L as o, z as r, P as s, H as t };
359
359
 
360
- //# sourceMappingURL=header-BUAddfdE.js.map
360
+ //# sourceMappingURL=header-CyBTcM-L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-CyBTcM-L.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-md border border-border/70 bg-background/60 px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex\">\n\t\t\t{isMacResolved ? (\n\t\t\t\t<>\n\t\t\t\t\t<Command className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">K</Text>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">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-border/80 bg-muted/40 px-2.5 text-foreground shadow-none transition-[background-color,border-color,color,box-shadow] hover:border-border hover:bg-muted/60 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background dark:border-border/80 dark:bg-muted/40 dark:hover:bg-muted/60 dark:hover:text-foreground',\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', iconClassName)} aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"header-search--placeholder flex-1 text-left\">\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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"}
@@ -0,0 +1,2 @@
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-B_L_dnAe.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-md border border-border/70 bg-background/60 px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex`,children:g?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(m.Command,{className:`size-3 text-muted-foreground`,"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,type:`secondary`,children:`K`})]}):(0,p.jsx)(r.n,{tag:`span`,size:`xs`,type:`secondary`,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-border/80 bg-muted/40 px-2.5 text-foreground shadow-none transition-[background-color,border-color,color,box-shadow] hover:border-border hover:bg-muted/60 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background dark:border-border/80 dark:bg-muted/40 dark:hover:bg-muted/60 dark:hover:text-foreground`,c),title:_,children:[(0,p.jsx)(m.Search,{className:n.cn(`header-search--icon size-3.5 shrink-0 text-muted-foreground`,l),"aria-hidden":`true`}),(0,p.jsx)(r.n,{tag:`span`,size:`xs`,type:`secondary`,className:`header-search--placeholder flex-1 text-left`,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-kwvkesfq.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-kwvkesfq.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-md border border-border/70 bg-background/60 px-1.5 font-mono text-xxs text-muted-foreground lg:inline-flex\">\n\t\t\t{isMacResolved ? (\n\t\t\t\t<>\n\t\t\t\t\t<Command className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">K</Text>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">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-border/80 bg-muted/40 px-2.5 text-foreground shadow-none transition-[background-color,border-color,color,box-shadow] hover:border-border hover:bg-muted/60 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background dark:border-border/80 dark:bg-muted/40 dark:hover:bg-muted/60 dark:hover:text-foreground',\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', iconClassName)} aria-hidden=\"true\" />\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"header-search--placeholder flex-1 text-left\">\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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"}