@techzyapp/ui-library 1.0.3 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/dist/{Alert-BQpA48PY.js → Alert-BL8hDdEl.js} +3 -3
  2. package/dist/{Alert-BQpA48PY.js.map → Alert-BL8hDdEl.js.map} +1 -1
  3. package/dist/{Alert-DKIjM-9x.cjs → Alert-C9yBIMq0.cjs} +2 -2
  4. package/dist/{Alert-DKIjM-9x.cjs.map → Alert-C9yBIMq0.cjs.map} +1 -1
  5. package/dist/{Breadcrumbs-Bx5UgwDy.js → Breadcrumbs-BC_QSlJZ.js} +3 -3
  6. package/dist/{Breadcrumbs-Bx5UgwDy.js.map → Breadcrumbs-BC_QSlJZ.js.map} +1 -1
  7. package/dist/{Breadcrumbs-CHONper7.cjs → Breadcrumbs-DhBx2UgK.cjs} +2 -2
  8. package/dist/{Breadcrumbs-CHONper7.cjs.map → Breadcrumbs-DhBx2UgK.cjs.map} +1 -1
  9. package/dist/{Button-DhEv0YFk.js → Button-BT8XmR_T.js} +2 -2
  10. package/dist/{Button-DhEv0YFk.js.map → Button-BT8XmR_T.js.map} +1 -1
  11. package/dist/{Button-D4bfVNNa.cjs → Button-C_HPI97g.cjs} +2 -2
  12. package/dist/{Button-D4bfVNNa.cjs.map → Button-C_HPI97g.cjs.map} +1 -1
  13. package/dist/{Calendar-Bh317SaV.js → Calendar-B9mXn_zD.js} +3 -3
  14. package/dist/{Calendar-Bh317SaV.js.map → Calendar-B9mXn_zD.js.map} +1 -1
  15. package/dist/{Calendar-C8uNezI-.cjs → Calendar-CCCife5b.cjs} +2 -2
  16. package/dist/{Calendar-C8uNezI-.cjs.map → Calendar-CCCife5b.cjs.map} +1 -1
  17. package/dist/{Card-DzClqJuu.js → Card-DHPAefzg.js} +2 -2
  18. package/dist/{Card-DzClqJuu.js.map → Card-DHPAefzg.js.map} +1 -1
  19. package/dist/{Card-CfyaerZZ.cjs → Card-DfVntHqn.cjs} +2 -2
  20. package/dist/{Card-CfyaerZZ.cjs.map → Card-DfVntHqn.cjs.map} +1 -1
  21. package/dist/{Chip-DSrdXLBU.cjs → Chip-BoHt3WYS.cjs} +2 -2
  22. package/dist/{Chip-DSrdXLBU.cjs.map → Chip-BoHt3WYS.cjs.map} +1 -1
  23. package/dist/{Chip-Cfo0v3Z8.js → Chip-DX3QECcs.js} +2 -2
  24. package/dist/{Chip-Cfo0v3Z8.js.map → Chip-DX3QECcs.js.map} +1 -1
  25. package/dist/{CodeBlock-BWxQyKRo.js → CodeBlock-CPWEOym2.js} +3 -3
  26. package/dist/{CodeBlock-BWxQyKRo.js.map → CodeBlock-CPWEOym2.js.map} +1 -1
  27. package/dist/{CodeBlock-CgXOjKS-.cjs → CodeBlock-DKhIGQBg.cjs} +2 -2
  28. package/dist/{CodeBlock-CgXOjKS-.cjs.map → CodeBlock-DKhIGQBg.cjs.map} +1 -1
  29. package/dist/{Col-D2TfZKiM.js → Col-B51RlwWP.js} +2 -2
  30. package/dist/{Col-D2TfZKiM.js.map → Col-B51RlwWP.js.map} +1 -1
  31. package/dist/{Col-R5mAy8T9.cjs → Col-BdQeyKEX.cjs} +2 -2
  32. package/dist/{Col-R5mAy8T9.cjs.map → Col-BdQeyKEX.cjs.map} +1 -1
  33. package/dist/{ColorPicker-2udt1ORM.js → ColorPicker-2qD8vZkR.js} +3 -3
  34. package/dist/{ColorPicker-2udt1ORM.js.map → ColorPicker-2qD8vZkR.js.map} +1 -1
  35. package/dist/{ColorPicker-BwmaXCOy.cjs → ColorPicker-BAJWvC3h.cjs} +2 -2
  36. package/dist/{ColorPicker-BwmaXCOy.cjs.map → ColorPicker-BAJWvC3h.cjs.map} +1 -1
  37. package/dist/{ColorPickerPanel-ByB1mLSi.cjs → ColorPickerPanel-CkB2pNnX.cjs} +2 -2
  38. package/dist/{ColorPickerPanel-ByB1mLSi.cjs.map → ColorPickerPanel-CkB2pNnX.cjs.map} +1 -1
  39. package/dist/{ColorPickerPanel-BM9OwDDE.js → ColorPickerPanel-CovWDIRt.js} +2 -2
  40. package/dist/{ColorPickerPanel-BM9OwDDE.js.map → ColorPickerPanel-CovWDIRt.js.map} +1 -1
  41. package/dist/ConfigProvider-DFy6pL-C.cjs +2 -0
  42. package/dist/ConfigProvider-DFy6pL-C.cjs.map +1 -0
  43. package/dist/ConfigProvider-sEZzNTeU.js +296 -0
  44. package/dist/ConfigProvider-sEZzNTeU.js.map +1 -0
  45. package/dist/DashedButton-DeiALUPA.js +59 -0
  46. package/dist/DashedButton-DeiALUPA.js.map +1 -0
  47. package/dist/DashedButton-q7AOqKUE.cjs +2 -0
  48. package/dist/DashedButton-q7AOqKUE.cjs.map +1 -0
  49. package/dist/{DatePicker-WM9TC6L_.js → DatePicker-BVHriq5B.js} +4 -4
  50. package/dist/{DatePicker-WM9TC6L_.js.map → DatePicker-BVHriq5B.js.map} +1 -1
  51. package/dist/{DatePicker-DF4Epkn8.cjs → DatePicker-TLaQ3ZyB.cjs} +2 -2
  52. package/dist/{DatePicker-DF4Epkn8.cjs.map → DatePicker-TLaQ3ZyB.cjs.map} +1 -1
  53. package/dist/{DateTimePicker-DBtcWK0F.js → DateTimePicker-BWxsgyGB.js} +7 -7
  54. package/dist/{DateTimePicker-DBtcWK0F.js.map → DateTimePicker-BWxsgyGB.js.map} +1 -1
  55. package/dist/{DateTimePicker-C557OjBU.cjs → DateTimePicker-Dq2jJ2yb.cjs} +2 -2
  56. package/dist/{DateTimePicker-C557OjBU.cjs.map → DateTimePicker-Dq2jJ2yb.cjs.map} +1 -1
  57. package/dist/{Dropdown-DKAXue5_.js → Dropdown-FfkmluRu.js} +2 -2
  58. package/dist/{Dropdown-DKAXue5_.js.map → Dropdown-FfkmluRu.js.map} +1 -1
  59. package/dist/{Dropdown-DygP50OB.cjs → Dropdown-Ui7h2TGd.cjs} +2 -2
  60. package/dist/{Dropdown-DygP50OB.cjs.map → Dropdown-Ui7h2TGd.cjs.map} +1 -1
  61. package/dist/{EmptyState-CCCpZ-ZA.cjs → EmptyState-B2WgeL-H.cjs} +2 -2
  62. package/dist/{EmptyState-CCCpZ-ZA.cjs.map → EmptyState-B2WgeL-H.cjs.map} +1 -1
  63. package/dist/{EmptyState-CetM49vk.js → EmptyState-D8eUxb8v.js} +2 -2
  64. package/dist/{EmptyState-CetM49vk.js.map → EmptyState-D8eUxb8v.js.map} +1 -1
  65. package/dist/{FileUploader-VtmmwUFE.js → FileUploader-I0G-2WSe.js} +5 -5
  66. package/dist/{FileUploader-VtmmwUFE.js.map → FileUploader-I0G-2WSe.js.map} +1 -1
  67. package/dist/{FileUploader-B4TJHyoi.cjs → FileUploader-qsnWX-i5.cjs} +2 -2
  68. package/dist/{FileUploader-B4TJHyoi.cjs.map → FileUploader-qsnWX-i5.cjs.map} +1 -1
  69. package/dist/{Flag-EPZOrH-U.cjs → Flag-Bxl1Pa9m.cjs} +2 -2
  70. package/dist/{Flag-EPZOrH-U.cjs.map → Flag-Bxl1Pa9m.cjs.map} +1 -1
  71. package/dist/{Flag-BWCX6oSR.js → Flag-CvIo_Eqp.js} +2 -2
  72. package/dist/{Flag-BWCX6oSR.js.map → Flag-CvIo_Eqp.js.map} +1 -1
  73. package/dist/Flex-BFn4P1tJ.js +52 -0
  74. package/dist/Flex-BFn4P1tJ.js.map +1 -0
  75. package/dist/Flex-C6tHC8n7.cjs +2 -0
  76. package/dist/Flex-C6tHC8n7.cjs.map +1 -0
  77. package/dist/{FullscreenToggle-DDKN5n8B.cjs → FullscreenToggle-CEOkPSLp.cjs} +2 -2
  78. package/dist/{FullscreenToggle-DDKN5n8B.cjs.map → FullscreenToggle-CEOkPSLp.cjs.map} +1 -1
  79. package/dist/{FullscreenToggle-oWzYqUPH.js → FullscreenToggle-CRMGYmB8.js} +3 -3
  80. package/dist/{FullscreenToggle-oWzYqUPH.js.map → FullscreenToggle-CRMGYmB8.js.map} +1 -1
  81. package/dist/Grid-5k6dy-F5.js +26 -0
  82. package/dist/Grid-5k6dy-F5.js.map +1 -0
  83. package/dist/Grid-frN0D9lR.cjs +2 -0
  84. package/dist/Grid-frN0D9lR.cjs.map +1 -0
  85. package/dist/{IconButton-CBusrDa9.js → IconButton-BZ2jJn_T.js} +2 -2
  86. package/dist/{IconButton-CBusrDa9.js.map → IconButton-BZ2jJn_T.js.map} +1 -1
  87. package/dist/{IconButton-D6TenQZ_.cjs → IconButton-ChUfK0pG.cjs} +2 -2
  88. package/dist/{IconButton-D6TenQZ_.cjs.map → IconButton-ChUfK0pG.cjs.map} +1 -1
  89. package/dist/{List-CNz2M3-q.cjs → List-ChXO0Hz-.cjs} +2 -2
  90. package/dist/{List-CNz2M3-q.cjs.map → List-ChXO0Hz-.cjs.map} +1 -1
  91. package/dist/{List-BHgFI9Ll.js → List-LqbfF6gU.js} +2 -2
  92. package/dist/{List-BHgFI9Ll.js.map → List-LqbfF6gU.js.map} +1 -1
  93. package/dist/{ListItem-B4yqZR-Z.js → ListItem-B4Upc0Hy.js} +2 -2
  94. package/dist/{ListItem-B4yqZR-Z.js.map → ListItem-B4Upc0Hy.js.map} +1 -1
  95. package/dist/{ListItem-RH-D-Wey.cjs → ListItem-DWQorRxG.cjs} +2 -2
  96. package/dist/{ListItem-RH-D-Wey.cjs.map → ListItem-DWQorRxG.cjs.map} +1 -1
  97. package/dist/{Loader-C4JoXOyA.js → Loader-DFlpw5Zc.js} +2 -2
  98. package/dist/{Loader-C4JoXOyA.js.map → Loader-DFlpw5Zc.js.map} +1 -1
  99. package/dist/{Loader-D1MtlQOH.cjs → Loader-plA9fgHf.cjs} +2 -2
  100. package/dist/{Loader-D1MtlQOH.cjs.map → Loader-plA9fgHf.cjs.map} +1 -1
  101. package/dist/Masonry-BObKcPmo.js +82 -0
  102. package/dist/Masonry-BObKcPmo.js.map +1 -0
  103. package/dist/Masonry-BVphuk2X.cjs +2 -0
  104. package/dist/Masonry-BVphuk2X.cjs.map +1 -0
  105. package/dist/{Modal-B2YSCVVt.cjs → Modal-BaieUdge.cjs} +2 -2
  106. package/dist/{Modal-B2YSCVVt.cjs.map → Modal-BaieUdge.cjs.map} +1 -1
  107. package/dist/{Modal-BuaPDlKV.js → Modal-CRH_i5uU.js} +3 -3
  108. package/dist/{Modal-BuaPDlKV.js.map → Modal-CRH_i5uU.js.map} +1 -1
  109. package/dist/{MultiSelect-BGRT_B60.js → MultiSelect-BmkzNHTE.js} +6 -6
  110. package/dist/{MultiSelect-BGRT_B60.js.map → MultiSelect-BmkzNHTE.js.map} +1 -1
  111. package/dist/{MultiSelect-CSJKSWpA.cjs → MultiSelect-Cb-N8GIs.cjs} +2 -2
  112. package/dist/{MultiSelect-CSJKSWpA.cjs.map → MultiSelect-Cb-N8GIs.cjs.map} +1 -1
  113. package/dist/{NumberField-DBvhSQCw.js → NumberField-D71JI2Wv.js} +3 -3
  114. package/dist/{NumberField-DBvhSQCw.js.map → NumberField-D71JI2Wv.js.map} +1 -1
  115. package/dist/{NumberField-DBpO-Z_7.cjs → NumberField-DBwNn3-f.cjs} +2 -2
  116. package/dist/{NumberField-DBpO-Z_7.cjs.map → NumberField-DBwNn3-f.cjs.map} +1 -1
  117. package/dist/{OtpField-BUBYyorC.cjs → OtpField-C-SiHxKa.cjs} +2 -2
  118. package/dist/{OtpField-BUBYyorC.cjs.map → OtpField-C-SiHxKa.cjs.map} +1 -1
  119. package/dist/{OtpField-CTq-CUbF.js → OtpField-DOz-JmuX.js} +2 -2
  120. package/dist/{OtpField-CTq-CUbF.js.map → OtpField-DOz-JmuX.js.map} +1 -1
  121. package/dist/{PageLayout-DddzYw2B.js → PageLayout-BIdgUKsN.js} +2 -2
  122. package/dist/{PageLayout-DddzYw2B.js.map → PageLayout-BIdgUKsN.js.map} +1 -1
  123. package/dist/{PageLayout-Dfbjw6jD.cjs → PageLayout-qF5ThZKO.cjs} +2 -2
  124. package/dist/{PageLayout-Dfbjw6jD.cjs.map → PageLayout-qF5ThZKO.cjs.map} +1 -1
  125. package/dist/PageNotFound-CsgH9tY0.js +39 -0
  126. package/dist/PageNotFound-CsgH9tY0.js.map +1 -0
  127. package/dist/PageNotFound-DObWgQ0Z.cjs +2 -0
  128. package/dist/PageNotFound-DObWgQ0Z.cjs.map +1 -0
  129. package/dist/{Pagination-CN9V8M5C.js → Pagination-Kj7ZDi3N.js} +2 -2
  130. package/dist/{Pagination-CN9V8M5C.js.map → Pagination-Kj7ZDi3N.js.map} +1 -1
  131. package/dist/{Pagination-DRwTLPh8.cjs → Pagination-S3hENjDy.cjs} +2 -2
  132. package/dist/{Pagination-DRwTLPh8.cjs.map → Pagination-S3hENjDy.cjs.map} +1 -1
  133. package/dist/{RemoveDialog-ClyZKyUG.cjs → RemoveDialog-BZ0gUf1p.cjs} +2 -2
  134. package/dist/{RemoveDialog-ClyZKyUG.cjs.map → RemoveDialog-BZ0gUf1p.cjs.map} +1 -1
  135. package/dist/{RemoveDialog-Bvt6sH79.js → RemoveDialog-D9a0GttZ.js} +4 -4
  136. package/dist/{RemoveDialog-Bvt6sH79.js.map → RemoveDialog-D9a0GttZ.js.map} +1 -1
  137. package/dist/{RichTextEditor-CAYt1Zm1.cjs → RichTextEditor-BX6twJ9D.cjs} +2 -2
  138. package/dist/{RichTextEditor-CAYt1Zm1.cjs.map → RichTextEditor-BX6twJ9D.cjs.map} +1 -1
  139. package/dist/{RichTextEditor-BTx8Py3I.js → RichTextEditor-D05Czeif.js} +9 -9
  140. package/dist/{RichTextEditor-BTx8Py3I.js.map → RichTextEditor-D05Czeif.js.map} +1 -1
  141. package/dist/RootLayout-BR_pPr3d.cjs +2 -0
  142. package/dist/RootLayout-BR_pPr3d.cjs.map +1 -0
  143. package/dist/{RootLayout-DCpfuFWF.js → RootLayout-CgI03ZNA.js} +16 -16
  144. package/dist/RootLayout-CgI03ZNA.js.map +1 -0
  145. package/dist/{Select-PbTyxB1Q.js → Select-BZPA2Ytp.js} +5 -5
  146. package/dist/{Select-PbTyxB1Q.js.map → Select-BZPA2Ytp.js.map} +1 -1
  147. package/dist/{Select-_6WogC0u.cjs → Select-Dpl8dq_9.cjs} +2 -2
  148. package/dist/{Select-_6WogC0u.cjs.map → Select-Dpl8dq_9.cjs.map} +1 -1
  149. package/dist/{Sidebar-AaIlRzgk.cjs → Sidebar-6SAObU0u.cjs} +2 -2
  150. package/dist/{Sidebar-AaIlRzgk.cjs.map → Sidebar-6SAObU0u.cjs.map} +1 -1
  151. package/dist/{Sidebar-DRCs2ygZ.js → Sidebar-DEBW6lDA.js} +7 -5
  152. package/dist/{Sidebar-DRCs2ygZ.js.map → Sidebar-DEBW6lDA.js.map} +1 -1
  153. package/dist/{SpeedDial-DgFj16BQ.js → SpeedDial-C3PnANAx.js} +2 -2
  154. package/dist/{SpeedDial-DgFj16BQ.js.map → SpeedDial-C3PnANAx.js.map} +1 -1
  155. package/dist/{SpeedDial-C4jxIXTr.cjs → SpeedDial-Dex0rF2z.cjs} +2 -2
  156. package/dist/{SpeedDial-C4jxIXTr.cjs.map → SpeedDial-Dex0rF2z.cjs.map} +1 -1
  157. package/dist/{Stepper-COKAyN1L.js → Stepper-0e90ZJaw.js} +2 -2
  158. package/dist/{Stepper-COKAyN1L.js.map → Stepper-0e90ZJaw.js.map} +1 -1
  159. package/dist/{Stepper-7pPEBRLI.cjs → Stepper-yKwUaxOU.cjs} +2 -2
  160. package/dist/{Stepper-7pPEBRLI.cjs.map → Stepper-yKwUaxOU.cjs.map} +1 -1
  161. package/dist/{Table-BeOumGng.cjs → Table-BekBXEnW.cjs} +2 -2
  162. package/dist/{Table-BeOumGng.cjs.map → Table-BekBXEnW.cjs.map} +1 -1
  163. package/dist/{Table-BjPLvMbf.js → Table-KEOUL2u3.js} +174 -174
  164. package/dist/{Table-BjPLvMbf.js.map → Table-KEOUL2u3.js.map} +1 -1
  165. package/dist/{Tabs--DDM-zKe.js → Tabs-BHk2B50R.js} +2 -2
  166. package/dist/{Tabs--DDM-zKe.js.map → Tabs-BHk2B50R.js.map} +1 -1
  167. package/dist/{Tabs-BZcMnjdC.cjs → Tabs-DYUS945Y.cjs} +2 -2
  168. package/dist/{Tabs-BZcMnjdC.cjs.map → Tabs-DYUS945Y.cjs.map} +1 -1
  169. package/dist/{TagsField-BTJcZS9P.js → TagsField-BkC5OmIT.js} +4 -4
  170. package/dist/{TagsField-BTJcZS9P.js.map → TagsField-BkC5OmIT.js.map} +1 -1
  171. package/dist/{TagsField-kknWiJZZ.cjs → TagsField-DKh9SbG5.cjs} +2 -2
  172. package/dist/{TagsField-kknWiJZZ.cjs.map → TagsField-DKh9SbG5.cjs.map} +1 -1
  173. package/dist/{TextField-DMI1X09n.js → TextField-12HcFD7u.js} +3 -3
  174. package/dist/{TextField-DMI1X09n.js.map → TextField-12HcFD7u.js.map} +1 -1
  175. package/dist/{TextField-BPefnD5M.cjs → TextField-C9cPPP-B.cjs} +2 -2
  176. package/dist/{TextField-BPefnD5M.cjs.map → TextField-C9cPPP-B.cjs.map} +1 -1
  177. package/dist/{ThemeToggle-DTal3RX5.cjs → ThemeToggle-DIXVvqZ7.cjs} +2 -2
  178. package/dist/{ThemeToggle-DTal3RX5.cjs.map → ThemeToggle-DIXVvqZ7.cjs.map} +1 -1
  179. package/dist/{ThemeToggle-Deh9j8pm.js → ThemeToggle-DUtDXl1Z.js} +3 -3
  180. package/dist/{ThemeToggle-Deh9j8pm.js.map → ThemeToggle-DUtDXl1Z.js.map} +1 -1
  181. package/dist/{TimeColumns-BCNmu4b_.js → TimeColumns-BLhP81oI.js} +2 -2
  182. package/dist/{TimeColumns-BCNmu4b_.js.map → TimeColumns-BLhP81oI.js.map} +1 -1
  183. package/dist/{TimeColumns-Duh4DcYJ.cjs → TimeColumns-CgjyPGjs.cjs} +2 -2
  184. package/dist/{TimeColumns-Duh4DcYJ.cjs.map → TimeColumns-CgjyPGjs.cjs.map} +1 -1
  185. package/dist/{TimePicker-3JgvK2on.js → TimePicker-CJWjGVqT.js} +5 -5
  186. package/dist/{TimePicker-3JgvK2on.js.map → TimePicker-CJWjGVqT.js.map} +1 -1
  187. package/dist/{TimePicker-CfGrCH9T.cjs → TimePicker-CNAXFtJa.cjs} +2 -2
  188. package/dist/{TimePicker-CfGrCH9T.cjs.map → TimePicker-CNAXFtJa.cjs.map} +1 -1
  189. package/dist/{Toaster-D-eG1xv7.js → Toaster-B3Mut6eM.js} +2 -2
  190. package/dist/{Toaster-D-eG1xv7.js.map → Toaster-B3Mut6eM.js.map} +1 -1
  191. package/dist/{Toaster-Bk5GtPjX.cjs → Toaster-CYt_Hvlh.cjs} +2 -2
  192. package/dist/{Toaster-Bk5GtPjX.cjs.map → Toaster-CYt_Hvlh.cjs.map} +1 -1
  193. package/dist/{TranslatedFields-CI0F9bHw.js → TranslatedFields-BEaS1esD.js} +3 -3
  194. package/dist/{TranslatedFields-CI0F9bHw.js.map → TranslatedFields-BEaS1esD.js.map} +1 -1
  195. package/dist/{TranslatedFields-DT3bYse6.cjs → TranslatedFields-DshwXj6d.cjs} +2 -2
  196. package/dist/{TranslatedFields-DT3bYse6.cjs.map → TranslatedFields-DshwXj6d.cjs.map} +1 -1
  197. package/dist/{UserCard-BhqtX1vU.js → UserCard-Dve-LOSB.js} +3 -3
  198. package/dist/{UserCard-BhqtX1vU.js.map → UserCard-Dve-LOSB.js.map} +1 -1
  199. package/dist/{UserCard-OlLeyyS0.cjs → UserCard-sIguy8Jp.cjs} +2 -2
  200. package/dist/{UserCard-OlLeyyS0.cjs.map → UserCard-sIguy8Jp.cjs.map} +1 -1
  201. package/dist/breakpoints-BbDakdqF.js +50 -0
  202. package/dist/breakpoints-BbDakdqF.js.map +1 -0
  203. package/dist/breakpoints-Dpnh6BbG.cjs +2 -0
  204. package/dist/breakpoints-Dpnh6BbG.cjs.map +1 -0
  205. package/dist/components/Alert/index.cjs +1 -1
  206. package/dist/components/Alert/index.js +1 -1
  207. package/dist/components/Breadcrumbs/index.cjs +1 -1
  208. package/dist/components/Breadcrumbs/index.js +1 -1
  209. package/dist/components/Button/index.cjs +1 -1
  210. package/dist/components/Button/index.js +1 -1
  211. package/dist/components/Card/index.cjs +1 -1
  212. package/dist/components/Card/index.js +1 -1
  213. package/dist/components/Chip/index.cjs +1 -1
  214. package/dist/components/Chip/index.js +1 -1
  215. package/dist/components/CodeBlock/index.cjs +1 -1
  216. package/dist/components/CodeBlock/index.js +1 -1
  217. package/dist/components/ColorPicker/index.cjs +1 -1
  218. package/dist/components/ColorPicker/index.js +1 -1
  219. package/dist/components/DashedButton/DashedButton.d.cts +33 -0
  220. package/dist/components/DashedButton/DashedButton.d.ts +33 -0
  221. package/dist/components/DashedButton/index.cjs +2 -0
  222. package/dist/components/DashedButton/index.cjs.map +1 -0
  223. package/dist/components/DashedButton/index.d.cts +2 -0
  224. package/dist/components/DashedButton/index.d.ts +2 -0
  225. package/dist/components/DashedButton/index.js +6 -0
  226. package/dist/components/DashedButton/index.js.map +1 -0
  227. package/dist/components/DatePicker/index.cjs +1 -1
  228. package/dist/components/DatePicker/index.js +1 -1
  229. package/dist/components/DateTimePicker/index.cjs +1 -1
  230. package/dist/components/DateTimePicker/index.js +1 -1
  231. package/dist/components/Dropdown/index.cjs +1 -1
  232. package/dist/components/Dropdown/index.js +1 -1
  233. package/dist/components/EmptyState/index.cjs +1 -1
  234. package/dist/components/EmptyState/index.js +1 -1
  235. package/dist/components/FileUploader/index.cjs +1 -1
  236. package/dist/components/FileUploader/index.js +1 -1
  237. package/dist/components/Flag/index.cjs +1 -1
  238. package/dist/components/Flag/index.js +1 -1
  239. package/dist/components/Flex/Flex.d.cts +16 -13
  240. package/dist/components/Flex/Flex.d.ts +16 -13
  241. package/dist/components/Flex/Grid.d.cts +11 -9
  242. package/dist/components/Flex/Grid.d.ts +11 -9
  243. package/dist/components/Flex/index.cjs +1 -1
  244. package/dist/components/Flex/index.js +3 -3
  245. package/dist/components/FullscreenToggle/index.cjs +1 -1
  246. package/dist/components/FullscreenToggle/index.js +1 -1
  247. package/dist/components/IconButton/index.cjs +1 -1
  248. package/dist/components/IconButton/index.js +1 -1
  249. package/dist/components/List/index.cjs +1 -1
  250. package/dist/components/List/index.js +2 -2
  251. package/dist/components/Loader/index.cjs +1 -1
  252. package/dist/components/Loader/index.js +1 -1
  253. package/dist/components/Masonry/Masonry.d.cts +11 -11
  254. package/dist/components/Masonry/Masonry.d.ts +11 -11
  255. package/dist/components/Masonry/index.cjs +1 -1
  256. package/dist/components/Masonry/index.js +1 -1
  257. package/dist/components/Modal/index.cjs +1 -1
  258. package/dist/components/Modal/index.js +1 -1
  259. package/dist/components/MultiSelect/index.cjs +1 -1
  260. package/dist/components/MultiSelect/index.js +1 -1
  261. package/dist/components/NumberField/index.cjs +1 -1
  262. package/dist/components/NumberField/index.js +1 -1
  263. package/dist/components/OtpField/index.cjs +1 -1
  264. package/dist/components/OtpField/index.js +1 -1
  265. package/dist/components/PageLayout/index.cjs +1 -1
  266. package/dist/components/PageLayout/index.js +1 -1
  267. package/dist/components/PageNotFound/PageNotFound.d.cts +34 -0
  268. package/dist/components/PageNotFound/PageNotFound.d.ts +34 -0
  269. package/dist/components/PageNotFound/index.cjs +2 -0
  270. package/dist/components/PageNotFound/index.cjs.map +1 -0
  271. package/dist/components/PageNotFound/index.d.cts +2 -0
  272. package/dist/components/PageNotFound/index.d.ts +2 -0
  273. package/dist/components/PageNotFound/index.js +6 -0
  274. package/dist/components/PageNotFound/index.js.map +1 -0
  275. package/dist/components/Pagination/index.cjs +1 -1
  276. package/dist/components/Pagination/index.js +1 -1
  277. package/dist/components/RemoveDialog/index.cjs +1 -1
  278. package/dist/components/RemoveDialog/index.js +1 -1
  279. package/dist/components/RichTextEditor/index.cjs +1 -1
  280. package/dist/components/RichTextEditor/index.js +1 -1
  281. package/dist/components/RootLayout/index.cjs +1 -1
  282. package/dist/components/RootLayout/index.js +1 -1
  283. package/dist/components/Select/index.cjs +1 -1
  284. package/dist/components/Select/index.js +1 -1
  285. package/dist/components/Sidebar/index.cjs +1 -1
  286. package/dist/components/Sidebar/index.js +1 -1
  287. package/dist/components/Slider/index.d.cts +1 -1
  288. package/dist/components/Slider/index.d.ts +1 -1
  289. package/dist/components/SpeedDial/index.cjs +1 -1
  290. package/dist/components/SpeedDial/index.js +1 -1
  291. package/dist/components/Stepper/index.cjs +1 -1
  292. package/dist/components/Stepper/index.js +1 -1
  293. package/dist/components/Table/index.cjs +1 -1
  294. package/dist/components/Table/index.js +1 -1
  295. package/dist/components/Tabs/index.cjs +1 -1
  296. package/dist/components/Tabs/index.js +1 -1
  297. package/dist/components/TagsField/index.cjs +1 -1
  298. package/dist/components/TagsField/index.js +1 -1
  299. package/dist/components/TextField/index.cjs +1 -1
  300. package/dist/components/TextField/index.js +1 -1
  301. package/dist/components/ThemeToggle/index.cjs +1 -1
  302. package/dist/components/ThemeToggle/index.js +1 -1
  303. package/dist/components/TimePicker/index.cjs +1 -1
  304. package/dist/components/TimePicker/index.js +1 -1
  305. package/dist/components/Toast/index.cjs +1 -1
  306. package/dist/components/Toast/index.js +1 -1
  307. package/dist/components/TranslatedFields/index.cjs +1 -1
  308. package/dist/components/TranslatedFields/index.js +1 -1
  309. package/dist/components/UserCard/index.cjs +1 -1
  310. package/dist/components/UserCard/index.js +1 -1
  311. package/dist/components/index.d.cts +2 -0
  312. package/dist/components/index.d.ts +2 -0
  313. package/dist/entries/components.cjs +1 -1
  314. package/dist/entries/components.js +130 -126
  315. package/dist/entries/components.js.map +1 -1
  316. package/dist/entries/hooks.cjs +1 -1
  317. package/dist/entries/hooks.d.cts +1 -1
  318. package/dist/entries/hooks.d.ts +1 -1
  319. package/dist/entries/hooks.js +4 -3
  320. package/dist/entries/i18n.cjs +1 -1
  321. package/dist/entries/i18n.js +2 -2
  322. package/dist/entries/theme.cjs +1 -1
  323. package/dist/entries/theme.d.cts +2 -2
  324. package/dist/entries/theme.d.ts +2 -2
  325. package/dist/entries/theme.js +16 -14
  326. package/dist/hooks/index.d.cts +1 -1
  327. package/dist/hooks/index.d.ts +1 -1
  328. package/dist/hooks/useMediaQuery.d.cts +21 -8
  329. package/dist/hooks/useMediaQuery.d.ts +21 -8
  330. package/dist/i18n/messages.d.cts +3 -0
  331. package/dist/i18n/messages.d.ts +3 -0
  332. package/dist/index.cjs +1 -1
  333. package/dist/index.css +1 -1
  334. package/dist/index.js +183 -176
  335. package/dist/index.js.map +1 -1
  336. package/dist/messages-BJiUtJ2E.cjs +36 -0
  337. package/dist/messages-BJiUtJ2E.cjs.map +1 -0
  338. package/dist/{messages-C-zecFBE.js → messages-CVISEA5N.js} +37 -16
  339. package/dist/messages-CVISEA5N.js.map +1 -0
  340. package/dist/theme/ConfigProvider.d.cts +9 -0
  341. package/dist/theme/ConfigProvider.d.ts +9 -0
  342. package/dist/theme/breakpoints.d.cts +48 -13
  343. package/dist/theme/breakpoints.d.ts +48 -13
  344. package/dist/theme/index.d.cts +2 -2
  345. package/dist/theme/index.d.ts +2 -2
  346. package/dist/useMediaQuery-CHMrI6Dy.cjs +2 -0
  347. package/dist/useMediaQuery-CHMrI6Dy.cjs.map +1 -0
  348. package/dist/useMediaQuery-DrDUrkmJ.js +32 -0
  349. package/dist/useMediaQuery-DrDUrkmJ.js.map +1 -0
  350. package/package.json +1 -1
  351. package/dist/ConfigProvider-2c94kUOk.js +0 -291
  352. package/dist/ConfigProvider-2c94kUOk.js.map +0 -1
  353. package/dist/ConfigProvider-ByOFXVyP.cjs +0 -2
  354. package/dist/ConfigProvider-ByOFXVyP.cjs.map +0 -1
  355. package/dist/Flex-Bj3mMF5A.js +0 -50
  356. package/dist/Flex-Bj3mMF5A.js.map +0 -1
  357. package/dist/Flex-CqL3Ghda.cjs +0 -2
  358. package/dist/Flex-CqL3Ghda.cjs.map +0 -1
  359. package/dist/Grid-Bw95bKkJ.cjs +0 -2
  360. package/dist/Grid-Bw95bKkJ.cjs.map +0 -1
  361. package/dist/Grid-CY-syhTX.js +0 -24
  362. package/dist/Grid-CY-syhTX.js.map +0 -1
  363. package/dist/Masonry-BTvtDdnt.js +0 -104
  364. package/dist/Masonry-BTvtDdnt.js.map +0 -1
  365. package/dist/Masonry-Bl1Mlzqw.cjs +0 -2
  366. package/dist/Masonry-Bl1Mlzqw.cjs.map +0 -1
  367. package/dist/RootLayout-Cp-9CVjP.cjs +0 -2
  368. package/dist/RootLayout-Cp-9CVjP.cjs.map +0 -1
  369. package/dist/RootLayout-DCpfuFWF.js.map +0 -1
  370. package/dist/breakpoints-BNPC2_Te.cjs +0 -2
  371. package/dist/breakpoints-BNPC2_Te.cjs.map +0 -1
  372. package/dist/breakpoints-o3dzSzrU.js +0 -12
  373. package/dist/breakpoints-o3dzSzrU.js.map +0 -1
  374. package/dist/messages-C-zecFBE.js.map +0 -1
  375. package/dist/messages-Cy-qK5xU.cjs +0 -36
  376. package/dist/messages-Cy-qK5xU.cjs.map +0 -1
  377. package/dist/useMediaQuery-BCsNfMA1.cjs +0 -2
  378. package/dist/useMediaQuery-BCsNfMA1.cjs.map +0 -1
  379. package/dist/useMediaQuery-_1EcFoC5.js +0 -17
  380. package/dist/useMediaQuery-_1EcFoC5.js.map +0 -1
