@soyfri/shared-library 2.0.0-beta8 → 3.0.0

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 (370) hide show
  1. package/Alert-B3SMPD1s.cjs +31 -0
  2. package/Alert-B3SMPD1s.cjs.map +1 -0
  3. package/Alert-YsPScpSE.js +32 -0
  4. package/Alert-YsPScpSE.js.map +1 -0
  5. package/{Autocomplete-BA-cGASd.js → Autocomplete-C_lW1VER.js} +57 -36
  6. package/Autocomplete-C_lW1VER.js.map +1 -0
  7. package/{Autocomplete-C2x-lBvZ.cjs → Autocomplete-CejWztBY.cjs} +56 -35
  8. package/Autocomplete-CejWztBY.cjs.map +1 -0
  9. package/{Avatar-9L7YMxya.cjs → Avatar-Dw5rzayR.cjs} +28 -24
  10. package/Avatar-Dw5rzayR.cjs.map +1 -0
  11. package/{Avatar-BJTr-PBd.js → Avatar-H8akSege.js} +28 -24
  12. package/Avatar-H8akSege.js.map +1 -0
  13. package/Breadcrumbs-B9I3vxPb.cjs +25 -0
  14. package/Breadcrumbs-B9I3vxPb.cjs.map +1 -0
  15. package/Breadcrumbs-C41SPbtX.js +26 -0
  16. package/Breadcrumbs-C41SPbtX.js.map +1 -0
  17. package/Button-C17mExpd.cjs.map +1 -1
  18. package/Button-UkkP-bNw.js.map +1 -1
  19. package/ButtonGroup-CNunDofQ.cjs +33 -0
  20. package/ButtonGroup-CNunDofQ.cjs.map +1 -0
  21. package/ButtonGroup-CcKUZ-lT.js +34 -0
  22. package/ButtonGroup-CcKUZ-lT.js.map +1 -0
  23. package/Card-DYKGY-NG.js +116 -0
  24. package/Card-DYKGY-NG.js.map +1 -0
  25. package/Card-Dr1-ATRY.cjs +115 -0
  26. package/Card-Dr1-ATRY.cjs.map +1 -0
  27. package/Checkbox-BCqMFWt4.cjs +187 -0
  28. package/Checkbox-BCqMFWt4.cjs.map +1 -0
  29. package/Checkbox-gB5YKkVo.js +188 -0
  30. package/Checkbox-gB5YKkVo.js.map +1 -0
  31. package/{DatePicker-8f_9bwhS.js → DatePicker-_IGWc3I5.js} +38 -62
  32. package/DatePicker-_IGWc3I5.js.map +1 -0
  33. package/{DatePicker-DLSfkgGA.cjs → DatePicker-t7uDTZMl.cjs} +42 -66
  34. package/DatePicker-t7uDTZMl.cjs.map +1 -0
  35. package/{DateTimePicker-CWNW09-O.cjs → DateTimePicker-BxQyjTCY.cjs} +33 -24
  36. package/DateTimePicker-BxQyjTCY.cjs.map +1 -0
  37. package/{DateTimePicker-D4L9GAod.js → DateTimePicker-CrmWav_j.js} +29 -20
  38. package/DateTimePicker-CrmWav_j.js.map +1 -0
  39. package/Divider-BApcM5CV.js +28 -0
  40. package/Divider-BApcM5CV.js.map +1 -0
  41. package/Divider-CIY0JK4U.cjs +27 -0
  42. package/Divider-CIY0JK4U.cjs.map +1 -0
  43. package/{Input-DI0jfq5X.cjs → Input-CScC87J5.cjs} +28 -16
  44. package/Input-CScC87J5.cjs.map +1 -0
  45. package/{Input-Cp911l23.js → Input-DP_fKl38.js} +25 -13
  46. package/Input-DP_fKl38.js.map +1 -0
  47. package/{Modal-Bnz6d9m9.js → Modal-C_QY7ZzY.js} +137 -105
  48. package/Modal-C_QY7ZzY.js.map +1 -0
  49. package/{Modal-Bm_HH9cv.cjs → Modal-D_6ZdSzw.cjs} +132 -100
  50. package/Modal-D_6ZdSzw.cjs.map +1 -0
  51. package/README.md +188 -172
  52. package/{RadioGroup-CxqDHap1.cjs → RadioGroup-Dd0rHXSX.cjs} +10 -8
  53. package/RadioGroup-Dd0rHXSX.cjs.map +1 -0
  54. package/{RadioGroup-DMi9FvMP.js → RadioGroup-bO-ahP9T.js} +10 -8
  55. package/RadioGroup-bO-ahP9T.js.map +1 -0
  56. package/{Select-3CBOfM2H.js → Select-BY5Y0qZ1.js} +160 -231
  57. package/Select-BY5Y0qZ1.js.map +1 -0
  58. package/{Select-Bku4f4f8.cjs → Select-CURrHSyl.cjs} +155 -226
  59. package/Select-CURrHSyl.cjs.map +1 -0
  60. package/Spinner-B6sThC1p.js +74 -0
  61. package/Spinner-B6sThC1p.js.map +1 -0
  62. package/Spinner-D7qRmNS9.cjs +73 -0
  63. package/Spinner-D7qRmNS9.cjs.map +1 -0
  64. package/StatusMessage-B3nXpuRl.cjs +88 -0
  65. package/StatusMessage-B3nXpuRl.cjs.map +1 -0
  66. package/StatusMessage-D0WgSBx7.js +89 -0
  67. package/StatusMessage-D0WgSBx7.js.map +1 -0
  68. package/Step-BArsou1V.js +301 -0
  69. package/Step-BArsou1V.js.map +1 -0
  70. package/Step-Nd7SJbRZ.cjs +300 -0
  71. package/Step-Nd7SJbRZ.cjs.map +1 -0
  72. package/{Switch-BIeobv6i.cjs → Switch-CQFOopYy.cjs} +6 -3
  73. package/Switch-CQFOopYy.cjs.map +1 -0
  74. package/{Switch-DQEOxM2R.js → Switch-D72dpkH2.js} +6 -3
  75. package/Switch-D72dpkH2.js.map +1 -0
  76. package/Tab-D1S7kxXI.cjs +137 -0
  77. package/Tab-D1S7kxXI.cjs.map +1 -0
  78. package/Tab-DycIMXmQ.js +138 -0
  79. package/Tab-DycIMXmQ.js.map +1 -0
  80. package/components/ActionMenu/ActionMenu.cjs +52 -52
  81. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  82. package/components/ActionMenu/ActionMenu.d.ts +20 -36
  83. package/components/ActionMenu/ActionMenu.js +55 -55
  84. package/components/ActionMenu/ActionMenu.js.map +1 -1
  85. package/components/ActionMenu/index.d.ts +2 -2
  86. package/components/Alert/Alert.cjs +6 -0
  87. package/components/Alert/Alert.cjs.map +1 -0
  88. package/components/Alert/Alert.d.ts +31 -0
  89. package/components/Alert/Alert.js +6 -0
  90. package/components/Alert/Alert.js.map +1 -0
  91. package/components/Alert/index.d.ts +2 -0
  92. package/components/Alert.d.ts +6 -0
  93. package/components/AppBar/AppBar.cjs +2 -219
  94. package/components/AppBar/AppBar.cjs.map +1 -1
  95. package/components/AppBar/AppBar.d.ts +6 -6
  96. package/components/AppBar/AppBar.js +5 -222
  97. package/components/AppBar/AppBar.js.map +1 -1
  98. package/components/AppBar/index.d.ts +0 -6
  99. package/components/Autocomplete/Autocomplete.cjs +1 -1
  100. package/components/Autocomplete/Autocomplete.d.ts +8 -6
  101. package/components/Autocomplete/Autocomplete.helpers.d.ts +8 -4
  102. package/components/Autocomplete/Autocomplete.js +1 -1
  103. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +5 -8
  104. package/components/Autocomplete/index.d.ts +1 -1
  105. package/components/Avatar/Avatar.cjs +1 -1
  106. package/components/Avatar/Avatar.d.ts +16 -1
  107. package/components/Avatar/Avatar.js +1 -1
  108. package/components/Avatar/index.d.ts +1 -0
  109. package/components/Breadcrumbs/Breadcrumbs.cjs +6 -0
  110. package/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -0
  111. package/components/Breadcrumbs/Breadcrumbs.d.ts +16 -0
  112. package/components/Breadcrumbs/Breadcrumbs.js +6 -0
  113. package/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
  114. package/components/Breadcrumbs/index.d.ts +2 -0
  115. package/components/Breadcrumbs.d.ts +6 -0
  116. package/components/Button/Button.d.ts +5 -5
  117. package/components/Button/index.d.ts +1 -0
  118. package/components/ButtonGroup/ButtonGroup.cjs +6 -0
  119. package/components/ButtonGroup/ButtonGroup.cjs.map +1 -0
  120. package/components/ButtonGroup/ButtonGroup.d.ts +18 -0
  121. package/components/ButtonGroup/ButtonGroup.js +6 -0
  122. package/components/ButtonGroup/ButtonGroup.js.map +1 -0
  123. package/components/ButtonGroup/index.d.ts +2 -0
  124. package/components/ButtonGroup.d.ts +6 -0
  125. package/components/Card/Card.cjs +1 -4
  126. package/components/Card/Card.cjs.map +1 -1
  127. package/components/Card/Card.d.ts +21 -50
  128. package/components/Card/Card.js +1 -4
  129. package/components/Card/Card.sx.d.ts +3 -6
  130. package/components/Card/index.d.ts +1 -1
  131. package/components/Checkbox/Checkbox.cjs +6 -0
  132. package/components/Checkbox/Checkbox.cjs.map +1 -0
  133. package/components/Checkbox/Checkbox.d.ts +55 -0
  134. package/components/Checkbox/Checkbox.js +6 -0
  135. package/components/Checkbox/Checkbox.js.map +1 -0
  136. package/components/Checkbox/Checkbox.sx.d.ts +13 -0
  137. package/components/Checkbox/index.d.ts +2 -0
  138. package/components/Checkbox.d.ts +6 -0
  139. package/components/Chip/Chip.cjs +2 -1
  140. package/components/Chip/Chip.cjs.map +1 -1
  141. package/components/Chip/Chip.js +3 -2
  142. package/components/Chip/index.d.ts +2 -1
  143. package/components/Chip.d.ts +4 -0
  144. package/components/DatePicker/DatePicker.cjs +1 -1
  145. package/components/DatePicker/DatePicker.d.ts +1 -13
  146. package/components/DatePicker/DatePicker.js +1 -1
  147. package/components/DatePicker/index.d.ts +1 -1
  148. package/components/DateTimePicker/DateTimePicker.cjs +1 -1
  149. package/components/DateTimePicker/DateTimePicker.d.ts +10 -6
  150. package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
  151. package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
  152. package/components/DateTimePicker/DateTimePicker.js +1 -1
  153. package/components/DateTimePicker/index.d.ts +1 -1
  154. package/components/Divider/Divider.cjs +6 -0
  155. package/components/Divider/Divider.cjs.map +1 -0
  156. package/components/Divider/Divider.d.ts +17 -0
  157. package/components/Divider/Divider.js +6 -0
  158. package/components/Divider/Divider.js.map +1 -0
  159. package/components/Divider/index.d.ts +2 -0
  160. package/components/Divider.d.ts +6 -0
  161. package/components/Drawer/Drawer.cjs +10 -6
  162. package/components/Drawer/Drawer.cjs.map +1 -1
  163. package/components/Drawer/Drawer.js +11 -7
  164. package/components/Drawer/Drawer.js.map +1 -1
  165. package/components/Drawer/DrawerItem.d.ts +6 -1
  166. package/components/Gallery/Gallery.cjs +154 -79
  167. package/components/Gallery/Gallery.cjs.map +1 -1
  168. package/components/Gallery/Gallery.d.ts +25 -9
  169. package/components/Gallery/Gallery.js +154 -79
  170. package/components/Gallery/Gallery.js.map +1 -1
  171. package/components/Gallery/GalleryLightbox.d.ts +6 -10
  172. package/components/Gallery/GalleryMain.d.ts +3 -7
  173. package/components/Gallery/GalleryThumbnails.d.ts +7 -11
  174. package/components/Gallery/index.d.ts +2 -1
  175. package/components/Gallery.d.ts +4 -0
  176. package/components/Icon/Icon.cjs +6 -8
  177. package/components/Icon/Icon.cjs.map +1 -1
  178. package/components/Icon/Icon.d.ts +11 -17
  179. package/components/Icon/Icon.js +6 -8
  180. package/components/Icon/Icon.js.map +1 -1
  181. package/components/Icon/index.d.ts +2 -1
  182. package/components/Icon.d.ts +4 -0
  183. package/components/Input/Input.cjs +1 -1
  184. package/components/Input/Input.d.ts +9 -2
  185. package/components/Input/Input.helpers.d.ts +3 -3
  186. package/components/Input/Input.js +1 -1
  187. package/components/Input/index.d.ts +1 -1
  188. package/components/InputGroup/InputGroup.cjs +23 -22
  189. package/components/InputGroup/InputGroup.cjs.map +1 -1
  190. package/components/InputGroup/InputGroup.d.ts +4 -4
  191. package/components/InputGroup/InputGroup.js +22 -21
  192. package/components/InputGroup/InputGroup.js.map +1 -1
  193. package/components/InputGroup/index.d.ts +2 -1
  194. package/components/InputGroup.d.ts +4 -0
  195. package/components/Modal/Modal.cjs +2 -2
  196. package/components/Modal/Modal.d.ts +27 -5
  197. package/components/Modal/Modal.js +2 -2
  198. package/components/Modal/ModalBody.d.ts +6 -1
  199. package/components/Modal/ModalFooter.d.ts +4 -4
  200. package/components/Modal/ModalHeader.d.ts +6 -1
  201. package/components/Modal/index.d.ts +3 -2
  202. package/components/RadioGroup/RadioGroup.cjs +1 -1
  203. package/components/RadioGroup/RadioGroup.d.ts +9 -3
  204. package/components/RadioGroup/RadioGroup.js +1 -1
  205. package/components/RadioGroup/index.d.ts +1 -1
  206. package/components/Select/Select.cjs +1 -1
  207. package/components/Select/Select.d.ts +37 -18
  208. package/components/Select/Select.helpers.d.ts +5 -19
  209. package/components/Select/Select.js +1 -1
  210. package/components/Select/index.d.ts +1 -1
  211. package/components/Spinner/Spinner.cjs +6 -0
  212. package/components/Spinner/Spinner.cjs.map +1 -0
  213. package/components/Spinner/Spinner.d.ts +26 -0
  214. package/components/Spinner/Spinner.js +6 -0
  215. package/components/Spinner/Spinner.js.map +1 -0
  216. package/components/Spinner/index.d.ts +2 -0
  217. package/components/Spinner.d.ts +6 -0
  218. package/components/Stat/Stat.cjs +2 -2
  219. package/components/Stat/Stat.js +3 -3
  220. package/components/Stat/Stat.js.map +1 -1
  221. package/components/Stat/index.d.ts +2 -1
  222. package/components/Stat.d.ts +4 -0
  223. package/components/StatusMessage/StatusMessage.cjs +1 -1
  224. package/components/StatusMessage/StatusMessage.d.ts +20 -36
  225. package/components/StatusMessage/StatusMessage.js +1 -1
  226. package/components/Stepper/Stepper.cjs +6 -2
  227. package/components/Stepper/Stepper.cjs.map +1 -1
  228. package/components/Stepper/Stepper.d.ts +9 -8
  229. package/components/Stepper/Stepper.js +6 -2
  230. package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +28 -22
  231. package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
  232. package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
  233. package/components/Stepper/index.d.ts +6 -2
  234. package/components/Stepper.d.ts +4 -0
  235. package/components/Switch/Switch.cjs +1 -1
  236. package/components/Switch/Switch.d.ts +7 -2
  237. package/components/Switch/Switch.js +1 -1
  238. package/components/Tabs/Tab.d.ts +13 -2
  239. package/components/Tabs/Tabs.cjs +3 -2
  240. package/components/Tabs/Tabs.cjs.map +1 -1
  241. package/components/Tabs/Tabs.d.ts +33 -16
  242. package/components/Tabs/Tabs.js +3 -2
  243. package/components/Tabs/index.d.ts +4 -2
  244. package/components/Tabs.d.ts +4 -0
  245. package/components/Timeline/Timeline.cjs +3 -2
  246. package/components/Timeline/Timeline.cjs.map +1 -1
  247. package/components/Timeline/Timeline.d.ts +4 -8
  248. package/components/Timeline/Timeline.js +3 -2
  249. package/components/Timeline/Timeline.js.map +1 -1
  250. package/components/Timeline/index.d.ts +4 -2
  251. package/components/Timeline.d.ts +4 -0
  252. package/components/_shared/mergeSx.d.ts +7 -0
  253. package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
  254. package/formField.sx-8_QRnKxv.js.map +1 -0
  255. package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
  256. package/formField.sx-BAX7KwMR.cjs.map +1 -0
  257. package/index.cjs +49 -26
  258. package/index.cjs.map +1 -1
  259. package/index.d.ts +13 -1
  260. package/index.js +45 -25
  261. package/index.js.map +1 -1
  262. package/local/affiliations/affiliations.dev.soyfri.com-key.pem +28 -0
  263. package/local/affiliations/affiliations.dev.soyfri.com.pem +27 -0
  264. package/local/aficiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
  265. package/local/aficiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
  266. package/local/afiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
  267. package/local/afiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
  268. package/local/root/rootCA-key.pem +40 -0
  269. package/local/root/rootCA.pem +30 -0
  270. package/local/soporte/supportweb.dev.soyfri.com-key.pem +28 -0
  271. package/local/soporte/supportweb.dev.soyfri.com.pem +27 -0
  272. package/local/support/supportweb.dev.soyfri.com-key.pem +28 -0
  273. package/local/support/supportweb.dev.soyfri.com.pem +27 -0
  274. package/mergeSx-BXoNZjB_.js +10 -0
  275. package/mergeSx-BXoNZjB_.js.map +1 -0
  276. package/mergeSx-Dbccoo_H.cjs +9 -0
  277. package/mergeSx-Dbccoo_H.cjs.map +1 -0
  278. package/mui.d.ts +2 -1
  279. package/package.json +83 -76
  280. package/theme/componentStyles.d.ts +1 -1
  281. package/tokens-BRrcP_p_.js +21 -0
  282. package/tokens-BRrcP_p_.js.map +1 -0
  283. package/tokens-jaWWNk39.cjs +20 -0
  284. package/tokens-jaWWNk39.cjs.map +1 -0
  285. package/utils/index.d.ts +2 -0
  286. package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
  287. package/Autocomplete-BA-cGASd.js.map +0 -1
  288. package/Autocomplete-C2x-lBvZ.cjs.map +0 -1
  289. package/Avatar-9L7YMxya.cjs.map +0 -1
  290. package/Avatar-BJTr-PBd.js.map +0 -1
  291. package/Card-DG_crfkK.cjs +0 -185
  292. package/Card-DG_crfkK.cjs.map +0 -1
  293. package/Card-Ug-ttVSh.js +0 -186
  294. package/Card-Ug-ttVSh.js.map +0 -1
  295. package/DatePicker-8f_9bwhS.js.map +0 -1
  296. package/DatePicker-DLSfkgGA.cjs.map +0 -1
  297. package/DateRangePicker-BVpeJCHI.js +0 -76
  298. package/DateRangePicker-BVpeJCHI.js.map +0 -1
  299. package/DateRangePicker-B_hKQhbj.cjs +0 -75
  300. package/DateRangePicker-B_hKQhbj.cjs.map +0 -1
  301. package/DateTimePicker-CWNW09-O.cjs.map +0 -1
  302. package/DateTimePicker-D4L9GAod.js.map +0 -1
  303. package/Input-Cp911l23.js.map +0 -1
  304. package/Input-DI0jfq5X.cjs.map +0 -1
  305. package/Modal-Bm_HH9cv.cjs.map +0 -1
  306. package/Modal-Bnz6d9m9.js.map +0 -1
  307. package/RadioGroup-CxqDHap1.cjs.map +0 -1
  308. package/RadioGroup-DMi9FvMP.js.map +0 -1
  309. package/Select-3CBOfM2H.js.map +0 -1
  310. package/Select-Bku4f4f8.cjs.map +0 -1
  311. package/StatusMessage-C5B6oGZ_.cjs +0 -78
  312. package/StatusMessage-C5B6oGZ_.cjs.map +0 -1
  313. package/StatusMessage-D1GlfQdz.js +0 -79
  314. package/StatusMessage-D1GlfQdz.js.map +0 -1
  315. package/Step-Dq0N72YB.js +0 -49
  316. package/Step-Dq0N72YB.js.map +0 -1
  317. package/Step-a8U8O-91.cjs +0 -48
  318. package/Step-a8U8O-91.cjs.map +0 -1
  319. package/Switch-BIeobv6i.cjs.map +0 -1
  320. package/Switch-DQEOxM2R.js.map +0 -1
  321. package/Tab-Co31KY2k.cjs +0 -95
  322. package/Tab-Co31KY2k.cjs.map +0 -1
  323. package/Tab-DiK62gRz.js +0 -96
  324. package/Tab-DiK62gRz.js.map +0 -1
  325. package/components/AppBar/AppBarBrand.d.ts +0 -31
  326. package/components/AppBar/AppBarUserMenu.d.ts +0 -65
  327. package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
  328. package/components/DatePicker/DatePicker.types.d.ts +0 -1
  329. package/components/DateRangePicker/DateRangePicker.cjs +0 -5
  330. package/components/DateRangePicker/DateRangePicker.cjs.map +0 -1
  331. package/components/DateRangePicker/DateRangePicker.d.ts +0 -15
  332. package/components/DateRangePicker/DateRangePicker.definitions.d.ts +0 -6
  333. package/components/DateRangePicker/DateRangePicker.js +0 -5
  334. package/components/DateRangePicker/DateRangePicker.js.map +0 -1
  335. package/components/DateRangePicker/index.d.ts +0 -1
  336. package/components/DateRangePicker.d.ts +0 -2
  337. package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
  338. package/components/Input/Input.types.d.ts +0 -1
  339. package/components/PageLoader/PageLoader.cjs +0 -61
  340. package/components/PageLoader/PageLoader.cjs.map +0 -1
  341. package/components/PageLoader/PageLoader.d.ts +0 -38
  342. package/components/PageLoader/PageLoader.js +0 -61
  343. package/components/PageLoader/PageLoader.js.map +0 -1
  344. package/components/PageLoader/index.d.ts +0 -2
  345. package/components/PageLoader.d.ts +0 -6
  346. package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
  347. package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
  348. package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
  349. package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
  350. package/components/ScrollTopButton/ScrollTopButton.js +0 -79
  351. package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
  352. package/components/ScrollTopButton/index.d.ts +0 -4
  353. package/components/ScrollTopButton.d.ts +0 -6
  354. package/components/Select/Select.definitions.d.ts +0 -17
  355. package/components/Select/Select.types.d.ts +0 -1
  356. package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
  357. package/formField.sx-CQ1mbk9M.cjs.map +0 -1
  358. package/formField.sx-DfVbMe0V.js.map +0 -1
  359. package/hooks/Wizard/Wizard.cjs +0 -7
  360. package/hooks/Wizard/Wizard.cjs.map +0 -1
  361. package/hooks/Wizard/Wizard.js +0 -7
  362. package/hooks/Wizard/Wizard.js.map +0 -1
  363. package/hooks/Wizard/index.d.ts +0 -3
  364. package/hooks/Wizard/useWizard.d.ts +0 -9
  365. package/hooks/Wizard.d.ts +0 -2
  366. package/useWizard-CWdIxZzX.cjs +0 -94
  367. package/useWizard-CWdIxZzX.cjs.map +0 -1
  368. package/useWizard-CWq--C3o.js +0 -95
  369. package/useWizard-CWq--C3o.js.map +0 -1
  370. /package/{styles.css → index.css} +0 -0
