@techzyapp/ui-library 1.0.40 → 1.0.42

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 (546) hide show
  1. package/README.md +14 -8
  2. package/dist/AdminRoot-DufZpgdm.js +100 -0
  3. package/dist/AdminRoot-DufZpgdm.js.map +1 -0
  4. package/dist/AdminRoot-DwJ5jdXr.cjs +2 -0
  5. package/dist/AdminRoot-DwJ5jdXr.cjs.map +1 -0
  6. package/dist/Alert-C8BBxL_7.cjs +2 -0
  7. package/dist/Alert-C8BBxL_7.cjs.map +1 -0
  8. package/dist/Alert-D6oBxBdP.js +70 -0
  9. package/dist/Alert-D6oBxBdP.js.map +1 -0
  10. package/dist/AuthLayout-exuNQicH.cjs.map +1 -1
  11. package/dist/AuthLayout-q8pbCGdt.js.map +1 -1
  12. package/dist/{Breadcrumbs-hi6dJhfN.cjs → Breadcrumbs-B-olYVdw.cjs} +2 -2
  13. package/dist/Breadcrumbs-B-olYVdw.cjs.map +1 -0
  14. package/dist/{Breadcrumbs-Dqhk-dY2.js → Breadcrumbs-cXET6OM5.js} +3 -3
  15. package/dist/Breadcrumbs-cXET6OM5.js.map +1 -0
  16. package/dist/{Button-Bst_NtPJ.js → Button-0ZgdNjX-.js} +2 -2
  17. package/dist/{Button-Bst_NtPJ.js.map → Button-0ZgdNjX-.js.map} +1 -1
  18. package/dist/{Button-CYZoF18-.cjs → Button-CwrDiZek.cjs} +2 -2
  19. package/dist/{Button-CYZoF18-.cjs.map → Button-CwrDiZek.cjs.map} +1 -1
  20. package/dist/{Calendar-OYXsfuWz.js → Calendar-CxzdnzdK.js} +3 -3
  21. package/dist/{Calendar-OYXsfuWz.js.map → Calendar-CxzdnzdK.js.map} +1 -1
  22. package/dist/{Calendar-CMNBHtvY.cjs → Calendar-d3CX5UJp.cjs} +2 -2
  23. package/dist/{Calendar-CMNBHtvY.cjs.map → Calendar-d3CX5UJp.cjs.map} +1 -1
  24. package/dist/Card-CjqStov5.js +129 -0
  25. package/dist/Card-CjqStov5.js.map +1 -0
  26. package/dist/Card-CxnUoWsi.cjs +2 -0
  27. package/dist/Card-CxnUoWsi.cjs.map +1 -0
  28. package/dist/{Chip-B7cAHjlx.cjs → Chip-BkU3yx6G.cjs} +2 -2
  29. package/dist/Chip-BkU3yx6G.cjs.map +1 -0
  30. package/dist/{Chip-D5ZZs3QH.js → Chip-CzJjbaKx.js} +2 -2
  31. package/dist/Chip-CzJjbaKx.js.map +1 -0
  32. package/dist/ChoiceCardGroup-C7Eengyd.cjs +2 -0
  33. package/dist/ChoiceCardGroup-C7Eengyd.cjs.map +1 -0
  34. package/dist/ChoiceCardGroup-q0yN-TeQ.js +180 -0
  35. package/dist/{ChoiceCardGroup-143hR0v_.cjs.map → ChoiceCardGroup-q0yN-TeQ.js.map} +1 -1
  36. package/dist/{CodeBlock-DrWRSRmO.js → CodeBlock-BHcvQrs9.js} +3 -3
  37. package/dist/CodeBlock-BHcvQrs9.js.map +1 -0
  38. package/dist/{CodeBlock-C3mG_seZ.cjs → CodeBlock-DRBQ_S5t.cjs} +2 -2
  39. package/dist/CodeBlock-DRBQ_S5t.cjs.map +1 -0
  40. package/dist/{ColorPicker-w7NdprlW.js → ColorPicker-BQKFdTNr.js} +51 -51
  41. package/dist/{ColorPicker-w7NdprlW.js.map → ColorPicker-BQKFdTNr.js.map} +1 -1
  42. package/dist/ColorPicker-BzCEMN7B.cjs +2 -0
  43. package/dist/{ColorPicker-C1pDI4su.cjs.map → ColorPicker-BzCEMN7B.cjs.map} +1 -1
  44. package/dist/{ColorPickerPanel-CKMd-dqd.js → ColorPickerPanel-DKTKC9KH.js} +2 -2
  45. package/dist/{ColorPickerPanel-CKMd-dqd.js.map → ColorPickerPanel-DKTKC9KH.js.map} +1 -1
  46. package/dist/{ColorPickerPanel-BbgujQ3X.cjs → ColorPickerPanel-kl2jUix-.cjs} +2 -2
  47. package/dist/{ColorPickerPanel-BbgujQ3X.cjs.map → ColorPickerPanel-kl2jUix-.cjs.map} +1 -1
  48. package/dist/{ColorRamp-D9_5JULy.cjs → ColorRamp-n7muILK3.cjs} +2 -2
  49. package/dist/{ColorRamp-D9_5JULy.cjs.map → ColorRamp-n7muILK3.cjs.map} +1 -1
  50. package/dist/{ColorRamp-Mp_ddhmb.js → ColorRamp-yfMyJCyx.js} +2 -2
  51. package/dist/{ColorRamp-Mp_ddhmb.js.map → ColorRamp-yfMyJCyx.js.map} +1 -1
  52. package/dist/ConfigProvider-BaiTKZKC.cjs +2 -0
  53. package/dist/ConfigProvider-BaiTKZKC.cjs.map +1 -0
  54. package/dist/ConfigProvider-D61cpCz-.js +379 -0
  55. package/dist/ConfigProvider-D61cpCz-.js.map +1 -0
  56. package/dist/{CopyButton-DZeYcG68.cjs → CopyButton-DlSi82gv.cjs} +2 -2
  57. package/dist/{CopyButton-DZeYcG68.cjs.map → CopyButton-DlSi82gv.cjs.map} +1 -1
  58. package/dist/{CopyButton-Yg5ZVTiX.js → CopyButton-ecxn-ghi.js} +3 -3
  59. package/dist/{CopyButton-Yg5ZVTiX.js.map → CopyButton-ecxn-ghi.js.map} +1 -1
  60. package/dist/DatePicker-BjZ_P21i.cjs +2 -0
  61. package/dist/{DatePicker-CXRsT-lt.cjs.map → DatePicker-BjZ_P21i.cjs.map} +1 -1
  62. package/dist/{DatePicker-BMJlfCKB.js → DatePicker-CAGpJbDi.js} +42 -42
  63. package/dist/{DatePicker-BMJlfCKB.js.map → DatePicker-CAGpJbDi.js.map} +1 -1
  64. package/dist/{DateTimePicker-B-Jjejzm.js → DateTimePicker-BJmF0Su6.js} +50 -50
  65. package/dist/DateTimePicker-BJmF0Su6.js.map +1 -0
  66. package/dist/DateTimePicker-DZqWQeUL.cjs +2 -0
  67. package/dist/DateTimePicker-DZqWQeUL.cjs.map +1 -0
  68. package/dist/{DescriptionList-S9C6Tp90.cjs → DescriptionList-CvPDn-kh.cjs} +2 -2
  69. package/dist/DescriptionList-CvPDn-kh.cjs.map +1 -0
  70. package/dist/{DescriptionList-CG08_qwT.js → DescriptionList-Knq5eCiY.js} +4 -4
  71. package/dist/DescriptionList-Knq5eCiY.js.map +1 -0
  72. package/dist/{Dropdown-DYYhzKSo.cjs → Dropdown-CMjURWYd.cjs} +2 -2
  73. package/dist/{Dropdown-DYYhzKSo.cjs.map → Dropdown-CMjURWYd.cjs.map} +1 -1
  74. package/dist/{Dropdown-CcC-Hwx4.js → Dropdown-CnDBlB02.js} +2 -2
  75. package/dist/{Dropdown-CcC-Hwx4.js.map → Dropdown-CnDBlB02.js.map} +1 -1
  76. package/dist/{EmptyState-DnGds1ch.cjs → EmptyState-CX1g47y_.cjs} +2 -2
  77. package/dist/{EmptyState-DnGds1ch.cjs.map → EmptyState-CX1g47y_.cjs.map} +1 -1
  78. package/dist/{EmptyState-BCoPw8jf.js → EmptyState-Dqtpmtje.js} +2 -2
  79. package/dist/{EmptyState-BCoPw8jf.js.map → EmptyState-Dqtpmtje.js.map} +1 -1
  80. package/dist/{ErrorBoundary-JCNa0_Ys.cjs → ErrorBoundary-B8KwWXXp.cjs} +2 -2
  81. package/dist/{ErrorBoundary-JCNa0_Ys.cjs.map → ErrorBoundary-B8KwWXXp.cjs.map} +1 -1
  82. package/dist/{ErrorBoundary-BILk_3fM.js → ErrorBoundary-Dos7VLb-.js} +3 -3
  83. package/dist/{ErrorBoundary-BILk_3fM.js.map → ErrorBoundary-Dos7VLb-.js.map} +1 -1
  84. package/dist/{ErrorState-MQBeyF2n.cjs → ErrorState-CwCqd2PU.cjs} +2 -2
  85. package/dist/{ErrorState-MQBeyF2n.cjs.map → ErrorState-CwCqd2PU.cjs.map} +1 -1
  86. package/dist/{ErrorState-DI28ZCJN.js → ErrorState-KhzrGIJ-.js} +7 -7
  87. package/dist/{ErrorState-DI28ZCJN.js.map → ErrorState-KhzrGIJ-.js.map} +1 -1
  88. package/dist/{FileCard-Cl88Gu6L.cjs → FileCard-DEc10T2G.cjs} +2 -2
  89. package/dist/FileCard-DEc10T2G.cjs.map +1 -0
  90. package/dist/{FileCard-5QvVkO1-.js → FileCard-SSuFS13E.js} +3 -3
  91. package/dist/FileCard-SSuFS13E.js.map +1 -0
  92. package/dist/{FileUploader-FMVbj7rz.cjs → FileUploader-D58_6kDA.cjs} +2 -2
  93. package/dist/FileUploader-D58_6kDA.cjs.map +1 -0
  94. package/dist/{FileUploader-DwAl3UXI.js → FileUploader-DfYOBFa4.js} +5 -5
  95. package/dist/FileUploader-DfYOBFa4.js.map +1 -0
  96. package/dist/{Flag-Do7x-AhS.cjs → Flag-B1ZvZVXi.cjs} +2 -2
  97. package/dist/{Flag-Do7x-AhS.cjs.map → Flag-B1ZvZVXi.cjs.map} +1 -1
  98. package/dist/{Flag-DfA2t0yd.js → Flag-BEIqYQZg.js} +2 -2
  99. package/dist/{Flag-DfA2t0yd.js.map → Flag-BEIqYQZg.js.map} +1 -1
  100. package/dist/FloatingPanel-C5c_eMQ0.js.map +1 -1
  101. package/dist/FloatingPanel-tGCG2nhA.cjs.map +1 -1
  102. package/dist/{FullscreenToggle-DM6wWZ1a.js → FullscreenToggle-I_In47BB.js} +3 -3
  103. package/dist/{FullscreenToggle-DM6wWZ1a.js.map → FullscreenToggle-I_In47BB.js.map} +1 -1
  104. package/dist/{FullscreenToggle-Bbb_z2xj.cjs → FullscreenToggle-Po769CoC.cjs} +2 -2
  105. package/dist/{FullscreenToggle-Bbb_z2xj.cjs.map → FullscreenToggle-Po769CoC.cjs.map} +1 -1
  106. package/dist/{IconButton-CQ25TtBc.cjs → IconButton-CxSXEYce.cjs} +2 -2
  107. package/dist/{IconButton-CQ25TtBc.cjs.map → IconButton-CxSXEYce.cjs.map} +1 -1
  108. package/dist/{IconButton-06pmftMo.js → IconButton-D9MCwRK_.js} +2 -2
  109. package/dist/{IconButton-06pmftMo.js.map → IconButton-D9MCwRK_.js.map} +1 -1
  110. package/dist/{List-CwuAJDTi.js → List-2Y3ktTcF.js} +2 -2
  111. package/dist/{List-CwuAJDTi.js.map → List-2Y3ktTcF.js.map} +1 -1
  112. package/dist/{List-B5Ppe9R1.cjs → List-CKoNx21F.cjs} +2 -2
  113. package/dist/{List-B5Ppe9R1.cjs.map → List-CKoNx21F.cjs.map} +1 -1
  114. package/dist/{ListItem-BWNIbyTh.js → ListItem-2Lr5_NRY.js} +15 -15
  115. package/dist/{ListItem-BWNIbyTh.js.map → ListItem-2Lr5_NRY.js.map} +1 -1
  116. package/dist/ListItem-DkCYXucd.cjs +2 -0
  117. package/dist/{ListItem-Qo1Tt6Fi.cjs.map → ListItem-DkCYXucd.cjs.map} +1 -1
  118. package/dist/{Loader-B5Pm8AaT.cjs → Loader-5zp2MPm5.cjs} +2 -2
  119. package/dist/{Loader-B5Pm8AaT.cjs.map → Loader-5zp2MPm5.cjs.map} +1 -1
  120. package/dist/{Loader-Bj5uwVR9.js → Loader-Bluu6z0-.js} +2 -2
  121. package/dist/{Loader-Bj5uwVR9.js.map → Loader-Bluu6z0-.js.map} +1 -1
  122. package/dist/{LocationPicker-D-sT4rSe.cjs → LocationPicker-CGHXTIml.cjs} +2 -2
  123. package/dist/{LocationPicker-D-sT4rSe.cjs.map → LocationPicker-CGHXTIml.cjs.map} +1 -1
  124. package/dist/{LocationPicker-Ce8aLubZ.js → LocationPicker-hULpHBVG.js} +7 -7
  125. package/dist/{LocationPicker-Ce8aLubZ.js.map → LocationPicker-hULpHBVG.js.map} +1 -1
  126. package/dist/{Modal-DTnB_mGg.js → Modal-C6Zgwz_6.js} +3 -3
  127. package/dist/Modal-C6Zgwz_6.js.map +1 -0
  128. package/dist/{Modal-DjSOhZqd.cjs → Modal-D9_OG53G.cjs} +2 -2
  129. package/dist/Modal-D9_OG53G.cjs.map +1 -0
  130. package/dist/{MultiSelect-C4RvohFY.cjs → MultiSelect-BdPvjiTj.cjs} +2 -2
  131. package/dist/{MultiSelect-C4RvohFY.cjs.map → MultiSelect-BdPvjiTj.cjs.map} +1 -1
  132. package/dist/{MultiSelect-Dn8l5z52.js → MultiSelect-CHLMpim4.js} +4 -4
  133. package/dist/{MultiSelect-Dn8l5z52.js.map → MultiSelect-CHLMpim4.js.map} +1 -1
  134. package/dist/{NumberField-DvQ5UP1R.js → NumberField-BlpFmetF.js} +3 -3
  135. package/dist/{NumberField-DvQ5UP1R.js.map → NumberField-BlpFmetF.js.map} +1 -1
  136. package/dist/{NumberField-C3TLdAgT.cjs → NumberField-C-FZ-uRI.cjs} +2 -2
  137. package/dist/{NumberField-C3TLdAgT.cjs.map → NumberField-C-FZ-uRI.cjs.map} +1 -1
  138. package/dist/OtpField-D4-r7I0A.js +174 -0
  139. package/dist/OtpField-D4-r7I0A.js.map +1 -0
  140. package/dist/OtpField-Drjy2wwq.cjs +2 -0
  141. package/dist/OtpField-Drjy2wwq.cjs.map +1 -0
  142. package/dist/{PageError-aUV0vUfB.cjs → PageError-DXUOkE14.cjs} +2 -2
  143. package/dist/{PageError-aUV0vUfB.cjs.map → PageError-DXUOkE14.cjs.map} +1 -1
  144. package/dist/{PageError-BORFaxGW.js → PageError-DyDj1wQZ.js} +5 -5
  145. package/dist/{PageError-BORFaxGW.js.map → PageError-DyDj1wQZ.js.map} +1 -1
  146. package/dist/{PageLayout-rtEl8uqS.cjs → PageLayout-CoG0AaUs.cjs} +2 -2
  147. package/dist/PageLayout-CoG0AaUs.cjs.map +1 -0
  148. package/dist/{PageLayout-ojiBEcxI.js → PageLayout-nsJa8CbT.js} +4 -4
  149. package/dist/PageLayout-nsJa8CbT.js.map +1 -0
  150. package/dist/{PageNotFound-D536Tshv.js → PageNotFound-BNNwMkwE.js} +5 -5
  151. package/dist/{PageNotFound-D536Tshv.js.map → PageNotFound-BNNwMkwE.js.map} +1 -1
  152. package/dist/{PageNotFound-f-dxrnol.cjs → PageNotFound-CGSxT_n9.cjs} +2 -2
  153. package/dist/{PageNotFound-f-dxrnol.cjs.map → PageNotFound-CGSxT_n9.cjs.map} +1 -1
  154. package/dist/Pagination-CZtewveA.cjs +2 -0
  155. package/dist/Pagination-CZtewveA.cjs.map +1 -0
  156. package/dist/Pagination-tuWRnGwR.js +139 -0
  157. package/dist/Pagination-tuWRnGwR.js.map +1 -0
  158. package/dist/PaletteField-CTPl3D43.js +56 -0
  159. package/dist/PaletteField-CTPl3D43.js.map +1 -0
  160. package/dist/PaletteField-PDcu2vUp.cjs +2 -0
  161. package/dist/PaletteField-PDcu2vUp.cjs.map +1 -0
  162. package/dist/{PhoneField-DzLTXJcw.cjs → PhoneField-BPYg5ZHW.cjs} +2 -2
  163. package/dist/{PhoneField-DzLTXJcw.cjs.map → PhoneField-BPYg5ZHW.cjs.map} +1 -1
  164. package/dist/{PhoneField-CjYw-Unw.js → PhoneField-pdWDCszb.js} +4 -4
  165. package/dist/{PhoneField-CjYw-Unw.js.map → PhoneField-pdWDCszb.js.map} +1 -1
  166. package/dist/{Popconfirm-B3GhhrRM.js → Popconfirm-CMVzLaC_.js} +3 -3
  167. package/dist/{Popconfirm-B3GhhrRM.js.map → Popconfirm-CMVzLaC_.js.map} +1 -1
  168. package/dist/{Popconfirm-CYc8ywDI.cjs → Popconfirm-cNpJmkuR.cjs} +2 -2
  169. package/dist/{Popconfirm-CYc8ywDI.cjs.map → Popconfirm-cNpJmkuR.cjs.map} +1 -1
  170. package/dist/Popover-DsYUT23r.cjs.map +1 -1
  171. package/dist/Popover-WaVH3jsN.js.map +1 -1
  172. package/dist/{Progress-ZNQrxw_Q.js → Progress-BNEFGn-O.js} +2 -2
  173. package/dist/{Progress-ZNQrxw_Q.js.map → Progress-BNEFGn-O.js.map} +1 -1
  174. package/dist/{Progress-BABBBG2y.cjs → Progress-x12Rkh06.cjs} +2 -2
  175. package/dist/{Progress-BABBBG2y.cjs.map → Progress-x12Rkh06.cjs.map} +1 -1
  176. package/dist/QrCode-CrNJZV_8.js +81 -0
  177. package/dist/QrCode-CrNJZV_8.js.map +1 -0
  178. package/dist/QrCode-TcQQE0h7.cjs +2 -0
  179. package/dist/QrCode-TcQQE0h7.cjs.map +1 -0
  180. package/dist/{RemoveDialog-ayAfGXpB.js → RemoveDialog-ARFp1UJM.js} +5 -5
  181. package/dist/{RemoveDialog-ayAfGXpB.js.map → RemoveDialog-ARFp1UJM.js.map} +1 -1
  182. package/dist/{RemoveDialog-B_Y18MeJ.cjs → RemoveDialog-IWOAQFNK.cjs} +2 -2
  183. package/dist/{RemoveDialog-B_Y18MeJ.cjs.map → RemoveDialog-IWOAQFNK.cjs.map} +1 -1
  184. package/dist/RichTextEditor-C9jT2cLl.cjs +2 -0
  185. package/dist/RichTextEditor-C9jT2cLl.cjs.map +1 -0
  186. package/dist/{RichTextEditor-itYD1PfE.js → RichTextEditor-DrwJUEYz.js} +148 -148
  187. package/dist/RichTextEditor-DrwJUEYz.js.map +1 -0
  188. package/dist/RootLayout-CZ2GQ8XA.js +647 -0
  189. package/dist/RootLayout-CZ2GQ8XA.js.map +1 -0
  190. package/dist/RootLayout-DStUP263.cjs +2 -0
  191. package/dist/RootLayout-DStUP263.cjs.map +1 -0
  192. package/dist/{Select-1FWkryTK.cjs → Select-C2DIfuoB.cjs} +2 -2
  193. package/dist/{Select-1FWkryTK.cjs.map → Select-C2DIfuoB.cjs.map} +1 -1
  194. package/dist/{Select-K0a_7ROf.js → Select-KGsA8PbI.js} +3 -3
  195. package/dist/{Select-K0a_7ROf.js.map → Select-KGsA8PbI.js.map} +1 -1
  196. package/dist/{Sidebar-Dg15hPpM.js → Sidebar-_pcwxdd8.js} +133 -131
  197. package/dist/{Sidebar-Dg15hPpM.js.map → Sidebar-_pcwxdd8.js.map} +1 -1
  198. package/dist/Sidebar-wK1_xaY_.cjs +2 -0
  199. package/dist/{Sidebar-C3-u3Agj.cjs.map → Sidebar-wK1_xaY_.cjs.map} +1 -1
  200. package/dist/Slider-CXAz9SUY.cjs +2 -0
  201. package/dist/Slider-CXAz9SUY.cjs.map +1 -0
  202. package/dist/Slider-Cpc5_dPl.js +185 -0
  203. package/dist/Slider-Cpc5_dPl.js.map +1 -0
  204. package/dist/{SpeedDial-D6me6w_m.cjs → SpeedDial-BT_boD06.cjs} +2 -2
  205. package/dist/{SpeedDial-D6me6w_m.cjs.map → SpeedDial-BT_boD06.cjs.map} +1 -1
  206. package/dist/{SpeedDial-CEBAWIYo.js → SpeedDial-SMMfes9f.js} +2 -2
  207. package/dist/{SpeedDial-CEBAWIYo.js.map → SpeedDial-SMMfes9f.js.map} +1 -1
  208. package/dist/{Stepper-wPPs57uZ.cjs → Stepper-BmA_DjTS.cjs} +2 -2
  209. package/dist/Stepper-BmA_DjTS.cjs.map +1 -0
  210. package/dist/{Stepper-BN0GsRZW.js → Stepper-CR0Mlkq7.js} +2 -2
  211. package/dist/Stepper-CR0Mlkq7.js.map +1 -0
  212. package/dist/{Table-CFl3OYlo.cjs → Table-BkjY1Lwt.cjs} +2 -2
  213. package/dist/Table-BkjY1Lwt.cjs.map +1 -0
  214. package/dist/{Table-DChIfjqj.js → Table-D-F68lcm.js} +18 -18
  215. package/dist/Table-D-F68lcm.js.map +1 -0
  216. package/dist/{Tabs-BAKPWO4g.cjs → Tabs-Cgp6D1WP.cjs} +2 -2
  217. package/dist/{Tabs-BAKPWO4g.cjs.map → Tabs-Cgp6D1WP.cjs.map} +1 -1
  218. package/dist/{Tabs-DfVFgOfs.js → Tabs-DP0aZ5TB.js} +2 -2
  219. package/dist/{Tabs-DfVFgOfs.js.map → Tabs-DP0aZ5TB.js.map} +1 -1
  220. package/dist/TagsField-9nKu6ZW4.cjs +2 -0
  221. package/dist/TagsField-9nKu6ZW4.cjs.map +1 -0
  222. package/dist/{TagsField-CoBRqcjW.js → TagsField-CcY9MTMw.js} +64 -64
  223. package/dist/TagsField-CcY9MTMw.js.map +1 -0
  224. package/dist/{TextField-0gFvIFs8.js → TextField-0WvJsHhA.js} +3 -3
  225. package/dist/{TextField-0gFvIFs8.js.map → TextField-0WvJsHhA.js.map} +1 -1
  226. package/dist/{TextField-BL6OAJcP.cjs → TextField-C5MgCQIV.cjs} +2 -2
  227. package/dist/{TextField-BL6OAJcP.cjs.map → TextField-C5MgCQIV.cjs.map} +1 -1
  228. package/dist/{ThemeToggle-BgKfcb02.cjs → ThemeToggle-BvcCxRpF.cjs} +2 -2
  229. package/dist/{ThemeToggle-BgKfcb02.cjs.map → ThemeToggle-BvcCxRpF.cjs.map} +1 -1
  230. package/dist/ThemeToggle-DmCePuTy.js +28 -0
  231. package/dist/{ThemeToggle-_SUmLxmU.js.map → ThemeToggle-DmCePuTy.js.map} +1 -1
  232. package/dist/{TimeColumns-DkJsIu1w.cjs → TimeColumns-Q-vsHFZU.cjs} +2 -2
  233. package/dist/{TimeColumns-DkJsIu1w.cjs.map → TimeColumns-Q-vsHFZU.cjs.map} +1 -1
  234. package/dist/{TimeColumns-BE1sLoRV.js → TimeColumns-WJRHQuFv.js} +2 -2
  235. package/dist/{TimeColumns-BE1sLoRV.js.map → TimeColumns-WJRHQuFv.js.map} +1 -1
  236. package/dist/TimePicker-CvbQFzBf.cjs +2 -0
  237. package/dist/{TimePicker-6nHQx0P5.cjs.map → TimePicker-CvbQFzBf.cjs.map} +1 -1
  238. package/dist/{TimePicker-Bv2qIFf9.js → TimePicker-DJDuSxAg.js} +54 -54
  239. package/dist/{TimePicker-Bv2qIFf9.js.map → TimePicker-DJDuSxAg.js.map} +1 -1
  240. package/dist/{Toaster-Fq6-ImDJ.js → Toaster-Bb5YEN5j.js} +2 -2
  241. package/dist/{Toaster-Fq6-ImDJ.js.map → Toaster-Bb5YEN5j.js.map} +1 -1
  242. package/dist/{Toaster-Brcspf7v.cjs → Toaster-Dy1AonLa.cjs} +2 -2
  243. package/dist/{Toaster-Brcspf7v.cjs.map → Toaster-Dy1AonLa.cjs.map} +1 -1
  244. package/dist/TranslatedFields-CuK5KKzE.cjs +2 -0
  245. package/dist/TranslatedFields-CuK5KKzE.cjs.map +1 -0
  246. package/dist/TranslatedFields-DKXznBtD.js +86 -0
  247. package/dist/TranslatedFields-DKXznBtD.js.map +1 -0
  248. package/dist/{UserCard-1ubnvBV6.cjs → UserCard-DbudGMvG.cjs} +2 -2
  249. package/dist/UserCard-DbudGMvG.cjs.map +1 -0
  250. package/dist/{UserCard-DcTLEHFu.js → UserCard-UG_Cwe-Y.js} +3 -3
  251. package/dist/UserCard-UG_Cwe-Y.js.map +1 -0
  252. package/dist/app/AdminRoot.d.cts +13 -3
  253. package/dist/app/AdminRoot.d.ts +13 -3
  254. package/dist/components/Alert/Alert.d.cts +1 -1
  255. package/dist/components/Alert/Alert.d.ts +1 -1
  256. package/dist/components/Alert/index.cjs +1 -1
  257. package/dist/components/Alert/index.js +1 -1
  258. package/dist/components/AuthLayout/AuthLayout.d.cts +2 -2
  259. package/dist/components/AuthLayout/AuthLayout.d.ts +2 -2
  260. package/dist/components/Breadcrumbs/Breadcrumbs.d.cts +2 -1
  261. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +2 -1
  262. package/dist/components/Breadcrumbs/index.cjs +1 -1
  263. package/dist/components/Breadcrumbs/index.js +1 -1
  264. package/dist/components/Button/index.cjs +1 -1
  265. package/dist/components/Button/index.js +1 -1
  266. package/dist/components/Card/Card.d.cts +1 -1
  267. package/dist/components/Card/Card.d.ts +1 -1
  268. package/dist/components/Card/index.cjs +1 -1
  269. package/dist/components/Card/index.js +1 -1
  270. package/dist/components/Chip/Chip.d.cts +1 -1
  271. package/dist/components/Chip/Chip.d.ts +1 -1
  272. package/dist/components/Chip/index.cjs +1 -1
  273. package/dist/components/Chip/index.js +1 -1
  274. package/dist/components/ChoiceCard/ChoiceCard.d.cts +1 -1
  275. package/dist/components/ChoiceCard/ChoiceCard.d.ts +1 -1
  276. package/dist/components/ChoiceCard/index.cjs +1 -1
  277. package/dist/components/ChoiceCard/index.js +1 -1
  278. package/dist/components/CodeBlock/CodeBlock.d.cts +1 -1
  279. package/dist/components/CodeBlock/CodeBlock.d.ts +1 -1
  280. package/dist/components/CodeBlock/index.cjs +1 -1
  281. package/dist/components/CodeBlock/index.js +1 -1
  282. package/dist/components/ColorPicker/index.cjs +1 -1
  283. package/dist/components/ColorPicker/index.js +1 -1
  284. package/dist/components/ColorRamp/index.cjs +1 -1
  285. package/dist/components/ColorRamp/index.js +1 -1
  286. package/dist/components/CopyButton/index.cjs +1 -1
  287. package/dist/components/CopyButton/index.js +1 -1
  288. package/dist/components/DatePicker/index.cjs +1 -1
  289. package/dist/components/DatePicker/index.js +1 -1
  290. package/dist/components/DateTimePicker/DateTimePicker.d.cts +2 -2
  291. package/dist/components/DateTimePicker/DateTimePicker.d.ts +2 -2
  292. package/dist/components/DateTimePicker/index.cjs +1 -1
  293. package/dist/components/DateTimePicker/index.js +1 -1
  294. package/dist/components/DescriptionList/DescriptionList.d.cts +1 -1
  295. package/dist/components/DescriptionList/DescriptionList.d.ts +1 -1
  296. package/dist/components/DescriptionList/index.cjs +1 -1
  297. package/dist/components/DescriptionList/index.js +1 -1
  298. package/dist/components/Dropdown/index.cjs +1 -1
  299. package/dist/components/Dropdown/index.js +1 -1
  300. package/dist/components/EmptyState/index.cjs +1 -1
  301. package/dist/components/EmptyState/index.js +1 -1
  302. package/dist/components/ErrorState/index.cjs +1 -1
  303. package/dist/components/ErrorState/index.js +2 -2
  304. package/dist/components/FileCard/FileCard.d.cts +5 -2
  305. package/dist/components/FileCard/FileCard.d.ts +5 -2
  306. package/dist/components/FileCard/index.cjs +1 -1
  307. package/dist/components/FileCard/index.js +1 -1
  308. package/dist/components/FileUploader/FileUploader.d.cts +5 -5
  309. package/dist/components/FileUploader/FileUploader.d.ts +5 -5
  310. package/dist/components/FileUploader/index.cjs +1 -1
  311. package/dist/components/FileUploader/index.js +1 -1
  312. package/dist/components/Flag/index.cjs +1 -1
  313. package/dist/components/Flag/index.js +1 -1
  314. package/dist/components/FloatingPanel/FloatingPanel.d.cts +6 -5
  315. package/dist/components/FloatingPanel/FloatingPanel.d.ts +6 -5
  316. package/dist/components/FullscreenToggle/index.cjs +1 -1
  317. package/dist/components/FullscreenToggle/index.js +1 -1
  318. package/dist/components/IconButton/index.cjs +1 -1
  319. package/dist/components/IconButton/index.js +1 -1
  320. package/dist/components/List/index.cjs +1 -1
  321. package/dist/components/List/index.js +2 -2
  322. package/dist/components/Loader/Loader.d.cts +1 -1
  323. package/dist/components/Loader/Loader.d.ts +1 -1
  324. package/dist/components/Loader/index.cjs +1 -1
  325. package/dist/components/Loader/index.js +1 -1
  326. package/dist/components/LocationPicker/index.cjs +1 -1
  327. package/dist/components/LocationPicker/index.js +1 -1
  328. package/dist/components/Modal/Modal.d.cts +1 -1
  329. package/dist/components/Modal/Modal.d.ts +1 -1
  330. package/dist/components/Modal/index.cjs +1 -1
  331. package/dist/components/Modal/index.js +1 -1
  332. package/dist/components/MultiSelect/index.cjs +1 -1
  333. package/dist/components/MultiSelect/index.js +1 -1
  334. package/dist/components/NumberField/index.cjs +1 -1
  335. package/dist/components/NumberField/index.js +1 -1
  336. package/dist/components/OtpField/OtpField.d.cts +1 -1
  337. package/dist/components/OtpField/OtpField.d.ts +1 -1
  338. package/dist/components/OtpField/index.cjs +1 -1
  339. package/dist/components/OtpField/index.js +1 -1
  340. package/dist/components/PageError/index.cjs +1 -1
  341. package/dist/components/PageError/index.js +1 -1
  342. package/dist/components/PageLayout/PageLayout.d.cts +2 -2
  343. package/dist/components/PageLayout/PageLayout.d.ts +2 -2
  344. package/dist/components/PageLayout/index.cjs +1 -1
  345. package/dist/components/PageLayout/index.js +1 -1
  346. package/dist/components/PageNotFound/index.cjs +1 -1
  347. package/dist/components/PageNotFound/index.js +1 -1
  348. package/dist/components/Pagination/index.cjs +1 -1
  349. package/dist/components/Pagination/index.js +1 -1
  350. package/dist/components/PaletteField/PaletteField.d.cts +8 -2
  351. package/dist/components/PaletteField/PaletteField.d.ts +8 -2
  352. package/dist/components/PaletteField/index.cjs +1 -1
  353. package/dist/components/PaletteField/index.js +1 -1
  354. package/dist/components/PhoneField/index.cjs +1 -1
  355. package/dist/components/PhoneField/index.js +1 -1
  356. package/dist/components/Popconfirm/index.cjs +1 -1
  357. package/dist/components/Popconfirm/index.js +1 -1
  358. package/dist/components/Popover/Popover.d.cts +1 -1
  359. package/dist/components/Popover/Popover.d.ts +1 -1
  360. package/dist/components/Progress/index.cjs +1 -1
  361. package/dist/components/Progress/index.js +1 -1
  362. package/dist/components/QrCode/QrCode.d.cts +5 -2
  363. package/dist/components/QrCode/QrCode.d.ts +5 -2
  364. package/dist/components/QrCode/index.cjs +1 -1
  365. package/dist/components/QrCode/index.js +1 -1
  366. package/dist/components/RemoveDialog/index.cjs +1 -1
  367. package/dist/components/RemoveDialog/index.js +1 -1
  368. package/dist/components/RichTextEditor/RichTextEditor.d.cts +1 -1
  369. package/dist/components/RichTextEditor/RichTextEditor.d.ts +1 -1
  370. package/dist/components/RichTextEditor/index.cjs +1 -1
  371. package/dist/components/RichTextEditor/index.js +1 -1
  372. package/dist/components/RootLayout/RootLayout.d.cts +26 -6
  373. package/dist/components/RootLayout/RootLayout.d.ts +26 -6
  374. package/dist/components/RootLayout/SettingsDrawer.d.cts +8 -2
  375. package/dist/components/RootLayout/SettingsDrawer.d.ts +8 -2
  376. package/dist/components/RootLayout/index.cjs +1 -1
  377. package/dist/components/RootLayout/index.d.cts +1 -1
  378. package/dist/components/RootLayout/index.d.ts +1 -1
  379. package/dist/components/RootLayout/index.js +1 -1
  380. package/dist/components/Select/index.cjs +1 -1
  381. package/dist/components/Select/index.js +1 -1
  382. package/dist/components/Sidebar/index.cjs +1 -1
  383. package/dist/components/Sidebar/index.js +1 -1
  384. package/dist/components/Slider/Slider.d.cts +2 -2
  385. package/dist/components/Slider/Slider.d.ts +2 -2
  386. package/dist/components/Slider/index.cjs +1 -1
  387. package/dist/components/Slider/index.js +1 -1
  388. package/dist/components/SpeedDial/index.cjs +1 -1
  389. package/dist/components/SpeedDial/index.js +1 -1
  390. package/dist/components/Stepper/Stepper.d.cts +2 -2
  391. package/dist/components/Stepper/Stepper.d.ts +2 -2
  392. package/dist/components/Stepper/index.cjs +1 -1
  393. package/dist/components/Stepper/index.js +1 -1
  394. package/dist/components/Table/Table.d.cts +1 -1
  395. package/dist/components/Table/Table.d.ts +1 -1
  396. package/dist/components/Table/index.cjs +1 -1
  397. package/dist/components/Table/index.js +1 -1
  398. package/dist/components/Tabs/index.cjs +1 -1
  399. package/dist/components/Tabs/index.js +1 -1
  400. package/dist/components/TagsField/TagsField.d.cts +1 -1
  401. package/dist/components/TagsField/TagsField.d.ts +1 -1
  402. package/dist/components/TagsField/index.cjs +1 -1
  403. package/dist/components/TagsField/index.js +1 -1
  404. package/dist/components/TextField/index.cjs +1 -1
  405. package/dist/components/TextField/index.js +1 -1
  406. package/dist/components/ThemeToggle/index.cjs +1 -1
  407. package/dist/components/ThemeToggle/index.js +1 -1
  408. package/dist/components/TimePicker/index.cjs +1 -1
  409. package/dist/components/TimePicker/index.js +1 -1
  410. package/dist/components/Toast/index.cjs +1 -1
  411. package/dist/components/Toast/index.js +1 -1
  412. package/dist/components/TranslatedFields/TranslatedFields.d.cts +1 -1
  413. package/dist/components/TranslatedFields/TranslatedFields.d.ts +1 -1
  414. package/dist/components/TranslatedFields/index.cjs +1 -1
  415. package/dist/components/TranslatedFields/index.js +1 -1
  416. package/dist/components/UserCard/UserCard.d.cts +6 -5
  417. package/dist/components/UserCard/UserCard.d.ts +6 -5
  418. package/dist/components/UserCard/index.cjs +1 -1
  419. package/dist/components/UserCard/index.js +1 -1
  420. package/dist/entries/app.cjs +1 -1
  421. package/dist/entries/app.js +1 -1
  422. package/dist/entries/components.cjs +1 -1
  423. package/dist/entries/components.js +56 -56
  424. package/dist/entries/i18n.cjs +1 -1
  425. package/dist/entries/i18n.js +2 -2
  426. package/dist/entries/theme.cjs +1 -1
  427. package/dist/entries/theme.d.cts +2 -2
  428. package/dist/entries/theme.d.ts +2 -2
  429. package/dist/entries/theme.js +12 -11
  430. package/dist/form/useForm.d.cts +1 -1
  431. package/dist/form/useForm.d.ts +1 -1
  432. package/dist/hooks/useMediaQuery.d.cts +3 -3
  433. package/dist/hooks/useMediaQuery.d.ts +3 -3
  434. package/dist/i18n/messages.d.cts +26 -0
  435. package/dist/i18n/messages.d.ts +26 -0
  436. package/dist/index.cjs +1 -1
  437. package/dist/index.css +3 -3
  438. package/dist/index.js +232 -231
  439. package/dist/{messages-CMgYU5p6.js → messages-BiRLMy1E.js} +228 -46
  440. package/dist/messages-BiRLMy1E.js.map +1 -0
  441. package/dist/messages-C_fRRCg6.cjs +36 -0
  442. package/dist/messages-C_fRRCg6.cjs.map +1 -0
  443. package/dist/theme/ConfigProvider.d.cts +47 -7
  444. package/dist/theme/ConfigProvider.d.ts +47 -7
  445. package/dist/theme/index.d.cts +2 -2
  446. package/dist/theme/index.d.ts +2 -2
  447. package/dist/useForm-CGbJ44Gp.js.map +1 -1
  448. package/dist/useForm-CSw6r1n1.cjs.map +1 -1
  449. package/dist/{useHomeTo-MfvJxziQ.cjs → useHomeTo-BaM7kBDh.cjs} +2 -2
  450. package/dist/{useHomeTo-MfvJxziQ.cjs.map → useHomeTo-BaM7kBDh.cjs.map} +1 -1
  451. package/dist/{useHomeTo-Ckq7scIY.js → useHomeTo-DQj9tVZI.js} +2 -2
  452. package/dist/{useHomeTo-Ckq7scIY.js.map → useHomeTo-DQj9tVZI.js.map} +1 -1
  453. package/dist/useMediaQuery-CHMrI6Dy.cjs.map +1 -1
  454. package/dist/useMediaQuery-DrDUrkmJ.js.map +1 -1
  455. package/dist/{useOptionMenu-3YlvxPAM.cjs → useOptionMenu-BKC1y6oj.cjs} +2 -2
  456. package/dist/{useOptionMenu-3YlvxPAM.cjs.map → useOptionMenu-BKC1y6oj.cjs.map} +1 -1
  457. package/dist/{useOptionMenu-BBsyUow1.js → useOptionMenu-Dom1-bqm.js} +5 -5
  458. package/dist/{useOptionMenu-BBsyUow1.js.map → useOptionMenu-Dom1-bqm.js.map} +1 -1
  459. package/package.json +1 -1
  460. package/dist/AdminRoot-CRTBGUxq.cjs +0 -2
  461. package/dist/AdminRoot-CRTBGUxq.cjs.map +0 -1
  462. package/dist/AdminRoot-JOgiNkJA.js +0 -107
  463. package/dist/AdminRoot-JOgiNkJA.js.map +0 -1
  464. package/dist/Alert-CY8iU1zd.cjs +0 -2
  465. package/dist/Alert-CY8iU1zd.cjs.map +0 -1
  466. package/dist/Alert-CtUr-0s8.js +0 -70
  467. package/dist/Alert-CtUr-0s8.js.map +0 -1
  468. package/dist/Breadcrumbs-Dqhk-dY2.js.map +0 -1
  469. package/dist/Breadcrumbs-hi6dJhfN.cjs.map +0 -1
  470. package/dist/Card-B91LGIzF.js +0 -128
  471. package/dist/Card-B91LGIzF.js.map +0 -1
  472. package/dist/Card-CkZtVNyV.cjs +0 -2
  473. package/dist/Card-CkZtVNyV.cjs.map +0 -1
  474. package/dist/Chip-B7cAHjlx.cjs.map +0 -1
  475. package/dist/Chip-D5ZZs3QH.js.map +0 -1
  476. package/dist/ChoiceCardGroup-143hR0v_.cjs +0 -2
  477. package/dist/ChoiceCardGroup-Cx8CtmPl.js +0 -180
  478. package/dist/ChoiceCardGroup-Cx8CtmPl.js.map +0 -1
  479. package/dist/CodeBlock-C3mG_seZ.cjs.map +0 -1
  480. package/dist/CodeBlock-DrWRSRmO.js.map +0 -1
  481. package/dist/ColorPicker-C1pDI4su.cjs +0 -2
  482. package/dist/ConfigProvider-B_Bb6pk1.cjs +0 -2
  483. package/dist/ConfigProvider-B_Bb6pk1.cjs.map +0 -1
  484. package/dist/ConfigProvider-DeMASTVo.js +0 -347
  485. package/dist/ConfigProvider-DeMASTVo.js.map +0 -1
  486. package/dist/DatePicker-CXRsT-lt.cjs +0 -2
  487. package/dist/DateTimePicker-B-Jjejzm.js.map +0 -1
  488. package/dist/DateTimePicker-BuTIRTUX.cjs +0 -2
  489. package/dist/DateTimePicker-BuTIRTUX.cjs.map +0 -1
  490. package/dist/DescriptionList-CG08_qwT.js.map +0 -1
  491. package/dist/DescriptionList-S9C6Tp90.cjs.map +0 -1
  492. package/dist/FileCard-5QvVkO1-.js.map +0 -1
  493. package/dist/FileCard-Cl88Gu6L.cjs.map +0 -1
  494. package/dist/FileUploader-DwAl3UXI.js.map +0 -1
  495. package/dist/FileUploader-FMVbj7rz.cjs.map +0 -1
  496. package/dist/ListItem-Qo1Tt6Fi.cjs +0 -2
  497. package/dist/Modal-DTnB_mGg.js.map +0 -1
  498. package/dist/Modal-DjSOhZqd.cjs.map +0 -1
  499. package/dist/OtpField-Dy4O1MeD.js +0 -174
  500. package/dist/OtpField-Dy4O1MeD.js.map +0 -1
  501. package/dist/OtpField-OdkuKKcV.cjs +0 -2
  502. package/dist/OtpField-OdkuKKcV.cjs.map +0 -1
  503. package/dist/PageLayout-ojiBEcxI.js.map +0 -1
  504. package/dist/PageLayout-rtEl8uqS.cjs.map +0 -1
  505. package/dist/Pagination-DoDGKGpQ.js +0 -139
  506. package/dist/Pagination-DoDGKGpQ.js.map +0 -1
  507. package/dist/Pagination-Ffv6IFIU.cjs +0 -2
  508. package/dist/Pagination-Ffv6IFIU.cjs.map +0 -1
  509. package/dist/PaletteField-ChG2VQtS.js +0 -54
  510. package/dist/PaletteField-ChG2VQtS.js.map +0 -1
  511. package/dist/PaletteField-DQ1OvXqe.cjs +0 -2
  512. package/dist/PaletteField-DQ1OvXqe.cjs.map +0 -1
  513. package/dist/QrCode-B9YbQNVc.js +0 -80
  514. package/dist/QrCode-B9YbQNVc.js.map +0 -1
  515. package/dist/QrCode-CNVYpz9j.cjs +0 -2
  516. package/dist/QrCode-CNVYpz9j.cjs.map +0 -1
  517. package/dist/RichTextEditor-DSvSaszc.cjs +0 -2
  518. package/dist/RichTextEditor-DSvSaszc.cjs.map +0 -1
  519. package/dist/RichTextEditor-itYD1PfE.js.map +0 -1
  520. package/dist/RootLayout-BlYjYAYk.js +0 -582
  521. package/dist/RootLayout-BlYjYAYk.js.map +0 -1
  522. package/dist/RootLayout-D5nlzYlH.cjs +0 -2
  523. package/dist/RootLayout-D5nlzYlH.cjs.map +0 -1
  524. package/dist/Sidebar-C3-u3Agj.cjs +0 -2
  525. package/dist/Slider-0joKXhPo.cjs +0 -2
  526. package/dist/Slider-0joKXhPo.cjs.map +0 -1
  527. package/dist/Slider-CwZYxDO0.js +0 -184
  528. package/dist/Slider-CwZYxDO0.js.map +0 -1
  529. package/dist/Stepper-BN0GsRZW.js.map +0 -1
  530. package/dist/Stepper-wPPs57uZ.cjs.map +0 -1
  531. package/dist/Table-CFl3OYlo.cjs.map +0 -1
  532. package/dist/Table-DChIfjqj.js.map +0 -1
  533. package/dist/TagsField-5mbyaFQZ.cjs +0 -2
  534. package/dist/TagsField-5mbyaFQZ.cjs.map +0 -1
  535. package/dist/TagsField-CoBRqcjW.js.map +0 -1
  536. package/dist/ThemeToggle-_SUmLxmU.js +0 -28
  537. package/dist/TimePicker-6nHQx0P5.cjs +0 -2
  538. package/dist/TranslatedFields-CVc0NvXa.cjs +0 -2
  539. package/dist/TranslatedFields-CVc0NvXa.cjs.map +0 -1
  540. package/dist/TranslatedFields-CmRhRGC_.js +0 -86
  541. package/dist/TranslatedFields-CmRhRGC_.js.map +0 -1
  542. package/dist/UserCard-1ubnvBV6.cjs.map +0 -1
  543. package/dist/UserCard-DcTLEHFu.js.map +0 -1
  544. package/dist/messages-CMgYU5p6.js.map +0 -1
  545. package/dist/messages-h22vS9zn.cjs +0 -36
  546. package/dist/messages-h22vS9zn.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"RootLayout-BlYjYAYk.js","sources":["../src/components/RootLayout/SettingsDrawer.tsx","../src/components/RootLayout/RootLayout.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport { DEFAULT_FONT_FAMILY, useT, useTheme } from '../../theme'\nimport { Blockquote } from '../Blockquote'\nimport { Button } from '../Button'\nimport { Col } from '../Flex'\nimport { Icon } from '../Icon'\nimport { Divider } from '../Divider'\nimport { Modal } from '../Modal'\nimport { Popconfirm } from '../Popconfirm'\nimport { ChoiceCardGroup } from '../ChoiceCard'\nimport { Select } from '../Select'\nimport { SwatchPicker } from '../SwatchPicker'\nimport { Typography } from '../Typography'\n\n// Accent choices offered alongside the provider's default (which leads each list) — 15 per mode, so\n// each theme shows 16 total. Tuned PER MODE (deeper tones for light, brighter for dark) and paired by\n// hue (red → violet + a neutral) so a color keeps its identity across themes.\nconst ALT_SWATCHES: Record<'light' | 'dark', string[]> = {\n light: [\n '#dc2626', // red\n '#ea580c', // orange\n '#d97706', // amber\n '#ca8a04', // yellow\n '#65a30d', // lime\n '#16a34a', // green\n '#059669', // emerald\n '#0891b2', // cyan\n '#0284c7', // sky\n '#2563eb', // blue\n '#4f46e5', // indigo\n '#7c3aed', // violet\n '#c026d3', // fuchsia\n '#db2777', // pink\n '#475569', // slate\n ],\n dark: [\n '#f87171', // red\n '#fb923c', // orange\n '#fbbf24', // amber\n '#facc15', // yellow\n '#a3e635', // lime\n '#4ade80', // green\n '#34d399', // emerald\n '#22d3ee', // cyan\n '#38bdf8', // sky\n '#60a5fa', // blue\n '#818cf8', // indigo\n '#a78bfa', // violet\n '#e879f9', // fuchsia\n '#f472b6', // pink\n '#94a3b8', // slate\n ],\n}\n\nexport interface SettingsDrawerProps {\n /** Whether the drawer is open. */\n open: boolean\n /** Close handler. */\n onClose: () => void\n /** Show the light/dark **Theme** section (gated by the shell's `header.theme`, the same flag as the header toggle). */\n showTheme?: boolean\n}\n\n/**\n * The header user-menu **Settings** drawer (a right-side `Modal`), top to bottom: a **Theme** section — an\n * exclusive `ChoiceCardGroup` (**Light** / **Dark** cards) driving `useTheme().setMode`, shown only when\n * **`showTheme`** (the shell's `header.theme`, so the header toggle + this section appear/disappear\n * together); **Accent Color** — **two `SwatchPicker`s** (Light + Dark) so both accents are chosen\n * independently, each with a per-mode set (deeper tones for light, brighter for dark), calling\n * `setAccentColor(color, mode)` and persisting it — each list leads with the provider's default for that\n * mode (`defaultAccentColors[mode]`), selected when there's no override (picking it clears the override).\n * When `showTheme` is off the panel is locked to one mode, so **only the active mode's accent picker**\n * shows (the other is pointless without a theme switch);\n * a **Font** section (a searchable `Select` — Inter preset + type any Google Font — driving\n * `setFontFamily`); and a **Header** section (an exclusive `ChoiceCardGroup` **Scrollable** / **Fixed**\n * driving `setHeaderSticky`); and a **Shape** section (an exclusive `ChoiceCardGroup` **Rounded** /\n * **Square** driving `setShape` — `square` flattens every corner in the panel to `border-radius: 0`). A\n * note on top (a `Blockquote`) says changes apply and save instantly — there's no Save step; a\n * footer **Reset to Defaults** button (`filled` `error`, behind a `Popconfirm`) (`useTheme().resetPreferences`, disabled while nothing differs) puts\n * every one of them back to the app's configured defaults.\n * Internal to the admin shell — not a public export.\n */\nexport function SettingsDrawer({ open, onClose, showTheme = true }: SettingsDrawerProps) {\n const {\n mode,\n setMode,\n accentColors,\n defaultAccentColors,\n setAccentColor,\n headerSticky,\n setHeaderSticky,\n fontFamily,\n setFontFamily,\n shape,\n setShape,\n hasCustomPreferences,\n resetPreferences,\n } = useTheme()\n const t = useT()\n // the drawer content — after a Reset the (now disabled) footer button drops focus to <body>, outside the\n // drawer's focus trap, so focus is moved back onto the first section's selected control\n const contentRef = useRef<HTMLDivElement | null>(null)\n const handleReset = () => {\n resetPreferences()\n requestAnimationFrame(() => {\n const root = contentRef.current\n const target =\n root?.querySelector<HTMLElement>('input:checked, [aria-checked=\"true\"]') ??\n root?.querySelector<HTMLElement>('input, button, [tabindex]:not([tabindex=\"-1\"])')\n target?.focus()\n })\n }\n\n // One searchable Select doubles as a \"type any Google Font\" field. Base = Inter (the only preset) +\n // the active font (so a custom pick stays visible/selectable). While searching, the typed query is\n // offered as its own option — picking it applies + loads that family. Base is always kept in the\n // list (never filtered out) so `value` always resolves in the trigger, even mid-search.\n const [fontQuery, setFontQuery] = useState('')\n const q = fontQuery.trim()\n const base =\n fontFamily !== DEFAULT_FONT_FAMILY ? [DEFAULT_FONT_FAMILY, fontFamily] : [DEFAULT_FONT_FAMILY]\n const showTyped = q.length > 0 && !base.some((f) => f.toLowerCase() === q.toLowerCase())\n const fontOptions = (showTyped ? [q, ...base] : base).map((f) => ({\n value: f,\n label: f === DEFAULT_FONT_FAMILY ? t('settings.fontDefault', { font: f }) : f,\n }))\n\n const picker = (mode: 'light' | 'dark', label: string) => {\n const def = defaultAccentColors[mode]\n // the provider's default (per mode) leads the list; then the mode's alts (minus any collision)\n const colors = [def, ...ALT_SWATCHES[mode].filter((c) => c.toLowerCase() !== def.toLowerCase())]\n return (\n <SwatchPicker\n label={label}\n colors={colors}\n // with no override, this mode's default swatch reads as selected\n value={accentColors[mode] ?? def}\n // the default swatch clears this mode's override; the rest set it\n onChange={(color) =>\n setAccentColor(color.toLowerCase() === def.toLowerCase() ? null : color, mode)\n }\n labels={{ [def]: t('settings.accentDefault', { color: def }) }}\n aria-label={String(label)}\n />\n )\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n placement=\"right\"\n size=\"sm\"\n title={t('settings.label')}\n icon=\"Setting5\"\n footer={\n // one action: put every appearance choice back to the app's defaults (disabled while unchanged),\n // behind a quick confirm — it undoes several choices at once\n <Popconfirm\n title={t('settings.resetConfirmTitle')}\n description={t('settings.resetConfirmDesc')}\n confirmLabel={t('settings.resetConfirm')}\n icon=\"RotateLeft\"\n disabled={!hasCustomPreferences}\n onConfirm={handleReset}\n >\n <Button\n variant=\"filled\"\n size=\"sm\"\n color=\"error\"\n fullWidth\n startIcon={<Icon name=\"RotateLeft\" />}\n disabled={!hasCustomPreferences}\n >\n {t('settings.reset')}\n </Button>\n </Popconfirm>\n }\n >\n <div ref={contentRef}>\n {/* no Save step: every choice below applies instantly and is persisted on change */}\n <Blockquote size=\"sm\" style={{ marginBottom: 'var(--tz-space-md)' }}>\n {t('settings.autoSaveNote')}\n </Blockquote>\n {showTheme && (\n <>\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.themeTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.themeDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={mode}\n onChange={(v) => {\n if (typeof v === 'string') setMode(v as 'light' | 'dark')\n }}\n options={[\n {\n value: 'light',\n label: t('settings.light'),\n description: t('settings.lightDesc'),\n icon: 'Sun',\n },\n {\n value: 'dark',\n label: t('settings.dark'),\n description: t('settings.darkDesc'),\n icon: 'Moon',\n },\n ]}\n aria-label={t('settings.themeTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n </>\n )}\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.accentTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.accentDesc')}\n </Typography>\n <Col gap=\"md\" style={{ marginTop: 'var(--tz-space-sm)' }}>\n {showTheme ? (\n <>\n {picker('light', t('settings.lightTheme'))}\n {picker('dark', t('settings.darkTheme'))}\n </>\n ) : (\n // theme switching is off → the panel stays in one mode, so only that mode's accent matters\n picker(mode, mode === 'light' ? t('settings.lightTheme') : t('settings.darkTheme'))\n )}\n </Col>\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.fontTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.fontDesc')}\n </Typography>\n <Select\n label={t('settings.fontFamily')}\n searchable\n searchPlaceholder={t('settings.fontSearch')}\n value={fontFamily}\n options={fontOptions}\n onSearchChange={setFontQuery}\n onChange={(v) => {\n setFontFamily(v)\n setFontQuery('')\n }}\n aria-label={t('settings.fontFamily')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.headerTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.headerDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={headerSticky ? 'fixed' : 'static'}\n // exclusive (radio) → always a string; set sticky from the picked card\n onChange={(v) => {\n if (typeof v === 'string') setHeaderSticky(v === 'fixed')\n }}\n options={[\n {\n value: 'static',\n label: t('settings.scrollable'),\n description: t('settings.scrollableDesc'),\n },\n { value: 'fixed', label: t('settings.fixed'), description: t('settings.fixedDesc') },\n ]}\n aria-label={t('settings.headerTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.shapeTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.shapeDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={shape}\n // exclusive (radio) → always a string; the two values are exactly the ThemeShape union\n onChange={(v) => {\n if (v === 'rounded' || v === 'square') setShape(v)\n }}\n options={[\n {\n value: 'rounded',\n label: t('settings.rounded'),\n description: t('settings.roundedDesc'),\n },\n { value: 'square', label: t('settings.square'), description: t('settings.squareDesc') },\n ]}\n aria-label={t('settings.shapeTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n </div>\n </Modal>\n )\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { Link, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { clsx } from 'clsx'\nimport { useMediaQuery } from '../../hooks/useMediaQuery'\nimport { useLockBodyScroll } from '../../hooks/useLockBodyScroll'\nimport {\n useHeaderConfig,\n useLanguage,\n useT,\n useTheme,\n type HeaderAction,\n type HeaderConfig,\n type HeaderEnvironment,\n type HeaderMenuItem,\n type HeaderUser,\n} from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Badge } from '../Badge'\nimport { Chip } from '../Chip'\nimport { Col, Row } from '../Flex'\nimport { Divider } from '../Divider'\nimport { Dropdown } from '../Dropdown'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ListItem, type ListItemProps } from '../List'\nimport { FullscreenToggle } from '../FullscreenToggle'\nimport { ThemeToggle } from '../ThemeToggle'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { Breadcrumbs } from '../Breadcrumbs'\nimport { Toaster, type ToasterProps } from '../Toast'\nimport { NavSearch, Sidebar, useFirstNavTo } from '../Sidebar/Sidebar'\nimport { Flag } from '../Flag'\nimport { SettingsDrawer } from './SettingsDrawer'\nimport { isDev } from '../ErrorState/errorMessage'\nimport styles from './RootLayout.module.css'\n\n/**\n * `header.environment` → the chip to show, or `null` for none (empty, or production). A string gets its first\n * letter capitalized, the `warning` tint and the `Code` icon; an object is used as given. Exported for tests.\n */\nexport function resolveEnvironment(\n environment: HeaderConfig['environment'],\n): Required<HeaderEnvironment> | null {\n if (environment == null) return null\n const env = typeof environment === 'string' ? { label: environment } : environment\n const label = env.label.trim()\n if (!label || /^prod(uction)?$/i.test(label)) return null\n return {\n label: typeof environment === 'string' ? label.charAt(0).toUpperCase() + label.slice(1) : label,\n color: env.color ?? 'warning',\n icon: env.icon ?? 'Code',\n }\n}\n\n// `ListItem as={Link}` — `to` / `params` / `search` are router props ListItem doesn't type itself\nconst MenuLink = ListItem as unknown as (\n props: ListItemProps & Pick<HeaderMenuItem, 'to' | 'params' | 'search'>,\n) => ReactNode\n\n/**\n * The shell header config + its user shape now live in the theme layer (so `config.header` can carry\n * them app-wide). These aliases keep the historical `RootLayout*` names importable.\n */\nexport type RootLayoutUser = HeaderUser\nexport type RootLayoutHeader = HeaderConfig\n\nexport interface RootLayoutProps {\n /** Brand logo at the top of the sidebar card — pass an `<img>`, an `<Icon>`, or any node. */\n logo?: ReactNode\n /**\n * Where clicking the logo goes. Defaults to the **first page in the menu** the user may open (the same\n * \"home\" as the breadcrumbs' first crumb and `FirstRouteRedirect`) — so the logo always leads back to the\n * page the panel opens on. Pass a path to send it elsewhere, or `false` for a plain, non-clickable logo.\n */\n logoTo?: LinkProps['to'] | false\n /** Optional content pinned to the **bottom of the sidebar** (e.g. a promo / \"Need help?\" card). */\n sidebarFooter?: ReactNode\n /**\n * Header config for **this** shell — merged **over** the app-wide `config.header` (the prop wins).\n * Fields: the built-in `theme` / `search` / `settings` / `languages` toggles (default `true`),\n * `fullscreen` (default `false`), `breadcrumbs` (default `true`), and the account (`onLogout` / `user`).\n */\n header?: RootLayoutHeader\n /**\n * The built-in toast viewport, mounted for you so `toast.*()` works app-wide with no extra setup.\n * Defaults to `true` (a `<Toaster>` with its defaults). Pass `ToasterProps` to configure it\n * (`{ position, duration }`), or `false` to opt out — e.g. when you mount your own `<Toaster>`.\n */\n toaster?: boolean | ToasterProps\n /** Routed content — the consumer passes `<Outlet />`. */\n children: ReactNode\n}\n\n/**\n * The admin-panel shell — a **floating** layout: the whole app sits on a soft `--tz-color-background`\n * canvas, with a rounded, elevated `--tz-color-surface` **sidebar card** (`logo` + auto-generated `Sidebar` + an optional\n * `sidebarFooter`) beside the header + content. Set it as the root route's component and pass\n * `<Outlet />` as `children`; the `Sidebar` builds itself from the routes' `staticData`. The header\n * holds an optional `ThemeToggle` (on by default), a **Settings** button (opens a right-side drawer to\n * pick + persist the `accent` color), plus an account `Avatar` whose menu has a **Sign out** item when\n * `header.onLogout` is given. The content area stacks **`Breadcrumbs` → `children`**; each page wraps its\n * body in `PageLayout`, which owns the page heading (`pageTitle`), the back button (`back`) and the\n * title-row actions (`pageActions`). On a 404 the breadcrumbs are suppressed automatically (a partial route\n * match would otherwise show a stale section), regardless of `header.breadcrumbs`. A `<Toaster>` is **mounted by default** so\n * `toast.*()` works app-wide with no extra setup (configure via `toaster`, or `toaster={false}` to opt\n * out). Styling is token-based, so it follows the active `ConfigProvider` mode. Requires\n * `@tanstack/react-router` (peer).\n */\nexport function RootLayout({\n logo,\n logoTo,\n sidebarFooter,\n header,\n toaster = true,\n children,\n}: RootLayoutProps) {\n // header sticky/static — the user's persisted choice (seeded from config.header.sticky)\n const { headerSticky } = useTheme()\n const { language, setLanguage, languages } = useLanguage()\n const t = useT()\n // the logo links \"home\" — the first menu page the user may open, unless the app points it elsewhere\n const firstNavTo = useFirstNavTo()\n const logoHref = logoTo === false ? undefined : (logoTo ?? firstNavTo)\n // app-wide header config (config.header) as the base; this shell's `header` prop wins over it\n const configHeader = useHeaderConfig()\n const h: HeaderConfig = { ...configHeader, ...header }\n const showTheme = h.theme ?? true\n const showFullscreen = h.fullscreen ?? false\n const showSettings = h.settings ?? true\n const showSearch = h.search ?? true\n const showLanguages = h.languages ?? true\n const showBreadcrumbs = h.breadcrumbs ?? true\n const toasterProps = typeof toaster === 'object' ? toaster : undefined\n const onLogout = h.onLogout\n const user = h.user\n const environment = resolveEnvironment(h.environment)\n const accountMenu = h.menu ?? [] // custom account-menu items (between the user block and Sign out)\n // app header actions: inline IconButtons — on xs they fold into the account menu (when there is one)\n const headerActions = h.actions ?? []\n const isXs = useMediaQuery('xs')\n const actionsInMenu = isXs && onLogout != null\n const runAction = (a: HeaderAction) => {\n a.onClick?.()\n if (a.to) navigate({ to: a.to as LinkProps['to'], params: a.params, search: a.search } as never)\n }\n // an account-menu item with nothing to do is almost always a config slip — say so in development\n const inertMenuItems = accountMenu\n .filter((item) => !item.to && !item.onClick)\n .map((item) => item.label)\n .join(', ')\n useEffect(() => {\n if (inertMenuItems && isDev())\n console.warn(\n `[RootLayout] header.menu items without \\`to\\` or \\`onClick\\`: ${inertMenuItems}`,\n )\n }, [inertMenuItems])\n // below 1280px the sidebar auto-collapses (and auto-expands again above it); a manual toggle holds\n // until the next breakpoint cross. `useMediaQuery` is correct on the first client render, so no flash.\n const isNarrow = useMediaQuery('md') // ≤ 1279.98px — the shared `md` breakpoint\n const [collapsed, setCollapsed] = useState(isNarrow)\n useEffect(() => {\n setCollapsed(isNarrow)\n }, [isNarrow])\n // while the sidebar overlays the content (narrow + open), lock page scroll so scrolling inside the\n // drawer doesn't scroll the content behind it\n useLockBodyScroll(isNarrow && !collapsed)\n // navigating from the overlay drawer (a nav link or a search suggestion — both change the route) auto-\n // closes it, so you land on the page instead of the still-open sidebar; desktop navigation is untouched\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n useEffect(() => {\n if (isNarrow) setCollapsed(true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname])\n // on a 404 the URL often partially matches a named layout route (e.g. `/core/xxx` still resolves\n // \"Core\" as the active section), so the breadcrumbs would show a stale, wrong trail.\n // suppress them when the router is in a notFound state — automatic, no opt-out needed. `statusCode ===\n // 404` is the primary signal; a `notFound` match status is the fallback.\n const isNotFound = useRouterState({\n select: (s) => s.statusCode === 404 || s.matches.some((m) => m.status === 'notFound'),\n })\n const [settingsOpen, setSettingsOpen] = useState(false)\n const navigate = useNavigate()\n\n return (\n <div className={clsx(styles.shell, collapsed && styles.shellCollapsed)}>\n <aside className={styles.sidebar}>\n {/* fixed-width inner: the outer <aside> animates its width to 0 (and clips via overflow),\n while this keeps the sidebar's real width so the content never reflows mid-collapse */}\n <div className={styles.sidebarInner}>\n {logo ? (\n <div className={styles.brand}>\n {logoHref ? (\n <Link to={logoHref} className={styles.brandLink} aria-label={t('sidebar.home')}>\n {logo}\n </Link>\n ) : (\n logo\n )}\n {/* in-drawer close — only shown when the sidebar overlays (narrow), where the header\n toggle is behind the backdrop; closes the drawer */}\n <IconButton\n variant=\"filled\"\n size=\"sm\"\n className={styles.sidebarClose}\n aria-label={t('common.close')}\n onClick={() => setCollapsed(true)}\n >\n <Icon name=\"Close\" />\n </IconButton>\n </div>\n ) : null}\n {/* the search lives in the header on desktop; below 576px (full-width drawer) it moves here,\n between the logo and the menu (CSS toggles which instance shows) */}\n {showSearch ? (\n <div className={styles.sidebarSearch}>\n <NavSearch />\n </div>\n ) : null}\n <div className={styles.navScroll}>\n <Sidebar />\n </div>\n {sidebarFooter ? <div className={styles.sidebarFooter}>{sidebarFooter}</div> : null}\n </div>\n </aside>\n {/* dim backdrop behind the overlay sidebar — a sibling of the sidebar (same stacking context, so the\n sidebar reliably sits above it, unlike a body-portaled Overlay). Only shown/interactive below\n 1280px while open (CSS); clicking it closes the drawer. On desktop the sidebar is a grid column. */}\n <div className={styles.backdrop} onClick={() => setCollapsed(true)} aria-hidden=\"true\" />\n <div className={styles.main}>\n <header className={clsx(styles.topbar, headerSticky && styles.topbarSticky)}>\n <div className={styles.headerStart}>\n <IconButton\n aria-label={collapsed ? 'Show sidebar' : 'Hide sidebar'}\n aria-expanded={!collapsed}\n variant=\"filled\"\n size=\"sm\"\n onClick={() => setCollapsed((c) => !c)}\n >\n <Icon name=\"Menu\" />\n </IconButton>\n {showSearch ? (\n <div className={styles.headerSearch}>\n <NavSearch />\n </div>\n ) : null}\n </div>\n <div className={styles.headerEnd}>\n {/* the environment badge — on every screen size, unlike `extra` */}\n {environment ? (\n <Chip\n size=\"sm\"\n color={environment.color}\n startIcon={environment.icon ? <Icon name={environment.icon} /> : undefined}\n className={styles.environment}\n >\n {environment.label}\n </Chip>\n ) : null}\n {h.extra != null && !isXs ? <div className={styles.headerExtra}>{h.extra}</div> : null}\n {!actionsInMenu\n ? headerActions.map((a, i) => (\n <Badge\n key={`${a.label}-${i}`}\n content={a.dot ? undefined : a.badge}\n dot={a.dot}\n color={a.badgeColor ?? 'error'}\n >\n <Tooltip content={a.label} placement=\"bottom\">\n <IconButton\n variant=\"filled\"\n size=\"sm\"\n color={a.color}\n aria-label={a.label}\n disabled={a.disabled}\n onClick={() => runAction(a)}\n >\n <Icon name={a.icon} />\n </IconButton>\n </Tooltip>\n </Badge>\n ))\n : null}\n {showFullscreen ? <FullscreenToggle variant=\"filled\" size=\"sm\" /> : null}\n {showTheme ? <ThemeToggle variant=\"filled\" size=\"sm\" /> : null}\n {showLanguages && languages.length > 1 ? (\n <Dropdown\n placement=\"bottom-end\"\n trigger={\n <IconButton variant=\"filled\" size=\"sm\" aria-label={t('language.label')}>\n <Icon name=\"Global\" />\n </IconButton>\n }\n >\n {languages.map((l) => (\n <ListItem\n key={l.code}\n clickable\n selected={l.code === language}\n onClick={() => setLanguage(l.code)}\n icon={<Flag code={l.code} />}\n >\n {l.label ?? l.code}\n </ListItem>\n ))}\n </Dropdown>\n ) : null}\n {showSettings ? (\n <IconButton\n aria-label={t('settings.label')}\n variant=\"text\"\n size=\"sm\"\n className={styles.settings}\n onClick={() => setSettingsOpen(true)}\n >\n <Icon name=\"Setting5\" />\n </IconButton>\n ) : null}\n {onLogout ? (\n <Dropdown\n placement=\"bottom-end\"\n style={{ minWidth: 230 }}\n trigger={\n <button type=\"button\" className={styles.account} aria-label={t('account.label')}>\n <Avatar size=\"md\" name={user?.name} src={user?.avatar} color=\"primary\" />\n </button>\n }\n >\n {user ? (\n <>\n <Row gap={8} align=\"center\" padding=\"var(--tz-space-xxs) var(--tz-space-xs)\">\n <Avatar size=\"md\" name={user.name} src={user.avatar} color=\"primary\" />\n <Col gap={2}>\n {/* name, or a \"Welcome\" greeting fallback when no name is given */}\n <Typography variant=\"body\">{user.name ?? t('userCard.welcome')}</Typography>\n {user.email ? (\n <Typography variant=\"bodySmall\" color=\"muted\">\n {user.email}\n </Typography>\n ) : null}\n </Col>\n </Row>\n <Divider />\n </>\n ) : null}\n {/* on xs the header actions fold in here, above the app's own menu items */}\n {actionsInMenu\n ? headerActions.map((a, i) => (\n <ListItem\n key={`action-${a.label}-${i}`}\n icon={<Icon name={a.icon} color={a.color} />}\n clickable\n disabled={a.disabled}\n onClick={() => runAction(a)}\n trailing={\n a.dot ? (\n <span\n className={styles.menuDot}\n style={{ background: `var(--tz-color-${a.badgeColor ?? 'error'})` }}\n aria-hidden=\"true\"\n />\n ) : a.badge != null && a.badge !== 0 && a.badge !== '' ? (\n <Chip size=\"sm\" color={a.badgeColor ?? 'error'}>\n {typeof a.badge === 'number' && a.badge > 99 ? '99+' : a.badge}\n </Chip>\n ) : undefined\n }\n >\n {a.label}\n </ListItem>\n ))\n : null}\n {actionsInMenu && headerActions.length > 0 ? <Divider /> : null}\n {/* app-supplied items (e.g. \"Account\"), between the user block and Sign out */}\n {accountMenu.map((item, i) => {\n const itemProps = {\n icon: item.icon ? <Icon name={item.icon} color={item.color} /> : undefined,\n color: item.color,\n clickable: true,\n disabled: item.disabled,\n onClick: item.onClick,\n children: item.label,\n }\n // `to` → a real router link (href, new-tab clicks); the Dropdown still closes on select\n // and roves to it (`a[href]`). Link runs `onClick` first, then navigates.\n return item.to && !item.disabled ? (\n <MenuLink\n key={i}\n {...itemProps}\n as={Link}\n to={item.to}\n params={item.params}\n search={item.search}\n />\n ) : (\n <ListItem key={i} {...itemProps} />\n )\n })}\n {/* keep the destructive Sign out visually separated from the custom items */}\n {accountMenu.length > 0 ? <Divider /> : null}\n <ListItem icon={<Icon name=\"Logout2\" color=\"error\" />} clickable onClick={onLogout}>\n {t('userCard.signOut')}\n </ListItem>\n </Dropdown>\n ) : null}\n </div>\n </header>\n <main className={styles.content}>\n {showBreadcrumbs && !isNotFound ? <Breadcrumbs /> : null}\n {children}\n </main>\n </div>\n {toaster !== false && <Toaster {...toasterProps} />}\n {showSettings ? (\n <SettingsDrawer\n open={settingsOpen}\n onClose={() => setSettingsOpen(false)}\n showTheme={showTheme}\n />\n ) : null}\n </div>\n )\n}\n"],"names":["ALT_SWATCHES","SettingsDrawer","open","onClose","showTheme","mode","setMode","accentColors","defaultAccentColors","setAccentColor","headerSticky","setHeaderSticky","fontFamily","setFontFamily","shape","setShape","hasCustomPreferences","resetPreferences","useTheme","t","useT","contentRef","useRef","handleReset","root","target","fontQuery","setFontQuery","useState","q","base","DEFAULT_FONT_FAMILY","fontOptions","f","picker","label","def","colors","c","jsx","SwatchPicker","color","Modal","Popconfirm","Button","Icon","jsxs","Blockquote","Fragment","Typography","ChoiceCardGroup","v","Divider","Col","Select","resolveEnvironment","environment","env","MenuLink","ListItem","RootLayout","logo","logoTo","sidebarFooter","header","toaster","children","language","setLanguage","languages","useLanguage","firstNavTo","useFirstNavTo","logoHref","h","useHeaderConfig","showFullscreen","showSettings","showSearch","showLanguages","showBreadcrumbs","toasterProps","onLogout","user","accountMenu","headerActions","isXs","useMediaQuery","actionsInMenu","runAction","a","_a","navigate","inertMenuItems","item","useEffect","isDev","isNarrow","collapsed","setCollapsed","useLockBodyScroll","pathname","useRouterState","s","isNotFound","m","settingsOpen","setSettingsOpen","useNavigate","clsx","styles","Link","IconButton","NavSearch","Sidebar","Chip","i","Badge","Tooltip","FullscreenToggle","ThemeToggle","Dropdown","l","Flag","Avatar","Row","itemProps","Breadcrumbs","Toaster"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("react/jsx-runtime"),y=require("react"),D=require("@tanstack/react-router"),K=require("clsx"),V=require("./useMediaQuery-CHMrI6Dy.cjs"),oe=require("./useLockBodyScroll-CIXHZo-Q.cjs"),Z=require("./Avatar-l48Ice6t.cjs"),ie=require("./Badge-DVbe1rAI.cjs"),ee=require("./Chip-B7cAHjlx.cjs"),U=require("./Col-BdQeyKEX.cjs"),_=require("./Divider-CzbhdCiD.cjs"),se=require("./Dropdown-DYYhzKSo.cjs"),m=require("./Icon-B6lz-V0A.cjs"),I=require("./IconButton-CQ25TtBc.cjs"),F=require("./ListItem-Qo1Tt6Fi.cjs"),ce=require("./FullscreenToggle-Bbb_z2xj.cjs"),le=require("./ThemeToggle-BgKfcb02.cjs"),de=require("./Tooltip-DmMq5R1x.cjs"),i=require("./Typography-d97DdbNd.cjs"),ue=require("./Breadcrumbs-hi6dJhfN.cjs"),he=require("./Toaster-Brcspf7v.cjs"),R=require("./Sidebar-C3-u3Agj.cjs"),me=require("./Flag-Do7x-AhS.cjs"),ge=require("./Blockquote-BWGxIL_V.cjs"),pe=require("./Button-CYZoF18-.cjs"),be=require("./Modal-DjSOhZqd.cjs"),xe=require("./Popconfirm-CYc8ywDI.cjs"),Q=require("./ChoiceCardGroup-143hR0v_.cjs"),je=require("./Select-1FWkryTK.cjs"),fe=require("./SwatchPicker-0gnOvv7U.cjs"),g=require("./ConfigProvider-B_Bb6pk1.cjs"),ve=require("./errorMessage-C7N4KvUS.cjs"),ye={light:["#dc2626","#ea580c","#d97706","#ca8a04","#65a30d","#16a34a","#059669","#0891b2","#0284c7","#2563eb","#4f46e5","#7c3aed","#c026d3","#db2777","#475569"],dark:["#f87171","#fb923c","#fbbf24","#facc15","#a3e635","#4ade80","#34d399","#22d3ee","#38bdf8","#60a5fa","#818cf8","#a78bfa","#e879f9","#f472b6","#94a3b8"]};function _e({open:c,onClose:b,showTheme:l=!0}){const{mode:C,setMode:T,accentColors:P,defaultAccentColors:O,setAccentColor:H,headerSticky:$,setHeaderSticky:N,fontFamily:d,setFontFamily:W,shape:z,setShape:Y,hasCustomPreferences:r,resetPreferences:w}=g.useTheme(),t=g.useT(),S=y.useRef(null),A=()=>{w(),requestAnimationFrame(()=>{const n=S.current,p=(n==null?void 0:n.querySelector('input:checked, [aria-checked="true"]'))??(n==null?void 0:n.querySelector('input, button, [tabindex]:not([tabindex="-1"])'));p==null||p.focus()})},[G,B]=y.useState(""),k=G.trim(),j=d!==g.DEFAULT_FONT_FAMILY?[g.DEFAULT_FONT_FAMILY,d]:[g.DEFAULT_FONT_FAMILY],f=(k.length>0&&!j.some(n=>n.toLowerCase()===k.toLowerCase())?[k,...j]:j).map(n=>({value:n,label:n===g.DEFAULT_FONT_FAMILY?t("settings.fontDefault",{font:n}):n})),v=(n,p)=>{const h=O[n],E=[h,...ye[n].filter(x=>x.toLowerCase()!==h.toLowerCase())];return e.jsx(fe.SwatchPicker,{label:p,colors:E,value:P[n]??h,onChange:x=>H(x.toLowerCase()===h.toLowerCase()?null:x,n),labels:{[h]:t("settings.accentDefault",{color:h})},"aria-label":String(p)})};return e.jsx(be.Modal,{open:c,onClose:b,placement:"right",size:"sm",title:t("settings.label"),icon:"Setting5",footer:e.jsx(xe.Popconfirm,{title:t("settings.resetConfirmTitle"),description:t("settings.resetConfirmDesc"),confirmLabel:t("settings.resetConfirm"),icon:"RotateLeft",disabled:!r,onConfirm:A,children:e.jsx(pe.Button,{variant:"filled",size:"sm",color:"error",fullWidth:!0,startIcon:e.jsx(m.Icon,{name:"RotateLeft"}),disabled:!r,children:t("settings.reset")})}),children:e.jsxs("div",{ref:S,children:[e.jsx(ge.Blockquote,{size:"sm",style:{marginBottom:"var(--tz-space-md)"},children:t("settings.autoSaveNote")}),l&&e.jsxs(e.Fragment,{children:[e.jsx(i.Typography,{variant:"subtitle",as:"h3",children:t("settings.themeTitle")}),e.jsx(i.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:t("settings.themeDesc")}),e.jsx(Q.ChoiceCardGroup,{exclusive:!0,color:"accent",minCardWidth:130,value:C,onChange:n=>{typeof n=="string"&&T(n)},options:[{value:"light",label:t("settings.light"),description:t("settings.lightDesc"),icon:"Sun"},{value:"dark",label:t("settings.dark"),description:t("settings.darkDesc"),icon:"Moon"}],"aria-label":t("settings.themeTitle"),style:{marginTop:"var(--tz-space-sm)"}}),e.jsx(_.Divider,{style:{margin:"var(--tz-space-md) 0"}})]}),e.jsx(i.Typography,{variant:"subtitle",as:"h3",children:t("settings.accentTitle")}),e.jsx(i.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:t("settings.accentDesc")}),e.jsx(U.Col,{gap:"md",style:{marginTop:"var(--tz-space-sm)"},children:l?e.jsxs(e.Fragment,{children:[v("light",t("settings.lightTheme")),v("dark",t("settings.darkTheme"))]}):v(C,t(C==="light"?"settings.lightTheme":"settings.darkTheme"))}),e.jsx(_.Divider,{style:{margin:"var(--tz-space-md) 0"}}),e.jsx(i.Typography,{variant:"subtitle",as:"h3",children:t("settings.fontTitle")}),e.jsx(i.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:t("settings.fontDesc")}),e.jsx(je.Select,{label:t("settings.fontFamily"),searchable:!0,searchPlaceholder:t("settings.fontSearch"),value:d,options:f,onSearchChange:B,onChange:n=>{W(n),B("")},"aria-label":t("settings.fontFamily"),style:{marginTop:"var(--tz-space-sm)"}}),e.jsx(_.Divider,{style:{margin:"var(--tz-space-md) 0"}}),e.jsx(i.Typography,{variant:"subtitle",as:"h3",children:t("settings.headerTitle")}),e.jsx(i.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:t("settings.headerDesc")}),e.jsx(Q.ChoiceCardGroup,{exclusive:!0,color:"accent",minCardWidth:130,value:$?"fixed":"static",onChange:n=>{typeof n=="string"&&N(n==="fixed")},options:[{value:"static",label:t("settings.scrollable"),description:t("settings.scrollableDesc")},{value:"fixed",label:t("settings.fixed"),description:t("settings.fixedDesc")}],"aria-label":t("settings.headerTitle"),style:{marginTop:"var(--tz-space-sm)"}}),e.jsx(_.Divider,{style:{margin:"var(--tz-space-md) 0"}}),e.jsx(i.Typography,{variant:"subtitle",as:"h3",children:t("settings.shapeTitle")}),e.jsx(i.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:t("settings.shapeDesc")}),e.jsx(Q.ChoiceCardGroup,{exclusive:!0,color:"accent",minCardWidth:130,value:z,onChange:n=>{(n==="rounded"||n==="square")&&Y(n)},options:[{value:"rounded",label:t("settings.rounded"),description:t("settings.roundedDesc")},{value:"square",label:t("settings.square"),description:t("settings.squareDesc")}],"aria-label":t("settings.shapeTitle"),style:{marginTop:"var(--tz-space-sm)"}})]})})}const Ce="_shell_f721j_5",Te="_shellCollapsed_f721j_21",Se="_sidebar_f721j_21",ke="_sidebarInner_f721j_49",qe="_sidebarClose_f721j_58",Le="_backdrop_f721j_65",De="_brand_f721j_70",Ie="_brandLink_f721j_79",Fe="_sidebarSearch_f721j_111",Ne="_navScroll_f721j_124",ze="_sidebarFooter_f721j_133",we="_headerSearch_f721j_140",Ae="_main_f721j_144",Be="_topbar_f721j_151",Ee="_topbarSticky_f721j_164",Me="_headerStart_f721j_175",Re="_headerEnd_f721j_184",Pe="_environment_f721j_191",Oe="_headerExtra_f721j_197",He="_menuDot_f721j_204",$e="_account_f721j_211",We="_content_f721j_227",Ge="_settings_f721j_239",a={shell:Ce,shellCollapsed:Te,sidebar:Se,sidebarInner:ke,sidebarClose:qe,backdrop:Le,brand:De,brandLink:Ie,sidebarSearch:Fe,navScroll:Ne,sidebarFooter:ze,headerSearch:we,main:Ae,topbar:Be,topbarSticky:Ee,headerStart:Me,headerEnd:Re,environment:Pe,headerExtra:Oe,menuDot:He,account:$e,content:We,settings:Ge};function Qe(c){if(c==null)return null;const b=typeof c=="string"?{label:c}:c,l=b.label.trim();return!l||/^prod(uction)?$/i.test(l)?null:{label:typeof c=="string"?l.charAt(0).toUpperCase()+l.slice(1):l,color:b.color??"warning",icon:b.icon??"Code"}}const Ue=F.ListItem;function Ye({logo:c,logoTo:b,sidebarFooter:l,header:C,toaster:T=!0,children:P}){const{headerSticky:O}=g.useTheme(),{language:H,setLanguage:$,languages:N}=g.useLanguage(),d=g.useT(),W=R.useFirstNavTo(),z=b===!1?void 0:b??W,r={...g.useHeaderConfig(),...C},w=r.theme??!0,t=r.fullscreen??!1,S=r.settings??!0,A=r.search??!0,G=r.languages??!0,B=r.breadcrumbs??!0,k=typeof T=="object"?T:void 0,j=r.onLogout,o=r.user,f=Qe(r.environment),v=r.menu??[],n=r.actions??[],p=V.useMediaQuery("xs"),h=p&&j!=null,E=s=>{var u;(u=s.onClick)==null||u.call(s),s.to&&re({to:s.to,params:s.params,search:s.search})},x=v.filter(s=>!s.to&&!s.onClick).map(s=>s.label).join(", ");y.useEffect(()=>{x&&ve.isDev()&&console.warn(`[RootLayout] header.menu items without \`to\` or \`onClick\`: ${x}`)},[x]);const q=V.useMediaQuery("md"),[M,L]=y.useState(q);y.useEffect(()=>{L(q)},[q]),oe.useLockBodyScroll(q&&!M);const te=D.useRouterState({select:s=>s.location.pathname});y.useEffect(()=>{q&&L(!0)},[te]);const ne=D.useRouterState({select:s=>s.statusCode===404||s.matches.some(u=>u.status==="notFound")}),[ae,X]=y.useState(!1),re=D.useNavigate();return e.jsxs("div",{className:K.clsx(a.shell,M&&a.shellCollapsed),children:[e.jsx("aside",{className:a.sidebar,children:e.jsxs("div",{className:a.sidebarInner,children:[c?e.jsxs("div",{className:a.brand,children:[z?e.jsx(D.Link,{to:z,className:a.brandLink,"aria-label":d("sidebar.home"),children:c}):c,e.jsx(I.IconButton,{variant:"filled",size:"sm",className:a.sidebarClose,"aria-label":d("common.close"),onClick:()=>L(!0),children:e.jsx(m.Icon,{name:"Close"})})]}):null,A?e.jsx("div",{className:a.sidebarSearch,children:e.jsx(R.NavSearch,{})}):null,e.jsx("div",{className:a.navScroll,children:e.jsx(R.Sidebar,{})}),l?e.jsx("div",{className:a.sidebarFooter,children:l}):null]})}),e.jsx("div",{className:a.backdrop,onClick:()=>L(!0),"aria-hidden":"true"}),e.jsxs("div",{className:a.main,children:[e.jsxs("header",{className:K.clsx(a.topbar,O&&a.topbarSticky),children:[e.jsxs("div",{className:a.headerStart,children:[e.jsx(I.IconButton,{"aria-label":M?"Show sidebar":"Hide sidebar","aria-expanded":!M,variant:"filled",size:"sm",onClick:()=>L(s=>!s),children:e.jsx(m.Icon,{name:"Menu"})}),A?e.jsx("div",{className:a.headerSearch,children:e.jsx(R.NavSearch,{})}):null]}),e.jsxs("div",{className:a.headerEnd,children:[f?e.jsx(ee.Chip,{size:"sm",color:f.color,startIcon:f.icon?e.jsx(m.Icon,{name:f.icon}):void 0,className:a.environment,children:f.label}):null,r.extra!=null&&!p?e.jsx("div",{className:a.headerExtra,children:r.extra}):null,h?null:n.map((s,u)=>e.jsx(ie.Badge,{content:s.dot?void 0:s.badge,dot:s.dot,color:s.badgeColor??"error",children:e.jsx(de.Tooltip,{content:s.label,placement:"bottom",children:e.jsx(I.IconButton,{variant:"filled",size:"sm",color:s.color,"aria-label":s.label,disabled:s.disabled,onClick:()=>E(s),children:e.jsx(m.Icon,{name:s.icon})})})},`${s.label}-${u}`)),t?e.jsx(ce.FullscreenToggle,{variant:"filled",size:"sm"}):null,w?e.jsx(le.ThemeToggle,{variant:"filled",size:"sm"}):null,G&&N.length>1?e.jsx(se.Dropdown,{placement:"bottom-end",trigger:e.jsx(I.IconButton,{variant:"filled",size:"sm","aria-label":d("language.label"),children:e.jsx(m.Icon,{name:"Global"})}),children:N.map(s=>e.jsx(F.ListItem,{clickable:!0,selected:s.code===H,onClick:()=>$(s.code),icon:e.jsx(me.Flag,{code:s.code}),children:s.label??s.code},s.code))}):null,S?e.jsx(I.IconButton,{"aria-label":d("settings.label"),variant:"text",size:"sm",className:a.settings,onClick:()=>X(!0),children:e.jsx(m.Icon,{name:"Setting5"})}):null,j?e.jsxs(se.Dropdown,{placement:"bottom-end",style:{minWidth:230},trigger:e.jsx("button",{type:"button",className:a.account,"aria-label":d("account.label"),children:e.jsx(Z.Avatar,{size:"md",name:o==null?void 0:o.name,src:o==null?void 0:o.avatar,color:"primary"})}),children:[o?e.jsxs(e.Fragment,{children:[e.jsxs(U.Row,{gap:8,align:"center",padding:"var(--tz-space-xxs) var(--tz-space-xs)",children:[e.jsx(Z.Avatar,{size:"md",name:o.name,src:o.avatar,color:"primary"}),e.jsxs(U.Col,{gap:2,children:[e.jsx(i.Typography,{variant:"body",children:o.name??d("userCard.welcome")}),o.email?e.jsx(i.Typography,{variant:"bodySmall",color:"muted",children:o.email}):null]})]}),e.jsx(_.Divider,{})]}):null,h?n.map((s,u)=>e.jsx(F.ListItem,{icon:e.jsx(m.Icon,{name:s.icon,color:s.color}),clickable:!0,disabled:s.disabled,onClick:()=>E(s),trailing:s.dot?e.jsx("span",{className:a.menuDot,style:{background:`var(--tz-color-${s.badgeColor??"error"})`},"aria-hidden":"true"}):s.badge!=null&&s.badge!==0&&s.badge!==""?e.jsx(ee.Chip,{size:"sm",color:s.badgeColor??"error",children:typeof s.badge=="number"&&s.badge>99?"99+":s.badge}):void 0,children:s.label},`action-${s.label}-${u}`)):null,h&&n.length>0?e.jsx(_.Divider,{}):null,v.map((s,u)=>{const J={icon:s.icon?e.jsx(m.Icon,{name:s.icon,color:s.color}):void 0,color:s.color,clickable:!0,disabled:s.disabled,onClick:s.onClick,children:s.label};return s.to&&!s.disabled?e.jsx(Ue,{...J,as:D.Link,to:s.to,params:s.params,search:s.search},u):e.jsx(F.ListItem,{...J},u)}),v.length>0?e.jsx(_.Divider,{}):null,e.jsx(F.ListItem,{icon:e.jsx(m.Icon,{name:"Logout2",color:"error"}),clickable:!0,onClick:j,children:d("userCard.signOut")})]}):null]})]}),e.jsxs("main",{className:a.content,children:[B&&!ne?e.jsx(ue.Breadcrumbs,{}):null,P]})]}),T!==!1&&e.jsx(he.Toaster,{...k}),S?e.jsx(_e,{open:ae,onClose:()=>X(!1),showTheme:w}):null]})}exports.RootLayout=Ye;
