@techzyapp/ui-library 1.0.21 → 1.0.23
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.
- package/dist/{AdminRoot-BDRLuMX6.cjs → AdminRoot-C7Idu7FQ.cjs} +2 -2
- package/dist/AdminRoot-C7Idu7FQ.cjs.map +1 -0
- package/dist/{AdminRoot-DvF0js0q.js → AdminRoot-aDy6rNqI.js} +4 -4
- package/dist/AdminRoot-aDy6rNqI.js.map +1 -0
- package/dist/{Alert-CwoRkKq4.cjs → Alert-Cl1zxmX9.cjs} +2 -2
- package/dist/{Alert-CwoRkKq4.cjs.map → Alert-Cl1zxmX9.cjs.map} +1 -1
- package/dist/{Alert-DPYmdaWs.js → Alert-D6VL2C-E.js} +3 -3
- package/dist/{Alert-DPYmdaWs.js.map → Alert-D6VL2C-E.js.map} +1 -1
- package/dist/{Breadcrumbs-CknDBLMw.cjs → Breadcrumbs-BnFW4LgK.cjs} +2 -2
- package/dist/{Breadcrumbs-CknDBLMw.cjs.map → Breadcrumbs-BnFW4LgK.cjs.map} +1 -1
- package/dist/{Breadcrumbs-l0PlUpQ4.js → Breadcrumbs-CicfjfIu.js} +3 -3
- package/dist/{Breadcrumbs-l0PlUpQ4.js.map → Breadcrumbs-CicfjfIu.js.map} +1 -1
- package/dist/{Button-RljTGqHl.js → Button-Cfxd7qhd.js} +2 -2
- package/dist/{Button-RljTGqHl.js.map → Button-Cfxd7qhd.js.map} +1 -1
- package/dist/{Button-BdihbLYJ.cjs → Button-ZplrHYKw.cjs} +2 -2
- package/dist/{Button-BdihbLYJ.cjs.map → Button-ZplrHYKw.cjs.map} +1 -1
- package/dist/{Calendar-CKCikOQL.js → Calendar-DTxCT-ki.js} +3 -3
- package/dist/{Calendar-CKCikOQL.js.map → Calendar-DTxCT-ki.js.map} +1 -1
- package/dist/{Calendar-DVg1uQuj.cjs → Calendar-S9vyp-qv.cjs} +2 -2
- package/dist/{Calendar-DVg1uQuj.cjs.map → Calendar-S9vyp-qv.cjs.map} +1 -1
- package/dist/{Card-BYFuYD-a.cjs → Card-BeE2ohcn.cjs} +2 -2
- package/dist/{Card-BYFuYD-a.cjs.map → Card-BeE2ohcn.cjs.map} +1 -1
- package/dist/{Card-B0bYi4g2.js → Card-eXJfA4rU.js} +2 -2
- package/dist/{Card-B0bYi4g2.js.map → Card-eXJfA4rU.js.map} +1 -1
- package/dist/{Chip-CdKUtUGE.cjs → Chip-B4XERWb_.cjs} +2 -2
- package/dist/{Chip-CdKUtUGE.cjs.map → Chip-B4XERWb_.cjs.map} +1 -1
- package/dist/{Chip-BiqfnRUi.js → Chip-BOXXdzap.js} +2 -2
- package/dist/{Chip-BiqfnRUi.js.map → Chip-BOXXdzap.js.map} +1 -1
- package/dist/{CodeBlock-CAAggVXS.cjs → CodeBlock-C7_A6CTT.cjs} +2 -2
- package/dist/{CodeBlock-CAAggVXS.cjs.map → CodeBlock-C7_A6CTT.cjs.map} +1 -1
- package/dist/{CodeBlock-BX_0tpk3.js → CodeBlock-D_PRiWMq.js} +3 -3
- package/dist/{CodeBlock-BX_0tpk3.js.map → CodeBlock-D_PRiWMq.js.map} +1 -1
- package/dist/{ColorPicker-BCSaT1A-.cjs → ColorPicker-ClVpWf77.cjs} +2 -2
- package/dist/{ColorPicker-BCSaT1A-.cjs.map → ColorPicker-ClVpWf77.cjs.map} +1 -1
- package/dist/{ColorPicker-DhSlvwNj.js → ColorPicker-DAjs7PmR.js} +3 -3
- package/dist/{ColorPicker-DhSlvwNj.js.map → ColorPicker-DAjs7PmR.js.map} +1 -1
- package/dist/{ColorPickerPanel-D4t3b9bB.js → ColorPickerPanel-BGzm2had.js} +2 -2
- package/dist/{ColorPickerPanel-D4t3b9bB.js.map → ColorPickerPanel-BGzm2had.js.map} +1 -1
- package/dist/{ColorPickerPanel-BOGYXXF1.cjs → ColorPickerPanel-Dk6bI0Xy.cjs} +2 -2
- package/dist/{ColorPickerPanel-BOGYXXF1.cjs.map → ColorPickerPanel-Dk6bI0Xy.cjs.map} +1 -1
- package/dist/{ConfigProvider-DT0yrgmd.js → ConfigProvider-Blhvj6UQ.js} +2 -2
- package/dist/ConfigProvider-Blhvj6UQ.js.map +1 -0
- package/dist/{ConfigProvider-C7DUWHrb.cjs → ConfigProvider-CUG8Mfy2.cjs} +2 -2
- package/dist/ConfigProvider-CUG8Mfy2.cjs.map +1 -0
- package/dist/{CopyButton-BEY1gJzK.js → CopyButton-Bv7L4xJf.js} +3 -3
- package/dist/{CopyButton-BEY1gJzK.js.map → CopyButton-Bv7L4xJf.js.map} +1 -1
- package/dist/{CopyButton-3585thVM.cjs → CopyButton-COF3hIV-.cjs} +2 -2
- package/dist/{CopyButton-3585thVM.cjs.map → CopyButton-COF3hIV-.cjs.map} +1 -1
- package/dist/{DatePicker-CEFGgXLF.js → DatePicker-DZfOvxUR.js} +4 -4
- package/dist/{DatePicker-CEFGgXLF.js.map → DatePicker-DZfOvxUR.js.map} +1 -1
- package/dist/{DatePicker-Dyj2halw.cjs → DatePicker-kA-xn5ET.cjs} +2 -2
- package/dist/{DatePicker-Dyj2halw.cjs.map → DatePicker-kA-xn5ET.cjs.map} +1 -1
- package/dist/{DateTimePicker-hmYBEuUM.js → DateTimePicker-BxBXhSN_.js} +7 -7
- package/dist/{DateTimePicker-hmYBEuUM.js.map → DateTimePicker-BxBXhSN_.js.map} +1 -1
- package/dist/{DateTimePicker-CjX4-8PP.cjs → DateTimePicker-DEGmn5UX.cjs} +2 -2
- package/dist/{DateTimePicker-CjX4-8PP.cjs.map → DateTimePicker-DEGmn5UX.cjs.map} +1 -1
- package/dist/{EmptyState-Bj-vX_UV.cjs → EmptyState-DlX-BLLI.cjs} +2 -2
- package/dist/{EmptyState-Bj-vX_UV.cjs.map → EmptyState-DlX-BLLI.cjs.map} +1 -1
- package/dist/{EmptyState-DJDNLKT7.js → EmptyState-Du4vA3bC.js} +2 -2
- package/dist/{EmptyState-DJDNLKT7.js.map → EmptyState-Du4vA3bC.js.map} +1 -1
- package/dist/{FileCard-C9Ncifnu.js → FileCard-juQ1fWbG.js} +3 -3
- package/dist/{FileCard-C9Ncifnu.js.map → FileCard-juQ1fWbG.js.map} +1 -1
- package/dist/{FileCard-Dr5-z1R3.cjs → FileCard-zyCpTrJ-.cjs} +2 -2
- package/dist/{FileCard-Dr5-z1R3.cjs.map → FileCard-zyCpTrJ-.cjs.map} +1 -1
- package/dist/{FileUploader-XFmBNkA0.js → FileUploader-DL9atihI.js} +5 -5
- package/dist/{FileUploader-XFmBNkA0.js.map → FileUploader-DL9atihI.js.map} +1 -1
- package/dist/{FileUploader-DeyZENqq.cjs → FileUploader-DOe3CyJB.cjs} +2 -2
- package/dist/{FileUploader-DeyZENqq.cjs.map → FileUploader-DOe3CyJB.cjs.map} +1 -1
- package/dist/{Flag-Bs0xNP-P.js → Flag-BxRrjCTB.js} +2 -2
- package/dist/{Flag-Bs0xNP-P.js.map → Flag-BxRrjCTB.js.map} +1 -1
- package/dist/{Flag-Bxnx26DM.cjs → Flag-DFKHYnqk.cjs} +2 -2
- package/dist/{Flag-Bxnx26DM.cjs.map → Flag-DFKHYnqk.cjs.map} +1 -1
- package/dist/{FullscreenToggle-DMlp05UN.js → FullscreenToggle-BMCNsyzb.js} +3 -3
- package/dist/{FullscreenToggle-DMlp05UN.js.map → FullscreenToggle-BMCNsyzb.js.map} +1 -1
- package/dist/{FullscreenToggle-BncatGKj.cjs → FullscreenToggle-BNK7RcRq.cjs} +2 -2
- package/dist/{FullscreenToggle-BncatGKj.cjs.map → FullscreenToggle-BNK7RcRq.cjs.map} +1 -1
- package/dist/{IconButton-Lv0sDDR9.cjs → IconButton-B9eVM18U.cjs} +2 -2
- package/dist/{IconButton-Lv0sDDR9.cjs.map → IconButton-B9eVM18U.cjs.map} +1 -1
- package/dist/{IconButton-DXMmtuLA.js → IconButton-CfvsE_p3.js} +2 -2
- package/dist/{IconButton-DXMmtuLA.js.map → IconButton-CfvsE_p3.js.map} +1 -1
- package/dist/Link-BQlvsu9V.js +48 -0
- package/dist/Link-BQlvsu9V.js.map +1 -0
- package/dist/Link-GZT51mKx.cjs +2 -0
- package/dist/Link-GZT51mKx.cjs.map +1 -0
- package/dist/{Loader-53HFNMVX.cjs → Loader-CxLrhAz9.cjs} +2 -2
- package/dist/{Loader-53HFNMVX.cjs.map → Loader-CxLrhAz9.cjs.map} +1 -1
- package/dist/{Loader-WsjQFl4p.js → Loader-DwmyJFwG.js} +2 -2
- package/dist/{Loader-WsjQFl4p.js.map → Loader-DwmyJFwG.js.map} +1 -1
- package/dist/{Modal-DBYcoCbJ.js → Modal-Cx0JEQ-j.js} +3 -3
- package/dist/{Modal-DBYcoCbJ.js.map → Modal-Cx0JEQ-j.js.map} +1 -1
- package/dist/{Modal-V6eyGSzW.cjs → Modal-DXZdMmJh.cjs} +2 -2
- package/dist/{Modal-V6eyGSzW.cjs.map → Modal-DXZdMmJh.cjs.map} +1 -1
- package/dist/{MultiSelect-DS2DRpaP.cjs → MultiSelect-DfhyGxDU.cjs} +2 -2
- package/dist/{MultiSelect-DS2DRpaP.cjs.map → MultiSelect-DfhyGxDU.cjs.map} +1 -1
- package/dist/{MultiSelect-BsYPr3LD.js → MultiSelect-yGlvweEq.js} +4 -4
- package/dist/{MultiSelect-BsYPr3LD.js.map → MultiSelect-yGlvweEq.js.map} +1 -1
- package/dist/{NumberField-DC3TdGTt.cjs → NumberField-B7yPXIw_.cjs} +2 -2
- package/dist/{NumberField-DC3TdGTt.cjs.map → NumberField-B7yPXIw_.cjs.map} +1 -1
- package/dist/{NumberField-mFb9pKCx.js → NumberField-cAjPU1P5.js} +3 -3
- package/dist/{NumberField-mFb9pKCx.js.map → NumberField-cAjPU1P5.js.map} +1 -1
- package/dist/{OtpField-BYj9SDHb.cjs → OtpField-BujZAy2A.cjs} +2 -2
- package/dist/{OtpField-BYj9SDHb.cjs.map → OtpField-BujZAy2A.cjs.map} +1 -1
- package/dist/{OtpField-1ullIIZQ.js → OtpField-D0eTOLtg.js} +2 -2
- package/dist/{OtpField-1ullIIZQ.js.map → OtpField-D0eTOLtg.js.map} +1 -1
- package/dist/{PageLayout-pYL43wI9.cjs → PageLayout-BSHyKoQ4.cjs} +2 -2
- package/dist/{PageLayout-pYL43wI9.cjs.map → PageLayout-BSHyKoQ4.cjs.map} +1 -1
- package/dist/{PageLayout-qf0H_EmS.js → PageLayout-C9Je7kfF.js} +2 -2
- package/dist/{PageLayout-qf0H_EmS.js.map → PageLayout-C9Je7kfF.js.map} +1 -1
- package/dist/{PageNotFound-YGVMVvyG.js → PageNotFound-CUN2OntP.js} +5 -5
- package/dist/{PageNotFound-YGVMVvyG.js.map → PageNotFound-CUN2OntP.js.map} +1 -1
- package/dist/{PageNotFound-D1795gJ7.cjs → PageNotFound-voB9ylPF.cjs} +2 -2
- package/dist/{PageNotFound-D1795gJ7.cjs.map → PageNotFound-voB9ylPF.cjs.map} +1 -1
- package/dist/{Pagination-WJq_7QNi.cjs → Pagination-BUGaylZa.cjs} +2 -2
- package/dist/{Pagination-WJq_7QNi.cjs.map → Pagination-BUGaylZa.cjs.map} +1 -1
- package/dist/{Pagination-BTvUJiee.js → Pagination-BaVHgIWT.js} +2 -2
- package/dist/{Pagination-BTvUJiee.js.map → Pagination-BaVHgIWT.js.map} +1 -1
- package/dist/QrCode-Bcj9_Emc.js +70 -0
- package/dist/QrCode-Bcj9_Emc.js.map +1 -0
- package/dist/QrCode-DfDfGhG-.cjs +2 -0
- package/dist/QrCode-DfDfGhG-.cjs.map +1 -0
- package/dist/{RemoveDialog-BSQ6EMW-.js → RemoveDialog-BpL2-gnz.js} +4 -4
- package/dist/{RemoveDialog-BSQ6EMW-.js.map → RemoveDialog-BpL2-gnz.js.map} +1 -1
- package/dist/{RemoveDialog-BhcwsY0q.cjs → RemoveDialog-DGt_72we.cjs} +2 -2
- package/dist/{RemoveDialog-BhcwsY0q.cjs.map → RemoveDialog-DGt_72we.cjs.map} +1 -1
- package/dist/{RichTextEditor-Bc1fhvzn.cjs → RichTextEditor-BuoywqBu.cjs} +2 -2
- package/dist/{RichTextEditor-Bc1fhvzn.cjs.map → RichTextEditor-BuoywqBu.cjs.map} +1 -1
- package/dist/{RichTextEditor-CaGPtwXe.js → RichTextEditor-C_6pzqYY.js} +7 -7
- package/dist/{RichTextEditor-CaGPtwXe.js.map → RichTextEditor-C_6pzqYY.js.map} +1 -1
- package/dist/RootLayout-1am1CwPQ.cjs +2 -0
- package/dist/RootLayout-1am1CwPQ.cjs.map +1 -0
- package/dist/RootLayout-x7qWzXPc.js +479 -0
- package/dist/RootLayout-x7qWzXPc.js.map +1 -0
- package/dist/{Select-Cx1Yl8nq.cjs → Select-CVy5BnKe.cjs} +2 -2
- package/dist/{Select-Cx1Yl8nq.cjs.map → Select-CVy5BnKe.cjs.map} +1 -1
- package/dist/{Select-vKZzS9K4.js → Select-ChT-6_bM.js} +3 -3
- package/dist/{Select-vKZzS9K4.js.map → Select-ChT-6_bM.js.map} +1 -1
- package/dist/Sidebar-D2MsR33k.cjs +2 -0
- package/dist/Sidebar-D2MsR33k.cjs.map +1 -0
- package/dist/Sidebar-ZA1wxCez.js +553 -0
- package/dist/Sidebar-ZA1wxCez.js.map +1 -0
- package/dist/{SpeedDial-D6sO-9ES.cjs → SpeedDial-B9JTNNUU.cjs} +2 -2
- package/dist/{SpeedDial-D6sO-9ES.cjs.map → SpeedDial-B9JTNNUU.cjs.map} +1 -1
- package/dist/{SpeedDial-Bb0ioXaO.js → SpeedDial-DUYQMDCY.js} +2 -2
- package/dist/{SpeedDial-Bb0ioXaO.js.map → SpeedDial-DUYQMDCY.js.map} +1 -1
- package/dist/{Stepper-CVY8NJEI.cjs → Stepper-BaC934rb.cjs} +2 -2
- package/dist/{Stepper-CVY8NJEI.cjs.map → Stepper-BaC934rb.cjs.map} +1 -1
- package/dist/{Stepper-BaEOUnYe.js → Stepper-D89I17pC.js} +2 -2
- package/dist/{Stepper-BaEOUnYe.js.map → Stepper-D89I17pC.js.map} +1 -1
- package/dist/{Table-wn-B7iLj.js → Table-CdIQ5Wfh.js} +15 -15
- package/dist/{Table-wn-B7iLj.js.map → Table-CdIQ5Wfh.js.map} +1 -1
- package/dist/{Table-AQ7yJhtW.cjs → Table-DvgBWTLx.cjs} +2 -2
- package/dist/{Table-AQ7yJhtW.cjs.map → Table-DvgBWTLx.cjs.map} +1 -1
- package/dist/{Tabs-DJMfAUni.js → Tabs-8-klG-y-.js} +2 -2
- package/dist/{Tabs-DJMfAUni.js.map → Tabs-8-klG-y-.js.map} +1 -1
- package/dist/{Tabs-BtcJ2jBl.cjs → Tabs-CejCwV3O.cjs} +2 -2
- package/dist/{Tabs-BtcJ2jBl.cjs.map → Tabs-CejCwV3O.cjs.map} +1 -1
- package/dist/{TagsField-Bvh6Fm5Y.js → TagsField-BQLqUckB.js} +4 -4
- package/dist/{TagsField-Bvh6Fm5Y.js.map → TagsField-BQLqUckB.js.map} +1 -1
- package/dist/{TagsField-4x3RmGwt.cjs → TagsField-BSAd4eUr.cjs} +2 -2
- package/dist/{TagsField-4x3RmGwt.cjs.map → TagsField-BSAd4eUr.cjs.map} +1 -1
- package/dist/{TextField-DcdwUA9d.js → TextField-B4YtjNUs.js} +3 -3
- package/dist/{TextField-DcdwUA9d.js.map → TextField-B4YtjNUs.js.map} +1 -1
- package/dist/{TextField-DNqnpAWB.cjs → TextField-DzYGA_St.cjs} +2 -2
- package/dist/{TextField-DNqnpAWB.cjs.map → TextField-DzYGA_St.cjs.map} +1 -1
- package/dist/{ThemeToggle-BVQmSMsj.js → ThemeToggle-B4_zRHJY.js} +3 -3
- package/dist/{ThemeToggle-BVQmSMsj.js.map → ThemeToggle-B4_zRHJY.js.map} +1 -1
- package/dist/{ThemeToggle-isboxfZk.cjs → ThemeToggle-BKk0eFiB.cjs} +2 -2
- package/dist/{ThemeToggle-isboxfZk.cjs.map → ThemeToggle-BKk0eFiB.cjs.map} +1 -1
- package/dist/{TimeColumns-DxFjjtc7.cjs → TimeColumns-BAzRrkqY.cjs} +2 -2
- package/dist/{TimeColumns-DxFjjtc7.cjs.map → TimeColumns-BAzRrkqY.cjs.map} +1 -1
- package/dist/{TimeColumns-CFy_PynH.js → TimeColumns-CAPyli9V.js} +2 -2
- package/dist/{TimeColumns-CFy_PynH.js.map → TimeColumns-CAPyli9V.js.map} +1 -1
- package/dist/{TimePicker-v1yA7Igl.cjs → TimePicker-BUnXYR5g.cjs} +2 -2
- package/dist/{TimePicker-v1yA7Igl.cjs.map → TimePicker-BUnXYR5g.cjs.map} +1 -1
- package/dist/{TimePicker-ZO7jOJVa.js → TimePicker-BebBSlQF.js} +5 -5
- package/dist/{TimePicker-ZO7jOJVa.js.map → TimePicker-BebBSlQF.js.map} +1 -1
- package/dist/{Toaster-Qnsq3guQ.cjs → Toaster-B2rO4BkG.cjs} +2 -2
- package/dist/{Toaster-Qnsq3guQ.cjs.map → Toaster-B2rO4BkG.cjs.map} +1 -1
- package/dist/{Toaster-C6UK_2TB.js → Toaster-ywqAKP8s.js} +2 -2
- package/dist/{Toaster-C6UK_2TB.js.map → Toaster-ywqAKP8s.js.map} +1 -1
- package/dist/{TranslatedFields-Bo5rZ7so.js → TranslatedFields-C-wlh51E.js} +5 -5
- package/dist/{TranslatedFields-Bo5rZ7so.js.map → TranslatedFields-C-wlh51E.js.map} +1 -1
- package/dist/{TranslatedFields-CLMvRpJi.cjs → TranslatedFields-DQQUb0RD.cjs} +2 -2
- package/dist/{TranslatedFields-CLMvRpJi.cjs.map → TranslatedFields-DQQUb0RD.cjs.map} +1 -1
- package/dist/{UserCard-CIjZz5xd.cjs → UserCard-Be1kl0TZ.cjs} +2 -2
- package/dist/{UserCard-CIjZz5xd.cjs.map → UserCard-Be1kl0TZ.cjs.map} +1 -1
- package/dist/{UserCard-454Kc7JS.js → UserCard-BqWt0S-c.js} +3 -3
- package/dist/{UserCard-454Kc7JS.js.map → UserCard-BqWt0S-c.js.map} +1 -1
- package/dist/app/AdminRoot.d.cts +4 -1
- package/dist/app/AdminRoot.d.ts +4 -1
- package/dist/components/Alert/index.cjs +1 -1
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/Breadcrumbs/index.cjs +1 -1
- package/dist/components/Breadcrumbs/index.js +1 -1
- package/dist/components/Button/index.cjs +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Card/index.cjs +1 -1
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Chip/index.cjs +1 -1
- package/dist/components/Chip/index.js +1 -1
- package/dist/components/CodeBlock/index.cjs +1 -1
- package/dist/components/CodeBlock/index.js +1 -1
- package/dist/components/ColorPicker/index.cjs +1 -1
- package/dist/components/ColorPicker/index.js +1 -1
- package/dist/components/CopyButton/index.cjs +1 -1
- package/dist/components/CopyButton/index.js +1 -1
- package/dist/components/DatePicker/index.cjs +1 -1
- package/dist/components/DatePicker/index.js +1 -1
- package/dist/components/DateTimePicker/index.cjs +1 -1
- package/dist/components/DateTimePicker/index.js +1 -1
- package/dist/components/EmptyState/index.cjs +1 -1
- package/dist/components/EmptyState/index.js +1 -1
- package/dist/components/FileCard/index.cjs +1 -1
- package/dist/components/FileCard/index.js +1 -1
- package/dist/components/FileUploader/index.cjs +1 -1
- package/dist/components/FileUploader/index.js +1 -1
- package/dist/components/Flag/index.cjs +1 -1
- package/dist/components/Flag/index.js +1 -1
- package/dist/components/FullscreenToggle/index.cjs +1 -1
- package/dist/components/FullscreenToggle/index.js +1 -1
- package/dist/components/IconButton/index.cjs +1 -1
- package/dist/components/IconButton/index.js +1 -1
- package/dist/components/Link/Link.d.cts +44 -0
- package/dist/components/Link/Link.d.ts +44 -0
- package/dist/components/Link/index.cjs +2 -0
- package/dist/components/Link/index.cjs.map +1 -0
- package/dist/components/Link/index.d.cts +3 -0
- package/dist/components/Link/index.d.ts +3 -0
- package/dist/components/Link/index.js +6 -0
- package/dist/components/Link/index.js.map +1 -0
- package/dist/components/Loader/index.cjs +1 -1
- package/dist/components/Loader/index.js +1 -1
- package/dist/components/Modal/index.cjs +1 -1
- package/dist/components/Modal/index.js +1 -1
- package/dist/components/MultiSelect/index.cjs +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/NumberField/index.cjs +1 -1
- package/dist/components/NumberField/index.js +1 -1
- package/dist/components/OtpField/index.cjs +1 -1
- package/dist/components/OtpField/index.js +1 -1
- package/dist/components/PageLayout/index.cjs +1 -1
- package/dist/components/PageLayout/index.js +1 -1
- package/dist/components/PageNotFound/index.cjs +1 -1
- package/dist/components/PageNotFound/index.js +1 -1
- package/dist/components/Pagination/index.cjs +1 -1
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/QrCode/QrCode.d.cts +46 -0
- package/dist/components/QrCode/QrCode.d.ts +46 -0
- package/dist/components/QrCode/index.cjs +2 -0
- package/dist/components/QrCode/index.cjs.map +1 -0
- package/dist/components/QrCode/index.d.cts +2 -0
- package/dist/components/QrCode/index.d.ts +2 -0
- package/dist/components/QrCode/index.js +6 -0
- package/dist/components/QrCode/index.js.map +1 -0
- package/dist/components/RemoveDialog/index.cjs +1 -1
- package/dist/components/RemoveDialog/index.js +1 -1
- package/dist/components/RichTextEditor/index.cjs +1 -1
- package/dist/components/RichTextEditor/index.js +1 -1
- package/dist/components/RootLayout/ActionSet.d.cts +27 -0
- package/dist/components/RootLayout/ActionSet.d.ts +27 -0
- package/dist/components/RootLayout/index.cjs +1 -1
- package/dist/components/RootLayout/index.js +1 -1
- package/dist/components/Select/index.cjs +1 -1
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Sidebar/Sidebar.d.cts +55 -3
- package/dist/components/Sidebar/Sidebar.d.ts +55 -3
- package/dist/components/Sidebar/index.cjs +1 -1
- package/dist/components/Sidebar/index.d.cts +1 -0
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/components/SpeedDial/index.cjs +1 -1
- package/dist/components/SpeedDial/index.js +1 -1
- package/dist/components/Stepper/index.cjs +1 -1
- package/dist/components/Stepper/index.js +1 -1
- package/dist/components/Table/index.cjs +1 -1
- package/dist/components/Table/index.js +1 -1
- package/dist/components/Tabs/index.cjs +1 -1
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/TagsField/index.cjs +1 -1
- package/dist/components/TagsField/index.js +1 -1
- package/dist/components/TextField/index.cjs +1 -1
- package/dist/components/TextField/index.js +1 -1
- package/dist/components/ThemeToggle/index.cjs +1 -1
- package/dist/components/ThemeToggle/index.js +1 -1
- package/dist/components/TimePicker/index.cjs +1 -1
- package/dist/components/TimePicker/index.js +1 -1
- package/dist/components/Toast/index.cjs +1 -1
- package/dist/components/Toast/index.js +1 -1
- package/dist/components/TranslatedFields/index.cjs +1 -1
- package/dist/components/TranslatedFields/index.js +1 -1
- package/dist/components/UserCard/index.cjs +1 -1
- package/dist/components/UserCard/index.js +1 -1
- package/dist/components/index.d.cts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/entries/app.cjs +1 -1
- package/dist/entries/app.js +1 -1
- package/dist/entries/components.cjs +1 -1
- package/dist/entries/components.js +112 -108
- package/dist/entries/components.js.map +1 -1
- package/dist/entries/i18n.cjs +1 -1
- package/dist/entries/i18n.js +2 -2
- package/dist/entries/theme.cjs +1 -1
- package/dist/entries/theme.d.cts +1 -1
- package/dist/entries/theme.d.ts +1 -1
- package/dist/entries/theme.js +1 -1
- package/dist/i18n/messages.d.cts +1 -0
- package/dist/i18n/messages.d.ts +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +115 -111
- package/dist/index.js.map +1 -1
- package/dist/{messages-CGHhwf6F.js → messages-CL8uoIRj.js} +8 -1
- package/dist/messages-CL8uoIRj.js.map +1 -0
- package/dist/messages-Dvn_tEp0.cjs +36 -0
- package/dist/messages-Dvn_tEp0.cjs.map +1 -0
- package/dist/theme/ConfigProvider.d.cts +22 -1
- package/dist/theme/ConfigProvider.d.ts +22 -1
- package/dist/theme/index.d.cts +1 -1
- package/dist/theme/index.d.ts +1 -1
- package/package.json +6 -1
- package/dist/AdminRoot-BDRLuMX6.cjs.map +0 -1
- package/dist/AdminRoot-DvF0js0q.js.map +0 -1
- package/dist/ConfigProvider-C7DUWHrb.cjs.map +0 -1
- package/dist/ConfigProvider-DT0yrgmd.js.map +0 -1
- package/dist/RootLayout-BNwHsuhC.js +0 -422
- package/dist/RootLayout-BNwHsuhC.js.map +0 -1
- package/dist/RootLayout-CB-3FgOp.cjs +0 -2
- package/dist/RootLayout-CB-3FgOp.cjs.map +0 -1
- package/dist/Sidebar-CJ7DtOqb.js +0 -513
- package/dist/Sidebar-CJ7DtOqb.js.map +0 -1
- package/dist/Sidebar-Cv95DJxZ.cjs +0 -2
- package/dist/Sidebar-Cv95DJxZ.cjs.map +0 -1
- package/dist/messages-CGHhwf6F.js.map +0 -1
- package/dist/messages-DZJyiaf9.cjs +0 -36
- package/dist/messages-DZJyiaf9.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigProvider-DT0yrgmd.js","sources":["../src/theme/applyTheme.ts","../src/theme/ConfigProvider.tsx"],"sourcesContent":["export interface ThemePalette {\n primary: string\n /**\n * A free theme color (near-white by default) selectable via the `color` prop — it is **no longer**\n * the component surface (elevated panels use `--tz-color-surface`).\n */\n secondary: string\n /**\n * The rear-most page background — the `<body>` fill + the shell canvas that the floating panels sit\n * on; nothing else uses it. Built-in defaults: a soft off-white in light mode, a near-black in dark mode.\n */\n background: string\n /**\n * The elevated **panel surface** — cards, sidebar, inputs/forms, dropdowns, modals (the panels that\n * float over `--tz-color-background`). Built-in defaults: white in light mode, a touch lighter than\n * the canvas in dark mode. Configurable per mode like any theme color.\n */\n surface: string\n /** The single accent color — the default tint for controls (`Button`, `IconButton`, …). */\n accent: string\n success: string\n error: string\n info: string\n warning: string\n}\n\n/** Names of the theme palette tokens (maps to `--tz-color-<name>`). */\nexport type ThemeColor = keyof ThemePalette\n\nfunction hexToRgbTriplet(hex: string): string {\n let h = hex.trim().replace(/^#/, '')\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n const int = parseInt(h, 16)\n return `${(int >> 16) & 255}, ${(int >> 8) & 255}, ${int & 255}`\n}\n\n/**\n * Picks a readable text color (near-black or white) to sit on top of a solid\n * fill — used by `contained` controls so the label stays legible on light\n * colors (e.g. a light `primary` in dark mode).\n */\nfunction contrastColor(rgbTriplet: string): string {\n const [r, g, b] = rgbTriplet.split(',').map((n) => Number(n.trim()))\n const yiq = (r * 299 + g * 587 + b * 114) / 1000\n return yiq >= 150 ? '#04202b' : '#ffffff'\n}\n\n/**\n * Per-color overrides for the `contained` label color, where the automatic\n * luminance pick isn't the desired look:\n * - `secondary`: near-white fill that blends with the page, so the label uses\n * the primary color (flips with the mode) to stay readable without a border.\n * - `warning`: keep the plain white label by design.\n */\nconst CONTRAST_OVERRIDE: Readonly<Record<string, string>> = {\n secondary: 'rgb(var(--tz-color-primary-rgb))',\n warning: '#ffffff',\n}\n\nexport function applyTheme(\n theme: Partial<ThemePalette>,\n target: HTMLElement = document.documentElement,\n): void {\n for (const [name, value] of Object.entries(theme)) {\n if (!value) continue\n const triplet = hexToRgbTriplet(value)\n target.style.setProperty(`--tz-color-${name}-rgb`, triplet)\n target.style.setProperty(\n `--tz-color-${name}-contrast`,\n CONTRAST_OVERRIDE[name] ?? contrastColor(triplet),\n )\n }\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react'\nimport { applyTheme, type ThemePalette } from './applyTheme'\nimport { setBreakpoints, type Breakpoint } from './breakpoints'\nimport { DEFAULT_TRANSLATIONS_NAMESPACE } from '../helpers/translations'\nimport {\n createAppTranslator,\n createTranslator,\n type AppMessages,\n type AppTranslator,\n type MessageOverrides,\n type Translator,\n} from '../i18n/messages'\n\nexport type ThemeMode = 'light' | 'dark'\n\nexport interface ThemeColors {\n /** Light-mode palette. Override any subset of the theme colors — the rest use the library defaults. */\n light?: Partial<ThemePalette>\n /** Dark-mode overrides, layered on the (merged) light palette + the library's dark defaults. */\n dark?: Partial<ThemePalette>\n}\n\n/** A content locale the app supports — a tab in `<TranslatedFields>`. */\nexport interface LocaleConfig {\n /** BCP-47 locale code, e.g. `'en-US'`. Namespaces the form field names and is the tab's fallback label. */\n code: string\n /** Human-readable tab label. Falls back to `code`. */\n label?: string\n}\n\n/** Theme settings — color overrides + initial mode. Lives under `Config.theme`. */\nexport interface ThemeConfig {\n /** Theme color overrides. Omit entirely to use the library's built-in theme. */\n colors?: ThemeColors\n /** Initial color mode. */\n mode?: ThemeMode\n /**\n * Default font family — the app-wide default the user's Settings choice overrides (persisted). One of\n * the pre-imported presets (`Inter` / `Roboto` / `Lato`) or any Google Font family name. Defaults to\n * `Inter`. A non-preset family is loaded on demand at runtime.\n */\n fontFamily?: string\n /**\n * Override the shared responsive **breakpoint** bounds (px, max-width). Keys are fixed\n * (`xxs`/`xs`/`sm`/`md`/`lg`/`xl`/`xxl`); pass any subset — the rest keep their defaults. Drives the\n * **JS** responsive layer (`useMediaQuery` tokens, `Flex`/`Grid`/`Masonry` responsive props); note\n * component CSS `@media` rules are compiled and don't follow a runtime override. E.g.\n * `breakpoints: { md: 1200, xl: 1600 }`.\n */\n breakpoints?: Partial<Record<Breakpoint, number>>\n}\n\n/**\n * The configurable key / param **names** the library's components read — grouped under `Config.keys`\n * so they live in one place. Each is overridable; omit one to use its built-in default. Grows over\n * time (e.g. `page` / `size` for paginated tables ⇒ `?page=1&size=10`).\n */\nexport interface KeysConfig {\n /**\n * URL query param name a **top-level** `<Tabs>` syncs its active tab to (e.g. `'view'` ⇒ `?view=…`),\n * unless that strip sets its own `queryKey` (or `queryKey={null}` to opt out). Defaults to `'tab'`.\n */\n tabQueryKey?: string\n /**\n * URL query param name a **nested** `<Tabs>` (one rendered inside another tab's panel) syncs to, so it\n * doesn't collide with the outer strip's `tabQueryKey` (e.g. `?tab=…&nestedTab=…`). Auto-applied by\n * nesting depth; overridable per strip via `queryKey`. Defaults to `'nestedTab'`.\n */\n nestedTabQueryKey?: string\n /**\n * URL query param name a `<Stepper queryKey>` (the bare/`true` form) syncs its active step to\n * (**1-based**, e.g. `?step=2`); a string `queryKey` overrides it per stepper. Defaults to `'step'`.\n * (The sync itself is **opt-in** — a stepper with no `queryKey` never touches the URL.)\n */\n stepQueryKey?: string\n /**\n * Top-level namespace word for `<TranslatedFields>`' form names + the nested object — e.g.\n * `'languages'` ⇒ `languages[en-US].title`. Defaults to `'translations'`.\n */\n translationsNamespace?: string\n}\n\n/**\n * How a `<Table>` builds its **server-request** params — the query it hands the consumer (as `params` /\n * `query`) in `onChange`, so a server-mode fetch doesn't hand-map page/size/search/sort every time. This is\n * the **backend transport** layer, distinct from `keys.*QueryKey` (the browser-URL sync, always page-based\n * for shareable links). Set once in `config.table.query`, override per table via the `queryMapping` prop.\n * Every field is optional; the defaults reproduce the browser-URL shape (`?page=1&size=10&search=…&sort=-key`).\n */\nexport interface TableQueryConfig {\n /** Request param name for the page / offset. Defaults to `'page'` (e.g. `'skip'` for an offset API). */\n pageParam?: string\n /** Request param name for the page size. Defaults to `'size'` (e.g. `'limit'`). */\n sizeParam?: string\n /** Request param name for the search query (omitted when the search is empty). Defaults to `'search'` (e.g. `'q'`). */\n searchParam?: string\n /**\n * Request param name holding the sort **key**. Defaults to `'sort'` (e.g. `'sortBy'`). With\n * `sortFormat: 'field'` this single param also carries the direction (`-key` = desc); with `'separate'`\n * the direction goes to `sortOrderParam`.\n */\n sortParam?: string\n /**\n * Pagination style. `'page'` (default) emits the **1-based page number** as-is (`page=2`); `'offset'`\n * emits a **zero-based offset** `(page - 1) * size` instead (`skip=10`), for skip/offset APIs.\n */\n pagination?: 'page' | 'offset'\n /**\n * Sort encoding. `'field'` (default) is a single param with a `-` prefix for descending (`sort=-price`);\n * `'separate'` splits into two params — the key in `sortParam` + the direction in `sortOrderParam`\n * (`sortBy=price&order=desc`); `'suffix'` appends the direction value to the key in a single param\n * (`sort=priceAsc` / `sort=priceDesc` with `ascValue: 'Asc'` / `descValue: 'Desc'`).\n */\n sortFormat?: 'field' | 'separate' | 'suffix'\n /** Direction param name when `sortFormat: 'separate'`. Defaults to `'order'`. */\n sortOrderParam?: string\n /**\n * Value emitted for an ascending sort — the `sortOrderParam` value when `sortFormat: 'separate'`, or the\n * suffix appended to the key when `sortFormat: 'suffix'`. Defaults to `'asc'`.\n */\n ascValue?: string\n /**\n * Value emitted for a descending sort — the `sortOrderParam` value when `sortFormat: 'separate'`, or the\n * suffix appended to the key when `sortFormat: 'suffix'`. Defaults to `'desc'`.\n */\n descValue?: string\n /**\n * What to emit for the size param when the **\"All\"** rows-per-page choice is active. A `string`/`number`\n * sets `size=<allValue>` (e.g. `0` for APIs where `limit=0` means \"all\"); omit it (default) to drop the\n * size param entirely (many APIs treat a missing limit as unbounded).\n */\n allValue?: string | number\n /**\n * How a **`multiSelect`** filter serializes into the request query: `'repeat'` (default — `cat=a&cat=b`),\n * `'csv'` (`cat=a,b`), or `'indexed'` (`cat[0]=a&cat[1]=b`).\n */\n multiSelectFormat?: 'repeat' | 'csv' | 'indexed'\n /**\n * Suffix appended to a **range** filter's param for its lower / upper bound — e.g. `Min`/`Max` (default)\n * → `priceMin`/`priceMax`; set `'_gte'`/`'_lte'`, `'[gte]'`/`'[lte]'`, `'From'`/`'To'`, … to match your API.\n */\n rangeMinSuffix?: string\n rangeMaxSuffix?: string\n}\n\n/** `<Table>`-specific configuration. Grows over time; today just the server-request query mapping. */\nexport interface TableConfig {\n /** How `<Table>` builds its server-request params (emitted as `params` / `query` in `onChange`). */\n query?: TableQueryConfig\n}\n\n/** Signed-in user shown in the shell header avatar + its account menu (see `HeaderConfig`). */\nexport interface HeaderUser {\n /** Full name — shown as the menu's name line. */\n name?: string\n /** Email shown under the name in the account menu. */\n email?: string\n /** Avatar image URL (falls back to a user icon). */\n avatar?: string\n}\n\n/**\n * `RootLayout` header configuration — the shell's top-bar controls. Set it once app-wide in\n * `config.header`, or per shell via the `RootLayout` `header` prop (the prop wins, merged over config).\n */\nexport interface HeaderConfig {\n /** Show the built-in light/dark theme toggle. Defaults to `true`. */\n theme?: boolean\n /**\n * Make the shell header **stick to the top on scroll** (fixed) instead of scrolling away (static).\n * This is the app-wide default; the user can flip it in the **Settings** drawer and their choice is\n * persisted (`localStorage['tz-header-sticky']`), overriding this. Defaults to `false` (static).\n */\n sticky?: boolean\n /** Show the browser-fullscreen toggle (auto-hides where the Fullscreen API is unavailable). Defaults to `false`. */\n fullscreen?: boolean\n /** Show the **Settings** button (opens the right-side drawer to pick the per-mode `accent`). Defaults to `true`. */\n settings?: boolean\n /** Show the nav search over the sidebar's pages (with suggestions). Defaults to `true`. */\n search?: boolean\n /**\n * Show the header **language switcher** (the `Global`-icon dropdown of `config.i18n.languages`).\n * Defaults to `true`, but it only renders when more than one UI language is configured — so pass\n * `false` to hide it even with several languages (the panel stays on its current/default language).\n */\n languages?: boolean\n /** Show the breadcrumb trail at the top of the content. Defaults to **`true`**. */\n breadcrumbs?: boolean\n /** Render the automatic page-title `h2` (the active route's `staticData.name`). Defaults to `true`. */\n pageTitle?: boolean\n /** When provided, an account `Avatar` appears; its menu has a **Sign out** item that calls this. */\n onLogout?: () => void\n /** Signed-in user — shown in the header avatar and as a header block atop the account menu. */\n user?: HeaderUser\n}\n\n/**\n * UI-language config for the admin panel's **own** static strings (labels, placeholders, aria-labels).\n * Distinct from `locales` (which is content-translation locales for `<TranslatedFields>`). The library\n * ships built-in translations (English + Georgian), so listing `languages` here is enough to get a\n * localized panel — no per-app setup. Any language the library doesn't ship is supplied via `messages`.\n */\nexport interface I18nConfig {\n /**\n * Active UI language on first load (a locale code, e.g. `'ka-GE'`). Defaults to English if listed in\n * `languages`, else the first `languages` entry, else `'en-US'`. The user's switcher choice (persisted)\n * overrides it.\n */\n language?: string\n /**\n * The UI languages the panel offers — drives the Settings language switcher. One entry = a fixed\n * language (no switcher). Defaults to English only. (Reuses the `{ code, label }` shape.)\n */\n languages?: LocaleConfig[]\n /**\n * Extra / override message catalogs for the **library's own** strings, merged **over** the built-ins\n * and keyed by language code or base language (`'ka-GE'` or `'ka'`). Use this to localize into a\n * language the library doesn't ship, or to tweak a built-in string. Unset keys fall back to English.\n */\n messages?: MessageOverrides\n /**\n * Catalogs for the **consuming app's own** UI strings — its section titles, labels, business copy —\n * keyed by language code/base then by any string key the app picks. Read via **`useTranslations()`**,\n * which binds to the active UI language, so the app's text switches together with the panel. Resolution\n * per key: exact code → base language → English (`'en'`) → the key itself. This is the app's own copy;\n * `messages` above is only for the library's built-in strings.\n */\n appMessages?: AppMessages\n}\n\n/**\n * App-level configuration passed to `<ConfigProvider config={…}>`. Groups theming under `theme`,\n * the configurable key/param names under `keys`, and keeps the rest (`locales`, …) at the top — a\n * single place to grow.\n */\nexport interface Config {\n /** Theme settings (color overrides + initial mode). Omit entirely to use the built-in theme. */\n theme?: ThemeConfig\n /** Content locales the app supports — drive `<TranslatedFields>`' tabs (one per locale). */\n locales?: LocaleConfig[]\n /** UI-language config for the panel's own strings (the library ships the translations). See `I18nConfig`. */\n i18n?: I18nConfig\n /**\n * Configurable key / query-param names the components read — e.g. the `<Tabs>` query keys\n * (`tabQueryKey` / `nestedTabQueryKey`) and the `<TranslatedFields>` namespace\n * (`translationsNamespace`). Grows over time (`page`, `size`, …).\n */\n keys?: KeysConfig\n /** `<Table>` config — today the server-request query mapping (`table.query`) shared by every table. */\n table?: TableConfig\n /**\n * `RootLayout` header config, app-wide — the shell top-bar toggles (`theme` / `fullscreen` /\n * `search` / `breadcrumbs` / `pageTitle`) + the account (`onLogout` / `user`). A `RootLayout`\n * `header` prop is merged over this (the prop wins), so a specific shell can override.\n */\n header?: HeaderConfig\n}\n\ninterface ThemeContextValue {\n mode: ThemeMode\n setMode: (mode: ThemeMode) => void\n toggleMode: () => void\n /** The persisted accent-color overrides **per mode** (a hex, or `null` when using that mode's default). */\n accentColors: Record<ThemeMode, string | null>\n /** The configured/default `accent` **per mode** (before any override) — the \"no override\" values. */\n defaultAccentColors: Record<ThemeMode, string>\n /** Set (or clear with `null`) the accent override for `mode` (defaults to the current) — persists + re-applies. */\n setAccentColor: (color: string | null, mode?: ThemeMode) => void\n locales: LocaleConfig[]\n /** Resolved translations namespace (`config.keys.translationsNamespace` ?? the built-in default). */\n translationsNamespace: string\n /** Resolved top-level tabs query key (`config.keys.tabQueryKey` ?? the built-in default). */\n tabQueryKey: string\n /** Resolved nested tabs query key (`config.keys.nestedTabQueryKey` ?? the built-in default). */\n nestedTabQueryKey: string\n /** Resolved stepper query key (`config.keys.stepQueryKey` ?? the built-in default). */\n stepQueryKey: string\n /** The `<Table>` server-request query mapping (`config.table.query` ?? `{}`). Defaults applied by `buildTableQuery`. */\n tableQuery: TableQueryConfig\n /** App-wide `RootLayout` header config (`config.header` ?? `{}`); the `RootLayout` prop merges over it. */\n header: HeaderConfig\n /** Whether the shell header sticks to the top on scroll (fixed) vs scrolls away (static). Persisted. */\n headerSticky: boolean\n /** Set + persist the header sticky/static preference (overrides `config.header.sticky`). */\n setHeaderSticky: (sticky: boolean) => void\n /** The active font family (drives `--tz-font-family`). Persisted; seeded from `config.theme.fontFamily`. */\n fontFamily: string\n /** Set + persist the font family (a preset or any Google Font name; loaded on demand). */\n setFontFamily: (family: string) => void\n /** Active UI language code (drives `t`). Persisted; seeded from `config.i18n.language` (default English). */\n language: string\n /** Set + persist the active UI language (must be one of `languages`). */\n setLanguage: (code: string) => void\n /** The UI languages the panel offers (from `config.i18n.languages`, default English only). */\n languages: LocaleConfig[]\n /** Translator for the library's built-in strings, bound to the active `language`. */\n t: Translator\n /** Translator for the **app's own** strings (`config.i18n.appMessages`), bound to the active `language`. */\n appT: AppTranslator\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\nconst STORAGE_KEY = 'tz-theme-mode'\n/** Where the user's picked accent-color override is persisted, **per mode** (survives reloads). */\nconst accentStorageKey = (mode: ThemeMode) => `tz-accent-color-${mode}`\n/** Where the user's header sticky/static choice is persisted (survives reloads). */\nconst HEADER_STICKY_KEY = 'tz-header-sticky'\n/** Where the user's chosen font family is persisted (survives reloads). */\nconst FONT_STORAGE_KEY = 'tz-font-family'\n/** Where the user's chosen UI language is persisted (survives reloads). */\nconst LOCALE_KEY = 'tz-locale'\n/** Default UI languages when `config.i18n.languages` is unset — English only. */\nconst DEFAULT_LANGUAGES: LocaleConfig[] = [{ code: 'en-US', label: 'English' }]\n/** The default font family (matches the `--tz-font-family` token's primary family). */\nexport const DEFAULT_FONT_FAMILY = 'Inter'\n/** Families already in the shipped CSS (only the default) — these skip the runtime `<link>` load. */\nconst BUNDLED_FONTS: readonly string[] = [DEFAULT_FONT_FAMILY]\n/** The full fallback stack applied to `--tz-font-family` for a chosen family (mirrors theme.css). */\nconst fontStack = (family: string) =>\n `'${family}', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`\n\n/** Add the Google Fonts preconnect hints once, so the on-demand font fetch isn't delayed by DNS/TLS. */\nfunction ensureFontPreconnect() {\n if (typeof document === 'undefined' || document.getElementById('tz-font-preconnect')) return\n const api = document.createElement('link')\n api.id = 'tz-font-preconnect'\n api.rel = 'preconnect'\n api.href = 'https://fonts.googleapis.com'\n document.head.appendChild(api)\n const gstatic = document.createElement('link')\n gstatic.rel = 'preconnect'\n gstatic.href = 'https://fonts.gstatic.com'\n gstatic.crossOrigin = 'anonymous'\n document.head.appendChild(gstatic)\n}\n\n/**\n * Ensure a Google Fonts stylesheet `<link>` exists for `family` (deduped by id). Only the default\n * (`Inter`) ships pre-imported, so every other family — the Roboto/Lato presets and any custom pick —\n * is loaded here on first use. Bare family request (no weight axes) so it works for any font — Google\n * serves the available weights.\n */\nfunction ensureFontLoaded(family: string) {\n if (typeof document === 'undefined' || BUNDLED_FONTS.includes(family)) return\n const id = `tz-font-${family.trim().replace(/\\s+/g, '-').toLowerCase()}`\n if (document.getElementById(id)) return\n ensureFontPreconnect()\n const link = document.createElement('link')\n link.id = id\n link.rel = 'stylesheet'\n link.href = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(family.trim()).replace(/%20/g, '+')}&display=swap`\n document.head.appendChild(link)\n}\n/** The built-in default URL query param name a **top-level** `<Tabs>` syncs to (no `queryKey`/config). */\nexport const DEFAULT_TABS_QUERY_KEY = 'tab'\n/** The built-in default URL query param name a **nested** `<Tabs>` syncs to (no `queryKey`/config). */\nexport const DEFAULT_NESTED_TAB_QUERY_KEY = 'nestedTab'\n/** The built-in default URL query param name a `<Stepper>` syncs to (no `queryKey`/config). */\nexport const DEFAULT_STEP_QUERY_KEY = 'step'\n/** Stable empty-locales fallback so the context value memo doesn't churn when no locales are configured. */\nconst EMPTY_LOCALES: LocaleConfig[] = []\n/** Stable empty table-query fallback so the context memo doesn't churn when no `table.query` is configured. */\nconst EMPTY_TABLE_QUERY: TableQueryConfig = {}\n/** Stable empty header fallback so the context memo doesn't churn when no `header` is configured. */\nconst EMPTY_HEADER: HeaderConfig = {}\n\n/**\n * The library's built-in light palette — the single source of truth for every theme color's default\n * value. Apps override any subset via `config.colors.light`; the rest fall back to these. (theme.css\n * holds only the structure that references these values, not the values themselves.)\n */\nconst DEFAULT_LIGHT_COLORS: ThemePalette = {\n primary: '#13404e',\n secondary: '#ffffff',\n background: '#f9f9f9', // the rear + shell canvas — a soft off-white behind the white panels\n surface: '#ffffff', // the elevated panels (cards, sidebar, inputs, dropdowns, modals)\n accent: '#056472',\n success: '#00a854',\n error: '#f04134',\n info: '#039aa1',\n warning: '#ffbf00',\n}\n\n/**\n * Built-in dark-mode overrides — only the colors that differ from light; everything else inherits the\n * (merged) light palette. Apps override any of these via `config.colors.dark`.\n */\nconst DEFAULT_DARK_COLORS: Partial<ThemePalette> = {\n primary: '#e6e8eb',\n secondary: '#191919',\n background: '#0f0f0f', // the near-black rear + canvas\n surface: '#191919', // a touch lighter than the canvas, for the elevated panels\n accent: '#16a6b4', // a brighter teal — the light-mode accent is too dark on the dark canvas\n success: '#00a854',\n error: '#f04134',\n info: '#039aa1',\n warning: '#ffbf00',\n}\n\nfunction getInitialMode(fallback: ThemeMode): ThemeMode {\n const stored = localStorage.getItem(STORAGE_KEY)\n return stored === 'light' || stored === 'dark' ? stored : fallback\n}\n\n/** The persisted per-mode accent-color overrides (a hex string per mode, or `null` when none picked). */\nfunction getInitialAccentByMode(): Record<ThemeMode, string | null> {\n return {\n light: localStorage.getItem(accentStorageKey('light')) || null,\n dark: localStorage.getItem(accentStorageKey('dark')) || null,\n }\n}\n\n/** The persisted header sticky choice (`fallback` = the app's `config.header.sticky` when unset). */\nfunction getInitialHeaderSticky(fallback: boolean): boolean {\n const stored = localStorage.getItem(HEADER_STICKY_KEY)\n return stored === '1' ? true : stored === '0' ? false : fallback\n}\n\n/** The persisted font family (`fallback` = `config.theme.fontFamily` ?? the default when unset). */\nfunction getInitialFont(fallback: string): string {\n return localStorage.getItem(FONT_STORAGE_KEY) || fallback\n}\n\n/**\n * The initial UI language: the persisted choice (if still offered), else `config.i18n.language`, else\n * English if it's among the offered languages, else the first offered, else `'en-US'`. Always clamped\n * to a code that's actually in `languages`.\n */\nfunction getInitialLanguage(languages: LocaleConfig[], configLanguage?: string): string {\n const codes = languages.map((l) => l.code)\n const stored = localStorage.getItem(LOCALE_KEY)\n if (stored && codes.includes(stored)) return stored\n if (configLanguage && codes.includes(configLanguage)) return configLanguage\n return codes.find((c) => c.toLowerCase().startsWith('en')) ?? codes[0] ?? 'en-US'\n}\n\nexport interface ConfigProviderProps {\n /** App config — theme overrides, initial mode, locales. Omit for the built-in defaults (light mode). */\n config?: Config\n children: ReactNode\n}\n\nexport function ConfigProvider({ config, children }: ConfigProviderProps) {\n const [mode, setModeState] = useState<ThemeMode>(() =>\n getInitialMode(config?.theme?.mode ?? 'light'),\n )\n // user-picked accents that override the configured/default `accent` — kept PER MODE; persisted\n const [accentByMode, setAccentByMode] =\n useState<Record<ThemeMode, string | null>>(getInitialAccentByMode)\n // user's header sticky/static choice — persisted; seeded from config.header.sticky (default static)\n const [headerSticky, setHeaderStickyState] = useState<boolean>(() =>\n getInitialHeaderSticky(config?.header?.sticky ?? false),\n )\n // user's chosen font family — persisted; seeded from config.theme.fontFamily (default Inter)\n const [fontFamily, setFontFamilyState] = useState<string>(() =>\n getInitialFont(config?.theme?.fontFamily ?? DEFAULT_FONT_FAMILY),\n )\n // UI languages offered + the active one (persisted; seeded from config.i18n, default English)\n const languages = config?.i18n?.languages ?? DEFAULT_LANGUAGES\n const i18nMessages = config?.i18n?.messages\n const appMessages = config?.i18n?.appMessages\n const [language, setLanguageState] = useState<string>(() =>\n getInitialLanguage(languages, config?.i18n?.language),\n )\n const colors = config?.theme?.colors\n\n // the configured/default palette for BOTH modes, before any accent override:\n // light = library defaults then the app's light overrides; dark = that, then the library dark deltas,\n // then the app's dark overrides. (Both computed so the Settings drawer can offer a picker per mode.)\n const basePalettes = useMemo(() => {\n const light = { ...DEFAULT_LIGHT_COLORS, ...colors?.light }\n const dark = { ...light, ...DEFAULT_DARK_COLORS, ...colors?.dark }\n return { light, dark }\n }, [colors])\n // the accent per mode when there's NO override — exposed so UI needn't hardcode it\n const defaultAccentColors = useMemo(\n () => ({ light: basePalettes.light.accent, dark: basePalettes.dark.accent }),\n [basePalettes],\n )\n\n // Commit a mode's resolved theme straight to `<html>` (CSS vars + attrs + persisted mode). Called\n // **eagerly** on change (so the DOM updates the instant you toggle, NOT after React re-renders the\n // whole subtree — which is what made the switch feel ~1s late) and from the effect below (initial\n // mount / accent change / external `setMode`). Idempotent, so applying twice is harmless.\n const applyMode = useCallback(\n (nextMode: ThemeMode, accent: string | null = accentByMode[nextMode]) => {\n const base = basePalettes[nextMode]\n applyTheme(accent ? { ...base, accent } : base)\n const root = document.documentElement\n root.setAttribute('data-tz-theme', nextMode)\n root.style.setProperty('color-scheme', nextMode)\n localStorage.setItem(STORAGE_KEY, nextMode)\n },\n [basePalettes, accentByMode],\n )\n\n useLayoutEffect(() => {\n applyMode(mode)\n }, [applyMode, mode])\n\n // commit the app's breakpoint overrides to the shared store (before paint, so token media queries\n // resolve to the configured bounds without a flash). Serialized dep so an inline object doesn't refire.\n const breakpointsConfig = config?.theme?.breakpoints\n useLayoutEffect(() => {\n setBreakpoints(breakpointsConfig)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(breakpointsConfig ?? null)])\n\n const setMode = useCallback(\n (next: ThemeMode) => {\n applyMode(next) // eager DOM update — don't wait for the re-render/commit\n setModeState(next)\n },\n [applyMode],\n )\n\n const toggleMode = useCallback(\n () => setMode(mode === 'light' ? 'dark' : 'light'),\n [mode, setMode],\n )\n\n // set (or clear with `null`) the accent override for `target` (defaults to the current mode); persists\n const setAccentColor = useCallback(\n (color: string | null, target?: ThemeMode) => {\n const m = target ?? mode\n setAccentByMode((prev) => ({ ...prev, [m]: color }))\n if (color) localStorage.setItem(accentStorageKey(m), color)\n else localStorage.removeItem(accentStorageKey(m))\n if (m === mode) applyMode(mode, color) // eager for the active mode\n },\n [mode, applyMode],\n )\n\n // set + persist the header sticky preference (overrides config.header.sticky)\n const setHeaderSticky = useCallback((sticky: boolean) => {\n setHeaderStickyState(sticky)\n localStorage.setItem(HEADER_STICKY_KEY, sticky ? '1' : '0')\n }, [])\n\n // apply the font: load it (if not preloaded) + write the stack to --tz-font-family on <html>.\n // Eager on change + in a layout effect (mount / external change), like the mode/accent commit.\n const applyFont = useCallback((family: string) => {\n ensureFontLoaded(family)\n document.documentElement.style.setProperty('--tz-font-family', fontStack(family))\n }, [])\n useLayoutEffect(() => {\n applyFont(fontFamily)\n }, [applyFont, fontFamily])\n // set + persist the chosen font family (overrides config.theme.fontFamily)\n const setFontFamily = useCallback(\n (family: string) => {\n const next = family.trim() || DEFAULT_FONT_FAMILY\n applyFont(next) // eager — don't wait for the re-render\n setFontFamilyState(next)\n localStorage.setItem(FONT_STORAGE_KEY, next)\n },\n [applyFont],\n )\n\n // set + persist the active UI language\n const setLanguage = useCallback((code: string) => {\n setLanguageState(code)\n localStorage.setItem(LOCALE_KEY, code)\n }, [])\n // the translator bound to the active language (rebuilt only when the language or overrides change)\n const t = useMemo<Translator>(\n () => createTranslator(language, i18nMessages),\n [language, i18nMessages],\n )\n // the app's-own-strings translator, bound to the same active language (rebuilt on language/catalog change)\n const appT = useMemo<AppTranslator>(\n () => createAppTranslator(language, appMessages),\n [language, appMessages],\n )\n\n const locales = config?.locales ?? EMPTY_LOCALES\n const translationsNamespace =\n config?.keys?.translationsNamespace ?? DEFAULT_TRANSLATIONS_NAMESPACE\n const tabQueryKey = config?.keys?.tabQueryKey ?? DEFAULT_TABS_QUERY_KEY\n const nestedTabQueryKey = config?.keys?.nestedTabQueryKey ?? DEFAULT_NESTED_TAB_QUERY_KEY\n const stepQueryKey = config?.keys?.stepQueryKey ?? DEFAULT_STEP_QUERY_KEY\n const tableQuery = config?.table?.query ?? EMPTY_TABLE_QUERY\n const headerConfig = config?.header ?? EMPTY_HEADER\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n mode,\n setMode,\n toggleMode,\n accentColors: accentByMode,\n defaultAccentColors,\n setAccentColor,\n locales,\n translationsNamespace,\n tabQueryKey,\n nestedTabQueryKey,\n stepQueryKey,\n tableQuery,\n header: headerConfig,\n headerSticky,\n setHeaderSticky,\n fontFamily,\n setFontFamily,\n language,\n setLanguage,\n languages,\n t,\n appT,\n }),\n [\n mode,\n setMode,\n toggleMode,\n accentByMode,\n defaultAccentColors,\n setAccentColor,\n locales,\n translationsNamespace,\n tabQueryKey,\n nestedTabQueryKey,\n stepQueryKey,\n tableQuery,\n headerConfig,\n headerSticky,\n setHeaderSticky,\n fontFamily,\n setFontFamily,\n language,\n setLanguage,\n languages,\n t,\n appT,\n ],\n )\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\nexport function useTheme(): ThemeContextValue {\n const value = useContext(ThemeContext)\n if (!value) {\n throw new Error('useTheme must be used within a <ConfigProvider>')\n }\n return value\n}\n\n/**\n * The content locales configured on `<ConfigProvider config={{ locales }}>`. Lenient — returns `[]`\n * outside a provider (locales are optional), so `<TranslatedFields>` can also take a `locales` prop.\n */\nexport function useLocales(): LocaleConfig[] {\n return useContext(ThemeContext)?.locales ?? EMPTY_LOCALES\n}\n\n/** Fallback English translator so a component used **without** a `<ConfigProvider>` still shows text. */\nconst DEFAULT_TRANSLATOR: Translator = createTranslator('en')\n/** Fallback app translator (no catalogs) — returns the key itself, so `useTranslations()` is safe anywhere. */\nconst DEFAULT_APP_TRANSLATOR: AppTranslator = createAppTranslator('en')\n\n/**\n * The translator for the library's built-in UI strings, bound to the active `config.i18n` language.\n * **Lenient** — outside a provider it returns an English translator, so components render standalone\n * (and in tests) with their default English labels. Use it for any built-in string:\n * `t('select.noOptions')`.\n */\nexport function useT(): Translator {\n return useContext(ThemeContext)?.t ?? DEFAULT_TRANSLATOR\n}\n\n/**\n * Translator for the **consuming app's own** strings — the catalogs passed to\n * `<ConfigProvider config={{ i18n: { appMessages } }}>` — bound to the active UI language, so the app's\n * copy switches together with the panel. Free-form string keys; per key it resolves exact code → base\n * language → English (`'en'`) → the key itself, with `{name}` interpolation:\n *\n * ```tsx\n * const t = useTranslations()\n * <PageLayout title={t('customer-transactions.title')} />\n * <p>{t('customer-transactions.count', { count: 128 })}</p>\n * ```\n *\n * **Lenient** — outside a provider (or with no `appMessages`) it echoes the key back, so it's safe\n * anywhere. Use `useT()` for the library's built-in strings; use this for your own.\n */\nexport function useTranslations(): AppTranslator {\n return useContext(ThemeContext)?.appT ?? DEFAULT_APP_TRANSLATOR\n}\n\n/**\n * The active UI language + switcher data: `{ language, setLanguage, languages }`. Lenient outside a\n * provider (English, single language, no-op setter) so it's safe to call anywhere.\n */\nexport function useLanguage(): {\n language: string\n setLanguage: (code: string) => void\n languages: LocaleConfig[]\n} {\n const ctx = useContext(ThemeContext)\n return {\n language: ctx?.language ?? 'en-US',\n setLanguage: ctx?.setLanguage ?? (() => {}),\n languages: ctx?.languages ?? DEFAULT_LANGUAGES,\n }\n}\n\n/**\n * The translations namespace configured on `<ConfigProvider config={{ keys: { translationsNamespace } }}>`,\n * resolved against the built-in default (`'translations'`). Lenient outside a provider. Use it to pass\n * the same namespace to the helpers, e.g. `buildTranslations(codes, fields, useTranslationsNamespace())`.\n */\nexport function useTranslationsNamespace(): string {\n return useContext(ThemeContext)?.translationsNamespace ?? DEFAULT_TRANSLATIONS_NAMESPACE\n}\n\n/**\n * The default top-level tabs query key configured on `<ConfigProvider config={{ keys: { tabQueryKey } }}>`,\n * resolved against the built-in default (`'tab'`). Lenient outside a provider. A top-level `<Tabs>` reads\n * it as the fallback for an omitted `queryKey`, so every tab strip URL-syncs out of the box.\n */\nexport function useTabsQueryKey(): string {\n return useContext(ThemeContext)?.tabQueryKey ?? DEFAULT_TABS_QUERY_KEY\n}\n\n/**\n * The default nested tabs query key configured on\n * `<ConfigProvider config={{ keys: { nestedTabQueryKey } }}>`, resolved against the built-in default\n * (`'nestedTab'`). Lenient outside a provider. A `<Tabs>` nested inside another tab's panel uses this\n * (instead of `tabQueryKey`) so the two strips don't collide on the same URL param.\n */\nexport function useNestedTabQueryKey(): string {\n return useContext(ThemeContext)?.nestedTabQueryKey ?? DEFAULT_NESTED_TAB_QUERY_KEY\n}\n\n/**\n * The default stepper query key configured on `<ConfigProvider config={{ keys: { stepQueryKey } }}>`,\n * resolved against the built-in default (`'step'`). Lenient outside a provider. A `<Stepper queryKey>`\n * (the bare/`true` opt-in form) reads it as the param name; a string `queryKey` overrides it.\n */\nexport function useStepQueryKey(): string {\n return useContext(ThemeContext)?.stepQueryKey ?? DEFAULT_STEP_QUERY_KEY\n}\n\n/**\n * The `<Table>` server-request query mapping configured on `<ConfigProvider config={{ table: { query } }}>`\n * (`{}` when unset / outside a provider). `<Table>` merges its own `queryMapping` prop over this, then feeds\n * the result to `buildTableQuery`, which applies the field defaults — so an unconfigured table emits the\n * default page-based `?page=…&size=…&search=…&sort=…` shape.\n */\nexport function useTableQueryConfig(): TableQueryConfig {\n return useContext(ThemeContext)?.tableQuery ?? EMPTY_TABLE_QUERY\n}\n\n/**\n * The app-wide `RootLayout` header config set on `<ConfigProvider config={{ header }}>` (`{}` when\n * unset / outside a provider). `RootLayout` merges its own `header` prop over this (the prop wins), so\n * a specific shell can override the app-wide defaults.\n */\nexport function useHeaderConfig(): HeaderConfig {\n return useContext(ThemeContext)?.header ?? EMPTY_HEADER\n}\n"],"names":["hexToRgbTriplet","hex","h","int","contrastColor","rgbTriplet","r","g","b","n","CONTRAST_OVERRIDE","applyTheme","theme","target","name","value","triplet","ThemeContext","createContext","STORAGE_KEY","accentStorageKey","mode","HEADER_STICKY_KEY","FONT_STORAGE_KEY","LOCALE_KEY","DEFAULT_LANGUAGES","DEFAULT_FONT_FAMILY","BUNDLED_FONTS","fontStack","family","ensureFontPreconnect","api","gstatic","ensureFontLoaded","id","link","DEFAULT_TABS_QUERY_KEY","DEFAULT_NESTED_TAB_QUERY_KEY","DEFAULT_STEP_QUERY_KEY","EMPTY_LOCALES","EMPTY_TABLE_QUERY","EMPTY_HEADER","DEFAULT_LIGHT_COLORS","DEFAULT_DARK_COLORS","getInitialMode","fallback","stored","getInitialAccentByMode","getInitialHeaderSticky","getInitialFont","getInitialLanguage","languages","configLanguage","codes","l","c","ConfigProvider","config","children","setModeState","useState","_a","accentByMode","setAccentByMode","headerSticky","setHeaderStickyState","fontFamily","setFontFamilyState","i18nMessages","_b","appMessages","_c","language","setLanguageState","colors","_d","basePalettes","useMemo","light","dark","defaultAccentColors","applyMode","useCallback","nextMode","accent","base","root","useLayoutEffect","breakpointsConfig","_e","setBreakpoints","setMode","next","toggleMode","setAccentColor","color","m","prev","setHeaderSticky","sticky","applyFont","setFontFamily","setLanguage","code","t","createTranslator","appT","createAppTranslator","locales","translationsNamespace","_f","DEFAULT_TRANSLATIONS_NAMESPACE","tabQueryKey","_g","nestedTabQueryKey","_h","stepQueryKey","_i","tableQuery","_j","headerConfig","jsx","useTheme","useContext","useLocales","DEFAULT_TRANSLATOR","DEFAULT_APP_TRANSLATOR","useT","useTranslations","useLanguage","ctx","useTranslationsNamespace","useTabsQueryKey","useNestedTabQueryKey","useStepQueryKey","useTableQueryConfig","useHeaderConfig"],"mappings":"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"}
|
|
@@ -1,422 +0,0 @@
|
|
|
1
|
-
import { jsxs as r, Fragment as B, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { useState as E, useEffect as P } from "react";
|
|
3
|
-
import { useRouterState as O } from "@tanstack/react-router";
|
|
4
|
-
import { clsx as Q } from "clsx";
|
|
5
|
-
import { a as ee } from "./useMediaQuery-DrDUrkmJ.js";
|
|
6
|
-
import { u as ae } from "./useLockBodyScroll-DwBILLPK.js";
|
|
7
|
-
import { A as W } from "./Avatar-Q50J8wdN.js";
|
|
8
|
-
import { C as J, R as te } from "./Col-B51RlwWP.js";
|
|
9
|
-
import { D as z } from "./Divider-LtH3dLgw.js";
|
|
10
|
-
import { D as G } from "./Dropdown-FfkmluRu.js";
|
|
11
|
-
import { I as u } from "./Icon-DaTvzLBu.js";
|
|
12
|
-
import { I as y } from "./IconButton-DXMmtuLA.js";
|
|
13
|
-
import { L as q } from "./ListItem-Cn15lJBr.js";
|
|
14
|
-
import { F as se } from "./FullscreenToggle-DMlp05UN.js";
|
|
15
|
-
import { T as re } from "./ThemeToggle-BVQmSMsj.js";
|
|
16
|
-
import { T as i } from "./Typography-Cta6Rg4L.js";
|
|
17
|
-
import { B as ne } from "./Breadcrumbs-l0PlUpQ4.js";
|
|
18
|
-
import { T as le } from "./Toaster-C6UK_2TB.js";
|
|
19
|
-
import { a as oe, c as ie, N as U, S as ce } from "./Sidebar-CJ7DtOqb.js";
|
|
20
|
-
import { F as de } from "./Flag-Bs0xNP-P.js";
|
|
21
|
-
import { M as me } from "./Modal-DBYcoCbJ.js";
|
|
22
|
-
import { a as Y } from "./ChoiceCardGroup-DBohUnRj.js";
|
|
23
|
-
import { S as he } from "./Select-vKZzS9K4.js";
|
|
24
|
-
import { S as ge } from "./SwatchPicker-CqyWngFJ.js";
|
|
25
|
-
import { m as K, a as V, D as x, u as pe, g as ue } from "./ConfigProvider-DT0yrgmd.js";
|
|
26
|
-
const be = {
|
|
27
|
-
light: [
|
|
28
|
-
"#dc2626",
|
|
29
|
-
// red
|
|
30
|
-
"#ea580c",
|
|
31
|
-
// orange
|
|
32
|
-
"#d97706",
|
|
33
|
-
// amber
|
|
34
|
-
"#ca8a04",
|
|
35
|
-
// yellow
|
|
36
|
-
"#65a30d",
|
|
37
|
-
// lime
|
|
38
|
-
"#16a34a",
|
|
39
|
-
// green
|
|
40
|
-
"#059669",
|
|
41
|
-
// emerald
|
|
42
|
-
"#0891b2",
|
|
43
|
-
// cyan
|
|
44
|
-
"#0284c7",
|
|
45
|
-
// sky
|
|
46
|
-
"#2563eb",
|
|
47
|
-
// blue
|
|
48
|
-
"#4f46e5",
|
|
49
|
-
// indigo
|
|
50
|
-
"#7c3aed",
|
|
51
|
-
// violet
|
|
52
|
-
"#c026d3",
|
|
53
|
-
// fuchsia
|
|
54
|
-
"#db2777",
|
|
55
|
-
// pink
|
|
56
|
-
"#475569"
|
|
57
|
-
// slate
|
|
58
|
-
],
|
|
59
|
-
dark: [
|
|
60
|
-
"#f87171",
|
|
61
|
-
// red
|
|
62
|
-
"#fb923c",
|
|
63
|
-
// orange
|
|
64
|
-
"#fbbf24",
|
|
65
|
-
// amber
|
|
66
|
-
"#facc15",
|
|
67
|
-
// yellow
|
|
68
|
-
"#a3e635",
|
|
69
|
-
// lime
|
|
70
|
-
"#4ade80",
|
|
71
|
-
// green
|
|
72
|
-
"#34d399",
|
|
73
|
-
// emerald
|
|
74
|
-
"#22d3ee",
|
|
75
|
-
// cyan
|
|
76
|
-
"#38bdf8",
|
|
77
|
-
// sky
|
|
78
|
-
"#60a5fa",
|
|
79
|
-
// blue
|
|
80
|
-
"#818cf8",
|
|
81
|
-
// indigo
|
|
82
|
-
"#a78bfa",
|
|
83
|
-
// violet
|
|
84
|
-
"#e879f9",
|
|
85
|
-
// fuchsia
|
|
86
|
-
"#f472b6",
|
|
87
|
-
// pink
|
|
88
|
-
"#94a3b8"
|
|
89
|
-
// slate
|
|
90
|
-
]
|
|
91
|
-
};
|
|
92
|
-
function fe({ open: C, onClose: k, showTheme: w = !0 }) {
|
|
93
|
-
const {
|
|
94
|
-
mode: h,
|
|
95
|
-
setMode: F,
|
|
96
|
-
accentColors: b,
|
|
97
|
-
defaultAccentColors: f,
|
|
98
|
-
setAccentColor: L,
|
|
99
|
-
headerSticky: D,
|
|
100
|
-
setHeaderSticky: I,
|
|
101
|
-
fontFamily: g,
|
|
102
|
-
setFontFamily: d
|
|
103
|
-
} = K(), a = V(), [o, _] = E(""), v = o.trim(), p = g !== x ? [x, g] : [x], R = (v.length > 0 && !p.some((s) => s.toLowerCase() === v.toLowerCase()) ? [v, ...p] : p).map((s) => ({
|
|
104
|
-
value: s,
|
|
105
|
-
label: s === x ? a("settings.fontDefault", { font: s }) : s
|
|
106
|
-
})), S = (s, N) => {
|
|
107
|
-
const m = f[s], n = [m, ...be[s].filter((c) => c.toLowerCase() !== m.toLowerCase())];
|
|
108
|
-
return /* @__PURE__ */ e(
|
|
109
|
-
ge,
|
|
110
|
-
{
|
|
111
|
-
label: N,
|
|
112
|
-
colors: n,
|
|
113
|
-
value: b[s] ?? m,
|
|
114
|
-
onChange: (c) => L(c.toLowerCase() === m.toLowerCase() ? null : c, s),
|
|
115
|
-
labels: { [m]: a("settings.accentDefault", { color: m }) },
|
|
116
|
-
"aria-label": String(N)
|
|
117
|
-
}
|
|
118
|
-
);
|
|
119
|
-
};
|
|
120
|
-
return /* @__PURE__ */ r(
|
|
121
|
-
me,
|
|
122
|
-
{
|
|
123
|
-
open: C,
|
|
124
|
-
onClose: k,
|
|
125
|
-
placement: "right",
|
|
126
|
-
size: "sm",
|
|
127
|
-
title: a("settings.label"),
|
|
128
|
-
icon: "Setting5",
|
|
129
|
-
children: [
|
|
130
|
-
w && /* @__PURE__ */ r(B, { children: [
|
|
131
|
-
/* @__PURE__ */ e(i, { variant: "subtitle", as: "h3", children: a("settings.themeTitle") }),
|
|
132
|
-
/* @__PURE__ */ e(
|
|
133
|
-
i,
|
|
134
|
-
{
|
|
135
|
-
variant: "bodySmall",
|
|
136
|
-
color: "muted",
|
|
137
|
-
as: "p",
|
|
138
|
-
style: { marginTop: "var(--tz-space-xxs)" },
|
|
139
|
-
children: a("settings.themeDesc")
|
|
140
|
-
}
|
|
141
|
-
),
|
|
142
|
-
/* @__PURE__ */ e(
|
|
143
|
-
Y,
|
|
144
|
-
{
|
|
145
|
-
exclusive: !0,
|
|
146
|
-
color: "accent",
|
|
147
|
-
minCardWidth: 130,
|
|
148
|
-
value: h,
|
|
149
|
-
onChange: (s) => {
|
|
150
|
-
typeof s == "string" && F(s);
|
|
151
|
-
},
|
|
152
|
-
options: [
|
|
153
|
-
{
|
|
154
|
-
value: "light",
|
|
155
|
-
label: a("settings.light"),
|
|
156
|
-
description: a("settings.lightDesc"),
|
|
157
|
-
icon: "Sun"
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
value: "dark",
|
|
161
|
-
label: a("settings.dark"),
|
|
162
|
-
description: a("settings.darkDesc"),
|
|
163
|
-
icon: "Moon"
|
|
164
|
-
}
|
|
165
|
-
],
|
|
166
|
-
"aria-label": a("settings.themeTitle"),
|
|
167
|
-
style: { marginTop: "var(--tz-space-sm)" }
|
|
168
|
-
}
|
|
169
|
-
),
|
|
170
|
-
/* @__PURE__ */ e(z, { style: { margin: "var(--tz-space-md) 0" } })
|
|
171
|
-
] }),
|
|
172
|
-
/* @__PURE__ */ e(i, { variant: "subtitle", as: "h3", children: a("settings.accentTitle") }),
|
|
173
|
-
/* @__PURE__ */ e(
|
|
174
|
-
i,
|
|
175
|
-
{
|
|
176
|
-
variant: "bodySmall",
|
|
177
|
-
color: "muted",
|
|
178
|
-
as: "p",
|
|
179
|
-
style: { marginTop: "var(--tz-space-xxs)" },
|
|
180
|
-
children: a("settings.accentDesc")
|
|
181
|
-
}
|
|
182
|
-
),
|
|
183
|
-
/* @__PURE__ */ e(J, { gap: "md", style: { marginTop: "var(--tz-space-sm)" }, children: w ? /* @__PURE__ */ r(B, { children: [
|
|
184
|
-
S("light", a("settings.lightTheme")),
|
|
185
|
-
S("dark", a("settings.darkTheme"))
|
|
186
|
-
] }) : (
|
|
187
|
-
// theme switching is off → the panel stays in one mode, so only that mode's accent matters
|
|
188
|
-
S(h, a(h === "light" ? "settings.lightTheme" : "settings.darkTheme"))
|
|
189
|
-
) }),
|
|
190
|
-
/* @__PURE__ */ e(z, { style: { margin: "var(--tz-space-md) 0" } }),
|
|
191
|
-
/* @__PURE__ */ e(i, { variant: "subtitle", as: "h3", children: a("settings.fontTitle") }),
|
|
192
|
-
/* @__PURE__ */ e(
|
|
193
|
-
i,
|
|
194
|
-
{
|
|
195
|
-
variant: "bodySmall",
|
|
196
|
-
color: "muted",
|
|
197
|
-
as: "p",
|
|
198
|
-
style: { marginTop: "var(--tz-space-xxs)" },
|
|
199
|
-
children: a("settings.fontDesc")
|
|
200
|
-
}
|
|
201
|
-
),
|
|
202
|
-
/* @__PURE__ */ e(
|
|
203
|
-
he,
|
|
204
|
-
{
|
|
205
|
-
label: a("settings.fontFamily"),
|
|
206
|
-
searchable: !0,
|
|
207
|
-
searchPlaceholder: a("settings.fontSearch"),
|
|
208
|
-
value: g,
|
|
209
|
-
options: R,
|
|
210
|
-
onSearchChange: _,
|
|
211
|
-
onChange: (s) => {
|
|
212
|
-
d(s), _("");
|
|
213
|
-
},
|
|
214
|
-
"aria-label": a("settings.fontFamily"),
|
|
215
|
-
style: { marginTop: "var(--tz-space-sm)" }
|
|
216
|
-
}
|
|
217
|
-
),
|
|
218
|
-
/* @__PURE__ */ e(z, { style: { margin: "var(--tz-space-md) 0" } }),
|
|
219
|
-
/* @__PURE__ */ e(i, { variant: "subtitle", as: "h3", children: a("settings.headerTitle") }),
|
|
220
|
-
/* @__PURE__ */ e(
|
|
221
|
-
i,
|
|
222
|
-
{
|
|
223
|
-
variant: "bodySmall",
|
|
224
|
-
color: "muted",
|
|
225
|
-
as: "p",
|
|
226
|
-
style: { marginTop: "var(--tz-space-xxs)" },
|
|
227
|
-
children: a("settings.headerDesc")
|
|
228
|
-
}
|
|
229
|
-
),
|
|
230
|
-
/* @__PURE__ */ e(
|
|
231
|
-
Y,
|
|
232
|
-
{
|
|
233
|
-
exclusive: !0,
|
|
234
|
-
color: "accent",
|
|
235
|
-
minCardWidth: 130,
|
|
236
|
-
value: D ? "fixed" : "static",
|
|
237
|
-
onChange: (s) => {
|
|
238
|
-
typeof s == "string" && I(s === "fixed");
|
|
239
|
-
},
|
|
240
|
-
options: [
|
|
241
|
-
{
|
|
242
|
-
value: "static",
|
|
243
|
-
label: a("settings.scrollable"),
|
|
244
|
-
description: a("settings.scrollableDesc")
|
|
245
|
-
},
|
|
246
|
-
{ value: "fixed", label: a("settings.fixed"), description: a("settings.fixedDesc") }
|
|
247
|
-
],
|
|
248
|
-
"aria-label": a("settings.headerTitle"),
|
|
249
|
-
style: { marginTop: "var(--tz-space-sm)" }
|
|
250
|
-
}
|
|
251
|
-
)
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
);
|
|
255
|
-
}
|
|
256
|
-
const _e = "_shell_1529j_5", ve = "_shellCollapsed_1529j_21", Se = "_sidebar_1529j_21", Te = "_sidebarInner_1529j_49", ye = "_sidebarClose_1529j_58", Ce = "_backdrop_1529j_65", ke = "_brand_1529j_70", we = "_sidebarSearch_1529j_86", Ne = "_navScroll_1529j_99", je = "_sidebarFooter_1529j_108", xe = "_headerSearch_1529j_115", ze = "_main_1529j_119", Fe = "_topbar_1529j_126", Le = "_topbarSticky_1529j_139", De = "_headerStart_1529j_150", Ie = "_headerEnd_1529j_159", Ae = "_account_1529j_166", Re = "_content_1529j_182", Be = "_pageTitleRow_1529j_189", Ee = "_pageTitle_1529j_189", Me = "_settings_1529j_211", t = {
|
|
257
|
-
shell: _e,
|
|
258
|
-
shellCollapsed: ve,
|
|
259
|
-
sidebar: Se,
|
|
260
|
-
sidebarInner: Te,
|
|
261
|
-
sidebarClose: ye,
|
|
262
|
-
backdrop: Ce,
|
|
263
|
-
brand: ke,
|
|
264
|
-
sidebarSearch: we,
|
|
265
|
-
navScroll: Ne,
|
|
266
|
-
sidebarFooter: je,
|
|
267
|
-
headerSearch: xe,
|
|
268
|
-
main: ze,
|
|
269
|
-
topbar: Fe,
|
|
270
|
-
topbarSticky: Le,
|
|
271
|
-
headerStart: De,
|
|
272
|
-
headerEnd: Ie,
|
|
273
|
-
account: Ae,
|
|
274
|
-
content: Re,
|
|
275
|
-
pageTitleRow: Be,
|
|
276
|
-
pageTitle: Ee,
|
|
277
|
-
settings: Me
|
|
278
|
-
};
|
|
279
|
-
function da({
|
|
280
|
-
logo: C,
|
|
281
|
-
sidebarFooter: k,
|
|
282
|
-
header: w,
|
|
283
|
-
toaster: h = !0,
|
|
284
|
-
children: F
|
|
285
|
-
}) {
|
|
286
|
-
const b = oe(), f = ie(), { headerSticky: L } = K(), { language: D, setLanguage: I, languages: g } = pe(), d = V(), o = { ...ue(), ...w }, _ = o.theme ?? !0, v = o.fullscreen ?? !1, p = o.settings ?? !0, A = o.search ?? !0, R = o.languages ?? !0, S = o.breadcrumbs ?? !0, s = typeof h == "object" ? h : void 0, N = o.pageTitle ?? !0, m = o.onLogout, n = o.user, c = ee("md"), [j, T] = E(c);
|
|
287
|
-
P(() => {
|
|
288
|
-
T(c);
|
|
289
|
-
}, [c]), ae(c && !j);
|
|
290
|
-
const X = O({ select: (l) => l.location.pathname });
|
|
291
|
-
P(() => {
|
|
292
|
-
c && T(!0);
|
|
293
|
-
}, [X]);
|
|
294
|
-
const M = O({
|
|
295
|
-
select: (l) => l.statusCode === 404 || l.matches.some(($) => $.status === "notFound")
|
|
296
|
-
}), [Z, H] = E(!1);
|
|
297
|
-
return /* @__PURE__ */ r("div", { className: Q(t.shell, j && t.shellCollapsed), children: [
|
|
298
|
-
/* @__PURE__ */ e("aside", { className: t.sidebar, children: /* @__PURE__ */ r("div", { className: t.sidebarInner, children: [
|
|
299
|
-
C ? /* @__PURE__ */ r("div", { className: t.brand, children: [
|
|
300
|
-
C,
|
|
301
|
-
/* @__PURE__ */ e(
|
|
302
|
-
y,
|
|
303
|
-
{
|
|
304
|
-
variant: "filled",
|
|
305
|
-
size: "sm",
|
|
306
|
-
className: t.sidebarClose,
|
|
307
|
-
"aria-label": d("common.close"),
|
|
308
|
-
onClick: () => T(!0),
|
|
309
|
-
children: /* @__PURE__ */ e(u, { name: "Close" })
|
|
310
|
-
}
|
|
311
|
-
)
|
|
312
|
-
] }) : null,
|
|
313
|
-
A ? /* @__PURE__ */ e("div", { className: t.sidebarSearch, children: /* @__PURE__ */ e(U, {}) }) : null,
|
|
314
|
-
/* @__PURE__ */ e("div", { className: t.navScroll, children: /* @__PURE__ */ e(ce, {}) }),
|
|
315
|
-
k ? /* @__PURE__ */ e("div", { className: t.sidebarFooter, children: k }) : null
|
|
316
|
-
] }) }),
|
|
317
|
-
/* @__PURE__ */ e("div", { className: t.backdrop, onClick: () => T(!0), "aria-hidden": "true" }),
|
|
318
|
-
/* @__PURE__ */ r("div", { className: t.main, children: [
|
|
319
|
-
/* @__PURE__ */ r("header", { className: Q(t.topbar, L && t.topbarSticky), children: [
|
|
320
|
-
/* @__PURE__ */ r("div", { className: t.headerStart, children: [
|
|
321
|
-
/* @__PURE__ */ e(
|
|
322
|
-
y,
|
|
323
|
-
{
|
|
324
|
-
"aria-label": j ? "Show sidebar" : "Hide sidebar",
|
|
325
|
-
"aria-expanded": !j,
|
|
326
|
-
variant: "filled",
|
|
327
|
-
size: "sm",
|
|
328
|
-
onClick: () => T((l) => !l),
|
|
329
|
-
children: /* @__PURE__ */ e(u, { name: "Menu" })
|
|
330
|
-
}
|
|
331
|
-
),
|
|
332
|
-
A ? /* @__PURE__ */ e("div", { className: t.headerSearch, children: /* @__PURE__ */ e(U, {}) }) : null
|
|
333
|
-
] }),
|
|
334
|
-
/* @__PURE__ */ r("div", { className: t.headerEnd, children: [
|
|
335
|
-
v ? /* @__PURE__ */ e(se, { variant: "filled", size: "sm" }) : null,
|
|
336
|
-
_ ? /* @__PURE__ */ e(re, { variant: "filled", size: "sm" }) : null,
|
|
337
|
-
R && g.length > 1 ? /* @__PURE__ */ e(
|
|
338
|
-
G,
|
|
339
|
-
{
|
|
340
|
-
placement: "bottom-end",
|
|
341
|
-
trigger: /* @__PURE__ */ e(y, { variant: "filled", size: "sm", "aria-label": d("language.label"), children: /* @__PURE__ */ e(u, { name: "Global" }) }),
|
|
342
|
-
children: g.map((l) => /* @__PURE__ */ e(
|
|
343
|
-
q,
|
|
344
|
-
{
|
|
345
|
-
clickable: !0,
|
|
346
|
-
selected: l.code === D,
|
|
347
|
-
onClick: () => I(l.code),
|
|
348
|
-
icon: /* @__PURE__ */ e(de, { code: l.code }),
|
|
349
|
-
children: l.label ?? l.code
|
|
350
|
-
},
|
|
351
|
-
l.code
|
|
352
|
-
))
|
|
353
|
-
}
|
|
354
|
-
) : null,
|
|
355
|
-
p ? /* @__PURE__ */ e(
|
|
356
|
-
y,
|
|
357
|
-
{
|
|
358
|
-
"aria-label": d("settings.label"),
|
|
359
|
-
variant: "text",
|
|
360
|
-
size: "sm",
|
|
361
|
-
className: t.settings,
|
|
362
|
-
onClick: () => H(!0),
|
|
363
|
-
children: /* @__PURE__ */ e(u, { name: "Setting5" })
|
|
364
|
-
}
|
|
365
|
-
) : null,
|
|
366
|
-
m ? /* @__PURE__ */ r(
|
|
367
|
-
G,
|
|
368
|
-
{
|
|
369
|
-
placement: "bottom-end",
|
|
370
|
-
trigger: /* @__PURE__ */ e("button", { type: "button", className: t.account, "aria-label": d("account.label"), children: /* @__PURE__ */ e(W, { size: "md", name: n == null ? void 0 : n.name, src: n == null ? void 0 : n.avatar, color: "primary" }) }),
|
|
371
|
-
children: [
|
|
372
|
-
n ? /* @__PURE__ */ r(B, { children: [
|
|
373
|
-
/* @__PURE__ */ r(te, { gap: 8, align: "center", padding: "var(--tz-space-xxs) var(--tz-space-sm)", children: [
|
|
374
|
-
/* @__PURE__ */ e(W, { size: "sm", name: n.name, src: n.avatar, color: "primary" }),
|
|
375
|
-
/* @__PURE__ */ r(J, { gap: 2, children: [
|
|
376
|
-
/* @__PURE__ */ e(i, { variant: "bodySmall", children: n.name ?? d("userCard.welcome") }),
|
|
377
|
-
n.email ? /* @__PURE__ */ e(i, { variant: "caption", color: "muted", children: n.email }) : null
|
|
378
|
-
] })
|
|
379
|
-
] }),
|
|
380
|
-
/* @__PURE__ */ e(z, {})
|
|
381
|
-
] }) : null,
|
|
382
|
-
/* @__PURE__ */ e(q, { icon: /* @__PURE__ */ e(u, { name: "Logout2", color: "error" }), clickable: !0, onClick: m, children: d("userCard.signOut") })
|
|
383
|
-
]
|
|
384
|
-
}
|
|
385
|
-
) : null
|
|
386
|
-
] })
|
|
387
|
-
] }),
|
|
388
|
-
/* @__PURE__ */ r("main", { className: t.content, children: [
|
|
389
|
-
S && !M ? /* @__PURE__ */ e(ne, {}) : null,
|
|
390
|
-
N && !M && (b || f) ? /* @__PURE__ */ r("div", { className: t.pageTitleRow, children: [
|
|
391
|
-
f ? /* @__PURE__ */ e(
|
|
392
|
-
y,
|
|
393
|
-
{
|
|
394
|
-
"aria-label": d("pageTitle.back"),
|
|
395
|
-
variant: "filled",
|
|
396
|
-
color: "accent",
|
|
397
|
-
className: t.backButton,
|
|
398
|
-
onClick: f,
|
|
399
|
-
size: "sm",
|
|
400
|
-
children: /* @__PURE__ */ e(u, { name: "ArrowLeft" })
|
|
401
|
-
}
|
|
402
|
-
) : null,
|
|
403
|
-
b ? /* @__PURE__ */ e(i, { variant: "h2", className: t.pageTitle, children: b }) : null
|
|
404
|
-
] }) : null,
|
|
405
|
-
F
|
|
406
|
-
] })
|
|
407
|
-
] }),
|
|
408
|
-
h !== !1 && /* @__PURE__ */ e(le, { ...s }),
|
|
409
|
-
p ? /* @__PURE__ */ e(
|
|
410
|
-
fe,
|
|
411
|
-
{
|
|
412
|
-
open: Z,
|
|
413
|
-
onClose: () => H(!1),
|
|
414
|
-
showTheme: _
|
|
415
|
-
}
|
|
416
|
-
) : null
|
|
417
|
-
] });
|
|
418
|
-
}
|
|
419
|
-
export {
|
|
420
|
-
da as R
|
|
421
|
-
};
|
|
422
|
-
//# sourceMappingURL=RootLayout-BNwHsuhC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RootLayout-BNwHsuhC.js","sources":["../src/components/RootLayout/SettingsDrawer.tsx","../src/components/RootLayout/RootLayout.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { DEFAULT_FONT_FAMILY, useT, useTheme } from '../../theme'\nimport { Col } from '../Flex'\nimport { Divider } from '../Divider'\nimport { Modal } from '../Modal'\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`). 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 } = useTheme()\n const t = useT()\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 >\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 </Modal>\n )\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { useRouterState } 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 HeaderConfig,\n type HeaderUser,\n} from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Col, Row } from '../Flex'\nimport { Divider } from '../Divider'\nimport { Dropdown } from '../Dropdown'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ListItem } from '../List'\nimport { FullscreenToggle } from '../FullscreenToggle'\nimport { ThemeToggle } from '../ThemeToggle'\nimport { Typography } from '../Typography'\nimport { Breadcrumbs } from '../Breadcrumbs'\nimport { Toaster, type ToasterProps } from '../Toast'\nimport { NavSearch, Sidebar, usePageBack, usePageTitle } from '../Sidebar/Sidebar'\nimport { Flag } from '../Flag'\nimport { SettingsDrawer } from './SettingsDrawer'\nimport styles from './RootLayout.module.css'\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 /** 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`), `pageTitle` (default `true`), and the\n * 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\n * **`Breadcrumbs` → the page title (the active route's `staticData.name`) → `children`**; pages wrap\n * their own body in `PageLayout`. Set `header.pageTitle = false` to drop the auto `h2` when pages\n * carry their own heading inside their `PageLayout` header. On a 404 the auto title + breadcrumbs are\n * suppressed automatically (a partial route match would otherwise show a stale section), regardless of\n * the `header.pageTitle` / `header.breadcrumbs` props. 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 sidebarFooter,\n header,\n toaster = true,\n children,\n}: RootLayoutProps) {\n const title = usePageTitle()\n const onBack = usePageBack() // set by the current route's `staticData.back` (opt-in) — else undefined\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 // 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 showPageTitle = h.pageTitle ?? true\n const onLogout = h.onLogout\n const user = h.user\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 auto page title + breadcrumbs would show a stale, wrong trail.\n // suppress both 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\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 {logo}\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 {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 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-sm)\">\n <Avatar size=\"sm\" 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=\"bodySmall\">\n {user.name ?? t('userCard.welcome')}\n </Typography>\n {user.email ? (\n <Typography variant=\"caption\" color=\"muted\">\n {user.email}\n </Typography>\n ) : null}\n </Col>\n </Row>\n <Divider />\n </>\n ) : 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 {showPageTitle && !isNotFound && (title || onBack) ? (\n <div className={styles.pageTitleRow}>\n {onBack ? (\n <IconButton\n aria-label={t('pageTitle.back')}\n variant=\"filled\"\n color=\"accent\"\n className={styles.backButton}\n onClick={onBack}\n size=\"sm\"\n >\n <Icon name=\"ArrowLeft\" />\n </IconButton>\n ) : null}\n {title ? (\n <Typography variant=\"h2\" className={styles.pageTitle}>\n {title}\n </Typography>\n ) : null}\n </div>\n ) : 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","useTheme","t","useT","fontQuery","setFontQuery","useState","q","base","DEFAULT_FONT_FAMILY","fontOptions","f","picker","label","def","colors","jsx","SwatchPicker","color","jsxs","Modal","Fragment","Typography","ChoiceCardGroup","v","Divider","Col","Select","RootLayout","logo","sidebarFooter","header","toaster","children","title","usePageTitle","onBack","usePageBack","language","setLanguage","languages","useLanguage","h","useHeaderConfig","showFullscreen","showSettings","showSearch","showLanguages","showBreadcrumbs","toasterProps","showPageTitle","onLogout","user","isNarrow","useMediaQuery","collapsed","setCollapsed","useEffect","useLockBodyScroll","pathname","useRouterState","s","isNotFound","m","settingsOpen","setSettingsOpen","clsx","styles","IconButton","Icon","NavSearch","Sidebar","c","FullscreenToggle","ThemeToggle","Dropdown","ListItem","Flag","Avatar","Row","Breadcrumbs","Toaster"],"mappings":"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"}
|