@@ -47,6 +47,9 @@ const mergeSx = (base, extra) => {
47
47
  };
48
48
  const Avatar = ({
49
49
  items,
50
+ src,
51
+ alt,
52
+ fallback,
50
53
  type,
51
54
  displayedAvatars = 4,
52
55
  size = "sm",
@@ -58,20 +61,23 @@ const Avatar = ({
58
61
  overlap
59
62
  }) => {
60
63
  var _a;
61
- const [errorIndex, setErrorIndex] = React.useState(/* @__PURE__ */ new Set());
62
- const handleImageError = (index) => {
63
- setErrorIndex((prev) => {
64
+ const resolvedItems = items && items.length > 0 ? items : src || fallback ? [{ imageUrl: src, text: alt, content: fallback }] : [];
65
+ const showCaption = items && items.length > 0 ? showText : false;
66
+ const [failedUrls, setFailedUrls] = React.useState(/* @__PURE__ */ new Set());
67
+ const handleImageError = (url) => {
68
+ setFailedUrls((prev) => {
69
+ if (prev.has(url)) return prev;
64
70
  const next = new Set(prev);
65
- next.add(index);
71
+ next.add(url);
66
72
  return next;
67
73
  });
68
74
  };
69
- if (!items || items.length === 0) {
75
+ if (resolvedItems.length === 0) {
70
76
  return null;
71
77
  }
72
78
  const s = resolveSize(size);
73
79
  const effectiveOverlap = overlap != null ? overlap : s.overlap;
74
- const visibleItems = items.slice(0, displayedAvatars);
80
+ const visibleItems = resolvedItems.slice(0, displayedAvatars);
75
81
  const baseAvatarSx = {
76
82
  width: s.px,
77
83
  height: s.px,
@@ -81,12 +87,13 @@ const Avatar = ({
81
87
  boxSizing: "content-box"
82
88
  };
83
89
  const renderSingleAvatar = (item, i) => {
84
- var _a2, _b;
85
- const hasImage = !!item.imageUrl && !errorIndex.has(i);
90
+ var _a2, _b, _c, _d, _e;
91
+ const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);
86
92
  const showBadgeFallback = !!item.badge;
93
+ const itemKey = (_c = item.imageUrl) != null ? _c : `${(_a2 = item.text) != null ? _a2 : ""}-${(_b = item.badge) != null ? _b : ""}-${i}`;
87
94
  const itemSx = __spreadProps(__spreadValues({
88
- bgcolor: (_a2 = item.backgroundColor) != null ? _a2 : "action.selected",
89
- color: (_b = item.color) != null ? _b : "text.secondary"
95
+ bgcolor: (_d = item.backgroundColor) != null ? _d : "action.selected",
96
+ color: (_e = item.color) != null ? _e : "text.secondary"
90
97
  }, i > 0 && { marginLeft: `-${effectiveOverlap}px` }), {
91
98
  zIndex: visibleItems.length - i
92
99
  });
@@ -94,18 +101,17 @@ const Avatar = ({
94
101
  const avatarEl = /* @__PURE__ */ jsxRuntime.jsx(
95
102
  material.Avatar,
96
103
  {
97
- "data-testid": "avatar",
98
104
  alt: item.text || "User avatar",
99
105
  src: hasImage ? item.imageUrl : void 0,
100
106
  imgProps: {
101
- "data-testid": "image",
102
- onError: () => handleImageError(i)
107
+ onError: () => {
108
+ if (item.imageUrl) handleImageError(item.imageUrl);
109
+ }
103
110
  },
104
111
  sx: finalSx,
105
- children: !hasImage && showBadgeFallback ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": "badge", "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
112
+ children: !hasImage && item.content != null ? item.content : !hasImage && showBadgeFallback ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
106
113
  AccountCircleIcon,
107
114
  {
108
- "data-testid": "icon",
109
115
  "aria-label": item.text,
110
116
  sx: { width: "100%", height: "100%" }
111
117
  }
@@ -113,14 +119,13 @@ const Avatar = ({
113
119
  }
114
120
  );
115
121
  if (showTooltip && item.text) {
116
- return /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: item.text, children: avatarEl }, i);
122
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: item.text, children: avatarEl }, itemKey);
117
123
  }
118
- return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: avatarEl }, i);
124
+ return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: avatarEl }, itemKey);
119
125
  };
120
126
  return /* @__PURE__ */ jsxRuntime.jsxs(
121
127
  material.Box,
122
128
  {
123
- "data-testid": "avatar-container",
124
129
  className,
125
130
  sx: mergeSx(
126
131
  {
@@ -133,10 +138,9 @@ const Avatar = ({
133
138
  ),
134
139
  children: [
135
140
  /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", alignItems: "center" }, children: visibleItems.map((item, i) => renderSingleAvatar(item, i)) }),
136
- showText && ((_a = items[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxRuntime.jsxs(
141
+ showCaption && ((_a = resolvedItems[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxRuntime.jsxs(
137
142
  material.Typography,
138
143
  {
139
- "data-testid": "text",
140
144
  variant: "caption",
141
145
  sx: {
142
146
  ml: 1,
@@ -145,12 +149,12 @@ const Avatar = ({
145
149
  color: "text.primary"
146
150
  },
147
151
  children: [
148
- type && items.length === 1 && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { component: "span", "data-testid": "type", sx: { mr: 0.5 }, children: [
152
+ type && resolvedItems.length === 1 && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { component: "span", sx: { mr: 0.5 }, children: [
149
153
  type,
150
154
  ":"
151
155
  ] }),
152
- items[0].text,
153
- items.length > 1 && ` +${items.length - 1}`
156
+ resolvedItems[0].text,
157
+ resolvedItems.length > 1 && ` +${resolvedItems.length - 1}`
154
158
  ]
155
159
  }
156
160
  )
@@ -159,4 +163,4 @@ const Avatar = ({
159
163
  );
160
164
  };
161
165
  exports.Avatar = Avatar;
162
- //# sourceMappingURL=Avatar-9L7YMxya.cjs.map
166
+ //# sourceMappingURL=Avatar-Dw5rzayR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar-Dw5rzayR.cjs","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Avatar as MuiAvatar,\n Box,\n Tooltip,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\n\nexport interface AvatarItem {\n text?: string;\n imageUrl?: string;\n badge?: string;\n color?: string;\n backgroundColor?: string;\n /** Contenido a renderizar como fallback cuando no hay imagen (ej. iniciales). */\n content?: React.ReactNode;\n}\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport interface AvatarProps {\n type?: string;\n /**\n * Lista de avatares (grupo apilado). Para un solo avatar puedes usar\n * `src`/`alt` en su lugar.\n */\n items?: AvatarItem[];\n /**\n * Atajo para un único avatar por URL de imagen. Equivale a\n * `items={[{ imageUrl: src, text: alt }]}`. Ignorado si `items` tiene elementos.\n */\n src?: string;\n /** Texto alternativo de la imagen cuando se usa `src` (modo single). */\n alt?: string;\n /** Fallback (ej. iniciales) cuando no hay imagen, en modo single (`src`). */\n fallback?: React.ReactNode;\n displayedAvatars?: number;\n size?: AvatarSize;\n showText?: boolean;\n showTooltip?: boolean;\n /**\n * sx aplicado al contenedor raíz.\n */\n sx?: SxProps<Theme>;\n /**\n * sx aplicado a cada MuiAvatar individual (se mergea sobre los defaults).\n */\n avatarSx?: SxProps<Theme>;\n className?: string;\n /**\n * Overlap (px) entre avatares cuando hay varios. Default depende del tamaño.\n */\n overlap?: number;\n}\n\n// Escala alineada con la escala de MUI (sm=32, md=40, lg=56, xl=96) con borde\n// proporcional para el efecto stacked.\nconst sizeMap: Record<\n Exclude<AvatarSize, number>,\n { px: number; border: number; font: number; overlap: number }\n> = {\n sm: { px: 32, border: 2, font: 14, overlap: 8 },\n md: { px: 40, border: 2, font: 16, overlap: 10 },\n lg: { px: 56, border: 3, font: 22, overlap: 14 },\n xl: { px: 96, border: 4, font: 36, overlap: 20 },\n};\n\nconst resolveSize = (size: AvatarSize) => {\n if (typeof size === 'number') {\n return {\n px: size,\n border: Math.max(2, Math.round(size * 0.05)),\n font: Math.round(size * 0.4),\n overlap: Math.round(size * 0.25),\n };\n }\n return sizeMap[size];\n};\n\nconst mergeSx = (base: SxProps<Theme>, extra?: SxProps<Theme>): SxProps<Theme> => {\n if (!extra) return base;\n const baseArr = Array.isArray(base) ? base : [base];\n const extraArr = Array.isArray(extra) ? extra : [extra];\n return [...baseArr, ...extraArr] as SxProps<Theme>;\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n items,\n src,\n alt,\n fallback,\n type,\n displayedAvatars = 4,\n size = 'sm',\n showText = true,\n showTooltip = false,\n sx,\n avatarSx,\n className,\n overlap,\n}) => {\n // Modo single (`src`) vs grupo (`items`). En single no mostramos caption.\n const resolvedItems: AvatarItem[] =\n items && items.length > 0\n ? items\n : src || fallback\n ? [{ imageUrl: src, text: alt, content: fallback }]\n : [];\n const showCaption = items && items.length > 0 ? showText : false;\n // Indexamos por URL (no por posición) para que cambios en `items` — reorder,\n // filtrado, paginación — no hagan que un avatar válido \"herede\" el estado de\n // imagen rota de un item anterior que estaba en la misma posición.\n const [failedUrls, setFailedUrls] = useState<Set<string>>(new Set());\n\n const handleImageError = (url: string) => {\n setFailedUrls((prev) => {\n if (prev.has(url)) return prev;\n const next = new Set(prev);\n next.add(url);\n return next;\n });\n };\n\n if (resolvedItems.length === 0) {\n return null;\n }\n\n const s = resolveSize(size);\n const effectiveOverlap = overlap ?? s.overlap;\n const visibleItems = resolvedItems.slice(0, displayedAvatars);\n\n const baseAvatarSx: SxProps<Theme> = {\n width: s.px,\n height: s.px,\n fontSize: s.font,\n fontWeight: 700,\n border: (theme) => `${s.border}px solid ${theme.palette.background.paper}`,\n boxSizing: 'content-box',\n };\n\n const renderSingleAvatar = (item: AvatarItem, i: number) => {\n const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);\n const showBadgeFallback = !!item.badge;\n const itemKey = item.imageUrl ?? `${item.text ?? ''}-${item.badge ?? ''}-${i}`;\n\n // Defaults tirando al theme; item.color / item.backgroundColor tienen prioridad.\n const itemSx: SxProps<Theme> = {\n bgcolor: item.backgroundColor ?? 'action.selected',\n color: item.color ?? 'text.secondary',\n // Stacking manual: margen negativo al segundo avatar en adelante.\n ...(i > 0 && { marginLeft: `-${effectiveOverlap}px` }),\n zIndex: visibleItems.length - i,\n };\n\n const finalSx = mergeSx(mergeSx(baseAvatarSx, itemSx), avatarSx);\n\n const avatarEl = (\n <MuiAvatar\n alt={item.text || 'User avatar'}\n src={hasImage ? item.imageUrl : undefined}\n imgProps={{\n onError: () => {\n if (item.imageUrl) handleImageError(item.imageUrl);\n },\n }}\n sx={finalSx}\n >\n {!hasImage && item.content != null ? (\n item.content\n ) : !hasImage && showBadgeFallback ? (\n <span aria-label={item.text}>{item.badge}</span>\n ) : !hasImage ? (\n <AccountCircleIcon\n aria-label={item.text}\n sx={{ width: '100%', height: '100%' }}\n />\n ) : null}\n </MuiAvatar>\n );\n\n if (showTooltip && item.text) {\n return (\n <Tooltip key={itemKey} title={item.text}>\n {avatarEl}\n </Tooltip>\n );\n }\n return <React.Fragment key={itemKey}>{avatarEl}</React.Fragment>;\n };\n\n return (\n <Box\n className={className}\n sx={mergeSx(\n {\n display: 'flex',\n alignItems: 'center',\n lineHeight: 1,\n width: 'fit-content',\n },\n sx,\n )}\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {visibleItems.map((item, i) => renderSingleAvatar(item, i))}\n </Box>\n\n {showCaption && resolvedItems[0]?.text && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 1,\n fontSize: '0.75rem',\n fontWeight: 400,\n color: 'text.primary',\n }}\n >\n {type && resolvedItems.length === 1 && (\n <Box component=\"span\" sx={{ mr: 0.5 }}>\n {type}:\n </Box>\n )}\n {resolvedItems[0].text}\n {resolvedItems.length > 1 && ` +${resolvedItems.length - 1}`}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default Avatar;\n"],"names":["useState","_a","jsx","MuiAvatar","Tooltip","jsxs","Box","Typography"],"mappings":"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"}
@@ -46,6 +46,9 @@ const mergeSx = (base, extra) => {
46
46
  };
47
47
  const Avatar = ({
48
48
  items,
49
+ src,
50
+ alt,
51
+ fallback,
49
52
  type,
50
53
  displayedAvatars = 4,
51
54
  size = "sm",
@@ -57,20 +60,23 @@ const Avatar = ({
57
60
  overlap
58
61
  }) => {
59
62
  var _a;
60
- const [errorIndex, setErrorIndex] = useState(/* @__PURE__ */ new Set());
61
- const handleImageError = (index) => {
62
- setErrorIndex((prev) => {
63
+ const resolvedItems = items && items.length > 0 ? items : src || fallback ? [{ imageUrl: src, text: alt, content: fallback }] : [];
64
+ const showCaption = items && items.length > 0 ? showText : false;
65
+ const [failedUrls, setFailedUrls] = useState(/* @__PURE__ */ new Set());
66
+ const handleImageError = (url) => {
67
+ setFailedUrls((prev) => {
68
+ if (prev.has(url)) return prev;
63
69
  const next = new Set(prev);
64
- next.add(index);
70
+ next.add(url);
65
71
  return next;
66
72
  });
67
73
  };
68
- if (!items || items.length === 0) {
74
+ if (resolvedItems.length === 0) {
69
75
  return null;
70
76
  }
71
77
  const s = resolveSize(size);
72
78
  const effectiveOverlap = overlap != null ? overlap : s.overlap;
73
- const visibleItems = items.slice(0, displayedAvatars);
79
+ const visibleItems = resolvedItems.slice(0, displayedAvatars);
74
80
  const baseAvatarSx = {
75
81
  width: s.px,
76
82
  height: s.px,
@@ -80,12 +86,13 @@ const Avatar = ({
80
86
  boxSizing: "content-box"
81
87
  };
82
88
  const renderSingleAvatar = (item, i) => {
83
- var _a2, _b;
84
- const hasImage = !!item.imageUrl && !errorIndex.has(i);
89
+ var _a2, _b, _c, _d, _e;
90
+ const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);
85
91
  const showBadgeFallback = !!item.badge;
92
+ const itemKey = (_c = item.imageUrl) != null ? _c : `${(_a2 = item.text) != null ? _a2 : ""}-${(_b = item.badge) != null ? _b : ""}-${i}`;
86
93
  const itemSx = __spreadProps(__spreadValues({
87
- bgcolor: (_a2 = item.backgroundColor) != null ? _a2 : "action.selected",
88
- color: (_b = item.color) != null ? _b : "text.secondary"
94
+ bgcolor: (_d = item.backgroundColor) != null ? _d : "action.selected",
95
+ color: (_e = item.color) != null ? _e : "text.secondary"
89
96
  }, i > 0 && { marginLeft: `-${effectiveOverlap}px` }), {
90
97
  zIndex: visibleItems.length - i
91
98
  });
@@ -93,18 +100,17 @@ const Avatar = ({
93
100
  const avatarEl = /* @__PURE__ */ jsx(
94
101
  Avatar$1,
95
102
  {
96
- "data-testid": "avatar",
97
103
  alt: item.text || "User avatar",
98
104
  src: hasImage ? item.imageUrl : void 0,
99
105
  imgProps: {
100
- "data-testid": "image",
101
- onError: () => handleImageError(i)
106
+ onError: () => {
107
+ if (item.imageUrl) handleImageError(item.imageUrl);
108
+ }
102
109
  },
103
110
  sx: finalSx,
104
- children: !hasImage && showBadgeFallback ? /* @__PURE__ */ jsx("span", { "data-testid": "badge", "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsx(
111
+ children: !hasImage && item.content != null ? item.content : !hasImage && showBadgeFallback ? /* @__PURE__ */ jsx("span", { "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsx(
105
112
  AccountCircleIcon,
106
113
  {
107
- "data-testid": "icon",
108
114
  "aria-label": item.text,
109
115
  sx: { width: "100%", height: "100%" }
110
116
  }
@@ -112,14 +118,13 @@ const Avatar = ({
112
118
  }
113
119
  );
114
120
  if (showTooltip && item.text) {
115
- return /* @__PURE__ */ jsx(Tooltip, { title: item.text, children: avatarEl }, i);
121
+ return /* @__PURE__ */ jsx(Tooltip, { title: item.text, children: avatarEl }, itemKey);
116
122
  }
117
- return /* @__PURE__ */ jsx(React__default.Fragment, { children: avatarEl }, i);
123
+ return /* @__PURE__ */ jsx(React__default.Fragment, { children: avatarEl }, itemKey);
118
124
  };
119
125
  return /* @__PURE__ */ jsxs(
120
126
  Box,
121
127
  {
122
- "data-testid": "avatar-container",
123
128
  className,
124
129
  sx: mergeSx(
125
130
  {
@@ -132,10 +137,9 @@ const Avatar = ({
132
137
  ),
133
138
  children: [
134
139
  /* @__PURE__ */ jsx(Box, { sx: { display: "flex", alignItems: "center" }, children: visibleItems.map((item, i) => renderSingleAvatar(item, i)) }),
135
- showText && ((_a = items[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxs(
140
+ showCaption && ((_a = resolvedItems[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxs(
136
141
  Typography,
137
142
  {
138
- "data-testid": "text",
139
143
  variant: "caption",
140
144
  sx: {
141
145
  ml: 1,
@@ -144,12 +148,12 @@ const Avatar = ({
144
148
  color: "text.primary"
145
149
  },
146
150
  children: [
147
- type && items.length === 1 && /* @__PURE__ */ jsxs(Box, { component: "span", "data-testid": "type", sx: { mr: 0.5 }, children: [
151
+ type && resolvedItems.length === 1 && /* @__PURE__ */ jsxs(Box, { component: "span", sx: { mr: 0.5 }, children: [
148
152
  type,
149
153
  ":"
150
154
  ] }),
151
- items[0].text,
152
- items.length > 1 && ` +${items.length - 1}`
155
+ resolvedItems[0].text,
156
+ resolvedItems.length > 1 && ` +${resolvedItems.length - 1}`
153
157
  ]
154
158
  }
155
159
  )
@@ -160,4 +164,4 @@ const Avatar = ({
160
164
  export {
161
165
  Avatar as A
162
166
  };
163
- //# sourceMappingURL=Avatar-BJTr-PBd.js.map
167
+ //# sourceMappingURL=Avatar-H8akSege.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar-H8akSege.js","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Avatar as MuiAvatar,\n Box,\n Tooltip,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\n\nexport interface AvatarItem {\n text?: string;\n imageUrl?: string;\n badge?: string;\n color?: string;\n backgroundColor?: string;\n /** Contenido a renderizar como fallback cuando no hay imagen (ej. iniciales). */\n content?: React.ReactNode;\n}\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport interface AvatarProps {\n type?: string;\n /**\n * Lista de avatares (grupo apilado). Para un solo avatar puedes usar\n * `src`/`alt` en su lugar.\n */\n items?: AvatarItem[];\n /**\n * Atajo para un único avatar por URL de imagen. Equivale a\n * `items={[{ imageUrl: src, text: alt }]}`. Ignorado si `items` tiene elementos.\n */\n src?: string;\n /** Texto alternativo de la imagen cuando se usa `src` (modo single). */\n alt?: string;\n /** Fallback (ej. iniciales) cuando no hay imagen, en modo single (`src`). */\n fallback?: React.ReactNode;\n displayedAvatars?: number;\n size?: AvatarSize;\n showText?: boolean;\n showTooltip?: boolean;\n /**\n * sx aplicado al contenedor raíz.\n */\n sx?: SxProps<Theme>;\n /**\n * sx aplicado a cada MuiAvatar individual (se mergea sobre los defaults).\n */\n avatarSx?: SxProps<Theme>;\n className?: string;\n /**\n * Overlap (px) entre avatares cuando hay varios. Default depende del tamaño.\n */\n overlap?: number;\n}\n\n// Escala alineada con la escala de MUI (sm=32, md=40, lg=56, xl=96) con borde\n// proporcional para el efecto stacked.\nconst sizeMap: Record<\n Exclude<AvatarSize, number>,\n { px: number; border: number; font: number; overlap: number }\n> = {\n sm: { px: 32, border: 2, font: 14, overlap: 8 },\n md: { px: 40, border: 2, font: 16, overlap: 10 },\n lg: { px: 56, border: 3, font: 22, overlap: 14 },\n xl: { px: 96, border: 4, font: 36, overlap: 20 },\n};\n\nconst resolveSize = (size: AvatarSize) => {\n if (typeof size === 'number') {\n return {\n px: size,\n border: Math.max(2, Math.round(size * 0.05)),\n font: Math.round(size * 0.4),\n overlap: Math.round(size * 0.25),\n };\n }\n return sizeMap[size];\n};\n\nconst mergeSx = (base: SxProps<Theme>, extra?: SxProps<Theme>): SxProps<Theme> => {\n if (!extra) return base;\n const baseArr = Array.isArray(base) ? base : [base];\n const extraArr = Array.isArray(extra) ? extra : [extra];\n return [...baseArr, ...extraArr] as SxProps<Theme>;\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n items,\n src,\n alt,\n fallback,\n type,\n displayedAvatars = 4,\n size = 'sm',\n showText = true,\n showTooltip = false,\n sx,\n avatarSx,\n className,\n overlap,\n}) => {\n // Modo single (`src`) vs grupo (`items`). En single no mostramos caption.\n const resolvedItems: AvatarItem[] =\n items && items.length > 0\n ? items\n : src || fallback\n ? [{ imageUrl: src, text: alt, content: fallback }]\n : [];\n const showCaption = items && items.length > 0 ? showText : false;\n // Indexamos por URL (no por posición) para que cambios en `items` — reorder,\n // filtrado, paginación — no hagan que un avatar válido \"herede\" el estado de\n // imagen rota de un item anterior que estaba en la misma posición.\n const [failedUrls, setFailedUrls] = useState<Set<string>>(new Set());\n\n const handleImageError = (url: string) => {\n setFailedUrls((prev) => {\n if (prev.has(url)) return prev;\n const next = new Set(prev);\n next.add(url);\n return next;\n });\n };\n\n if (resolvedItems.length === 0) {\n return null;\n }\n\n const s = resolveSize(size);\n const effectiveOverlap = overlap ?? s.overlap;\n const visibleItems = resolvedItems.slice(0, displayedAvatars);\n\n const baseAvatarSx: SxProps<Theme> = {\n width: s.px,\n height: s.px,\n fontSize: s.font,\n fontWeight: 700,\n border: (theme) => `${s.border}px solid ${theme.palette.background.paper}`,\n boxSizing: 'content-box',\n };\n\n const renderSingleAvatar = (item: AvatarItem, i: number) => {\n const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);\n const showBadgeFallback = !!item.badge;\n const itemKey = item.imageUrl ?? `${item.text ?? ''}-${item.badge ?? ''}-${i}`;\n\n // Defaults tirando al theme; item.color / item.backgroundColor tienen prioridad.\n const itemSx: SxProps<Theme> = {\n bgcolor: item.backgroundColor ?? 'action.selected',\n color: item.color ?? 'text.secondary',\n // Stacking manual: margen negativo al segundo avatar en adelante.\n ...(i > 0 && { marginLeft: `-${effectiveOverlap}px` }),\n zIndex: visibleItems.length - i,\n };\n\n const finalSx = mergeSx(mergeSx(baseAvatarSx, itemSx), avatarSx);\n\n const avatarEl = (\n <MuiAvatar\n alt={item.text || 'User avatar'}\n src={hasImage ? item.imageUrl : undefined}\n imgProps={{\n onError: () => {\n if (item.imageUrl) handleImageError(item.imageUrl);\n },\n }}\n sx={finalSx}\n >\n {!hasImage && item.content != null ? (\n item.content\n ) : !hasImage && showBadgeFallback ? (\n <span aria-label={item.text}>{item.badge}</span>\n ) : !hasImage ? (\n <AccountCircleIcon\n aria-label={item.text}\n sx={{ width: '100%', height: '100%' }}\n />\n ) : null}\n </MuiAvatar>\n );\n\n if (showTooltip && item.text) {\n return (\n <Tooltip key={itemKey} title={item.text}>\n {avatarEl}\n </Tooltip>\n );\n }\n return <React.Fragment key={itemKey}>{avatarEl}</React.Fragment>;\n };\n\n return (\n <Box\n className={className}\n sx={mergeSx(\n {\n display: 'flex',\n alignItems: 'center',\n lineHeight: 1,\n width: 'fit-content',\n },\n sx,\n )}\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {visibleItems.map((item, i) => renderSingleAvatar(item, i))}\n </Box>\n\n {showCaption && resolvedItems[0]?.text && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 1,\n fontSize: '0.75rem',\n fontWeight: 400,\n color: 'text.primary',\n }}\n >\n {type && resolvedItems.length === 1 && (\n <Box component=\"span\" sx={{ mr: 0.5 }}>\n {type}:\n </Box>\n )}\n {resolvedItems[0].text}\n {resolvedItems.length > 1 && ` +${resolvedItems.length - 1}`}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default Avatar;\n"],"names":["_a","MuiAvatar","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAM,UAGF;AAAA,EACF,IAAI,EAAE,IAAI,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,EAAA;AAAA,EAC5C,IAAI,EAAE,IAAI,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,GAAA;AAAA,EAC5C,IAAI,EAAE,IAAI,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,GAAA;AAAA,EAC5C,IAAI,EAAE,IAAI,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,GAAA;AAC9C;AAEA,MAAM,cAAc,CAAC,SAAqB;AACxC,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,IAAI,CAAC;AAAA,MAC3C,MAAM,KAAK,MAAM,OAAO,GAAG;AAAA,MAC3B,SAAS,KAAK,MAAM,OAAO,IAAI;AAAA,IAAA;AAAA,EAEnC;AACA,SAAO,QAAQ,IAAI;AACrB;AAEA,MAAM,UAAU,CAAC,MAAsB,UAA2C;AAChF,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,UAAU,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAClD,QAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACtD,SAAO,CAAC,GAAG,SAAS,GAAG,QAAQ;AACjC;AAEO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;;AAEJ,QAAM,gBACJ,SAAS,MAAM,SAAS,IACpB,QACA,OAAO,WACL,CAAC,EAAE,UAAU,KAAK,MAAM,KAAK,SAAS,SAAA,CAAU,IAChD,CAAA;AACR,QAAM,cAAc,SAAS,MAAM,SAAS,IAAI,WAAW;AAI3D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAsB,oBAAI,KAAK;AAEnE,QAAM,mBAAmB,CAAC,QAAgB;AACxC,kBAAc,CAAC,SAAS;AACtB,UAAI,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1B,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,IAAI,GAAG;AACZ,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,YAAY,IAAI;AAC1B,QAAM,mBAAmB,4BAAW,EAAE;AACtC,QAAM,eAAe,cAAc,MAAM,GAAG,gBAAgB;AAE5D,QAAM,eAA+B;AAAA,IACnC,OAAO,EAAE;AAAA,IACT,QAAQ,EAAE;AAAA,IACV,UAAU,EAAE;AAAA,IACZ,YAAY;AAAA,IACZ,QAAQ,CAAC,UAAU,GAAG,EAAE,MAAM,YAAY,MAAM,QAAQ,WAAW,KAAK;AAAA,IACxE,WAAW;AAAA,EAAA;AAGb,QAAM,qBAAqB,CAAC,MAAkB,MAAc;;AAC1D,UAAM,WAAW,CAAC,CAAC,KAAK,YAAY,CAAC,WAAW,IAAI,KAAK,QAAQ;AACjE,UAAM,oBAAoB,CAAC,CAAC,KAAK;AACjC,UAAM,WAAU,UAAK,aAAL,YAAiB,IAAGA,MAAA,KAAK,SAAL,OAAAA,MAAa,EAAE,KAAI,UAAK,UAAL,YAAc,EAAE,IAAI,CAAC;AAG5E,UAAM,SAAyB;AAAA,MAC7B,UAAS,UAAK,oBAAL,YAAwB;AAAA,MACjC,QAAO,UAAK,UAAL,YAAc;AAAA,OAEjB,IAAI,KAAK,EAAE,YAAY,IAAI,gBAAgB,KAAA,IAJlB;AAAA,MAK7B,QAAQ,aAAa,SAAS;AAAA,IAAA;AAGhC,UAAM,UAAU,QAAQ,QAAQ,cAAc,MAAM,GAAG,QAAQ;AAE/D,UAAM,WACJ;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,KAAK,KAAK,QAAQ;AAAA,QAClB,KAAK,WAAW,KAAK,WAAW;AAAA,QAChC,UAAU;AAAA,UACR,SAAS,MAAM;AACb,gBAAI,KAAK,SAAU,kBAAiB,KAAK,QAAQ;AAAA,UACnD;AAAA,QAAA;AAAA,QAEF,IAAI;AAAA,QAEH,WAAC,YAAY,KAAK,WAAW,OAC5B,KAAK,UACH,CAAC,YAAY,oBACf,oBAAC,QAAA,EAAK,cAAY,KAAK,MAAO,eAAK,MAAA,CAAM,IACvC,CAAC,WACH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAY,KAAK;AAAA,YACjB,IAAI,EAAE,OAAO,QAAQ,QAAQ,OAAA;AAAA,UAAO;AAAA,QAAA,IAEpC;AAAA,MAAA;AAAA,IAAA;AAIR,QAAI,eAAe,KAAK,MAAM;AAC5B,iCACG,SAAA,EAAsB,OAAO,KAAK,MAChC,sBADW,OAEd;AAAA,IAEJ;AACA,WAAO,oBAACC,eAAM,UAAN,EAA8B,sBAAV,OAAmB;AAAA,EACjD;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,QACF;AAAA,UACE,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,OAAO;AAAA,QAAA;AAAA,QAET;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,YACrC,UAAA,aAAa,IAAI,CAAC,MAAM,MAAM,mBAAmB,MAAM,CAAC,CAAC,GAC5D;AAAA,QAEC,iBAAe,mBAAc,CAAC,MAAf,mBAAkB,SAChC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,OAAO;AAAA,YAAA;AAAA,YAGR,UAAA;AAAA,cAAA,QAAQ,cAAc,WAAW,KAChC,qBAAC,KAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,IAAA,GAC7B,UAAA;AAAA,gBAAA;AAAA,gBAAK;AAAA,cAAA,GACR;AAAA,cAED,cAAc,CAAC,EAAE;AAAA,cACjB,cAAc,SAAS,KAAK,KAAK,cAAc,SAAS,CAAC;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5D;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const material = require("@mui/material");
4
+ function Breadcrumbs({
5
+ children,
6
+ separator,
7
+ maxItems,
8
+ sx,
9
+ className,
10
+ "aria-label": ariaLabel = "breadcrumb"
11
+ }) {
12
+ return /* @__PURE__ */ jsxRuntime.jsx(
13
+ material.Breadcrumbs,
14
+ {
15
+ separator,
16
+ maxItems,
17
+ sx,
18
+ className,
19
+ "aria-label": ariaLabel,
20
+ children
21
+ }
22
+ );
23
+ }
24
+ exports.Breadcrumbs = Breadcrumbs;
25
+ //# sourceMappingURL=Breadcrumbs-B9I3vxPb.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs-B9I3vxPb.cjs","sources":["../src/components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { Breadcrumbs as MuiBreadcrumbs } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BreadcrumbsProps {\n /** Items (Links / Typography). */\n children?: ReactNode;\n /** Separador entre items. Default: `/`. */\n separator?: ReactNode;\n /** Colapsa si hay más de N items. */\n maxItems?: number;\n sx?: SxProps<Theme>;\n className?: string;\n 'aria-label'?: string;\n}\n\n/** Migas de pan. Wrapper fino sobre MUI `Breadcrumbs`. */\nexport function Breadcrumbs({\n children,\n separator,\n maxItems,\n sx,\n className,\n 'aria-label': ariaLabel = 'breadcrumb',\n}: BreadcrumbsProps) {\n return (\n <MuiBreadcrumbs\n separator={separator}\n maxItems={maxItems}\n sx={sx}\n className={className}\n aria-label={ariaLabel}\n >\n {children}\n </MuiBreadcrumbs>\n );\n}\n\nexport default Breadcrumbs;\n"],"names":["jsx","MuiBreadcrumbs"],"mappings":";;;AAiBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,YAAY;AAC5B,GAAqB;AACnB,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
@@ -0,0 +1,26 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Breadcrumbs as Breadcrumbs$1 } from "@mui/material";
3
+ function Breadcrumbs({
4
+ children,
5
+ separator,
6
+ maxItems,
7
+ sx,
8
+ className,
9
+ "aria-label": ariaLabel = "breadcrumb"
10
+ }) {
11
+ return /* @__PURE__ */ jsx(
12
+ Breadcrumbs$1,
13
+ {
14
+ separator,
15
+ maxItems,
16
+ sx,
17
+ className,
18
+ "aria-label": ariaLabel,
19
+ children
20
+ }
21
+ );
22
+ }
23
+ export {
24
+ Breadcrumbs as B
25
+ };
26
+ //# sourceMappingURL=Breadcrumbs-C41SPbtX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs-C41SPbtX.js","sources":["../src/components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { Breadcrumbs as MuiBreadcrumbs } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BreadcrumbsProps {\n /** Items (Links / Typography). */\n children?: ReactNode;\n /** Separador entre items. Default: `/`. */\n separator?: ReactNode;\n /** Colapsa si hay más de N items. */\n maxItems?: number;\n sx?: SxProps<Theme>;\n className?: string;\n 'aria-label'?: string;\n}\n\n/** Migas de pan. Wrapper fino sobre MUI `Breadcrumbs`. */\nexport function Breadcrumbs({\n children,\n separator,\n maxItems,\n sx,\n className,\n 'aria-label': ariaLabel = 'breadcrumb',\n}: BreadcrumbsProps) {\n return (\n <MuiBreadcrumbs\n separator={separator}\n maxItems={maxItems}\n sx={sx}\n className={className}\n aria-label={ariaLabel}\n >\n {children}\n </MuiBreadcrumbs>\n );\n}\n\nexport default Breadcrumbs;\n"],"names":["MuiBreadcrumbs"],"mappings":";;AAiBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,YAAY;AAC5B,GAAqB;AACnB,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
1
+ {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
1
+ {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const material = require("@mui/material");
4
+ function ButtonGroup({
5
+ children,
6
+ size = "medium",
7
+ variant = "outlined",
8
+ orientation = "horizontal",
9
+ color = "primary",
10
+ disabled,
11
+ fullWidth,
12
+ sx,
13
+ className,
14
+ "aria-label": ariaLabel
15
+ }) {
16
+ return /* @__PURE__ */ jsxRuntime.jsx(
17
+ material.ButtonGroup,
18
+ {
19
+ size,
20
+ variant,
21
+ orientation,
22
+ color,
23
+ disabled,
24
+ fullWidth,
25
+ sx,
26
+ className,
27
+ "aria-label": ariaLabel,
28
+ children
29
+ }
30
+ );
31
+ }
32
+ exports.ButtonGroup = ButtonGroup;
33
+ //# sourceMappingURL=ButtonGroup-CNunDofQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup-CNunDofQ.cjs","sources":["../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { ButtonGroup as MuiButtonGroup } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ButtonGroupProps {\n /** Botones agrupados. */\n children?: ReactNode;\n size?: 'small' | 'medium' | 'large';\n variant?: 'text' | 'outlined' | 'contained';\n orientation?: 'horizontal' | 'vertical';\n color?: 'inherit' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n disabled?: boolean;\n fullWidth?: boolean;\n sx?: SxProps<Theme>;\n className?: string;\n 'aria-label'?: string;\n}\n\n/** Grupo de botones segmentado. Wrapper fino sobre MUI `ButtonGroup`. */\nexport function ButtonGroup({\n children,\n size = 'medium',\n variant = 'outlined',\n orientation = 'horizontal',\n color = 'primary',\n disabled,\n fullWidth,\n sx,\n className,\n 'aria-label': ariaLabel,\n}: ButtonGroupProps) {\n return (\n <MuiButtonGroup\n size={size}\n variant={variant}\n orientation={orientation}\n color={color}\n disabled={disabled}\n fullWidth={fullWidth}\n sx={sx}\n className={className}\n aria-label={ariaLabel}\n >\n {children}\n </MuiButtonGroup>\n );\n}\n\nexport default ButtonGroup;\n"],"names":["jsx","MuiButtonGroup"],"mappings":";;;AAmBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAqB;AACnB,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
@@ -0,0 +1,34 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { ButtonGroup as ButtonGroup$1 } from "@mui/material";
3
+ function ButtonGroup({
4
+ children,
5
+ size = "medium",
6
+ variant = "outlined",
7
+ orientation = "horizontal",
8
+ color = "primary",
9
+ disabled,
10
+ fullWidth,
11
+ sx,
12
+ className,
13
+ "aria-label": ariaLabel
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ ButtonGroup$1,
17
+ {
18
+ size,
19
+ variant,
20
+ orientation,
21
+ color,
22
+ disabled,
23
+ fullWidth,
24
+ sx,
25
+ className,
26
+ "aria-label": ariaLabel,
27
+ children
28
+ }
29
+ );
30
+ }
31
+ export {
32
+ ButtonGroup as B
33
+ };
34
+ //# sourceMappingURL=ButtonGroup-CcKUZ-lT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup-CcKUZ-lT.js","sources":["../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport { ButtonGroup as MuiButtonGroup } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ButtonGroupProps {\n /** Botones agrupados. */\n children?: ReactNode;\n size?: 'small' | 'medium' | 'large';\n variant?: 'text' | 'outlined' | 'contained';\n orientation?: 'horizontal' | 'vertical';\n color?: 'inherit' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n disabled?: boolean;\n fullWidth?: boolean;\n sx?: SxProps<Theme>;\n className?: string;\n 'aria-label'?: string;\n}\n\n/** Grupo de botones segmentado. Wrapper fino sobre MUI `ButtonGroup`. */\nexport function ButtonGroup({\n children,\n size = 'medium',\n variant = 'outlined',\n orientation = 'horizontal',\n color = 'primary',\n disabled,\n fullWidth,\n sx,\n className,\n 'aria-label': ariaLabel,\n}: ButtonGroupProps) {\n return (\n <MuiButtonGroup\n size={size}\n variant={variant}\n orientation={orientation}\n color={color}\n disabled={disabled}\n fullWidth={fullWidth}\n sx={sx}\n className={className}\n aria-label={ariaLabel}\n >\n {children}\n </MuiButtonGroup>\n );\n}\n\nexport default ButtonGroup;\n"],"names":["MuiButtonGroup"],"mappings":";;AAmBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAqB;AACnB,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAY;AAAA,MAEX;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,116 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { jsxs, jsx } from "react/jsx-runtime";
21
+ import { useTheme, Card as Card$1, CardHeader, CardContent } from "@mui/material";
22
+ import { r as resolvePreset } from "./resolvePreset-K6_BfWHD.js";
23
+ const paddingMap = {
24
+ none: 0,
25
+ dense: 1.5,
26
+ normal: 2.5,
27
+ loose: 4
28
+ };
29
+ function buildCardSx({
30
+ variant,
31
+ padding,
32
+ clickable
33
+ }) {
34
+ return (theme) => __spreadProps(__spreadValues({
35
+ borderRadius: 2,
36
+ backgroundColor: "background.paper",
37
+ boxShadow: variant === "elevated" ? theme.shadows[1] : "none",
38
+ border: variant === "outlined" ? `1px solid ${theme.palette.divider}` : "none",
39
+ transition: theme.transitions.create(
40
+ ["box-shadow", "transform", "border-color"],
41
+ { duration: theme.transitions.duration.shorter }
42
+ ),
43
+ cursor: clickable ? "pointer" : "default"
44
+ }, clickable && {
45
+ "&:hover": {
46
+ boxShadow: variant === "elevated" ? theme.shadows[3] : variant === "outlined" ? theme.shadows[1] : "none",
47
+ transform: variant !== "plain" ? "translateY(-1px)" : "none"
48
+ },
49
+ "&:active": {
50
+ transform: "translateY(0)"
51
+ }
52
+ }), {
53
+ p: paddingMap[padding]
54
+ });
55
+ }
56
+ function Card({
57
+ children,
58
+ variant,
59
+ padding = "normal",
60
+ clickable = false,
61
+ preset,
62
+ raised,
63
+ title,
64
+ subheader,
65
+ action,
66
+ headerSx,
67
+ contentSx,
68
+ sx,
69
+ onClick,
70
+ onBlur,
71
+ className,
72
+ "data-testid": dataTestId
73
+ }) {
74
+ const theme = useTheme();
75
+ const resolvedVariant = raised ? "elevated" : variant != null ? variant : "elevated";
76
+ const presetSx = resolvePreset("Card", preset, theme);
77
+ const hasHeader = title != null || subheader != null || action != null;
78
+ const useComposition = hasHeader || contentSx != null;
79
+ const rootSx = [
80
+ buildCardSx({
81
+ variant: resolvedVariant,
82
+ padding: useComposition ? "none" : padding,
83
+ clickable: clickable || Boolean(onClick)
84
+ }),
85
+ ...presetSx ? [presetSx] : [],
86
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
87
+ ];
88
+ return /* @__PURE__ */ jsxs(
89
+ Card$1,
90
+ {
91
+ sx: rootSx,
92
+ className,
93
+ "data-testid": dataTestId,
94
+ onClick,
95
+ onBlur,
96
+ elevation: 0,
97
+ children: [
98
+ hasHeader && /* @__PURE__ */ jsx(
99
+ CardHeader,
100
+ {
101
+ title,
102
+ subheader,
103
+ action,
104
+ sx: headerSx
105
+ }
106
+ ),
107
+ useComposition ? /* @__PURE__ */ jsx(CardContent, { sx: contentSx, children }) : children
108
+ ]
109
+ }
110
+ );
111
+ }
112
+ export {
113
+ Card as C,
114
+ buildCardSx as b
115
+ };
116
+ //# sourceMappingURL=Card-DYKGY-NG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-DYKGY-NG.js","sources":["../src/components/Card/Card.sx.ts","../src/components/Card/Card.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'plain';\nexport type CardPadding = 'none' | 'dense' | 'normal' | 'loose';\n\nexport interface BuildCardSxArgs {\n variant: CardVariant;\n padding: CardPadding;\n clickable: boolean;\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n dense: 1.5,\n normal: 2.5,\n loose: 4,\n};\n\n/**\n * Estilo base del Card. La prop `sx` del consumer se compone encima junto al\n * preset resuelto (en Card.tsx). Este builder solo se ocupa de variant +\n * padding para que siga siendo predecible.\n */\nexport function buildCardSx({\n variant,\n padding,\n clickable,\n}: BuildCardSxArgs): SxProps<Theme> {\n return (theme) => ({\n borderRadius: 2,\n backgroundColor: 'background.paper',\n boxShadow: variant === 'elevated' ? theme.shadows[1] : 'none',\n border:\n variant === 'outlined'\n ? `1px solid ${theme.palette.divider}`\n : 'none',\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color'],\n { duration: theme.transitions.duration.shorter },\n ),\n cursor: clickable ? 'pointer' : 'default',\n ...(clickable && {\n '&:hover': {\n boxShadow:\n variant === 'elevated'\n ? theme.shadows[3]\n : variant === 'outlined'\n ? theme.shadows[1]\n : 'none',\n transform: variant !== 'plain' ? 'translateY(-1px)' : 'none',\n },\n '&:active': {\n transform: 'translateY(0)',\n },\n }),\n p: paddingMap[padding],\n });\n}\n","import { type ReactNode } from 'react';\nimport { Card as MuiCard, CardHeader, CardContent, useTheme } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { buildCardSx, type CardVariant, type CardPadding } from './Card.sx';\n\nexport interface CardProps {\n /** Contenido del Card. */\n children?: ReactNode;\n /**\n * Variante visual.\n * - `elevated` (default): sombra sutil.\n * - `outlined`: borde sin sombra.\n * - `plain`: sin borde ni sombra, útil para layouts con nesting.\n */\n variant?: CardVariant;\n /** Densidad del padding interno. */\n padding?: CardPadding;\n /** Si `true`, muestra feedback de hover/active (cursor, sombra). */\n clickable?: boolean;\n /**\n * Preset registrado en `theme.styles.Card`. `\"default\"` usa el estilo\n * built-in sin preset extra.\n */\n preset?: string;\n /**\n * MUI `raised` legacy — mantenido por backward-compat. Equivale a\n * `variant=\"elevated\"` con sombra mayor. Ignora `variant` si se usa.\n */\n raised?: boolean;\n /**\n * Título de cabecera. Si se provee (o `subheader`/`action`), se renderiza un\n * `CardHeader` antes del contenido. Reemplaza el patrón\n * `<Card><CardHeader/>...</Card>` de MUI.\n */\n title?: ReactNode;\n /** Subtítulo de la cabecera. */\n subheader?: ReactNode;\n /** Acción a la derecha de la cabecera (ej. botón/menú). */\n action?: ReactNode;\n /** sx aplicado al `CardHeader`. */\n headerSx?: SxProps<Theme>;\n /**\n * sx aplicado al `CardContent` que envuelve a `children`. Al proveerlo (o al\n * usar header), el body se envuelve en un `CardContent` y el padding del root\n * pasa a `none` — equivale al patrón `<CardContent sx={...}>` de MUI.\n */\n contentSx?: SxProps<Theme>;\n /** sx del root. Se compone sobre el base + preset. */\n sx?: SxProps<Theme>;\n onClick?: () => void;\n onBlur?: () => void;\n className?: string;\n 'data-testid'?: string;\n}\n\nexport function Card({\n children,\n variant,\n padding = 'normal',\n clickable = false,\n preset,\n raised,\n title,\n subheader,\n action,\n headerSx,\n contentSx,\n sx,\n onClick,\n onBlur,\n className,\n 'data-testid': dataTestId,\n}: CardProps) {\n const theme = useTheme();\n\n const resolvedVariant: CardVariant = raised\n ? 'elevated'\n : (variant ?? 'elevated');\n\n const presetSx = resolvePreset('Card', preset, theme);\n\n const hasHeader =\n title != null || subheader != null || action != null;\n // En modo composición (header o contentSx) el padding lo manejan\n // CardHeader/CardContent, así que el root va sin padding.\n const useComposition = hasHeader || contentSx != null;\n\n const rootSx: SxProps<Theme> = [\n buildCardSx({\n variant: resolvedVariant,\n padding: useComposition ? 'none' : padding,\n clickable: clickable || Boolean(onClick),\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n return (\n <MuiCard\n sx={rootSx}\n className={className}\n data-testid={dataTestId}\n onClick={onClick}\n onBlur={onBlur}\n elevation={0}\n >\n {hasHeader && (\n <CardHeader\n title={title}\n subheader={subheader}\n action={action}\n sx={headerSx}\n />\n )}\n {useComposition ? (\n <CardContent sx={contentSx}>{children}</CardContent>\n ) : (\n children\n )}\n </MuiCard>\n );\n}\n\nexport default Card;\n"],"names":["MuiCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,aAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SAAO,CAAC,UAAW;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW,YAAY,aAAa,MAAM,QAAQ,CAAC,IAAI;AAAA,IACvD,QACE,YAAY,aACR,aAAa,MAAM,QAAQ,OAAO,KAClC;AAAA,IACN,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,cAAc,aAAa,cAAc;AAAA,MAC1C,EAAE,UAAU,MAAM,YAAY,SAAS,QAAA;AAAA,IAAQ;AAAA,IAEjD,QAAQ,YAAY,YAAY;AAAA,KAC5B,aAAa;AAAA,IACf,WAAW;AAAA,MACT,WACE,YAAY,aACR,MAAM,QAAQ,CAAC,IACf,YAAY,aACV,MAAM,QAAQ,CAAC,IACf;AAAA,MACR,WAAW,YAAY,UAAU,qBAAqB;AAAA,IAAA;AAAA,IAExD,YAAY;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,EACb,IAzBe;AAAA,IA2BjB,GAAG,WAAW,OAAO;AAAA,EAAA;AAEzB;ACAO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAc;AACZ,QAAM,QAAQ,SAAA;AAEd,QAAM,kBAA+B,SACjC,aACC,4BAAW;AAEhB,QAAM,WAAW,cAAc,QAAQ,QAAQ,KAAK;AAEpD,QAAM,YACJ,SAAS,QAAQ,aAAa,QAAQ,UAAU;AAGlD,QAAM,iBAAiB,aAAa,aAAa;AAEjD,QAAM,SAAyB;AAAA,IAC7B,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS,iBAAiB,SAAS;AAAA,MACnC,WAAW,aAAa,QAAQ,OAAO;AAAA,IAAA,CACxC;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAEV,UAAA;AAAA,QAAA,aACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAGP,iBACC,oBAAC,aAAA,EAAY,IAAI,WAAY,UAAS,IAEtC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}