@techzyapp/ui-library 1.0.20 → 1.0.21

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 (377) hide show
  1. package/dist/{Accordion-Dy_dM79Y.cjs → Accordion-P3PNqSER.cjs} +2 -2
  2. package/dist/{Accordion-Dy_dM79Y.cjs.map → Accordion-P3PNqSER.cjs.map} +1 -1
  3. package/dist/{Accordion-CAxa1I-m.js → Accordion-w-w_WxxV.js} +3 -3
  4. package/dist/{Accordion-CAxa1I-m.js.map → Accordion-w-w_WxxV.js.map} +1 -1
  5. package/dist/{AdminRoot-DlpMJNTx.cjs → AdminRoot-BDRLuMX6.cjs} +2 -2
  6. package/dist/{AdminRoot-DlpMJNTx.cjs.map → AdminRoot-BDRLuMX6.cjs.map} +1 -1
  7. package/dist/{AdminRoot-B2J1cHK5.js → AdminRoot-DvF0js0q.js} +4 -4
  8. package/dist/{AdminRoot-B2J1cHK5.js.map → AdminRoot-DvF0js0q.js.map} +1 -1
  9. package/dist/{Alert-DRZdNwDm.cjs → Alert-CwoRkKq4.cjs} +2 -2
  10. package/dist/{Alert-DRZdNwDm.cjs.map → Alert-CwoRkKq4.cjs.map} +1 -1
  11. package/dist/{Alert-yldGvhVM.js → Alert-DPYmdaWs.js} +5 -5
  12. package/dist/{Alert-yldGvhVM.js.map → Alert-DPYmdaWs.js.map} +1 -1
  13. package/dist/{AuthLayout-B1tzhzHo.cjs → AuthLayout-BRUxDgzs.cjs} +2 -2
  14. package/dist/{AuthLayout-B1tzhzHo.cjs.map → AuthLayout-BRUxDgzs.cjs.map} +1 -1
  15. package/dist/{AuthLayout-j7EAPPXT.js → AuthLayout-CP9qu6Bv.js} +2 -2
  16. package/dist/{AuthLayout-j7EAPPXT.js.map → AuthLayout-CP9qu6Bv.js.map} +1 -1
  17. package/dist/{Avatar-_ufXh3AY.cjs → Avatar-Dgf04PBC.cjs} +2 -2
  18. package/dist/{Avatar-_ufXh3AY.cjs.map → Avatar-Dgf04PBC.cjs.map} +1 -1
  19. package/dist/{Avatar-BJVCdo-K.js → Avatar-Q50J8wdN.js} +3 -3
  20. package/dist/{Avatar-BJVCdo-K.js.map → Avatar-Q50J8wdN.js.map} +1 -1
  21. package/dist/{AvatarGroup-DdJf4aT7.js → AvatarGroup-YaNasLMS.js} +2 -2
  22. package/dist/{AvatarGroup-DdJf4aT7.js.map → AvatarGroup-YaNasLMS.js.map} +1 -1
  23. package/dist/{AvatarGroup-TW1pt4tj.cjs → AvatarGroup-uW0SD5P4.cjs} +2 -2
  24. package/dist/{AvatarGroup-TW1pt4tj.cjs.map → AvatarGroup-uW0SD5P4.cjs.map} +1 -1
  25. package/dist/{Breadcrumbs-f0GE4lCI.cjs → Breadcrumbs-CknDBLMw.cjs} +2 -2
  26. package/dist/{Breadcrumbs-f0GE4lCI.cjs.map → Breadcrumbs-CknDBLMw.cjs.map} +1 -1
  27. package/dist/{Breadcrumbs-FpIOHx_q.js → Breadcrumbs-l0PlUpQ4.js} +5 -5
  28. package/dist/{Breadcrumbs-FpIOHx_q.js.map → Breadcrumbs-l0PlUpQ4.js.map} +1 -1
  29. package/dist/{Button-Cu0XdnW6.cjs → Button-BdihbLYJ.cjs} +2 -2
  30. package/dist/{Button-Cu0XdnW6.cjs.map → Button-BdihbLYJ.cjs.map} +1 -1
  31. package/dist/{Button-BkjZ7wEu.js → Button-RljTGqHl.js} +2 -2
  32. package/dist/{Button-BkjZ7wEu.js.map → Button-RljTGqHl.js.map} +1 -1
  33. package/dist/{Calendar-DsJ6GICt.js → Calendar-CKCikOQL.js} +4 -4
  34. package/dist/{Calendar-DsJ6GICt.js.map → Calendar-CKCikOQL.js.map} +1 -1
  35. package/dist/{Calendar-CGQCditF.cjs → Calendar-DVg1uQuj.cjs} +2 -2
  36. package/dist/{Calendar-CGQCditF.cjs.map → Calendar-DVg1uQuj.cjs.map} +1 -1
  37. package/dist/{Card-CumMi_XB.js → Card-B0bYi4g2.js} +4 -4
  38. package/dist/{Card-CumMi_XB.js.map → Card-B0bYi4g2.js.map} +1 -1
  39. package/dist/{Card-DGTGdaTZ.cjs → Card-BYFuYD-a.cjs} +2 -2
  40. package/dist/{Card-DGTGdaTZ.cjs.map → Card-BYFuYD-a.cjs.map} +1 -1
  41. package/dist/Checkbox-ZYOSBYRt.js +98 -0
  42. package/dist/Checkbox-ZYOSBYRt.js.map +1 -0
  43. package/dist/Checkbox-fzJCwe0j.cjs +2 -0
  44. package/dist/Checkbox-fzJCwe0j.cjs.map +1 -0
  45. package/dist/{Chip-D83svOCW.js → Chip-BiqfnRUi.js} +3 -3
  46. package/dist/{Chip-D83svOCW.js.map → Chip-BiqfnRUi.js.map} +1 -1
  47. package/dist/{Chip-CJuAvgst.cjs → Chip-CdKUtUGE.cjs} +2 -2
  48. package/dist/{Chip-CJuAvgst.cjs.map → Chip-CdKUtUGE.cjs.map} +1 -1
  49. package/dist/{ChoiceCardGroup-CvFzZlgI.js → ChoiceCardGroup-DBohUnRj.js} +3 -3
  50. package/dist/{ChoiceCardGroup-CvFzZlgI.js.map → ChoiceCardGroup-DBohUnRj.js.map} +1 -1
  51. package/dist/{ChoiceCardGroup-6eFM1eL0.cjs → ChoiceCardGroup-d0VVTUi5.cjs} +2 -2
  52. package/dist/{ChoiceCardGroup-6eFM1eL0.cjs.map → ChoiceCardGroup-d0VVTUi5.cjs.map} +1 -1
  53. package/dist/{CodeBlock-BK_KXhos.js → CodeBlock-BX_0tpk3.js} +4 -4
  54. package/dist/{CodeBlock-BK_KXhos.js.map → CodeBlock-BX_0tpk3.js.map} +1 -1
  55. package/dist/{CodeBlock-C_UDrrY6.cjs → CodeBlock-CAAggVXS.cjs} +2 -2
  56. package/dist/{CodeBlock-C_UDrrY6.cjs.map → CodeBlock-CAAggVXS.cjs.map} +1 -1
  57. package/dist/{ColorPicker-BmxZnsNC.cjs → ColorPicker-BCSaT1A-.cjs} +2 -2
  58. package/dist/{ColorPicker-BmxZnsNC.cjs.map → ColorPicker-BCSaT1A-.cjs.map} +1 -1
  59. package/dist/{ColorPicker-DLnB_AvZ.js → ColorPicker-DhSlvwNj.js} +3 -3
  60. package/dist/{ColorPicker-DLnB_AvZ.js.map → ColorPicker-DhSlvwNj.js.map} +1 -1
  61. package/dist/{ColorPickerPanel-CoyKplF5.cjs → ColorPickerPanel-BOGYXXF1.cjs} +2 -2
  62. package/dist/{ColorPickerPanel-CoyKplF5.cjs.map → ColorPickerPanel-BOGYXXF1.cjs.map} +1 -1
  63. package/dist/{ColorPickerPanel-CG9idF4A.js → ColorPickerPanel-D4t3b9bB.js} +3 -3
  64. package/dist/{ColorPickerPanel-CG9idF4A.js.map → ColorPickerPanel-D4t3b9bB.js.map} +1 -1
  65. package/dist/{ConfigProvider-h1WoGC3R.cjs → ConfigProvider-C7DUWHrb.cjs} +2 -2
  66. package/dist/{ConfigProvider-h1WoGC3R.cjs.map → ConfigProvider-C7DUWHrb.cjs.map} +1 -1
  67. package/dist/{ConfigProvider-DDuIJSM7.js → ConfigProvider-DT0yrgmd.js} +2 -2
  68. package/dist/{ConfigProvider-DDuIJSM7.js.map → ConfigProvider-DT0yrgmd.js.map} +1 -1
  69. package/dist/{CopyButton-tRMAy59I.cjs → CopyButton-3585thVM.cjs} +2 -2
  70. package/dist/{CopyButton-tRMAy59I.cjs.map → CopyButton-3585thVM.cjs.map} +1 -1
  71. package/dist/{CopyButton-DdQ-8ExN.js → CopyButton-BEY1gJzK.js} +4 -4
  72. package/dist/{CopyButton-DdQ-8ExN.js.map → CopyButton-BEY1gJzK.js.map} +1 -1
  73. package/dist/{DashedButton-q7AOqKUE.cjs → DashedButton-3C4IZuo4.cjs} +2 -2
  74. package/dist/{DashedButton-q7AOqKUE.cjs.map → DashedButton-3C4IZuo4.cjs.map} +1 -1
  75. package/dist/{DashedButton-DeiALUPA.js → DashedButton-BXZAyMtw.js} +3 -3
  76. package/dist/{DashedButton-DeiALUPA.js.map → DashedButton-BXZAyMtw.js.map} +1 -1
  77. package/dist/{DatePicker-pz634ktl.js → DatePicker-CEFGgXLF.js} +5 -5
  78. package/dist/{DatePicker-pz634ktl.js.map → DatePicker-CEFGgXLF.js.map} +1 -1
  79. package/dist/{DatePicker-eryY6Xmx.cjs → DatePicker-Dyj2halw.cjs} +2 -2
  80. package/dist/{DatePicker-eryY6Xmx.cjs.map → DatePicker-Dyj2halw.cjs.map} +1 -1
  81. package/dist/{DateTimePicker-CmH3ZuzN.cjs → DateTimePicker-CjX4-8PP.cjs} +2 -2
  82. package/dist/{DateTimePicker-CmH3ZuzN.cjs.map → DateTimePicker-CjX4-8PP.cjs.map} +1 -1
  83. package/dist/{DateTimePicker-BJLq9Fud.js → DateTimePicker-hmYBEuUM.js} +8 -8
  84. package/dist/{DateTimePicker-BJLq9Fud.js.map → DateTimePicker-hmYBEuUM.js.map} +1 -1
  85. package/dist/{EmptyState-Cxf4H8Cc.cjs → EmptyState-Bj-vX_UV.cjs} +2 -2
  86. package/dist/{EmptyState-Cxf4H8Cc.cjs.map → EmptyState-Bj-vX_UV.cjs.map} +1 -1
  87. package/dist/{EmptyState-B2QPNhWW.js → EmptyState-DJDNLKT7.js} +4 -4
  88. package/dist/{EmptyState-B2QPNhWW.js.map → EmptyState-DJDNLKT7.js.map} +1 -1
  89. package/dist/{FileCard-Do9D72NA.js → FileCard-C9Ncifnu.js} +5 -5
  90. package/dist/{FileCard-Do9D72NA.js.map → FileCard-C9Ncifnu.js.map} +1 -1
  91. package/dist/{FileCard-D0Sa7WJt.cjs → FileCard-Dr5-z1R3.cjs} +2 -2
  92. package/dist/{FileCard-D0Sa7WJt.cjs.map → FileCard-Dr5-z1R3.cjs.map} +1 -1
  93. package/dist/{FileUploader-B1Arfj1a.cjs → FileUploader-DeyZENqq.cjs} +2 -2
  94. package/dist/{FileUploader-B1Arfj1a.cjs.map → FileUploader-DeyZENqq.cjs.map} +1 -1
  95. package/dist/{FileUploader-4900qKEE.js → FileUploader-XFmBNkA0.js} +6 -6
  96. package/dist/{FileUploader-4900qKEE.js.map → FileUploader-XFmBNkA0.js.map} +1 -1
  97. package/dist/{Flag-DNhhLtCC.js → Flag-Bs0xNP-P.js} +2 -2
  98. package/dist/{Flag-DNhhLtCC.js.map → Flag-Bs0xNP-P.js.map} +1 -1
  99. package/dist/{Flag-D7Vlczlw.cjs → Flag-Bxnx26DM.cjs} +2 -2
  100. package/dist/{Flag-D7Vlczlw.cjs.map → Flag-Bxnx26DM.cjs.map} +1 -1
  101. package/dist/{FullscreenToggle-dU2ai_OZ.cjs → FullscreenToggle-BncatGKj.cjs} +2 -2
  102. package/dist/{FullscreenToggle-dU2ai_OZ.cjs.map → FullscreenToggle-BncatGKj.cjs.map} +1 -1
  103. package/dist/{FullscreenToggle-Bc4fB-Mi.js → FullscreenToggle-DMlp05UN.js} +4 -4
  104. package/dist/{FullscreenToggle-Bc4fB-Mi.js.map → FullscreenToggle-DMlp05UN.js.map} +1 -1
  105. package/dist/Icon-BVULqOJD.cjs +2 -0
  106. package/dist/Icon-BVULqOJD.cjs.map +1 -0
  107. package/dist/{Icon-CophpkHo.js → Icon-DaTvzLBu.js} +2 -1
  108. package/dist/Icon-DaTvzLBu.js.map +1 -0
  109. package/dist/{IconButton-DpTxmj3d.js → IconButton-DXMmtuLA.js} +2 -2
  110. package/dist/{IconButton-DpTxmj3d.js.map → IconButton-DXMmtuLA.js.map} +1 -1
  111. package/dist/{IconButton-DyRC514t.cjs → IconButton-Lv0sDDR9.cjs} +2 -2
  112. package/dist/{IconButton-DyRC514t.cjs.map → IconButton-Lv0sDDR9.cjs.map} +1 -1
  113. package/dist/{ListItem-B4Upc0Hy.js → ListItem-Cn15lJBr.js} +3 -3
  114. package/dist/{ListItem-B4Upc0Hy.js.map → ListItem-Cn15lJBr.js.map} +1 -1
  115. package/dist/{ListItem-DWQorRxG.cjs → ListItem-yXXjtepZ.cjs} +2 -2
  116. package/dist/{ListItem-DWQorRxG.cjs.map → ListItem-yXXjtepZ.cjs.map} +1 -1
  117. package/dist/{Loader-B45H2SMP.cjs → Loader-53HFNMVX.cjs} +2 -2
  118. package/dist/{Loader-B45H2SMP.cjs.map → Loader-53HFNMVX.cjs.map} +1 -1
  119. package/dist/{Loader-B9VXX401.js → Loader-WsjQFl4p.js} +2 -2
  120. package/dist/{Loader-B9VXX401.js.map → Loader-WsjQFl4p.js.map} +1 -1
  121. package/dist/{Modal-Us_E-lb2.js → Modal-DBYcoCbJ.js} +5 -5
  122. package/dist/{Modal-Us_E-lb2.js.map → Modal-DBYcoCbJ.js.map} +1 -1
  123. package/dist/{Modal-DsoSz0Sp.cjs → Modal-V6eyGSzW.cjs} +2 -2
  124. package/dist/{Modal-DsoSz0Sp.cjs.map → Modal-V6eyGSzW.cjs.map} +1 -1
  125. package/dist/{MultiSelect-sKk2KzOd.js → MultiSelect-BsYPr3LD.js} +6 -6
  126. package/dist/{MultiSelect-sKk2KzOd.js.map → MultiSelect-BsYPr3LD.js.map} +1 -1
  127. package/dist/{MultiSelect-CtLpWaBX.cjs → MultiSelect-DS2DRpaP.cjs} +2 -2
  128. package/dist/{MultiSelect-CtLpWaBX.cjs.map → MultiSelect-DS2DRpaP.cjs.map} +1 -1
  129. package/dist/{NumberField-C6qj3nCa.cjs → NumberField-DC3TdGTt.cjs} +2 -2
  130. package/dist/{NumberField-C6qj3nCa.cjs.map → NumberField-DC3TdGTt.cjs.map} +1 -1
  131. package/dist/{NumberField-Cz03nksO.js → NumberField-mFb9pKCx.js} +4 -4
  132. package/dist/{NumberField-Cz03nksO.js.map → NumberField-mFb9pKCx.js.map} +1 -1
  133. package/dist/{OtpField-DLXQYMw1.js → OtpField-1ullIIZQ.js} +2 -2
  134. package/dist/{OtpField-DLXQYMw1.js.map → OtpField-1ullIIZQ.js.map} +1 -1
  135. package/dist/{OtpField-B46P6aMy.cjs → OtpField-BYj9SDHb.cjs} +2 -2
  136. package/dist/{OtpField-B46P6aMy.cjs.map → OtpField-BYj9SDHb.cjs.map} +1 -1
  137. package/dist/{PageLayout-BfeRjBek.cjs → PageLayout-pYL43wI9.cjs} +2 -2
  138. package/dist/{PageLayout-BfeRjBek.cjs.map → PageLayout-pYL43wI9.cjs.map} +1 -1
  139. package/dist/{PageLayout-BWU-p_N9.js → PageLayout-qf0H_EmS.js} +2 -2
  140. package/dist/{PageLayout-BWU-p_N9.js.map → PageLayout-qf0H_EmS.js.map} +1 -1
  141. package/dist/{PageNotFound-nvZm-UCG.cjs → PageNotFound-D1795gJ7.cjs} +2 -2
  142. package/dist/{PageNotFound-nvZm-UCG.cjs.map → PageNotFound-D1795gJ7.cjs.map} +1 -1
  143. package/dist/{PageNotFound-B_nTMrCD.js → PageNotFound-YGVMVvyG.js} +5 -5
  144. package/dist/{PageNotFound-B_nTMrCD.js.map → PageNotFound-YGVMVvyG.js.map} +1 -1
  145. package/dist/{Pagination-BYXUhmSz.js → Pagination-BTvUJiee.js} +3 -3
  146. package/dist/{Pagination-BYXUhmSz.js.map → Pagination-BTvUJiee.js.map} +1 -1
  147. package/dist/{Pagination-CsClNqIu.cjs → Pagination-WJq_7QNi.cjs} +2 -2
  148. package/dist/{Pagination-CsClNqIu.cjs.map → Pagination-WJq_7QNi.cjs.map} +1 -1
  149. package/dist/{RemoveDialog-PHdZi9-d.js → RemoveDialog-BSQ6EMW-.js} +5 -5
  150. package/dist/{RemoveDialog-PHdZi9-d.js.map → RemoveDialog-BSQ6EMW-.js.map} +1 -1
  151. package/dist/{RemoveDialog-D5J9TYap.cjs → RemoveDialog-BhcwsY0q.cjs} +2 -2
  152. package/dist/{RemoveDialog-D5J9TYap.cjs.map → RemoveDialog-BhcwsY0q.cjs.map} +1 -1
  153. package/dist/{RichTextEditor-jWv0t3vJ.cjs → RichTextEditor-Bc1fhvzn.cjs} +2 -2
  154. package/dist/{RichTextEditor-jWv0t3vJ.cjs.map → RichTextEditor-Bc1fhvzn.cjs.map} +1 -1
  155. package/dist/{RichTextEditor-BcmsnYGJ.js → RichTextEditor-CaGPtwXe.js} +9 -9
  156. package/dist/{RichTextEditor-BcmsnYGJ.js.map → RichTextEditor-CaGPtwXe.js.map} +1 -1
  157. package/dist/{RootLayout-q_oWf5et.js → RootLayout-BNwHsuhC.js} +31 -31
  158. package/dist/{RootLayout-q_oWf5et.js.map → RootLayout-BNwHsuhC.js.map} +1 -1
  159. package/dist/{RootLayout-DtZcqk9N.cjs → RootLayout-CB-3FgOp.cjs} +2 -2
  160. package/dist/{RootLayout-DtZcqk9N.cjs.map → RootLayout-CB-3FgOp.cjs.map} +1 -1
  161. package/dist/{Select-CWCeBQ8Q.cjs → Select-Cx1Yl8nq.cjs} +2 -2
  162. package/dist/{Select-CWCeBQ8Q.cjs.map → Select-Cx1Yl8nq.cjs.map} +1 -1
  163. package/dist/{Select-UygxT1Ry.js → Select-vKZzS9K4.js} +6 -6
  164. package/dist/{Select-UygxT1Ry.js.map → Select-vKZzS9K4.js.map} +1 -1
  165. package/dist/{Sidebar-C0OJK29L.js → Sidebar-CJ7DtOqb.js} +5 -5
  166. package/dist/{Sidebar-C0OJK29L.js.map → Sidebar-CJ7DtOqb.js.map} +1 -1
  167. package/dist/{Sidebar-BfBggyuh.cjs → Sidebar-Cv95DJxZ.cjs} +2 -2
  168. package/dist/{Sidebar-BfBggyuh.cjs.map → Sidebar-Cv95DJxZ.cjs.map} +1 -1
  169. package/dist/{SpeedDial-DbvOJ4no.js → SpeedDial-Bb0ioXaO.js} +4 -4
  170. package/dist/{SpeedDial-DbvOJ4no.js.map → SpeedDial-Bb0ioXaO.js.map} +1 -1
  171. package/dist/{SpeedDial-cKvuSMuk.cjs → SpeedDial-D6sO-9ES.cjs} +2 -2
  172. package/dist/{SpeedDial-cKvuSMuk.cjs.map → SpeedDial-D6sO-9ES.cjs.map} +1 -1
  173. package/dist/{Stepper-BxGrP6JZ.js → Stepper-BaEOUnYe.js} +4 -4
  174. package/dist/{Stepper-BxGrP6JZ.js.map → Stepper-BaEOUnYe.js.map} +1 -1
  175. package/dist/{Stepper-Db_ALAc4.cjs → Stepper-CVY8NJEI.cjs} +2 -2
  176. package/dist/{Stepper-Db_ALAc4.cjs.map → Stepper-CVY8NJEI.cjs.map} +1 -1
  177. package/dist/{SwatchPicker-DbAU9-ux.cjs → SwatchPicker-CCJltwHI.cjs} +2 -2
  178. package/dist/{SwatchPicker-DbAU9-ux.cjs.map → SwatchPicker-CCJltwHI.cjs.map} +1 -1
  179. package/dist/{SwatchPicker-D30aSrbY.js → SwatchPicker-CqyWngFJ.js} +2 -2
  180. package/dist/{SwatchPicker-D30aSrbY.js.map → SwatchPicker-CqyWngFJ.js.map} +1 -1
  181. package/dist/{Table--pDmXYad.cjs → Table-AQ7yJhtW.cjs} +2 -2
  182. package/dist/{Table--pDmXYad.cjs.map → Table-AQ7yJhtW.cjs.map} +1 -1
  183. package/dist/{Table-CNjnvZ-k.js → Table-wn-B7iLj.js} +17 -17
  184. package/dist/{Table-CNjnvZ-k.js.map → Table-wn-B7iLj.js.map} +1 -1
  185. package/dist/{Tabs-ozklGWmX.cjs → Tabs-BtcJ2jBl.cjs} +2 -2
  186. package/dist/{Tabs-ozklGWmX.cjs.map → Tabs-BtcJ2jBl.cjs.map} +1 -1
  187. package/dist/{Tabs-B0mWCNaC.js → Tabs-DJMfAUni.js} +4 -4
  188. package/dist/{Tabs-B0mWCNaC.js.map → Tabs-DJMfAUni.js.map} +1 -1
  189. package/dist/{TagsField-BIxwLfSJ.cjs → TagsField-4x3RmGwt.cjs} +2 -2
  190. package/dist/{TagsField-BIxwLfSJ.cjs.map → TagsField-4x3RmGwt.cjs.map} +1 -1
  191. package/dist/{TagsField-CGFm17lP.js → TagsField-Bvh6Fm5Y.js} +5 -5
  192. package/dist/{TagsField-CGFm17lP.js.map → TagsField-Bvh6Fm5Y.js.map} +1 -1
  193. package/dist/{TextField-DvKEj36A.cjs → TextField-DNqnpAWB.cjs} +2 -2
  194. package/dist/{TextField-DvKEj36A.cjs.map → TextField-DNqnpAWB.cjs.map} +1 -1
  195. package/dist/{TextField-CRCYLPpr.js → TextField-DcdwUA9d.js} +4 -4
  196. package/dist/{TextField-CRCYLPpr.js.map → TextField-DcdwUA9d.js.map} +1 -1
  197. package/dist/{ThemeToggle-BwW9L115.js → ThemeToggle-BVQmSMsj.js} +4 -4
  198. package/dist/{ThemeToggle-BwW9L115.js.map → ThemeToggle-BVQmSMsj.js.map} +1 -1
  199. package/dist/{ThemeToggle-DxxLN79b.cjs → ThemeToggle-isboxfZk.cjs} +2 -2
  200. package/dist/{ThemeToggle-DxxLN79b.cjs.map → ThemeToggle-isboxfZk.cjs.map} +1 -1
  201. package/dist/{TimeColumns-D3nqkQbh.js → TimeColumns-CFy_PynH.js} +2 -2
  202. package/dist/{TimeColumns-D3nqkQbh.js.map → TimeColumns-CFy_PynH.js.map} +1 -1
  203. package/dist/{TimeColumns-DB-V4KpQ.cjs → TimeColumns-DxFjjtc7.cjs} +2 -2
  204. package/dist/{TimeColumns-DB-V4KpQ.cjs.map → TimeColumns-DxFjjtc7.cjs.map} +1 -1
  205. package/dist/{TimePicker-D51QkQYy.js → TimePicker-ZO7jOJVa.js} +6 -6
  206. package/dist/{TimePicker-D51QkQYy.js.map → TimePicker-ZO7jOJVa.js.map} +1 -1
  207. package/dist/{TimePicker-D__72q2J.cjs → TimePicker-v1yA7Igl.cjs} +2 -2
  208. package/dist/{TimePicker-D__72q2J.cjs.map → TimePicker-v1yA7Igl.cjs.map} +1 -1
  209. package/dist/{Timeline-WkV4k_we.js → Timeline-D3kzt1dy.js} +3 -3
  210. package/dist/{Timeline-WkV4k_we.js.map → Timeline-D3kzt1dy.js.map} +1 -1
  211. package/dist/{Timeline-CoxW0Ia_.cjs → Timeline-ONU_3gi3.cjs} +2 -2
  212. package/dist/{Timeline-CoxW0Ia_.cjs.map → Timeline-ONU_3gi3.cjs.map} +1 -1
  213. package/dist/{Toaster-BynCHvUr.js → Toaster-C6UK_2TB.js} +2 -2
  214. package/dist/{Toaster-BynCHvUr.js.map → Toaster-C6UK_2TB.js.map} +1 -1
  215. package/dist/{Toaster-tHet1M-T.cjs → Toaster-Qnsq3guQ.cjs} +2 -2
  216. package/dist/{Toaster-tHet1M-T.cjs.map → Toaster-Qnsq3guQ.cjs.map} +1 -1
  217. package/dist/{ToggleButtonGroup-BWd7MOcc.js → ToggleButtonGroup-D9odYMzD.js} +3 -3
  218. package/dist/{ToggleButtonGroup-BWd7MOcc.js.map → ToggleButtonGroup-D9odYMzD.js.map} +1 -1
  219. package/dist/{ToggleButtonGroup-DYRLwKKh.cjs → ToggleButtonGroup-M2oj_3mc.cjs} +2 -2
  220. package/dist/{ToggleButtonGroup-DYRLwKKh.cjs.map → ToggleButtonGroup-M2oj_3mc.cjs.map} +1 -1
  221. package/dist/{TranslatedFields-DHRFcB3n.js → TranslatedFields-Bo5rZ7so.js} +5 -5
  222. package/dist/{TranslatedFields-DHRFcB3n.js.map → TranslatedFields-Bo5rZ7so.js.map} +1 -1
  223. package/dist/{TranslatedFields-B3Gli3TZ.cjs → TranslatedFields-CLMvRpJi.cjs} +2 -2
  224. package/dist/{TranslatedFields-B3Gli3TZ.cjs.map → TranslatedFields-CLMvRpJi.cjs.map} +1 -1
  225. package/dist/UserCard-454Kc7JS.js +74 -0
  226. package/dist/UserCard-454Kc7JS.js.map +1 -0
  227. package/dist/UserCard-CIjZz5xd.cjs +2 -0
  228. package/dist/UserCard-CIjZz5xd.cjs.map +1 -0
  229. package/dist/components/Accordion/index.cjs +1 -1
  230. package/dist/components/Accordion/index.js +1 -1
  231. package/dist/components/Alert/index.cjs +1 -1
  232. package/dist/components/Alert/index.js +1 -1
  233. package/dist/components/AuthLayout/index.cjs +1 -1
  234. package/dist/components/AuthLayout/index.js +1 -1
  235. package/dist/components/Avatar/index.cjs +1 -1
  236. package/dist/components/Avatar/index.js +2 -2
  237. package/dist/components/Breadcrumbs/index.cjs +1 -1
  238. package/dist/components/Breadcrumbs/index.js +1 -1
  239. package/dist/components/Button/index.cjs +1 -1
  240. package/dist/components/Button/index.js +1 -1
  241. package/dist/components/Card/index.cjs +1 -1
  242. package/dist/components/Card/index.js +1 -1
  243. package/dist/components/Checkbox/Checkbox.d.cts +7 -0
  244. package/dist/components/Checkbox/Checkbox.d.ts +7 -0
  245. package/dist/components/Checkbox/index.cjs +1 -1
  246. package/dist/components/Checkbox/index.js +1 -1
  247. package/dist/components/Chip/index.cjs +1 -1
  248. package/dist/components/Chip/index.js +1 -1
  249. package/dist/components/ChoiceCard/index.cjs +1 -1
  250. package/dist/components/ChoiceCard/index.js +1 -1
  251. package/dist/components/CodeBlock/index.cjs +1 -1
  252. package/dist/components/CodeBlock/index.js +1 -1
  253. package/dist/components/ColorPicker/index.cjs +1 -1
  254. package/dist/components/ColorPicker/index.js +1 -1
  255. package/dist/components/CopyButton/index.cjs +1 -1
  256. package/dist/components/CopyButton/index.js +1 -1
  257. package/dist/components/DashedButton/index.cjs +1 -1
  258. package/dist/components/DashedButton/index.js +1 -1
  259. package/dist/components/DatePicker/index.cjs +1 -1
  260. package/dist/components/DatePicker/index.js +1 -1
  261. package/dist/components/DateTimePicker/index.cjs +1 -1
  262. package/dist/components/DateTimePicker/index.js +1 -1
  263. package/dist/components/EmptyState/index.cjs +1 -1
  264. package/dist/components/EmptyState/index.js +1 -1
  265. package/dist/components/FileCard/index.cjs +1 -1
  266. package/dist/components/FileCard/index.js +1 -1
  267. package/dist/components/FileUploader/index.cjs +1 -1
  268. package/dist/components/FileUploader/index.js +1 -1
  269. package/dist/components/Flag/index.cjs +1 -1
  270. package/dist/components/Flag/index.js +1 -1
  271. package/dist/components/FullscreenToggle/index.cjs +1 -1
  272. package/dist/components/FullscreenToggle/index.js +1 -1
  273. package/dist/components/Icon/index.cjs +1 -1
  274. package/dist/components/Icon/index.js +2 -2
  275. package/dist/components/IconButton/index.cjs +1 -1
  276. package/dist/components/IconButton/index.js +1 -1
  277. package/dist/components/List/index.cjs +1 -1
  278. package/dist/components/List/index.js +1 -1
  279. package/dist/components/Loader/index.cjs +1 -1
  280. package/dist/components/Loader/index.js +1 -1
  281. package/dist/components/Modal/index.cjs +1 -1
  282. package/dist/components/Modal/index.js +1 -1
  283. package/dist/components/MultiSelect/index.cjs +1 -1
  284. package/dist/components/MultiSelect/index.js +1 -1
  285. package/dist/components/NumberField/index.cjs +1 -1
  286. package/dist/components/NumberField/index.js +1 -1
  287. package/dist/components/OtpField/index.cjs +1 -1
  288. package/dist/components/OtpField/index.js +1 -1
  289. package/dist/components/PageLayout/index.cjs +1 -1
  290. package/dist/components/PageLayout/index.js +1 -1
  291. package/dist/components/PageNotFound/index.cjs +1 -1
  292. package/dist/components/PageNotFound/index.js +1 -1
  293. package/dist/components/Pagination/index.cjs +1 -1
  294. package/dist/components/Pagination/index.js +1 -1
  295. package/dist/components/RemoveDialog/index.cjs +1 -1
  296. package/dist/components/RemoveDialog/index.js +1 -1
  297. package/dist/components/RichTextEditor/index.cjs +1 -1
  298. package/dist/components/RichTextEditor/index.js +1 -1
  299. package/dist/components/RootLayout/index.cjs +1 -1
  300. package/dist/components/RootLayout/index.js +1 -1
  301. package/dist/components/Select/index.cjs +1 -1
  302. package/dist/components/Select/index.js +1 -1
  303. package/dist/components/Sidebar/index.cjs +1 -1
  304. package/dist/components/Sidebar/index.js +1 -1
  305. package/dist/components/SpeedDial/index.cjs +1 -1
  306. package/dist/components/SpeedDial/index.js +1 -1
  307. package/dist/components/Stepper/index.cjs +1 -1
  308. package/dist/components/Stepper/index.js +1 -1
  309. package/dist/components/SwatchPicker/index.cjs +1 -1
  310. package/dist/components/SwatchPicker/index.js +1 -1
  311. package/dist/components/Table/index.cjs +1 -1
  312. package/dist/components/Table/index.js +1 -1
  313. package/dist/components/Tabs/index.cjs +1 -1
  314. package/dist/components/Tabs/index.js +1 -1
  315. package/dist/components/TagsField/index.cjs +1 -1
  316. package/dist/components/TagsField/index.js +1 -1
  317. package/dist/components/TextField/index.cjs +1 -1
  318. package/dist/components/TextField/index.js +1 -1
  319. package/dist/components/ThemeToggle/index.cjs +1 -1
  320. package/dist/components/ThemeToggle/index.js +1 -1
  321. package/dist/components/TimePicker/index.cjs +1 -1
  322. package/dist/components/TimePicker/index.js +1 -1
  323. package/dist/components/Timeline/index.cjs +1 -1
  324. package/dist/components/Timeline/index.js +1 -1
  325. package/dist/components/Toast/index.cjs +1 -1
  326. package/dist/components/Toast/index.js +1 -1
  327. package/dist/components/ToggleButton/index.cjs +1 -1
  328. package/dist/components/ToggleButton/index.js +1 -1
  329. package/dist/components/TranslatedFields/index.cjs +1 -1
  330. package/dist/components/TranslatedFields/index.js +1 -1
  331. package/dist/components/UserCard/UserCard.d.cts +4 -1
  332. package/dist/components/UserCard/UserCard.d.ts +4 -1
  333. package/dist/components/UserCard/index.cjs +1 -1
  334. package/dist/components/UserCard/index.js +1 -1
  335. package/dist/entries/app.cjs +1 -1
  336. package/dist/entries/app.js +1 -1
  337. package/dist/entries/components.cjs +1 -1
  338. package/dist/entries/components.js +53 -53
  339. package/dist/entries/i18n.cjs +1 -1
  340. package/dist/entries/i18n.js +2 -2
  341. package/dist/entries/icons.cjs +1 -1
  342. package/dist/entries/icons.js +2 -2
  343. package/dist/entries/theme.cjs +1 -1
  344. package/dist/entries/theme.js +1 -1
  345. package/dist/i18n/messages.d.cts +1 -0
  346. package/dist/i18n/messages.d.ts +1 -0
  347. package/dist/icons/names.d.cts +3 -3
  348. package/dist/icons/names.d.ts +3 -3
  349. package/dist/index.cjs +1 -1
  350. package/dist/index.css +1 -1
  351. package/dist/index.js +56 -56
  352. package/dist/{messages-FciBtnCL.js → messages-CGHhwf6F.js} +10 -3
  353. package/dist/messages-CGHhwf6F.js.map +1 -0
  354. package/dist/messages-DZJyiaf9.cjs +36 -0
  355. package/dist/messages-DZJyiaf9.cjs.map +1 -0
  356. package/dist/names-BJnFU_5m.cjs +2 -0
  357. package/dist/names-BJnFU_5m.cjs.map +1 -0
  358. package/dist/{names-D8ABK2Wk.js → names-r21QPjcU.js} +3 -2
  359. package/dist/names-r21QPjcU.js.map +1 -0
  360. package/package.json +1 -1
  361. package/dist/Checkbox-DXOzYIAz.cjs +0 -2
  362. package/dist/Checkbox-DXOzYIAz.cjs.map +0 -1
  363. package/dist/Checkbox-XKL_Q5qj.js +0 -84
  364. package/dist/Checkbox-XKL_Q5qj.js.map +0 -1
  365. package/dist/Icon-CXTl_QAP.cjs +0 -2
  366. package/dist/Icon-CXTl_QAP.cjs.map +0 -1
  367. package/dist/Icon-CophpkHo.js.map +0 -1
  368. package/dist/UserCard-D7U-CLbM.js +0 -74
  369. package/dist/UserCard-D7U-CLbM.js.map +0 -1
  370. package/dist/UserCard-GHw2gTx9.cjs +0 -2
  371. package/dist/UserCard-GHw2gTx9.cjs.map +0 -1
  372. package/dist/messages-C0YutUM1.cjs +0 -36
  373. package/dist/messages-C0YutUM1.cjs.map +0 -1
  374. package/dist/messages-FciBtnCL.js.map +0 -1
  375. package/dist/names-C2Yj1p3u.cjs +0 -2
  376. package/dist/names-C2Yj1p3u.cjs.map +0 -1
  377. package/dist/names-D8ABK2Wk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),a=require("react"),w=require("clsx"),g=require("./Icon-CXTl_QAP.cjs"),E=require("./names-C2Yj1p3u.cjs"),v=a.createContext(null);function S(){const i=a.useContext(v);if(!i)throw new Error("AccordionItem must be used within an <Accordion>");return i}const R="_accordion_1fia4_3",D="_sm_1fia4_12",M="_md_1fia4_16",k="_lg_1fia4_20",P="_item_1fia4_26",T="_header_1fia4_39",z="_icon_1fia4_65",B="_label_1fia4_70",F="_chevron_1fia4_75",G="_collapsible_1fia4_88",H="_collapsibleInner_1fia4_96",J="_body_1fia4_100",s={accordion:R,sm:D,md:M,lg:k,item:P,header:T,icon:z,label:B,chevron:F,collapsible:G,collapsibleInner:H,body:J},K=new Set(E.ICON_NAMES),q=a.forwardRef(function({value:r,label:d,icon:c,disabled:t=!1,className:_,children:u,...x},p){const{isOpen:I,toggle:h,size:b,disabled:A}=S(),l=I(r),j=A||t,f=a.useId(),o=a.useId(),y=c==null?null:typeof c=="string"&&K.has(c)?n.jsx(g.Icon,{name:c,size:b}):c;return n.jsxs("div",{ref:p,className:w.clsx(s.item,_),"data-open":l?"true":"false",...x,children:[n.jsxs("button",{type:"button",id:f,className:s.header,"aria-expanded":l,"aria-controls":o,disabled:j,onClick:()=>h(r),children:[y!=null&&n.jsx("span",{className:s.icon,"aria-hidden":!0,children:y}),n.jsx("span",{className:s.label,children:d}),n.jsx(g.Icon,{name:"ArrowDown4",size:b,className:s.chevron,"data-open":l?"true":"false"})]}),n.jsx("div",{className:s.collapsible,"data-open":l?"true":"false",children:n.jsx("div",{className:s.collapsibleInner,children:n.jsx("div",{id:o,role:"region","aria-labelledby":f,className:s.body,children:u})})})]})}),L=a.forwardRef(function({exclusive:r=!1,value:d,defaultValue:c,onChange:t,items:_,size:u="md",disabled:x=!1,children:p,className:I,style:h,...b},A){const l=d!==void 0,[j,f]=a.useState(c),o=l?d:j,O={isOpen:e=>r?o===e:Array.isArray(o)&&o.includes(e),toggle:e=>{let m;if(r)m=o===e?null:e;else{const N=Array.isArray(o)?o:[];m=N.includes(e)?N.filter(C=>C!==e):[...N,e]}l||f(m),t==null||t(m)},size:u,disabled:x};return n.jsx("div",{ref:A,className:w.clsx(s.accordion,s[u],I),style:h,...b,children:n.jsx(v.Provider,{value:O,children:_?_.map(e=>n.jsx(q,{value:e.value,label:e.label,icon:e.icon,disabled:e.disabled,children:e.content},e.value)):p})})});exports.Accordion=L;exports.AccordionItem=q;
