@techzyapp/ui-library 1.0.25 → 1.0.27

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/dist/{AdminRoot-CgvtgUpW.js → AdminRoot-C4OyuOIr.js} +4 -4
  2. package/dist/{AdminRoot-CgvtgUpW.js.map → AdminRoot-C4OyuOIr.js.map} +1 -1
  3. package/dist/{AdminRoot-BkPPRkyQ.cjs → AdminRoot-bHywlbML.cjs} +2 -2
  4. package/dist/{AdminRoot-BkPPRkyQ.cjs.map → AdminRoot-bHywlbML.cjs.map} +1 -1
  5. package/dist/{Alert-udX1ybuC.cjs → Alert-DeGgilkH.cjs} +2 -2
  6. package/dist/{Alert-udX1ybuC.cjs.map → Alert-DeGgilkH.cjs.map} +1 -1
  7. package/dist/{Alert-DXmzM_rh.js → Alert-rNjfqj2Z.js} +3 -3
  8. package/dist/{Alert-DXmzM_rh.js.map → Alert-rNjfqj2Z.js.map} +1 -1
  9. package/dist/{AuthLayout-BRUxDgzs.cjs → AuthLayout-ChILVWZ-.cjs} +2 -2
  10. package/dist/{AuthLayout-BRUxDgzs.cjs.map → AuthLayout-ChILVWZ-.cjs.map} +1 -1
  11. package/dist/{AuthLayout-CP9qu6Bv.js → AuthLayout-zAS3jlYc.js} +2 -2
  12. package/dist/{AuthLayout-CP9qu6Bv.js.map → AuthLayout-zAS3jlYc.js.map} +1 -1
  13. package/dist/{Avatar-Q50J8wdN.js → Avatar-BGPGxry2.js} +25 -25
  14. package/dist/{Avatar-Q50J8wdN.js.map → Avatar-BGPGxry2.js.map} +1 -1
  15. package/dist/Avatar-D_YivyqV.cjs +2 -0
  16. package/dist/{Avatar-Dgf04PBC.cjs.map → Avatar-D_YivyqV.cjs.map} +1 -1
  17. package/dist/{AvatarGroup-uW0SD5P4.cjs → AvatarGroup-Bnf_RSc9.cjs} +2 -2
  18. package/dist/{AvatarGroup-uW0SD5P4.cjs.map → AvatarGroup-Bnf_RSc9.cjs.map} +1 -1
  19. package/dist/{AvatarGroup-YaNasLMS.js → AvatarGroup-Difz4lLR.js} +2 -2
  20. package/dist/{AvatarGroup-YaNasLMS.js.map → AvatarGroup-Difz4lLR.js.map} +1 -1
  21. package/dist/Badge-BmFgusOa.js +50 -0
  22. package/dist/{Badge-DSWigoGC.js.map → Badge-BmFgusOa.js.map} +1 -1
  23. package/dist/Badge-DVbe1rAI.cjs +2 -0
  24. package/dist/{Badge-BQpr2Jee.cjs.map → Badge-DVbe1rAI.cjs.map} +1 -1
  25. package/dist/{Breadcrumbs-DQHHeLId.js → Breadcrumbs-BJHKk0Sn.js} +3 -3
  26. package/dist/{Breadcrumbs-DQHHeLId.js.map → Breadcrumbs-BJHKk0Sn.js.map} +1 -1
  27. package/dist/{Breadcrumbs-CsYTiX2h.cjs → Breadcrumbs-CGcpMlxm.cjs} +2 -2
  28. package/dist/{Breadcrumbs-CsYTiX2h.cjs.map → Breadcrumbs-CGcpMlxm.cjs.map} +1 -1
  29. package/dist/Button-BZ_o-akc.cjs +2 -0
  30. package/dist/{Button-CXmDOzPk.cjs.map → Button-BZ_o-akc.cjs.map} +1 -1
  31. package/dist/Button-obe6rono.js +72 -0
  32. package/dist/{Button-DBs8xnA5.js.map → Button-obe6rono.js.map} +1 -1
  33. package/dist/{Calendar-CtteUt82.js → Calendar-SCih0NtS.js} +4 -4
  34. package/dist/{Calendar-CtteUt82.js.map → Calendar-SCih0NtS.js.map} +1 -1
  35. package/dist/{Calendar-B2nMXk4C.cjs → Calendar-lfpNwivC.cjs} +2 -2
  36. package/dist/{Calendar-B2nMXk4C.cjs.map → Calendar-lfpNwivC.cjs.map} +1 -1
  37. package/dist/{Card-DYKnWt-L.js → Card-BRJV2JZE.js} +2 -2
  38. package/dist/{Card-DYKnWt-L.js.map → Card-BRJV2JZE.js.map} +1 -1
  39. package/dist/{Card-DGF22HbS.cjs → Card-KvvNlchc.cjs} +2 -2
  40. package/dist/{Card-DGF22HbS.cjs.map → Card-KvvNlchc.cjs.map} +1 -1
  41. package/dist/{Chip-DdKhcstm.js → Chip-CQ4cYVl_.js} +31 -31
  42. package/dist/{Chip-DdKhcstm.js.map → Chip-CQ4cYVl_.js.map} +1 -1
  43. package/dist/Chip-CYz4vxHm.cjs +2 -0
  44. package/dist/{Chip-gUH_7nQc.cjs.map → Chip-CYz4vxHm.cjs.map} +1 -1
  45. package/dist/ChoiceCardGroup-D3HL7dHj.js +181 -0
  46. package/dist/{ChoiceCardGroup-DBohUnRj.js.map → ChoiceCardGroup-D3HL7dHj.js.map} +1 -1
  47. package/dist/ChoiceCardGroup-pIOKIUI0.cjs +2 -0
  48. package/dist/{ChoiceCardGroup-d0VVTUi5.cjs.map → ChoiceCardGroup-pIOKIUI0.cjs.map} +1 -1
  49. package/dist/{CodeBlock-DD_d3-sM.js → CodeBlock-DddGTLu1.js} +3 -3
  50. package/dist/{CodeBlock-DD_d3-sM.js.map → CodeBlock-DddGTLu1.js.map} +1 -1
  51. package/dist/{CodeBlock-C6tQtbHU.cjs → CodeBlock-H75dbOvg.cjs} +2 -2
  52. package/dist/{CodeBlock-C6tQtbHU.cjs.map → CodeBlock-H75dbOvg.cjs.map} +1 -1
  53. package/dist/ColorPicker-CKc8k-Dp.cjs +2 -0
  54. package/dist/ColorPicker-CKc8k-Dp.cjs.map +1 -0
  55. package/dist/{ColorPicker-Dw6Qk0iy.js → ColorPicker-Cw-2X6u9.js} +35 -26
  56. package/dist/ColorPicker-Cw-2X6u9.js.map +1 -0
  57. package/dist/ColorPickerPanel-DQ4CFnGa.cjs +2 -0
  58. package/dist/ColorPickerPanel-DQ4CFnGa.cjs.map +1 -0
  59. package/dist/ColorPickerPanel-PYaF5wPL.js +322 -0
  60. package/dist/ColorPickerPanel-PYaF5wPL.js.map +1 -0
  61. package/dist/ColorRamp-AkY9gq6Y.cjs +2 -0
  62. package/dist/ColorRamp-AkY9gq6Y.cjs.map +1 -0
  63. package/dist/ColorRamp-DnlJNKfy.js +126 -0
  64. package/dist/ColorRamp-DnlJNKfy.js.map +1 -0
  65. package/dist/{ConfigProvider-Bszl3Wr3.cjs → ConfigProvider-BicoaBLj.cjs} +2 -2
  66. package/dist/ConfigProvider-BicoaBLj.cjs.map +1 -0
  67. package/dist/{ConfigProvider-DR9YMy9U.js → ConfigProvider-DL9fylMo.js} +2 -2
  68. package/dist/ConfigProvider-DL9fylMo.js.map +1 -0
  69. package/dist/CopyButton-BqFGC-Ca.cjs +2 -0
  70. package/dist/{CopyButton-Ct-8AmmX.cjs.map → CopyButton-BqFGC-Ca.cjs.map} +1 -1
  71. package/dist/CopyButton-D6-kcVCA.js +43 -0
  72. package/dist/{CopyButton-DJ1PSJZU.js.map → CopyButton-D6-kcVCA.js.map} +1 -1
  73. package/dist/DashedButton-B7xodc3N.cjs +2 -0
  74. package/dist/{DashedButton-3C4IZuo4.cjs.map → DashedButton-B7xodc3N.cjs.map} +1 -1
  75. package/dist/DashedButton-iM7kzopW.js +59 -0
  76. package/dist/{DashedButton-BXZAyMtw.js.map → DashedButton-iM7kzopW.js.map} +1 -1
  77. package/dist/{DatePicker-BxEydgfu.cjs → DatePicker-BvGFP2AL.cjs} +2 -2
  78. package/dist/{DatePicker-BxEydgfu.cjs.map → DatePicker-BvGFP2AL.cjs.map} +1 -1
  79. package/dist/{DatePicker-CJioG5M7.js → DatePicker-DP7yASzq.js} +5 -5
  80. package/dist/{DatePicker-CJioG5M7.js.map → DatePicker-DP7yASzq.js.map} +1 -1
  81. package/dist/DatePicker.module-BDtTsg8M.cjs +2 -0
  82. package/dist/{DatePicker.module-tE-tGNBd.cjs.map → DatePicker.module-BDtTsg8M.cjs.map} +1 -1
  83. package/dist/DatePicker.module-CMMQyEhG.js +138 -0
  84. package/dist/{DatePicker.module-BZDftL4g.js.map → DatePicker.module-CMMQyEhG.js.map} +1 -1
  85. package/dist/{DateTimePicker-e2zj2bhS.js → DateTimePicker-CzRduOFz.js} +8 -8
  86. package/dist/{DateTimePicker-e2zj2bhS.js.map → DateTimePicker-CzRduOFz.js.map} +1 -1
  87. package/dist/{DateTimePicker-COEj2Z0F.cjs → DateTimePicker-DOzft9kg.cjs} +2 -2
  88. package/dist/{DateTimePicker-COEj2Z0F.cjs.map → DateTimePicker-DOzft9kg.cjs.map} +1 -1
  89. package/dist/EmptyState-A5nPGnHA.js +38 -0
  90. package/dist/{EmptyState-BTd7aVgu.js.map → EmptyState-A5nPGnHA.js.map} +1 -1
  91. package/dist/EmptyState-CTTOy9aY.cjs +2 -0
  92. package/dist/{EmptyState-Bv4XXnD1.cjs.map → EmptyState-CTTOy9aY.cjs.map} +1 -1
  93. package/dist/{FileCard-DY8N9Lzz.js → FileCard-BmPEEcue.js} +4 -4
  94. package/dist/{FileCard-DY8N9Lzz.js.map → FileCard-BmPEEcue.js.map} +1 -1
  95. package/dist/{FileCard-DW5Ur8Aj.cjs → FileCard-C4BkGMtK.cjs} +2 -2
  96. package/dist/{FileCard-DW5Ur8Aj.cjs.map → FileCard-C4BkGMtK.cjs.map} +1 -1
  97. package/dist/FileUploader-D_F64mob.cjs +2 -0
  98. package/dist/FileUploader-D_F64mob.cjs.map +1 -0
  99. package/dist/{FileUploader-BYF5FvUc.js → FileUploader-Dv_3bjZA.js} +217 -217
  100. package/dist/FileUploader-Dv_3bjZA.js.map +1 -0
  101. package/dist/{Flag-CB4YyPj3.cjs → Flag-BM_2VJ1v.cjs} +2 -2
  102. package/dist/{Flag-CB4YyPj3.cjs.map → Flag-BM_2VJ1v.cjs.map} +1 -1
  103. package/dist/{Flag-yA1y5XzR.js → Flag-CzCEpB8E.js} +2 -2
  104. package/dist/{Flag-yA1y5XzR.js.map → Flag-CzCEpB8E.js.map} +1 -1
  105. package/dist/{FullscreenToggle-0lskYnpx.cjs → FullscreenToggle-BL0nBrsL.cjs} +2 -2
  106. package/dist/{FullscreenToggle-0lskYnpx.cjs.map → FullscreenToggle-BL0nBrsL.cjs.map} +1 -1
  107. package/dist/{FullscreenToggle-jSLruiKt.js → FullscreenToggle-HZQOIa21.js} +3 -3
  108. package/dist/{FullscreenToggle-jSLruiKt.js.map → FullscreenToggle-HZQOIa21.js.map} +1 -1
  109. package/dist/IconButton-B87ipBK3.cjs +2 -0
  110. package/dist/{IconButton-BN-bZxEi.cjs.map → IconButton-B87ipBK3.cjs.map} +1 -1
  111. package/dist/IconButton-CBp8QuTO.js +68 -0
  112. package/dist/{IconButton-BEGWfcVc.js.map → IconButton-CBp8QuTO.js.map} +1 -1
  113. package/dist/Loader-0Imnbael.cjs +2 -0
  114. package/dist/{Loader-B5YqzEYy.cjs.map → Loader-0Imnbael.cjs.map} +1 -1
  115. package/dist/Loader-fffFnQqS.js +28 -0
  116. package/dist/{Loader-BZIa8hwv.js.map → Loader-fffFnQqS.js.map} +1 -1
  117. package/dist/MobileFrame-8FSsYA_w.js +91 -0
  118. package/dist/MobileFrame-8FSsYA_w.js.map +1 -0
  119. package/dist/MobileFrame-Dsfgd_4k.cjs +2 -0
  120. package/dist/MobileFrame-Dsfgd_4k.cjs.map +1 -0
  121. package/dist/{Modal-0V-REVV-.cjs → Modal--e2qGisF.cjs} +2 -2
  122. package/dist/{Modal-0V-REVV-.cjs.map → Modal--e2qGisF.cjs.map} +1 -1
  123. package/dist/{Modal-B7yoFC3o.js → Modal-DJljaPqV.js} +3 -3
  124. package/dist/{Modal-B7yoFC3o.js.map → Modal-DJljaPqV.js.map} +1 -1
  125. package/dist/{MultiSelect-gj9Ymeh2.cjs → MultiSelect-CvecZeMU.cjs} +2 -2
  126. package/dist/{MultiSelect-gj9Ymeh2.cjs.map → MultiSelect-CvecZeMU.cjs.map} +1 -1
  127. package/dist/{MultiSelect-C8xuXaoR.js → MultiSelect-DLoS04lZ.js} +4 -4
  128. package/dist/{MultiSelect-C8xuXaoR.js.map → MultiSelect-DLoS04lZ.js.map} +1 -1
  129. package/dist/{NumberField-CEt95jcC.cjs → NumberField-C_HZXBuw.cjs} +2 -2
  130. package/dist/{NumberField-CEt95jcC.cjs.map → NumberField-C_HZXBuw.cjs.map} +1 -1
  131. package/dist/{NumberField-2yM0mmyj.js → NumberField-DYGVQdL5.js} +4 -4
  132. package/dist/{NumberField-2yM0mmyj.js.map → NumberField-DYGVQdL5.js.map} +1 -1
  133. package/dist/{OtpField-CkliY82J.js → OtpField-CpQr_ZqL.js} +3 -3
  134. package/dist/{OtpField-CkliY82J.js.map → OtpField-CpQr_ZqL.js.map} +1 -1
  135. package/dist/{OtpField-on-K0_fM.cjs → OtpField-DKbUP0F6.cjs} +2 -2
  136. package/dist/{OtpField-on-K0_fM.cjs.map → OtpField-DKbUP0F6.cjs.map} +1 -1
  137. package/dist/{PageLayout-DzPh_G6H.js → PageLayout-CCcPCfJF.js} +2 -2
  138. package/dist/{PageLayout-DzPh_G6H.js.map → PageLayout-CCcPCfJF.js.map} +1 -1
  139. package/dist/{PageLayout-DGHu7Vm3.cjs → PageLayout-CuWXukUv.cjs} +2 -2
  140. package/dist/{PageLayout-DGHu7Vm3.cjs.map → PageLayout-CuWXukUv.cjs.map} +1 -1
  141. package/dist/PageNotFound-JKOnpyHD.cjs +2 -0
  142. package/dist/{PageNotFound-B8_eIT8p.cjs.map → PageNotFound-JKOnpyHD.cjs.map} +1 -1
  143. package/dist/{PageNotFound-CCFfPHgA.js → PageNotFound-LWH2tU5E.js} +9 -9
  144. package/dist/{PageNotFound-CCFfPHgA.js.map → PageNotFound-LWH2tU5E.js.map} +1 -1
  145. package/dist/Pagination-BwtbmITJ.js +139 -0
  146. package/dist/{Pagination-CmskZjcz.js.map → Pagination-BwtbmITJ.js.map} +1 -1
  147. package/dist/Pagination-M7njqOUt.cjs +2 -0
  148. package/dist/{Pagination-BdVebW2L.cjs.map → Pagination-M7njqOUt.cjs.map} +1 -1
  149. package/dist/PaletteField-CUyzLrny.js +54 -0
  150. package/dist/PaletteField-CUyzLrny.js.map +1 -0
  151. package/dist/PaletteField-iBIvOvNi.cjs +2 -0
  152. package/dist/PaletteField-iBIvOvNi.cjs.map +1 -0
  153. package/dist/RadioGroup-Byy-eSY3.cjs +2 -0
  154. package/dist/{RadioGroup-C8u7eNBS.cjs.map → RadioGroup-Byy-eSY3.cjs.map} +1 -1
  155. package/dist/RadioGroup-D_1_Heta.js +141 -0
  156. package/dist/{RadioGroup-DbodUJW8.js.map → RadioGroup-D_1_Heta.js.map} +1 -1
  157. package/dist/RemoveDialog-DUrD2Em8.js +47 -0
  158. package/dist/{RemoveDialog-CV75B0aN.js.map → RemoveDialog-DUrD2Em8.js.map} +1 -1
  159. package/dist/RemoveDialog-FZWYAxRy.cjs +2 -0
  160. package/dist/{RemoveDialog-DmOk0ezc.cjs.map → RemoveDialog-FZWYAxRy.cjs.map} +1 -1
  161. package/dist/{RichTextEditor-Bm8FFbcR.js → RichTextEditor-CG6LoNiw.js} +9 -9
  162. package/dist/RichTextEditor-CG6LoNiw.js.map +1 -0
  163. package/dist/{RichTextEditor-uXddgtlk.cjs → RichTextEditor-mpMCG8jX.cjs} +2 -2
  164. package/dist/RichTextEditor-mpMCG8jX.cjs.map +1 -0
  165. package/dist/RootLayout-CPxDqfGb.cjs +2 -0
  166. package/dist/{RootLayout-kssj9exn.cjs.map → RootLayout-CPxDqfGb.cjs.map} +1 -1
  167. package/dist/RootLayout-D3K-pAMO.js +515 -0
  168. package/dist/{RootLayout-Cf7Rr9Iz.js.map → RootLayout-D3K-pAMO.js.map} +1 -1
  169. package/dist/{Select-CdX3Ks7y.js → Select-BB9oOoWZ.js} +3 -3
  170. package/dist/{Select-CdX3Ks7y.js.map → Select-BB9oOoWZ.js.map} +1 -1
  171. package/dist/{Select-7vEGJCvA.cjs → Select-iP2p5jad.cjs} +2 -2
  172. package/dist/{Select-7vEGJCvA.cjs.map → Select-iP2p5jad.cjs.map} +1 -1
  173. package/dist/{Sidebar-DcKIEfhy.cjs → Sidebar-Boi7UgHV.cjs} +2 -2
  174. package/dist/{Sidebar-DcKIEfhy.cjs.map → Sidebar-Boi7UgHV.cjs.map} +1 -1
  175. package/dist/{Sidebar-YH-DoNG9.js → Sidebar-CsPnv4mu.js} +60 -60
  176. package/dist/{Sidebar-YH-DoNG9.js.map → Sidebar-CsPnv4mu.js.map} +1 -1
  177. package/dist/Slider-D3dbEOQY.cjs +2 -0
  178. package/dist/{Slider-dxYVXRev.cjs.map → Slider-D3dbEOQY.cjs.map} +1 -1
  179. package/dist/Slider-D7SvowmM.js +184 -0
  180. package/dist/{Slider-oGXd5e9X.js.map → Slider-D7SvowmM.js.map} +1 -1
  181. package/dist/{SpeedDial-DWNuC6f8.js → SpeedDial-B8XMUATN.js} +2 -2
  182. package/dist/{SpeedDial-DWNuC6f8.js.map → SpeedDial-B8XMUATN.js.map} +1 -1
  183. package/dist/{SpeedDial-9_Yk8AGx.cjs → SpeedDial-CZ22T8GL.cjs} +2 -2
  184. package/dist/{SpeedDial-9_Yk8AGx.cjs.map → SpeedDial-CZ22T8GL.cjs.map} +1 -1
  185. package/dist/{Stepper-CuqFpamY.js → Stepper-B_e_PGZE.js} +70 -70
  186. package/dist/{Stepper-CuqFpamY.js.map → Stepper-B_e_PGZE.js.map} +1 -1
  187. package/dist/Stepper-BjkkWawQ.cjs +2 -0
  188. package/dist/{Stepper-B1z_u650.cjs.map → Stepper-BjkkWawQ.cjs.map} +1 -1
  189. package/dist/{SwatchPicker-CCJltwHI.cjs → SwatchPicker-C8amdDnA.cjs} +2 -2
  190. package/dist/{SwatchPicker-CCJltwHI.cjs.map → SwatchPicker-C8amdDnA.cjs.map} +1 -1
  191. package/dist/{SwatchPicker-CqyWngFJ.js → SwatchPicker-DXEE9xqY.js} +2 -2
  192. package/dist/{SwatchPicker-CqyWngFJ.js.map → SwatchPicker-DXEE9xqY.js.map} +1 -1
  193. package/dist/Switch-CodRZD3y.cjs +2 -0
  194. package/dist/{Switch-DRkZ6kHJ.cjs.map → Switch-CodRZD3y.cjs.map} +1 -1
  195. package/dist/Switch-ESrhkpJC.js +85 -0
  196. package/dist/{Switch-DMPJ0fhB.js.map → Switch-ESrhkpJC.js.map} +1 -1
  197. package/dist/Table-Cr1zUtNQ.cjs +2 -0
  198. package/dist/Table-Cr1zUtNQ.cjs.map +1 -0
  199. package/dist/{Table-Drdhfm99.js → Table-DdoUcZoN.js} +60 -51
  200. package/dist/Table-DdoUcZoN.js.map +1 -0
  201. package/dist/Tabs-CZDX7BN-.cjs +2 -0
  202. package/dist/{Tabs-BiKDy_fv.cjs.map → Tabs-CZDX7BN-.cjs.map} +1 -1
  203. package/dist/Tabs-v1GEGUDQ.js +190 -0
  204. package/dist/{Tabs-ytbBzAxG.js.map → Tabs-v1GEGUDQ.js.map} +1 -1
  205. package/dist/{TagsField-CEt_PC5y.js → TagsField-B389eDp4.js} +4 -4
  206. package/dist/{TagsField-CEt_PC5y.js.map → TagsField-B389eDp4.js.map} +1 -1
  207. package/dist/{TagsField-DpDbf0ru.cjs → TagsField-OfrpyHZO.cjs} +2 -2
  208. package/dist/{TagsField-DpDbf0ru.cjs.map → TagsField-OfrpyHZO.cjs.map} +1 -1
  209. package/dist/{TextField-BWdmF-HE.js → TextField-7MobCad5.js} +4 -4
  210. package/dist/{TextField-BWdmF-HE.js.map → TextField-7MobCad5.js.map} +1 -1
  211. package/dist/{TextField-Df_kGy2l.cjs → TextField-B785pRgK.cjs} +2 -2
  212. package/dist/{TextField-Df_kGy2l.cjs.map → TextField-B785pRgK.cjs.map} +1 -1
  213. package/dist/TextField.module-6gYcR9TL.js +27 -0
  214. package/dist/TextField.module-6gYcR9TL.js.map +1 -0
  215. package/dist/TextField.module-DsNCo8vN.cjs +2 -0
  216. package/dist/TextField.module-DsNCo8vN.cjs.map +1 -0
  217. package/dist/{ThemeToggle-CgxF6oUu.js → ThemeToggle-BGdvqXad.js} +3 -3
  218. package/dist/{ThemeToggle-CgxF6oUu.js.map → ThemeToggle-BGdvqXad.js.map} +1 -1
  219. package/dist/{ThemeToggle-BJdXhmfc.cjs → ThemeToggle-BkmZ7s_u.cjs} +2 -2
  220. package/dist/{ThemeToggle-BJdXhmfc.cjs.map → ThemeToggle-BkmZ7s_u.cjs.map} +1 -1
  221. package/dist/{TimeColumns-DxVN0V8l.cjs → TimeColumns-B-xm1DGM.cjs} +2 -2
  222. package/dist/{TimeColumns-DxVN0V8l.cjs.map → TimeColumns-B-xm1DGM.cjs.map} +1 -1
  223. package/dist/{TimeColumns-n-fz50mr.js → TimeColumns-BRlDKx_i.js} +3 -3
  224. package/dist/{TimeColumns-n-fz50mr.js.map → TimeColumns-BRlDKx_i.js.map} +1 -1
  225. package/dist/{TimePicker-Bopxx3zU.js → TimePicker-B_3Ubip0.js} +6 -6
  226. package/dist/{TimePicker-Bopxx3zU.js.map → TimePicker-B_3Ubip0.js.map} +1 -1
  227. package/dist/{TimePicker-DvoemiGz.cjs → TimePicker-DvEIdE4v.cjs} +2 -2
  228. package/dist/{TimePicker-DvoemiGz.cjs.map → TimePicker-DvEIdE4v.cjs.map} +1 -1
  229. package/dist/Timeline-CKEosWka.cjs +2 -0
  230. package/dist/{Timeline-ONU_3gi3.cjs.map → Timeline-CKEosWka.cjs.map} +1 -1
  231. package/dist/Timeline-ufVXmpMY.js +71 -0
  232. package/dist/{Timeline-D3kzt1dy.js.map → Timeline-ufVXmpMY.js.map} +1 -1
  233. package/dist/{Toaster-DZSzFse_.cjs → Toaster-BIFRuqbC.cjs} +2 -2
  234. package/dist/{Toaster-DZSzFse_.cjs.map → Toaster-BIFRuqbC.cjs.map} +1 -1
  235. package/dist/{Toaster-BxIY2H4V.js → Toaster-DuzcRbio.js} +2 -2
  236. package/dist/{Toaster-BxIY2H4V.js.map → Toaster-DuzcRbio.js.map} +1 -1
  237. package/dist/{TranslatedFields-BtDLkQy7.cjs → TranslatedFields-D_a0NVKI.cjs} +2 -2
  238. package/dist/{TranslatedFields-BtDLkQy7.cjs.map → TranslatedFields-D_a0NVKI.cjs.map} +1 -1
  239. package/dist/{TranslatedFields-DmR8LKSG.js → TranslatedFields-HmP0Mg5t.js} +5 -5
  240. package/dist/{TranslatedFields-DmR8LKSG.js.map → TranslatedFields-HmP0Mg5t.js.map} +1 -1
  241. package/dist/{UserCard-J8Bpbh3x.js → UserCard-B1phOVKj.js} +4 -4
  242. package/dist/{UserCard-J8Bpbh3x.js.map → UserCard-B1phOVKj.js.map} +1 -1
  243. package/dist/{UserCard-C1yFvVIc.cjs → UserCard-BvOcDm5W.cjs} +2 -2
  244. package/dist/{UserCard-C1yFvVIc.cjs.map → UserCard-BvOcDm5W.cjs.map} +1 -1
  245. package/dist/color-CgR8ybWZ.cjs +2 -0
  246. package/dist/color-CgR8ybWZ.cjs.map +1 -0
  247. package/dist/color-EQJ2DrcQ.js +24 -0
  248. package/dist/color-EQJ2DrcQ.js.map +1 -0
  249. package/dist/components/Alert/index.cjs +1 -1
  250. package/dist/components/Alert/index.js +1 -1
  251. package/dist/components/AuthLayout/index.cjs +1 -1
  252. package/dist/components/AuthLayout/index.js +1 -1
  253. package/dist/components/Avatar/index.cjs +1 -1
  254. package/dist/components/Avatar/index.js +2 -2
  255. package/dist/components/Badge/index.cjs +1 -1
  256. package/dist/components/Badge/index.js +1 -1
  257. package/dist/components/Breadcrumbs/index.cjs +1 -1
  258. package/dist/components/Breadcrumbs/index.js +1 -1
  259. package/dist/components/Button/index.cjs +1 -1
  260. package/dist/components/Button/index.js +1 -1
  261. package/dist/components/Card/index.cjs +1 -1
  262. package/dist/components/Card/index.js +1 -1
  263. package/dist/components/Chip/index.cjs +1 -1
  264. package/dist/components/Chip/index.js +1 -1
  265. package/dist/components/ChoiceCard/index.cjs +1 -1
  266. package/dist/components/ChoiceCard/index.js +1 -1
  267. package/dist/components/CodeBlock/index.cjs +1 -1
  268. package/dist/components/CodeBlock/index.js +1 -1
  269. package/dist/components/ColorPicker/ColorPicker.d.cts +5 -0
  270. package/dist/components/ColorPicker/ColorPicker.d.ts +5 -0
  271. package/dist/components/ColorPicker/ColorPickerPanel.d.cts +6 -1
  272. package/dist/components/ColorPicker/ColorPickerPanel.d.ts +6 -1
  273. package/dist/components/ColorPicker/colorUtils.d.cts +3 -12
  274. package/dist/components/ColorPicker/colorUtils.d.ts +3 -12
  275. package/dist/components/ColorPicker/index.cjs +1 -1
  276. package/dist/components/ColorPicker/index.js +1 -1
  277. package/dist/components/ColorRamp/ColorRamp.d.cts +36 -0
  278. package/dist/components/ColorRamp/ColorRamp.d.ts +36 -0
  279. package/dist/components/ColorRamp/index.cjs +2 -0
  280. package/dist/components/ColorRamp/index.cjs.map +1 -0
  281. package/dist/components/ColorRamp/index.d.cts +3 -0
  282. package/dist/components/ColorRamp/index.d.ts +3 -0
  283. package/dist/components/ColorRamp/index.js +6 -0
  284. package/dist/components/ColorRamp/index.js.map +1 -0
  285. package/dist/components/CopyButton/index.cjs +1 -1
  286. package/dist/components/CopyButton/index.js +1 -1
  287. package/dist/components/DashedButton/index.cjs +1 -1
  288. package/dist/components/DashedButton/index.js +1 -1
  289. package/dist/components/DatePicker/index.cjs +1 -1
  290. package/dist/components/DatePicker/index.js +1 -1
  291. package/dist/components/DateTimePicker/index.cjs +1 -1
  292. package/dist/components/DateTimePicker/index.js +1 -1
  293. package/dist/components/EmptyState/index.cjs +1 -1
  294. package/dist/components/EmptyState/index.js +1 -1
  295. package/dist/components/FileCard/index.cjs +1 -1
  296. package/dist/components/FileCard/index.js +1 -1
  297. package/dist/components/FileUploader/index.cjs +1 -1
  298. package/dist/components/FileUploader/index.js +1 -1
  299. package/dist/components/Flag/index.cjs +1 -1
  300. package/dist/components/Flag/index.js +1 -1
  301. package/dist/components/FullscreenToggle/index.cjs +1 -1
  302. package/dist/components/FullscreenToggle/index.js +1 -1
  303. package/dist/components/IconButton/index.cjs +1 -1
  304. package/dist/components/IconButton/index.js +1 -1
  305. package/dist/components/Loader/index.cjs +1 -1
  306. package/dist/components/Loader/index.js +1 -1
  307. package/dist/components/MobileFrame/MobileFrame.d.cts +45 -0
  308. package/dist/components/MobileFrame/MobileFrame.d.ts +45 -0
  309. package/dist/components/MobileFrame/frames.d.cts +27 -0
  310. package/dist/components/MobileFrame/frames.d.ts +27 -0
  311. package/dist/components/MobileFrame/index.cjs +2 -0
  312. package/dist/components/MobileFrame/index.cjs.map +1 -0
  313. package/dist/components/MobileFrame/index.d.cts +4 -0
  314. package/dist/components/MobileFrame/index.d.ts +4 -0
  315. package/dist/components/MobileFrame/index.js +8 -0
  316. package/dist/components/MobileFrame/index.js.map +1 -0
  317. package/dist/components/Modal/index.cjs +1 -1
  318. package/dist/components/Modal/index.js +1 -1
  319. package/dist/components/MultiSelect/index.cjs +1 -1
  320. package/dist/components/MultiSelect/index.js +1 -1
  321. package/dist/components/NumberField/index.cjs +1 -1
  322. package/dist/components/NumberField/index.js +1 -1
  323. package/dist/components/OtpField/index.cjs +1 -1
  324. package/dist/components/OtpField/index.js +1 -1
  325. package/dist/components/PageLayout/index.cjs +1 -1
  326. package/dist/components/PageLayout/index.js +1 -1
  327. package/dist/components/PageNotFound/index.cjs +1 -1
  328. package/dist/components/PageNotFound/index.js +1 -1
  329. package/dist/components/Pagination/index.cjs +1 -1
  330. package/dist/components/Pagination/index.js +1 -1
  331. package/dist/components/PaletteField/PaletteField.d.cts +30 -0
  332. package/dist/components/PaletteField/PaletteField.d.ts +30 -0
  333. package/dist/components/PaletteField/index.cjs +2 -0
  334. package/dist/components/PaletteField/index.cjs.map +1 -0
  335. package/dist/components/PaletteField/index.d.cts +2 -0
  336. package/dist/components/PaletteField/index.d.ts +2 -0
  337. package/dist/components/PaletteField/index.js +6 -0
  338. package/dist/components/PaletteField/index.js.map +1 -0
  339. package/dist/components/Radio/index.cjs +1 -1
  340. package/dist/components/Radio/index.js +1 -1
  341. package/dist/components/RemoveDialog/index.cjs +1 -1
  342. package/dist/components/RemoveDialog/index.js +1 -1
  343. package/dist/components/RichTextEditor/index.cjs +1 -1
  344. package/dist/components/RichTextEditor/index.js +1 -1
  345. package/dist/components/RootLayout/index.cjs +1 -1
  346. package/dist/components/RootLayout/index.js +1 -1
  347. package/dist/components/Select/index.cjs +1 -1
  348. package/dist/components/Select/index.js +1 -1
  349. package/dist/components/Sidebar/index.cjs +1 -1
  350. package/dist/components/Sidebar/index.js +1 -1
  351. package/dist/components/Slider/index.cjs +1 -1
  352. package/dist/components/Slider/index.js +1 -1
  353. package/dist/components/SpeedDial/index.cjs +1 -1
  354. package/dist/components/SpeedDial/index.js +1 -1
  355. package/dist/components/Stepper/index.cjs +1 -1
  356. package/dist/components/Stepper/index.js +1 -1
  357. package/dist/components/SwatchPicker/index.cjs +1 -1
  358. package/dist/components/SwatchPicker/index.js +1 -1
  359. package/dist/components/Switch/index.cjs +1 -1
  360. package/dist/components/Switch/index.js +1 -1
  361. package/dist/components/Table/index.cjs +1 -1
  362. package/dist/components/Table/index.js +1 -1
  363. package/dist/components/Tabs/index.cjs +1 -1
  364. package/dist/components/Tabs/index.js +1 -1
  365. package/dist/components/TagsField/index.cjs +1 -1
  366. package/dist/components/TagsField/index.js +1 -1
  367. package/dist/components/TextField/index.cjs +1 -1
  368. package/dist/components/TextField/index.js +1 -1
  369. package/dist/components/ThemeToggle/index.cjs +1 -1
  370. package/dist/components/ThemeToggle/index.js +1 -1
  371. package/dist/components/TimePicker/index.cjs +1 -1
  372. package/dist/components/TimePicker/index.js +1 -1
  373. package/dist/components/Timeline/index.cjs +1 -1
  374. package/dist/components/Timeline/index.js +1 -1
  375. package/dist/components/Toast/index.cjs +1 -1
  376. package/dist/components/Toast/index.js +1 -1
  377. package/dist/components/TranslatedFields/index.cjs +1 -1
  378. package/dist/components/TranslatedFields/index.js +1 -1
  379. package/dist/components/UserCard/index.cjs +1 -1
  380. package/dist/components/UserCard/index.js +1 -1
  381. package/dist/components/index.d.cts +3 -0
  382. package/dist/components/index.d.ts +3 -0
  383. package/dist/entries/app.cjs +1 -1
  384. package/dist/entries/app.js +1 -1
  385. package/dist/entries/components.cjs +1 -1
  386. package/dist/entries/components.js +149 -141
  387. package/dist/entries/components.js.map +1 -1
  388. package/dist/entries/helpers.cjs +1 -1
  389. package/dist/entries/helpers.d.cts +2 -0
  390. package/dist/entries/helpers.d.ts +2 -0
  391. package/dist/entries/helpers.js +18 -8
  392. package/dist/entries/helpers.js.map +1 -1
  393. package/dist/entries/i18n.cjs +1 -1
  394. package/dist/entries/i18n.js +2 -2
  395. package/dist/entries/theme.cjs +1 -1
  396. package/dist/entries/theme.js +1 -1
  397. package/dist/helpers/color.d.cts +17 -0
  398. package/dist/helpers/color.d.ts +17 -0
  399. package/dist/helpers/palette.d.cts +68 -0
  400. package/dist/helpers/palette.d.ts +68 -0
  401. package/dist/i18n/messages.d.cts +11 -0
  402. package/dist/i18n/messages.d.ts +11 -0
  403. package/dist/index.cjs +1 -1
  404. package/dist/index.css +16 -12
  405. package/dist/index.js +211 -193
  406. package/dist/index.js.map +1 -1
  407. package/dist/{messages-ogohLC5P.js → messages-B06Kl5rI.js} +100 -23
  408. package/dist/messages-B06Kl5rI.js.map +1 -0
  409. package/dist/{messages-DKT0SRM0.cjs → messages-CJqxqL3t.cjs} +9 -9
  410. package/dist/messages-CJqxqL3t.cjs.map +1 -0
  411. package/dist/palette-B031dM4E.js +70 -0
  412. package/dist/palette-B031dM4E.js.map +1 -0
  413. package/dist/palette-BycMHbED.cjs +2 -0
  414. package/dist/palette-BycMHbED.cjs.map +1 -0
  415. package/dist/theme/ConfigProvider.d.cts +8 -8
  416. package/dist/theme/ConfigProvider.d.ts +8 -8
  417. package/package.json +1 -1
  418. package/dist/Avatar-Dgf04PBC.cjs +0 -2
  419. package/dist/Badge-BQpr2Jee.cjs +0 -2
  420. package/dist/Badge-DSWigoGC.js +0 -50
  421. package/dist/Button-CXmDOzPk.cjs +0 -2
  422. package/dist/Button-DBs8xnA5.js +0 -72
  423. package/dist/Chip-gUH_7nQc.cjs +0 -2
  424. package/dist/ChoiceCardGroup-DBohUnRj.js +0 -181
  425. package/dist/ChoiceCardGroup-d0VVTUi5.cjs +0 -2
  426. package/dist/ColorPicker-DtzFwNWk.cjs +0 -2
  427. package/dist/ColorPicker-DtzFwNWk.cjs.map +0 -1
  428. package/dist/ColorPicker-Dw6Qk0iy.js.map +0 -1
  429. package/dist/ColorPickerPanel--wBX-m7J.cjs +0 -2
  430. package/dist/ColorPickerPanel--wBX-m7J.cjs.map +0 -1
  431. package/dist/ColorPickerPanel-Dp7bnnVf.js +0 -336
  432. package/dist/ColorPickerPanel-Dp7bnnVf.js.map +0 -1
  433. package/dist/ConfigProvider-Bszl3Wr3.cjs.map +0 -1
  434. package/dist/ConfigProvider-DR9YMy9U.js.map +0 -1
  435. package/dist/CopyButton-Ct-8AmmX.cjs +0 -2
  436. package/dist/CopyButton-DJ1PSJZU.js +0 -31
  437. package/dist/DashedButton-3C4IZuo4.cjs +0 -2
  438. package/dist/DashedButton-BXZAyMtw.js +0 -59
  439. package/dist/DatePicker.module-BZDftL4g.js +0 -138
  440. package/dist/DatePicker.module-tE-tGNBd.cjs +0 -2
  441. package/dist/EmptyState-BTd7aVgu.js +0 -38
  442. package/dist/EmptyState-Bv4XXnD1.cjs +0 -2
  443. package/dist/FileUploader-B7VfhcR7.cjs +0 -2
  444. package/dist/FileUploader-B7VfhcR7.cjs.map +0 -1
  445. package/dist/FileUploader-BYF5FvUc.js.map +0 -1
  446. package/dist/IconButton-BEGWfcVc.js +0 -68
  447. package/dist/IconButton-BN-bZxEi.cjs +0 -2
  448. package/dist/Loader-B5YqzEYy.cjs +0 -2
  449. package/dist/Loader-BZIa8hwv.js +0 -29
  450. package/dist/PageNotFound-B8_eIT8p.cjs +0 -2
  451. package/dist/Pagination-BdVebW2L.cjs +0 -2
  452. package/dist/Pagination-CmskZjcz.js +0 -139
  453. package/dist/RadioGroup-C8u7eNBS.cjs +0 -2
  454. package/dist/RadioGroup-DbodUJW8.js +0 -141
  455. package/dist/RemoveDialog-CV75B0aN.js +0 -47
  456. package/dist/RemoveDialog-DmOk0ezc.cjs +0 -2
  457. package/dist/RichTextEditor-Bm8FFbcR.js.map +0 -1
  458. package/dist/RichTextEditor-uXddgtlk.cjs.map +0 -1
  459. package/dist/RootLayout-Cf7Rr9Iz.js +0 -515
  460. package/dist/RootLayout-kssj9exn.cjs +0 -2
  461. package/dist/Slider-dxYVXRev.cjs +0 -2
  462. package/dist/Slider-oGXd5e9X.js +0 -184
  463. package/dist/Stepper-B1z_u650.cjs +0 -2
  464. package/dist/Switch-DMPJ0fhB.js +0 -85
  465. package/dist/Switch-DRkZ6kHJ.cjs +0 -2
  466. package/dist/Table-BPit83Pn.cjs +0 -2
  467. package/dist/Table-BPit83Pn.cjs.map +0 -1
  468. package/dist/Table-Drdhfm99.js.map +0 -1
  469. package/dist/Tabs-BiKDy_fv.cjs +0 -2
  470. package/dist/Tabs-ytbBzAxG.js +0 -190
  471. package/dist/TextField.module-QePvGeJ3.js +0 -27
  472. package/dist/TextField.module-QePvGeJ3.js.map +0 -1
  473. package/dist/TextField.module-m-UllwzG.cjs +0 -2
  474. package/dist/TextField.module-m-UllwzG.cjs.map +0 -1
  475. package/dist/Timeline-D3kzt1dy.js +0 -71
  476. package/dist/Timeline-ONU_3gi3.cjs +0 -2
  477. package/dist/messages-DKT0SRM0.cjs.map +0 -1
  478. package/dist/messages-ogohLC5P.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { jsx as u, jsxs as x, Fragment as O } from "react/jsx-runtime";