@@ -1,2 +0,0 @@
1
- "use strict";const p=require("react/jsx-runtime"),m=require("react"),t=require("./Flex-CqL3Ghda.cjs"),g={start:"start",center:"center",end:"end",stretch:"stretch",baseline:"baseline"},x=m.forwardRef(function({cols:e,minItemWidth:r,fill:s=!1,gap:i,align:n,padding:a,inline:c=!1,style:d,...l},u){const o=r!=null?`repeat(${s?"auto-fill":"auto-fit"}, minmax(${t.space(r)}, 1fr))`:typeof e=="number"?`repeat(${e}, minmax(0, 1fr))`:e,f={display:c?"inline-grid":"grid",gridTemplateColumns:o,gap:t.space(i),alignItems:n&&g[n],padding:t.space(a),...d};return p.jsx("div",{ref:u,style:f,...l})});exports.Grid=x;
2
- //# sourceMappingURL=Grid-Bw95bKkJ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Grid-Bw95bKkJ.cjs","sources":["../src/components/Flex/Grid.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { space, type FlexAlign, type Spacing } from './Flex'\n\nconst GRID_ALIGN: Record<FlexAlign, string> = {\n start: 'start',\n center: 'center',\n end: 'end',\n stretch: 'stretch',\n baseline: 'baseline',\n}\n\nexport interface GridProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed column count (`repeat(n, minmax(0,1fr))`) or a raw `grid-template-columns` string. */\n cols?: number | string\n /** Responsive columns: every cell at least this wide, auto-fitting to the width (overrides `cols`). */\n minItemWidth?: Spacing\n /**\n * With `minItemWidth`, use `auto-fill` instead of `auto-fit` — keeps empty tracks at the min width\n * so a few items stay their natural size rather than stretching to fill the row. Defaults to `false`.\n */\n fill?: boolean\n /** Gap between cells (token key, px number, or CSS value). */\n gap?: Spacing\n /** `align-items` for the cells. */\n align?: FlexAlign\n /** Padding (token key, px number, or CSS value). */\n padding?: Spacing\n /** Render as `inline-grid`. */\n inline?: boolean\n}\n\n/**\n * A CSS-grid layout primitive — lay children out in columns via props. Use `cols` for a fixed count\n * or `minItemWidth` for a responsive grid that auto-fits as many equal columns as fit (collapsing to\n * one on narrow widths). Spacing accepts `--tz-space-*` keys, px numbers, or any CSS value; consumer\n * `style` merges last.\n */\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(function Grid(\n { cols, minItemWidth, fill = false, gap, align, padding, inline = false, style, ...props },\n ref,\n) {\n const gridTemplateColumns =\n minItemWidth != null\n ? `repeat(${fill ? 'auto-fill' : 'auto-fit'}, minmax(${space(minItemWidth)}, 1fr))`\n : typeof cols === 'number'\n ? `repeat(${cols}, minmax(0, 1fr))`\n : cols\n\n const gridStyle: CSSProperties = {\n display: inline ? 'inline-grid' : 'grid',\n gridTemplateColumns,\n gap: space(gap),\n alignItems: align && GRID_ALIGN[align],\n padding: space(padding),\n ...style,\n }\n return <div ref={ref} style={gridStyle} {...props} />\n})\n"],"names":["GRID_ALIGN","Grid","forwardRef","cols","minItemWidth","fill","gap","align","padding","inline","style","props","ref","gridTemplateColumns","space","gridStyle"],"mappings":"sGAGMA,EAAwC,CAC5C,MAAO,QACP,OAAQ,SACR,IAAK,MACL,QAAS,UACT,SAAU,UACZ,EA4BaC,EAAOC,EAAAA,WAAsC,SACxD,CAAE,KAAAC,EAAM,aAAAC,EAAc,KAAAC,EAAO,GAAO,IAAAC,EAAK,MAAAC,EAAO,QAAAC,EAAS,OAAAC,EAAS,GAAO,MAAAC,EAAO,GAAGC,CAAA,EACnFC,EACA,CACA,MAAMC,EACJT,GAAgB,KACZ,UAAUC,EAAO,YAAc,UAAU,YAAYS,EAAAA,MAAMV,CAAY,CAAC,UACxE,OAAOD,GAAS,SACd,UAAUA,CAAI,oBACdA,EAEFY,EAA2B,CAC/B,QAASN,EAAS,cAAgB,OAClC,oBAAAI,EACA,IAAKC,EAAAA,MAAMR,CAAG,EACd,WAAYC,GAASP,EAAWO,CAAK,EACrC,QAASO,EAAAA,MAAMN,CAAO,EACtB,GAAGE,CAAA,EAEL,aAAQ,MAAA,CAAI,IAAAE,EAAU,MAAOG,EAAY,GAAGJ,EAAO,CACrD,CAAC"}
@@ -1,24 +0,0 @@
1
- import { jsx as c } from "react/jsx-runtime";
2
- import { forwardRef as u } from "react";
3
- import { s as r } from "./Flex-Bj3mMF5A.js";
4
- const g = {
5
- start: "start",
6
- center: "center",
7
- end: "end",
8
- stretch: "stretch",
9
- baseline: "baseline"
10
- }, $ = u(function({ cols: e, minItemWidth: t, fill: n = !1, gap: i, align: a, padding: s, inline: o = !1, style: f, ...d }, l) {
11
- const m = t != null ? `repeat(${n ? "auto-fill" : "auto-fit"}, minmax(${r(t)}, 1fr))` : typeof e == "number" ? `repeat(${e}, minmax(0, 1fr))` : e, p = {
12
- display: o ? "inline-grid" : "grid",
13
- gridTemplateColumns: m,
14
- gap: r(i),
15
- alignItems: a && g[a],
16
- padding: r(s),
17
- ...f
18
- };
19
- return /* @__PURE__ */ c("div", { ref: l, style: p, ...d });
20
- });
21
- export {
22
- $ as G
23
- };
24
- //# sourceMappingURL=Grid-CY-syhTX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Grid-CY-syhTX.js","sources":["../src/components/Flex/Grid.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { space, type FlexAlign, type Spacing } from './Flex'\n\nconst GRID_ALIGN: Record<FlexAlign, string> = {\n start: 'start',\n center: 'center',\n end: 'end',\n stretch: 'stretch',\n baseline: 'baseline',\n}\n\nexport interface GridProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed column count (`repeat(n, minmax(0,1fr))`) or a raw `grid-template-columns` string. */\n cols?: number | string\n /** Responsive columns: every cell at least this wide, auto-fitting to the width (overrides `cols`). */\n minItemWidth?: Spacing\n /**\n * With `minItemWidth`, use `auto-fill` instead of `auto-fit` — keeps empty tracks at the min width\n * so a few items stay their natural size rather than stretching to fill the row. Defaults to `false`.\n */\n fill?: boolean\n /** Gap between cells (token key, px number, or CSS value). */\n gap?: Spacing\n /** `align-items` for the cells. */\n align?: FlexAlign\n /** Padding (token key, px number, or CSS value). */\n padding?: Spacing\n /** Render as `inline-grid`. */\n inline?: boolean\n}\n\n/**\n * A CSS-grid layout primitive — lay children out in columns via props. Use `cols` for a fixed count\n * or `minItemWidth` for a responsive grid that auto-fits as many equal columns as fit (collapsing to\n * one on narrow widths). Spacing accepts `--tz-space-*` keys, px numbers, or any CSS value; consumer\n * `style` merges last.\n */\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(function Grid(\n { cols, minItemWidth, fill = false, gap, align, padding, inline = false, style, ...props },\n ref,\n) {\n const gridTemplateColumns =\n minItemWidth != null\n ? `repeat(${fill ? 'auto-fill' : 'auto-fit'}, minmax(${space(minItemWidth)}, 1fr))`\n : typeof cols === 'number'\n ? `repeat(${cols}, minmax(0, 1fr))`\n : cols\n\n const gridStyle: CSSProperties = {\n display: inline ? 'inline-grid' : 'grid',\n gridTemplateColumns,\n gap: space(gap),\n alignItems: align && GRID_ALIGN[align],\n padding: space(padding),\n ...style,\n }\n return <div ref={ref} style={gridStyle} {...props} />\n})\n"],"names":["GRID_ALIGN","Grid","forwardRef","cols","minItemWidth","fill","gap","align","padding","inline","style","props","ref","gridTemplateColumns","space","gridStyle"],"mappings":";;;AAGA,MAAMA,IAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AACZ,GA4BaC,IAAOC,EAAsC,SACxD,EAAE,MAAAC,GAAM,cAAAC,GAAc,MAAAC,IAAO,IAAO,KAAAC,GAAK,OAAAC,GAAO,SAAAC,GAAS,QAAAC,IAAS,IAAO,OAAAC,GAAO,GAAGC,EAAA,GACnFC,GACA;AACA,QAAMC,IACJT,KAAgB,OACZ,UAAUC,IAAO,cAAc,UAAU,YAAYS,EAAMV,CAAY,CAAC,YACxE,OAAOD,KAAS,WACd,UAAUA,CAAI,sBACdA,GAEFY,IAA2B;AAAA,IAC/B,SAASN,IAAS,gBAAgB;AAAA,IAClC,qBAAAI;AAAA,IACA,KAAKC,EAAMR,CAAG;AAAA,IACd,YAAYC,KAASP,EAAWO,CAAK;AAAA,IACrC,SAASO,EAAMN,CAAO;AAAA,IACtB,GAAGE;AAAA,EAAA;AAEL,2BAAQ,OAAA,EAAI,KAAAE,GAAU,OAAOG,GAAY,GAAGJ,GAAO;AACrD,CAAC;"}
@@ -1,104 +0,0 @@
1
- import { jsx as M } from "react/jsx-runtime";
2
- import { forwardRef as G, useMemo as I, Children as K, useState as A, useRef as C, useCallback as T, useLayoutEffect as N, useEffect as P } from "react";
3
- import { s as O } from "./Flex-Bj3mMF5A.js";
4
- import { B as d, a as H } from "./breakpoints-o3dzSzrU.js";
5
- import { u as h } from "./useMediaQuery-_1EcFoC5.js";
6
- const q = 200, F = (r, l) => r.length === l.length && r.every((n, c) => n === l[c]);
7
- function S(r, l) {
8
- if (r == null || typeof r != "object") return r;
9
- const n = r;
10
- let c;
11
- for (const i of H)
12
- n[i] != null && l[i] && (c = n[i]);
13
- if (c === void 0) {
14
- for (const i of H)
15
- if (n[i] != null) {
16
- c = n[i];
17
- break;
18
- }
19
- }
20
- return c;
21
- }
22
- const U = G(function({ columns: l = 3, minColumnWidth: n, gap: c = "md", padding: i, className: $, style: k, children: b, ...B }, m) {
23
- const x = I(() => K.toArray(b), [b]), f = x.length, v = {
24
- xs: !0,
25
- sm: h(`(min-width: ${d.sm}px)`),
26
- md: h(`(min-width: ${d.md}px)`),
27
- lg: h(`(min-width: ${d.lg}px)`),
28
- xl: h(`(min-width: ${d.xl}px)`)
29
- }, y = Math.max(1, S(l, v) ?? 1), g = O(S(c, v)), [a, D] = A(y), [w, _] = A([]), R = C(null), E = C([]), j = T(
30
- (e) => {
31
- R.current = e, typeof m == "function" ? m(e) : m && (m.current = e);
32
- },
33
- [m]
34
- ), p = T(() => {
35
- const e = R.current;
36
- if (!e) return;
37
- let s = y;
38
- if (n != null) {
39
- const t = parseFloat(getComputedStyle(e).columnGap) || 0, u = e.clientWidth;
40
- s = Math.max(1, Math.floor((u + t) / (n + t)));
41
- }
42
- D((t) => t === s ? t : s);
43
- const o = E.current.slice(0, f).map((t) => t ? t.offsetHeight : 0);
44
- _((t) => F(t, o) ? t : o);
45
- }, [y, n, f]);
46
- N(p, [p, x, a, g]), P(() => {
47
- const e = R.current;
48
- if (!e || typeof ResizeObserver > "u") return;
49
- const s = new ResizeObserver(() => p());
50
- return s.observe(e), E.current.slice(0, f).forEach((o) => o && s.observe(o)), () => s.disconnect();
51
- }, [p, f, a]);
52
- const z = I(() => {
53
- const e = Array.from({ length: a }, () => []), s = new Array(a).fill(0);
54
- for (let o = 0; o < f; o++) {
55
- let t = 0;
56
- for (let u = 1; u < a; u++) s[u] < s[t] && (t = u);
57
- e[t].push(o), s[t] += w[o] || q;
58
- }
59
- return e;
60
- }, [a, f, w]);
61
- return /* @__PURE__ */ M(
62
- "div",
63
- {
64
- ref: j,
65
- className: $,
66
- style: {
67
- display: "flex",
68
- alignItems: "flex-start",
69
- gap: g,
70
- padding: O(i),
71
- ...k
72
- },
73
- ...B,
74
- children: z.map((e, s) => /* @__PURE__ */ M(
75
- "div",
76
- {
77
- style: {
78
- display: "flex",
79
- flexDirection: "column",
80
- gap: g,
81
- flex: "1 1 0",
82
- minWidth: 0
83
- },
84
- children: e.map((o) => /* @__PURE__ */ M(
85
- "div",
86
- {
87
- ref: (t) => {
88
- E.current[o] = t;
89
- },
90
- style: { minWidth: 0 },
91
- children: x[o]
92
- },
93
- o
94
- ))
95
- },
96
- s
97
- ))
98
- }
99
- );
100
- });
101
- export {
102
- U as M
103
- };
104
- //# sourceMappingURL=Masonry-BTvtDdnt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Masonry-BTvtDdnt.js","sources":["../src/components/Masonry/Masonry.tsx"],"sourcesContent":["import {\n Children,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { space, type Spacing } from '../Flex/Flex'\nimport { BREAKPOINTS, BREAKPOINT_ORDER, type Breakpoint } from '../../theme/breakpoints'\nimport { useMediaQuery } from '../../hooks/useMediaQuery'\n\n// nominal height for a not-yet-measured item, so the first (pre-measure) pass spreads items across\n// columns round-robin instead of dumping them all into the first one; corrected on the layout pass.\nconst ESTIMATED_ITEM_HEIGHT = 200\n\nexport interface MasonryProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Number of columns. Either a fixed number, or a **mobile-first** map keyed by the library's\n * `Breakpoint`s (`xs`/`sm`/`md`/`lg`/`xl`) — each entry applies from that breakpoint's min-width up,\n * until a larger defined one overrides it, with the smallest defined key as the base. Defaults to\n * `3`. Ignored when `minColumnWidth` is set.\n *\n * @example columns={2} // always 2\n * @example columns={{ xs: 1, md: 2 }} // 1 below md (768px), 2 at md and up\n */\n columns?: number | Partial<Record<Breakpoint, number>>\n /** Responsive: fit as many equal columns as this min pixel width allows (overrides `columns`). */\n minColumnWidth?: number\n /**\n * Gap between items, horizontally and vertically. Either a single value (a `--tz-space-*` key, a px\n * number, or any CSS value) or a **mobile-first** breakpoint map — same resolution as `columns`.\n * Defaults to `md`.\n *\n * @example gap=\"md\"\n * @example gap={{ xs: 'sm', md: 'lg' }} // tighter on phones, looser from md up\n */\n gap?: Spacing | Partial<Record<Breakpoint, Spacing>>\n /** Padding around the grid (token key, px number, or CSS value). */\n padding?: Spacing\n /** The items to lay out. */\n children?: ReactNode\n}\n\nconst arraysEqual = (a: number[], b: number[]) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n\n/**\n * Resolve a possibly-responsive prop to a concrete value. A plain value passes through; a mobile-first\n * breakpoint map (a plain object keyed by breakpoints) picks the value of the **largest defined\n * breakpoint that currently matches**, falling back to the smallest defined key as the base when none\n * larger has kicked in yet.\n */\nfunction resolveResponsive<T>(\n value: T | Partial<Record<Breakpoint, T>>,\n matches: Record<Breakpoint, boolean>,\n): T | undefined {\n if (value == null || typeof value !== 'object') return value as T | undefined\n const map = value as Partial<Record<Breakpoint, T>>\n let resolved: T | undefined\n for (const bp of BREAKPOINT_ORDER) {\n if (map[bp] != null && matches[bp]) resolved = map[bp]\n }\n if (resolved === undefined) {\n for (const bp of BREAKPOINT_ORDER) {\n if (map[bp] != null) {\n resolved = map[bp]\n break\n }\n }\n }\n return resolved\n}\n\n/**\n * A masonry layout — packs items of varying heights into balanced columns, always adding the next item\n * to the **shortest** column (Pinterest-style), so columns stay level rather than following a fixed\n * grid. Item heights are measured in the DOM (a `ResizeObserver` re-balances on content/size changes),\n * so it works with any children. `columns` is either a fixed number or a mobile-first breakpoint map\n * (`{ xs: 1, md: 2 }`); `minColumnWidth` is a responsive alternative (and overrides `columns`); `gap`\n * spaces items on both axes and is itself responsive the same way (`{ xs: 'sm', md: 'lg' }`).\n * Inline-styled like the other layout primitives (`Flex` / `Grid`); consumer `style` merges last.\n * Reading order flows left-to-right across the columns.\n */\nexport const Masonry = forwardRef<HTMLDivElement, MasonryProps>(function Masonry(\n { columns = 3, minColumnWidth, gap = 'md', padding, className, style, children, ...props },\n ref,\n) {\n const items = useMemo(() => Children.toArray(children), [children])\n const count = items.length\n\n // active min-width breakpoints — a FIXED set of hook calls (order-stable), mobile-first; `xs` is the\n // always-true base. `useMediaQuery` is correct on the first client render, so the resolved count has\n // no flash. These fire regardless of the `columns` form; a plain number just ignores them.\n const matches: Record<Breakpoint, boolean> = {\n xs: true,\n sm: useMediaQuery(`(min-width: ${BREAKPOINTS.sm}px)`),\n md: useMediaQuery(`(min-width: ${BREAKPOINTS.md}px)`),\n lg: useMediaQuery(`(min-width: ${BREAKPOINTS.lg}px)`),\n xl: useMediaQuery(`(min-width: ${BREAKPOINTS.xl}px)`),\n }\n const resolvedColumns = Math.max(1, resolveResponsive(columns, matches) ?? 1)\n const gapValue = space(resolveResponsive(gap, matches))\n\n const [colCount, setColCount] = useState(resolvedColumns)\n const [heights, setHeights] = useState<number[]>([])\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n const itemRefs = useRef<Array<HTMLDivElement | null>>([])\n\n // merge the internal measuring ref with the forwarded ref\n const setRootRef = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref],\n )\n\n // measure the container width → column count, and each item's height → the balance\n const measure = useCallback(() => {\n const root = rootRef.current\n if (!root) return\n\n let nextCols = resolvedColumns\n if (minColumnWidth != null) {\n const g = parseFloat(getComputedStyle(root).columnGap) || 0\n const width = root.clientWidth\n nextCols = Math.max(1, Math.floor((width + g) / (minColumnWidth + g)))\n }\n setColCount((prev) => (prev === nextCols ? prev : nextCols))\n\n const next = itemRefs.current.slice(0, count).map((el) => (el ? el.offsetHeight : 0))\n setHeights((prev) => (arraysEqual(prev, next) ? prev : next))\n }, [resolvedColumns, minColumnWidth, count])\n\n // measure before paint (mount + whenever the item set, column count, or gap changes — a gap change\n // shifts column widths, so heights and the minColumnWidth count need re-reading)\n useLayoutEffect(measure, [measure, items, colCount, gapValue])\n\n // re-balance on container resize and on any item resizing (image loads, dynamic content, …)\n useEffect(() => {\n const root = rootRef.current\n if (!root || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => measure())\n ro.observe(root)\n itemRefs.current.slice(0, count).forEach((el) => el && ro.observe(el))\n return () => ro.disconnect()\n }, [measure, count, colCount])\n\n // greedily assign each item (in order) to the currently shortest column\n const columnsItems = useMemo(() => {\n const buckets: number[][] = Array.from({ length: colCount }, () => [])\n const acc = new Array(colCount).fill(0)\n for (let i = 0; i < count; i++) {\n let min = 0\n for (let c = 1; c < colCount; c++) if (acc[c] < acc[min]) min = c\n buckets[min].push(i)\n acc[min] += heights[i] || ESTIMATED_ITEM_HEIGHT\n }\n return buckets\n }, [colCount, count, heights])\n\n return (\n <div\n ref={setRootRef}\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: gapValue,\n padding: space(padding),\n ...style,\n }}\n {...props}\n >\n {columnsItems.map((indices, c) => (\n <div\n key={c}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: gapValue,\n flex: '1 1 0',\n minWidth: 0,\n }}\n >\n {indices.map((i) => (\n <div\n key={i}\n ref={(el) => {\n itemRefs.current[i] = el\n }}\n style={{ minWidth: 0 } as CSSProperties}\n >\n {items[i]}\n </div>\n ))}\n </div>\n ))}\n </div>\n )\n})\n"],"names":["ESTIMATED_ITEM_HEIGHT","arraysEqual","a","b","v","i","resolveResponsive","value","matches","map","resolved","bp","BREAKPOINT_ORDER","Masonry","forwardRef","columns","minColumnWidth","gap","padding","className","style","children","props","ref","items","useMemo","Children","count","useMediaQuery","BREAKPOINTS","resolvedColumns","gapValue","space","colCount","setColCount","useState","heights","setHeights","rootRef","useRef","itemRefs","setRootRef","useCallback","node","measure","root","nextCols","g","width","prev","next","el","useLayoutEffect","useEffect","ro","columnsItems","buckets","acc","min","c","jsx","indices"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const b=require("react/jsx-runtime"),r=require("react"),T=require("./Flex-CqL3Ghda.cjs"),m=require("./breakpoints-BNPC2_Te.cjs"),y=require("./useMediaQuery-BCsNfMA1.cjs"),P=200,j=(c,l)=>c.length===l.length&&c.every((o,i)=>o===l[i]);function v(c,l){if(c==null||typeof c!="object")return c;const o=c;let i;for(const u of m.BREAKPOINT_ORDER)o[u]!=null&&l[u]&&(i=o[u]);if(i===void 0){for(const u of m.BREAKPOINT_ORDER)if(o[u]!=null){i=o[u];break}}return i}const k=r.forwardRef(function({columns:l=3,minColumnWidth:o,gap:i="md",padding:u,className:w,style:S,children:I,...C},p){const x=r.useMemo(()=>r.Children.toArray(I),[I]),a=x.length,A={xs:!0,sm:y.useMediaQuery(`(min-width: ${m.BREAKPOINTS.sm}px)`),md:y.useMediaQuery(`(min-width: ${m.BREAKPOINTS.md}px)`),lg:y.useMediaQuery(`(min-width: ${m.BREAKPOINTS.lg}px)`),xl:y.useMediaQuery(`(min-width: ${m.BREAKPOINTS.xl}px)`)},R=Math.max(1,v(l,A)??1),g=T.space(v(i,A)),[f,q]=r.useState(R),[O,B]=r.useState([]),E=r.useRef(null),M=r.useRef([]),K=r.useCallback(t=>{E.current=t,typeof p=="function"?p(t):p&&(p.current=t)},[p]),h=r.useCallback(()=>{const t=E.current;if(!t)return;let n=R;if(o!=null){const e=parseFloat(getComputedStyle(t).columnGap)||0,d=t.clientWidth;n=Math.max(1,Math.floor((d+e)/(o+e)))}q(e=>e===n?e:n);const s=M.current.slice(0,a).map(e=>e?e.offsetHeight:0);B(e=>j(e,s)?e:s)},[R,o,a]);r.useLayoutEffect(h,[h,x,f,g]),r.useEffect(()=>{const t=E.current;if(!t||typeof ResizeObserver>"u")return;const n=new ResizeObserver(()=>h());return n.observe(t),M.current.slice(0,a).forEach(s=>s&&n.observe(s)),()=>n.disconnect()},[h,a,f]);const N=r.useMemo(()=>{const t=Array.from({length:f},()=>[]),n=new Array(f).fill(0);for(let s=0;s<a;s++){let e=0;for(let d=1;d<f;d++)n[d]<n[e]&&(e=d);t[e].push(s),n[e]+=O[s]||P}return t},[f,a,O]);return b.jsx("div",{ref:K,className:w,style:{display:"flex",alignItems:"flex-start",gap:g,padding:T.space(u),...S},...C,children:N.map((t,n)=>b.jsx("div",{style:{display:"flex",flexDirection:"column",gap:g,flex:"1 1 0",minWidth:0},children:t.map(s=>b.jsx("div",{ref:e=>{M.current[s]=e},style:{minWidth:0},children:x[s]},s))},n))})});exports.Masonry=k;
2
- //# sourceMappingURL=Masonry-Bl1Mlzqw.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Masonry-Bl1Mlzqw.cjs","sources":["../src/components/Masonry/Masonry.tsx"],"sourcesContent":["import {\n Children,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { space, type Spacing } from '../Flex/Flex'\nimport { BREAKPOINTS, BREAKPOINT_ORDER, type Breakpoint } from '../../theme/breakpoints'\nimport { useMediaQuery } from '../../hooks/useMediaQuery'\n\n// nominal height for a not-yet-measured item, so the first (pre-measure) pass spreads items across\n// columns round-robin instead of dumping them all into the first one; corrected on the layout pass.\nconst ESTIMATED_ITEM_HEIGHT = 200\n\nexport interface MasonryProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Number of columns. Either a fixed number, or a **mobile-first** map keyed by the library's\n * `Breakpoint`s (`xs`/`sm`/`md`/`lg`/`xl`) — each entry applies from that breakpoint's min-width up,\n * until a larger defined one overrides it, with the smallest defined key as the base. Defaults to\n * `3`. Ignored when `minColumnWidth` is set.\n *\n * @example columns={2} // always 2\n * @example columns={{ xs: 1, md: 2 }} // 1 below md (768px), 2 at md and up\n */\n columns?: number | Partial<Record<Breakpoint, number>>\n /** Responsive: fit as many equal columns as this min pixel width allows (overrides `columns`). */\n minColumnWidth?: number\n /**\n * Gap between items, horizontally and vertically. Either a single value (a `--tz-space-*` key, a px\n * number, or any CSS value) or a **mobile-first** breakpoint map — same resolution as `columns`.\n * Defaults to `md`.\n *\n * @example gap=\"md\"\n * @example gap={{ xs: 'sm', md: 'lg' }} // tighter on phones, looser from md up\n */\n gap?: Spacing | Partial<Record<Breakpoint, Spacing>>\n /** Padding around the grid (token key, px number, or CSS value). */\n padding?: Spacing\n /** The items to lay out. */\n children?: ReactNode\n}\n\nconst arraysEqual = (a: number[], b: number[]) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n\n/**\n * Resolve a possibly-responsive prop to a concrete value. A plain value passes through; a mobile-first\n * breakpoint map (a plain object keyed by breakpoints) picks the value of the **largest defined\n * breakpoint that currently matches**, falling back to the smallest defined key as the base when none\n * larger has kicked in yet.\n */\nfunction resolveResponsive<T>(\n value: T | Partial<Record<Breakpoint, T>>,\n matches: Record<Breakpoint, boolean>,\n): T | undefined {\n if (value == null || typeof value !== 'object') return value as T | undefined\n const map = value as Partial<Record<Breakpoint, T>>\n let resolved: T | undefined\n for (const bp of BREAKPOINT_ORDER) {\n if (map[bp] != null && matches[bp]) resolved = map[bp]\n }\n if (resolved === undefined) {\n for (const bp of BREAKPOINT_ORDER) {\n if (map[bp] != null) {\n resolved = map[bp]\n break\n }\n }\n }\n return resolved\n}\n\n/**\n * A masonry layout — packs items of varying heights into balanced columns, always adding the next item\n * to the **shortest** column (Pinterest-style), so columns stay level rather than following a fixed\n * grid. Item heights are measured in the DOM (a `ResizeObserver` re-balances on content/size changes),\n * so it works with any children. `columns` is either a fixed number or a mobile-first breakpoint map\n * (`{ xs: 1, md: 2 }`); `minColumnWidth` is a responsive alternative (and overrides `columns`); `gap`\n * spaces items on both axes and is itself responsive the same way (`{ xs: 'sm', md: 'lg' }`).\n * Inline-styled like the other layout primitives (`Flex` / `Grid`); consumer `style` merges last.\n * Reading order flows left-to-right across the columns.\n */\nexport const Masonry = forwardRef<HTMLDivElement, MasonryProps>(function Masonry(\n { columns = 3, minColumnWidth, gap = 'md', padding, className, style, children, ...props },\n ref,\n) {\n const items = useMemo(() => Children.toArray(children), [children])\n const count = items.length\n\n // active min-width breakpoints — a FIXED set of hook calls (order-stable), mobile-first; `xs` is the\n // always-true base. `useMediaQuery` is correct on the first client render, so the resolved count has\n // no flash. These fire regardless of the `columns` form; a plain number just ignores them.\n const matches: Record<Breakpoint, boolean> = {\n xs: true,\n sm: useMediaQuery(`(min-width: ${BREAKPOINTS.sm}px)`),\n md: useMediaQuery(`(min-width: ${BREAKPOINTS.md}px)`),\n lg: useMediaQuery(`(min-width: ${BREAKPOINTS.lg}px)`),\n xl: useMediaQuery(`(min-width: ${BREAKPOINTS.xl}px)`),\n }\n const resolvedColumns = Math.max(1, resolveResponsive(columns, matches) ?? 1)\n const gapValue = space(resolveResponsive(gap, matches))\n\n const [colCount, setColCount] = useState(resolvedColumns)\n const [heights, setHeights] = useState<number[]>([])\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n const itemRefs = useRef<Array<HTMLDivElement | null>>([])\n\n // merge the internal measuring ref with the forwarded ref\n const setRootRef = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref],\n )\n\n // measure the container width → column count, and each item's height → the balance\n const measure = useCallback(() => {\n const root = rootRef.current\n if (!root) return\n\n let nextCols = resolvedColumns\n if (minColumnWidth != null) {\n const g = parseFloat(getComputedStyle(root).columnGap) || 0\n const width = root.clientWidth\n nextCols = Math.max(1, Math.floor((width + g) / (minColumnWidth + g)))\n }\n setColCount((prev) => (prev === nextCols ? prev : nextCols))\n\n const next = itemRefs.current.slice(0, count).map((el) => (el ? el.offsetHeight : 0))\n setHeights((prev) => (arraysEqual(prev, next) ? prev : next))\n }, [resolvedColumns, minColumnWidth, count])\n\n // measure before paint (mount + whenever the item set, column count, or gap changes — a gap change\n // shifts column widths, so heights and the minColumnWidth count need re-reading)\n useLayoutEffect(measure, [measure, items, colCount, gapValue])\n\n // re-balance on container resize and on any item resizing (image loads, dynamic content, …)\n useEffect(() => {\n const root = rootRef.current\n if (!root || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => measure())\n ro.observe(root)\n itemRefs.current.slice(0, count).forEach((el) => el && ro.observe(el))\n return () => ro.disconnect()\n }, [measure, count, colCount])\n\n // greedily assign each item (in order) to the currently shortest column\n const columnsItems = useMemo(() => {\n const buckets: number[][] = Array.from({ length: colCount }, () => [])\n const acc = new Array(colCount).fill(0)\n for (let i = 0; i < count; i++) {\n let min = 0\n for (let c = 1; c < colCount; c++) if (acc[c] < acc[min]) min = c\n buckets[min].push(i)\n acc[min] += heights[i] || ESTIMATED_ITEM_HEIGHT\n }\n return buckets\n }, [colCount, count, heights])\n\n return (\n <div\n ref={setRootRef}\n className={className}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: gapValue,\n padding: space(padding),\n ...style,\n }}\n {...props}\n >\n {columnsItems.map((indices, c) => (\n <div\n key={c}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: gapValue,\n flex: '1 1 0',\n minWidth: 0,\n }}\n >\n {indices.map((i) => (\n <div\n key={i}\n ref={(el) => {\n itemRefs.current[i] = el\n }}\n style={{ minWidth: 0 } as CSSProperties}\n >\n {items[i]}\n </div>\n ))}\n </div>\n ))}\n </div>\n )\n})\n"],"names":["ESTIMATED_ITEM_HEIGHT","arraysEqual","a","b","v","resolveResponsive","value","matches","map","resolved","bp","BREAKPOINT_ORDER","Masonry","forwardRef","columns","minColumnWidth","gap","padding","className","style","children","props","ref","items","useMemo","Children","count","useMediaQuery","BREAKPOINTS","resolvedColumns","gapValue","space","colCount","setColCount","useState","heights","setHeights","rootRef","useRef","itemRefs","setRootRef","useCallback","node","measure","root","nextCols","g","width","prev","next","el","useLayoutEffect","useEffect","ro","columnsItems","buckets","acc","i","min","c","jsx","indices"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("react/jsx-runtime"),v=require("react"),U=require("@tanstack/react-router"),B=require("clsx"),Y=require("./useMediaQuery-BCsNfMA1.cjs"),W=require("./useLockBodyScroll-CIXHZo-Q.cjs"),O=require("./Avatar-_ufXh3AY.cjs"),I=require("./Col-R5mAy8T9.cjs"),L=require("./Divider-CzbhdCiD.cjs"),P=require("./Dropdown-DygP50OB.cjs"),b=require("./Icon-CXTl_QAP.cjs"),k=require("./IconButton-D6TenQZ_.cjs"),H=require("./ListItem-RH-D-Wey.cjs"),J=require("./FullscreenToggle-DDKN5n8B.cjs"),K=require("./ThemeToggle-DTal3RX5.cjs"),n=require("./Typography-BFatE1_A.cjs"),V=require("./Breadcrumbs-CHONper7.cjs"),X=require("./Toaster-Bk5GtPjX.cjs"),F=require("./Sidebar-AaIlRzgk.cjs"),Z=require("./Flag-EPZOrH-U.cjs"),$=require("./Modal-B2YSCVVt.cjs"),R=require("./ChoiceCardGroup-6eFM1eL0.cjs"),ee=require("./Select-_6WogC0u.cjs"),se=require("./SwatchPicker-DbAU9-ux.cjs"),c=require("./ConfigProvider-ByOFXVyP.cjs"),ae={light:["#dc2626","#ea580c","#d97706","#ca8a04","#65a30d","#16a34a","#059669","#0891b2","#0284c7","#2563eb","#4f46e5","#7c3aed","#c026d3","#db2777","#475569"],dark:["#f87171","#fb923c","#fbbf24","#facc15","#a3e635","#4ade80","#34d399","#22d3ee","#38bdf8","#60a5fa","#818cf8","#a78bfa","#e879f9","#f472b6","#94a3b8"]};function te({open:_,onClose:y,showTheme:j=!0}){const{mode:d,setMode:q,accentColors:T,defaultAccentColors:N,setAccentColor:w,headerSticky:D,setHeaderSticky:f,fontFamily:i,setFontFamily:A}=c.useTheme(),s=c.useT(),[S,C]=v.useState(""),u=S.trim(),g=i!==c.DEFAULT_FONT_FAMILY?[c.DEFAULT_FONT_FAMILY,i]:[c.DEFAULT_FONT_FAMILY],z=(u.length>0&&!g.some(a=>a.toLowerCase()===u.toLowerCase())?[u,...g]:g).map(a=>({value:a,label:a===c.DEFAULT_FONT_FAMILY?s("settings.fontDefault",{font:a}):a})),m=(a,p)=>{const t=N[a],h=[t,...ae[a].filter(l=>l.toLowerCase()!==t.toLowerCase())];return e.jsx(se.SwatchPicker,{label:p,colors:h,value:T[a]??t,onChange:l=>w(l.toLowerCase()===t.toLowerCase()?null:l,a),labels:{[t]:s("settings.accentDefault",{color:t})},"aria-label":String(p)})};return e.jsxs($.Modal,{open:_,onClose:y,placement:"right",size:"sm",title:s("settings.label"),icon:"Setting5",children:[j&&e.jsxs(e.Fragment,{children:[e.jsx(n.Typography,{variant:"subtitle",as:"h3",children:s("settings.themeTitle")}),e.jsx(n.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:s("settings.themeDesc")}),e.jsx(R.ChoiceCardGroup,{exclusive:!0,color:"accent",minCardWidth:130,value:d,onChange:a=>{typeof a=="string"&&q(a)},options:[{value:"light",label:s("settings.light"),description:s("settings.lightDesc"),icon:"Sun"},{value:"dark",label:s("settings.dark"),description:s("settings.darkDesc"),icon:"Moon"}],"aria-label":s("settings.themeTitle"),style:{marginTop:"var(--tz-space-sm)"}}),e.jsx(L.Divider,{style:{margin:"var(--tz-space-md) 0"}})]}),e.jsx(n.Typography,{variant:"subtitle",as:"h3",children:s("settings.accentTitle")}),e.jsx(n.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:s("settings.accentDesc")}),e.jsx(I.Col,{gap:"md",style:{marginTop:"var(--tz-space-sm)"},children:j?e.jsxs(e.Fragment,{children:[m("light",s("settings.lightTheme")),m("dark",s("settings.darkTheme"))]}):m(d,s(d==="light"?"settings.lightTheme":"settings.darkTheme"))}),e.jsx(L.Divider,{style:{margin:"var(--tz-space-md) 0"}}),e.jsx(n.Typography,{variant:"subtitle",as:"h3",children:s("settings.fontTitle")}),e.jsx(n.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:s("settings.fontDesc")}),e.jsx(ee.Select,{label:s("settings.fontFamily"),searchable:!0,searchPlaceholder:s("settings.fontSearch"),value:i,options:z,onSearchChange:C,onChange:a=>{A(a),C("")},"aria-label":s("settings.fontFamily"),style:{marginTop:"var(--tz-space-sm)"}}),e.jsx(L.Divider,{style:{margin:"var(--tz-space-md) 0"}}),e.jsx(n.Typography,{variant:"subtitle",as:"h3",children:s("settings.headerTitle")}),e.jsx(n.Typography,{variant:"bodySmall",color:"muted",as:"p",style:{marginTop:"var(--tz-space-xxs)"},children:s("settings.headerDesc")}),e.jsx(R.ChoiceCardGroup,{exclusive:!0,color:"accent",minCardWidth:130,value:D?"fixed":"static",onChange:a=>{typeof a=="string"&&f(a==="fixed")},options:[{value:"static",label:s("settings.scrollable"),description:s("settings.scrollableDesc")},{value:"fixed",label:s("settings.fixed"),description:s("settings.fixedDesc")}],"aria-label":s("settings.headerTitle"),style:{marginTop:"var(--tz-space-sm)"}})]})}const re="_shell_1xv33_5",ne="_shellCollapsed_1xv33_21",oe="_sidebar_1xv33_21",ce="_sidebarInner_1xv33_49",ie="_sidebarClose_1xv33_58",le="_backdrop_1xv33_65",de="_brand_1xv33_70",he="_sidebarSearch_1xv33_86",ue="_navScroll_1xv33_99",ge="_sidebarFooter_1xv33_108",me="_headerSearch_1xv33_115",pe="_main_1xv33_119",xe="_topbar_1xv33_126",be="_topbarSticky_1xv33_139",ve="_headerStart_1xv33_150",_e="_headerEnd_1xv33_159",ye="_account_1xv33_166",je="_content_1xv33_182",Te="_pageTitle_1xv33_188",fe="_settings_1xv33_198",r={shell:re,shellCollapsed:ne,sidebar:oe,sidebarInner:ce,sidebarClose:ie,backdrop:le,brand:de,sidebarSearch:he,navScroll:ue,sidebarFooter:ge,headerSearch:me,main:pe,topbar:xe,topbarSticky:be,headerStart:ve,headerEnd:_e,account:ye,content:je,pageTitle:Te,settings:fe};function Se({logo:_,sidebarFooter:y,header:j,toaster:d=!0,children:q}){const T=F.usePageTitle(),{headerSticky:N}=c.useTheme(),{language:w,setLanguage:D,languages:f}=c.useLanguage(),i=c.useT(),s={...c.useHeaderConfig(),...j},S=s.theme??!0,C=s.fullscreen??!1,u=s.settings??!0,g=s.search??!0,E=s.languages??!0,z=s.breadcrumbs??!0,m=typeof d=="object"?d:void 0,a=s.pageTitle??!0,p=s.onLogout,t=s.user,h=Y.useMediaQuery("(max-width: 1279.98px)"),[l,x]=v.useState(h);v.useEffect(()=>{x(h)},[h]),W.useLockBodyScroll(h&&!l);const G=U.useRouterState({select:o=>o.location.pathname});v.useEffect(()=>{h&&x(!0)},[G]);const[Q,M]=v.useState(!1);return e.jsxs("div",{className:B.clsx(r.shell,l&&r.shellCollapsed),children:[e.jsx("aside",{className:r.sidebar,children:e.jsxs("div",{className:r.sidebarInner,children:[_?e.jsxs("div",{className:r.brand,children:[_,e.jsx(k.IconButton,{variant:"filled",size:"sm",className:r.sidebarClose,"aria-label":i("common.close"),onClick:()=>x(!0),children:e.jsx(b.Icon,{name:"Close"})})]}):null,g?e.jsx("div",{className:r.sidebarSearch,children:e.jsx(F.NavSearch,{})}):null,e.jsx("div",{className:r.navScroll,children:e.jsx(F.Sidebar,{})}),y?e.jsx("div",{className:r.sidebarFooter,children:y}):null]})}),e.jsx("div",{className:r.backdrop,onClick:()=>x(!0),"aria-hidden":"true"}),e.jsxs("div",{className:r.main,children:[e.jsxs("header",{className:B.clsx(r.topbar,N&&r.topbarSticky),children:[e.jsxs("div",{className:r.headerStart,children:[e.jsx(k.IconButton,{"aria-label":l?"Show sidebar":"Hide sidebar","aria-expanded":!l,variant:"filled",size:"sm",onClick:()=>x(o=>!o),children:e.jsx(b.Icon,{name:"Menu"})}),g?e.jsx("div",{className:r.headerSearch,children:e.jsx(F.NavSearch,{})}):null]}),e.jsxs("div",{className:r.headerEnd,children:[C?e.jsx(J.FullscreenToggle,{variant:"filled",size:"sm"}):null,S?e.jsx(K.ThemeToggle,{variant:"filled",size:"sm"}):null,E&&f.length>1?e.jsx(P.Dropdown,{placement:"bottom-end",trigger:e.jsx(k.IconButton,{variant:"filled",size:"sm","aria-label":i("language.label"),children:e.jsx(b.Icon,{name:"Global"})}),children:f.map(o=>e.jsx(H.ListItem,{clickable:!0,selected:o.code===w,onClick:()=>D(o.code),icon:e.jsx(Z.Flag,{code:o.code}),children:o.label??o.code},o.code))}):null,u?e.jsx(k.IconButton,{"aria-label":i("settings.label"),variant:"text",size:"sm",className:r.settings,onClick:()=>M(!0),children:e.jsx(b.Icon,{name:"Setting5"})}):null,p?e.jsxs(P.Dropdown,{placement:"bottom-end",trigger:e.jsx("button",{type:"button",className:r.account,"aria-label":i("account.label"),children:e.jsx(O.Avatar,{size:"md",name:t==null?void 0:t.name,src:t==null?void 0:t.avatar,color:"primary"})}),children:[t?e.jsxs(e.Fragment,{children:[e.jsxs(I.Row,{gap:8,align:"center",padding:"var(--tz-space-xxs) var(--tz-space-sm)",children:[e.jsx(O.Avatar,{size:"sm",name:t.name,src:t.avatar,color:"primary"}),e.jsxs(I.Col,{gap:2,children:[t.name?e.jsx(n.Typography,{variant:"bodySmall",children:t.name}):null,t.email?e.jsx(n.Typography,{variant:"caption",color:"muted",children:t.email}):null]})]}),e.jsx(L.Divider,{})]}):null,e.jsx(H.ListItem,{icon:e.jsx(b.Icon,{name:"Logout2",color:"error"}),clickable:!0,onClick:p,children:i("userCard.signOut")})]}):null]})]}),e.jsxs("main",{className:r.content,children:[z?e.jsx(V.Breadcrumbs,{}):null,a&&T?e.jsx(n.Typography,{variant:"h2",className:r.pageTitle,children:T}):null,q]})]}),d!==!1&&e.jsx(X.Toaster,{...m}),u?e.jsx(te,{open:Q,onClose:()=>M(!1),showTheme:S}):null]})}exports.RootLayout=Se;
2
- //# sourceMappingURL=RootLayout-Cp-9CVjP.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RootLayout-Cp-9CVjP.cjs","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, 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. 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 // 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('(max-width: 1279.98px)')\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 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 {user.name ? (\n <Typography variant=\"bodySmall\">{user.name}</Typography>\n ) : null}\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 ? <Breadcrumbs /> : null}\n {showPageTitle && title ? (\n <Typography variant=\"h2\" className={styles.pageTitle}>\n {title}\n </Typography>\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","c","jsx","SwatchPicker","color","jsxs","Modal","Fragment","Typography","ChoiceCardGroup","v","Divider","Col","Select","RootLayout","logo","sidebarFooter","header","toaster","children","title","usePageTitle","language","setLanguage","languages","useLanguage","h","useHeaderConfig","showFullscreen","showSettings","showSearch","showLanguages","showBreadcrumbs","toasterProps","showPageTitle","onLogout","user","isNarrow","useMediaQuery","collapsed","setCollapsed","useEffect","useLockBodyScroll","pathname","useRouterState","s","settingsOpen","setSettingsOpen","clsx","styles","IconButton","Icon","NavSearch","Sidebar","FullscreenToggle","ThemeToggle","Dropdown","l","ListItem","Flag","Avatar","Row","Breadcrumbs","Toaster"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RootLayout-DCpfuFWF.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, 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. 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 // 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('(max-width: 1279.98px)')\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 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 {user.name ? (\n <Typography variant=\"bodySmall\">{user.name}</Typography>\n ) : null}\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 ? <Breadcrumbs /> : null}\n {showPageTitle && title ? (\n <Typography variant=\"h2\" className={styles.pageTitle}>\n {title}\n </Typography>\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","language","setLanguage","languages","useLanguage","h","useHeaderConfig","showFullscreen","showSettings","showSearch","showLanguages","showBreadcrumbs","toasterProps","showPageTitle","onLogout","user","isNarrow","useMediaQuery","collapsed","setCollapsed","useEffect","useLockBodyScroll","pathname","useRouterState","s","settingsOpen","setSettingsOpen","clsx","styles","IconButton","Icon","NavSearch","Sidebar","c","FullscreenToggle","ThemeToggle","Dropdown","l","ListItem","Flag","Avatar","Row","Breadcrumbs","Toaster"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const s={xs:0,sm:576,md:768,lg:992,xl:1280},R=["xs","sm","md","lg","xl"];exports.BREAKPOINTS=s;exports.BREAKPOINT_ORDER=R;
2
- //# sourceMappingURL=breakpoints-BNPC2_Te.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"breakpoints-BNPC2_Te.cjs","sources":["../src/theme/breakpoints.ts"],"sourcesContent":["/**\n * The library's shared responsive breakpoints — the single source of truth for width thresholds.\n *\n * Mobile-first **min-width** values in px. `xs` is the base (`0`); the two values the component CSS\n * already keys off (`≤575.98px` phones, `≤1279.98px` tablet/overlay) line up with `sm` (576) and `xl`\n * (1280), so this scale is a superset of what the styles already use rather than a new set. Consume\n * these instead of hardcoding pixel thresholds, and derive the `Breakpoint` type from here rather than\n * re-listing the keys locally.\n */\nexport const BREAKPOINTS = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1280,\n} as const\n\n/** A responsive breakpoint key (`'xs' | 'sm' | 'md' | 'lg' | 'xl'`). */\nexport type Breakpoint = keyof typeof BREAKPOINTS\n\n/** Breakpoint keys in ascending (mobile-first) order. */\nexport const BREAKPOINT_ORDER: readonly Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl']\n"],"names":["BREAKPOINTS","BREAKPOINT_ORDER"],"mappings":"aASO,MAAMA,EAAc,CACzB,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACN,EAMaC,EAA0C,CAAC,KAAM,KAAM,KAAM,KAAM,IAAI"}
@@ -1,12 +0,0 @@
1
- const s = {
2
- xs: 0,
3
- sm: 576,
4
- md: 768,
5
- lg: 992,
6
- xl: 1280
7
- }, x = ["xs", "sm", "md", "lg", "xl"];
8
- export {
9
- s as B,
10
- x as a
11
- };
12
- //# sourceMappingURL=breakpoints-o3dzSzrU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"breakpoints-o3dzSzrU.js","sources":["../src/theme/breakpoints.ts"],"sourcesContent":["/**\n * The library's shared responsive breakpoints — the single source of truth for width thresholds.\n *\n * Mobile-first **min-width** values in px. `xs` is the base (`0`); the two values the component CSS\n * already keys off (`≤575.98px` phones, `≤1279.98px` tablet/overlay) line up with `sm` (576) and `xl`\n * (1280), so this scale is a superset of what the styles already use rather than a new set. Consume\n * these instead of hardcoding pixel thresholds, and derive the `Breakpoint` type from here rather than\n * re-listing the keys locally.\n */\nexport const BREAKPOINTS = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1280,\n} as const\n\n/** A responsive breakpoint key (`'xs' | 'sm' | 'md' | 'lg' | 'xl'`). */\nexport type Breakpoint = keyof typeof BREAKPOINTS\n\n/** Breakpoint keys in ascending (mobile-first) order. */\nexport const BREAKPOINT_ORDER: readonly Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl']\n"],"names":["BREAKPOINTS","BREAKPOINT_ORDER"],"mappings":"AASO,MAAMA,IAAc;AAAA,EACzB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAMaC,IAA0C,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;"}