2
- //# sourceMappingURL=Accordion-Dy_dM79Y.cjs.map
1
+ "use strict";const n=require("react/jsx-runtime"),a=require("react"),w=require("clsx"),g=require("./Icon-BVULqOJD.cjs"),E=require("./names-BJnFU_5m.cjs"),v=a.createContext(null);function S(){const i=a.useContext(v);if(!i)throw new Error("AccordionItem must be used within an <Accordion>");return i}const R="_accordion_1fia4_3",D="_sm_1fia4_12",M="_md_1fia4_16",k="_lg_1fia4_20",P="_item_1fia4_26",T="_header_1fia4_39",z="_icon_1fia4_65",B="_label_1fia4_70",F="_chevron_1fia4_75",G="_collapsible_1fia4_88",H="_collapsibleInner_1fia4_96",J="_body_1fia4_100",s={accordion:R,sm:D,md:M,lg:k,item:P,header:T,icon:z,label:B,chevron:F,collapsible:G,collapsibleInner:H,body:J},K=new Set(E.ICON_NAMES),q=a.forwardRef(function({value:r,label:d,icon:c,disabled:t=!1,className:_,children:u,...x},p){const{isOpen:I,toggle:h,size:b,disabled:A}=S(),l=I(r),j=A||t,f=a.useId(),o=a.useId(),y=c==null?null:typeof c=="string"&&K.has(c)?n.jsx(g.Icon,{name:c,size:b}):c;return n.jsxs("div",{ref:p,className:w.clsx(s.item,_),"data-open":l?"true":"false",...x,children:[n.jsxs("button",{type:"button",id:f,className:s.header,"aria-expanded":l,"aria-controls":o,disabled:j,onClick:()=>h(r),children:[y!=null&&n.jsx("span",{className:s.icon,"aria-hidden":!0,children:y}),n.jsx("span",{className:s.label,children:d}),n.jsx(g.Icon,{name:"ArrowDown4",size:b,className:s.chevron,"data-open":l?"true":"false"})]}),n.jsx("div",{className:s.collapsible,"data-open":l?"true":"false",children:n.jsx("div",{className:s.collapsibleInner,children:n.jsx("div",{id:o,role:"region","aria-labelledby":f,className:s.body,children:u})})})]})}),L=a.forwardRef(function({exclusive:r=!1,value:d,defaultValue:c,onChange:t,items:_,size:u="md",disabled:x=!1,children:p,className:I,style:h,...b},A){const l=d!==void 0,[j,f]=a.useState(c),o=l?d:j,O={isOpen:e=>r?o===e:Array.isArray(o)&&o.includes(e),toggle:e=>{let m;if(r)m=o===e?null:e;else{const N=Array.isArray(o)?o:[];m=N.includes(e)?N.filter(C=>C!==e):[...N,e]}l||f(m),t==null||t(m)},size:u,disabled:x};return n.jsx("div",{ref:A,className:w.clsx(s.accordion,s[u],I),style:h,...b,children:n.jsx(v.Provider,{value:O,children:_?_.map(e=>n.jsx(q,{value:e.value,label:e.label,icon:e.icon,disabled:e.disabled,children:e.content},e.value)):p})})});exports.Accordion=L;exports.AccordionItem=q;
2
+ //# sourceMappingURL=Accordion-P3PNqSER.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion-Dy_dM79Y.cjs","sources":["../src/components/Accordion/accordionContext.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { AccordionSize } from './Accordion'\n\n/** Shared state an `<Accordion>` hands down to its `<AccordionItem>`s via context. */\nexport interface AccordionContextValue {\n /** Whether a given item value is currently open. */\n isOpen: (value: string) => boolean\n /** Toggle an item open/closed — called by a header on click. */\n toggle: (value: string) => void\n size: AccordionSize\n disabled: boolean\n}\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(null)\n\n/** Read the surrounding `<Accordion>`. Throws if an `<AccordionItem>` is used outside one. */\nexport function useAccordionContext(): AccordionContextValue {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error('AccordionItem must be used within an <Accordion>')\n return ctx\n}\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useAccordionContext } from './accordionContext'\nimport styles from './Accordion.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** This item's identity within the `Accordion` (matched against the open value/values). */\n value: string\n /** Header label. */\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Disable this item (the group's `disabled` also applies). */\n disabled?: boolean\n /** Collapsible body content. */\n children?: ReactNode\n}\n\n/**\n * One collapsible panel inside an `<Accordion>` — a header (`label` + optional `icon` + a chevron that\n * rotates) that toggles a smoothly-folding body (`grid-template-rows` animation). Reads the open state,\n * size, and disabled flag from the surrounding `Accordion` via context.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, label, icon, disabled: itemDisabled = false, className, children, ...props },\n ref,\n) {\n const { isOpen, toggle, size, disabled: groupDisabled } = useAccordionContext()\n const open = isOpen(value)\n const disabled = groupDisabled || itemDisabled\n const headerId = useId()\n const bodyId = useId()\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n className={clsx(styles.item, className)}\n data-open={open ? 'true' : 'false'}\n {...props}\n >\n <button\n type=\"button\"\n id={headerId}\n className={styles.header}\n aria-expanded={open}\n aria-controls={bodyId}\n disabled={disabled}\n onClick={() => toggle(value)}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <span className={styles.label}>{label}</span>\n <Icon\n name=\"ArrowDown4\"\n size={size}\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n </button>\n <div className={styles.collapsible} data-open={open ? 'true' : 'false'}>\n <div className={styles.collapsibleInner}>\n <div id={bodyId} role=\"region\" aria-labelledby={headerId} className={styles.body}>\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n})\n","import {\n forwardRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { AccordionItem } from './AccordionItem'\nimport { AccordionContext, type AccordionContextValue } from './accordionContext'\nimport type { IconName } from '../../icons/names'\nimport styles from './Accordion.module.css'\n\nexport type AccordionSize = 'sm' | 'md' | 'lg'\n\n/** A data-driven panel for the `items` prop. */\nexport interface AccordionItemData {\n value: string\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Collapsible body content. */\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface AccordionProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * Single-open (`value` is a `string | null` — opening one closes the others) vs multi-open (`value`\n * is a `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled open value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial open value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next open value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /** Data-driven panels — an alternative to passing `<AccordionItem>` children. */\n items?: AccordionItemData[]\n /** Preset size for every panel header. Defaults to `md`. */\n size?: AccordionSize\n /** Disables every panel in the accordion. */\n disabled?: boolean\n /** `<AccordionItem>` children (used when `items` is not given). */\n children?: ReactNode\n}\n\n/**\n * A set of collapsible panels (settings sections, FAQs, grouped forms). **`exclusive`** picks\n * single-open (`value` is a `string | null`) vs multi-open (`value` is a `string[]`); both are\n * controlled (`value` + `onChange`) or uncontrolled (`defaultValue`). Supply panels via the\n * data-driven `items` prop or as `<AccordionItem>` children — the group shares the open state, `size`,\n * and `disabled` via context, and each body folds with the shared `grid-template-rows` animation\n * (like `Card`'s `collapsible`). Token-only styling.\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n items,\n size = 'md',\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n) {\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? value : internal\n\n const isOpen = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = current === v ? null : v\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n onChange?.(next)\n }\n\n const ctx: AccordionContextValue = { isOpen, toggle, size, disabled }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.accordion, styles[size], className)}\n style={style as CSSProperties}\n {...props}\n >\n <AccordionContext.Provider value={ctx}>\n {items\n ? items.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n label={item.label}\n icon={item.icon}\n disabled={item.disabled}\n >\n {item.content}\n </AccordionItem>\n ))\n : children}\n </AccordionContext.Provider>\n </div>\n )\n})\n"],"names":["AccordionContext","createContext","useAccordionContext","ctx","useContext","ICON_NAME_SET","ICON_NAMES","AccordionItem","forwardRef","value","label","icon","itemDisabled","className","children","props","ref","isOpen","toggle","size","groupDisabled","open","disabled","headerId","useId","bodyId","renderedIcon","jsx","Icon","jsxs","clsx","styles","Accordion","exclusive","defaultValue","onChange","items","style","isControlled","internal","setInternal","useState","current","v","next","arr","x","item"],"mappings":"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"}
1
+ {"version":3,"file":"Accordion-P3PNqSER.cjs","sources":["../src/components/Accordion/accordionContext.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { AccordionSize } from './Accordion'\n\n/** Shared state an `<Accordion>` hands down to its `<AccordionItem>`s via context. */\nexport interface AccordionContextValue {\n /** Whether a given item value is currently open. */\n isOpen: (value: string) => boolean\n /** Toggle an item open/closed — called by a header on click. */\n toggle: (value: string) => void\n size: AccordionSize\n disabled: boolean\n}\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(null)\n\n/** Read the surrounding `<Accordion>`. Throws if an `<AccordionItem>` is used outside one. */\nexport function useAccordionContext(): AccordionContextValue {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error('AccordionItem must be used within an <Accordion>')\n return ctx\n}\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useAccordionContext } from './accordionContext'\nimport styles from './Accordion.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** This item's identity within the `Accordion` (matched against the open value/values). */\n value: string\n /** Header label. */\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Disable this item (the group's `disabled` also applies). */\n disabled?: boolean\n /** Collapsible body content. */\n children?: ReactNode\n}\n\n/**\n * One collapsible panel inside an `<Accordion>` — a header (`label` + optional `icon` + a chevron that\n * rotates) that toggles a smoothly-folding body (`grid-template-rows` animation). Reads the open state,\n * size, and disabled flag from the surrounding `Accordion` via context.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, label, icon, disabled: itemDisabled = false, className, children, ...props },\n ref,\n) {\n const { isOpen, toggle, size, disabled: groupDisabled } = useAccordionContext()\n const open = isOpen(value)\n const disabled = groupDisabled || itemDisabled\n const headerId = useId()\n const bodyId = useId()\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n className={clsx(styles.item, className)}\n data-open={open ? 'true' : 'false'}\n {...props}\n >\n <button\n type=\"button\"\n id={headerId}\n className={styles.header}\n aria-expanded={open}\n aria-controls={bodyId}\n disabled={disabled}\n onClick={() => toggle(value)}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <span className={styles.label}>{label}</span>\n <Icon\n name=\"ArrowDown4\"\n size={size}\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n </button>\n <div className={styles.collapsible} data-open={open ? 'true' : 'false'}>\n <div className={styles.collapsibleInner}>\n <div id={bodyId} role=\"region\" aria-labelledby={headerId} className={styles.body}>\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n})\n","import {\n forwardRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { AccordionItem } from './AccordionItem'\nimport { AccordionContext, type AccordionContextValue } from './accordionContext'\nimport type { IconName } from '../../icons/names'\nimport styles from './Accordion.module.css'\n\nexport type AccordionSize = 'sm' | 'md' | 'lg'\n\n/** A data-driven panel for the `items` prop. */\nexport interface AccordionItemData {\n value: string\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Collapsible body content. */\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface AccordionProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * Single-open (`value` is a `string | null` — opening one closes the others) vs multi-open (`value`\n * is a `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled open value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial open value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next open value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /** Data-driven panels — an alternative to passing `<AccordionItem>` children. */\n items?: AccordionItemData[]\n /** Preset size for every panel header. Defaults to `md`. */\n size?: AccordionSize\n /** Disables every panel in the accordion. */\n disabled?: boolean\n /** `<AccordionItem>` children (used when `items` is not given). */\n children?: ReactNode\n}\n\n/**\n * A set of collapsible panels (settings sections, FAQs, grouped forms). **`exclusive`** picks\n * single-open (`value` is a `string | null`) vs multi-open (`value` is a `string[]`); both are\n * controlled (`value` + `onChange`) or uncontrolled (`defaultValue`). Supply panels via the\n * data-driven `items` prop or as `<AccordionItem>` children — the group shares the open state, `size`,\n * and `disabled` via context, and each body folds with the shared `grid-template-rows` animation\n * (like `Card`'s `collapsible`). Token-only styling.\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n items,\n size = 'md',\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n) {\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? value : internal\n\n const isOpen = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = current === v ? null : v\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n onChange?.(next)\n }\n\n const ctx: AccordionContextValue = { isOpen, toggle, size, disabled }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.accordion, styles[size], className)}\n style={style as CSSProperties}\n {...props}\n >\n <AccordionContext.Provider value={ctx}>\n {items\n ? items.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n label={item.label}\n icon={item.icon}\n disabled={item.disabled}\n >\n {item.content}\n </AccordionItem>\n ))\n : children}\n </AccordionContext.Provider>\n </div>\n )\n})\n"],"names":["AccordionContext","createContext","useAccordionContext","ctx","useContext","ICON_NAME_SET","ICON_NAMES","AccordionItem","forwardRef","value","label","icon","itemDisabled","className","children","props","ref","isOpen","toggle","size","groupDisabled","open","disabled","headerId","useId","bodyId","renderedIcon","jsx","Icon","jsxs","clsx","styles","Accordion","exclusive","defaultValue","onChange","items","style","isControlled","internal","setInternal","useState","current","v","next","arr","x","item"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as n, jsxs as g } from "react/jsx-runtime";
2
2
  import { createContext as D, useContext as M, forwardRef as O, useId as v, useState as k } from "react";
3
3
  import { clsx as C } from "clsx";
4
- import { I as w } from "./Icon-CophpkHo.js";
5
- import { a as P } from "./names-D8ABK2Wk.js";
4
+ import { I as w } from "./Icon-DaTvzLBu.js";
5
+ import { a as P } from "./names-r21QPjcU.js";
6
6
  const E = D(null);
7
7
  function R() {
8
8
  const t = M(E);
@@ -109,4 +109,4 @@ export {
109
109
  ne as A,
110
110
  W as a
111
111
  };
112
- //# sourceMappingURL=Accordion-CAxa1I-m.js.map
112
+ //# sourceMappingURL=Accordion-w-w_WxxV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion-CAxa1I-m.js","sources":["../src/components/Accordion/accordionContext.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { AccordionSize } from './Accordion'\n\n/** Shared state an `<Accordion>` hands down to its `<AccordionItem>`s via context. */\nexport interface AccordionContextValue {\n /** Whether a given item value is currently open. */\n isOpen: (value: string) => boolean\n /** Toggle an item open/closed — called by a header on click. */\n toggle: (value: string) => void\n size: AccordionSize\n disabled: boolean\n}\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(null)\n\n/** Read the surrounding `<Accordion>`. Throws if an `<AccordionItem>` is used outside one. */\nexport function useAccordionContext(): AccordionContextValue {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error('AccordionItem must be used within an <Accordion>')\n return ctx\n}\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useAccordionContext } from './accordionContext'\nimport styles from './Accordion.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** This item's identity within the `Accordion` (matched against the open value/values). */\n value: string\n /** Header label. */\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Disable this item (the group's `disabled` also applies). */\n disabled?: boolean\n /** Collapsible body content. */\n children?: ReactNode\n}\n\n/**\n * One collapsible panel inside an `<Accordion>` — a header (`label` + optional `icon` + a chevron that\n * rotates) that toggles a smoothly-folding body (`grid-template-rows` animation). Reads the open state,\n * size, and disabled flag from the surrounding `Accordion` via context.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, label, icon, disabled: itemDisabled = false, className, children, ...props },\n ref,\n) {\n const { isOpen, toggle, size, disabled: groupDisabled } = useAccordionContext()\n const open = isOpen(value)\n const disabled = groupDisabled || itemDisabled\n const headerId = useId()\n const bodyId = useId()\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n className={clsx(styles.item, className)}\n data-open={open ? 'true' : 'false'}\n {...props}\n >\n <button\n type=\"button\"\n id={headerId}\n className={styles.header}\n aria-expanded={open}\n aria-controls={bodyId}\n disabled={disabled}\n onClick={() => toggle(value)}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <span className={styles.label}>{label}</span>\n <Icon\n name=\"ArrowDown4\"\n size={size}\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n </button>\n <div className={styles.collapsible} data-open={open ? 'true' : 'false'}>\n <div className={styles.collapsibleInner}>\n <div id={bodyId} role=\"region\" aria-labelledby={headerId} className={styles.body}>\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n})\n","import {\n forwardRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { AccordionItem } from './AccordionItem'\nimport { AccordionContext, type AccordionContextValue } from './accordionContext'\nimport type { IconName } from '../../icons/names'\nimport styles from './Accordion.module.css'\n\nexport type AccordionSize = 'sm' | 'md' | 'lg'\n\n/** A data-driven panel for the `items` prop. */\nexport interface AccordionItemData {\n value: string\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Collapsible body content. */\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface AccordionProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * Single-open (`value` is a `string | null` — opening one closes the others) vs multi-open (`value`\n * is a `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled open value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial open value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next open value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /** Data-driven panels — an alternative to passing `<AccordionItem>` children. */\n items?: AccordionItemData[]\n /** Preset size for every panel header. Defaults to `md`. */\n size?: AccordionSize\n /** Disables every panel in the accordion. */\n disabled?: boolean\n /** `<AccordionItem>` children (used when `items` is not given). */\n children?: ReactNode\n}\n\n/**\n * A set of collapsible panels (settings sections, FAQs, grouped forms). **`exclusive`** picks\n * single-open (`value` is a `string | null`) vs multi-open (`value` is a `string[]`); both are\n * controlled (`value` + `onChange`) or uncontrolled (`defaultValue`). Supply panels via the\n * data-driven `items` prop or as `<AccordionItem>` children — the group shares the open state, `size`,\n * and `disabled` via context, and each body folds with the shared `grid-template-rows` animation\n * (like `Card`'s `collapsible`). Token-only styling.\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n items,\n size = 'md',\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n) {\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? value : internal\n\n const isOpen = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = current === v ? null : v\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n onChange?.(next)\n }\n\n const ctx: AccordionContextValue = { isOpen, toggle, size, disabled }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.accordion, styles[size], className)}\n style={style as CSSProperties}\n {...props}\n >\n <AccordionContext.Provider value={ctx}>\n {items\n ? items.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n label={item.label}\n icon={item.icon}\n disabled={item.disabled}\n >\n {item.content}\n </AccordionItem>\n ))\n : children}\n </AccordionContext.Provider>\n </div>\n )\n})\n"],"names":["AccordionContext","createContext","useAccordionContext","ctx","useContext","ICON_NAME_SET","ICON_NAMES","AccordionItem","forwardRef","value","label","icon","itemDisabled","className","children","props","ref","isOpen","toggle","size","groupDisabled","open","disabled","headerId","useId","bodyId","renderedIcon","jsx","Icon","jsxs","clsx","styles","Accordion","exclusive","defaultValue","onChange","items","style","isControlled","internal","setInternal","useState","current","v","next","arr","x","item"],"mappings":"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"}
1
+ {"version":3,"file":"Accordion-w-w_WxxV.js","sources":["../src/components/Accordion/accordionContext.ts","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { AccordionSize } from './Accordion'\n\n/** Shared state an `<Accordion>` hands down to its `<AccordionItem>`s via context. */\nexport interface AccordionContextValue {\n /** Whether a given item value is currently open. */\n isOpen: (value: string) => boolean\n /** Toggle an item open/closed — called by a header on click. */\n toggle: (value: string) => void\n size: AccordionSize\n disabled: boolean\n}\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(null)\n\n/** Read the surrounding `<Accordion>`. Throws if an `<AccordionItem>` is used outside one. */\nexport function useAccordionContext(): AccordionContextValue {\n const ctx = useContext(AccordionContext)\n if (!ctx) throw new Error('AccordionItem must be used within an <Accordion>')\n return ctx\n}\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useAccordionContext } from './accordionContext'\nimport styles from './Accordion.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport interface AccordionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** This item's identity within the `Accordion` (matched against the open value/values). */\n value: string\n /** Header label. */\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Disable this item (the group's `disabled` also applies). */\n disabled?: boolean\n /** Collapsible body content. */\n children?: ReactNode\n}\n\n/**\n * One collapsible panel inside an `<Accordion>` — a header (`label` + optional `icon` + a chevron that\n * rotates) that toggles a smoothly-folding body (`grid-template-rows` animation). Reads the open state,\n * size, and disabled flag from the surrounding `Accordion` via context.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(function AccordionItem(\n { value, label, icon, disabled: itemDisabled = false, className, children, ...props },\n ref,\n) {\n const { isOpen, toggle, size, disabled: groupDisabled } = useAccordionContext()\n const open = isOpen(value)\n const disabled = groupDisabled || itemDisabled\n const headerId = useId()\n const bodyId = useId()\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n className={clsx(styles.item, className)}\n data-open={open ? 'true' : 'false'}\n {...props}\n >\n <button\n type=\"button\"\n id={headerId}\n className={styles.header}\n aria-expanded={open}\n aria-controls={bodyId}\n disabled={disabled}\n onClick={() => toggle(value)}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <span className={styles.label}>{label}</span>\n <Icon\n name=\"ArrowDown4\"\n size={size}\n className={styles.chevron}\n data-open={open ? 'true' : 'false'}\n />\n </button>\n <div className={styles.collapsible} data-open={open ? 'true' : 'false'}>\n <div className={styles.collapsibleInner}>\n <div id={bodyId} role=\"region\" aria-labelledby={headerId} className={styles.body}>\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n})\n","import {\n forwardRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { AccordionItem } from './AccordionItem'\nimport { AccordionContext, type AccordionContextValue } from './accordionContext'\nimport type { IconName } from '../../icons/names'\nimport styles from './Accordion.module.css'\n\nexport type AccordionSize = 'sm' | 'md' | 'lg'\n\n/** A data-driven panel for the `items` prop. */\nexport interface AccordionItemData {\n value: string\n label: ReactNode\n /** Leading header icon — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Collapsible body content. */\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface AccordionProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * Single-open (`value` is a `string | null` — opening one closes the others) vs multi-open (`value`\n * is a `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled open value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial open value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next open value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /** Data-driven panels — an alternative to passing `<AccordionItem>` children. */\n items?: AccordionItemData[]\n /** Preset size for every panel header. Defaults to `md`. */\n size?: AccordionSize\n /** Disables every panel in the accordion. */\n disabled?: boolean\n /** `<AccordionItem>` children (used when `items` is not given). */\n children?: ReactNode\n}\n\n/**\n * A set of collapsible panels (settings sections, FAQs, grouped forms). **`exclusive`** picks\n * single-open (`value` is a `string | null`) vs multi-open (`value` is a `string[]`); both are\n * controlled (`value` + `onChange`) or uncontrolled (`defaultValue`). Supply panels via the\n * data-driven `items` prop or as `<AccordionItem>` children — the group shares the open state, `size`,\n * and `disabled` via context, and each body folds with the shared `grid-template-rows` animation\n * (like `Card`'s `collapsible`). Token-only styling.\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n items,\n size = 'md',\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n) {\n const isControlled = value !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? value : internal\n\n const isOpen = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = current === v ? null : v\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n onChange?.(next)\n }\n\n const ctx: AccordionContextValue = { isOpen, toggle, size, disabled }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.accordion, styles[size], className)}\n style={style as CSSProperties}\n {...props}\n >\n <AccordionContext.Provider value={ctx}>\n {items\n ? items.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n label={item.label}\n icon={item.icon}\n disabled={item.disabled}\n >\n {item.content}\n </AccordionItem>\n ))\n : children}\n </AccordionContext.Provider>\n </div>\n )\n})\n"],"names":["AccordionContext","createContext","useAccordionContext","ctx","useContext","ICON_NAME_SET","ICON_NAMES","AccordionItem","forwardRef","value","label","icon","itemDisabled","className","children","props","ref","isOpen","toggle","size","groupDisabled","open","disabled","headerId","useId","bodyId","renderedIcon","jsx","Icon","jsxs","clsx","styles","Accordion","exclusive","defaultValue","onChange","items","style","isControlled","internal","setInternal","useState","current","v","next","arr","x","item"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),o=require("@tanstack/react-router"),x=require("./AuthGuard-kfOZviar.cjs"),R=require("./RootLayout-DtZcqk9N.cjs"),g=require("./UserCard-GHw2gTx9.cjs"),q=require("./Toaster-tHet1M-T.cjs"),A=({logo:s,getUser:u,onLogout:n,authRouteId:i="/_auth",loginPath:r="/login",showUserCard:c=!0,header:d})=>{const l=o.useNavigate(),m=o.useRouterState({select:j=>j.matches.some(v=>v.routeId.startsWith(i))}),t=u(),a=()=>{n(),l({to:r})},h=m?e.jsx(o.Outlet,{}):e.jsx(x.AuthGuard,{isAuthenticated:t!=null,redirectTo:r,children:e.jsx(R.RootLayout,{logo:s,toaster:!1,header:{user:t?{name:t.name,email:t.email,avatar:t.avatar}:void 0,onLogout:a,...d},sidebarFooter:c&&t?e.jsx(g.UserCard,{name:t.name,email:t.email,avatar:t.avatar,onLogout:a}):void 0,children:e.jsx(o.Outlet,{})})});return e.jsxs(e.Fragment,{children:[h,e.jsx(q.Toaster,{})]})};exports.AdminRoot=A;
2
- //# sourceMappingURL=AdminRoot-DlpMJNTx.cjs.map
1
+ "use strict";const e=require("react/jsx-runtime"),o=require("@tanstack/react-router"),x=require("./AuthGuard-kfOZviar.cjs"),R=require("./RootLayout-CB-3FgOp.cjs"),g=require("./UserCard-CIjZz5xd.cjs"),q=require("./Toaster-Qnsq3guQ.cjs"),A=({logo:s,getUser:u,onLogout:n,authRouteId:i="/_auth",loginPath:r="/login",showUserCard:c=!0,header:d})=>{const l=o.useNavigate(),m=o.useRouterState({select:j=>j.matches.some(v=>v.routeId.startsWith(i))}),t=u(),a=()=>{n(),l({to:r})},h=m?e.jsx(o.Outlet,{}):e.jsx(x.AuthGuard,{isAuthenticated:t!=null,redirectTo:r,children:e.jsx(R.RootLayout,{logo:s,toaster:!1,header:{user:t?{name:t.name,email:t.email,avatar:t.avatar}:void 0,onLogout:a,...d},sidebarFooter:c&&t?e.jsx(g.UserCard,{name:t.name,email:t.email,avatar:t.avatar,onLogout:a}):void 0,children:e.jsx(o.Outlet,{})})});return e.jsxs(e.Fragment,{children:[h,e.jsx(q.Toaster,{})]})};exports.AdminRoot=A;
2
+ //# sourceMappingURL=AdminRoot-BDRLuMX6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminRoot-DlpMJNTx.cjs","sources":["../src/app/AdminRoot.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { Outlet, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { RootLayout, UserCard, Toaster, type RootLayoutHeader } from '../components'\nimport { AuthGuard } from '../auth/AuthGuard'\n\n/** The minimal user shape `AdminRoot` reads — apps pass their own richer type via the generic. */\nexport interface AdminUser {\n name?: string\n email?: string\n avatar?: string\n}\n\nexport interface AdminRootProps<U extends AdminUser = AdminUser> {\n /** Brand mark for the sidebar top. */\n logo?: ReactNode\n /** Current user, or `null` when signed out. */\n getUser: () => U | null\n /** Clears the session; `AdminRoot` navigates to `loginPath` afterwards. */\n onLogout: () => void\n /** Route-id prefix for standalone public pages (rendered outside the shell). Default `'/_auth'`. */\n authRouteId?: string\n /** Guard target for signed-out visitors + post-logout redirect. Default `'/login'`. */\n loginPath?: string\n /** Show a `UserCard` in the sidebar footer. Default `true`. */\n showUserCard?: boolean\n /** Extra `RootLayout` header config, merged **over** the defaults (the app's fields win). */\n header?: RootLayoutHeader\n}\n\n/**\n * Root-route component for admin apps — it wires up the whole shell orchestration so an app only has to\n * supply `logo` + `getUser` + `onLogout`. Public pages (route id under `authRouteId`) render standalone;\n * everything else renders inside the guarded admin shell (`RootLayout` + a sidebar `UserCard`), gated by\n * `AuthGuard` (signed-out visitors bounce to `loginPath`). Logout clears the session and navigates to\n * `loginPath`. Mounts exactly one app-wide `<Toaster/>` (the inner `RootLayout` gets `toaster={false}`).\n *\n * `loginPath` is a plain string, cast loosely to the router's `to` type (the library can't know the\n * app's typed route tree). The generic `<U>` preserves the app's own user type through `getUser`.\n *\n * @example\n * // routes/__root.tsx\n * export const Route = createRootRoute({\n * component: () => <AdminRoot<AuthUser> logo={<Logo />} getUser={getUser} onLogout={logout} />,\n * })\n */\nexport const AdminRoot = <U extends AdminUser = AdminUser>({\n logo,\n getUser,\n onLogout,\n authRouteId = '/_auth',\n loginPath = '/login',\n showUserCard = true,\n header,\n}: AdminRootProps<U>) => {\n const navigate = useNavigate()\n const isAuthRoute = useRouterState({\n select: (s) => s.matches.some((m) => m.routeId.startsWith(authRouteId)),\n })\n const user = getUser()\n const handleLogout = () => {\n onLogout()\n navigate({ to: loginPath as LinkProps['to'] })\n }\n const content = isAuthRoute ? (\n <Outlet />\n ) : (\n <AuthGuard isAuthenticated={user != null} redirectTo={loginPath}>\n <RootLayout\n logo={logo}\n toaster={false}\n header={{\n user: user ? { name: user.name, email: user.email, avatar: user.avatar } : undefined,\n onLogout: handleLogout,\n ...header,\n }}\n sidebarFooter={\n showUserCard && user ? (\n <UserCard\n name={user.name}\n email={user.email}\n avatar={user.avatar}\n onLogout={handleLogout}\n />\n ) : undefined\n }\n >\n <Outlet />\n </RootLayout>\n </AuthGuard>\n )\n return (\n <>\n {content}\n <Toaster />\n </>\n )\n}\n"],"names":["AdminRoot","logo","getUser","onLogout","authRouteId","loginPath","showUserCard","header","navigate","useNavigate","isAuthRoute","useRouterState","s","m","user","handleLogout","content","jsx","Outlet","AuthGuard","RootLayout","UserCard","jsxs","Fragment","Toaster"],"mappings":"4OA6CaA,EAAY,CAAkC,CACzD,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,SACd,UAAAC,EAAY,SACZ,aAAAC,EAAe,GACf,OAAAC,CACF,IAAyB,CACvB,MAAMC,EAAWC,EAAAA,YAAA,EACXC,EAAcC,EAAAA,eAAe,CACjC,OAASC,GAAMA,EAAE,QAAQ,KAAMC,GAAMA,EAAE,QAAQ,WAAWT,CAAW,CAAC,CAAA,CACvE,EACKU,EAAOZ,EAAA,EACPa,EAAe,IAAM,CACzBZ,EAAA,EACAK,EAAS,CAAE,GAAIH,EAA8B,CAC/C,EACMW,EAAUN,EACdO,EAAAA,IAACC,EAAAA,OAAA,CAAA,CAAO,EAERD,EAAAA,IAACE,EAAAA,UAAA,CAAU,gBAAiBL,GAAQ,KAAM,WAAYT,EACpD,SAAAY,EAAAA,IAACG,EAAAA,WAAA,CACC,KAAAnB,EACA,QAAS,GACT,OAAQ,CACN,KAAMa,EAAO,CAAE,KAAMA,EAAK,KAAM,MAAOA,EAAK,MAAO,OAAQA,EAAK,MAAA,EAAW,OAC3E,SAAUC,EACV,GAAGR,CAAA,EAEL,cACED,GAAgBQ,EACdG,EAAAA,IAACI,EAAAA,SAAA,CACC,KAAMP,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,SAAUC,CAAA,CAAA,EAEV,OAGN,eAACG,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,EAEZ,EAEF,OACEI,EAAAA,KAAAC,WAAA,CACG,SAAA,CAAAP,QACAQ,EAAAA,QAAA,CAAA,CAAQ,CAAA,EACX,CAEJ"}
1
+ {"version":3,"file":"AdminRoot-BDRLuMX6.cjs","sources":["../src/app/AdminRoot.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { Outlet, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { RootLayout, UserCard, Toaster, type RootLayoutHeader } from '../components'\nimport { AuthGuard } from '../auth/AuthGuard'\n\n/** The minimal user shape `AdminRoot` reads — apps pass their own richer type via the generic. */\nexport interface AdminUser {\n name?: string\n email?: string\n avatar?: string\n}\n\nexport interface AdminRootProps<U extends AdminUser = AdminUser> {\n /** Brand mark for the sidebar top. */\n logo?: ReactNode\n /** Current user, or `null` when signed out. */\n getUser: () => U | null\n /** Clears the session; `AdminRoot` navigates to `loginPath` afterwards. */\n onLogout: () => void\n /** Route-id prefix for standalone public pages (rendered outside the shell). Default `'/_auth'`. */\n authRouteId?: string\n /** Guard target for signed-out visitors + post-logout redirect. Default `'/login'`. */\n loginPath?: string\n /** Show a `UserCard` in the sidebar footer. Default `true`. */\n showUserCard?: boolean\n /** Extra `RootLayout` header config, merged **over** the defaults (the app's fields win). */\n header?: RootLayoutHeader\n}\n\n/**\n * Root-route component for admin apps — it wires up the whole shell orchestration so an app only has to\n * supply `logo` + `getUser` + `onLogout`. Public pages (route id under `authRouteId`) render standalone;\n * everything else renders inside the guarded admin shell (`RootLayout` + a sidebar `UserCard`), gated by\n * `AuthGuard` (signed-out visitors bounce to `loginPath`). Logout clears the session and navigates to\n * `loginPath`. Mounts exactly one app-wide `<Toaster/>` (the inner `RootLayout` gets `toaster={false}`).\n *\n * `loginPath` is a plain string, cast loosely to the router's `to` type (the library can't know the\n * app's typed route tree). The generic `<U>` preserves the app's own user type through `getUser`.\n *\n * @example\n * // routes/__root.tsx\n * export const Route = createRootRoute({\n * component: () => <AdminRoot<AuthUser> logo={<Logo />} getUser={getUser} onLogout={logout} />,\n * })\n */\nexport const AdminRoot = <U extends AdminUser = AdminUser>({\n logo,\n getUser,\n onLogout,\n authRouteId = '/_auth',\n loginPath = '/login',\n showUserCard = true,\n header,\n}: AdminRootProps<U>) => {\n const navigate = useNavigate()\n const isAuthRoute = useRouterState({\n select: (s) => s.matches.some((m) => m.routeId.startsWith(authRouteId)),\n })\n const user = getUser()\n const handleLogout = () => {\n onLogout()\n navigate({ to: loginPath as LinkProps['to'] })\n }\n const content = isAuthRoute ? (\n <Outlet />\n ) : (\n <AuthGuard isAuthenticated={user != null} redirectTo={loginPath}>\n <RootLayout\n logo={logo}\n toaster={false}\n header={{\n user: user ? { name: user.name, email: user.email, avatar: user.avatar } : undefined,\n onLogout: handleLogout,\n ...header,\n }}\n sidebarFooter={\n showUserCard && user ? (\n <UserCard\n name={user.name}\n email={user.email}\n avatar={user.avatar}\n onLogout={handleLogout}\n />\n ) : undefined\n }\n >\n <Outlet />\n </RootLayout>\n </AuthGuard>\n )\n return (\n <>\n {content}\n <Toaster />\n </>\n )\n}\n"],"names":["AdminRoot","logo","getUser","onLogout","authRouteId","loginPath","showUserCard","header","navigate","useNavigate","isAuthRoute","useRouterState","s","m","user","handleLogout","content","jsx","Outlet","AuthGuard","RootLayout","UserCard","jsxs","Fragment","Toaster"],"mappings":"4OA6CaA,EAAY,CAAkC,CACzD,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,SACd,UAAAC,EAAY,SACZ,aAAAC,EAAe,GACf,OAAAC,CACF,IAAyB,CACvB,MAAMC,EAAWC,EAAAA,YAAA,EACXC,EAAcC,EAAAA,eAAe,CACjC,OAASC,GAAMA,EAAE,QAAQ,KAAMC,GAAMA,EAAE,QAAQ,WAAWT,CAAW,CAAC,CAAA,CACvE,EACKU,EAAOZ,EAAA,EACPa,EAAe,IAAM,CACzBZ,EAAA,EACAK,EAAS,CAAE,GAAIH,EAA8B,CAC/C,EACMW,EAAUN,EACdO,EAAAA,IAACC,EAAAA,OAAA,CAAA,CAAO,EAERD,EAAAA,IAACE,EAAAA,UAAA,CAAU,gBAAiBL,GAAQ,KAAM,WAAYT,EACpD,SAAAY,EAAAA,IAACG,EAAAA,WAAA,CACC,KAAAnB,EACA,QAAS,GACT,OAAQ,CACN,KAAMa,EAAO,CAAE,KAAMA,EAAK,KAAM,MAAOA,EAAK,MAAO,OAAQA,EAAK,MAAA,EAAW,OAC3E,SAAUC,EACV,GAAGR,CAAA,EAEL,cACED,GAAgBQ,EACdG,EAAAA,IAACI,EAAAA,SAAA,CACC,KAAMP,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,SAAUC,CAAA,CAAA,EAEV,OAGN,eAACG,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,EAEZ,EAEF,OACEI,EAAAA,KAAAC,WAAA,CACG,SAAA,CAAAP,QACAQ,EAAAA,QAAA,CAAA,CAAQ,CAAA,EACX,CAEJ"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as o, jsxs as p, Fragment as g } from "react/jsx-runtime";
2
2
  import { useNavigate as A, useRouterState as R, Outlet as r } from "@tanstack/react-router";
3
3
  import { A as L } from "./AuthGuard-CVklwDbj.js";
4
- import { R as x } from "./RootLayout-q_oWf5et.js";
5
- import { U as T } from "./UserCard-D7U-CLbM.js";
6
- import { T as j } from "./Toaster-BynCHvUr.js";
4
+ import { R as x } from "./RootLayout-BNwHsuhC.js";
5
+ import { U as T } from "./UserCard-454Kc7JS.js";
6
+ import { T as j } from "./Toaster-C6UK_2TB.js";
7
7
  const I = ({
8
8
  logo: s,
9
9
  getUser: i,
@@ -47,4 +47,4 @@ const I = ({
47
47
  export {
48
48
  I as A
49
49
  };
50
- //# sourceMappingURL=AdminRoot-B2J1cHK5.js.map
50
+ //# sourceMappingURL=AdminRoot-DvF0js0q.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminRoot-B2J1cHK5.js","sources":["../src/app/AdminRoot.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { Outlet, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { RootLayout, UserCard, Toaster, type RootLayoutHeader } from '../components'\nimport { AuthGuard } from '../auth/AuthGuard'\n\n/** The minimal user shape `AdminRoot` reads — apps pass their own richer type via the generic. */\nexport interface AdminUser {\n name?: string\n email?: string\n avatar?: string\n}\n\nexport interface AdminRootProps<U extends AdminUser = AdminUser> {\n /** Brand mark for the sidebar top. */\n logo?: ReactNode\n /** Current user, or `null` when signed out. */\n getUser: () => U | null\n /** Clears the session; `AdminRoot` navigates to `loginPath` afterwards. */\n onLogout: () => void\n /** Route-id prefix for standalone public pages (rendered outside the shell). Default `'/_auth'`. */\n authRouteId?: string\n /** Guard target for signed-out visitors + post-logout redirect. Default `'/login'`. */\n loginPath?: string\n /** Show a `UserCard` in the sidebar footer. Default `true`. */\n showUserCard?: boolean\n /** Extra `RootLayout` header config, merged **over** the defaults (the app's fields win). */\n header?: RootLayoutHeader\n}\n\n/**\n * Root-route component for admin apps — it wires up the whole shell orchestration so an app only has to\n * supply `logo` + `getUser` + `onLogout`. Public pages (route id under `authRouteId`) render standalone;\n * everything else renders inside the guarded admin shell (`RootLayout` + a sidebar `UserCard`), gated by\n * `AuthGuard` (signed-out visitors bounce to `loginPath`). Logout clears the session and navigates to\n * `loginPath`. Mounts exactly one app-wide `<Toaster/>` (the inner `RootLayout` gets `toaster={false}`).\n *\n * `loginPath` is a plain string, cast loosely to the router's `to` type (the library can't know the\n * app's typed route tree). The generic `<U>` preserves the app's own user type through `getUser`.\n *\n * @example\n * // routes/__root.tsx\n * export const Route = createRootRoute({\n * component: () => <AdminRoot<AuthUser> logo={<Logo />} getUser={getUser} onLogout={logout} />,\n * })\n */\nexport const AdminRoot = <U extends AdminUser = AdminUser>({\n logo,\n getUser,\n onLogout,\n authRouteId = '/_auth',\n loginPath = '/login',\n showUserCard = true,\n header,\n}: AdminRootProps<U>) => {\n const navigate = useNavigate()\n const isAuthRoute = useRouterState({\n select: (s) => s.matches.some((m) => m.routeId.startsWith(authRouteId)),\n })\n const user = getUser()\n const handleLogout = () => {\n onLogout()\n navigate({ to: loginPath as LinkProps['to'] })\n }\n const content = isAuthRoute ? (\n <Outlet />\n ) : (\n <AuthGuard isAuthenticated={user != null} redirectTo={loginPath}>\n <RootLayout\n logo={logo}\n toaster={false}\n header={{\n user: user ? { name: user.name, email: user.email, avatar: user.avatar } : undefined,\n onLogout: handleLogout,\n ...header,\n }}\n sidebarFooter={\n showUserCard && user ? (\n <UserCard\n name={user.name}\n email={user.email}\n avatar={user.avatar}\n onLogout={handleLogout}\n />\n ) : undefined\n }\n >\n <Outlet />\n </RootLayout>\n </AuthGuard>\n )\n return (\n <>\n {content}\n <Toaster />\n </>\n )\n}\n"],"names":["AdminRoot","logo","getUser","onLogout","authRouteId","loginPath","showUserCard","header","navigate","useNavigate","isAuthRoute","useRouterState","s","m","user","handleLogout","content","jsx","Outlet","AuthGuard","RootLayout","UserCard","jsxs","Fragment","Toaster"],"mappings":";;;;;;AA6CO,MAAMA,IAAY,CAAkC;AAAA,EACzD,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,cAAAC,IAAe;AAAA,EACf,QAAAC;AACF,MAAyB;AACvB,QAAMC,IAAWC,EAAA,GACXC,IAAcC,EAAe;AAAA,IACjC,QAAQ,CAACC,MAAMA,EAAE,QAAQ,KAAK,CAACC,MAAMA,EAAE,QAAQ,WAAWT,CAAW,CAAC;AAAA,EAAA,CACvE,GACKU,IAAOZ,EAAA,GACPa,IAAe,MAAM;AACzB,IAAAZ,EAAA,GACAK,EAAS,EAAE,IAAIH,GAA8B;AAAA,EAC/C,GACMW,IAAUN,IACd,gBAAAO,EAACC,GAAA,CAAA,CAAO,IAER,gBAAAD,EAACE,GAAA,EAAU,iBAAiBL,KAAQ,MAAM,YAAYT,GACpD,UAAA,gBAAAY;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,MAAAnB;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAMa,IAAO,EAAE,MAAMA,EAAK,MAAM,OAAOA,EAAK,OAAO,QAAQA,EAAK,OAAA,IAAW;AAAA,QAC3E,UAAUC;AAAA,QACV,GAAGR;AAAA,MAAA;AAAA,MAEL,eACED,KAAgBQ,IACd,gBAAAG;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,MAAMP,EAAK;AAAA,UACX,OAAOA,EAAK;AAAA,UACZ,QAAQA,EAAK;AAAA,UACb,UAAUC;AAAA,QAAA;AAAA,MAAA,IAEV;AAAA,MAGN,4BAACG,GAAA,CAAA,CAAO;AAAA,IAAA;AAAA,EAAA,GAEZ;AAEF,SACE,gBAAAI,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAP;AAAA,sBACAQ,GAAA,CAAA,CAAQ;AAAA,EAAA,GACX;AAEJ;"}
1
+ {"version":3,"file":"AdminRoot-DvF0js0q.js","sources":["../src/app/AdminRoot.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { Outlet, useNavigate, useRouterState, type LinkProps } from '@tanstack/react-router'\nimport { RootLayout, UserCard, Toaster, type RootLayoutHeader } from '../components'\nimport { AuthGuard } from '../auth/AuthGuard'\n\n/** The minimal user shape `AdminRoot` reads — apps pass their own richer type via the generic. */\nexport interface AdminUser {\n name?: string\n email?: string\n avatar?: string\n}\n\nexport interface AdminRootProps<U extends AdminUser = AdminUser> {\n /** Brand mark for the sidebar top. */\n logo?: ReactNode\n /** Current user, or `null` when signed out. */\n getUser: () => U | null\n /** Clears the session; `AdminRoot` navigates to `loginPath` afterwards. */\n onLogout: () => void\n /** Route-id prefix for standalone public pages (rendered outside the shell). Default `'/_auth'`. */\n authRouteId?: string\n /** Guard target for signed-out visitors + post-logout redirect. Default `'/login'`. */\n loginPath?: string\n /** Show a `UserCard` in the sidebar footer. Default `true`. */\n showUserCard?: boolean\n /** Extra `RootLayout` header config, merged **over** the defaults (the app's fields win). */\n header?: RootLayoutHeader\n}\n\n/**\n * Root-route component for admin apps — it wires up the whole shell orchestration so an app only has to\n * supply `logo` + `getUser` + `onLogout`. Public pages (route id under `authRouteId`) render standalone;\n * everything else renders inside the guarded admin shell (`RootLayout` + a sidebar `UserCard`), gated by\n * `AuthGuard` (signed-out visitors bounce to `loginPath`). Logout clears the session and navigates to\n * `loginPath`. Mounts exactly one app-wide `<Toaster/>` (the inner `RootLayout` gets `toaster={false}`).\n *\n * `loginPath` is a plain string, cast loosely to the router's `to` type (the library can't know the\n * app's typed route tree). The generic `<U>` preserves the app's own user type through `getUser`.\n *\n * @example\n * // routes/__root.tsx\n * export const Route = createRootRoute({\n * component: () => <AdminRoot<AuthUser> logo={<Logo />} getUser={getUser} onLogout={logout} />,\n * })\n */\nexport const AdminRoot = <U extends AdminUser = AdminUser>({\n logo,\n getUser,\n onLogout,\n authRouteId = '/_auth',\n loginPath = '/login',\n showUserCard = true,\n header,\n}: AdminRootProps<U>) => {\n const navigate = useNavigate()\n const isAuthRoute = useRouterState({\n select: (s) => s.matches.some((m) => m.routeId.startsWith(authRouteId)),\n })\n const user = getUser()\n const handleLogout = () => {\n onLogout()\n navigate({ to: loginPath as LinkProps['to'] })\n }\n const content = isAuthRoute ? (\n <Outlet />\n ) : (\n <AuthGuard isAuthenticated={user != null} redirectTo={loginPath}>\n <RootLayout\n logo={logo}\n toaster={false}\n header={{\n user: user ? { name: user.name, email: user.email, avatar: user.avatar } : undefined,\n onLogout: handleLogout,\n ...header,\n }}\n sidebarFooter={\n showUserCard && user ? (\n <UserCard\n name={user.name}\n email={user.email}\n avatar={user.avatar}\n onLogout={handleLogout}\n />\n ) : undefined\n }\n >\n <Outlet />\n </RootLayout>\n </AuthGuard>\n )\n return (\n <>\n {content}\n <Toaster />\n </>\n )\n}\n"],"names":["AdminRoot","logo","getUser","onLogout","authRouteId","loginPath","showUserCard","header","navigate","useNavigate","isAuthRoute","useRouterState","s","m","user","handleLogout","content","jsx","Outlet","AuthGuard","RootLayout","UserCard","jsxs","Fragment","Toaster"],"mappings":";;;;;;AA6CO,MAAMA,IAAY,CAAkC;AAAA,EACzD,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,cAAAC,IAAe;AAAA,EACf,QAAAC;AACF,MAAyB;AACvB,QAAMC,IAAWC,EAAA,GACXC,IAAcC,EAAe;AAAA,IACjC,QAAQ,CAACC,MAAMA,EAAE,QAAQ,KAAK,CAACC,MAAMA,EAAE,QAAQ,WAAWT,CAAW,CAAC;AAAA,EAAA,CACvE,GACKU,IAAOZ,EAAA,GACPa,IAAe,MAAM;AACzB,IAAAZ,EAAA,GACAK,EAAS,EAAE,IAAIH,GAA8B;AAAA,EAC/C,GACMW,IAAUN,IACd,gBAAAO,EAACC,GAAA,CAAA,CAAO,IAER,gBAAAD,EAACE,GAAA,EAAU,iBAAiBL,KAAQ,MAAM,YAAYT,GACpD,UAAA,gBAAAY;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,MAAAnB;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAMa,IAAO,EAAE,MAAMA,EAAK,MAAM,OAAOA,EAAK,OAAO,QAAQA,EAAK,OAAA,IAAW;AAAA,QAC3E,UAAUC;AAAA,QACV,GAAGR;AAAA,MAAA;AAAA,MAEL,eACED,KAAgBQ,IACd,gBAAAG;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,MAAMP,EAAK;AAAA,UACX,OAAOA,EAAK;AAAA,UACZ,QAAQA,EAAK;AAAA,UACb,UAAUC;AAAA,QAAA;AAAA,MAAA,IAEV;AAAA,MAGN,4BAACG,GAAA,CAAA,CAAO;AAAA,IAAA;AAAA,EAAA,GAEZ;AAEF,SACE,gBAAAI,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAP;AAAA,sBACAQ,GAAA,CAAA,CAAQ;AAAA,EAAA,GACX;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),I=require("react"),g=require("clsx"),t=require("./Icon-CXTl_QAP.cjs"),C=require("./names-C2Yj1p3u.cjs"),N=require("./IconButton-DyRC514t.cjs"),j=require("./ConfigProvider-h1WoGC3R.cjs"),q="_alert_1o0o3_3",v="_filled_1o0o3_18",h="_contained_1o0o3_21",A="_outlined_1o0o3_25",b="_text_1o0o3_29",z="_icon_1o0o3_34",E="_message_1o0o3_43",T="_action_1o0o3_49",w="_close_1o0o3_56",o={alert:q,filled:v,contained:h,outlined:A,text:b,icon:z,message:E,action:T,close:w},y=new Set(C.ICON_NAMES),O={success:"TickCircle",error:"CloseCircle",warning:"Warning",info:"InfoCircle"},S=I.forwardRef(function({variant:i="filled",color:s="info",icon:n,action:c,onClose:r,closeLabel:a,className:_,style:d,children:u,...f},m){const x=j.useT(),l=n===!1?null:n==null?e.jsx(t.Icon,{name:O[s]??"InfoCircle"}):typeof n=="string"&&y.has(n)?e.jsx(t.Icon,{name:n}):n;return e.jsxs("div",{ref:m,role:"alert",className:g.clsx(o.alert,o[i],_),style:{"--tz-btn-rgb":`var(--tz-color-${s}-rgb)`,"--tz-btn-on":`var(--tz-color-${s}-contrast, #fff)`,...d},...f,children:[l!=null&&e.jsx("span",{className:o.icon,"aria-hidden":!0,children:l}),e.jsx("div",{className:o.message,children:u}),c!=null&&e.jsx("div",{className:o.action,children:c}),r&&e.jsx(N.IconButton,{variant:"text",color:s,size:"sm",className:o.close,"aria-label":a??x("common.close"),onClick:r,children:e.jsx(t.Icon,{name:"Close"})})]})});exports.Alert=S;
2
- //# sourceMappingURL=Alert-DRZdNwDm.cjs.map
1
+ "use strict";const e=require("react/jsx-runtime"),I=require("react"),g=require("clsx"),t=require("./Icon-BVULqOJD.cjs"),C=require("./names-BJnFU_5m.cjs"),N=require("./IconButton-Lv0sDDR9.cjs"),j=require("./ConfigProvider-C7DUWHrb.cjs"),q="_alert_1o0o3_3",v="_filled_1o0o3_18",h="_contained_1o0o3_21",A="_outlined_1o0o3_25",b="_text_1o0o3_29",z="_icon_1o0o3_34",E="_message_1o0o3_43",T="_action_1o0o3_49",w="_close_1o0o3_56",o={alert:q,filled:v,contained:h,outlined:A,text:b,icon:z,message:E,action:T,close:w},y=new Set(C.ICON_NAMES),O={success:"TickCircle",error:"CloseCircle",warning:"Warning",info:"InfoCircle"},S=I.forwardRef(function({variant:i="filled",color:s="info",icon:n,action:c,onClose:r,closeLabel:a,className:_,style:d,children:u,...f},m){const x=j.useT(),l=n===!1?null:n==null?e.jsx(t.Icon,{name:O[s]??"InfoCircle"}):typeof n=="string"&&y.has(n)?e.jsx(t.Icon,{name:n}):n;return e.jsxs("div",{ref:m,role:"alert",className:g.clsx(o.alert,o[i],_),style:{"--tz-btn-rgb":`var(--tz-color-${s}-rgb)`,"--tz-btn-on":`var(--tz-color-${s}-contrast, #fff)`,...d},...f,children:[l!=null&&e.jsx("span",{className:o.icon,"aria-hidden":!0,children:l}),e.jsx("div",{className:o.message,children:u}),c!=null&&e.jsx("div",{className:o.action,children:c}),r&&e.jsx(N.IconButton,{variant:"text",color:s,size:"sm",className:o.close,"aria-label":a??x("common.close"),onClick:r,children:e.jsx(t.Icon,{name:"Close"})})]})});exports.Alert=S;
2
+ //# sourceMappingURL=Alert-CwoRkKq4.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert-DRZdNwDm.cjs","sources":["../src/components/Alert/Alert.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Alert.module.css'\n\nexport type AlertVariant = 'contained' | 'filled' | 'outlined' | 'text'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** Default leading icon per semantic color (other colors fall back to `InfoCircle`). */\nconst DEFAULT_ICON: Partial<Record<ThemeColor, IconName>> = {\n success: 'TickCircle',\n error: 'CloseCircle',\n warning: 'Warning',\n info: 'InfoCircle',\n}\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'title'> {\n /** Tint style. Defaults to `filled` (the soft tint). */\n variant?: AlertVariant\n /** Brand / semantic palette token that tints the alert. Defaults to `info`. */\n color?: ThemeColor\n /**\n * Leading icon — a known `IconName`, any node, or `false` to hide it. Defaults to the semantic icon\n * for `color` (success → `TickCircle`, error → `CloseCircle`, warning → `Warning`, info → `InfoCircle`).\n */\n icon?: IconName | ReactNode | false\n /** Trailing action (e.g. an `UNDO` button), placed before the close button. */\n action?: ReactNode\n /** When provided, a trailing × close button appears that calls this. */\n onClose?: () => void\n /** Accessible label for the close button. Defaults to `\"Close\"`. */\n closeLabel?: string\n /** Alert message. */\n children?: ReactNode\n}\n\n/**\n * A message banner — the library's inline feedback surface (info, success, warning, error). Tinted by\n * `color` via the shared `--tz-btn-rgb` pattern across the 4 standard `variant`s; a semantic leading\n * `icon` is auto-picked per color (override with `icon`, or `icon={false}` to drop it). An optional\n * `action` slot (e.g. an `UNDO` button) and an `onClose` × button trail the message. `role=\"alert\"`.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n variant = 'filled',\n color = 'info',\n icon,\n action,\n onClose,\n closeLabel,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const t = useT()\n const renderedIcon =\n icon === false ? null : icon == null ? (\n <Icon name={DEFAULT_ICON[color] ?? 'InfoCircle'} />\n ) : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={clsx(styles.alert, styles[variant], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <div className={styles.message}>{children}</div>\n {action != null && <div className={styles.action}>{action}</div>}\n {onClose && (\n <IconButton\n variant=\"text\"\n color={color}\n size=\"sm\"\n className={styles.close}\n aria-label={closeLabel ?? t('common.close')}\n onClick={onClose}\n >\n <Icon name=\"Close\" />\n </IconButton>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","DEFAULT_ICON","Alert","forwardRef","variant","color","icon","action","onClose","closeLabel","className","style","children","props","ref","t","useT","renderedIcon","jsx","Icon","jsxs","clsx","styles","IconButton"],"mappings":"6fAUMA,EAAgB,IAAI,IAAYC,YAAU,EAG1CC,EAAsD,CAC1D,QAAS,aACT,MAAO,cACP,QAAS,UACT,KAAM,YACR,EA4BaC,EAAQC,EAAAA,WAAuC,SAC1D,CACE,QAAAC,EAAU,SACV,MAAAC,EAAQ,OACR,KAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,MAAMC,EAAIC,EAAAA,KAAA,EACJC,EACJX,IAAS,GAAQ,KAAOA,GAAQ,KAC9BY,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMlB,EAAaI,CAAK,GAAK,aAAc,EAC/C,OAAOC,GAAS,UAAYP,EAAc,IAAIO,CAAI,EACpDY,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMb,CAAA,CAAkB,EAE9BA,EAGJ,OACEc,EAAAA,KAAC,MAAA,CACC,IAAAN,EACA,KAAK,QACL,UAAWO,EAAAA,KAAKC,EAAO,MAAOA,EAAOlB,CAAO,EAAGM,CAAS,EACxD,MACE,CACE,eAAgB,kBAAkBL,CAAK,QACvC,cAAe,kBAAkBA,CAAK,mBACtC,GAAGM,CAAA,EAGN,GAAGE,EAEH,SAAA,CAAAI,GAAgB,YACd,OAAA,CAAK,UAAWK,EAAO,KAAM,cAAW,GACtC,SAAAL,CAAA,CACH,EAEFC,EAAAA,IAAC,MAAA,CAAI,UAAWI,EAAO,QAAU,SAAAV,EAAS,EACzCL,GAAU,MAAQW,EAAAA,IAAC,OAAI,UAAWI,EAAO,OAAS,SAAAf,EAAO,EACzDC,GACCU,EAAAA,IAACK,EAAAA,WAAA,CACC,QAAQ,OACR,MAAAlB,EACA,KAAK,KACL,UAAWiB,EAAO,MAClB,aAAYb,GAAcM,EAAE,cAAc,EAC1C,QAASP,EAET,SAAAU,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAK,OAAA,CAAQ,CAAA,CAAA,CACrB,CAAA,CAAA,CAIR,CAAC"}
1
+ {"version":3,"file":"Alert-CwoRkKq4.cjs","sources":["../src/components/Alert/Alert.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Alert.module.css'\n\nexport type AlertVariant = 'contained' | 'filled' | 'outlined' | 'text'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** Default leading icon per semantic color (other colors fall back to `InfoCircle`). */\nconst DEFAULT_ICON: Partial<Record<ThemeColor, IconName>> = {\n success: 'TickCircle',\n error: 'CloseCircle',\n warning: 'Warning',\n info: 'InfoCircle',\n}\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'title'> {\n /** Tint style. Defaults to `filled` (the soft tint). */\n variant?: AlertVariant\n /** Brand / semantic palette token that tints the alert. Defaults to `info`. */\n color?: ThemeColor\n /**\n * Leading icon — a known `IconName`, any node, or `false` to hide it. Defaults to the semantic icon\n * for `color` (success → `TickCircle`, error → `CloseCircle`, warning → `Warning`, info → `InfoCircle`).\n */\n icon?: IconName | ReactNode | false\n /** Trailing action (e.g. an `UNDO` button), placed before the close button. */\n action?: ReactNode\n /** When provided, a trailing × close button appears that calls this. */\n onClose?: () => void\n /** Accessible label for the close button. Defaults to `\"Close\"`. */\n closeLabel?: string\n /** Alert message. */\n children?: ReactNode\n}\n\n/**\n * A message banner — the library's inline feedback surface (info, success, warning, error). Tinted by\n * `color` via the shared `--tz-btn-rgb` pattern across the 4 standard `variant`s; a semantic leading\n * `icon` is auto-picked per color (override with `icon`, or `icon={false}` to drop it). An optional\n * `action` slot (e.g. an `UNDO` button) and an `onClose` × button trail the message. `role=\"alert\"`.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n variant = 'filled',\n color = 'info',\n icon,\n action,\n onClose,\n closeLabel,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const t = useT()\n const renderedIcon =\n icon === false ? null : icon == null ? (\n <Icon name={DEFAULT_ICON[color] ?? 'InfoCircle'} />\n ) : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={clsx(styles.alert, styles[variant], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <div className={styles.message}>{children}</div>\n {action != null && <div className={styles.action}>{action}</div>}\n {onClose && (\n <IconButton\n variant=\"text\"\n color={color}\n size=\"sm\"\n className={styles.close}\n aria-label={closeLabel ?? t('common.close')}\n onClick={onClose}\n >\n <Icon name=\"Close\" />\n </IconButton>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","DEFAULT_ICON","Alert","forwardRef","variant","color","icon","action","onClose","closeLabel","className","style","children","props","ref","t","useT","renderedIcon","jsx","Icon","jsxs","clsx","styles","IconButton"],"mappings":"6fAUMA,EAAgB,IAAI,IAAYC,YAAU,EAG1CC,EAAsD,CAC1D,QAAS,aACT,MAAO,cACP,QAAS,UACT,KAAM,YACR,EA4BaC,EAAQC,EAAAA,WAAuC,SAC1D,CACE,QAAAC,EAAU,SACV,MAAAC,EAAQ,OACR,KAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,MAAMC,EAAIC,EAAAA,KAAA,EACJC,EACJX,IAAS,GAAQ,KAAOA,GAAQ,KAC9BY,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMlB,EAAaI,CAAK,GAAK,aAAc,EAC/C,OAAOC,GAAS,UAAYP,EAAc,IAAIO,CAAI,EACpDY,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMb,CAAA,CAAkB,EAE9BA,EAGJ,OACEc,EAAAA,KAAC,MAAA,CACC,IAAAN,EACA,KAAK,QACL,UAAWO,EAAAA,KAAKC,EAAO,MAAOA,EAAOlB,CAAO,EAAGM,CAAS,EACxD,MACE,CACE,eAAgB,kBAAkBL,CAAK,QACvC,cAAe,kBAAkBA,CAAK,mBACtC,GAAGM,CAAA,EAGN,GAAGE,EAEH,SAAA,CAAAI,GAAgB,YACd,OAAA,CAAK,UAAWK,EAAO,KAAM,cAAW,GACtC,SAAAL,CAAA,CACH,EAEFC,EAAAA,IAAC,MAAA,CAAI,UAAWI,EAAO,QAAU,SAAAV,EAAS,EACzCL,GAAU,MAAQW,EAAAA,IAAC,OAAI,UAAWI,EAAO,OAAS,SAAAf,EAAO,EACzDC,GACCU,EAAAA,IAACK,EAAAA,WAAA,CACC,QAAQ,OACR,MAAAlB,EACA,KAAK,KACL,UAAWiB,EAAO,MAClB,aAAYb,GAAcM,EAAE,cAAc,EAC1C,QAASP,EAET,SAAAU,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAK,OAAA,CAAQ,CAAA,CAAA,CACrB,CAAA,CAAA,CAIR,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as o, jsxs as I } from "react/jsx-runtime";
2
2
  import { forwardRef as N } from "react";
3
3
  import { clsx as g } from "clsx";
4
- import { I as s } from "./Icon-CophpkHo.js";
5
- import { a as C } from "./names-D8ABK2Wk.js";
6
- import { I as x } from "./IconButton-DpTxmj3d.js";
7
- import { a as h } from "./ConfigProvider-DDuIJSM7.js";
4
+ import { I as s } from "./Icon-DaTvzLBu.js";
5
+ import { a as C } from "./names-r21QPjcU.js";
6
+ import { I as x } from "./IconButton-DXMmtuLA.js";
7
+ import { a as h } from "./ConfigProvider-DT0yrgmd.js";
8
8
  const v = "_alert_1o0o3_3", A = "_filled_1o0o3_18", b = "_contained_1o0o3_21", z = "_outlined_1o0o3_25", E = "_text_1o0o3_29", T = "_icon_1o0o3_34", w = "_message_1o0o3_43", y = "_action_1o0o3_49", O = "_close_1o0o3_56", t = {
9
9
  alert: v,
10
10
  filled: A,
@@ -68,4 +68,4 @@ const v = "_alert_1o0o3_3", A = "_filled_1o0o3_18", b = "_contained_1o0o3_21", z
68
68
  export {
69
69
  U as A
70
70
  };
71
- //# sourceMappingURL=Alert-yldGvhVM.js.map
71
+ //# sourceMappingURL=Alert-DPYmdaWs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert-yldGvhVM.js","sources":["../src/components/Alert/Alert.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Alert.module.css'\n\nexport type AlertVariant = 'contained' | 'filled' | 'outlined' | 'text'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** Default leading icon per semantic color (other colors fall back to `InfoCircle`). */\nconst DEFAULT_ICON: Partial<Record<ThemeColor, IconName>> = {\n success: 'TickCircle',\n error: 'CloseCircle',\n warning: 'Warning',\n info: 'InfoCircle',\n}\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'title'> {\n /** Tint style. Defaults to `filled` (the soft tint). */\n variant?: AlertVariant\n /** Brand / semantic palette token that tints the alert. Defaults to `info`. */\n color?: ThemeColor\n /**\n * Leading icon — a known `IconName`, any node, or `false` to hide it. Defaults to the semantic icon\n * for `color` (success → `TickCircle`, error → `CloseCircle`, warning → `Warning`, info → `InfoCircle`).\n */\n icon?: IconName | ReactNode | false\n /** Trailing action (e.g. an `UNDO` button), placed before the close button. */\n action?: ReactNode\n /** When provided, a trailing × close button appears that calls this. */\n onClose?: () => void\n /** Accessible label for the close button. Defaults to `\"Close\"`. */\n closeLabel?: string\n /** Alert message. */\n children?: ReactNode\n}\n\n/**\n * A message banner — the library's inline feedback surface (info, success, warning, error). Tinted by\n * `color` via the shared `--tz-btn-rgb` pattern across the 4 standard `variant`s; a semantic leading\n * `icon` is auto-picked per color (override with `icon`, or `icon={false}` to drop it). An optional\n * `action` slot (e.g. an `UNDO` button) and an `onClose` × button trail the message. `role=\"alert\"`.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n variant = 'filled',\n color = 'info',\n icon,\n action,\n onClose,\n closeLabel,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const t = useT()\n const renderedIcon =\n icon === false ? null : icon == null ? (\n <Icon name={DEFAULT_ICON[color] ?? 'InfoCircle'} />\n ) : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={clsx(styles.alert, styles[variant], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <div className={styles.message}>{children}</div>\n {action != null && <div className={styles.action}>{action}</div>}\n {onClose && (\n <IconButton\n variant=\"text\"\n color={color}\n size=\"sm\"\n className={styles.close}\n aria-label={closeLabel ?? t('common.close')}\n onClick={onClose}\n >\n <Icon name=\"Close\" />\n </IconButton>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","DEFAULT_ICON","Alert","forwardRef","variant","color","icon","action","onClose","closeLabel","className","style","children","props","ref","t","useT","renderedIcon","jsx","Icon","jsxs","clsx","styles","IconButton"],"mappings":";;;;;;;;;;;;;;;;;GAUMA,IAAgB,IAAI,IAAYC,CAAU,GAG1CC,IAAsD;AAAA,EAC1D,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AACR,GA4BaC,IAAQC,EAAuC,SAC1D;AAAA,EACE,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAIC,EAAA,GACJC,IACJX,MAAS,KAAQ,OAAOA,KAAQ,OAC9B,gBAAAY,EAACC,GAAA,EAAK,MAAMlB,EAAaI,CAAK,KAAK,cAAc,IAC/C,OAAOC,KAAS,YAAYP,EAAc,IAAIO,CAAI,IACpD,gBAAAY,EAACC,GAAA,EAAK,MAAMb,EAAA,CAAkB,IAE9BA;AAGJ,SACE,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAN;AAAA,MACA,MAAK;AAAA,MACL,WAAWO,EAAKC,EAAO,OAAOA,EAAOlB,CAAO,GAAGM,CAAS;AAAA,MACxD,OACE;AAAA,QACE,gBAAgB,kBAAkBL,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGM;AAAA,MAAA;AAAA,MAGN,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAI,KAAgB,0BACd,QAAA,EAAK,WAAWK,EAAO,MAAM,eAAW,IACtC,UAAAL,EAAA,CACH;AAAA,QAEF,gBAAAC,EAAC,OAAA,EAAI,WAAWI,EAAO,SAAU,UAAAV,GAAS;AAAA,QACzCL,KAAU,QAAQ,gBAAAW,EAAC,SAAI,WAAWI,EAAO,QAAS,UAAAf,GAAO;AAAA,QACzDC,KACC,gBAAAU;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAAlB;AAAA,YACA,MAAK;AAAA,YACL,WAAWiB,EAAO;AAAA,YAClB,cAAYb,KAAcM,EAAE,cAAc;AAAA,YAC1C,SAASP;AAAA,YAET,UAAA,gBAAAU,EAACC,GAAA,EAAK,MAAK,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
1
+ {"version":3,"file":"Alert-DPYmdaWs.js","sources":["../src/components/Alert/Alert.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Alert.module.css'\n\nexport type AlertVariant = 'contained' | 'filled' | 'outlined' | 'text'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** Default leading icon per semantic color (other colors fall back to `InfoCircle`). */\nconst DEFAULT_ICON: Partial<Record<ThemeColor, IconName>> = {\n success: 'TickCircle',\n error: 'CloseCircle',\n warning: 'Warning',\n info: 'InfoCircle',\n}\n\nexport interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'title'> {\n /** Tint style. Defaults to `filled` (the soft tint). */\n variant?: AlertVariant\n /** Brand / semantic palette token that tints the alert. Defaults to `info`. */\n color?: ThemeColor\n /**\n * Leading icon — a known `IconName`, any node, or `false` to hide it. Defaults to the semantic icon\n * for `color` (success → `TickCircle`, error → `CloseCircle`, warning → `Warning`, info → `InfoCircle`).\n */\n icon?: IconName | ReactNode | false\n /** Trailing action (e.g. an `UNDO` button), placed before the close button. */\n action?: ReactNode\n /** When provided, a trailing × close button appears that calls this. */\n onClose?: () => void\n /** Accessible label for the close button. Defaults to `\"Close\"`. */\n closeLabel?: string\n /** Alert message. */\n children?: ReactNode\n}\n\n/**\n * A message banner — the library's inline feedback surface (info, success, warning, error). Tinted by\n * `color` via the shared `--tz-btn-rgb` pattern across the 4 standard `variant`s; a semantic leading\n * `icon` is auto-picked per color (override with `icon`, or `icon={false}` to drop it). An optional\n * `action` slot (e.g. an `UNDO` button) and an `onClose` × button trail the message. `role=\"alert\"`.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n variant = 'filled',\n color = 'info',\n icon,\n action,\n onClose,\n closeLabel,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const t = useT()\n const renderedIcon =\n icon === false ? null : icon == null ? (\n <Icon name={DEFAULT_ICON[color] ?? 'InfoCircle'} />\n ) : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} />\n ) : (\n icon\n )\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={clsx(styles.alert, styles[variant], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {renderedIcon != null && (\n <span className={styles.icon} aria-hidden>\n {renderedIcon}\n </span>\n )}\n <div className={styles.message}>{children}</div>\n {action != null && <div className={styles.action}>{action}</div>}\n {onClose && (\n <IconButton\n variant=\"text\"\n color={color}\n size=\"sm\"\n className={styles.close}\n aria-label={closeLabel ?? t('common.close')}\n onClick={onClose}\n >\n <Icon name=\"Close\" />\n </IconButton>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","DEFAULT_ICON","Alert","forwardRef","variant","color","icon","action","onClose","closeLabel","className","style","children","props","ref","t","useT","renderedIcon","jsx","Icon","jsxs","clsx","styles","IconButton"],"mappings":";;;;;;;;;;;;;;;;;GAUMA,IAAgB,IAAI,IAAYC,CAAU,GAG1CC,IAAsD;AAAA,EAC1D,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AACR,GA4BaC,IAAQC,EAAuC,SAC1D;AAAA,EACE,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAIC,EAAA,GACJC,IACJX,MAAS,KAAQ,OAAOA,KAAQ,OAC9B,gBAAAY,EAACC,GAAA,EAAK,MAAMlB,EAAaI,CAAK,KAAK,cAAc,IAC/C,OAAOC,KAAS,YAAYP,EAAc,IAAIO,CAAI,IACpD,gBAAAY,EAACC,GAAA,EAAK,MAAMb,EAAA,CAAkB,IAE9BA;AAGJ,SACE,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAN;AAAA,MACA,MAAK;AAAA,MACL,WAAWO,EAAKC,EAAO,OAAOA,EAAOlB,CAAO,GAAGM,CAAS;AAAA,MACxD,OACE;AAAA,QACE,gBAAgB,kBAAkBL,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGM;AAAA,MAAA;AAAA,MAGN,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAI,KAAgB,0BACd,QAAA,EAAK,WAAWK,EAAO,MAAM,eAAW,IACtC,UAAAL,EAAA,CACH;AAAA,QAEF,gBAAAC,EAAC,OAAA,EAAI,WAAWI,EAAO,SAAU,UAAAV,GAAS;AAAA,QACzCL,KAAU,QAAQ,gBAAAW,EAAC,SAAI,WAAWI,EAAO,QAAS,UAAAf,GAAO;AAAA,QACzDC,KACC,gBAAAU;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAAlB;AAAA,YACA,MAAK;AAAA,YACL,WAAWiB,EAAO;AAAA,YAClB,cAAYb,KAAcM,EAAE,cAAc;AAAA,YAC1C,SAASP;AAAA,YAET,UAAA,gBAAAU,EAACC,GAAA,EAAK,MAAK,QAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";const a=require("react/jsx-runtime"),g=require("react"),m=require("clsx"),v=require("./Avatar-_ufXh3AY.cjs"),u=require("./Typography-BFatE1_A.cjs"),x="_authLayout_1vumg_3",j="_logo_1vumg_20",L="_card_1vumg_36",N="_icon_1vumg_50",f="_header_1vumg_55",p="_body_1vumg_62",q="_footer_1vumg_68",o={authLayout:x,logo:j,card:L,icon:N,header:f,body:p,footer:q},A=g.forwardRef(function({title:s,subtitle:e,logo:c,icon:r,footer:n,color:l="accent",maxWidth:d=400,className:i,style:h,children:t,..._},y){return a.jsxs("div",{ref:y,className:m.clsx(o.authLayout,i),style:h,..._,children:[c!=null&&a.jsx("div",{className:o.logo,children:c}),a.jsxs("div",{className:o.card,style:{maxWidth:d},children:[r!=null&&a.jsx(v.Avatar,{className:o.icon,icon:r,color:l,size:"lg","aria-hidden":!0}),(s!=null||e!=null)&&a.jsxs("div",{className:o.header,children:[s!=null&&a.jsx(u.Typography,{variant:"h2",align:"center",children:s}),e!=null&&a.jsx(u.Typography,{color:"muted",align:"center",children:e})]}),t!=null&&a.jsx("div",{className:o.body,children:t}),n!=null&&a.jsx("div",{className:o.footer,children:n})]})]})});exports.AuthLayout=A;
2
- //# sourceMappingURL=AuthLayout-B1tzhzHo.cjs.map
1
+ "use strict";const a=require("react/jsx-runtime"),g=require("react"),m=require("clsx"),v=require("./Avatar-Dgf04PBC.cjs"),u=require("./Typography-BFatE1_A.cjs"),x="_authLayout_1vumg_3",j="_logo_1vumg_20",L="_card_1vumg_36",N="_icon_1vumg_50",f="_header_1vumg_55",p="_body_1vumg_62",q="_footer_1vumg_68",o={authLayout:x,logo:j,card:L,icon:N,header:f,body:p,footer:q},A=g.forwardRef(function({title:s,subtitle:e,logo:c,icon:r,footer:n,color:l="accent",maxWidth:d=400,className:i,style:h,children:t,..._},y){return a.jsxs("div",{ref:y,className:m.clsx(o.authLayout,i),style:h,..._,children:[c!=null&&a.jsx("div",{className:o.logo,children:c}),a.jsxs("div",{className:o.card,style:{maxWidth:d},children:[r!=null&&a.jsx(v.Avatar,{className:o.icon,icon:r,color:l,size:"lg","aria-hidden":!0}),(s!=null||e!=null)&&a.jsxs("div",{className:o.header,children:[s!=null&&a.jsx(u.Typography,{variant:"h2",align:"center",children:s}),e!=null&&a.jsx(u.Typography,{color:"muted",align:"center",children:e})]}),t!=null&&a.jsx("div",{className:o.body,children:t}),n!=null&&a.jsx("div",{className:o.footer,children:n})]})]})});exports.AuthLayout=A;
2
+ //# sourceMappingURL=AuthLayout-BRUxDgzs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthLayout-B1tzhzHo.cjs","sources":["../src/components/AuthLayout/AuthLayout.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Typography } from '../Typography'\nimport type { IconName } from '../../icons/names'\nimport styles from './AuthLayout.module.css'\n\nexport interface AuthLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Heading — the page name (e.g. `\"Login\"`, `\"Forgot Password\"`, `\"Verify Code\"`). */\n title?: ReactNode\n /** Muted line under the title (e.g. `\"Enter your email to receive a reset link\"`). */\n subtitle?: ReactNode\n /**\n * Brand slot centered on the canvas, above the card (a logo `<img>` / `<svg>` / any node). The slot\n * is the constraint box (capped width + height) — an `<img>`/`<svg>` inside fills it 100% (aspect\n * kept), so you can pass an unsized logo and it's sized/centered for you.\n */\n logo?: ReactNode\n /** Optional glyph in a soft tinted circle above the title — an `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Bottom slot under the form — e.g. a \"Back to login\" / \"Sign up\" link row. */\n footer?: ReactNode\n /** Theme token that tints the `icon` circle. Defaults to `accent`. */\n color?: ThemeColor\n /** Max width of the centered card in px. Defaults to `400`. */\n maxWidth?: number\n /** The auth form (fields + submit) — usually a `<Form>`. */\n children?: ReactNode\n}\n\n/**\n * A ready-made, centered page frame for **authentication pages** (login, forgot-password,\n * reset-password, OTP, …) — so each page just supplies its `title` + form instead of hand-building the\n * layout. Fills the viewport (`100dvh`) with the app `background` canvas and vertically centers a\n * `logo` (on the canvas, above the card) + an elevated `surface` card, as a group. The card stacks: an\n * optional `icon` (in a soft tinted `Avatar` circle), the `title` + `subtitle` (centered), the\n * `children` (your form), and an optional `footer` (link row). Token-only styling; responsive.\n *\n * @example\n * <AuthLayout title=\"Login\" subtitle=\"Welcome back\" logo={<Logo />}>\n * <Form form={form}>…</Form>\n * </AuthLayout>\n */\nexport const AuthLayout = forwardRef<HTMLDivElement, AuthLayoutProps>(function AuthLayout(\n {\n title,\n subtitle,\n logo,\n icon,\n footer,\n color = 'accent',\n maxWidth = 400,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n return (\n <div ref={ref} className={clsx(styles.authLayout, className)} style={style} {...props}>\n {logo != null && <div className={styles.logo}>{logo}</div>}\n <div className={styles.card} style={{ maxWidth } as CSSProperties}>\n {icon != null && (\n <Avatar className={styles.icon} icon={icon} color={color} size=\"lg\" aria-hidden />\n )}\n {(title != null || subtitle != null) && (\n <div className={styles.header}>\n {title != null && (\n <Typography variant=\"h2\" align=\"center\">\n {title}\n </Typography>\n )}\n {subtitle != null && (\n <Typography color=\"muted\" align=\"center\">\n {subtitle}\n </Typography>\n )}\n </div>\n )}\n {children != null && <div className={styles.body}>{children}</div>}\n {footer != null && <div className={styles.footer}>{footer}</div>}\n </div>\n </div>\n )\n})\n"],"names":["AuthLayout","forwardRef","title","subtitle","logo","icon","footer","color","maxWidth","className","style","children","props","ref","jsxs","clsx","styles","jsx","Avatar","Typography"],"mappings":"8WA4CaA,EAAaC,EAAAA,WAA4C,SACpE,CACE,MAAAC,EACA,SAAAC,EACA,KAAAC,EACA,KAAAC,EACA,OAAAC,EACA,MAAAC,EAAQ,SACR,SAAAC,EAAW,IACX,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,OACEC,EAAAA,KAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,EAAAA,KAAKC,EAAO,WAAYP,CAAS,EAAG,MAAAC,EAAe,GAAGE,EAC7E,SAAA,CAAAR,GAAQ,MAAQa,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAO,KAAO,SAAAZ,EAAK,EACpDU,OAAC,OAAI,UAAWE,EAAO,KAAM,MAAO,CAAE,SAAAR,GACnC,SAAA,CAAAH,GAAQ,MACPY,EAAAA,IAACC,EAAAA,OAAA,CAAO,UAAWF,EAAO,KAAM,KAAAX,EAAY,MAAAE,EAAc,KAAK,KAAK,cAAW,EAAA,CAAC,GAEhFL,GAAS,MAAQC,GAAY,cAC5B,MAAA,CAAI,UAAWa,EAAO,OACpB,SAAA,CAAAd,GAAS,MACRe,MAACE,EAAAA,WAAA,CAAW,QAAQ,KAAK,MAAM,SAC5B,SAAAjB,CAAA,CACH,EAEDC,GAAY,MACXc,MAACE,EAAAA,WAAA,CAAW,MAAM,QAAQ,MAAM,SAC7B,SAAAhB,CAAA,CACH,CAAA,EAEJ,EAEDQ,GAAY,MAAQM,EAAAA,IAAC,OAAI,UAAWD,EAAO,KAAO,SAAAL,EAAS,EAC3DL,GAAU,MAAQW,EAAAA,IAAC,OAAI,UAAWD,EAAO,OAAS,SAAAV,CAAA,CAAO,CAAA,CAAA,CAC5D,CAAA,EACF,CAEJ,CAAC"}
1
+ {"version":3,"file":"AuthLayout-BRUxDgzs.cjs","sources":["../src/components/AuthLayout/AuthLayout.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Typography } from '../Typography'\nimport type { IconName } from '../../icons/names'\nimport styles from './AuthLayout.module.css'\n\nexport interface AuthLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Heading — the page name (e.g. `\"Login\"`, `\"Forgot Password\"`, `\"Verify Code\"`). */\n title?: ReactNode\n /** Muted line under the title (e.g. `\"Enter your email to receive a reset link\"`). */\n subtitle?: ReactNode\n /**\n * Brand slot centered on the canvas, above the card (a logo `<img>` / `<svg>` / any node). The slot\n * is the constraint box (capped width + height) — an `<img>`/`<svg>` inside fills it 100% (aspect\n * kept), so you can pass an unsized logo and it's sized/centered for you.\n */\n logo?: ReactNode\n /** Optional glyph in a soft tinted circle above the title — an `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Bottom slot under the form — e.g. a \"Back to login\" / \"Sign up\" link row. */\n footer?: ReactNode\n /** Theme token that tints the `icon` circle. Defaults to `accent`. */\n color?: ThemeColor\n /** Max width of the centered card in px. Defaults to `400`. */\n maxWidth?: number\n /** The auth form (fields + submit) — usually a `<Form>`. */\n children?: ReactNode\n}\n\n/**\n * A ready-made, centered page frame for **authentication pages** (login, forgot-password,\n * reset-password, OTP, …) — so each page just supplies its `title` + form instead of hand-building the\n * layout. Fills the viewport (`100dvh`) with the app `background` canvas and vertically centers a\n * `logo` (on the canvas, above the card) + an elevated `surface` card, as a group. The card stacks: an\n * optional `icon` (in a soft tinted `Avatar` circle), the `title` + `subtitle` (centered), the\n * `children` (your form), and an optional `footer` (link row). Token-only styling; responsive.\n *\n * @example\n * <AuthLayout title=\"Login\" subtitle=\"Welcome back\" logo={<Logo />}>\n * <Form form={form}>…</Form>\n * </AuthLayout>\n */\nexport const AuthLayout = forwardRef<HTMLDivElement, AuthLayoutProps>(function AuthLayout(\n {\n title,\n subtitle,\n logo,\n icon,\n footer,\n color = 'accent',\n maxWidth = 400,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n return (\n <div ref={ref} className={clsx(styles.authLayout, className)} style={style} {...props}>\n {logo != null && <div className={styles.logo}>{logo}</div>}\n <div className={styles.card} style={{ maxWidth } as CSSProperties}>\n {icon != null && (\n <Avatar className={styles.icon} icon={icon} color={color} size=\"lg\" aria-hidden />\n )}\n {(title != null || subtitle != null) && (\n <div className={styles.header}>\n {title != null && (\n <Typography variant=\"h2\" align=\"center\">\n {title}\n </Typography>\n )}\n {subtitle != null && (\n <Typography color=\"muted\" align=\"center\">\n {subtitle}\n </Typography>\n )}\n </div>\n )}\n {children != null && <div className={styles.body}>{children}</div>}\n {footer != null && <div className={styles.footer}>{footer}</div>}\n </div>\n </div>\n )\n})\n"],"names":["AuthLayout","forwardRef","title","subtitle","logo","icon","footer","color","maxWidth","className","style","children","props","ref","jsxs","clsx","styles","jsx","Avatar","Typography"],"mappings":"8WA4CaA,EAAaC,EAAAA,WAA4C,SACpE,CACE,MAAAC,EACA,SAAAC,EACA,KAAAC,EACA,KAAAC,EACA,OAAAC,EACA,MAAAC,EAAQ,SACR,SAAAC,EAAW,IACX,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,OACEC,EAAAA,KAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,EAAAA,KAAKC,EAAO,WAAYP,CAAS,EAAG,MAAAC,EAAe,GAAGE,EAC7E,SAAA,CAAAR,GAAQ,MAAQa,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAO,KAAO,SAAAZ,EAAK,EACpDU,OAAC,OAAI,UAAWE,EAAO,KAAM,MAAO,CAAE,SAAAR,GACnC,SAAA,CAAAH,GAAQ,MACPY,EAAAA,IAACC,EAAAA,OAAA,CAAO,UAAWF,EAAO,KAAM,KAAAX,EAAY,MAAAE,EAAc,KAAK,KAAK,cAAW,EAAA,CAAC,GAEhFL,GAAS,MAAQC,GAAY,cAC5B,MAAA,CAAI,UAAWa,EAAO,OACpB,SAAA,CAAAd,GAAS,MACRe,MAACE,EAAAA,WAAA,CAAW,QAAQ,KAAK,MAAM,SAC5B,SAAAjB,CAAA,CACH,EAEDC,GAAY,MACXc,MAACE,EAAAA,WAAA,CAAW,MAAM,QAAQ,MAAM,SAC7B,SAAAhB,CAAA,CACH,CAAA,EAEJ,EAEDQ,GAAY,MAAQM,EAAAA,IAAC,OAAI,UAAWD,EAAO,KAAO,SAAAL,EAAS,EAC3DL,GAAU,MAAQW,EAAAA,IAAC,OAAI,UAAWD,EAAO,OAAS,SAAAV,CAAA,CAAO,CAAA,CAAA,CAC5D,CAAA,EACF,CAEJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as n, jsx as a } from "react/jsx-runtime";
2
2
  import { forwardRef as g } from "react";
3
3
  import { clsx as y } from "clsx";
4
- import { A as f } from "./Avatar-BJVCdo-K.js";
4
+ import { A as f } from "./Avatar-Q50J8wdN.js";
5
5
  import { T as u } from "./Typography-Cta6Rg4L.js";
6
6
  const p = "_authLayout_1vumg_3", N = "_logo_1vumg_20", L = "_card_1vumg_36", A = "_icon_1vumg_50", x = "_header_1vumg_55", b = "_body_1vumg_62", j = "_footer_1vumg_68", o = {
7
7
  authLayout: p,
@@ -40,4 +40,4 @@ const p = "_authLayout_1vumg_3", N = "_logo_1vumg_20", L = "_card_1vumg_36", A =
40
40
  export {
41
41
  B as A
42
42
  };
43
- //# sourceMappingURL=AuthLayout-j7EAPPXT.js.map
43
+ //# sourceMappingURL=AuthLayout-CP9qu6Bv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthLayout-j7EAPPXT.js","sources":["../src/components/AuthLayout/AuthLayout.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Typography } from '../Typography'\nimport type { IconName } from '../../icons/names'\nimport styles from './AuthLayout.module.css'\n\nexport interface AuthLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Heading — the page name (e.g. `\"Login\"`, `\"Forgot Password\"`, `\"Verify Code\"`). */\n title?: ReactNode\n /** Muted line under the title (e.g. `\"Enter your email to receive a reset link\"`). */\n subtitle?: ReactNode\n /**\n * Brand slot centered on the canvas, above the card (a logo `<img>` / `<svg>` / any node). The slot\n * is the constraint box (capped width + height) — an `<img>`/`<svg>` inside fills it 100% (aspect\n * kept), so you can pass an unsized logo and it's sized/centered for you.\n */\n logo?: ReactNode\n /** Optional glyph in a soft tinted circle above the title — an `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Bottom slot under the form — e.g. a \"Back to login\" / \"Sign up\" link row. */\n footer?: ReactNode\n /** Theme token that tints the `icon` circle. Defaults to `accent`. */\n color?: ThemeColor\n /** Max width of the centered card in px. Defaults to `400`. */\n maxWidth?: number\n /** The auth form (fields + submit) — usually a `<Form>`. */\n children?: ReactNode\n}\n\n/**\n * A ready-made, centered page frame for **authentication pages** (login, forgot-password,\n * reset-password, OTP, …) — so each page just supplies its `title` + form instead of hand-building the\n * layout. Fills the viewport (`100dvh`) with the app `background` canvas and vertically centers a\n * `logo` (on the canvas, above the card) + an elevated `surface` card, as a group. The card stacks: an\n * optional `icon` (in a soft tinted `Avatar` circle), the `title` + `subtitle` (centered), the\n * `children` (your form), and an optional `footer` (link row). Token-only styling; responsive.\n *\n * @example\n * <AuthLayout title=\"Login\" subtitle=\"Welcome back\" logo={<Logo />}>\n * <Form form={form}>…</Form>\n * </AuthLayout>\n */\nexport const AuthLayout = forwardRef<HTMLDivElement, AuthLayoutProps>(function AuthLayout(\n {\n title,\n subtitle,\n logo,\n icon,\n footer,\n color = 'accent',\n maxWidth = 400,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n return (\n <div ref={ref} className={clsx(styles.authLayout, className)} style={style} {...props}>\n {logo != null && <div className={styles.logo}>{logo}</div>}\n <div className={styles.card} style={{ maxWidth } as CSSProperties}>\n {icon != null && (\n <Avatar className={styles.icon} icon={icon} color={color} size=\"lg\" aria-hidden />\n )}\n {(title != null || subtitle != null) && (\n <div className={styles.header}>\n {title != null && (\n <Typography variant=\"h2\" align=\"center\">\n {title}\n </Typography>\n )}\n {subtitle != null && (\n <Typography color=\"muted\" align=\"center\">\n {subtitle}\n </Typography>\n )}\n </div>\n )}\n {children != null && <div className={styles.body}>{children}</div>}\n {footer != null && <div className={styles.footer}>{footer}</div>}\n </div>\n </div>\n )\n})\n"],"names":["AuthLayout","forwardRef","title","subtitle","logo","icon","footer","color","maxWidth","className","style","children","props","ref","jsxs","clsx","styles","jsx","Avatar","Typography"],"mappings":";;;;;;;;;;;;;GA4CaA,IAAaC,EAA4C,SACpE;AAAA,EACE,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,SACE,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAKC,EAAO,YAAYP,CAAS,GAAG,OAAAC,GAAe,GAAGE,GAC7E,UAAA;AAAA,IAAAR,KAAQ,QAAQ,gBAAAa,EAAC,OAAA,EAAI,WAAWD,EAAO,MAAO,UAAAZ,GAAK;AAAA,IACpD,gBAAAU,EAAC,SAAI,WAAWE,EAAO,MAAM,OAAO,EAAE,UAAAR,KACnC,UAAA;AAAA,MAAAH,KAAQ,QACP,gBAAAY,EAACC,GAAA,EAAO,WAAWF,EAAO,MAAM,MAAAX,GAAY,OAAAE,GAAc,MAAK,MAAK,eAAW,GAAA,CAAC;AAAA,OAEhFL,KAAS,QAAQC,KAAY,2BAC5B,OAAA,EAAI,WAAWa,EAAO,QACpB,UAAA;AAAA,QAAAd,KAAS,QACR,gBAAAe,EAACE,GAAA,EAAW,SAAQ,MAAK,OAAM,UAC5B,UAAAjB,EAAA,CACH;AAAA,QAEDC,KAAY,QACX,gBAAAc,EAACE,GAAA,EAAW,OAAM,SAAQ,OAAM,UAC7B,UAAAhB,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MAEDQ,KAAY,QAAQ,gBAAAM,EAAC,SAAI,WAAWD,EAAO,MAAO,UAAAL,GAAS;AAAA,MAC3DL,KAAU,QAAQ,gBAAAW,EAAC,SAAI,WAAWD,EAAO,QAAS,UAAAV,EAAA,CAAO;AAAA,IAAA,EAAA,CAC5D;AAAA,EAAA,GACF;AAEJ,CAAC;"}
1
+ {"version":3,"file":"AuthLayout-CP9qu6Bv.js","sources":["../src/components/AuthLayout/AuthLayout.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar } from '../Avatar'\nimport { Typography } from '../Typography'\nimport type { IconName } from '../../icons/names'\nimport styles from './AuthLayout.module.css'\n\nexport interface AuthLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Heading — the page name (e.g. `\"Login\"`, `\"Forgot Password\"`, `\"Verify Code\"`). */\n title?: ReactNode\n /** Muted line under the title (e.g. `\"Enter your email to receive a reset link\"`). */\n subtitle?: ReactNode\n /**\n * Brand slot centered on the canvas, above the card (a logo `<img>` / `<svg>` / any node). The slot\n * is the constraint box (capped width + height) — an `<img>`/`<svg>` inside fills it 100% (aspect\n * kept), so you can pass an unsized logo and it's sized/centered for you.\n */\n logo?: ReactNode\n /** Optional glyph in a soft tinted circle above the title — an `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Bottom slot under the form — e.g. a \"Back to login\" / \"Sign up\" link row. */\n footer?: ReactNode\n /** Theme token that tints the `icon` circle. Defaults to `accent`. */\n color?: ThemeColor\n /** Max width of the centered card in px. Defaults to `400`. */\n maxWidth?: number\n /** The auth form (fields + submit) — usually a `<Form>`. */\n children?: ReactNode\n}\n\n/**\n * A ready-made, centered page frame for **authentication pages** (login, forgot-password,\n * reset-password, OTP, …) — so each page just supplies its `title` + form instead of hand-building the\n * layout. Fills the viewport (`100dvh`) with the app `background` canvas and vertically centers a\n * `logo` (on the canvas, above the card) + an elevated `surface` card, as a group. The card stacks: an\n * optional `icon` (in a soft tinted `Avatar` circle), the `title` + `subtitle` (centered), the\n * `children` (your form), and an optional `footer` (link row). Token-only styling; responsive.\n *\n * @example\n * <AuthLayout title=\"Login\" subtitle=\"Welcome back\" logo={<Logo />}>\n * <Form form={form}>…</Form>\n * </AuthLayout>\n */\nexport const AuthLayout = forwardRef<HTMLDivElement, AuthLayoutProps>(function AuthLayout(\n {\n title,\n subtitle,\n logo,\n icon,\n footer,\n color = 'accent',\n maxWidth = 400,\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n return (\n <div ref={ref} className={clsx(styles.authLayout, className)} style={style} {...props}>\n {logo != null && <div className={styles.logo}>{logo}</div>}\n <div className={styles.card} style={{ maxWidth } as CSSProperties}>\n {icon != null && (\n <Avatar className={styles.icon} icon={icon} color={color} size=\"lg\" aria-hidden />\n )}\n {(title != null || subtitle != null) && (\n <div className={styles.header}>\n {title != null && (\n <Typography variant=\"h2\" align=\"center\">\n {title}\n </Typography>\n )}\n {subtitle != null && (\n <Typography color=\"muted\" align=\"center\">\n {subtitle}\n </Typography>\n )}\n </div>\n )}\n {children != null && <div className={styles.body}>{children}</div>}\n {footer != null && <div className={styles.footer}>{footer}</div>}\n </div>\n </div>\n )\n})\n"],"names":["AuthLayout","forwardRef","title","subtitle","logo","icon","footer","color","maxWidth","className","style","children","props","ref","jsxs","clsx","styles","jsx","Avatar","Typography"],"mappings":";;;;;;;;;;;;;GA4CaA,IAAaC,EAA4C,SACpE;AAAA,EACE,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,SACE,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAKC,EAAO,YAAYP,CAAS,GAAG,OAAAC,GAAe,GAAGE,GAC7E,UAAA;AAAA,IAAAR,KAAQ,QAAQ,gBAAAa,EAAC,OAAA,EAAI,WAAWD,EAAO,MAAO,UAAAZ,GAAK;AAAA,IACpD,gBAAAU,EAAC,SAAI,WAAWE,EAAO,MAAM,OAAO,EAAE,UAAAR,KACnC,UAAA;AAAA,MAAAH,KAAQ,QACP,gBAAAY,EAACC,GAAA,EAAO,WAAWF,EAAO,MAAM,MAAAX,GAAY,OAAAE,GAAc,MAAK,MAAK,eAAW,GAAA,CAAC;AAAA,OAEhFL,KAAS,QAAQC,KAAY,2BAC5B,OAAA,EAAI,WAAWa,EAAO,QACpB,UAAA;AAAA,QAAAd,KAAS,QACR,gBAAAe,EAACE,GAAA,EAAW,SAAQ,MAAK,OAAM,UAC5B,UAAAjB,EAAA,CACH;AAAA,QAEDC,KAAY,QACX,gBAAAc,EAACE,GAAA,EAAW,OAAM,SAAQ,OAAM,UAC7B,UAAAhB,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MAEDQ,KAAY,QAAQ,gBAAAM,EAAC,SAAI,WAAWD,EAAO,MAAO,UAAAL,GAAS;AAAA,MAC3DL,KAAU,QAAQ,gBAAAW,EAAC,SAAI,WAAWD,EAAO,QAAS,UAAAV,EAAA,CAAO;AAAA,IAAA,EAAA,CAC5D;AAAA,EAAA,GACF;AAEJ,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),_=require("react"),I=require("clsx"),g=require("./Icon-CXTl_QAP.cjs"),h=require("./names-C2Yj1p3u.cjs"),E="_avatar_1ttjj_3",k="_circle_1ttjj_16",A="_square_1ttjj_20",S="_img_1ttjj_24",y="_fallback_1ttjj_31",C="_sm_1ttjj_37",w="_md_1ttjj_43",R="_lg_1ttjj_49",U="_group_1ttjj_57",z="_item_1ttjj_62",e={avatar:E,circle:k,square:A,img:S,fallback:y,sm:C,md:w,lg:R,group:U,item:z},B=new Set(h.ICON_NAMES);function M(m){const t=m.trim().split(/\s+/).filter(Boolean);return t.length===0?"":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}const O=_.forwardRef(function({src:t,alt:v,icon:r,name:l,size:o="md",shape:d="circle",color:j="accent",className:b,style:p,children:c,...q},x){const[N,u]=_.useState(!1),f=_.useRef(t);f.current!==t&&(f.current=t,u(!1));const i=!!t&&!N,s=v??l;let a;return r!==void 0?a=typeof r=="string"&&B.has(r)?n.jsx(g.Icon,{name:r,size:o}):r:c!=null&&c!==""?a=c:l?a=M(l):a=n.jsx(g.Icon,{name:"User",size:o}),n.jsx("div",{ref:x,className:I.clsx(e.avatar,e[o],e[d],b),style:{"--tz-btn-rgb":`var(--tz-color-${j}-rgb)`,"--tz-btn-on":`var(--tz-color-${j}-contrast, #fff)`,...p},role:!i&&s?"img":void 0,"aria-label":!i&&s?s:void 0,...q,children:i?n.jsx("img",{src:t,alt:s??"",className:e.img,onError:()=>u(!0)}):n.jsx("span",{className:e.fallback,"aria-hidden":s?!0:void 0,children:a})})});exports.Avatar=O;exports.styles=e;
2
- //# sourceMappingURL=Avatar-_ufXh3AY.cjs.map
1
+ "use strict";const n=require("react/jsx-runtime"),_=require("react"),I=require("clsx"),g=require("./Icon-BVULqOJD.cjs"),h=require("./names-BJnFU_5m.cjs"),E="_avatar_1ttjj_3",k="_circle_1ttjj_16",A="_square_1ttjj_20",S="_img_1ttjj_24",y="_fallback_1ttjj_31",C="_sm_1ttjj_37",w="_md_1ttjj_43",R="_lg_1ttjj_49",U="_group_1ttjj_57",z="_item_1ttjj_62",e={avatar:E,circle:k,square:A,img:S,fallback:y,sm:C,md:w,lg:R,group:U,item:z},B=new Set(h.ICON_NAMES);function M(m){const t=m.trim().split(/\s+/).filter(Boolean);return t.length===0?"":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}const O=_.forwardRef(function({src:t,alt:v,icon:r,name:l,size:o="md",shape:d="circle",color:j="accent",className:b,style:p,children:c,...q},x){const[N,u]=_.useState(!1),f=_.useRef(t);f.current!==t&&(f.current=t,u(!1));const i=!!t&&!N,s=v??l;let a;return r!==void 0?a=typeof r=="string"&&B.has(r)?n.jsx(g.Icon,{name:r,size:o}):r:c!=null&&c!==""?a=c:l?a=M(l):a=n.jsx(g.Icon,{name:"User",size:o}),n.jsx("div",{ref:x,className:I.clsx(e.avatar,e[o],e[d],b),style:{"--tz-btn-rgb":`var(--tz-color-${j}-rgb)`,"--tz-btn-on":`var(--tz-color-${j}-contrast, #fff)`,...p},role:!i&&s?"img":void 0,"aria-label":!i&&s?s:void 0,...q,children:i?n.jsx("img",{src:t,alt:s??"",className:e.img,onError:()=>u(!0)}):n.jsx("span",{className:e.fallback,"aria-hidden":s?!0:void 0,children:a})})});exports.Avatar=O;exports.styles=e;
2
+ //# sourceMappingURL=Avatar-Dgf04PBC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar-_ufXh3AY.cjs","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport styles from './Avatar.module.css'\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\nexport type AvatarShape = 'circle' | 'square'\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** Image URL. When set (and it loads), the avatar shows the photo; on error it falls back. */\n src?: string\n /** Alt text for the image / accessible name for an icon-or-initials avatar (falls back to `name`). */\n alt?: string\n /** An icon to show when there's no image — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Full name — used to derive initials (e.g. \"David Savaneli\" → \"DS\") and as the accessible name. */\n name?: string\n /** Preset size: `sm` 32 · `md` 40 · `lg` 48 px. Defaults to `md`. */\n size?: AvatarSize\n /** `circle` (default) or `square` (rounded rectangle). */\n shape?: AvatarShape\n /** Theme palette token for the icon/initials background. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** First letters of the first and last word, uppercased — e.g. \"David Savaneli\" → \"DS\". */\nfunction initialsFromName(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\n/**\n * A user avatar that shows — in priority order — an image (`src`), an `icon`, explicit `children`\n * (e.g. initials `\"D.S.\"`), initials derived from `name`, or a default user icon. If the image fails\n * to load it falls back automatically. The icon/initials background is tinted by `color` via the\n * shared `--tz-btn-rgb` / `--tz-btn-on` pattern. Token-only styling; pairs with `AvatarGroup`.\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n icon,\n name,\n size = 'md',\n shape = 'circle',\n color = 'accent',\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const [imgError, setImgError] = useState(false)\n // reset the error when `src` changes, so a new/valid image isn't stuck on the fallback forever\n // (React-blessed \"adjust state on prop change\" — restarts the render, no fallback flash)\n const lastSrc = useRef(src)\n if (lastSrc.current !== src) {\n lastSrc.current = src\n setImgError(false)\n }\n const showImage = Boolean(src) && !imgError\n const label = alt ?? name\n\n let fallback: ReactNode\n if (icon !== undefined) {\n fallback =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n } else if (children != null && children !== '') {\n fallback = children\n } else if (name) {\n fallback = initialsFromName(name)\n } else {\n fallback = <Icon name=\"User\" size={size} />\n }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.avatar, styles[size], styles[shape], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n role={!showImage && label ? 'img' : undefined}\n aria-label={!showImage && label ? label : undefined}\n {...props}\n >\n {showImage ? (\n <img src={src} alt={label ?? ''} className={styles.img} onError={() => setImgError(true)} />\n ) : (\n <span className={styles.fallback} aria-hidden={label ? true : undefined}>\n {fallback}\n </span>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","initialsFromName","name","parts","Avatar","forwardRef","src","alt","icon","size","shape","color","className","style","children","props","ref","imgError","setImgError","useState","lastSrc","useRef","showImage","label","fallback","jsx","Icon","clsx","styles"],"mappings":"yaAkCMA,EAAgB,IAAI,IAAYC,YAAU,EAGhD,SAASC,EAAiBC,EAAsB,CAC9C,MAAMC,EAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO,EACrD,OAAIC,EAAM,SAAW,EAAU,GAC3BA,EAAM,SAAW,EAAUA,EAAM,CAAC,EAAE,MAAM,EAAG,CAAC,EAAE,YAAA,GAC5CA,EAAM,CAAC,EAAE,CAAC,EAAIA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAG,YAAA,CACpD,CAQO,MAAMC,EAASC,EAAAA,WAAwC,SAC5D,CACE,IAAAC,EACA,IAAAC,EACA,KAAAC,EACA,KAAAN,EACA,KAAAO,EAAO,KACP,MAAAC,EAAQ,SACR,MAAAC,EAAQ,SACR,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EAGxCC,EAAUC,EAAAA,OAAOf,CAAG,EACtBc,EAAQ,UAAYd,IACtBc,EAAQ,QAAUd,EAClBY,EAAY,EAAK,GAEnB,MAAMI,EAAY,EAAQhB,GAAQ,CAACW,EAC7BM,EAAQhB,GAAOL,EAErB,IAAIsB,EACJ,OAAIhB,IAAS,OACXgB,EACE,OAAOhB,GAAS,UAAYT,EAAc,IAAIS,CAAI,EAChDiB,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMlB,EAAkB,KAAAC,CAAA,CAAY,EAE1CD,EAEKM,GAAY,MAAQA,IAAa,GAC1CU,EAAWV,EACFZ,EACTsB,EAAWvB,EAAiBC,CAAI,EAEhCsB,EAAWC,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAK,OAAO,KAAAjB,EAAY,EAIzCgB,EAAAA,IAAC,MAAA,CACC,IAAAT,EACA,UAAWW,EAAAA,KAAKC,EAAO,OAAQA,EAAOnB,CAAI,EAAGmB,EAAOlB,CAAK,EAAGE,CAAS,EACrE,MACE,CACE,eAAgB,kBAAkBD,CAAK,QACvC,cAAe,kBAAkBA,CAAK,mBACtC,GAAGE,CAAA,EAGP,KAAM,CAACS,GAAaC,EAAQ,MAAQ,OACpC,aAAY,CAACD,GAAaC,EAAQA,EAAQ,OACzC,GAAGR,EAEH,SAAAO,EACCG,EAAAA,IAAC,MAAA,CAAI,IAAAnB,EAAU,IAAKiB,GAAS,GAAI,UAAWK,EAAO,IAAK,QAAS,IAAMV,EAAY,EAAI,CAAA,CAAG,EAE1FO,EAAAA,IAAC,OAAA,CAAK,UAAWG,EAAO,SAAU,cAAaL,EAAQ,GAAO,OAC3D,SAAAC,CAAA,CACH,CAAA,CAAA,CAIR,CAAC"}
1
+ {"version":3,"file":"Avatar-Dgf04PBC.cjs","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport styles from './Avatar.module.css'\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\nexport type AvatarShape = 'circle' | 'square'\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** Image URL. When set (and it loads), the avatar shows the photo; on error it falls back. */\n src?: string\n /** Alt text for the image / accessible name for an icon-or-initials avatar (falls back to `name`). */\n alt?: string\n /** An icon to show when there's no image — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Full name — used to derive initials (e.g. \"David Savaneli\" → \"DS\") and as the accessible name. */\n name?: string\n /** Preset size: `sm` 32 · `md` 40 · `lg` 48 px. Defaults to `md`. */\n size?: AvatarSize\n /** `circle` (default) or `square` (rounded rectangle). */\n shape?: AvatarShape\n /** Theme palette token for the icon/initials background. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** First letters of the first and last word, uppercased — e.g. \"David Savaneli\" → \"DS\". */\nfunction initialsFromName(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\n/**\n * A user avatar that shows — in priority order — an image (`src`), an `icon`, explicit `children`\n * (e.g. initials `\"D.S.\"`), initials derived from `name`, or a default user icon. If the image fails\n * to load it falls back automatically. The icon/initials background is tinted by `color` via the\n * shared `--tz-btn-rgb` / `--tz-btn-on` pattern. Token-only styling; pairs with `AvatarGroup`.\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n icon,\n name,\n size = 'md',\n shape = 'circle',\n color = 'accent',\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const [imgError, setImgError] = useState(false)\n // reset the error when `src` changes, so a new/valid image isn't stuck on the fallback forever\n // (React-blessed \"adjust state on prop change\" — restarts the render, no fallback flash)\n const lastSrc = useRef(src)\n if (lastSrc.current !== src) {\n lastSrc.current = src\n setImgError(false)\n }\n const showImage = Boolean(src) && !imgError\n const label = alt ?? name\n\n let fallback: ReactNode\n if (icon !== undefined) {\n fallback =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n } else if (children != null && children !== '') {\n fallback = children\n } else if (name) {\n fallback = initialsFromName(name)\n } else {\n fallback = <Icon name=\"User\" size={size} />\n }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.avatar, styles[size], styles[shape], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n role={!showImage && label ? 'img' : undefined}\n aria-label={!showImage && label ? label : undefined}\n {...props}\n >\n {showImage ? (\n <img src={src} alt={label ?? ''} className={styles.img} onError={() => setImgError(true)} />\n ) : (\n <span className={styles.fallback} aria-hidden={label ? true : undefined}>\n {fallback}\n </span>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","initialsFromName","name","parts","Avatar","forwardRef","src","alt","icon","size","shape","color","className","style","children","props","ref","imgError","setImgError","useState","lastSrc","useRef","showImage","label","fallback","jsx","Icon","clsx","styles"],"mappings":"yaAkCMA,EAAgB,IAAI,IAAYC,YAAU,EAGhD,SAASC,EAAiBC,EAAsB,CAC9C,MAAMC,EAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO,EACrD,OAAIC,EAAM,SAAW,EAAU,GAC3BA,EAAM,SAAW,EAAUA,EAAM,CAAC,EAAE,MAAM,EAAG,CAAC,EAAE,YAAA,GAC5CA,EAAM,CAAC,EAAE,CAAC,EAAIA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAG,YAAA,CACpD,CAQO,MAAMC,EAASC,EAAAA,WAAwC,SAC5D,CACE,IAAAC,EACA,IAAAC,EACA,KAAAC,EACA,KAAAN,EACA,KAAAO,EAAO,KACP,MAAAC,EAAQ,SACR,MAAAC,EAAQ,SACR,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EAGxCC,EAAUC,EAAAA,OAAOf,CAAG,EACtBc,EAAQ,UAAYd,IACtBc,EAAQ,QAAUd,EAClBY,EAAY,EAAK,GAEnB,MAAMI,EAAY,EAAQhB,GAAQ,CAACW,EAC7BM,EAAQhB,GAAOL,EAErB,IAAIsB,EACJ,OAAIhB,IAAS,OACXgB,EACE,OAAOhB,GAAS,UAAYT,EAAc,IAAIS,CAAI,EAChDiB,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAMlB,EAAkB,KAAAC,CAAA,CAAY,EAE1CD,EAEKM,GAAY,MAAQA,IAAa,GAC1CU,EAAWV,EACFZ,EACTsB,EAAWvB,EAAiBC,CAAI,EAEhCsB,EAAWC,EAAAA,IAACC,EAAAA,KAAA,CAAK,KAAK,OAAO,KAAAjB,EAAY,EAIzCgB,EAAAA,IAAC,MAAA,CACC,IAAAT,EACA,UAAWW,EAAAA,KAAKC,EAAO,OAAQA,EAAOnB,CAAI,EAAGmB,EAAOlB,CAAK,EAAGE,CAAS,EACrE,MACE,CACE,eAAgB,kBAAkBD,CAAK,QACvC,cAAe,kBAAkBA,CAAK,mBACtC,GAAGE,CAAA,EAGP,KAAM,CAACS,GAAaC,EAAQ,MAAQ,OACpC,aAAY,CAACD,GAAaC,EAAQA,EAAQ,OACzC,GAAGR,EAEH,SAAAO,EACCG,EAAAA,IAAC,MAAA,CAAI,IAAAnB,EAAU,IAAKiB,GAAS,GAAI,UAAWK,EAAO,IAAK,QAAS,IAAMV,EAAY,EAAI,CAAA,CAAG,EAE1FO,EAAAA,IAAC,OAAA,CAAK,UAAWG,EAAO,SAAU,cAAaL,EAAQ,GAAO,OAC3D,SAAAC,CAAA,CACH,CAAA,CAAA,CAIR,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as s } from "react/jsx-runtime";
2
2
  import { forwardRef as E, useState as I, useRef as k } from "react";
3
3
  import { clsx as A } from "clsx";
4
- import { I as j } from "./Icon-CophpkHo.js";
5
- import { a as S } from "./names-D8ABK2Wk.js";
4
+ import { I as j } from "./Icon-DaTvzLBu.js";
5
+ import { a as S } from "./names-r21QPjcU.js";
6
6
  const C = "_avatar_1ttjj_3", q = "_circle_1ttjj_16", w = "_square_1ttjj_20", x = "_img_1ttjj_24", y = "_fallback_1ttjj_31", U = "_sm_1ttjj_37", z = "_md_1ttjj_43", B = "_lg_1ttjj_49", M = "_group_1ttjj_57", O = "_item_1ttjj_62", o = {
7
7
  avatar: C,
8
8
  circle: q,
@@ -57,4 +57,4 @@ export {
57
57
  J as A,
58
58
  o as s
59
59
  };
60
- //# sourceMappingURL=Avatar-BJVCdo-K.js.map
60
+ //# sourceMappingURL=Avatar-Q50J8wdN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar-BJVCdo-K.js","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport styles from './Avatar.module.css'\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\nexport type AvatarShape = 'circle' | 'square'\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** Image URL. When set (and it loads), the avatar shows the photo; on error it falls back. */\n src?: string\n /** Alt text for the image / accessible name for an icon-or-initials avatar (falls back to `name`). */\n alt?: string\n /** An icon to show when there's no image — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Full name — used to derive initials (e.g. \"David Savaneli\" → \"DS\") and as the accessible name. */\n name?: string\n /** Preset size: `sm` 32 · `md` 40 · `lg` 48 px. Defaults to `md`. */\n size?: AvatarSize\n /** `circle` (default) or `square` (rounded rectangle). */\n shape?: AvatarShape\n /** Theme palette token for the icon/initials background. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** First letters of the first and last word, uppercased — e.g. \"David Savaneli\" → \"DS\". */\nfunction initialsFromName(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\n/**\n * A user avatar that shows — in priority order — an image (`src`), an `icon`, explicit `children`\n * (e.g. initials `\"D.S.\"`), initials derived from `name`, or a default user icon. If the image fails\n * to load it falls back automatically. The icon/initials background is tinted by `color` via the\n * shared `--tz-btn-rgb` / `--tz-btn-on` pattern. Token-only styling; pairs with `AvatarGroup`.\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n icon,\n name,\n size = 'md',\n shape = 'circle',\n color = 'accent',\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const [imgError, setImgError] = useState(false)\n // reset the error when `src` changes, so a new/valid image isn't stuck on the fallback forever\n // (React-blessed \"adjust state on prop change\" — restarts the render, no fallback flash)\n const lastSrc = useRef(src)\n if (lastSrc.current !== src) {\n lastSrc.current = src\n setImgError(false)\n }\n const showImage = Boolean(src) && !imgError\n const label = alt ?? name\n\n let fallback: ReactNode\n if (icon !== undefined) {\n fallback =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n } else if (children != null && children !== '') {\n fallback = children\n } else if (name) {\n fallback = initialsFromName(name)\n } else {\n fallback = <Icon name=\"User\" size={size} />\n }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.avatar, styles[size], styles[shape], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n role={!showImage && label ? 'img' : undefined}\n aria-label={!showImage && label ? label : undefined}\n {...props}\n >\n {showImage ? (\n <img src={src} alt={label ?? ''} className={styles.img} onError={() => setImgError(true)} />\n ) : (\n <span className={styles.fallback} aria-hidden={label ? true : undefined}>\n {fallback}\n </span>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","initialsFromName","name","parts","Avatar","forwardRef","src","alt","icon","size","shape","color","className","style","children","props","ref","imgError","setImgError","useState","lastSrc","useRef","showImage","label","fallback","jsx","Icon","clsx","styles"],"mappings":";;;;;;;;;;;;;;;;GAkCMA,IAAgB,IAAI,IAAYC,CAAU;AAGhD,SAASC,EAAiBC,GAAsB;AAC9C,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AACrD,SAAIC,EAAM,WAAW,IAAU,KAC3BA,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,YAAA,KAC5CA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAA;AACpD;AAQO,MAAMC,IAASC,EAAwC,SAC5D;AAAA,EACE,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAN;AAAA,EACA,MAAAO,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GAGxCC,IAAUC,EAAOf,CAAG;AAC1B,EAAIc,EAAQ,YAAYd,MACtBc,EAAQ,UAAUd,GAClBY,EAAY,EAAK;AAEnB,QAAMI,IAAY,EAAQhB,KAAQ,CAACW,GAC7BM,IAAQhB,KAAOL;AAErB,MAAIsB;AACJ,SAAIhB,MAAS,SACXgB,IACE,OAAOhB,KAAS,YAAYT,EAAc,IAAIS,CAAI,IAChD,gBAAAiB,EAACC,GAAA,EAAK,MAAMlB,GAAkB,MAAAC,EAAA,CAAY,IAE1CD,IAEKM,KAAY,QAAQA,MAAa,KAC1CU,IAAWV,IACFZ,IACTsB,IAAWvB,EAAiBC,CAAI,IAEhCsB,IAAW,gBAAAC,EAACC,GAAA,EAAK,MAAK,QAAO,MAAAjB,GAAY,GAIzC,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAT;AAAA,MACA,WAAWW,EAAKC,EAAO,QAAQA,EAAOnB,CAAI,GAAGmB,EAAOlB,CAAK,GAAGE,CAAS;AAAA,MACrE,OACE;AAAA,QACE,gBAAgB,kBAAkBD,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGE;AAAA,MAAA;AAAA,MAGP,MAAM,CAACS,KAAaC,IAAQ,QAAQ;AAAA,MACpC,cAAY,CAACD,KAAaC,IAAQA,IAAQ;AAAA,MACzC,GAAGR;AAAA,MAEH,UAAAO,IACC,gBAAAG,EAAC,OAAA,EAAI,KAAAnB,GAAU,KAAKiB,KAAS,IAAI,WAAWK,EAAO,KAAK,SAAS,MAAMV,EAAY,EAAI,EAAA,CAAG,IAE1F,gBAAAO,EAAC,QAAA,EAAK,WAAWG,EAAO,UAAU,eAAaL,IAAQ,KAAO,QAC3D,UAAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
1
+ {"version":3,"file":"Avatar-Q50J8wdN.js","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import {\n forwardRef,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Icon } from '../Icon'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport styles from './Avatar.module.css'\n\nexport type AvatarSize = 'sm' | 'md' | 'lg'\nexport type AvatarShape = 'circle' | 'square'\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** Image URL. When set (and it loads), the avatar shows the photo; on error it falls back. */\n src?: string\n /** Alt text for the image / accessible name for an icon-or-initials avatar (falls back to `name`). */\n alt?: string\n /** An icon to show when there's no image — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n /** Full name — used to derive initials (e.g. \"David Savaneli\" → \"DS\") and as the accessible name. */\n name?: string\n /** Preset size: `sm` 32 · `md` 40 · `lg` 48 px. Defaults to `md`. */\n size?: AvatarSize\n /** `circle` (default) or `square` (rounded rectangle). */\n shape?: AvatarShape\n /** Theme palette token for the icon/initials background. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\n/** First letters of the first and last word, uppercased — e.g. \"David Savaneli\" → \"DS\". */\nfunction initialsFromName(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\n/**\n * A user avatar that shows — in priority order — an image (`src`), an `icon`, explicit `children`\n * (e.g. initials `\"D.S.\"`), initials derived from `name`, or a default user icon. If the image fails\n * to load it falls back automatically. The icon/initials background is tinted by `color` via the\n * shared `--tz-btn-rgb` / `--tz-btn-on` pattern. Token-only styling; pairs with `AvatarGroup`.\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n icon,\n name,\n size = 'md',\n shape = 'circle',\n color = 'accent',\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const [imgError, setImgError] = useState(false)\n // reset the error when `src` changes, so a new/valid image isn't stuck on the fallback forever\n // (React-blessed \"adjust state on prop change\" — restarts the render, no fallback flash)\n const lastSrc = useRef(src)\n if (lastSrc.current !== src) {\n lastSrc.current = src\n setImgError(false)\n }\n const showImage = Boolean(src) && !imgError\n const label = alt ?? name\n\n let fallback: ReactNode\n if (icon !== undefined) {\n fallback =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={size} />\n ) : (\n icon\n )\n } else if (children != null && children !== '') {\n fallback = children\n } else if (name) {\n fallback = initialsFromName(name)\n } else {\n fallback = <Icon name=\"User\" size={size} />\n }\n\n return (\n <div\n ref={ref}\n className={clsx(styles.avatar, styles[size], styles[shape], className)}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n role={!showImage && label ? 'img' : undefined}\n aria-label={!showImage && label ? label : undefined}\n {...props}\n >\n {showImage ? (\n <img src={src} alt={label ?? ''} className={styles.img} onError={() => setImgError(true)} />\n ) : (\n <span className={styles.fallback} aria-hidden={label ? true : undefined}>\n {fallback}\n </span>\n )}\n </div>\n )\n})\n"],"names":["ICON_NAME_SET","ICON_NAMES","initialsFromName","name","parts","Avatar","forwardRef","src","alt","icon","size","shape","color","className","style","children","props","ref","imgError","setImgError","useState","lastSrc","useRef","showImage","label","fallback","jsx","Icon","clsx","styles"],"mappings":";;;;;;;;;;;;;;;;GAkCMA,IAAgB,IAAI,IAAYC,CAAU;AAGhD,SAASC,EAAiBC,GAAsB;AAC9C,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AACrD,SAAIC,EAAM,WAAW,IAAU,KAC3BA,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,YAAA,KAC5CA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAA;AACpD;AAQO,MAAMC,IAASC,EAAwC,SAC5D;AAAA,EACE,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAN;AAAA,EACA,MAAAO,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GAGxCC,IAAUC,EAAOf,CAAG;AAC1B,EAAIc,EAAQ,YAAYd,MACtBc,EAAQ,UAAUd,GAClBY,EAAY,EAAK;AAEnB,QAAMI,IAAY,EAAQhB,KAAQ,CAACW,GAC7BM,IAAQhB,KAAOL;AAErB,MAAIsB;AACJ,SAAIhB,MAAS,SACXgB,IACE,OAAOhB,KAAS,YAAYT,EAAc,IAAIS,CAAI,IAChD,gBAAAiB,EAACC,GAAA,EAAK,MAAMlB,GAAkB,MAAAC,EAAA,CAAY,IAE1CD,IAEKM,KAAY,QAAQA,MAAa,KAC1CU,IAAWV,IACFZ,IACTsB,IAAWvB,EAAiBC,CAAI,IAEhCsB,IAAW,gBAAAC,EAACC,GAAA,EAAK,MAAK,QAAO,MAAAjB,GAAY,GAIzC,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAT;AAAA,MACA,WAAWW,EAAKC,EAAO,QAAQA,EAAOnB,CAAI,GAAGmB,EAAOlB,CAAK,GAAGE,CAAS;AAAA,MACrE,OACE;AAAA,QACE,gBAAgB,kBAAkBD,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGE;AAAA,MAAA;AAAA,MAGP,MAAM,CAACS,KAAaC,IAAQ,QAAQ;AAAA,MACpC,cAAY,CAACD,KAAaC,IAAQA,IAAQ;AAAA,MACzC,GAAGR;AAAA,MAEH,UAAAO,IACC,gBAAAG,EAAC,OAAA,EAAI,KAAAnB,GAAU,KAAKiB,KAAS,IAAI,WAAWK,EAAO,KAAK,SAAS,MAAMV,EAAY,EAAI,EAAA,CAAG,IAE1F,gBAAAO,EAAC,QAAA,EAAK,WAAWG,EAAO,UAAU,eAAaL,IAAQ,KAAO,QAC3D,UAAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as m } from "react/jsx-runtime";
2
2
  import { forwardRef as x, Children as g, isValidElement as h, cloneElement as N } from "react";
3
3
  import { clsx as p } from "clsx";
4
- import { s as o, A as E } from "./Avatar-BJVCdo-K.js";
4
+ import { s as o, A as E } from "./Avatar-Q50J8wdN.js";
5
5
  const w = { sm: "-6px", md: "-8px", lg: "-10px" }, C = x(function({ children: c, max: t, size: r = "md", color: i = "accent", className: d, style: f, ...u }, A) {
6
6
  const a = g.toArray(c).filter(h), s = a.length, v = t && t > 0 && s > t ? t - 1 : s, l = a.slice(0, v), n = s - l.length;
7
7
  return /* @__PURE__ */ m(
@@ -30,4 +30,4 @@ const w = { sm: "-6px", md: "-8px", lg: "-10px" }, C = x(function({ children: c,
30
30
  export {
31
31
  C as A
32
32
  };
33
- //# sourceMappingURL=AvatarGroup-DdJf4aT7.js.map
33
+ //# sourceMappingURL=AvatarGroup-YaNasLMS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup-DdJf4aT7.js","sources":["../src/components/Avatar/AvatarGroup.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar, type AvatarProps, type AvatarSize } from './Avatar'\nimport styles from './Avatar.module.css'\n\nexport interface AvatarGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** `Avatar` elements to overlap. */\n children: ReactNode\n /** Show at most this many slots; the rest collapse into a trailing `+N` avatar. */\n max?: number\n /** Size applied to every avatar in the group (incl. the `+N`). Defaults to `md`. */\n size?: AvatarSize\n /** Theme palette token for the `+N` surplus avatar. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst OVERLAP: Record<AvatarSize, string> = { sm: '-6px', md: '-8px', lg: '-10px' }\n\n/**\n * Overlaps a row of `Avatar`s with a ring between them, and collapses the overflow past `max` into a\n * trailing `+N` avatar (like a stacked team list). All avatars are normalized to the group's `size`.\n * Token-only styling.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { children, max, size = 'md', color = 'accent', className, style, ...props },\n ref,\n) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<AvatarProps>[]\n const total = items.length\n const limit = max && max > 0 && total > max ? max - 1 : total\n const shown = items.slice(0, limit)\n const surplus = total - shown.length\n\n return (\n <div\n ref={ref}\n className={clsx(styles.group, className)}\n style={{ '--avatar-overlap': OVERLAP[size], ...style } as CSSProperties}\n {...props}\n >\n {shown.map((child, index) =>\n cloneElement(child, {\n size,\n className: clsx(styles.item, child.props.className),\n style: { zIndex: total - index, ...child.props.style } as CSSProperties,\n }),\n )}\n {surplus > 0 && (\n <Avatar size={size} color={color} className={styles.item} style={{ zIndex: 0 }}>\n +{surplus}\n </Avatar>\n )}\n </div>\n )\n})\n"],"names":["OVERLAP","AvatarGroup","forwardRef","children","max","size","color","className","style","props","ref","items","Children","isValidElement","total","limit","shown","surplus","jsxs","clsx","styles","child","index","cloneElement","Avatar"],"mappings":";;;;AA0BA,MAAMA,IAAsC,EAAE,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAA,GAO7DC,IAAcC,EAA6C,SACtE,EAAE,UAAAC,GAAU,KAAAC,GAAK,MAAAC,IAAO,MAAM,OAAAC,IAAQ,UAAU,WAAAC,GAAW,OAAAC,GAAO,GAAGC,EAAA,GACrEC,GACA;AACA,QAAMC,IAAQC,EAAS,QAAQT,CAAQ,EAAE,OAAOU,CAAc,GACxDC,IAAQH,EAAM,QACdI,IAAQX,KAAOA,IAAM,KAAKU,IAAQV,IAAMA,IAAM,IAAIU,GAClDE,IAAQL,EAAM,MAAM,GAAGI,CAAK,GAC5BE,IAAUH,IAAQE,EAAM;AAE9B,SACE,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAR;AAAA,MACA,WAAWS,EAAKC,EAAO,OAAOb,CAAS;AAAA,MACvC,OAAO,EAAE,oBAAoBP,EAAQK,CAAI,GAAG,GAAGG,EAAA;AAAA,MAC9C,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAO,EAAM;AAAA,UAAI,CAACK,GAAOC,MACjBC,EAAaF,GAAO;AAAA,YAClB,MAAAhB;AAAA,YACA,WAAWc,EAAKC,EAAO,MAAMC,EAAM,MAAM,SAAS;AAAA,YAClD,OAAO,EAAE,QAAQP,IAAQQ,GAAO,GAAGD,EAAM,MAAM,MAAA;AAAA,UAAM,CACtD;AAAA,QAAA;AAAA,QAEFJ,IAAU,KACT,gBAAAC,EAACM,GAAA,EAAO,MAAAnB,GAAY,OAAAC,GAAc,WAAWc,EAAO,MAAM,OAAO,EAAE,QAAQ,KAAK,UAAA;AAAA,UAAA;AAAA,UAC5EH;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
1
+ {"version":3,"file":"AvatarGroup-YaNasLMS.js","sources":["../src/components/Avatar/AvatarGroup.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Avatar, type AvatarProps, type AvatarSize } from './Avatar'\nimport styles from './Avatar.module.css'\n\nexport interface AvatarGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** `Avatar` elements to overlap. */\n children: ReactNode\n /** Show at most this many slots; the rest collapse into a trailing `+N` avatar. */\n max?: number\n /** Size applied to every avatar in the group (incl. the `+N`). Defaults to `md`. */\n size?: AvatarSize\n /** Theme palette token for the `+N` surplus avatar. Defaults to `accent`. */\n color?: ThemeColor\n}\n\nconst OVERLAP: Record<AvatarSize, string> = { sm: '-6px', md: '-8px', lg: '-10px' }\n\n/**\n * Overlaps a row of `Avatar`s with a ring between them, and collapses the overflow past `max` into a\n * trailing `+N` avatar (like a stacked team list). All avatars are normalized to the group's `size`.\n * Token-only styling.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { children, max, size = 'md', color = 'accent', className, style, ...props },\n ref,\n) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<AvatarProps>[]\n const total = items.length\n const limit = max && max > 0 && total > max ? max - 1 : total\n const shown = items.slice(0, limit)\n const surplus = total - shown.length\n\n return (\n <div\n ref={ref}\n className={clsx(styles.group, className)}\n style={{ '--avatar-overlap': OVERLAP[size], ...style } as CSSProperties}\n {...props}\n >\n {shown.map((child, index) =>\n cloneElement(child, {\n size,\n className: clsx(styles.item, child.props.className),\n style: { zIndex: total - index, ...child.props.style } as CSSProperties,\n }),\n )}\n {surplus > 0 && (\n <Avatar size={size} color={color} className={styles.item} style={{ zIndex: 0 }}>\n +{surplus}\n </Avatar>\n )}\n </div>\n )\n})\n"],"names":["OVERLAP","AvatarGroup","forwardRef","children","max","size","color","className","style","props","ref","items","Children","isValidElement","total","limit","shown","surplus","jsxs","clsx","styles","child","index","cloneElement","Avatar"],"mappings":";;;;AA0BA,MAAMA,IAAsC,EAAE,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAA,GAO7DC,IAAcC,EAA6C,SACtE,EAAE,UAAAC,GAAU,KAAAC,GAAK,MAAAC,IAAO,MAAM,OAAAC,IAAQ,UAAU,WAAAC,GAAW,OAAAC,GAAO,GAAGC,EAAA,GACrEC,GACA;AACA,QAAMC,IAAQC,EAAS,QAAQT,CAAQ,EAAE,OAAOU,CAAc,GACxDC,IAAQH,EAAM,QACdI,IAAQX,KAAOA,IAAM,KAAKU,IAAQV,IAAMA,IAAM,IAAIU,GAClDE,IAAQL,EAAM,MAAM,GAAGI,CAAK,GAC5BE,IAAUH,IAAQE,EAAM;AAE9B,SACE,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAR;AAAA,MACA,WAAWS,EAAKC,EAAO,OAAOb,CAAS;AAAA,MACvC,OAAO,EAAE,oBAAoBP,EAAQK,CAAI,GAAG,GAAGG,EAAA;AAAA,MAC9C,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAO,EAAM;AAAA,UAAI,CAACK,GAAOC,MACjBC,EAAaF,GAAO;AAAA,YAClB,MAAAhB;AAAA,YACA,WAAWc,EAAKC,EAAO,MAAMC,EAAM,MAAM,SAAS;AAAA,YAClD,OAAO,EAAE,QAAQP,IAAQQ,GAAO,GAAGD,EAAM,MAAM,MAAA;AAAA,UAAM,CACtD;AAAA,QAAA;AAAA,QAEFJ,IAAU,KACT,gBAAAC,EAACM,GAAA,EAAO,MAAAnB,GAAY,OAAAC,GAAc,WAAWc,EAAO,MAAM,OAAO,EAAE,QAAQ,KAAK,UAAA;AAAA,UAAA;AAAA,UAC5EH;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";const i=require("react/jsx-runtime"),e=require("react"),p=require("clsx"),r=require("./Avatar-_ufXh3AY.cjs"),g={sm:"-6px",md:"-8px",lg:"-10px"},h=e.forwardRef(function({children:u,max:s,size:l="md",color:m="accent",className:d,style:v,...x},y){const a=e.Children.toArray(u).filter(e.isValidElement),t=a.length,A=s&&s>0&&t>s?s-1:t,c=a.slice(0,A),o=t-c.length;return i.jsxs("div",{ref:y,className:p.clsx(r.styles.group,d),style:{"--avatar-overlap":g[l],...v},...x,children:[c.map((n,f)=>e.cloneElement(n,{size:l,className:p.clsx(r.styles.item,n.props.className),style:{zIndex:t-f,...n.props.style}})),o>0&&i.jsxs(r.Avatar,{size:l,color:m,className:r.styles.item,style:{zIndex:0},children:["+",o]})]})});exports.AvatarGroup=h;
2
- //# sourceMappingURL=AvatarGroup-TW1pt4tj.cjs.map
1
+ "use strict";const i=require("react/jsx-runtime"),e=require("react"),p=require("clsx"),r=require("./Avatar-Dgf04PBC.cjs"),g={sm:"-6px",md:"-8px",lg:"-10px"},h=e.forwardRef(function({children:u,max:s,size:l="md",color:m="accent",className:d,style:v,...x},y){const a=e.Children.toArray(u).filter(e.isValidElement),t=a.length,A=s&&s>0&&t>s?s-1:t,c=a.slice(0,A),o=t-c.length;return i.jsxs("div",{ref:y,className:p.clsx(r.styles.group,d),style:{"--avatar-overlap":g[l],...v},...x,children:[c.map((n,f)=>e.cloneElement(n,{size:l,className:p.clsx(r.styles.item,n.props.className),style:{zIndex:t-f,...n.props.style}})),o>0&&i.jsxs(r.Avatar,{size:l,color:m,className:r.styles.item,style:{zIndex:0},children:["+",o]})]})});exports.AvatarGroup=h;
2
+ //# sourceMappingURL=AvatarGroup-uW0SD5P4.cjs.map