2
- //# sourceMappingURL=RootLayout-D5nlzYlH.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RootLayout-D5nlzYlH.cjs","sources":["../src/components/RootLayout/SettingsDrawer.tsx","../src/components/RootLayout/RootLayout.tsx"],"sourcesContent":["import { useRef, useState } from 'react'\nimport { DEFAULT_FONT_FAMILY, useT, useTheme } from '../../theme'\nimport { Blockquote } from '../Blockquote'\nimport { Button } from '../Button'\nimport { Col } from '../Flex'\nimport { Icon } from '../Icon'\nimport { Divider } from '../Divider'\nimport { Modal } from '../Modal'\nimport { Popconfirm } from '../Popconfirm'\nimport { ChoiceCardGroup } from '../ChoiceCard'\nimport { Select } from '../Select'\nimport { SwatchPicker } from '../SwatchPicker'\nimport { Typography } from '../Typography'\n\n// Accent choices offered alongside the provider's default (which leads each list) — 15 per mode, so\n// each theme shows 16 total. Tuned PER MODE (deeper tones for light, brighter for dark) and paired by\n// hue (red → violet + a neutral) so a color keeps its identity across themes.\nconst ALT_SWATCHES: Record<'light' | 'dark', string[]> = {\n light: [\n '#dc2626', // red\n '#ea580c', // orange\n '#d97706', // amber\n '#ca8a04', // yellow\n '#65a30d', // lime\n '#16a34a', // green\n '#059669', // emerald\n '#0891b2', // cyan\n '#0284c7', // sky\n '#2563eb', // blue\n '#4f46e5', // indigo\n '#7c3aed', // violet\n '#c026d3', // fuchsia\n '#db2777', // pink\n '#475569', // slate\n ],\n dark: [\n '#f87171', // red\n '#fb923c', // orange\n '#fbbf24', // amber\n '#facc15', // yellow\n '#a3e635', // lime\n '#4ade80', // green\n '#34d399', // emerald\n '#22d3ee', // cyan\n '#38bdf8', // sky\n '#60a5fa', // blue\n '#818cf8', // indigo\n '#a78bfa', // violet\n '#e879f9', // fuchsia\n '#f472b6', // pink\n '#94a3b8', // slate\n ],\n}\n\nexport interface SettingsDrawerProps {\n /** Whether the drawer is open. */\n open: boolean\n /** Close handler. */\n onClose: () => void\n /** Show the light/dark **Theme** section (gated by the shell's `header.theme`, the same flag as the header toggle). */\n showTheme?: boolean\n}\n\n/**\n * The header user-menu **Settings** drawer (a right-side `Modal`), top to bottom: a **Theme** section — an\n * exclusive `ChoiceCardGroup` (**Light** / **Dark** cards) driving `useTheme().setMode`, shown only when\n * **`showTheme`** (the shell's `header.theme`, so the header toggle + this section appear/disappear\n * together); **Accent Color** — **two `SwatchPicker`s** (Light + Dark) so both accents are chosen\n * independently, each with a per-mode set (deeper tones for light, brighter for dark), calling\n * `setAccentColor(color, mode)` and persisting it — each list leads with the provider's default for that\n * mode (`defaultAccentColors[mode]`), selected when there's no override (picking it clears the override).\n * When `showTheme` is off the panel is locked to one mode, so **only the active mode's accent picker**\n * shows (the other is pointless without a theme switch);\n * a **Font** section (a searchable `Select` — Inter preset + type any Google Font — driving\n * `setFontFamily`); and a **Header** section (an exclusive `ChoiceCardGroup` **Scrollable** / **Fixed**\n * driving `setHeaderSticky`); and a **Shape** section (an exclusive `ChoiceCardGroup` **Rounded** /\n * **Square** driving `setShape` — `square` flattens every corner in the panel to `border-radius: 0`). A\n * note on top (a `Blockquote`) says changes apply and save instantly — there's no Save step; a\n * footer **Reset to Defaults** button (`filled` `error`, behind a `Popconfirm`) (`useTheme().resetPreferences`, disabled while nothing differs) puts\n * every one of them back to the app's configured defaults.\n * Internal to the admin shell — not a public export.\n */\nexport function SettingsDrawer({ open, onClose, showTheme = true }: SettingsDrawerProps) {\n const {\n mode,\n setMode,\n accentColors,\n defaultAccentColors,\n setAccentColor,\n headerSticky,\n setHeaderSticky,\n fontFamily,\n setFontFamily,\n shape,\n setShape,\n hasCustomPreferences,\n resetPreferences,\n } = useTheme()\n const t = useT()\n // the drawer content — after a Reset the (now disabled) footer button drops focus to <body>, outside the\n // drawer's focus trap, so focus is moved back onto the first section's selected control\n const contentRef = useRef<HTMLDivElement | null>(null)\n const handleReset = () => {\n resetPreferences()\n requestAnimationFrame(() => {\n const root = contentRef.current\n const target =\n root?.querySelector<HTMLElement>('input:checked, [aria-checked=\"true\"]') ??\n root?.querySelector<HTMLElement>('input, button, [tabindex]:not([tabindex=\"-1\"])')\n target?.focus()\n })\n }\n\n // One searchable Select doubles as a \"type any Google Font\" field. Base = Inter (the only preset) +\n // the active font (so a custom pick stays visible/selectable). While searching, the typed query is\n // offered as its own option — picking it applies + loads that family. Base is always kept in the\n // list (never filtered out) so `value` always resolves in the trigger, even mid-search.\n const [fontQuery, setFontQuery] = useState('')\n const q = fontQuery.trim()\n const base =\n fontFamily !== DEFAULT_FONT_FAMILY ? [DEFAULT_FONT_FAMILY, fontFamily] : [DEFAULT_FONT_FAMILY]\n const showTyped = q.length > 0 && !base.some((f) => f.toLowerCase() === q.toLowerCase())\n const fontOptions = (showTyped ? [q, ...base] : base).map((f) => ({\n value: f,\n label: f === DEFAULT_FONT_FAMILY ? t('settings.fontDefault', { font: f }) : f,\n }))\n\n const picker = (mode: 'light' | 'dark', label: string) => {\n const def = defaultAccentColors[mode]\n // the provider's default (per mode) leads the list; then the mode's alts (minus any collision)\n const colors = [def, ...ALT_SWATCHES[mode].filter((c) => c.toLowerCase() !== def.toLowerCase())]\n return (\n <SwatchPicker\n label={label}\n colors={colors}\n // with no override, this mode's default swatch reads as selected\n value={accentColors[mode] ?? def}\n // the default swatch clears this mode's override; the rest set it\n onChange={(color) =>\n setAccentColor(color.toLowerCase() === def.toLowerCase() ? null : color, mode)\n }\n labels={{ [def]: t('settings.accentDefault', { color: def }) }}\n aria-label={String(label)}\n />\n )\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n placement=\"right\"\n size=\"sm\"\n title={t('settings.label')}\n icon=\"Setting5\"\n footer={\n // one action: put every appearance choice back to the app's defaults (disabled while unchanged),\n // behind a quick confirm — it undoes several choices at once\n <Popconfirm\n title={t('settings.resetConfirmTitle')}\n description={t('settings.resetConfirmDesc')}\n confirmLabel={t('settings.resetConfirm')}\n icon=\"RotateLeft\"\n disabled={!hasCustomPreferences}\n onConfirm={handleReset}\n >\n <Button\n variant=\"filled\"\n size=\"sm\"\n color=\"error\"\n fullWidth\n startIcon={<Icon name=\"RotateLeft\" />}\n disabled={!hasCustomPreferences}\n >\n {t('settings.reset')}\n </Button>\n </Popconfirm>\n }\n >\n <div ref={contentRef}>\n {/* no Save step: every choice below applies instantly and is persisted on change */}\n <Blockquote size=\"sm\" style={{ marginBottom: 'var(--tz-space-md)' }}>\n {t('settings.autoSaveNote')}\n </Blockquote>\n {showTheme && (\n <>\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.themeTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.themeDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={mode}\n onChange={(v) => {\n if (typeof v === 'string') setMode(v as 'light' | 'dark')\n }}\n options={[\n {\n value: 'light',\n label: t('settings.light'),\n description: t('settings.lightDesc'),\n icon: 'Sun',\n },\n {\n value: 'dark',\n label: t('settings.dark'),\n description: t('settings.darkDesc'),\n icon: 'Moon',\n },\n ]}\n aria-label={t('settings.themeTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n </>\n )}\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.accentTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.accentDesc')}\n </Typography>\n <Col gap=\"md\" style={{ marginTop: 'var(--tz-space-sm)' }}>\n {showTheme ? (\n <>\n {picker('light', t('settings.lightTheme'))}\n {picker('dark', t('settings.darkTheme'))}\n </>\n ) : (\n // theme switching is off → the panel stays in one mode, so only that mode's accent matters\n picker(mode, mode === 'light' ? t('settings.lightTheme') : t('settings.darkTheme'))\n )}\n </Col>\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.fontTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.fontDesc')}\n </Typography>\n <Select\n label={t('settings.fontFamily')}\n searchable\n searchPlaceholder={t('settings.fontSearch')}\n value={fontFamily}\n options={fontOptions}\n onSearchChange={setFontQuery}\n onChange={(v) => {\n setFontFamily(v)\n setFontQuery('')\n }}\n aria-label={t('settings.fontFamily')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.headerTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.headerDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={headerSticky ? 'fixed' : 'static'}\n // exclusive (radio) → always a string; set sticky from the picked card\n onChange={(v) => {\n if (typeof v === 'string') setHeaderSticky(v === 'fixed')\n }}\n options={[\n {\n value: 'static',\n label: t('settings.scrollable'),\n description: t('settings.scrollableDesc'),\n },\n { value: 'fixed', label: t('settings.fixed'), description: t('settings.fixedDesc') },\n ]}\n aria-label={t('settings.headerTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n\n <Divider style={{ margin: 'var(--tz-space-md) 0' }} />\n\n <Typography variant=\"subtitle\" as=\"h3\">\n {t('settings.shapeTitle')}\n </Typography>\n <Typography\n variant=\"bodySmall\"\n color=\"muted\"\n as=\"p\"\n style={{ marginTop: 'var(--tz-space-xxs)' }}\n >\n {t('settings.shapeDesc')}\n </Typography>\n <ChoiceCardGroup\n exclusive\n color=\"accent\"\n minCardWidth={130}\n value={shape}\n // exclusive (radio) → always a string; the two values are exactly the ThemeShape union\n onChange={(v) => {\n if (v === 'rounded' || v === 'square') setShape(v)\n }}\n options={[\n {\n value: 'rounded',\n label: t('settings.rounded'),\n description: t('settings.roundedDesc'),\n },\n { value: 'square', label: t('settings.square'), description: t('settings.squareDesc') },\n ]}\n aria-label={t('settings.shapeTitle')}\n style={{ marginTop: 'var(--tz-space-sm)' }}\n />\n </div>\n </Modal>\n )\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { Link, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { clsx } from 'clsx'\nimport { useMediaQuery } from '../../hooks/useMediaQuery'\nimport { useLockBodyScroll } from '../../hooks/useLockBodyScroll'\nimport {\n useHeaderConfig,\n useLanguage,\n useT,\n useTheme,\n type HeaderAction,\n type HeaderConfig,\n type HeaderEnvironment,\n type HeaderMenuItem,\n type HeaderUser,\n} from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Badge } from '../Badge'\nimport { Chip } from '../Chip'\nimport { Col, Row } from '../Flex'\nimport { Divider } from '../Divider'\nimport { Dropdown } from '../Dropdown'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ListItem, type ListItemProps } from '../List'\nimport { FullscreenToggle } from '../FullscreenToggle'\nimport { ThemeToggle } from '../ThemeToggle'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { Breadcrumbs } from '../Breadcrumbs'\nimport { Toaster, type ToasterProps } from '../Toast'\nimport { NavSearch, Sidebar, useFirstNavTo } from '../Sidebar/Sidebar'\nimport { Flag } from '../Flag'\nimport { SettingsDrawer } from './SettingsDrawer'\nimport { isDev } from '../ErrorState/errorMessage'\nimport styles from './RootLayout.module.css'\n\n/**\n * `header.environment` → the chip to show, or `null` for none (empty, or production). A string gets its first\n * letter capitalized, the `warning` tint and the `Code` icon; an object is used as given. Exported for tests.\n */\nexport function resolveEnvironment(\n environment: HeaderConfig['environment'],\n): Required<HeaderEnvironment> | null {\n if (environment == null) return null\n const env = typeof environment === 'string' ? { label: environment } : environment\n const label = env.label.trim()\n if (!label || /^prod(uction)?$/i.test(label)) return null\n return {\n label: typeof environment === 'string' ? label.charAt(0).toUpperCase() + label.slice(1) : label,\n color: env.color ?? 'warning',\n icon: env.icon ?? 'Code',\n }\n}\n\n// `ListItem as={Link}` — `to` / `params` / `search` are router props ListItem doesn't type itself\nconst MenuLink = ListItem as unknown as (\n props: ListItemProps & Pick<HeaderMenuItem, 'to' | 'params' | 'search'>,\n) => ReactNode\n\n/**\n * The shell header config + its user shape now live in the theme layer (so `config.header` can carry\n * them app-wide). These aliases keep the historical `RootLayout*` names importable.\n */\nexport type RootLayoutUser = HeaderUser\nexport type RootLayoutHeader = HeaderConfig\n\nexport interface RootLayoutProps {\n /** Brand logo at the top of the sidebar card — pass an `<img>`, an `<Icon>`, or any node. */\n logo?: ReactNode\n /**\n * Where clicking the logo goes. Defaults to the **first page in the menu** the user may open (the same\n * \"home\" as the breadcrumbs' first crumb and `FirstRouteRedirect`) — so the logo always leads back to the\n * page the panel opens on. Pass a path to send it elsewhere, or `false` for a plain, non-clickable logo.\n */\n logoTo?: LinkProps['to'] | false\n /** Optional content pinned to the **bottom of the sidebar** (e.g. a promo / \"Need help?\" card). */\n sidebarFooter?: ReactNode\n /**\n * Header config for **this** shell — merged **over** the app-wide `config.header` (the prop wins).\n * Fields: the built-in `theme` / `search` / `settings` / `languages` toggles (default `true`),\n * `fullscreen` (default `false`), `breadcrumbs` (default `true`), and the account (`onLogout` / `user`).\n */\n header?: RootLayoutHeader\n /**\n * The built-in toast viewport, mounted for you so `toast.*()` works app-wide with no extra setup.\n * Defaults to `true` (a `<Toaster>` with its defaults). Pass `ToasterProps` to configure it\n * (`{ position, duration }`), or `false` to opt out — e.g. when you mount your own `<Toaster>`.\n */\n toaster?: boolean | ToasterProps\n /** Routed content — the consumer passes `<Outlet />`. */\n children: ReactNode\n}\n\n/**\n * The admin-panel shell — a **floating** layout: the whole app sits on a soft `--tz-color-background`\n * canvas, with a rounded, elevated `--tz-color-surface` **sidebar card** (`logo` + auto-generated `Sidebar` + an optional\n * `sidebarFooter`) beside the header + content. Set it as the root route's component and pass\n * `<Outlet />` as `children`; the `Sidebar` builds itself from the routes' `staticData`. The header\n * holds an optional `ThemeToggle` (on by default), a **Settings** button (opens a right-side drawer to\n * pick + persist the `accent` color), plus an account `Avatar` whose menu has a **Sign out** item when\n * `header.onLogout` is given. The content area stacks **`Breadcrumbs` → `children`**; each page wraps its\n * body in `PageLayout`, which owns the page heading (`pageTitle`), the back button (`back`) and the\n * title-row actions (`pageActions`). On a 404 the breadcrumbs are suppressed automatically (a partial route\n * match would otherwise show a stale section), regardless of `header.breadcrumbs`. A `<Toaster>` is **mounted by default** so\n * `toast.*()` works app-wide with no extra setup (configure via `toaster`, or `toaster={false}` to opt\n * out). Styling is token-based, so it follows the active `ConfigProvider` mode. Requires\n * `@tanstack/react-router` (peer).\n */\nexport function RootLayout({\n logo,\n logoTo,\n sidebarFooter,\n header,\n toaster = true,\n children,\n}: RootLayoutProps) {\n // header sticky/static — the user's persisted choice (seeded from config.header.sticky)\n const { headerSticky } = useTheme()\n const { language, setLanguage, languages } = useLanguage()\n const t = useT()\n // the logo links \"home\" — the first menu page the user may open, unless the app points it elsewhere\n const firstNavTo = useFirstNavTo()\n const logoHref = logoTo === false ? undefined : (logoTo ?? firstNavTo)\n // app-wide header config (config.header) as the base; this shell's `header` prop wins over it\n const configHeader = useHeaderConfig()\n const h: HeaderConfig = { ...configHeader, ...header }\n const showTheme = h.theme ?? true\n const showFullscreen = h.fullscreen ?? false\n const showSettings = h.settings ?? true\n const showSearch = h.search ?? true\n const showLanguages = h.languages ?? true\n const showBreadcrumbs = h.breadcrumbs ?? true\n const toasterProps = typeof toaster === 'object' ? toaster : undefined\n const onLogout = h.onLogout\n const user = h.user\n const environment = resolveEnvironment(h.environment)\n const accountMenu = h.menu ?? [] // custom account-menu items (between the user block and Sign out)\n // app header actions: inline IconButtons — on xs they fold into the account menu (when there is one)\n const headerActions = h.actions ?? []\n const isXs = useMediaQuery('xs')\n const actionsInMenu = isXs && onLogout != null\n const runAction = (a: HeaderAction) => {\n a.onClick?.()\n if (a.to) navigate({ to: a.to as LinkProps['to'], params: a.params, search: a.search } as never)\n }\n // an account-menu item with nothing to do is almost always a config slip — say so in development\n const inertMenuItems = accountMenu\n .filter((item) => !item.to && !item.onClick)\n .map((item) => item.label)\n .join(', ')\n useEffect(() => {\n if (inertMenuItems && isDev())\n console.warn(\n `[RootLayout] header.menu items without \\`to\\` or \\`onClick\\`: ${inertMenuItems}`,\n )\n }, [inertMenuItems])\n // below 1280px the sidebar auto-collapses (and auto-expands again above it); a manual toggle holds\n // until the next breakpoint cross. `useMediaQuery` is correct on the first client render, so no flash.\n const isNarrow = useMediaQuery('md') // ≤ 1279.98px — the shared `md` breakpoint\n const [collapsed, setCollapsed] = useState(isNarrow)\n useEffect(() => {\n setCollapsed(isNarrow)\n }, [isNarrow])\n // while the sidebar overlays the content (narrow + open), lock page scroll so scrolling inside the\n // drawer doesn't scroll the content behind it\n useLockBodyScroll(isNarrow && !collapsed)\n // navigating from the overlay drawer (a nav link or a search suggestion — both change the route) auto-\n // closes it, so you land on the page instead of the still-open sidebar; desktop navigation is untouched\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n useEffect(() => {\n if (isNarrow) setCollapsed(true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname])\n // on a 404 the URL often partially matches a named layout route (e.g. `/core/xxx` still resolves\n // \"Core\" as the active section), so the breadcrumbs would show a stale, wrong trail.\n // suppress them when the router is in a notFound state — automatic, no opt-out needed. `statusCode ===\n // 404` is the primary signal; a `notFound` match status is the fallback.\n const isNotFound = useRouterState({\n select: (s) => s.statusCode === 404 || s.matches.some((m) => m.status === 'notFound'),\n })\n const [settingsOpen, setSettingsOpen] = useState(false)\n const navigate = useNavigate()\n\n return (\n <div className={clsx(styles.shell, collapsed && styles.shellCollapsed)}>\n <aside className={styles.sidebar}>\n {/* fixed-width inner: the outer <aside> animates its width to 0 (and clips via overflow),\n while this keeps the sidebar's real width so the content never reflows mid-collapse */}\n <div className={styles.sidebarInner}>\n {logo ? (\n <div className={styles.brand}>\n {logoHref ? (\n <Link to={logoHref} className={styles.brandLink} aria-label={t('sidebar.home')}>\n {logo}\n </Link>\n ) : (\n logo\n )}\n {/* in-drawer close — only shown when the sidebar overlays (narrow), where the header\n toggle is behind the backdrop; closes the drawer */}\n <IconButton\n variant=\"filled\"\n size=\"sm\"\n className={styles.sidebarClose}\n aria-label={t('common.close')}\n onClick={() => setCollapsed(true)}\n >\n <Icon name=\"Close\" />\n </IconButton>\n </div>\n ) : null}\n {/* the search lives in the header on desktop; below 576px (full-width drawer) it moves here,\n between the logo and the menu (CSS toggles which instance shows) */}\n {showSearch ? (\n <div className={styles.sidebarSearch}>\n <NavSearch />\n </div>\n ) : null}\n <div className={styles.navScroll}>\n <Sidebar />\n </div>\n {sidebarFooter ? <div className={styles.sidebarFooter}>{sidebarFooter}</div> : null}\n </div>\n </aside>\n {/* dim backdrop behind the overlay sidebar — a sibling of the sidebar (same stacking context, so the\n sidebar reliably sits above it, unlike a body-portaled Overlay). Only shown/interactive below\n 1280px while open (CSS); clicking it closes the drawer. On desktop the sidebar is a grid column. */}\n <div className={styles.backdrop} onClick={() => setCollapsed(true)} aria-hidden=\"true\" />\n <div className={styles.main}>\n <header className={clsx(styles.topbar, headerSticky && styles.topbarSticky)}>\n <div className={styles.headerStart}>\n <IconButton\n aria-label={collapsed ? 'Show sidebar' : 'Hide sidebar'}\n aria-expanded={!collapsed}\n variant=\"filled\"\n size=\"sm\"\n onClick={() => setCollapsed((c) => !c)}\n >\n <Icon name=\"Menu\" />\n </IconButton>\n {showSearch ? (\n <div className={styles.headerSearch}>\n <NavSearch />\n </div>\n ) : null}\n </div>\n <div className={styles.headerEnd}>\n {/* the environment badge — on every screen size, unlike `extra` */}\n {environment ? (\n <Chip\n size=\"sm\"\n color={environment.color}\n startIcon={environment.icon ? <Icon name={environment.icon} /> : undefined}\n className={styles.environment}\n >\n {environment.label}\n </Chip>\n ) : null}\n {h.extra != null && !isXs ? <div className={styles.headerExtra}>{h.extra}</div> : null}\n {!actionsInMenu\n ? headerActions.map((a, i) => (\n <Badge\n key={`${a.label}-${i}`}\n content={a.dot ? undefined : a.badge}\n dot={a.dot}\n color={a.badgeColor ?? 'error'}\n >\n <Tooltip content={a.label} placement=\"bottom\">\n <IconButton\n variant=\"filled\"\n size=\"sm\"\n color={a.color}\n aria-label={a.label}\n disabled={a.disabled}\n onClick={() => runAction(a)}\n >\n <Icon name={a.icon} />\n </IconButton>\n </Tooltip>\n </Badge>\n ))\n : null}\n {showFullscreen ? <FullscreenToggle variant=\"filled\" size=\"sm\" /> : null}\n {showTheme ? <ThemeToggle variant=\"filled\" size=\"sm\" /> : null}\n {showLanguages && languages.length > 1 ? (\n <Dropdown\n placement=\"bottom-end\"\n trigger={\n <IconButton variant=\"filled\" size=\"sm\" aria-label={t('language.label')}>\n <Icon name=\"Global\" />\n </IconButton>\n }\n >\n {languages.map((l) => (\n <ListItem\n key={l.code}\n clickable\n selected={l.code === language}\n onClick={() => setLanguage(l.code)}\n icon={<Flag code={l.code} />}\n >\n {l.label ?? l.code}\n </ListItem>\n ))}\n </Dropdown>\n ) : null}\n {showSettings ? (\n <IconButton\n aria-label={t('settings.label')}\n variant=\"text\"\n size=\"sm\"\n className={styles.settings}\n onClick={() => setSettingsOpen(true)}\n >\n <Icon name=\"Setting5\" />\n </IconButton>\n ) : null}\n {onLogout ? (\n <Dropdown\n placement=\"bottom-end\"\n style={{ minWidth: 230 }}\n trigger={\n <button type=\"button\" className={styles.account} aria-label={t('account.label')}>\n <Avatar size=\"md\" name={user?.name} src={user?.avatar} color=\"primary\" />\n </button>\n }\n >\n {user ? (\n <>\n <Row gap={8} align=\"center\" padding=\"var(--tz-space-xxs) var(--tz-space-xs)\">\n <Avatar size=\"md\" name={user.name} src={user.avatar} color=\"primary\" />\n <Col gap={2}>\n {/* name, or a \"Welcome\" greeting fallback when no name is given */}\n <Typography variant=\"body\">{user.name ?? t('userCard.welcome')}</Typography>\n {user.email ? (\n <Typography variant=\"bodySmall\" color=\"muted\">\n {user.email}\n </Typography>\n ) : null}\n </Col>\n </Row>\n <Divider />\n </>\n ) : null}\n {/* on xs the header actions fold in here, above the app's own menu items */}\n {actionsInMenu\n ? headerActions.map((a, i) => (\n <ListItem\n key={`action-${a.label}-${i}`}\n icon={<Icon name={a.icon} color={a.color} />}\n clickable\n disabled={a.disabled}\n onClick={() => runAction(a)}\n trailing={\n a.dot ? (\n <span\n className={styles.menuDot}\n style={{ background: `var(--tz-color-${a.badgeColor ?? 'error'})` }}\n aria-hidden=\"true\"\n />\n ) : a.badge != null && a.badge !== 0 && a.badge !== '' ? (\n <Chip size=\"sm\" color={a.badgeColor ?? 'error'}>\n {typeof a.badge === 'number' && a.badge > 99 ? '99+' : a.badge}\n </Chip>\n ) : undefined\n }\n >\n {a.label}\n </ListItem>\n ))\n : null}\n {actionsInMenu && headerActions.length > 0 ? <Divider /> : null}\n {/* app-supplied items (e.g. \"Account\"), between the user block and Sign out */}\n {accountMenu.map((item, i) => {\n const itemProps = {\n icon: item.icon ? <Icon name={item.icon} color={item.color} /> : undefined,\n color: item.color,\n clickable: true,\n disabled: item.disabled,\n onClick: item.onClick,\n children: item.label,\n }\n // `to` → a real router link (href, new-tab clicks); the Dropdown still closes on select\n // and roves to it (`a[href]`). Link runs `onClick` first, then navigates.\n return item.to && !item.disabled ? (\n <MenuLink\n key={i}\n {...itemProps}\n as={Link}\n to={item.to}\n params={item.params}\n search={item.search}\n />\n ) : (\n <ListItem key={i} {...itemProps} />\n )\n })}\n {/* keep the destructive Sign out visually separated from the custom items */}\n {accountMenu.length > 0 ? <Divider /> : null}\n <ListItem icon={<Icon name=\"Logout2\" color=\"error\" />} clickable onClick={onLogout}>\n {t('userCard.signOut')}\n </ListItem>\n </Dropdown>\n ) : null}\n </div>\n </header>\n <main className={styles.content}>\n {showBreadcrumbs && !isNotFound ? <Breadcrumbs /> : null}\n {children}\n </main>\n </div>\n {toaster !== false && <Toaster {...toasterProps} />}\n {showSettings ? (\n <SettingsDrawer\n open={settingsOpen}\n onClose={() => setSettingsOpen(false)}\n showTheme={showTheme}\n />\n ) : null}\n </div>\n )\n}\n"],"names":["ALT_SWATCHES","SettingsDrawer","open","onClose","showTheme","mode","setMode","accentColors","defaultAccentColors","setAccentColor","headerSticky","setHeaderSticky","fontFamily","setFontFamily","shape","setShape","hasCustomPreferences","resetPreferences","useTheme","useT","contentRef","useRef","handleReset","root","target","fontQuery","setFontQuery","useState","q","base","DEFAULT_FONT_FAMILY","fontOptions","f","picker","label","def","colors","c","jsx","SwatchPicker","color","Modal","Popconfirm","Button","Icon","jsxs","Blockquote","Fragment","Typography","ChoiceCardGroup","v","Divider","Col","Select","resolveEnvironment","environment","env","MenuLink","ListItem","RootLayout","logo","logoTo","sidebarFooter","header","toaster","children","language","setLanguage","languages","useLanguage","t","firstNavTo","useFirstNavTo","logoHref","h","useHeaderConfig","showFullscreen","showSettings","showSearch","showLanguages","showBreadcrumbs","toasterProps","onLogout","user","accountMenu","headerActions","isXs","useMediaQuery","actionsInMenu","runAction","a","_a","navigate","inertMenuItems","item","useEffect","isDev","isNarrow","collapsed","setCollapsed","useLockBodyScroll","pathname","useRouterState","isNotFound","m","settingsOpen","setSettingsOpen","useNavigate","clsx","styles","Link","IconButton","NavSearch","Sidebar","Chip","i","Badge","Tooltip","FullscreenToggle","ThemeToggle","Dropdown","l","Flag","Avatar","Row","itemProps","Breadcrumbs","Toaster"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const i=require("react/jsx-runtime"),m=require("react"),v=require("@tanstack/react-router"),q=require("clsx"),M=require("./Icon-B6lz-V0A.cjs"),D=require("./List-B5Ppe9R1.cjs"),z=require("./ListItem-Qo1Tt6Fi.cjs"),A=require("./TextField-BL6OAJcP.cjs"),O=require("./Typography-d97DdbNd.cjs"),E=require("./access-DPUHbE-S.cjs"),K=require("./ConfigProvider-B_Bb6pk1.cjs"),V="_nav_2n8z4_4",Y="_module_2n8z4_17",U="_search_2n8z4_25",W="_searchPanel_2n8z4_31",H="_moduleLabel_2n8z4_46",G="_leaves_2n8z4_57",Q="_navBadge_2n8z4_62",X="_navDot_2n8z4_74",J="_leafDot_2n8z4_82",Z="_collapsible_2n8z4_91",ee="_collapsibleClosed_2n8z4_96",te="_collapsibleInner_2n8z4_99",ne="_chevron_2n8z4_105",oe="_chevronButton_2n8z4_115",h={nav:V,module:Y,search:U,searchPanel:W,moduleLabel:H,leaves:G,navBadge:Q,navDot:X,leafDot:J,collapsible:Z,collapsibleClosed:ee,collapsibleInner:te,chevron:ne,chevronButton:oe},P=z.ListItem,se=e=>e.split("-").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" "),R=e=>e.replace(/^\/+|\/+$/g,""),y=e=>e.length>1&&e.endsWith("/")?e.slice(0,-1):e,w=(e,n)=>e.order-n.order||e.label.localeCompare(n.label);function $(e){const n=[];for(const l of e){const a=l.staticData,o=R(l.fullPath);!(a!=null&&a.name)||!o||n.push({path:o,name:a.name,sd:a})}const t=new Map(n.map(l=>[l.path,l])),s=n.map(l=>l.path),c=l=>s.some(a=>{var o;return a!==l&&a.startsWith(`${l}/`)&&!((o=t.get(a))!=null&&o.sd.hidden)}),r=new Set(e.map(l=>l.fullPath)),u=l=>r.has(`/${l}/`),f=(l,a)=>{const o=t.get(l);return{label:(o==null?void 0:o.name)??se(a),icon:o==null?void 0:o.sd.icon,badge:o==null?void 0:o.sd.badge,dot:o==null?void 0:o.sd.dot,order:(o==null?void 0:o.sd.order)??Number.POSITIVE_INFINITY}},g=new Map,d=l=>{let a=g.get(l);if(!a){const o=f(l,l);a={label:o.label,icon:o.icon,order:o.order,groups:new Map},g.set(l,a)}return a},_=[];for(const{path:l,name:a,sd:o}of n){const p=l.split("/");if(p.length<=2&&c(l)||o.hidden)continue;if(p.length===1){_.push({label:a,to:`/${l}`,icon:o.icon,badge:o.badge,dot:o.dot,order:o.order??Number.POSITIVE_INFINITY});continue}const S=d(p[0]);if(p.length===2)S.groups.set(l,{label:a,icon:o.icon,to:`/${l}`,badge:o.badge,dot:o.dot,order:o.order??Number.POSITIVE_INFINITY,leaves:[],isContainer:!1});else{const k=p.slice(0,2).join("/");let L=S.groups.get(k);if(!L){const I=f(k,p[1]);L={label:I.label,icon:I.icon,badge:I.badge,dot:I.dot,order:I.order,to:u(k)?`/${k}`:void 0,leaves:[],isContainer:!0},S.groups.set(k,L)}L.leaves.push({label:a,to:`/${l}`,icon:o.icon,badge:o.badge,dot:o.dot,order:o.order??Number.POSITIVE_INFINITY})}}const b=_.map(l=>({order:l.order,label:l.label,item:{kind:"link",link:{label:l.label,to:l.to,icon:l.icon,badge:l.badge,dot:l.dot}}})),N=[...g.values()].map(l=>({order:l.order,label:l.label,item:{kind:"module",module:{module:l.label,icon:l.icon,groups:[...l.groups.values()].sort(w).map(a=>({label:a.label,icon:a.icon,to:a.to,badge:a.badge,dot:a.dot,children:a.isContainer?a.leaves.sort(w).map(o=>({label:o.label,to:o.to,icon:o.icon,badge:o.badge,dot:o.dot})):void 0}))}}})),x=[...b,...N].sort(w).map(l=>l.item);return{items:x,links:x.flatMap(l=>l.kind==="link"?[l.link]:[]),modules:x.flatMap(l=>l.kind==="module"?[l.module]:[])}}function T(){const e=v.useRouter(),n=E.useAccessKeys();return m.useMemo(()=>$(Object.values(e.looseRoutesById).map(t=>{var s;return{fullPath:t.fullPath,staticData:(s=t.options)==null?void 0:s.staticData}}).filter(t=>{var s;return E.hasAccess((s=t.staticData)==null?void 0:s.roles)})),[e,n])}function B(e){var n;for(const t of e.items){if(t.kind==="link")return t.link.to;for(const s of t.module.groups){if(s.to)return s.to;const c=(n=s.children)==null?void 0:n[0];if(c)return c.to}}}function F(){return B(T())}function ae(e){var t;const n=new Map;for(const s of e){const c=(t=s.staticData)==null?void 0:t.name;if(!c)continue;const r=y(s.fullPath);n.has(r)||n.set(r,c)}return n}function le(e,n){const t=[];let s="";for(const c of R(e).split("/").filter(Boolean)){s+=`/${c}`;const r=n.get(s);r&&t.push({name:r,to:s})}return t}function ce(){const e=v.useRouter();return m.useMemo(()=>ae(Object.values(e.looseRoutesById).map(n=>{var t;return{fullPath:n.fullPath,staticData:(t=n.options)==null?void 0:t.staticData}})),[e])}function re(e,n){if(e!=null)return typeof e=="function"?e(n):e}function ie(){var n;const e=v.useRouterState({select:t=>t.matches});for(let t=e.length-1;t>=0;t--){const s=re((n=e[t].staticData)==null?void 0:n.breadcrumb,e[t].params??{});if(s)return s}}function ue(e){const n=new Set;for(const t of e.links)n.add(t.to);for(const t of e.modules)for(const s of t.groups){s.to&&n.add(s.to);for(const c of s.children??[])n.add(c.to)}return n}function de(e,n){const{leafPath:t,leafLabel:s,navigable:c}=n,r=e.map(({name:u,to:f})=>({label:u,to:f!==t&&c.has(f)?f:void 0}));return s&&(e.length>0&&e[e.length-1].to===t?r[r.length-1]={label:s}:r.push({label:s})),r}function fe(){const e=T(),n=ce(),t=v.useRouterState({select:u=>u.location.pathname}),s=ie(),c=B(e),r=de(le(t,n),{leafPath:y(t),leafLabel:s,navigable:ue(e)});return{homeTo:c,items:r}}function he(){const e=F();return e?i.jsx(v.Navigate,{to:e}):null}function me(){const{items:e}=T(),n=v.useRouterState({select:r=>r.location.pathname}),t=[];let s=[];const c=()=>{if(s.length===0)return;const r=s;s=[],t.push(i.jsx(D.List,{children:r.map(u=>i.jsx(P,{as:v.Link,to:u.to,icon:u.icon,selected:C(n,u.to),clickable:!0,trailing:j(u.badge,u.dot),children:u.label},u.to))},`links-${r[0].to}`))};for(const r of e){if(r.kind==="link"){s.push(r.link);continue}c();const u=r.module;t.push(i.jsxs("div",{className:h.module,children:[i.jsx(O.Typography,{as:"div",variant:"caption",color:"muted",uppercase:!0,className:h.moduleLabel,children:u.module}),i.jsx(D.List,{children:u.groups.map(f=>i.jsx(Ne,{group:f,pathname:n},f.label))})]},`mod-${u.module}`))}return c(),i.jsx("nav",{className:h.nav,children:t})}function be(e){const n=[];for(const t of e.links)n.push({label:t.label,to:t.to});for(const t of e.modules)for(const s of t.groups){s.to&&n.push({label:s.label,to:s.to,context:t.module});for(const c of s.children??[])n.push({label:c.label,to:c.to,context:`${t.module} · ${s.label}`})}return n}const pe=8;function ve(){const e=K.useT(),n=T(),t=v.useNavigate(),s=m.useMemo(()=>be(n),[n]),[c,r]=m.useState(""),[u,f]=m.useState(!1),[g,d]=m.useState(0),_=m.useRef(null),b=m.useMemo(()=>{const a=c.trim().toLowerCase();return a?s.filter(o=>{var p;return o.label.toLowerCase().includes(a)||(((p=o.context)==null?void 0:p.toLowerCase().includes(a))??!1)}).slice(0,pe):[]},[s,c]),N=u&&b.length>0;m.useEffect(()=>d(0),[c]),m.useEffect(()=>{d(a=>a>b.length-1?Math.max(0,b.length-1):a)},[b.length]),m.useEffect(()=>{if(!u)return;const a=o=>{_.current&&!_.current.contains(o.target)&&f(!1)};return document.addEventListener("pointerdown",a),()=>document.removeEventListener("pointerdown",a)},[u]);const x=a=>{t({to:a}),r(""),f(!1)},l=a=>{if(N)if(a.key==="ArrowDown")a.preventDefault(),d(o=>(o+1)%b.length);else if(a.key==="ArrowUp")a.preventDefault(),d(o=>(o-1+b.length)%b.length);else if(a.key==="Enter"){a.preventDefault();const o=b[g];o&&x(o.to)}else a.key==="Escape"&&f(!1)};return i.jsxs("div",{ref:_,className:h.search,role:"combobox","aria-expanded":N,"aria-haspopup":"listbox",children:[i.jsx(A.TextField,{value:c,onChange:a=>{r(a.target.value),f(!0)},onFocus:()=>f(!0),onKeyDown:l,adornment:i.jsx(M.Icon,{name:"SearchNormal"}),placeholder:e("sidebar.searchPages"),"aria-label":e("sidebar.searchPages"),autoComplete:"off"}),N?i.jsx("div",{className:h.searchPanel,children:i.jsx(D.List,{role:"listbox",children:b.map((a,o)=>i.jsx(z.ListItem,{description:a.context,clickable:!0,selected:o===g,onMouseDown:p=>p.preventDefault(),onMouseEnter:()=>d(o),onClick:()=>x(a.to),children:a.label},a.to))})}):null]})}function C(e,n){const t=y(e),s=y(n);return s==="/"?t==="/":t===s||t.startsWith(s+"/")}function ge(e,n){var t;return e.to&&C(n,e.to)?!0:((t=e.children)==null?void 0:t.some(s=>C(n,s.to)))??!1}function _e(e){return e?i.jsx("span",{className:h.navBadge,children:e}):null}function xe(e){return e?i.jsx("span",{className:h.navDot,style:{background:`var(--tz-color-${e})`}}):null}function j(e,n,t){if(!(e==null&&n==null&&t==null))return i.jsxs(i.Fragment,{children:[_e(e),xe(n),t]})}function Ne({group:e,pathname:n}){var f,g;const t=ge(e,n),s=!!((f=e.children)!=null&&f.length),[c,r]=m.useState(t);if(m.useEffect(()=>{t&&r(!0)},[t]),!s&&e.to)return i.jsx(P,{as:v.Link,to:e.to,icon:e.icon,selected:t,clickable:!0,trailing:j(e.badge,e.dot),children:e.label});const u=i.jsx(M.Icon,{name:"ArrowDown4",size:"sm",className:h.chevron,"data-open":c?"true":"false"});return i.jsxs(i.Fragment,{children:[s&&e.to?i.jsx(P,{as:v.Link,to:e.to,icon:e.icon,selected:t,clickable:!0,onClick:()=>r(!0),trailing:j(e.badge,e.dot,i.jsx("button",{type:"button",className:h.chevronButton,"aria-label":`${c?"Collapse":"Expand"} ${e.label}`,"aria-expanded":c,onClick:d=>{d.preventDefault(),d.stopPropagation(),r(_=>!_)},children:u})),children:e.label}):i.jsx(z.ListItem,{icon:e.icon,selected:t,clickable:!0,"aria-expanded":c,onClick:()=>r(d=>!d),trailing:j(e.badge,e.dot,u),children:e.label}),s?i.jsx("div",{className:q.clsx(h.collapsible,!c&&h.collapsibleClosed),children:i.jsx("div",{className:h.collapsibleInner,children:i.jsx(D.List,{className:h.leaves,children:(g=e.children)==null?void 0:g.map(d=>i.jsx(P,{as:v.Link,to:d.to,icon:i.jsx("span",{className:h.leafDot}),selected:C(n,d.to),size:"md",clickable:!0,trailing:j(d.badge,d.dot),children:d.label},d.to))})})}):null]})}exports.FirstRouteRedirect=he;exports.NavSearch=ve;exports.Sidebar=me;exports.buildNavTree=$;exports.firstNavTo=B;exports.useBreadcrumbs=fe;exports.useFirstNavTo=F;
2
- //# sourceMappingURL=Sidebar-C3-u3Agj.cjs.map
@@ -1,2 +0,0 @@
1
- "use strict";const s=require("react/jsx-runtime"),F=require("react"),v=require("clsx"),ie=require("./formContext-bTWrqdEV.cjs"),q=require("./Typography-d97DdbNd.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-0joKXhPo.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Slider-0joKXhPo.cjs","sources":["../src/components/Slider/Slider.tsx"],"sourcesContent":["import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type ChangeEvent,\n type FocusEvent,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport { Typography } from '../Typography'\nimport type { ThemeColor } from '../../theme'\n// shared field chrome (wrapper / label / helper / required / error / sizes)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './Slider.module.css'\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\n/** A single value, or a `[start, end]` tuple when `range`. */\nexport type SliderValue = number | [number, number]\n\n/** A labeled tick under the track. */\nexport interface SliderMark {\n value: number\n label?: ReactNode\n}\n\nexport interface SliderProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'defaultValue' | 'onChange' | 'type' | 'min' | 'max' | 'step' | 'color'\n> {\n /** Label rendered above the track. */\n label?: ReactNode\n /** Preset size — drives the track + thumb dimensions and the label/helper font. */\n size?: SliderSize\n /** Marks the field invalid: red focus ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the track. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the slider to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Two-thumb range mode — pick a `[start, end]` span (e.g. 5–10). The value becomes a tuple. */\n range?: boolean\n /** Controlled value — a `number`, or a `[start, end]` tuple when `range`. */\n value?: SliderValue\n /** Initial value for uncontrolled use. Defaults to `min` (or `[min, max]` when `range`). */\n defaultValue?: SliderValue\n /** Fires with the next value (a `number`, or a `[start, end]` tuple when `range`). */\n onChange?: (value: SliderValue) => void\n /** Minimum value. Defaults to `0`. */\n min?: number\n /** Maximum value. Defaults to `100`. */\n max?: number\n /** Increment the thumb snaps to (arrow keys + drag). Defaults to `1`. */\n step?: number\n /** Theme palette token that tints the fill + thumb. Defaults to `accent`. */\n color?: ThemeColor\n /** Disables the slider. */\n disabled?: boolean\n /**\n * Show the current value at the end of the label row. Defaults to `true`. Pass a function to format\n * it (receives the `number` or `[start, end]`), or `false` to hide it.\n */\n valueLabel?: boolean | ((value: SliderValue) => ReactNode)\n /** Optional labeled ticks under the track (e.g. `[{ value: 0, label: 'Min' }, …]`). */\n marks?: SliderMark[]\n}\n\nconst clamp = (n: number, lo: number, hi: number) => Math.min(Math.max(n, lo), hi)\nconst toPercent = (v: number, min: number, max: number) =>\n max > min ? ((v - min) / (max - min)) * 100 : 0\n\n/**\n * A range slider — drag (or arrow-key / Home / End) a thumb along the track to pick a number, snapping\n * to `step`. Built on a native `<input type=\"range\">`, so keyboard, dragging, step/min/max, and a11y\n * come for free; the track / fill / thumb are styled with `--tz-*` tokens and tinted by `color`. Pass\n * **`range`** for a two-thumb span (the value becomes a `[start, end]` tuple). Controlled (`value` +\n * `onChange`) or uncontrolled (`defaultValue`); a `name` binds it to a surrounding `<Form>` — the form\n * value is a real `number` (or `[start, end]`), validated with `z.number()` / `z.tuple([…])`.\n */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n range = false,\n value,\n defaultValue,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n color = 'accent',\n disabled = false,\n valueLabel = true,\n marks,\n name,\n onBlur,\n id: idProp,\n className,\n style,\n ...props\n },\n ref,\n) {\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value is a real number (or tuple); the\n // touched/error state comes from field(), the raw value from values[name] (tuples must not be coerced).\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const fallback: SliderValue = range ? [min, max] : min\n const externalValue: SliderValue | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as SliderValue | undefined) ?? fallback)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<SliderValue>(defaultValue ?? fallback)\n const raw = isControlled ? externalValue! : internal\n\n // Normalize to the active shape (clamped, and — for a range — ordered low ≤ high).\n const tuple = Array.isArray(raw) ? raw : [min, raw]\n const lo = clamp(Math.min(tuple[0], tuple[1]), min, max)\n const hi = clamp(Math.max(tuple[0], tuple[1]), min, max)\n const single = clamp(Array.isArray(raw) ? raw[0] : raw, min, max)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const commit = (next: SliderValue) => {\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n const commitRange = (nextLo: number, nextHi: number) => {\n const l = clamp(nextLo, min, max)\n const h = clamp(nextHi, min, max)\n commit([Math.min(l, h), Math.max(l, h)])\n }\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n bound?.onBlur(event)\n onBlur?.(event)\n }\n\n const showValue = valueLabel !== false\n const currentValue: SliderValue = range ? [lo, hi] : single\n const renderedValue =\n typeof valueLabel === 'function' ? valueLabel(currentValue) : range ? `${lo} – ${hi}` : single\n\n const loPct = toPercent(lo, min, max)\n const hiPct = toPercent(hi, min, max)\n\n return (\n <div\n className={clsx(\n fieldStyles.field,\n fieldStyles[size],\n styles[size],\n fullWidth && fieldStyles.fullWidth,\n resolvedError && fieldStyles.error,\n disabled && fieldStyles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-slider-fill': `${toPercent(single, min, max)}%`,\n ...style,\n } as CSSProperties\n }\n >\n {(label != null || showValue) && (\n <div className={styles.labelRow}>\n {label != null ? (\n <label htmlFor={id} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n ) : (\n <span />\n )}\n {showValue && (\n <Typography as=\"span\" variant=\"bodySmall\" className={styles.value}>\n {renderedValue}\n </Typography>\n )}\n </div>\n )}\n\n {range ? (\n <div className={clsx(styles.track, styles.rangeTrack)}>\n <span className={styles.rail} aria-hidden />\n <span\n className={styles.rangeFill}\n aria-hidden\n style={{ left: `${loPct}%`, width: `${hiPct - loPct}%` }}\n />\n {/* start thumb — can't pass the end thumb */}\n <input\n ref={ref}\n id={id}\n name={name}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={lo}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n commitRange(Math.min(Number(e.target.value), hi), hi)\n }\n onBlur={handleBlur}\n disabled={disabled}\n className={clsx(styles.input, styles.rangeInput)}\n // end thumb sits on top by default (z 4); raise the start above it (z 5) only when both pile\n // at max, so whichever thumb needs grabbing is always reachable\n style={{ zIndex: lo >= max ? 5 : 3 }}\n aria-label={label != null ? `${String(label)} start` : 'Range start'}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n {...props}\n />\n {/* end thumb — can't pass the start thumb */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={hi}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n commitRange(lo, Math.max(Number(e.target.value), lo))\n }\n onBlur={handleBlur}\n disabled={disabled}\n className={clsx(styles.input, styles.rangeInput)}\n style={{ zIndex: 4 }}\n aria-label={label != null ? `${String(label)} end` : 'Range end'}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n />\n </div>\n ) : (\n <div className={clsx(styles.track, marks != null && marks.length > 0 && styles.hasMarks)}>\n <input\n ref={ref}\n id={id}\n name={name}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={single}\n onChange={(e: ChangeEvent<HTMLInputElement>) => commit(Number(e.target.value))}\n onBlur={handleBlur}\n disabled={disabled}\n className={styles.input}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n {...props}\n />\n {marks != null && marks.length > 0 && (\n <div className={styles.marks} aria-hidden>\n {marks.map((mark) => (\n <span\n key={mark.value}\n className={styles.mark}\n style={{ left: `${toPercent(mark.value, min, max)}%` }}\n >\n <span className={styles.tick} />\n {mark.label != null && <span className={styles.markLabel}>{mark.label}</span>}\n </span>\n ))}\n </div>\n )}\n </div>\n )}\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["clamp","n","lo","hi","toPercent","v","min","max","Slider","forwardRef","label","size","error","helperText","required","fullWidth","range","value","defaultValue","onChange","step","color","disabled","valueLabel","marks","name","onBlur","idProp","className","style","props","ref","reactId","useId","id","helperId","form","useFormContext","isFormBound","bound","fallback","externalValue","isControlled","internal","setInternal","useState","raw","tuple","single","resolvedError","resolvedHelperText","commit","next","commitRange","nextLo","nextHi","l","h","handleBlur","event","showValue","renderedValue","loPct","hiPct","jsxs","clsx","fieldStyles","styles","jsx","Typography","mark"],"mappings":"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"}
@@ -1,184 +0,0 @@
1
- import { jsxs as f, jsx as t } from "react/jsx-runtime";
2
- import { forwardRef as oa, useId as ia, useState as da } from "react";
3
- import { clsx as g } from "clsx";
4
- import { u as ua } from "./formContext-B7ln1Miy.js";
5
- import { T as A } from "./Typography-ChSuxgkc.js";
6
- import { f as c } from "./TextField.module-6gYcR9TL.js";
7
- const _a = "_sm_s0efw_5", fa = "_md_s0efw_9", ha = "_lg_s0efw_13", pa = "_labelRow_s0efw_18", va = "_value_s0efw_24", ma = "_track_s0efw_30", ga = "_hasMarks_s0efw_37", wa = "_input_s0efw_42", ka = "_marks_s0efw_109", ya = "_mark_s0efw_109", Na = "_tick_s0efw_128", ba = "_markLabel_s0efw_134", Ma = "_rangeTrack_s0efw_141", Ia = "_rail_s0efw_146", Sa = "_rangeFill_s0efw_147", $a = "_rangeInput_s0efw_164", e = {
8
- sm: _a,
9
- md: fa,
10
- lg: ha,
11
- labelRow: pa,
12
- value: va,
13
- track: ma,
14
- hasMarks: ga,
15
- input: wa,
16
- marks: ka,
17
- mark: ya,
18
- tick: Na,
19
- markLabel: ba,
20
- rangeTrack: Ma,
21
- rail: Ia,
22
- rangeFill: Sa,
23
- rangeInput: $a
24
- }, w = (k, r, o) => Math.min(Math.max(k, r), o), $ = (k, r, o) => o > r ? (k - r) / (o - r) * 100 : 0, Pa = oa(function({
25
- label: r,
26
- size: o = "md",
27
- error: O,
28
- helperText: Q,
29
- required: U = !1,
30
- fullWidth: X = !0,
31
- range: y = !1,
32
- value: B,
33
- defaultValue: Y,
34
- onChange: R,
35
- min: s = 0,
36
- max: l = 100,
37
- step: T = 1,
38
- color: Z = "accent",
39
- disabled: N = !1,
40
- valueLabel: F = !0,
41
- marks: h,
42
- name: i,
43
- onBlur: V,
44
- id: x,
45
- className: aa,
46
- style: ea,
47
- ...P
48
- }, j) {
49
- const sa = ia(), b = x ?? sa, M = `${b}-helper`, p = ua(), L = !!(p && i), n = p && i ? p.field(i) : void 0, q = y ? [s, l] : s, C = B !== void 0 ? B : L ? p.values[i] ?? q : void 0, E = C !== void 0, [la, ra] = da(Y ?? q), u = E ? C : la, I = Array.isArray(u) ? u : [s, u], d = w(Math.min(I[0], I[1]), s, l), _ = w(Math.max(I[0], I[1]), s, l), S = w(Array.isArray(u) ? u[0] : u, s, l), v = O ?? (n == null ? void 0 : n.error) ?? !1, m = Q ?? (n == null ? void 0 : n.helperText), H = (a) => {
50
- E || ra(a), L && p.setValue(i, a), R == null || R(a);
51
- }, W = (a, ca) => {
52
- const J = w(a, s, l), K = w(ca, s, l);
53
- H([Math.min(J, K), Math.max(J, K)]);
54
- }, z = (a) => {
55
- n == null || n.onBlur(a), V == null || V(a);
56
- }, D = F !== !1, ta = typeof F == "function" ? F(y ? [d, _] : S) : y ? `${d} – ${_}` : S, G = $(d, s, l), na = $(_, s, l);
57
- return /* @__PURE__ */ f(
58
- "div",
59
- {
60
- className: g(
61
- c.field,
62
- c[o],
63
- e[o],
64
- X && c.fullWidth,
65
- v && c.error,
66
- N && c.disabled,
67
- aa
68
- ),
69
- style: {
70
- "--tz-btn-rgb": `var(--tz-color-${Z}-rgb)`,
71
- "--tz-slider-fill": `${$(S, s, l)}%`,
72
- ...ea
73
- },
74
- children: [
75
- (r != null || D) && /* @__PURE__ */ f("div", { className: e.labelRow, children: [
76
- r != null ? /* @__PURE__ */ f("label", { htmlFor: b, className: c.label, children: [
77
- /* @__PURE__ */ t(A, { as: "span", variant: "bodySmall", color: "muted", children: r }),
78
- U && /* @__PURE__ */ t("span", { className: c.required, "aria-hidden": "true", children: "*" })
79
- ] }) : /* @__PURE__ */ t("span", {}),
80
- D && /* @__PURE__ */ t(A, { as: "span", variant: "bodySmall", className: e.value, children: ta })
81
- ] }),
82
- y ? /* @__PURE__ */ f("div", { className: g(e.track, e.rangeTrack), children: [
83
- /* @__PURE__ */ t("span", { className: e.rail, "aria-hidden": !0 }),
84
- /* @__PURE__ */ t(
85
- "span",
86
- {
87
- className: e.rangeFill,
88
- "aria-hidden": !0,
89
- style: { left: `${G}%`, width: `${na - G}%` }
90
- }
91
- ),
92
- /* @__PURE__ */ t(
93
- "input",
94
- {
95
- ref: j,
96
- id: b,
97
- name: i,
98
- type: "range",
99
- min: s,
100
- max: l,
101
- step: T,
102
- value: d,
103
- onChange: (a) => W(Math.min(Number(a.target.value), _), _),
104
- onBlur: z,
105
- disabled: N,
106
- className: g(e.input, e.rangeInput),
107
- style: { zIndex: d >= l ? 5 : 3 },
108
- "aria-label": r != null ? `${String(r)} start` : "Range start",
109
- "aria-invalid": v || void 0,
110
- "aria-describedby": m != null ? M : void 0,
111
- ...P
112
- }
113
- ),
114
- /* @__PURE__ */ t(
115
- "input",
116
- {
117
- type: "range",
118
- min: s,
119
- max: l,
120
- step: T,
121
- value: _,
122
- onChange: (a) => W(d, Math.max(Number(a.target.value), d)),
123
- onBlur: z,
124
- disabled: N,
125
- className: g(e.input, e.rangeInput),
126
- style: { zIndex: 4 },
127
- "aria-label": r != null ? `${String(r)} end` : "Range end",
128
- "aria-invalid": v || void 0,
129
- "aria-describedby": m != null ? M : void 0
130
- }
131
- )
132
- ] }) : /* @__PURE__ */ f("div", { className: g(e.track, h != null && h.length > 0 && e.hasMarks), children: [
133
- /* @__PURE__ */ t(
134
- "input",
135
- {
136
- ref: j,
137
- id: b,
138
- name: i,
139
- type: "range",
140
- min: s,
141
- max: l,
142
- step: T,
143
- value: S,
144
- onChange: (a) => H(Number(a.target.value)),
145
- onBlur: z,
146
- disabled: N,
147
- className: e.input,
148
- "aria-invalid": v || void 0,
149
- "aria-describedby": m != null ? M : void 0,
150
- ...P
151
- }
152
- ),
153
- h != null && h.length > 0 && /* @__PURE__ */ t("div", { className: e.marks, "aria-hidden": !0, children: h.map((a) => /* @__PURE__ */ f(
154
- "span",
155
- {
156
- className: e.mark,
157
- style: { left: `${$(a.value, s, l)}%` },
158
- children: [
159
- /* @__PURE__ */ t("span", { className: e.tick }),
160
- a.label != null && /* @__PURE__ */ t("span", { className: e.markLabel, children: a.label })
161
- ]
162
- },
163
- a.value
164
- )) })
165
- ] }),
166
- m != null && /* @__PURE__ */ t(
167
- A,
168
- {
169
- as: "span",
170
- id: M,
171
- variant: "bodySmall",
172
- color: v ? "error" : "muted",
173
- className: c.helper,
174
- children: m
175
- }
176
- )
177
- ]
178
- }
179
- );
180
- });
181
- export {
182
- Pa as S
183
- };
184
- //# sourceMappingURL=Slider-CwZYxDO0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Slider-CwZYxDO0.js","sources":["../src/components/Slider/Slider.tsx"],"sourcesContent":["import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type ChangeEvent,\n type FocusEvent,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport { Typography } from '../Typography'\nimport type { ThemeColor } from '../../theme'\n// shared field chrome (wrapper / label / helper / required / error / sizes)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './Slider.module.css'\n\nexport type SliderSize = 'sm' | 'md' | 'lg'\n/** A single value, or a `[start, end]` tuple when `range`. */\nexport type SliderValue = number | [number, number]\n\n/** A labeled tick under the track. */\nexport interface SliderMark {\n value: number\n label?: ReactNode\n}\n\nexport interface SliderProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'defaultValue' | 'onChange' | 'type' | 'min' | 'max' | 'step' | 'color'\n> {\n /** Label rendered above the track. */\n label?: ReactNode\n /** Preset size — drives the track + thumb dimensions and the label/helper font. */\n size?: SliderSize\n /** Marks the field invalid: red focus ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the track. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the slider to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Two-thumb range mode — pick a `[start, end]` span (e.g. 5–10). The value becomes a tuple. */\n range?: boolean\n /** Controlled value — a `number`, or a `[start, end]` tuple when `range`. */\n value?: SliderValue\n /** Initial value for uncontrolled use. Defaults to `min` (or `[min, max]` when `range`). */\n defaultValue?: SliderValue\n /** Fires with the next value (a `number`, or a `[start, end]` tuple when `range`). */\n onChange?: (value: SliderValue) => void\n /** Minimum value. Defaults to `0`. */\n min?: number\n /** Maximum value. Defaults to `100`. */\n max?: number\n /** Increment the thumb snaps to (arrow keys + drag). Defaults to `1`. */\n step?: number\n /** Theme palette token that tints the fill + thumb. Defaults to `accent`. */\n color?: ThemeColor\n /** Disables the slider. */\n disabled?: boolean\n /**\n * Show the current value at the end of the label row. Defaults to `true`. Pass a function to format\n * it (receives the `number` or `[start, end]`), or `false` to hide it.\n */\n valueLabel?: boolean | ((value: SliderValue) => ReactNode)\n /** Optional labeled ticks under the track (e.g. `[{ value: 0, label: 'Min' }, …]`). */\n marks?: SliderMark[]\n}\n\nconst clamp = (n: number, lo: number, hi: number) => Math.min(Math.max(n, lo), hi)\nconst toPercent = (v: number, min: number, max: number) =>\n max > min ? ((v - min) / (max - min)) * 100 : 0\n\n/**\n * A range slider — drag (or arrow-key / Home / End) a thumb along the track to pick a number, snapping\n * to `step`. Built on a native `<input type=\"range\">`, so keyboard, dragging, step/min/max, and a11y\n * come for free; the track / fill / thumb are styled with `--tz-*` tokens and tinted by `color`. Pass\n * **`range`** for a two-thumb span (the value becomes a `[start, end]` tuple). Controlled (`value` +\n * `onChange`) or uncontrolled (`defaultValue`); a `name` binds it to a surrounding `<Form>` — the form\n * value is a real `number` (or `[start, end]`), validated with `z.number()` / `z.tuple([…])`.\n */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n range = false,\n value,\n defaultValue,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n color = 'accent',\n disabled = false,\n valueLabel = true,\n marks,\n name,\n onBlur,\n id: idProp,\n className,\n style,\n ...props\n },\n ref,\n) {\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value is a real number (or tuple); the\n // touched/error state comes from field(), the raw value from values[name] (tuples must not be coerced).\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const fallback: SliderValue = range ? [min, max] : min\n const externalValue: SliderValue | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as SliderValue | undefined) ?? fallback)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<SliderValue>(defaultValue ?? fallback)\n const raw = isControlled ? externalValue! : internal\n\n // Normalize to the active shape (clamped, and — for a range — ordered low ≤ high).\n const tuple = Array.isArray(raw) ? raw : [min, raw]\n const lo = clamp(Math.min(tuple[0], tuple[1]), min, max)\n const hi = clamp(Math.max(tuple[0], tuple[1]), min, max)\n const single = clamp(Array.isArray(raw) ? raw[0] : raw, min, max)\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const commit = (next: SliderValue) => {\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n const commitRange = (nextLo: number, nextHi: number) => {\n const l = clamp(nextLo, min, max)\n const h = clamp(nextHi, min, max)\n commit([Math.min(l, h), Math.max(l, h)])\n }\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n bound?.onBlur(event)\n onBlur?.(event)\n }\n\n const showValue = valueLabel !== false\n const currentValue: SliderValue = range ? [lo, hi] : single\n const renderedValue =\n typeof valueLabel === 'function' ? valueLabel(currentValue) : range ? `${lo} – ${hi}` : single\n\n const loPct = toPercent(lo, min, max)\n const hiPct = toPercent(hi, min, max)\n\n return (\n <div\n className={clsx(\n fieldStyles.field,\n fieldStyles[size],\n styles[size],\n fullWidth && fieldStyles.fullWidth,\n resolvedError && fieldStyles.error,\n disabled && fieldStyles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-slider-fill': `${toPercent(single, min, max)}%`,\n ...style,\n } as CSSProperties\n }\n >\n {(label != null || showValue) && (\n <div className={styles.labelRow}>\n {label != null ? (\n <label htmlFor={id} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n ) : (\n <span />\n )}\n {showValue && (\n <Typography as=\"span\" variant=\"bodySmall\" className={styles.value}>\n {renderedValue}\n </Typography>\n )}\n </div>\n )}\n\n {range ? (\n <div className={clsx(styles.track, styles.rangeTrack)}>\n <span className={styles.rail} aria-hidden />\n <span\n className={styles.rangeFill}\n aria-hidden\n style={{ left: `${loPct}%`, width: `${hiPct - loPct}%` }}\n />\n {/* start thumb — can't pass the end thumb */}\n <input\n ref={ref}\n id={id}\n name={name}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={lo}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n commitRange(Math.min(Number(e.target.value), hi), hi)\n }\n onBlur={handleBlur}\n disabled={disabled}\n className={clsx(styles.input, styles.rangeInput)}\n // end thumb sits on top by default (z 4); raise the start above it (z 5) only when both pile\n // at max, so whichever thumb needs grabbing is always reachable\n style={{ zIndex: lo >= max ? 5 : 3 }}\n aria-label={label != null ? `${String(label)} start` : 'Range start'}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n {...props}\n />\n {/* end thumb — can't pass the start thumb */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={hi}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n commitRange(lo, Math.max(Number(e.target.value), lo))\n }\n onBlur={handleBlur}\n disabled={disabled}\n className={clsx(styles.input, styles.rangeInput)}\n style={{ zIndex: 4 }}\n aria-label={label != null ? `${String(label)} end` : 'Range end'}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n />\n </div>\n ) : (\n <div className={clsx(styles.track, marks != null && marks.length > 0 && styles.hasMarks)}>\n <input\n ref={ref}\n id={id}\n name={name}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={single}\n onChange={(e: ChangeEvent<HTMLInputElement>) => commit(Number(e.target.value))}\n onBlur={handleBlur}\n disabled={disabled}\n className={styles.input}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n {...props}\n />\n {marks != null && marks.length > 0 && (\n <div className={styles.marks} aria-hidden>\n {marks.map((mark) => (\n <span\n key={mark.value}\n className={styles.mark}\n style={{ left: `${toPercent(mark.value, min, max)}%` }}\n >\n <span className={styles.tick} />\n {mark.label != null && <span className={styles.markLabel}>{mark.label}</span>}\n </span>\n ))}\n </div>\n )}\n </div>\n )}\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["clamp","n","lo","hi","toPercent","v","min","max","Slider","forwardRef","label","size","error","helperText","required","fullWidth","range","value","defaultValue","onChange","step","color","disabled","valueLabel","marks","name","onBlur","idProp","className","style","props","ref","reactId","useId","id","helperId","form","useFormContext","isFormBound","bound","fallback","externalValue","isControlled","internal","setInternal","useState","raw","tuple","single","resolvedError","resolvedHelperText","commit","next","commitRange","nextLo","nextHi","l","h","handleBlur","event","showValue","renderedValue","loPct","hiPct","jsxs","clsx","fieldStyles","styles","jsx","Typography","e","mark"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;GAuEMA,IAAQ,CAACC,GAAWC,GAAYC,MAAe,KAAK,IAAI,KAAK,IAAIF,GAAGC,CAAE,GAAGC,CAAE,GAC3EC,IAAY,CAACC,GAAWC,GAAaC,MACzCA,IAAMD,KAAQD,IAAIC,MAAQC,IAAMD,KAAQ,MAAM,GAUnCE,KAASC,GAA0C,SAC9D;AAAA,EACE,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ;AAAA,EACR,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,KAAAb,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAa,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,KAAUC,GAAA,GACVC,IAAKP,KAAUK,IACfG,IAAW,GAAGD,CAAE,WAIhBE,IAAOC,GAAA,GACPC,IAAc,GAAQF,KAAQX,IAC9Bc,IAAQH,KAAQX,IAAOW,EAAK,MAAMX,CAAI,IAAI,QAE1Ce,IAAwBxB,IAAQ,CAACV,GAAKC,CAAG,IAAID,GAC7CmC,IACJxB,MAAU,SACNA,IACAqB,IACIF,EAAM,OAAOX,CAAK,KAAiCe,IACrD,QACFE,IAAeD,MAAkB,QACjC,CAACE,IAAUC,EAAW,IAAIC,GAAsB3B,KAAgBsB,CAAQ,GACxEM,IAAMJ,IAAeD,IAAiBE,IAGtCI,IAAQ,MAAM,QAAQD,CAAG,IAAIA,IAAM,CAACxC,GAAKwC,CAAG,GAC5C5C,IAAKF,EAAM,KAAK,IAAI+C,EAAM,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAGzC,GAAKC,CAAG,GACjDJ,IAAKH,EAAM,KAAK,IAAI+C,EAAM,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAGzC,GAAKC,CAAG,GACjDyC,IAAShD,EAAM,MAAM,QAAQ8C,CAAG,IAAIA,EAAI,CAAC,IAAIA,GAAKxC,GAAKC,CAAG,GAE1D0C,IAAgBrC,MAAS2B,KAAA,gBAAAA,EAAO,UAAS,IACzCW,IAAqBrC,MAAc0B,KAAA,gBAAAA,EAAO,aAE1CY,IAAS,CAACC,MAAsB;AACpC,IAAKV,KAAcE,GAAYQ,CAAI,GAC/Bd,KAAaF,EAAM,SAASX,GAAO2B,CAAI,GAC3CjC,KAAA,QAAAA,EAAWiC;AAAA,EACb,GACMC,IAAc,CAACC,GAAgBC,OAAmB;AACtD,UAAMC,IAAIxD,EAAMsD,GAAQhD,GAAKC,CAAG,GAC1BkD,IAAIzD,EAAMuD,IAAQjD,GAAKC,CAAG;AAChC,IAAA4C,EAAO,CAAC,KAAK,IAAIK,GAAGC,CAAC,GAAG,KAAK,IAAID,GAAGC,CAAC,CAAC,CAAC;AAAA,EACzC,GAEMC,IAAa,CAACC,MAAwC;AAC1D,IAAApB,KAAA,QAAAA,EAAO,OAAOoB,IACdjC,KAAA,QAAAA,EAASiC;AAAA,EACX,GAEMC,IAAYrC,MAAe,IAE3BsC,KACJ,OAAOtC,KAAe,aAAaA,EAFHP,IAAQ,CAACd,GAAIC,CAAE,IAAI6C,CAEO,IAAIhC,IAAQ,GAAGd,CAAE,MAAMC,CAAE,KAAK6C,GAEpFc,IAAQ1D,EAAUF,GAAII,GAAKC,CAAG,GAC9BwD,KAAQ3D,EAAUD,GAAIG,GAAKC,CAAG;AAEpC,SACE,gBAAAyD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAY;AAAA,QACZA,EAAYvD,CAAI;AAAA,QAChBwD,EAAOxD,CAAI;AAAA,QACXI,KAAamD,EAAY;AAAA,QACzBjB,KAAiBiB,EAAY;AAAA,QAC7B5C,KAAY4C,EAAY;AAAA,QACxBtC;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACE,gBAAgB,kBAAkBP,CAAK;AAAA,QACvC,oBAAoB,GAAGjB,EAAU4C,GAAQ1C,GAAKC,CAAG,CAAC;AAAA,QAClD,GAAGsB;AAAA,MAAA;AAAA,MAIL,UAAA;AAAA,SAAAnB,KAAS,QAAQkD,MACjB,gBAAAI,EAAC,OAAA,EAAI,WAAWG,EAAO,UACpB,UAAA;AAAA,UAAAzD,KAAS,OACR,gBAAAsD,EAAC,SAAA,EAAM,SAAS9B,GAAI,WAAWgC,EAAY,OACzC,UAAA;AAAA,YAAA,gBAAAE,EAACC,KAAW,IAAG,QAAO,SAAQ,aAAY,OAAM,SAC7C,UAAA3D,EAAA,CACH;AAAA,YACCI,uBACE,QAAA,EAAK,WAAWoD,EAAY,UAAU,eAAY,QAAO,UAAA,IAAA,CAE1D;AAAA,UAAA,EAAA,CAEJ,sBAEC,QAAA,EAAK;AAAA,UAEPN,KACC,gBAAAQ,EAACC,GAAA,EAAW,IAAG,QAAO,SAAQ,aAAY,WAAWF,EAAO,OACzD,UAAAN,GAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QAGD7C,sBACE,OAAA,EAAI,WAAWiD,EAAKE,EAAO,OAAOA,EAAO,UAAU,GAClD,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWD,EAAO,MAAM,eAAW,IAAC;AAAA,UAC1C,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAO;AAAA,cAClB,eAAW;AAAA,cACX,OAAO,EAAE,MAAM,GAAGL,CAAK,KAAK,OAAO,GAAGC,KAAQD,CAAK,IAAA;AAAA,YAAI;AAAA,UAAA;AAAA,UAGzD,gBAAAM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAArC;AAAA,cACA,IAAAG;AAAA,cACA,MAAAT;AAAA,cACA,MAAK;AAAA,cACL,KAAAnB;AAAA,cACA,KAAAC;AAAA,cACA,MAAAa;AAAA,cACA,OAAOlB;AAAA,cACP,UAAU,CAACoE,MACTjB,EAAY,KAAK,IAAI,OAAOiB,EAAE,OAAO,KAAK,GAAGnE,CAAE,GAAGA,CAAE;AAAA,cAEtD,QAAQuD;AAAA,cACR,UAAApC;AAAA,cACA,WAAW2C,EAAKE,EAAO,OAAOA,EAAO,UAAU;AAAA,cAG/C,OAAO,EAAE,QAAQjE,KAAMK,IAAM,IAAI,EAAA;AAAA,cACjC,cAAYG,KAAS,OAAO,GAAG,OAAOA,CAAK,CAAC,WAAW;AAAA,cACvD,gBAAcuC,KAAiB;AAAA,cAC/B,oBAAkBC,KAAsB,OAAOf,IAAW;AAAA,cACzD,GAAGL;AAAA,YAAA;AAAA,UAAA;AAAA,UAGN,gBAAAsC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,KAAA9D;AAAA,cACA,KAAAC;AAAA,cACA,MAAAa;AAAA,cACA,OAAOjB;AAAA,cACP,UAAU,CAACmE,MACTjB,EAAYnD,GAAI,KAAK,IAAI,OAAOoE,EAAE,OAAO,KAAK,GAAGpE,CAAE,CAAC;AAAA,cAEtD,QAAQwD;AAAA,cACR,UAAApC;AAAA,cACA,WAAW2C,EAAKE,EAAO,OAAOA,EAAO,UAAU;AAAA,cAC/C,OAAO,EAAE,QAAQ,EAAA;AAAA,cACjB,cAAYzD,KAAS,OAAO,GAAG,OAAOA,CAAK,CAAC,SAAS;AAAA,cACrD,gBAAcuC,KAAiB;AAAA,cAC/B,oBAAkBC,KAAsB,OAAOf,IAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QAC5D,EAAA,CACF,IAEA,gBAAA6B,EAAC,OAAA,EAAI,WAAWC,EAAKE,EAAO,OAAO3C,KAAS,QAAQA,EAAM,SAAS,KAAK2C,EAAO,QAAQ,GACrF,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAArC;AAAA,cACA,IAAAG;AAAA,cACA,MAAAT;AAAA,cACA,MAAK;AAAA,cACL,KAAAnB;AAAA,cACA,KAAAC;AAAA,cACA,MAAAa;AAAA,cACA,OAAO4B;AAAA,cACP,UAAU,CAACsB,MAAqCnB,EAAO,OAAOmB,EAAE,OAAO,KAAK,CAAC;AAAA,cAC7E,QAAQZ;AAAA,cACR,UAAApC;AAAA,cACA,WAAW6C,EAAO;AAAA,cAClB,gBAAclB,KAAiB;AAAA,cAC/B,oBAAkBC,KAAsB,OAAOf,IAAW;AAAA,cACzD,GAAGL;AAAA,YAAA;AAAA,UAAA;AAAA,UAELN,KAAS,QAAQA,EAAM,SAAS,KAC/B,gBAAA4C,EAAC,OAAA,EAAI,WAAWD,EAAO,OAAO,eAAW,IACtC,UAAA3C,EAAM,IAAI,CAAC+C,MACV,gBAAAP;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWG,EAAO;AAAA,cAClB,OAAO,EAAE,MAAM,GAAG/D,EAAUmE,EAAK,OAAOjE,GAAKC,CAAG,CAAC,IAAA;AAAA,cAEjD,UAAA;AAAA,gBAAA,gBAAA6D,EAAC,QAAA,EAAK,WAAWD,EAAO,KAAA,CAAM;AAAA,gBAC7BI,EAAK,SAAS,QAAQ,gBAAAH,EAAC,UAAK,WAAWD,EAAO,WAAY,UAAAI,EAAK,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,YALjEA,EAAK;AAAA,UAAA,CAOb,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QAGDrB,KAAsB,QACrB,gBAAAkB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAIlC;AAAA,YACJ,SAAQ;AAAA,YACR,OAAOc,IAAgB,UAAU;AAAA,YACjC,WAAWiB,EAAY;AAAA,YAEtB,UAAAhB;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}