2
- import { useMemo as C, useState as P, useRef as q, useEffect as T } from "react";
3
- import { Navigate as H, useRouterState as g, useRouter as F, useNavigate as j, Link as y } from "@tanstack/react-router";
2
+ import { useMemo as w, useState as T, useRef as q, useEffect as y } from "react";
3
+ import { Navigate as H, useRouterState as g, useRouter as F, useNavigate as z, Link as L } from "@tanstack/react-router";
4
4
  import { clsx as G } from "clsx";
5
5
  import { I as K } from "./Icon-DaTvzLBu.js";
6
- import { L as w } from "./List-LqbfF6gU.js";
6
+ import { L as j } from "./List-LqbfF6gU.js";
7
7
  import { L as R } from "./ListItem-Cn15lJBr.js";
8
- import { T as Q } from "./TextField-BWdmF-HE.js";
8
+ import { T as Q } from "./TextField-7MobCad5.js";
9
9
  import { u as X, h as J } from "./access-Db4knwyR.js";
10
- import { a as Z } from "./ConfigProvider-DR9YMy9U.js";
11
- const ee = "_nav_a1zzi_4", te = "_module_a1zzi_17", oe = "_search_a1zzi_25", ne = "_searchPanel_a1zzi_31", ae = "_moduleLabel_a1zzi_46", se = "_leaves_a1zzi_61", le = "_navBadge_a1zzi_66", re = "_navDot_a1zzi_78", ce = "_leafDot_a1zzi_86", ie = "_collapsible_a1zzi_95", ue = "_collapsibleClosed_a1zzi_100", de = "_collapsibleInner_a1zzi_103", fe = "_chevron_a1zzi_109", me = "_chevronButton_a1zzi_119", m = {
10
+ import { a as Z } from "./ConfigProvider-DL9fylMo.js";
11
+ const ee = "_nav_i8j3t_4", te = "_module_i8j3t_17", oe = "_search_i8j3t_25", ne = "_searchPanel_i8j3t_31", ae = "_moduleLabel_i8j3t_46", se = "_leaves_i8j3t_61", le = "_navBadge_i8j3t_66", re = "_navDot_i8j3t_78", ce = "_leafDot_i8j3t_86", ie = "_collapsible_i8j3t_95", ue = "_collapsibleClosed_i8j3t_100", de = "_collapsibleInner_i8j3t_103", fe = "_chevron_i8j3t_109", me = "_chevronButton_i8j3t_119", m = {
12
12
  nav: ee,
13
13
  module: te,
14
14
  search: oe,
@@ -23,7 +23,7 @@ const ee = "_nav_a1zzi_4", te = "_module_a1zzi_17", oe = "_search_a1zzi_25", ne
23
23
  collapsibleInner: de,
24
24
  chevron: fe,
25
25
  chevronButton: me
26
- }, L = R, he = (e) => e.split("-").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), V = (e) => e.replace(/^\/+|\/+$/g, ""), B = (e) => e.length > 1 && e.endsWith("/") ? e.slice(0, -1) : e, E = (e, o) => e.order - o.order || e.label.localeCompare(o.label);
26
+ }, C = R, he = (e) => e.split("-").map((o) => o.charAt(0).toUpperCase() + o.slice(1)).join(" "), V = (e) => e.replace(/^\/+|\/+$/g, ""), B = (e) => e.length > 1 && e.endsWith("/") ? e.slice(0, -1) : e, E = (e, o) => e.order - o.order || e.label.localeCompare(o.label);
27
27
  function be(e) {
28
28
  const o = [];
29
29
  for (const l of e) {
@@ -78,21 +78,21 @@ function be(e) {
78
78
  });
79
79
  else {
80
80
  const N = b.slice(0, 2).join("/");
81
- let D = S.groups.get(N);
82
- if (!D) {
83
- const z = f(N, b[1]);
84
- D = {
85
- label: z.label,
86
- icon: z.icon,
87
- badge: z.badge,
88
- dot: z.dot,
89
- order: z.order,
81
+ let P = S.groups.get(N);
82
+ if (!P) {
83
+ const I = f(N, b[1]);
84
+ P = {
85
+ label: I.label,
86
+ icon: I.icon,
87
+ badge: I.badge,
88
+ dot: I.dot,
89
+ order: I.order,
90
90
  to: i(N) ? `/${N}` : void 0,
91
91
  leaves: [],
92
92
  isContainer: !0
93
- }, S.groups.set(N, D);
93
+ }, S.groups.set(N, P);
94
94
  }
95
- D.leaves.push({
95
+ P.leaves.push({
96
96
  label: s,
97
97
  to: `/${l}`,
98
98
  icon: a.icon,
@@ -144,7 +144,7 @@ function be(e) {
144
144
  }
145
145
  function M() {
146
146
  const e = F(), o = X();
147
- return C(
147
+ return w(
148
148
  () => be(
149
149
  Object.values(e.looseRoutesById).map((t) => {
150
150
  var n;
@@ -197,7 +197,7 @@ function U(e, o) {
197
197
  }
198
198
  function W() {
199
199
  const e = F();
200
- return C(
200
+ return w(
201
201
  () => ve(
202
202
  Object.values(e.looseRoutesById).map((o) => {
203
203
  var t;
@@ -234,7 +234,7 @@ function ke(e, o) {
234
234
  }
235
235
  function Oe() {
236
236
  var n;
237
- const e = F(), o = j(), t = g({ select: (r) => r.matches });
237
+ const e = F(), o = z(), t = g({ select: (r) => r.matches });
238
238
  for (let r = t.length - 1; r >= 0; r--) {
239
239
  const c = (n = t[r].staticData) == null ? void 0 : n.back;
240
240
  if (c == null) continue;
@@ -253,7 +253,7 @@ function Ne() {
253
253
  if (n) return n;
254
254
  }
255
255
  }
256
- function je() {
256
+ function ze() {
257
257
  var o;
258
258
  const e = g({ select: (t) => t.matches });
259
259
  for (let t = e.length - 1; t >= 0; t--) {
@@ -267,7 +267,7 @@ function Ke() {
267
267
  const n = U(t, o);
268
268
  return n.length > 0 ? n[n.length - 1].name : void 0;
269
269
  }
270
- function ze(e) {
270
+ function Ie(e) {
271
271
  const o = /* @__PURE__ */ new Set();
272
272
  for (const t of e.links) o.add(t.to);
273
273
  for (const t of e.modules)
@@ -277,7 +277,7 @@ function ze(e) {
277
277
  }
278
278
  return o;
279
279
  }
280
- function Ie(e, o) {
280
+ function De(e, o) {
281
281
  const { leafPath: t, leafTitle: n, navigable: r } = o, c = e.map(({ name: i, to: f }) => ({
282
282
  label: i,
283
283
  to: f !== t && r.has(f) ? f : void 0
@@ -285,10 +285,10 @@ function Ie(e, o) {
285
285
  return n && (e.length > 0 && e[e.length - 1].to === t ? c[c.length - 1] = { label: n } : c.push({ label: n })), c;
286
286
  }
287
287
  function Ve() {
288
- const e = M(), o = W(), t = g({ select: (i) => i.location.pathname }), n = Ne(), r = Y(e), c = Ie(U(t, o), {
288
+ const e = M(), o = W(), t = g({ select: (i) => i.location.pathname }), n = Ne(), r = Y(e), c = De(U(t, o), {
289
289
  leafPath: B(t),
290
290
  leafTitle: n,
291
- navigable: ze(e)
291
+ navigable: Ie(e)
292
292
  });
293
293
  return { homeTo: r, items: c };
294
294
  }
@@ -303,15 +303,15 @@ function Ue() {
303
303
  if (n.length === 0) return;
304
304
  const c = n;
305
305
  n = [], t.push(
306
- /* @__PURE__ */ u(w, { children: c.map((i) => /* @__PURE__ */ u(
307
- L,
306
+ /* @__PURE__ */ u(j, { children: c.map((i) => /* @__PURE__ */ u(
307
+ C,
308
308
  {
309
- as: y,
309
+ as: L,
310
310
  to: i.to,
311
311
  icon: i.icon,
312
312
  selected: $(o, i.to),
313
313
  clickable: !0,
314
- trailing: I(i.badge, i.dot),
314
+ trailing: D(i.badge, i.dot),
315
315
  children: i.label
316
316
  },
317
317
  i.to
@@ -328,13 +328,13 @@ function Ue() {
328
328
  t.push(
329
329
  /* @__PURE__ */ x("div", { className: m.module, children: [
330
330
  /* @__PURE__ */ u("div", { className: m.moduleLabel, children: i.module }),
331
- /* @__PURE__ */ u(w, { children: i.groups.map((f) => /* @__PURE__ */ u(Ce, { group: f, pathname: o }, f.label)) })
331
+ /* @__PURE__ */ u(j, { children: i.groups.map((f) => /* @__PURE__ */ u(we, { group: f, pathname: o }, f.label)) })
332
332
  ] }, `mod-${i.module}`)
333
333
  );
334
334
  }
335
335
  return r(), /* @__PURE__ */ u("nav", { className: m.nav, children: t });
336
336
  }
337
- function De(e) {
337
+ function Pe(e) {
338
338
  const o = [];
339
339
  for (const t of e.links) o.push({ label: t.label, to: t.to });
340
340
  for (const t of e.modules)
@@ -349,20 +349,20 @@ function De(e) {
349
349
  }
350
350
  return o;
351
351
  }
352
- const Pe = 8;
352
+ const Te = 8;
353
353
  function We() {
354
- const e = Z(), o = M(), t = j(), n = C(() => De(o), [o]), [r, c] = P(""), [i, f] = P(!1), [p, d] = P(0), v = q(null), h = C(() => {
354
+ const e = Z(), o = M(), t = z(), n = w(() => Pe(o), [o]), [r, c] = T(""), [i, f] = T(!1), [p, d] = T(0), v = q(null), h = w(() => {
355
355
  const s = r.trim().toLowerCase();
356
356
  return s ? n.filter(
357
357
  (a) => {
358
358
  var b;
359
359
  return a.label.toLowerCase().includes(s) || (((b = a.context) == null ? void 0 : b.toLowerCase().includes(s)) ?? !1);
360
360
  }
361
- ).slice(0, Pe) : [];
361
+ ).slice(0, Te) : [];
362
362
  }, [n, r]), k = i && h.length > 0;
363
- T(() => d(0), [r]), T(() => {
363
+ y(() => d(0), [r]), y(() => {
364
364
  d((s) => s > h.length - 1 ? Math.max(0, h.length - 1) : s);
365
- }, [h.length]), T(() => {
365
+ }, [h.length]), y(() => {
366
366
  if (!i) return;
367
367
  const s = (a) => {
368
368
  v.current && !v.current.contains(a.target) && f(!1);
@@ -407,7 +407,7 @@ function We() {
407
407
  autoComplete: "off"
408
408
  }
409
409
  ),
410
- k ? /* @__PURE__ */ u("div", { className: m.searchPanel, children: /* @__PURE__ */ u(w, { role: "listbox", children: h.map((s, a) => /* @__PURE__ */ u(
410
+ k ? /* @__PURE__ */ u("div", { className: m.searchPanel, children: /* @__PURE__ */ u(j, { role: "listbox", children: h.map((s, a) => /* @__PURE__ */ u(
411
411
  R,
412
412
  {
413
413
  description: s.context,
@@ -428,39 +428,39 @@ function $(e, o) {
428
428
  const t = B(e), n = B(o);
429
429
  return n === "/" ? t === "/" : t === n || t.startsWith(n + "/");
430
430
  }
431
- function Te(e, o) {
431
+ function ye(e, o) {
432
432
  var t;
433
433
  return e.to && $(o, e.to) ? !0 : ((t = e.children) == null ? void 0 : t.some((n) => $(o, n.to))) ?? !1;
434
434
  }
435
- function ye(e) {
435
+ function Le(e) {
436
436
  return e ? /* @__PURE__ */ u("span", { className: m.navBadge, children: e }) : null;
437
437
  }
438
- function Le(e) {
438
+ function Ce(e) {
439
439
  return e ? /* @__PURE__ */ u("span", { className: m.navDot, style: { background: `var(--tz-color-${e})` } }) : null;
440
440
  }
441
- function I(e, o, t) {
441
+ function D(e, o, t) {
442
442
  if (!(e == null && o == null && t == null))
443
443
  return /* @__PURE__ */ x(O, { children: [
444
- ye(e),
445
- Le(o),
444
+ Le(e),
445
+ Ce(o),
446
446
  t
447
447
  ] });
448
448
  }
449
- function Ce({ group: e, pathname: o }) {
449
+ function we({ group: e, pathname: o }) {
450
450
  var f, p;
451
- const t = Te(e, o), n = !!((f = e.children) != null && f.length), [r, c] = P(t);
452
- if (T(() => {
451
+ const t = ye(e, o), n = !!((f = e.children) != null && f.length), [r, c] = T(t);
452
+ if (y(() => {
453
453
  t && c(!0);
454
454
  }, [t]), !n && e.to)
455
455
  return /* @__PURE__ */ u(
456
- L,
456
+ C,
457
457
  {
458
- as: y,
458
+ as: L,
459
459
  to: e.to,
460
460
  icon: e.icon,
461
461
  selected: t,
462
462
  clickable: !0,
463
- trailing: I(e.badge, e.dot),
463
+ trailing: D(e.badge, e.dot),
464
464
  children: e.label
465
465
  }
466
466
  );
@@ -477,15 +477,15 @@ function Ce({ group: e, pathname: o }) {
477
477
  n && e.to ? (
478
478
  // "Case B": the row navigates (and expands); a separate chevron only toggles.
479
479
  /* @__PURE__ */ u(
480
- L,
480
+ C,
481
481
  {
482
- as: y,
482
+ as: L,
483
483
  to: e.to,
484
484
  icon: e.icon,
485
485
  selected: t,
486
486
  clickable: !0,
487
487
  onClick: () => c(!0),
488
- trailing: I(
488
+ trailing: D(
489
489
  e.badge,
490
490
  e.dot,
491
491
  /* @__PURE__ */ u(
@@ -515,23 +515,23 @@ function Ce({ group: e, pathname: o }) {
515
515
  clickable: !0,
516
516
  "aria-expanded": r,
517
517
  onClick: () => c((d) => !d),
518
- trailing: I(e.badge, e.dot, i),
518
+ trailing: D(e.badge, e.dot, i),
519
519
  children: e.label
520
520
  }
521
521
  )
522
522
  ),
523
523
  n ? (
524
524
  // smooth collapse, same grid-template-rows technique as Card
525
- /* @__PURE__ */ u("div", { className: G(m.collapsible, !r && m.collapsibleClosed), children: /* @__PURE__ */ u("div", { className: m.collapsibleInner, children: /* @__PURE__ */ u(w, { className: m.leaves, children: (p = e.children) == null ? void 0 : p.map((d) => /* @__PURE__ */ u(
526
- L,
525
+ /* @__PURE__ */ u("div", { className: G(m.collapsible, !r && m.collapsibleClosed), children: /* @__PURE__ */ u("div", { className: m.collapsibleInner, children: /* @__PURE__ */ u(j, { className: m.leaves, children: (p = e.children) == null ? void 0 : p.map((d) => /* @__PURE__ */ u(
526
+ C,
527
527
  {
528
- as: y,
528
+ as: L,
529
529
  to: d.to,
530
530
  icon: /* @__PURE__ */ u("span", { className: m.leafDot }),
531
531
  selected: $(o, d.to),
532
532
  size: "md",
533
533
  clickable: !0,
534
- trailing: I(d.badge, d.dot),
534
+ trailing: D(d.badge, d.dot),
535
535
  children: d.label
536
536
  },
537
537
  d.to
@@ -546,8 +546,8 @@ export {
546
546
  Ke as a,
547
547
  be as b,
548
548
  Oe as c,
549
- je as d,
549
+ ze as d,
550
550
  Y as f,
551
551
  Ve as u
552
552
  };
553
- //# sourceMappingURL=Sidebar-YH-DoNG9.js.map
553
+ //# sourceMappingURL=Sidebar-CsPnv4mu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar-YH-DoNG9.js","sources":["../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport {\n Link,\n Navigate,\n useNavigate,\n useRouter,\n useRouterState,\n type LinkProps,\n type StaticDataRouteOption,\n} from '@tanstack/react-router'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { List, ListItem, type ListItemProps } from '../List'\nimport { TextField } from '../TextField'\nimport { useT, type ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport type { ButtonVariant } from '../Button'\nimport { hasAccess, useAccessKeys } from '../../helpers/access'\nimport styles from './Sidebar.module.css'\n\n// `ListItem` rendered as a TanStack `Link` — it forwards unrecognized props (like `to`) to the\n// element, so this typed alias lets us pass `to` while keeping `ListItem`'s look + behavior.\nconst NavLink = ListItem as unknown as (props: ListItemProps & { to: string }) => ReactNode\n\nexport type { IconName }\n\n/**\n * A declarative page action for a route's `staticData.actions` — rendered by `RootLayout` in the\n * page-title row (inline `Button`s, collapsing to a `SpeedDial` on `xs` when there are 2+). Because it\n * lives in static route data (no hooks), navigation goes through **`to`** (+ `params` / `search`), which\n * `RootLayout` runs via the router; use **`onClick`** for a plain, module-level handler.\n */\nexport interface RouteAction {\n /** Visible label (button text; the SpeedDial tooltip when collapsed). */\n label: string\n /** Leading icon. When omitted, the collapsed dial shows the label's first letter. */\n icon?: IconName\n /** Navigate target — `RootLayout` calls the router's `navigate({ to, params, search })`. */\n to?: string\n /** Route params for `to`. */\n params?: Record<string, string>\n /** Search params for `to`. */\n search?: Record<string, unknown>\n /** Plain click handler (alternative to `to`; can't use React hooks — it's static route data). */\n onClick?: () => void\n /** Button color / tint. */\n color?: ThemeColor\n /** Inline-button variant (ignored when collapsed). Defaults to `contained`. */\n variant?: ButtonVariant\n /** Renders the action disabled. */\n disabled?: boolean\n}\n\n// Typed `staticData` for consumers — every route describes its own menu entry.\ndeclare module '@tanstack/react-router' {\n interface StaticDataRouteOption {\n /** Menu label. A route with no `name` never appears in the menu. */\n name?: string\n /**\n * Explicit page-title / breadcrumb label for **this** route, taking priority over the path-prefix\n * `name` resolution. Read from the current (leaf) matched route, so it works on **dynamic** routes\n * (e.g. `/core/list/$id`) too. Either a static string, or a **function of the route `params`** —\n * called with the matched route's params so a detail page can title itself from the URL, e.g.\n * `title: ({ id }) => \\`Order #${id}\\``. Does **not** affect the sidebar (which reads only `name`).\n */\n title?: string | ((params: Record<string, string>) => ReactNode)\n /**\n * Explicit **breadcrumb** crumb for **this** route, independent of the page title. Same shape as\n * `title` (string, or a function of the route `params`). For the current-page crumb the priority is\n * `breadcrumb` → `title` → `name`, so a page can show one label in the header (`title`) and a\n * different one in the breadcrumb trail. Does **not** affect the page title or the sidebar.\n */\n breadcrumb?: string | ((params: Record<string, string>) => ReactNode)\n /**\n * Show a **back** arrow left of the page title for **this** route (opt-in). `true` navigates via the\n * **browser history** (`router.history.back()`); a **string** or a **function of the route `params`**\n * navigates to an explicit path (deterministic — survives a deep link / refresh, e.g.\n * `back: '/users'` or `back: ({ id }) => \\`/users/${id}\\``). `false` / omitted → no back button. Read\n * from the leaf matched route; does **not** affect the sidebar.\n */\n back?: boolean | string | ((params: Record<string, string>) => string)\n /**\n * Declarative **page actions** for this route — rendered by `RootLayout` in the page-title row, right\n * of the `h2` (inline `Button`s, collapsing to a `SpeedDial` on `xs` when there are 2+). Read from the\n * leaf matched route. Use `to` for navigation actions; `onClick` for a static handler. Does **not**\n * affect the sidebar.\n */\n actions?: RouteAction[]\n /** Optional menu icon (the library's `IconName` union). */\n icon?: IconName\n /** Sort order within the parent (ascending); falls back to alphabetical. */\n order?: number\n /** Routed but hidden from the menu. */\n hidden?: boolean\n /** Allowed accessKeys (OR — user needs any one). Omitted/empty = public. */\n roles?: string[]\n /** Small text label (e.g. `\"New\"`) shown as a pill on the menu row. */\n badge?: string\n /** Theme color of a small dot indicator on the menu row (e.g. `\"error\"`). */\n dot?: ThemeColor\n }\n}\n\nexport interface NavLeaf {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n}\nexport interface NavGroup {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n children?: NavLeaf[]\n}\nexport interface NavModule {\n module: string\n icon?: IconName\n groups: NavGroup[]\n}\n/**\n * One **top-level** sidebar entry, in the unified order — either a standalone page `link` or a `module`.\n * Top links and modules share a single `staticData.order` scale, so a module can sit before, after, or\n * between the standalone page links (not always after them). Produced by `buildNavTree` as `items`.\n */\nexport type NavItem = { kind: 'link'; link: NavLeaf } | { kind: 'module'; module: NavModule }\n\nconst prettify = (seg: string) =>\n seg\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\nconst trimSlashes = (p: string) => p.replace(/^\\/+|\\/+$/g, '')\n/** Normalize a pathname for comparison — drop a single trailing slash (but keep the root `/`). */\nconst normalizePath = (p: string) => (p.length > 1 && p.endsWith('/') ? p.slice(0, -1) : p)\nconst byOrderThenLabel = (\n a: { order: number; label: string },\n b: { order: number; label: string },\n) => a.order - b.order || a.label.localeCompare(b.label)\n\ninterface LeafAcc {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n order: number\n}\ninterface GroupAcc {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n order: number\n leaves: LeafAcc[]\n isContainer: boolean\n}\ninterface ModuleAcc {\n label: string\n icon?: IconName\n order: number\n groups: Map<string, GroupAcc>\n}\n\n/** A single route, reduced to what the menu needs. */\nexport interface NavRoute {\n fullPath: string\n staticData?: StaticDataRouteOption\n}\n\n/**\n * Pure menu builder — derives the 3-level nav tree (module → group → page) from a flat route list.\n * Kept router-free so it's unit-testable; `useNavTree` feeds it the live routes.\n */\nexport function buildNavTree(routes: NavRoute[]): {\n items: NavItem[]\n links: NavLeaf[]\n modules: NavModule[]\n} {\n const entries: Array<{ path: string; name: string; sd: StaticDataRouteOption }> = []\n for (const route of routes) {\n const sd = route.staticData\n const path = trimSlashes(route.fullPath)\n if (!sd?.name || !path) continue\n entries.push({ path, name: sd.name, sd })\n }\n\n const metaByPath = new Map(entries.map((e) => [e.path, e]))\n const paths = entries.map((e) => e.path)\n // A path is a \"container\" only when it has a **non-hidden** descendant — a hidden child must not turn\n // its parent into a container (which would drop the parent's own row and, if every child is hidden,\n // make the whole parent vanish from the menu).\n const isContainer = (p: string) =>\n paths.some((o) => o !== p && o.startsWith(`${p}/`) && !metaByPath.get(o)?.sd.hidden)\n const rawFullPaths = new Set(routes.map((r) => r.fullPath))\n const groupHasOwnPage = (groupKey: string) => rawFullPaths.has(`/${groupKey}/`)\n\n const chrome = (key: string, seg: string) => {\n const e = metaByPath.get(key)\n return {\n label: e?.name ?? prettify(seg),\n icon: e?.sd.icon,\n badge: e?.sd.badge,\n dot: e?.sd.dot,\n order: e?.sd.order ?? Number.POSITIVE_INFINITY,\n }\n }\n\n const modules = new Map<string, ModuleAcc>()\n const getModule = (seg: string) => {\n let mod = modules.get(seg)\n if (!mod) {\n const c = chrome(seg, seg)\n mod = { label: c.label, icon: c.icon, order: c.order, groups: new Map() }\n modules.set(seg, mod)\n }\n return mod\n }\n\n const topLinks: LeafAcc[] = []\n for (const { path, name, sd } of entries) {\n const segs = path.split('/')\n // The menu is 3 levels deep by design (module → group → page). A path only counts as a\n // \"container\" (holds children instead of being its own row) at the module/group levels; a\n // depth-3+ route is always a leaf, so a named page with even-deeper children isn't dropped.\n // Routes deeper than 3 segments still appear — flattened as leaves under their depth-2 group\n // (their `to` stays correct) — the nav just can't nest beyond level 3.\n if ((segs.length <= 2 && isContainer(path)) || sd.hidden) continue\n if (segs.length === 1) {\n topLinks.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n continue\n }\n const mod = getModule(segs[0])\n if (segs.length === 2) {\n mod.groups.set(path, {\n label: name,\n icon: sd.icon,\n to: `/${path}`,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n leaves: [],\n isContainer: false,\n })\n } else {\n const groupKey = segs.slice(0, 2).join('/')\n let group = mod.groups.get(groupKey)\n if (!group) {\n const c = chrome(groupKey, segs[1])\n group = {\n label: c.label,\n icon: c.icon,\n badge: c.badge,\n dot: c.dot,\n order: c.order,\n to: groupHasOwnPage(groupKey) ? `/${groupKey}` : undefined,\n leaves: [],\n isContainer: true,\n }\n mod.groups.set(groupKey, group)\n }\n group.leaves.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n }\n }\n\n // Top-level entries — standalone page links AND modules — share ONE `order` scale, so a module can sit\n // before / after / between the page links (not always after them). Build an ordered union, then derive\n // `links` / `modules` as its order-preserving subsets (still used by search / breadcrumbs / firstNavTo).\n const linkEntries = topLinks.map((l) => ({\n order: l.order,\n label: l.label,\n item: {\n kind: 'link' as const,\n link: { label: l.label, to: l.to, icon: l.icon, badge: l.badge, dot: l.dot },\n },\n }))\n const moduleEntries = [...modules.values()].map((mod) => ({\n order: mod.order,\n label: mod.label,\n item: {\n kind: 'module' as const,\n module: {\n module: mod.label,\n icon: mod.icon,\n groups: [...mod.groups.values()].sort(byOrderThenLabel).map(\n (g): NavGroup => ({\n label: g.label,\n icon: g.icon,\n to: g.to,\n badge: g.badge,\n dot: g.dot,\n children: g.isContainer\n ? g.leaves.sort(byOrderThenLabel).map((l) => ({\n label: l.label,\n to: l.to,\n icon: l.icon,\n badge: l.badge,\n dot: l.dot,\n }))\n : undefined,\n }),\n ),\n } satisfies NavModule,\n },\n }))\n const items: NavItem[] = [...linkEntries, ...moduleEntries]\n .sort(byOrderThenLabel)\n .map((e) => e.item)\n\n return {\n items,\n links: items.flatMap((i) => (i.kind === 'link' ? [i.link] : [])),\n modules: items.flatMap((i) => (i.kind === 'module' ? [i.module] : [])),\n }\n}\n\nfunction useNavTree(): { items: NavItem[]; links: NavLeaf[]; modules: NavModule[] } {\n const router = useRouter()\n const accessKeys = useAccessKeys() // re-render the menu when the user's roles change (login/logout)\n return useMemo(\n () =>\n buildNavTree(\n Object.values(router.looseRoutesById)\n .map((route) => ({\n fullPath: route.fullPath,\n staticData: route.options?.staticData,\n }))\n // Drop pages the current user can't access — empty groups/modules then vanish on their own.\n .filter((route) => hasAccess(route.staticData?.roles)),\n ),\n [router, accessKeys],\n )\n}\n\n/**\n * The first menu destination, following the **unified top-level order** (`items`) — so a module ordered\n * ahead of the page links wins. A link resolves to itself; a module to its first group page / leaf. Used\n * by `FirstRouteRedirect`.\n */\nexport function firstNavTo(tree: { items: NavItem[] }): string | undefined {\n for (const item of tree.items) {\n if (item.kind === 'link') return item.link.to\n for (const group of item.module.groups) {\n if (group.to) return group.to\n const firstChild = group.children?.[0]\n if (firstChild) return firstChild.to\n }\n }\n return undefined\n}\n\nfunction useFirstNavTo() {\n return firstNavTo(useNavTree())\n}\n\n/**\n * A `normalized fullPath → staticData.name` map from **all** routes (index routes included), the same\n * route source the `Sidebar` walks. The key drops a single trailing slash (`/core/list/` → `/core/list`),\n * so a list's **index route** (which carries the name) resolves under the plain path too. A named route\n * never loses its slot to an unnamed one. Pure + router-free, so it's unit-testable.\n */\nexport function buildNameMap(routes: NavRoute[]): Map<string, string> {\n const map = new Map<string, string>()\n for (const route of routes) {\n const name = route.staticData?.name\n if (!name) continue\n const key = normalizePath(route.fullPath)\n if (!map.has(key)) map.set(key, name)\n }\n return map\n}\n\n/**\n * Resolve a pathname's name crumbs from its **cumulative path prefixes** (not the matched-route chain),\n * so a dynamic/detail leaf (e.g. `/core/list/$id`) inherits its named ancestors. Each prefix is looked\n * up in `nameMap` (trailing slashes already normalized on both sides); a prefix with no name is simply\n * **skipped** — it never breaks the chain. Returns the recognized crumbs in order, each with its `to`.\n */\nexport function resolvePathNames(\n pathname: string,\n nameMap: Map<string, string>,\n): Array<{ name: string; to: string }> {\n const out: Array<{ name: string; to: string }> = []\n let prefix = ''\n for (const seg of trimSlashes(pathname).split('/').filter(Boolean)) {\n prefix += `/${seg}` // accumulates `/core`, `/core/list`, … — never trailing-slashed\n const name = nameMap.get(prefix)\n if (name) out.push({ name, to: prefix })\n }\n return out\n}\n\nfunction useNameMap(): Map<string, string> {\n const router = useRouter()\n return useMemo(\n () =>\n buildNameMap(\n Object.values(router.looseRoutesById).map((route) => ({\n fullPath: route.fullPath,\n staticData: route.options?.staticData,\n })),\n ),\n [router],\n )\n}\n\n/** Resolve a `staticData.title` value: a function is called with the route `params`, a string is used\n * as-is, and nullish yields `undefined`. Pure, so it's unit-testable. */\nexport function resolveTitle(\n title: string | ((params: Record<string, string>) => ReactNode) | undefined,\n params: Record<string, string>,\n): ReactNode | undefined {\n if (title == null) return undefined\n return typeof title === 'function' ? title(params) : title\n}\n\n/**\n * The **breadcrumb** crumb label for a route's `staticData`: `breadcrumb` wins over `title` (both\n * resolved via `resolveTitle` — functions called with `params`), so a page can show a different label in\n * the trail than in the header. Returns `undefined` when neither is set. Pure, so it's unit-testable.\n */\nexport function resolveBreadcrumbLabel(\n breadcrumb: string | ((params: Record<string, string>) => ReactNode) | undefined,\n title: string | ((params: Record<string, string>) => ReactNode) | undefined,\n params: Record<string, string>,\n): ReactNode | undefined {\n return resolveTitle(breadcrumb, params) ?? resolveTitle(title, params)\n}\n\n/**\n * The deepest matched route's explicit `staticData.title`, resolved from the live match chain. A string\n * is used as-is; a function is called with that matched route's `params` (so a dynamic detail route can\n * build its label from the URL, e.g. `({ id }) => \\`Order #${id}\\``).\n */\nfunction useLeafTitle(): ReactNode | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const resolved = resolveTitle(\n matches[i].staticData?.title,\n (matches[i].params ?? {}) as Record<string, string>,\n )\n if (resolved) return resolved\n }\n return undefined\n}\n\n/**\n * Resolve a `staticData.back` value into a back **target**: `undefined` (nullish / `false` → no back),\n * `{ kind: 'history' }` (`true` → browser history back), or `{ kind: 'navigate', to }` (a string or a\n * `(params) => string`, called with the route params). Pure, so it's unit-testable.\n */\nexport function resolveBackTarget(\n back: boolean | string | ((params: Record<string, string>) => string) | undefined,\n params: Record<string, string>,\n): { kind: 'history' } | { kind: 'navigate'; to: string } | undefined {\n if (back == null || back === false) return undefined\n if (back === true) return { kind: 'history' }\n return { kind: 'navigate', to: typeof back === 'function' ? back(params) : back }\n}\n\n/**\n * A **back**-navigation handler for the current page, from the leaf matched route's `staticData.back`\n * (opt-in), or `undefined` when no route on the chain enables it. `back: true` → browser history back;\n * a string / `(params) => string` → navigate to that explicit path. The first (deepest) match that\n * declares `back` wins; an explicit `back: false` on it disables (even if an ancestor set `true`). Used\n * by `RootLayout` to render the back arrow beside the page title.\n */\nexport function usePageBack(): (() => void) | undefined {\n const router = useRouter()\n const navigate = useNavigate()\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const back = matches[i].staticData?.back\n if (back == null) continue\n const target = resolveBackTarget(back, (matches[i].params ?? {}) as Record<string, string>)\n if (!target) return undefined // an explicit `back: false` disables it\n return target.kind === 'history'\n ? () => router.history.back()\n : () => navigate({ to: target.to as LinkProps['to'] })\n }\n return undefined\n}\n\n/**\n * The deepest matched route's **breadcrumb** crumb override — `staticData.breadcrumb` with a fallback to\n * `staticData.title` (see `resolveBreadcrumbLabel`), resolved from the live match chain with that route's\n * `params`. Lets a page label its breadcrumb crumb independently of its page title.\n */\nfunction useLeafBreadcrumb(): ReactNode | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const sd = matches[i].staticData\n const resolved = resolveBreadcrumbLabel(\n sd?.breadcrumb,\n sd?.title,\n (matches[i].params ?? {}) as Record<string, string>,\n )\n if (resolved) return resolved\n }\n return undefined\n}\n\n/** The deepest matched route's `staticData.actions` (the page-title-row action buttons), if any. */\nexport function useLeafActions(): RouteAction[] | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const actions = matches[i].staticData?.actions\n if (actions?.length) return actions\n }\n return undefined\n}\n\n/**\n * The current page's title. Priority: the leaf matched route's explicit **`staticData.title`** (works on\n * dynamic routes, read from the match chain), else the **last** recognized name along the current\n * pathname's cumulative prefixes (see `resolvePathNames`), so a dynamic detail route inherits its parent\n * list's name instead of falling back to the nearest named ancestor. Used by `RootLayout` to label the\n * header automatically.\n */\nexport function usePageTitle(): ReactNode | undefined {\n const leafTitle = useLeafTitle()\n const nameMap = useNameMap()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n if (leafTitle != null) return leafTitle\n const names = resolvePathNames(pathname, nameMap)\n return names.length > 0 ? names[names.length - 1].name : undefined\n}\n\n/** One breadcrumb. `to` is set only when the crumb points at a real, navigable menu page. */\nexport interface Breadcrumb {\n label: ReactNode\n to?: string\n}\n\n/** Every `to` that the menu actually navigates to (top links, group pages, leaves). */\nfunction navigablePaths(tree: { links: NavLeaf[]; modules: NavModule[] }): Set<string> {\n const set = new Set<string>()\n for (const link of tree.links) set.add(link.to)\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) set.add(group.to)\n for (const leaf of group.children ?? []) set.add(leaf.to)\n }\n return set\n}\n\n/**\n * Assemble the breadcrumb items from the resolved prefix names. A crumb links when it maps to a real\n * navigable page **and is not the current page itself** (`to === leafPath` — you're already there, so it\n * stays plain text); this is the key difference from a blanket \"last crumb is never a link\" — an\n * **ancestor** crumb (e.g. the parent list while you're on its detail child) keeps its link. `leafTitle`\n * (the leaf route's `staticData.title`) overrides the current page's label when the leaf is itself a\n * named prefix, otherwise it's appended as the trailing current-page crumb. Pure, so it's unit-testable.\n */\nexport function buildBreadcrumbItems(\n resolved: Array<{ name: string; to: string }>,\n opts: { leafPath: string; leafTitle?: ReactNode; navigable: Set<string> },\n): Breadcrumb[] {\n const { leafPath, leafTitle, navigable } = opts\n const items: Breadcrumb[] = resolved.map(({ name, to }) => ({\n label: name,\n to: to !== leafPath && navigable.has(to) ? to : undefined,\n }))\n if (leafTitle) {\n if (resolved.length > 0 && resolved[resolved.length - 1].to === leafPath) {\n // the leaf is itself a named prefix (the current page) — the title overrides its label\n items[items.length - 1] = { label: leafTitle }\n } else {\n // a dynamic / deeper leaf with no prefix name — the title is the trailing current-page crumb\n items.push({ label: leafTitle })\n }\n }\n return items\n}\n\n/**\n * Breadcrumb trail for the current route, derived from the current pathname's **cumulative prefixes**\n * (via `resolvePathNames`) rather than the matched-route chain — so a dynamic/detail route (e.g.\n * `/core/list/$id`) still shows its named ancestors (Core › List) instead of collapsing to the nearest\n * named one. The current-page crumb label follows the priority **`breadcrumb` → `title` → `name`** (via\n * `useLeafBreadcrumb`), so a page can label its crumb independently of its header title: it overrides the\n * leaf's own label when the leaf is a named prefix, else it's appended as the trailing current-page crumb\n * (so a dynamic detail reads Core › List › <breadcrumb>). `homeTo` is the first allowed menu page (same\n * target as `FirstRouteRedirect`). A crumb links only when it maps to a real navigable page **and isn't\n * the current page** — so an ancestor crumb (the parent list while you're on its detail child) stays a\n * link, while the page you're already on is plain text.\n */\nexport function useBreadcrumbs(): { homeTo?: string; items: Breadcrumb[] } {\n const tree = useNavTree()\n const nameMap = useNameMap()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n const leafLabel = useLeafBreadcrumb()\n const homeTo = firstNavTo(tree)\n const items = buildBreadcrumbItems(resolvePathNames(pathname, nameMap), {\n leafPath: normalizePath(pathname),\n leafTitle: leafLabel,\n navigable: navigablePaths(tree),\n })\n return { homeTo, items }\n}\n\n/** Drop-in component for the `/` route: forwards to whatever sits FIRST in the menu. */\nexport function FirstRouteRedirect() {\n const to = useFirstNavTo()\n return to ? <Navigate to={to as LinkProps['to']} /> : null\n}\n\n/** Auto-generated navigation, derived from the routes' `staticData`. Rendered inside `RootLayout`. */\nexport function Sidebar() {\n const { items } = useNavTree()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n\n // Walk the unified order once. Consecutive standalone links share a single `<List>` (so their spacing\n // reads as one block); a module breaks the run and renders as its own labeled block. A module can thus\n // appear before / between / after the page links, wherever its `order` places it.\n const blocks: ReactNode[] = []\n let run: NavLeaf[] = []\n const flushRun = () => {\n if (run.length === 0) return\n const links = run\n run = []\n blocks.push(\n <List key={`links-${links[0].to}`}>\n {links.map((link) => (\n <NavLink\n key={link.to}\n as={Link}\n to={link.to}\n icon={link.icon}\n selected={isActivePath(pathname, link.to)}\n clickable\n trailing={navTrailing(link.badge, link.dot)}\n >\n {link.label}\n </NavLink>\n ))}\n </List>,\n )\n }\n for (const item of items) {\n if (item.kind === 'link') {\n run.push(item.link)\n continue\n }\n flushRun()\n const mod = item.module\n blocks.push(\n <div className={styles.module} key={`mod-${mod.module}`}>\n <div className={styles.moduleLabel}>{mod.module}</div>\n <List>\n {mod.groups.map((group) => (\n <NavGroupItem key={group.label} group={group} pathname={pathname} />\n ))}\n </List>\n </div>,\n )\n }\n flushRun()\n\n return <nav className={styles.nav}>{blocks}</nav>\n}\n\n/** A single searchable destination — a nav page flattened out of the tree, with a breadcrumb context. */\ninterface NavPage {\n label: string\n to: string\n /** Where it lives — e.g. `\"Components · Forms\"` — shown as the muted second line. */\n context?: string\n}\n\n/** Flatten the nav tree into every navigable page (top links + group pages + leaves). */\nfunction flattenPages(tree: { links: NavLeaf[]; modules: NavModule[] }): NavPage[] {\n const pages: NavPage[] = []\n for (const link of tree.links) pages.push({ label: link.label, to: link.to })\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) pages.push({ label: group.label, to: group.to, context: mod.module })\n for (const leaf of group.children ?? [])\n pages.push({\n label: leaf.label,\n to: leaf.to,\n context: `${mod.module} · ${group.label}`,\n })\n }\n return pages\n}\n\nconst MAX_SEARCH_RESULTS = 8\n\n/**\n * Header search over the sidebar's pages — type to filter the nav (by page name or its section) and\n * pick a suggestion to jump there. Data comes from the same `useNavTree` the sidebar uses (so it\n * respects RBAC). Keyboard: Up/Down move, Enter opens, Escape closes. Rendered by `RootLayout`'s header.\n */\nexport function NavSearch() {\n const t = useT()\n const tree = useNavTree()\n const navigate = useNavigate()\n const pages = useMemo(() => flattenPages(tree), [tree])\n\n const [query, setQuery] = useState('')\n const [open, setOpen] = useState(false)\n const [active, setActive] = useState(0)\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const results = useMemo(() => {\n const q = query.trim().toLowerCase()\n if (!q) return []\n return pages\n .filter(\n (p) => p.label.toLowerCase().includes(q) || (p.context?.toLowerCase().includes(q) ?? false),\n )\n .slice(0, MAX_SEARCH_RESULTS)\n }, [pages, query])\n\n const showList = open && results.length > 0\n\n // reset the highlighted row whenever the query changes\n useEffect(() => setActive(0), [query])\n\n // clamp the highlight if the result set shrinks without a query change (e.g. RBAC pages update)\n useEffect(() => {\n setActive((a) => (a > results.length - 1 ? Math.max(0, results.length - 1) : a))\n }, [results.length])\n\n // close the suggestions on an outside pointerdown\n useEffect(() => {\n if (!open) return\n const onDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) setOpen(false)\n }\n document.addEventListener('pointerdown', onDown)\n return () => document.removeEventListener('pointerdown', onDown)\n }, [open])\n\n const go = (to: string) => {\n navigate({ to: to as LinkProps['to'] })\n setQuery('')\n setOpen(false)\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (!showList) return\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActive((i) => (i + 1) % results.length)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActive((i) => (i - 1 + results.length) % results.length)\n } else if (event.key === 'Enter') {\n event.preventDefault()\n const hit = results[active]\n if (hit) go(hit.to)\n } else if (event.key === 'Escape') {\n setOpen(false)\n }\n }\n\n return (\n <div\n ref={rootRef}\n className={styles.search}\n role=\"combobox\"\n aria-expanded={showList}\n aria-haspopup=\"listbox\"\n >\n <TextField\n value={query}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n adornment={<Icon name=\"SearchNormal\" />}\n placeholder={t('sidebar.searchPages')}\n aria-label={t('sidebar.searchPages')}\n autoComplete=\"off\"\n />\n {showList ? (\n <div className={styles.searchPanel}>\n <List role=\"listbox\">\n {results.map((page, i) => (\n <ListItem\n key={page.to}\n description={page.context}\n clickable\n selected={i === active}\n // keep the input focused through the click so blur doesn't close the list first\n onMouseDown={(event: MouseEvent) => event.preventDefault()}\n onMouseEnter={() => setActive(i)}\n onClick={() => go(page.to)}\n >\n {page.label}\n </ListItem>\n ))}\n </List>\n </div>\n ) : null}\n </div>\n )\n}\n\n/**\n * Is `to` the active nav target for `currentPath`? True on an **exact** match or when `currentPath` is a\n * **descendant** of `to` (so a parent row highlights for its child routes, e.g. `/core/page` stays active\n * on `/core/page/edit`). Trailing slashes are normalized on both sides (`/x/` === `/x`). The root `/`\n * matches **only exactly** — otherwise every route would count as its descendant.\n */\nexport function isActivePath(currentPath: string, to: string): boolean {\n const a = normalizePath(currentPath)\n const b = normalizePath(to)\n if (b === '/') return a === '/'\n return a === b || a.startsWith(b + '/')\n}\n\nfunction groupIsActive(group: NavGroup, pathname: string): boolean {\n if (group.to && isActivePath(pathname, group.to)) return true\n return group.children?.some((leaf) => isActivePath(pathname, leaf.to)) ?? false\n}\n\n/** A small \"New\"-style pill rendered on a menu row from `staticData.badge`. */\nfunction navBadge(text?: string) {\n return text ? <span className={styles.navBadge}>{text}</span> : null\n}\n\n/** A small colored dot indicator on a menu row from `staticData.dot`. */\nfunction navDot(color?: ThemeColor) {\n return color ? (\n <span className={styles.navDot} style={{ background: `var(--tz-color-${color})` }} />\n ) : null\n}\n\n/** The menu row's trailing slot: dot + badge + an optional chevron (omitted entirely when empty). */\nfunction navTrailing(badge?: string, dot?: ThemeColor, chevron?: ReactNode): ReactNode {\n if (badge == null && dot == null && chevron == null) return undefined\n return (\n <>\n {navBadge(badge)}\n {navDot(dot)}\n {chevron}\n </>\n )\n}\n\nfunction NavGroupItem({ group, pathname }: { group: NavGroup; pathname: string }) {\n const active = groupIsActive(group, pathname)\n const hasChildren = !!group.children?.length\n const [open, setOpen] = useState(active)\n\n // re-open when navigation makes this group active via a path the mount-time seed missed\n // (NavSearch, Breadcrumbs, back/forward) — collapsing an active group hides the current page\n useEffect(() => {\n if (active) setOpen(true)\n }, [active])\n\n // a plain level-2 page (no children) — just a link row\n if (!hasChildren && group.to) {\n return (\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n trailing={navTrailing(group.badge, group.dot)}\n >\n {group.label}\n </NavLink>\n )\n }\n\n const chevron = (\n <Icon\n name=\"ArrowDown4\"\n size=\"sm\"\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n )\n\n return (\n <>\n {hasChildren && group.to ? (\n // \"Case B\": the row navigates (and expands); a separate chevron only toggles.\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n onClick={() => setOpen(true)}\n trailing={navTrailing(\n group.badge,\n group.dot,\n <button\n type=\"button\"\n className={styles.chevronButton}\n aria-label={`${open ? 'Collapse' : 'Expand'} ${group.label}`}\n aria-expanded={open}\n onClick={(event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n setOpen((o) => !o)\n }}\n >\n {chevron}\n </button>,\n )}\n >\n {group.label}\n </NavLink>\n ) : (\n // a pure container — the whole row toggles its children\n <ListItem\n icon={group.icon}\n selected={active}\n clickable\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n trailing={navTrailing(group.badge, group.dot, chevron)}\n >\n {group.label}\n </ListItem>\n )}\n {hasChildren ? (\n // smooth collapse, same grid-template-rows technique as Card\n <div className={clsx(styles.collapsible, !open && styles.collapsibleClosed)}>\n <div className={styles.collapsibleInner}>\n <List className={styles.leaves}>\n {group.children?.map((leaf) => (\n <NavLink\n key={leaf.to}\n as={Link}\n to={leaf.to}\n icon={<span className={styles.leafDot} />}\n selected={isActivePath(pathname, leaf.to)}\n size=\"md\"\n clickable\n trailing={navTrailing(leaf.badge, leaf.dot)}\n >\n {leaf.label}\n </NavLink>\n ))}\n </List>\n </div>\n </div>\n ) : null}\n </>\n )\n}\n"],"names":["NavLink","ListItem","prettify","seg","w","trimSlashes","p","normalizePath","byOrderThenLabel","a","b","buildNavTree","routes","entries","route","sd","path","metaByPath","e","paths","isContainer","o","_a","rawFullPaths","r","groupHasOwnPage","groupKey","chrome","key","modules","getModule","mod","c","topLinks","name","segs","group","linkEntries","moduleEntries","g","l","items","i","useNavTree","router","useRouter","accessKeys","useAccessKeys","useMemo","hasAccess","firstNavTo","tree","item","firstChild","useFirstNavTo","buildNameMap","map","resolvePathNames","pathname","nameMap","out","prefix","useNameMap","resolveTitle","title","params","resolveBreadcrumbLabel","breadcrumb","useLeafTitle","matches","useRouterState","s","resolved","resolveBackTarget","back","usePageBack","navigate","useNavigate","target","useLeafBreadcrumb","useLeafActions","actions","usePageTitle","leafTitle","names","navigablePaths","set","link","leaf","buildBreadcrumbItems","opts","leafPath","navigable","to","useBreadcrumbs","leafLabel","homeTo","FirstRouteRedirect","jsx","Navigate","Sidebar","blocks","run","flushRun","links","List","Link","isActivePath","navTrailing","jsxs","styles","NavGroupItem","flattenPages","pages","MAX_SEARCH_RESULTS","NavSearch","t","useT","query","setQuery","useState","open","setOpen","active","setActive","rootRef","useRef","results","q","showList","useEffect","onDown","event","go","onKeyDown","hit","TextField","Icon","page","currentPath","groupIsActive","navBadge","text","navDot","color","badge","dot","chevron","Fragment","hasChildren","clsx","_b"],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar-CsPnv4mu.js","sources":["../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport {\n Link,\n Navigate,\n useNavigate,\n useRouter,\n useRouterState,\n type LinkProps,\n type StaticDataRouteOption,\n} from '@tanstack/react-router'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { List, ListItem, type ListItemProps } from '../List'\nimport { TextField } from '../TextField'\nimport { useT, type ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport type { ButtonVariant } from '../Button'\nimport { hasAccess, useAccessKeys } from '../../helpers/access'\nimport styles from './Sidebar.module.css'\n\n// `ListItem` rendered as a TanStack `Link` — it forwards unrecognized props (like `to`) to the\n// element, so this typed alias lets us pass `to` while keeping `ListItem`'s look + behavior.\nconst NavLink = ListItem as unknown as (props: ListItemProps & { to: string }) => ReactNode\n\nexport type { IconName }\n\n/**\n * A declarative page action for a route's `staticData.actions` — rendered by `RootLayout` in the\n * page-title row (inline `Button`s, collapsing to a `SpeedDial` on `xs` when there are 2+). Because it\n * lives in static route data (no hooks), navigation goes through **`to`** (+ `params` / `search`), which\n * `RootLayout` runs via the router; use **`onClick`** for a plain, module-level handler.\n */\nexport interface RouteAction {\n /** Visible label (button text; the SpeedDial tooltip when collapsed). */\n label: string\n /** Leading icon. When omitted, the collapsed dial shows the label's first letter. */\n icon?: IconName\n /** Navigate target — `RootLayout` calls the router's `navigate({ to, params, search })`. */\n to?: string\n /** Route params for `to`. */\n params?: Record<string, string>\n /** Search params for `to`. */\n search?: Record<string, unknown>\n /** Plain click handler (alternative to `to`; can't use React hooks — it's static route data). */\n onClick?: () => void\n /** Button color / tint. */\n color?: ThemeColor\n /** Inline-button variant (ignored when collapsed). Defaults to `contained`. */\n variant?: ButtonVariant\n /** Renders the action disabled. */\n disabled?: boolean\n}\n\n// Typed `staticData` for consumers — every route describes its own menu entry.\ndeclare module '@tanstack/react-router' {\n interface StaticDataRouteOption {\n /** Menu label. A route with no `name` never appears in the menu. */\n name?: string\n /**\n * Explicit page-title / breadcrumb label for **this** route, taking priority over the path-prefix\n * `name` resolution. Read from the current (leaf) matched route, so it works on **dynamic** routes\n * (e.g. `/core/list/$id`) too. Either a static string, or a **function of the route `params`** —\n * called with the matched route's params so a detail page can title itself from the URL, e.g.\n * `title: ({ id }) => \\`Order #${id}\\``. Does **not** affect the sidebar (which reads only `name`).\n */\n title?: string | ((params: Record<string, string>) => ReactNode)\n /**\n * Explicit **breadcrumb** crumb for **this** route, independent of the page title. Same shape as\n * `title` (string, or a function of the route `params`). For the current-page crumb the priority is\n * `breadcrumb` → `title` → `name`, so a page can show one label in the header (`title`) and a\n * different one in the breadcrumb trail. Does **not** affect the page title or the sidebar.\n */\n breadcrumb?: string | ((params: Record<string, string>) => ReactNode)\n /**\n * Show a **back** arrow left of the page title for **this** route (opt-in). `true` navigates via the\n * **browser history** (`router.history.back()`); a **string** or a **function of the route `params`**\n * navigates to an explicit path (deterministic — survives a deep link / refresh, e.g.\n * `back: '/users'` or `back: ({ id }) => \\`/users/${id}\\``). `false` / omitted → no back button. Read\n * from the leaf matched route; does **not** affect the sidebar.\n */\n back?: boolean | string | ((params: Record<string, string>) => string)\n /**\n * Declarative **page actions** for this route — rendered by `RootLayout` in the page-title row, right\n * of the `h2` (inline `Button`s, collapsing to a `SpeedDial` on `xs` when there are 2+). Read from the\n * leaf matched route. Use `to` for navigation actions; `onClick` for a static handler. Does **not**\n * affect the sidebar.\n */\n actions?: RouteAction[]\n /** Optional menu icon (the library's `IconName` union). */\n icon?: IconName\n /** Sort order within the parent (ascending); falls back to alphabetical. */\n order?: number\n /** Routed but hidden from the menu. */\n hidden?: boolean\n /** Allowed accessKeys (OR — user needs any one). Omitted/empty = public. */\n roles?: string[]\n /** Small text label (e.g. `\"New\"`) shown as a pill on the menu row. */\n badge?: string\n /** Theme color of a small dot indicator on the menu row (e.g. `\"error\"`). */\n dot?: ThemeColor\n }\n}\n\nexport interface NavLeaf {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n}\nexport interface NavGroup {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n children?: NavLeaf[]\n}\nexport interface NavModule {\n module: string\n icon?: IconName\n groups: NavGroup[]\n}\n/**\n * One **top-level** sidebar entry, in the unified order — either a standalone page `link` or a `module`.\n * Top links and modules share a single `staticData.order` scale, so a module can sit before, after, or\n * between the standalone page links (not always after them). Produced by `buildNavTree` as `items`.\n */\nexport type NavItem = { kind: 'link'; link: NavLeaf } | { kind: 'module'; module: NavModule }\n\nconst prettify = (seg: string) =>\n seg\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\nconst trimSlashes = (p: string) => p.replace(/^\\/+|\\/+$/g, '')\n/** Normalize a pathname for comparison — drop a single trailing slash (but keep the root `/`). */\nconst normalizePath = (p: string) => (p.length > 1 && p.endsWith('/') ? p.slice(0, -1) : p)\nconst byOrderThenLabel = (\n a: { order: number; label: string },\n b: { order: number; label: string },\n) => a.order - b.order || a.label.localeCompare(b.label)\n\ninterface LeafAcc {\n label: string\n to: string\n icon?: IconName\n badge?: string\n dot?: ThemeColor\n order: number\n}\ninterface GroupAcc {\n label: string\n icon?: IconName\n to?: string\n badge?: string\n dot?: ThemeColor\n order: number\n leaves: LeafAcc[]\n isContainer: boolean\n}\ninterface ModuleAcc {\n label: string\n icon?: IconName\n order: number\n groups: Map<string, GroupAcc>\n}\n\n/** A single route, reduced to what the menu needs. */\nexport interface NavRoute {\n fullPath: string\n staticData?: StaticDataRouteOption\n}\n\n/**\n * Pure menu builder — derives the 3-level nav tree (module → group → page) from a flat route list.\n * Kept router-free so it's unit-testable; `useNavTree` feeds it the live routes.\n */\nexport function buildNavTree(routes: NavRoute[]): {\n items: NavItem[]\n links: NavLeaf[]\n modules: NavModule[]\n} {\n const entries: Array<{ path: string; name: string; sd: StaticDataRouteOption }> = []\n for (const route of routes) {\n const sd = route.staticData\n const path = trimSlashes(route.fullPath)\n if (!sd?.name || !path) continue\n entries.push({ path, name: sd.name, sd })\n }\n\n const metaByPath = new Map(entries.map((e) => [e.path, e]))\n const paths = entries.map((e) => e.path)\n // A path is a \"container\" only when it has a **non-hidden** descendant — a hidden child must not turn\n // its parent into a container (which would drop the parent's own row and, if every child is hidden,\n // make the whole parent vanish from the menu).\n const isContainer = (p: string) =>\n paths.some((o) => o !== p && o.startsWith(`${p}/`) && !metaByPath.get(o)?.sd.hidden)\n const rawFullPaths = new Set(routes.map((r) => r.fullPath))\n const groupHasOwnPage = (groupKey: string) => rawFullPaths.has(`/${groupKey}/`)\n\n const chrome = (key: string, seg: string) => {\n const e = metaByPath.get(key)\n return {\n label: e?.name ?? prettify(seg),\n icon: e?.sd.icon,\n badge: e?.sd.badge,\n dot: e?.sd.dot,\n order: e?.sd.order ?? Number.POSITIVE_INFINITY,\n }\n }\n\n const modules = new Map<string, ModuleAcc>()\n const getModule = (seg: string) => {\n let mod = modules.get(seg)\n if (!mod) {\n const c = chrome(seg, seg)\n mod = { label: c.label, icon: c.icon, order: c.order, groups: new Map() }\n modules.set(seg, mod)\n }\n return mod\n }\n\n const topLinks: LeafAcc[] = []\n for (const { path, name, sd } of entries) {\n const segs = path.split('/')\n // The menu is 3 levels deep by design (module → group → page). A path only counts as a\n // \"container\" (holds children instead of being its own row) at the module/group levels; a\n // depth-3+ route is always a leaf, so a named page with even-deeper children isn't dropped.\n // Routes deeper than 3 segments still appear — flattened as leaves under their depth-2 group\n // (their `to` stays correct) — the nav just can't nest beyond level 3.\n if ((segs.length <= 2 && isContainer(path)) || sd.hidden) continue\n if (segs.length === 1) {\n topLinks.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n continue\n }\n const mod = getModule(segs[0])\n if (segs.length === 2) {\n mod.groups.set(path, {\n label: name,\n icon: sd.icon,\n to: `/${path}`,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n leaves: [],\n isContainer: false,\n })\n } else {\n const groupKey = segs.slice(0, 2).join('/')\n let group = mod.groups.get(groupKey)\n if (!group) {\n const c = chrome(groupKey, segs[1])\n group = {\n label: c.label,\n icon: c.icon,\n badge: c.badge,\n dot: c.dot,\n order: c.order,\n to: groupHasOwnPage(groupKey) ? `/${groupKey}` : undefined,\n leaves: [],\n isContainer: true,\n }\n mod.groups.set(groupKey, group)\n }\n group.leaves.push({\n label: name,\n to: `/${path}`,\n icon: sd.icon,\n badge: sd.badge,\n dot: sd.dot,\n order: sd.order ?? Number.POSITIVE_INFINITY,\n })\n }\n }\n\n // Top-level entries — standalone page links AND modules — share ONE `order` scale, so a module can sit\n // before / after / between the page links (not always after them). Build an ordered union, then derive\n // `links` / `modules` as its order-preserving subsets (still used by search / breadcrumbs / firstNavTo).\n const linkEntries = topLinks.map((l) => ({\n order: l.order,\n label: l.label,\n item: {\n kind: 'link' as const,\n link: { label: l.label, to: l.to, icon: l.icon, badge: l.badge, dot: l.dot },\n },\n }))\n const moduleEntries = [...modules.values()].map((mod) => ({\n order: mod.order,\n label: mod.label,\n item: {\n kind: 'module' as const,\n module: {\n module: mod.label,\n icon: mod.icon,\n groups: [...mod.groups.values()].sort(byOrderThenLabel).map(\n (g): NavGroup => ({\n label: g.label,\n icon: g.icon,\n to: g.to,\n badge: g.badge,\n dot: g.dot,\n children: g.isContainer\n ? g.leaves.sort(byOrderThenLabel).map((l) => ({\n label: l.label,\n to: l.to,\n icon: l.icon,\n badge: l.badge,\n dot: l.dot,\n }))\n : undefined,\n }),\n ),\n } satisfies NavModule,\n },\n }))\n const items: NavItem[] = [...linkEntries, ...moduleEntries]\n .sort(byOrderThenLabel)\n .map((e) => e.item)\n\n return {\n items,\n links: items.flatMap((i) => (i.kind === 'link' ? [i.link] : [])),\n modules: items.flatMap((i) => (i.kind === 'module' ? [i.module] : [])),\n }\n}\n\nfunction useNavTree(): { items: NavItem[]; links: NavLeaf[]; modules: NavModule[] } {\n const router = useRouter()\n const accessKeys = useAccessKeys() // re-render the menu when the user's roles change (login/logout)\n return useMemo(\n () =>\n buildNavTree(\n Object.values(router.looseRoutesById)\n .map((route) => ({\n fullPath: route.fullPath,\n staticData: route.options?.staticData,\n }))\n // Drop pages the current user can't access — empty groups/modules then vanish on their own.\n .filter((route) => hasAccess(route.staticData?.roles)),\n ),\n [router, accessKeys],\n )\n}\n\n/**\n * The first menu destination, following the **unified top-level order** (`items`) — so a module ordered\n * ahead of the page links wins. A link resolves to itself; a module to its first group page / leaf. Used\n * by `FirstRouteRedirect`.\n */\nexport function firstNavTo(tree: { items: NavItem[] }): string | undefined {\n for (const item of tree.items) {\n if (item.kind === 'link') return item.link.to\n for (const group of item.module.groups) {\n if (group.to) return group.to\n const firstChild = group.children?.[0]\n if (firstChild) return firstChild.to\n }\n }\n return undefined\n}\n\nfunction useFirstNavTo() {\n return firstNavTo(useNavTree())\n}\n\n/**\n * A `normalized fullPath → staticData.name` map from **all** routes (index routes included), the same\n * route source the `Sidebar` walks. The key drops a single trailing slash (`/core/list/` → `/core/list`),\n * so a list's **index route** (which carries the name) resolves under the plain path too. A named route\n * never loses its slot to an unnamed one. Pure + router-free, so it's unit-testable.\n */\nexport function buildNameMap(routes: NavRoute[]): Map<string, string> {\n const map = new Map<string, string>()\n for (const route of routes) {\n const name = route.staticData?.name\n if (!name) continue\n const key = normalizePath(route.fullPath)\n if (!map.has(key)) map.set(key, name)\n }\n return map\n}\n\n/**\n * Resolve a pathname's name crumbs from its **cumulative path prefixes** (not the matched-route chain),\n * so a dynamic/detail leaf (e.g. `/core/list/$id`) inherits its named ancestors. Each prefix is looked\n * up in `nameMap` (trailing slashes already normalized on both sides); a prefix with no name is simply\n * **skipped** — it never breaks the chain. Returns the recognized crumbs in order, each with its `to`.\n */\nexport function resolvePathNames(\n pathname: string,\n nameMap: Map<string, string>,\n): Array<{ name: string; to: string }> {\n const out: Array<{ name: string; to: string }> = []\n let prefix = ''\n for (const seg of trimSlashes(pathname).split('/').filter(Boolean)) {\n prefix += `/${seg}` // accumulates `/core`, `/core/list`, … — never trailing-slashed\n const name = nameMap.get(prefix)\n if (name) out.push({ name, to: prefix })\n }\n return out\n}\n\nfunction useNameMap(): Map<string, string> {\n const router = useRouter()\n return useMemo(\n () =>\n buildNameMap(\n Object.values(router.looseRoutesById).map((route) => ({\n fullPath: route.fullPath,\n staticData: route.options?.staticData,\n })),\n ),\n [router],\n )\n}\n\n/** Resolve a `staticData.title` value: a function is called with the route `params`, a string is used\n * as-is, and nullish yields `undefined`. Pure, so it's unit-testable. */\nexport function resolveTitle(\n title: string | ((params: Record<string, string>) => ReactNode) | undefined,\n params: Record<string, string>,\n): ReactNode | undefined {\n if (title == null) return undefined\n return typeof title === 'function' ? title(params) : title\n}\n\n/**\n * The **breadcrumb** crumb label for a route's `staticData`: `breadcrumb` wins over `title` (both\n * resolved via `resolveTitle` — functions called with `params`), so a page can show a different label in\n * the trail than in the header. Returns `undefined` when neither is set. Pure, so it's unit-testable.\n */\nexport function resolveBreadcrumbLabel(\n breadcrumb: string | ((params: Record<string, string>) => ReactNode) | undefined,\n title: string | ((params: Record<string, string>) => ReactNode) | undefined,\n params: Record<string, string>,\n): ReactNode | undefined {\n return resolveTitle(breadcrumb, params) ?? resolveTitle(title, params)\n}\n\n/**\n * The deepest matched route's explicit `staticData.title`, resolved from the live match chain. A string\n * is used as-is; a function is called with that matched route's `params` (so a dynamic detail route can\n * build its label from the URL, e.g. `({ id }) => \\`Order #${id}\\``).\n */\nfunction useLeafTitle(): ReactNode | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const resolved = resolveTitle(\n matches[i].staticData?.title,\n (matches[i].params ?? {}) as Record<string, string>,\n )\n if (resolved) return resolved\n }\n return undefined\n}\n\n/**\n * Resolve a `staticData.back` value into a back **target**: `undefined` (nullish / `false` → no back),\n * `{ kind: 'history' }` (`true` → browser history back), or `{ kind: 'navigate', to }` (a string or a\n * `(params) => string`, called with the route params). Pure, so it's unit-testable.\n */\nexport function resolveBackTarget(\n back: boolean | string | ((params: Record<string, string>) => string) | undefined,\n params: Record<string, string>,\n): { kind: 'history' } | { kind: 'navigate'; to: string } | undefined {\n if (back == null || back === false) return undefined\n if (back === true) return { kind: 'history' }\n return { kind: 'navigate', to: typeof back === 'function' ? back(params) : back }\n}\n\n/**\n * A **back**-navigation handler for the current page, from the leaf matched route's `staticData.back`\n * (opt-in), or `undefined` when no route on the chain enables it. `back: true` → browser history back;\n * a string / `(params) => string` → navigate to that explicit path. The first (deepest) match that\n * declares `back` wins; an explicit `back: false` on it disables (even if an ancestor set `true`). Used\n * by `RootLayout` to render the back arrow beside the page title.\n */\nexport function usePageBack(): (() => void) | undefined {\n const router = useRouter()\n const navigate = useNavigate()\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const back = matches[i].staticData?.back\n if (back == null) continue\n const target = resolveBackTarget(back, (matches[i].params ?? {}) as Record<string, string>)\n if (!target) return undefined // an explicit `back: false` disables it\n return target.kind === 'history'\n ? () => router.history.back()\n : () => navigate({ to: target.to as LinkProps['to'] })\n }\n return undefined\n}\n\n/**\n * The deepest matched route's **breadcrumb** crumb override — `staticData.breadcrumb` with a fallback to\n * `staticData.title` (see `resolveBreadcrumbLabel`), resolved from the live match chain with that route's\n * `params`. Lets a page label its breadcrumb crumb independently of its page title.\n */\nfunction useLeafBreadcrumb(): ReactNode | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const sd = matches[i].staticData\n const resolved = resolveBreadcrumbLabel(\n sd?.breadcrumb,\n sd?.title,\n (matches[i].params ?? {}) as Record<string, string>,\n )\n if (resolved) return resolved\n }\n return undefined\n}\n\n/** The deepest matched route's `staticData.actions` (the page-title-row action buttons), if any. */\nexport function useLeafActions(): RouteAction[] | undefined {\n const matches = useRouterState({ select: (s) => s.matches })\n for (let i = matches.length - 1; i >= 0; i--) {\n const actions = matches[i].staticData?.actions\n if (actions?.length) return actions\n }\n return undefined\n}\n\n/**\n * The current page's title. Priority: the leaf matched route's explicit **`staticData.title`** (works on\n * dynamic routes, read from the match chain), else the **last** recognized name along the current\n * pathname's cumulative prefixes (see `resolvePathNames`), so a dynamic detail route inherits its parent\n * list's name instead of falling back to the nearest named ancestor. Used by `RootLayout` to label the\n * header automatically.\n */\nexport function usePageTitle(): ReactNode | undefined {\n const leafTitle = useLeafTitle()\n const nameMap = useNameMap()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n if (leafTitle != null) return leafTitle\n const names = resolvePathNames(pathname, nameMap)\n return names.length > 0 ? names[names.length - 1].name : undefined\n}\n\n/** One breadcrumb. `to` is set only when the crumb points at a real, navigable menu page. */\nexport interface Breadcrumb {\n label: ReactNode\n to?: string\n}\n\n/** Every `to` that the menu actually navigates to (top links, group pages, leaves). */\nfunction navigablePaths(tree: { links: NavLeaf[]; modules: NavModule[] }): Set<string> {\n const set = new Set<string>()\n for (const link of tree.links) set.add(link.to)\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) set.add(group.to)\n for (const leaf of group.children ?? []) set.add(leaf.to)\n }\n return set\n}\n\n/**\n * Assemble the breadcrumb items from the resolved prefix names. A crumb links when it maps to a real\n * navigable page **and is not the current page itself** (`to === leafPath` — you're already there, so it\n * stays plain text); this is the key difference from a blanket \"last crumb is never a link\" — an\n * **ancestor** crumb (e.g. the parent list while you're on its detail child) keeps its link. `leafTitle`\n * (the leaf route's `staticData.title`) overrides the current page's label when the leaf is itself a\n * named prefix, otherwise it's appended as the trailing current-page crumb. Pure, so it's unit-testable.\n */\nexport function buildBreadcrumbItems(\n resolved: Array<{ name: string; to: string }>,\n opts: { leafPath: string; leafTitle?: ReactNode; navigable: Set<string> },\n): Breadcrumb[] {\n const { leafPath, leafTitle, navigable } = opts\n const items: Breadcrumb[] = resolved.map(({ name, to }) => ({\n label: name,\n to: to !== leafPath && navigable.has(to) ? to : undefined,\n }))\n if (leafTitle) {\n if (resolved.length > 0 && resolved[resolved.length - 1].to === leafPath) {\n // the leaf is itself a named prefix (the current page) — the title overrides its label\n items[items.length - 1] = { label: leafTitle }\n } else {\n // a dynamic / deeper leaf with no prefix name — the title is the trailing current-page crumb\n items.push({ label: leafTitle })\n }\n }\n return items\n}\n\n/**\n * Breadcrumb trail for the current route, derived from the current pathname's **cumulative prefixes**\n * (via `resolvePathNames`) rather than the matched-route chain — so a dynamic/detail route (e.g.\n * `/core/list/$id`) still shows its named ancestors (Core › List) instead of collapsing to the nearest\n * named one. The current-page crumb label follows the priority **`breadcrumb` → `title` → `name`** (via\n * `useLeafBreadcrumb`), so a page can label its crumb independently of its header title: it overrides the\n * leaf's own label when the leaf is a named prefix, else it's appended as the trailing current-page crumb\n * (so a dynamic detail reads Core › List › <breadcrumb>). `homeTo` is the first allowed menu page (same\n * target as `FirstRouteRedirect`). A crumb links only when it maps to a real navigable page **and isn't\n * the current page** — so an ancestor crumb (the parent list while you're on its detail child) stays a\n * link, while the page you're already on is plain text.\n */\nexport function useBreadcrumbs(): { homeTo?: string; items: Breadcrumb[] } {\n const tree = useNavTree()\n const nameMap = useNameMap()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n const leafLabel = useLeafBreadcrumb()\n const homeTo = firstNavTo(tree)\n const items = buildBreadcrumbItems(resolvePathNames(pathname, nameMap), {\n leafPath: normalizePath(pathname),\n leafTitle: leafLabel,\n navigable: navigablePaths(tree),\n })\n return { homeTo, items }\n}\n\n/** Drop-in component for the `/` route: forwards to whatever sits FIRST in the menu. */\nexport function FirstRouteRedirect() {\n const to = useFirstNavTo()\n return to ? <Navigate to={to as LinkProps['to']} /> : null\n}\n\n/** Auto-generated navigation, derived from the routes' `staticData`. Rendered inside `RootLayout`. */\nexport function Sidebar() {\n const { items } = useNavTree()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n\n // Walk the unified order once. Consecutive standalone links share a single `<List>` (so their spacing\n // reads as one block); a module breaks the run and renders as its own labeled block. A module can thus\n // appear before / between / after the page links, wherever its `order` places it.\n const blocks: ReactNode[] = []\n let run: NavLeaf[] = []\n const flushRun = () => {\n if (run.length === 0) return\n const links = run\n run = []\n blocks.push(\n <List key={`links-${links[0].to}`}>\n {links.map((link) => (\n <NavLink\n key={link.to}\n as={Link}\n to={link.to}\n icon={link.icon}\n selected={isActivePath(pathname, link.to)}\n clickable\n trailing={navTrailing(link.badge, link.dot)}\n >\n {link.label}\n </NavLink>\n ))}\n </List>,\n )\n }\n for (const item of items) {\n if (item.kind === 'link') {\n run.push(item.link)\n continue\n }\n flushRun()\n const mod = item.module\n blocks.push(\n <div className={styles.module} key={`mod-${mod.module}`}>\n <div className={styles.moduleLabel}>{mod.module}</div>\n <List>\n {mod.groups.map((group) => (\n <NavGroupItem key={group.label} group={group} pathname={pathname} />\n ))}\n </List>\n </div>,\n )\n }\n flushRun()\n\n return <nav className={styles.nav}>{blocks}</nav>\n}\n\n/** A single searchable destination — a nav page flattened out of the tree, with a breadcrumb context. */\ninterface NavPage {\n label: string\n to: string\n /** Where it lives — e.g. `\"Components · Forms\"` — shown as the muted second line. */\n context?: string\n}\n\n/** Flatten the nav tree into every navigable page (top links + group pages + leaves). */\nfunction flattenPages(tree: { links: NavLeaf[]; modules: NavModule[] }): NavPage[] {\n const pages: NavPage[] = []\n for (const link of tree.links) pages.push({ label: link.label, to: link.to })\n for (const mod of tree.modules)\n for (const group of mod.groups) {\n if (group.to) pages.push({ label: group.label, to: group.to, context: mod.module })\n for (const leaf of group.children ?? [])\n pages.push({\n label: leaf.label,\n to: leaf.to,\n context: `${mod.module} · ${group.label}`,\n })\n }\n return pages\n}\n\nconst MAX_SEARCH_RESULTS = 8\n\n/**\n * Header search over the sidebar's pages — type to filter the nav (by page name or its section) and\n * pick a suggestion to jump there. Data comes from the same `useNavTree` the sidebar uses (so it\n * respects RBAC). Keyboard: Up/Down move, Enter opens, Escape closes. Rendered by `RootLayout`'s header.\n */\nexport function NavSearch() {\n const t = useT()\n const tree = useNavTree()\n const navigate = useNavigate()\n const pages = useMemo(() => flattenPages(tree), [tree])\n\n const [query, setQuery] = useState('')\n const [open, setOpen] = useState(false)\n const [active, setActive] = useState(0)\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const results = useMemo(() => {\n const q = query.trim().toLowerCase()\n if (!q) return []\n return pages\n .filter(\n (p) => p.label.toLowerCase().includes(q) || (p.context?.toLowerCase().includes(q) ?? false),\n )\n .slice(0, MAX_SEARCH_RESULTS)\n }, [pages, query])\n\n const showList = open && results.length > 0\n\n // reset the highlighted row whenever the query changes\n useEffect(() => setActive(0), [query])\n\n // clamp the highlight if the result set shrinks without a query change (e.g. RBAC pages update)\n useEffect(() => {\n setActive((a) => (a > results.length - 1 ? Math.max(0, results.length - 1) : a))\n }, [results.length])\n\n // close the suggestions on an outside pointerdown\n useEffect(() => {\n if (!open) return\n const onDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) setOpen(false)\n }\n document.addEventListener('pointerdown', onDown)\n return () => document.removeEventListener('pointerdown', onDown)\n }, [open])\n\n const go = (to: string) => {\n navigate({ to: to as LinkProps['to'] })\n setQuery('')\n setOpen(false)\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (!showList) return\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActive((i) => (i + 1) % results.length)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActive((i) => (i - 1 + results.length) % results.length)\n } else if (event.key === 'Enter') {\n event.preventDefault()\n const hit = results[active]\n if (hit) go(hit.to)\n } else if (event.key === 'Escape') {\n setOpen(false)\n }\n }\n\n return (\n <div\n ref={rootRef}\n className={styles.search}\n role=\"combobox\"\n aria-expanded={showList}\n aria-haspopup=\"listbox\"\n >\n <TextField\n value={query}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n adornment={<Icon name=\"SearchNormal\" />}\n placeholder={t('sidebar.searchPages')}\n aria-label={t('sidebar.searchPages')}\n autoComplete=\"off\"\n />\n {showList ? (\n <div className={styles.searchPanel}>\n <List role=\"listbox\">\n {results.map((page, i) => (\n <ListItem\n key={page.to}\n description={page.context}\n clickable\n selected={i === active}\n // keep the input focused through the click so blur doesn't close the list first\n onMouseDown={(event: MouseEvent) => event.preventDefault()}\n onMouseEnter={() => setActive(i)}\n onClick={() => go(page.to)}\n >\n {page.label}\n </ListItem>\n ))}\n </List>\n </div>\n ) : null}\n </div>\n )\n}\n\n/**\n * Is `to` the active nav target for `currentPath`? True on an **exact** match or when `currentPath` is a\n * **descendant** of `to` (so a parent row highlights for its child routes, e.g. `/core/page` stays active\n * on `/core/page/edit`). Trailing slashes are normalized on both sides (`/x/` === `/x`). The root `/`\n * matches **only exactly** — otherwise every route would count as its descendant.\n */\nexport function isActivePath(currentPath: string, to: string): boolean {\n const a = normalizePath(currentPath)\n const b = normalizePath(to)\n if (b === '/') return a === '/'\n return a === b || a.startsWith(b + '/')\n}\n\nfunction groupIsActive(group: NavGroup, pathname: string): boolean {\n if (group.to && isActivePath(pathname, group.to)) return true\n return group.children?.some((leaf) => isActivePath(pathname, leaf.to)) ?? false\n}\n\n/** A small \"New\"-style pill rendered on a menu row from `staticData.badge`. */\nfunction navBadge(text?: string) {\n return text ? <span className={styles.navBadge}>{text}</span> : null\n}\n\n/** A small colored dot indicator on a menu row from `staticData.dot`. */\nfunction navDot(color?: ThemeColor) {\n return color ? (\n <span className={styles.navDot} style={{ background: `var(--tz-color-${color})` }} />\n ) : null\n}\n\n/** The menu row's trailing slot: dot + badge + an optional chevron (omitted entirely when empty). */\nfunction navTrailing(badge?: string, dot?: ThemeColor, chevron?: ReactNode): ReactNode {\n if (badge == null && dot == null && chevron == null) return undefined\n return (\n <>\n {navBadge(badge)}\n {navDot(dot)}\n {chevron}\n </>\n )\n}\n\nfunction NavGroupItem({ group, pathname }: { group: NavGroup; pathname: string }) {\n const active = groupIsActive(group, pathname)\n const hasChildren = !!group.children?.length\n const [open, setOpen] = useState(active)\n\n // re-open when navigation makes this group active via a path the mount-time seed missed\n // (NavSearch, Breadcrumbs, back/forward) — collapsing an active group hides the current page\n useEffect(() => {\n if (active) setOpen(true)\n }, [active])\n\n // a plain level-2 page (no children) — just a link row\n if (!hasChildren && group.to) {\n return (\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n trailing={navTrailing(group.badge, group.dot)}\n >\n {group.label}\n </NavLink>\n )\n }\n\n const chevron = (\n <Icon\n name=\"ArrowDown4\"\n size=\"sm\"\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n )\n\n return (\n <>\n {hasChildren && group.to ? (\n // \"Case B\": the row navigates (and expands); a separate chevron only toggles.\n <NavLink\n as={Link}\n to={group.to}\n icon={group.icon}\n selected={active}\n clickable\n onClick={() => setOpen(true)}\n trailing={navTrailing(\n group.badge,\n group.dot,\n <button\n type=\"button\"\n className={styles.chevronButton}\n aria-label={`${open ? 'Collapse' : 'Expand'} ${group.label}`}\n aria-expanded={open}\n onClick={(event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n setOpen((o) => !o)\n }}\n >\n {chevron}\n </button>,\n )}\n >\n {group.label}\n </NavLink>\n ) : (\n // a pure container — the whole row toggles its children\n <ListItem\n icon={group.icon}\n selected={active}\n clickable\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n trailing={navTrailing(group.badge, group.dot, chevron)}\n >\n {group.label}\n </ListItem>\n )}\n {hasChildren ? (\n // smooth collapse, same grid-template-rows technique as Card\n <div className={clsx(styles.collapsible, !open && styles.collapsibleClosed)}>\n <div className={styles.collapsibleInner}>\n <List className={styles.leaves}>\n {group.children?.map((leaf) => (\n <NavLink\n key={leaf.to}\n as={Link}\n to={leaf.to}\n icon={<span className={styles.leafDot} />}\n selected={isActivePath(pathname, leaf.to)}\n size=\"md\"\n clickable\n trailing={navTrailing(leaf.badge, leaf.dot)}\n >\n {leaf.label}\n </NavLink>\n ))}\n </List>\n </div>\n </div>\n ) : null}\n </>\n )\n}\n"],"names":["NavLink","ListItem","prettify","seg","w","trimSlashes","p","normalizePath","byOrderThenLabel","a","b","buildNavTree","routes","entries","route","sd","path","metaByPath","e","paths","isContainer","o","_a","rawFullPaths","r","groupHasOwnPage","groupKey","chrome","key","modules","getModule","mod","c","topLinks","name","segs","group","linkEntries","moduleEntries","g","l","items","i","useNavTree","router","useRouter","accessKeys","useAccessKeys","useMemo","hasAccess","firstNavTo","tree","item","firstChild","useFirstNavTo","buildNameMap","map","resolvePathNames","pathname","nameMap","out","prefix","useNameMap","resolveTitle","title","params","resolveBreadcrumbLabel","breadcrumb","useLeafTitle","matches","useRouterState","s","resolved","resolveBackTarget","back","usePageBack","navigate","useNavigate","target","useLeafBreadcrumb","useLeafActions","actions","usePageTitle","leafTitle","names","navigablePaths","set","link","leaf","buildBreadcrumbItems","opts","leafPath","navigable","to","useBreadcrumbs","leafLabel","homeTo","FirstRouteRedirect","jsx","Navigate","Sidebar","blocks","run","flushRun","links","List","Link","isActivePath","navTrailing","jsxs","styles","NavGroupItem","flattenPages","pages","MAX_SEARCH_RESULTS","NavSearch","t","useT","query","setQuery","useState","open","setOpen","active","setActive","rootRef","useRef","results","q","showList","useEffect","onDown","event","go","onKeyDown","hit","TextField","Icon","page","currentPath","groupIsActive","navBadge","text","navDot","color","badge","dot","chevron","Fragment","hasChildren","clsx","_b"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const s=require("react/jsx-runtime"),F=require("react"),v=require("clsx"),ie=require("./formContext-bTWrqdEV.cjs"),q=require("./Typography-BFatE1_A.cjs"),c=require("./TextField.module-DsNCo8vN.cjs"),oe="_sm_s0efw_5",de="_md_s0efw_9",ue="_lg_s0efw_13",_e="_labelRow_s0efw_18",he="_value_s0efw_24",fe="_track_s0efw_30",pe="_hasMarks_s0efw_37",ye="_input_s0efw_42",ve="_marks_s0efw_109",ge="_mark_s0efw_109",we="_tick_s0efw_128",ke="_markLabel_s0efw_134",me="_rangeTrack_s0efw_141",xe="_rail_s0efw_146",je="_rangeFill_s0efw_147",Ne="_rangeInput_s0efw_164",l={sm:oe,md:de,lg:ue,labelRow:_e,value:he,track:fe,hasMarks:pe,input:ye,marks:ve,mark:ge,tick:we,markLabel:ke,rangeTrack:me,rail:xe,rangeFill:je,rangeInput:Ne},g=(w,r,i)=>Math.min(Math.max(w,r),i),b=(w,r,i)=>i>r?(w-r)/(i-r)*100:0,Se=F.forwardRef(function({label:r,size:i="md",error:K,helperText:O,required:Q=!1,fullWidth:U=!0,range:k=!1,value:V,defaultValue:X,onChange:M,min:a=0,max:t=100,step:I=1,color:Y="accent",disabled:m=!1,valueLabel:T=!0,marks:h,name:o,onBlur:$,id:Z,className:ee,style:se,...z},A){const le=F.useId(),x=Z??le,j=`${x}-helper`,f=ie.useFormContext(),B=!!(f&&o),n=f&&o?f.field(o):void 0,P=k?[a,t]:a,C=V!==void 0?V:B?f.values[o]??P:void 0,L=C!==void 0,[ae,te]=F.useState(X??P),u=L?C:ae,N=Array.isArray(u)?u:[a,u],d=g(Math.min(N[0],N[1]),a,t),_=g(Math.max(N[0],N[1]),a,t),S=g(Array.isArray(u)?u[0]:u,a,t),p=K??(n==null?void 0:n.error)??!1,y=O??(n==null?void 0:n.helperText),E=e=>{L||te(e),B&&f.setValue(o,e),M==null||M(e)},H=(e,ce)=>{const G=g(e,a,t),J=g(ce,a,t);E([Math.min(G,J),Math.max(G,J)])},R=e=>{n==null||n.onBlur(e),$==null||$(e)},W=T!==!1,re=typeof T=="function"?T(k?[d,_]:S):k?`${d} – ${_}`:S,D=b(d,a,t),ne=b(_,a,t);return s.jsxs("div",{className:v.clsx(c.fieldStyles.field,c.fieldStyles[i],l[i],U&&c.fieldStyles.fullWidth,p&&c.fieldStyles.error,m&&c.fieldStyles.disabled,ee),style:{"--tz-btn-rgb":`var(--tz-color-${Y}-rgb)`,"--tz-slider-fill":`${b(S,a,t)}%`,...se},children:[(r!=null||W)&&s.jsxs("div",{className:l.labelRow,children:[r!=null?s.jsxs("label",{htmlFor:x,className:c.fieldStyles.label,children:[s.jsx(q.Typography,{as:"span",variant:"bodySmall",color:"muted",children:r}),Q&&s.jsx("span",{className:c.fieldStyles.required,"aria-hidden":"true",children:"*"})]}):s.jsx("span",{}),W&&s.jsx(q.Typography,{as:"span",variant:"bodySmall",className:l.value,children:re})]}),k?s.jsxs("div",{className:v.clsx(l.track,l.rangeTrack),children:[s.jsx("span",{className:l.rail,"aria-hidden":!0}),s.jsx("span",{className:l.rangeFill,"aria-hidden":!0,style:{left:`${D}%`,width:`${ne-D}%`}}),s.jsx("input",{ref:A,id:x,name:o,type:"range",min:a,max:t,step:I,value:d,onChange:e=>H(Math.min(Number(e.target.value),_),_),onBlur:R,disabled:m,className:v.clsx(l.input,l.rangeInput),style:{zIndex:d>=t?5:3},"aria-label":r!=null?`${String(r)} start`:"Range start","aria-invalid":p||void 0,"aria-describedby":y!=null?j:void 0,...z}),s.jsx("input",{type:"range",min:a,max:t,step:I,value:_,onChange:e=>H(d,Math.max(Number(e.target.value),d)),onBlur:R,disabled:m,className:v.clsx(l.input,l.rangeInput),style:{zIndex:4},"aria-label":r!=null?`${String(r)} end`:"Range end","aria-invalid":p||void 0,"aria-describedby":y!=null?j:void 0})]}):s.jsxs("div",{className:v.clsx(l.track,h!=null&&h.length>0&&l.hasMarks),children:[s.jsx("input",{ref:A,id:x,name:o,type:"range",min:a,max:t,step:I,value:S,onChange:e=>E(Number(e.target.value)),onBlur:R,disabled:m,className:l.input,"aria-invalid":p||void 0,"aria-describedby":y!=null?j:void 0,...z}),h!=null&&h.length>0&&s.jsx("div",{className:l.marks,"aria-hidden":!0,children:h.map(e=>s.jsxs("span",{className:l.mark,style:{left:`${b(e.value,a,t)}%`},children:[s.jsx("span",{className:l.tick}),e.label!=null&&s.jsx("span",{className:l.markLabel,children:e.label})]},e.value))})]}),y!=null&&s.jsx(q.Typography,{as:"span",id:j,variant:"bodySmall",color:p?"error":"muted",className:c.fieldStyles.helper,children:y})]})});exports.Slider=Se;
2
+ //# sourceMappingURL=Slider-D3dbEOQY.cjs.map