@soyfri/shared-library 2.0.0-beta.3 → 2.0.0-beta.31

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 (359) 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-C_lW1VER.js +337 -0
  6. package/Autocomplete-C_lW1VER.js.map +1 -0
  7. package/Autocomplete-CejWztBY.cjs +336 -0
  8. package/Autocomplete-CejWztBY.cjs.map +1 -0
  9. package/Avatar-Dw5rzayR.cjs +166 -0
  10. package/Avatar-Dw5rzayR.cjs.map +1 -0
  11. package/Avatar-H8akSege.js +167 -0
  12. package/Avatar-H8akSege.js.map +1 -0
  13. package/Button-C17mExpd.cjs.map +1 -1
  14. package/Button-UkkP-bNw.js.map +1 -1
  15. package/Card-DYKGY-NG.js +116 -0
  16. package/Card-DYKGY-NG.js.map +1 -0
  17. package/Card-Dr1-ATRY.cjs +115 -0
  18. package/Card-Dr1-ATRY.cjs.map +1 -0
  19. package/Checkbox-BCqMFWt4.cjs +187 -0
  20. package/Checkbox-BCqMFWt4.cjs.map +1 -0
  21. package/Checkbox-gB5YKkVo.js +188 -0
  22. package/Checkbox-gB5YKkVo.js.map +1 -0
  23. package/{components/DateRangePicker/DateRangePicker.js → Chip-OPYQ1uQ_.js} +33 -35
  24. package/Chip-OPYQ1uQ_.js.map +1 -0
  25. package/{components/DateRangePicker/DateRangePicker.cjs → Chip-qoJLDiva.cjs} +33 -36
  26. package/Chip-qoJLDiva.cjs.map +1 -0
  27. package/DatePicker-_IGWc3I5.js +178 -0
  28. package/DatePicker-_IGWc3I5.js.map +1 -0
  29. package/DatePicker-t7uDTZMl.cjs +177 -0
  30. package/DatePicker-t7uDTZMl.cjs.map +1 -0
  31. package/DateTimePicker-BxQyjTCY.cjs +229 -0
  32. package/DateTimePicker-BxQyjTCY.cjs.map +1 -0
  33. package/DateTimePicker-CrmWav_j.js +230 -0
  34. package/DateTimePicker-CrmWav_j.js.map +1 -0
  35. package/Input-CScC87J5.cjs +185 -0
  36. package/Input-CScC87J5.cjs.map +1 -0
  37. package/Input-DP_fKl38.js +186 -0
  38. package/Input-DP_fKl38.js.map +1 -0
  39. package/Modal-BFpX5AFV.js +347 -0
  40. package/Modal-BFpX5AFV.js.map +1 -0
  41. package/Modal-CkpuI8ns.cjs +346 -0
  42. package/Modal-CkpuI8ns.cjs.map +1 -0
  43. package/RadioGroup-Dd0rHXSX.cjs +202 -0
  44. package/RadioGroup-Dd0rHXSX.cjs.map +1 -0
  45. package/RadioGroup-bO-ahP9T.js +203 -0
  46. package/RadioGroup-bO-ahP9T.js.map +1 -0
  47. package/Select-BY5Y0qZ1.js +376 -0
  48. package/Select-BY5Y0qZ1.js.map +1 -0
  49. package/Select-CURrHSyl.cjs +375 -0
  50. package/Select-CURrHSyl.cjs.map +1 -0
  51. package/Spinner-B6sThC1p.js +74 -0
  52. package/Spinner-B6sThC1p.js.map +1 -0
  53. package/Spinner-D7qRmNS9.cjs +73 -0
  54. package/Spinner-D7qRmNS9.cjs.map +1 -0
  55. package/Stat-BUcFCGrz.cjs +83 -0
  56. package/Stat-BUcFCGrz.cjs.map +1 -0
  57. package/Stat-C06A_izS.js +84 -0
  58. package/Stat-C06A_izS.js.map +1 -0
  59. package/StatusMessage-B3nXpuRl.cjs +88 -0
  60. package/StatusMessage-B3nXpuRl.cjs.map +1 -0
  61. package/StatusMessage-D0WgSBx7.js +89 -0
  62. package/StatusMessage-D0WgSBx7.js.map +1 -0
  63. package/Step-BArsou1V.js +301 -0
  64. package/Step-BArsou1V.js.map +1 -0
  65. package/Step-Nd7SJbRZ.cjs +300 -0
  66. package/Step-Nd7SJbRZ.cjs.map +1 -0
  67. package/Switch-CQFOopYy.cjs +182 -0
  68. package/Switch-CQFOopYy.cjs.map +1 -0
  69. package/Switch-D72dpkH2.js +183 -0
  70. package/Switch-D72dpkH2.js.map +1 -0
  71. package/Tab-BbP8jBcK.cjs +110 -0
  72. package/Tab-BbP8jBcK.cjs.map +1 -0
  73. package/Tab-BxSxKJsP.js +111 -0
  74. package/Tab-BxSxKJsP.js.map +1 -0
  75. package/Table-C2LbW0B1.js +531 -0
  76. package/Table-C2LbW0B1.js.map +1 -0
  77. package/Table-C4OM6rrC.cjs +530 -0
  78. package/Table-C4OM6rrC.cjs.map +1 -0
  79. package/components/ActionMenu/ActionMenu.cjs +52 -52
  80. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  81. package/components/ActionMenu/ActionMenu.d.ts +20 -36
  82. package/components/ActionMenu/ActionMenu.js +55 -55
  83. package/components/ActionMenu/ActionMenu.js.map +1 -1
  84. package/components/ActionMenu/index.d.ts +2 -2
  85. package/components/Alert/Alert.cjs +6 -0
  86. package/components/Alert/Alert.cjs.map +1 -0
  87. package/components/Alert/Alert.d.ts +31 -0
  88. package/components/Alert/Alert.js +6 -0
  89. package/components/Alert/Alert.js.map +1 -0
  90. package/components/Alert/index.d.ts +2 -0
  91. package/components/Alert.d.ts +6 -0
  92. package/components/AppBar/AppBar.cjs +3 -220
  93. package/components/AppBar/AppBar.cjs.map +1 -1
  94. package/components/AppBar/AppBar.d.ts +6 -6
  95. package/components/AppBar/AppBar.js +6 -223
  96. package/components/AppBar/AppBar.js.map +1 -1
  97. package/components/AppBar/index.d.ts +0 -6
  98. package/components/Autocomplete/Autocomplete.cjs +4 -311
  99. package/components/Autocomplete/Autocomplete.cjs.map +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 +4 -311
  103. package/components/Autocomplete/Autocomplete.js.map +1 -1
  104. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +5 -8
  105. package/components/Autocomplete/index.d.ts +1 -1
  106. package/components/Avatar/Avatar.cjs +2 -160
  107. package/components/Avatar/Avatar.cjs.map +1 -1
  108. package/components/Avatar/Avatar.d.ts +16 -1
  109. package/components/Avatar/Avatar.js +2 -160
  110. package/components/Avatar/Avatar.js.map +1 -1
  111. package/components/Avatar/index.d.ts +1 -0
  112. package/components/Button/Button.d.ts +5 -5
  113. package/components/Button/index.d.ts +1 -0
  114. package/components/Card/Card.cjs +4 -184
  115. package/components/Card/Card.cjs.map +1 -1
  116. package/components/Card/Card.d.ts +21 -50
  117. package/components/Card/Card.js +4 -184
  118. package/components/Card/Card.js.map +1 -1
  119. package/components/Card/Card.sx.d.ts +3 -6
  120. package/components/Card/index.d.ts +1 -1
  121. package/components/Checkbox/Checkbox.cjs +6 -0
  122. package/components/Checkbox/Checkbox.cjs.map +1 -0
  123. package/components/Checkbox/Checkbox.d.ts +55 -0
  124. package/components/Checkbox/Checkbox.js +6 -0
  125. package/components/Checkbox/Checkbox.js.map +1 -0
  126. package/components/Checkbox/Checkbox.sx.d.ts +13 -0
  127. package/components/Checkbox/index.d.ts +2 -0
  128. package/components/Checkbox.d.ts +6 -0
  129. package/components/Chip/Chip.cjs +4 -72
  130. package/components/Chip/Chip.cjs.map +1 -1
  131. package/components/Chip/Chip.js +3 -71
  132. package/components/Chip/Chip.js.map +1 -1
  133. package/components/Chip/index.d.ts +2 -1
  134. package/components/Chip.d.ts +4 -0
  135. package/components/Column/Column.cjs +1 -1
  136. package/components/Column/Column.cjs.map +1 -1
  137. package/components/Column/Column.d.ts +1 -1
  138. package/components/Column/Column.js +1 -1
  139. package/components/Column/Column.js.map +1 -1
  140. package/components/Column/index.d.ts +1 -0
  141. package/components/DatePicker/DatePicker.cjs +3 -200
  142. package/components/DatePicker/DatePicker.cjs.map +1 -1
  143. package/components/DatePicker/DatePicker.d.ts +1 -13
  144. package/components/DatePicker/DatePicker.js +3 -200
  145. package/components/DatePicker/DatePicker.js.map +1 -1
  146. package/components/DatePicker/index.d.ts +1 -1
  147. package/components/DateTimePicker/DateTimePicker.cjs +3 -219
  148. package/components/DateTimePicker/DateTimePicker.cjs.map +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 +3 -219
  153. package/components/DateTimePicker/DateTimePicker.js.map +1 -1
  154. package/components/DateTimePicker/index.d.ts +1 -1
  155. package/components/Drawer/Drawer.cjs +25 -24
  156. package/components/Drawer/Drawer.cjs.map +1 -1
  157. package/components/Drawer/Drawer.d.ts +8 -1
  158. package/components/Drawer/Drawer.js +26 -25
  159. package/components/Drawer/Drawer.js.map +1 -1
  160. package/components/Drawer/DrawerItem.d.ts +6 -1
  161. package/components/Gallery/Gallery.cjs +154 -79
  162. package/components/Gallery/Gallery.cjs.map +1 -1
  163. package/components/Gallery/Gallery.d.ts +25 -9
  164. package/components/Gallery/Gallery.js +154 -79
  165. package/components/Gallery/Gallery.js.map +1 -1
  166. package/components/Gallery/GalleryLightbox.d.ts +6 -10
  167. package/components/Gallery/GalleryMain.d.ts +3 -7
  168. package/components/Gallery/GalleryThumbnails.d.ts +7 -11
  169. package/components/Gallery/index.d.ts +2 -1
  170. package/components/Gallery.d.ts +4 -0
  171. package/components/Icon/Icon.cjs +6 -8
  172. package/components/Icon/Icon.cjs.map +1 -1
  173. package/components/Icon/Icon.d.ts +11 -17
  174. package/components/Icon/Icon.js +6 -8
  175. package/components/Icon/Icon.js.map +1 -1
  176. package/components/Icon/index.d.ts +2 -1
  177. package/components/Icon.d.ts +4 -0
  178. package/components/Input/Input.cjs +3 -172
  179. package/components/Input/Input.cjs.map +1 -1
  180. package/components/Input/Input.d.ts +9 -2
  181. package/components/Input/Input.definitions.d.ts +1 -0
  182. package/components/Input/Input.helpers.d.ts +3 -3
  183. package/components/Input/Input.js +3 -172
  184. package/components/Input/Input.js.map +1 -1
  185. package/components/Input/index.d.ts +1 -1
  186. package/components/InputGroup/InputGroup.cjs +23 -22
  187. package/components/InputGroup/InputGroup.cjs.map +1 -1
  188. package/components/InputGroup/InputGroup.d.ts +4 -4
  189. package/components/InputGroup/InputGroup.js +22 -21
  190. package/components/InputGroup/InputGroup.js.map +1 -1
  191. package/components/InputGroup/index.d.ts +2 -1
  192. package/components/InputGroup.d.ts +4 -0
  193. package/components/Modal/Modal.cjs +7 -317
  194. package/components/Modal/Modal.cjs.map +1 -1
  195. package/components/Modal/Modal.d.ts +20 -5
  196. package/components/Modal/Modal.js +6 -316
  197. package/components/Modal/Modal.js.map +1 -1
  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 -1
  202. package/components/Modal.d.ts +4 -0
  203. package/components/RadioGroup/RadioGroup.cjs +6 -0
  204. package/components/RadioGroup/RadioGroup.cjs.map +1 -0
  205. package/components/RadioGroup/RadioGroup.d.ts +59 -0
  206. package/components/RadioGroup/RadioGroup.definitions.d.ts +6 -0
  207. package/components/RadioGroup/RadioGroup.js +6 -0
  208. package/components/RadioGroup/RadioGroup.js.map +1 -0
  209. package/components/RadioGroup/RadioGroup.sx.d.ts +20 -0
  210. package/components/RadioGroup/index.d.ts +2 -0
  211. package/components/RadioGroup.d.ts +6 -0
  212. package/components/Select/Select.cjs +4 -445
  213. package/components/Select/Select.cjs.map +1 -1
  214. package/components/Select/Select.d.ts +37 -18
  215. package/components/Select/Select.helpers.d.ts +5 -19
  216. package/components/Select/Select.js +4 -445
  217. package/components/Select/Select.js.map +1 -1
  218. package/components/Select/index.d.ts +1 -1
  219. package/components/Spinner/Spinner.cjs +6 -0
  220. package/components/Spinner/Spinner.cjs.map +1 -0
  221. package/components/Spinner/Spinner.d.ts +26 -0
  222. package/components/Spinner/Spinner.js +6 -0
  223. package/components/Spinner/Spinner.js.map +1 -0
  224. package/components/Spinner/index.d.ts +2 -0
  225. package/components/Spinner.d.ts +6 -0
  226. package/components/Stat/Stat.cjs +4 -83
  227. package/components/Stat/Stat.cjs.map +1 -1
  228. package/components/Stat/Stat.js +3 -82
  229. package/components/Stat/Stat.js.map +1 -1
  230. package/components/Stat/index.d.ts +2 -1
  231. package/components/Stat.d.ts +4 -0
  232. package/components/StatusMessage/StatusMessage.cjs +4 -77
  233. package/components/StatusMessage/StatusMessage.cjs.map +1 -1
  234. package/components/StatusMessage/StatusMessage.d.ts +20 -36
  235. package/components/StatusMessage/StatusMessage.js +3 -76
  236. package/components/StatusMessage/StatusMessage.js.map +1 -1
  237. package/components/StatusMessage/index.d.ts +2 -1
  238. package/components/StatusMessage.d.ts +4 -0
  239. package/components/Stepper/Stepper.cjs +8 -47
  240. package/components/Stepper/Stepper.cjs.map +1 -1
  241. package/components/Stepper/Stepper.d.ts +9 -8
  242. package/components/Stepper/Stepper.js +7 -46
  243. package/components/Stepper/Stepper.js.map +1 -1
  244. package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +29 -23
  245. package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
  246. package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
  247. package/components/Stepper/index.d.ts +6 -2
  248. package/components/Stepper.d.ts +4 -0
  249. package/components/Switch/Switch.cjs +6 -0
  250. package/components/Switch/Switch.cjs.map +1 -0
  251. package/components/Switch/Switch.d.ts +48 -0
  252. package/components/Switch/Switch.definitions.d.ts +7 -0
  253. package/components/Switch/Switch.js +6 -0
  254. package/components/Switch/Switch.js.map +1 -0
  255. package/components/Switch/Switch.sx.d.ts +22 -0
  256. package/components/Switch/Switch.types.d.ts +1 -0
  257. package/components/Switch/index.d.ts +2 -0
  258. package/components/Switch.d.ts +6 -0
  259. package/components/Table/Table.cjs +2 -528
  260. package/components/Table/Table.cjs.map +1 -1
  261. package/components/Table/Table.d.ts +1 -1
  262. package/components/Table/Table.js +2 -528
  263. package/components/Table/Table.js.map +1 -1
  264. package/components/Tabs/Tabs.cjs +5 -94
  265. package/components/Tabs/Tabs.cjs.map +1 -1
  266. package/components/Tabs/Tabs.d.ts +21 -16
  267. package/components/Tabs/Tabs.js +4 -93
  268. package/components/Tabs/Tabs.js.map +1 -1
  269. package/components/Tabs/index.d.ts +4 -2
  270. package/components/Tabs.d.ts +4 -0
  271. package/components/Timeline/Timeline.cjs +3 -2
  272. package/components/Timeline/Timeline.cjs.map +1 -1
  273. package/components/Timeline/Timeline.d.ts +4 -8
  274. package/components/Timeline/Timeline.js +3 -2
  275. package/components/Timeline/Timeline.js.map +1 -1
  276. package/components/Timeline/index.d.ts +4 -2
  277. package/components/Timeline.d.ts +4 -0
  278. package/components/_shared/mergeSx.d.ts +7 -0
  279. package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
  280. package/formField.sx-8_QRnKxv.js.map +1 -0
  281. package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
  282. package/formField.sx-BAX7KwMR.cjs.map +1 -0
  283. package/index.cjs +96 -6
  284. package/index.cjs.map +1 -1
  285. package/index.d.ts +36 -0
  286. package/index.js +70 -4
  287. package/index.js.map +1 -1
  288. package/local/affiliations/affiliations.dev.soyfri.com-key.pem +28 -0
  289. package/local/affiliations/affiliations.dev.soyfri.com.pem +27 -0
  290. package/local/aficiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
  291. package/local/aficiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
  292. package/local/afiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
  293. package/local/afiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
  294. package/local/root/rootCA-key.pem +40 -0
  295. package/local/root/rootCA.pem +30 -0
  296. package/local/soporte/supportweb.dev.soyfri.com-key.pem +28 -0
  297. package/local/soporte/supportweb.dev.soyfri.com.pem +27 -0
  298. package/local/support/supportweb.dev.soyfri.com-key.pem +28 -0
  299. package/local/support/supportweb.dev.soyfri.com.pem +27 -0
  300. package/mergeSx-BXoNZjB_.js +10 -0
  301. package/mergeSx-BXoNZjB_.js.map +1 -0
  302. package/mergeSx-Dbccoo_H.cjs +9 -0
  303. package/mergeSx-Dbccoo_H.cjs.map +1 -0
  304. package/mui.d.ts +3 -1
  305. package/package.json +78 -73
  306. package/{resolvePreset-CT3kU-K2.cjs → resolvePreset-CxTI6_Ln.cjs} +3 -3
  307. package/{resolvePreset-CT3kU-K2.cjs.map → resolvePreset-CxTI6_Ln.cjs.map} +1 -1
  308. package/{resolvePreset-B-IB0ehH.js → resolvePreset-K6_BfWHD.js} +3 -3
  309. package/{resolvePreset-B-IB0ehH.js.map → resolvePreset-K6_BfWHD.js.map} +1 -1
  310. package/theme/componentStyles.d.ts +1 -1
  311. package/tokens-BRrcP_p_.js +21 -0
  312. package/tokens-BRrcP_p_.js.map +1 -0
  313. package/tokens-jaWWNk39.cjs +20 -0
  314. package/tokens-jaWWNk39.cjs.map +1 -0
  315. package/utils/index.d.ts +2 -0
  316. package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
  317. package/components/AppBar/AppBarBrand.d.ts +0 -31
  318. package/components/AppBar/AppBarUserMenu.d.ts +0 -65
  319. package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
  320. package/components/DatePicker/DatePicker.types.d.ts +0 -1
  321. package/components/DateRangePicker/DateRangePicker.cjs.map +0 -1
  322. package/components/DateRangePicker/DateRangePicker.d.ts +0 -15
  323. package/components/DateRangePicker/DateRangePicker.definitions.d.ts +0 -6
  324. package/components/DateRangePicker/DateRangePicker.js.map +0 -1
  325. package/components/DateRangePicker/index.d.ts +0 -1
  326. package/components/DateRangePicker.d.ts +0 -2
  327. package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
  328. package/components/Input/Input.types.d.ts +0 -1
  329. package/components/PageLoader/PageLoader.cjs +0 -61
  330. package/components/PageLoader/PageLoader.cjs.map +0 -1
  331. package/components/PageLoader/PageLoader.d.ts +0 -38
  332. package/components/PageLoader/PageLoader.js +0 -61
  333. package/components/PageLoader/PageLoader.js.map +0 -1
  334. package/components/PageLoader/index.d.ts +0 -2
  335. package/components/PageLoader.d.ts +0 -6
  336. package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
  337. package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
  338. package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
  339. package/components/ScrollTopButton/ScrollTopButton.js +0 -79
  340. package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
  341. package/components/ScrollTopButton/index.d.ts +0 -4
  342. package/components/ScrollTopButton.d.ts +0 -6
  343. package/components/Select/Select.definitions.d.ts +0 -17
  344. package/components/Select/Select.types.d.ts +0 -1
  345. package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
  346. package/formField.sx-CQ1mbk9M.cjs.map +0 -1
  347. package/formField.sx-DfVbMe0V.js.map +0 -1
  348. package/hooks/Wizard/Wizard.cjs +0 -7
  349. package/hooks/Wizard/Wizard.cjs.map +0 -1
  350. package/hooks/Wizard/Wizard.js +0 -7
  351. package/hooks/Wizard/Wizard.js.map +0 -1
  352. package/hooks/Wizard/index.d.ts +0 -3
  353. package/hooks/Wizard/useWizard.d.ts +0 -9
  354. package/hooks/Wizard.d.ts +0 -2
  355. package/useWizard-CWdIxZzX.cjs +0 -94
  356. package/useWizard-CWdIxZzX.cjs.map +0 -1
  357. package/useWizard-CWq--C3o.js +0 -95
  358. package/useWizard-CWq--C3o.js.map +0 -1
  359. /package/{styles.css → index.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Step-Nd7SJbRZ.cjs","sources":["../src/components/Stepper/StepperContext.tsx","../src/components/Stepper/_hooks/useHorizontalScroll.ts","../src/components/Stepper/_parts/StepperScrollArrow.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Stepper/Step.tsx"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\n\n/**\n * API expuesta por `useStepper()`.\n */\nexport interface StepperContextValue {\n /** Índice del paso actual (0-based). */\n currentStep: number;\n /** Total de pasos del stepper. */\n totalSteps: number;\n /** True si `currentStep === 0`. */\n isFirst: boolean;\n /** True si `currentStep === totalSteps - 1`. */\n isLast: boolean;\n /** True tras ejecutar `submitStep()` desde el último paso. */\n completed: boolean;\n /** Avanza al siguiente paso (no pasa de `totalSteps - 1`). */\n nextStep: () => void;\n /** Retrocede al paso anterior (no baja de 0). */\n prevStep: () => void;\n /** Salta a un paso específico (0-based). No-op si fuera de rango. */\n goToStep: (stepNumber: number) => void;\n /**\n * Envía el stepper. Marca `completed = true` y dispara el callback\n * `onSubmit` del provider. En el último paso suele reemplazar a `nextStep`.\n */\n submitStep: () => void;\n /** Resetea al paso inicial y limpia `completed`. */\n reset: () => void;\n}\n\nconst defaultValue: StepperContextValue = {\n currentStep: 0,\n totalSteps: 0,\n isFirst: true,\n isLast: true,\n completed: false,\n nextStep: () => {},\n prevStep: () => {},\n goToStep: () => {},\n submitStep: () => {},\n reset: () => {},\n};\n\nexport const StepperContext = createContext<StepperContextValue>(defaultValue);\n\n/**\n * Hook para consumir el `StepperContext` desde cualquier descendiente de\n * `<StepperProvider>`.\n *\n * Si se llama fuera de un provider, devuelve los valores por defecto (no-op)\n * para que componentes como `<Stepper>` puedan leerlo sin romper cuando no\n * hay provider envolvente.\n */\nexport function useStepper(): StepperContextValue {\n return useContext(StepperContext);\n}\n\nexport interface StepperProviderProps {\n /** Número total de pasos. Requerido. */\n totalSteps: number;\n /** Paso inicial (0-based). Default: 0. */\n initialStep?: number;\n /**\n * Callback disparado cuando se llama `submitStep()`. Recibe el paso actual.\n * El paquete NO ejecuta ninguna petición; queda a cargo del consumer.\n */\n onSubmit?: (currentStep: number) => void;\n /**\n * Callback disparado en cada cambio de paso (next/prev/goTo).\n * Útil para tracking o validaciones externas.\n */\n onStepChange?: (newStep: number, prevStep: number) => void;\n children?: ReactNode;\n}\n\n/**\n * Provider del stepper. Administra el `currentStep` internamente. El consumer\n * no necesita gestionar estado — solo consumirlo con `useStepper()` desde\n * cualquier descendiente.\n *\n * ```tsx\n * <StepperProvider totalSteps={3} onSubmit={handleFinalSubmit}>\n * <Stepper>\n * <Step label=\"Paso 1\"><StepOne /></Step>\n * <Step label=\"Paso 2\"><StepTwo /></Step>\n * <Step label=\"Paso 3\"><StepThree /></Step>\n * </Stepper>\n * <StepperControls />\n * </StepperProvider>\n * ```\n */\nexport const StepperProvider: FC<StepperProviderProps> = ({\n totalSteps,\n initialStep = 0,\n onSubmit,\n onStepChange,\n children,\n}) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [completed, setCompleted] = useState(false);\n\n const changeStep = useCallback(\n (newStep: number) => {\n setCurrentStep((prev) => {\n if (newStep === prev) return prev;\n if (newStep < 0 || newStep >= totalSteps) return prev;\n onStepChange?.(newStep, prev);\n return newStep;\n });\n },\n [totalSteps, onStepChange],\n );\n\n const nextStep = useCallback(() => {\n changeStep(currentStep + 1);\n }, [changeStep, currentStep]);\n\n const prevStep = useCallback(() => {\n changeStep(currentStep - 1);\n }, [changeStep, currentStep]);\n\n const goToStep = useCallback(\n (stepNumber: number) => {\n changeStep(stepNumber);\n },\n [changeStep],\n );\n\n const submitStep = useCallback(() => {\n setCompleted(true);\n onSubmit?.(currentStep);\n }, [currentStep, onSubmit]);\n\n const reset = useCallback(() => {\n setCurrentStep(initialStep);\n setCompleted(false);\n }, [initialStep]);\n\n const value = useMemo<StepperContextValue>(\n () => ({\n currentStep,\n totalSteps,\n isFirst: currentStep === 0,\n isLast: currentStep === totalSteps - 1,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n }),\n [\n currentStep,\n totalSteps,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n ],\n );\n\n return (\n <StepperContext.Provider value={value}>{children}</StepperContext.Provider>\n );\n};\n","import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\n/**\n * Hook interno del Stepper para manejar scroll horizontal cuando los steps\n * no caben en el contenedor. No se exporta desde el barrel — es un detalle\n * de implementación.\n *\n * @param enabled - Si el scroll está activo (típicamente sólo en orientación horizontal).\n * @param deps - Cosas que afectan el layout y disparan un recompute (ej. cantidad de steps, paso activo).\n *\n * Retorna:\n * - `scrollRef`: ref a asignar al contenedor con `overflow-x: auto`.\n * - `canScrollLeft` / `canScrollRight`: flags para habilitar/deshabilitar flechas.\n * - `scrollBy(delta)`: imperativo con scroll suave.\n */\nexport function useHorizontalScroll(enabled: boolean, deps: unknown[] = []) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const updateScrollState = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n const { scrollLeft, scrollWidth, clientWidth } = el;\n // Tolerancia de 1px por redondeos de subpixel.\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n }, []);\n\n useLayoutEffect(() => {\n if (!enabled) return;\n updateScrollState();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, updateScrollState, ...deps]);\n\n useEffect(() => {\n if (!enabled) return;\n const el = scrollRef.current;\n if (!el) return;\n el.addEventListener('scroll', updateScrollState, { passive: true });\n const ro = new ResizeObserver(updateScrollState);\n ro.observe(el);\n return () => {\n el.removeEventListener('scroll', updateScrollState);\n ro.disconnect();\n };\n }, [enabled, updateScrollState]);\n\n const scrollBy = useCallback((delta: number) => {\n const el = scrollRef.current;\n if (!el) return;\n el.scrollBy({ left: delta, behavior: 'smooth' });\n }, []);\n\n return { scrollRef, canScrollLeft, canScrollRight, scrollBy };\n}\n","import { IconButton } from '@mui/material';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n\ninterface StepperScrollArrowProps {\n direction: 'left' | 'right';\n /** Cuando `false`, el botón está deshabilitado (por ejemplo, ya estás al inicio). */\n enabled: boolean;\n /**\n * Cuando `false`, el botón queda con `visibility: hidden` (reserva su\n * espacio pero no se ve). Útil para que el área de scroll no se corra\n * horizontalmente cuando no hay overflow en ningún lado.\n */\n visible: boolean;\n onClick: () => void;\n}\n\n/**\n * Flecha de scroll (`<` / `>`) del Stepper horizontal. Se muestra a los\n * costados del área scrollable cuando hay overflow. Componente privado —\n * no se exporta del barrel.\n */\nexport const StepperScrollArrow = ({\n direction,\n enabled,\n visible,\n onClick,\n}: StepperScrollArrowProps) => {\n const isLeft = direction === 'left';\n const Icon = isLeft ? ChevronLeftIcon : ChevronRightIcon;\n const ariaLabel = isLeft ? 'Anterior' : 'Siguiente';\n\n return (\n <IconButton\n aria-label={ariaLabel}\n size=\"small\"\n onClick={onClick}\n disabled={!enabled}\n sx={{\n flex: '0 0 auto',\n // Reservamos el slot siempre que haya overflow en algún lado,\n // así el área scroll tiene un ancho estable (no saltan los\n // steps cuando aparece/desaparece la flecha).\n visibility: visible ? 'visible' : 'hidden',\n }}\n >\n <Icon fontSize=\"small\" />\n </IconButton>\n );\n};\n","import {\n Children,\n isValidElement,\n type FC,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n Box,\n} from '@mui/material';\n\nimport { StepProps } from './Step';\nimport { useStepper } from './StepperContext';\nimport { useHorizontalScroll } from './_hooks/useHorizontalScroll';\nimport { StepperScrollArrow } from './_parts/StepperScrollArrow';\n\nexport interface StepperProps {\n /** Uno o varios `<Step>`. Children que no sean `<Step>` se ignoran. */\n children: ReactNode;\n orientation?: 'horizontal' | 'vertical';\n alternateLabel?: boolean;\n /**\n * Índice 0-based del paso activo. Si no se provee, el Stepper intenta\n * leerlo del `StepperContext` (si está dentro de un `<StepperProvider>`).\n * Si tampoco hay provider, el default es 0.\n */\n currentStep?: number;\n keepMounted?: boolean;\n sx?: object;\n}\n\nexport const Stepper: FC<StepperProps> = ({\n children,\n orientation = 'horizontal',\n alternateLabel = false,\n currentStep: currentStepProp,\n keepMounted = false,\n sx,\n}) => {\n // Lee el paso desde el StepperContext cuando el consumer no lo pasa como prop.\n const stepperCtx = useStepper();\n const currentStep =\n currentStepProp !== undefined\n ? currentStepProp\n : stepperCtx.totalSteps > 0\n ? stepperCtx.currentStep\n : 0;\n\n const isHorizontal = orientation === 'horizontal';\n\n // Filtra los children a los que tengan displayName=\"Step\" — acepta arrays,\n // single child, fragments, y descarta cualquier otra cosa (strings, null, etc.).\n const steps: ReactElement<StepProps>[] = Children.toArray(children).filter(\n (child): child is ReactElement<StepProps> =>\n isValidElement(child) &&\n (child.type as { displayName?: string })?.displayName === 'Step',\n );\n\n const { scrollRef, canScrollLeft, canScrollRight, scrollBy } = useHorizontalScroll(\n isHorizontal,\n [steps.length, currentStep],\n );\n\n const showArrows = isHorizontal && (canScrollLeft || canScrollRight);\n\n return (\n <Box sx={sx}>\n <Box\n sx={\n isHorizontal\n ? { display: 'flex', alignItems: 'center', width: '100%', gap: 0.5 }\n : undefined\n }\n >\n {isHorizontal && (\n <StepperScrollArrow\n direction=\"left\"\n enabled={canScrollLeft}\n visible={showArrows}\n onClick={() => scrollBy(-160)}\n />\n )}\n <Box\n ref={scrollRef}\n sx={\n isHorizontal\n ? {\n flex: '1 1 auto',\n minWidth: 0,\n overflowX: 'auto',\n scrollBehavior: 'smooth',\n WebkitOverflowScrolling: 'touch',\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': { display: 'none' },\n }\n : undefined\n }\n >\n <MuiStepper\n activeStep={currentStep}\n orientation={orientation}\n alternativeLabel={alternateLabel}\n sx={\n isHorizontal\n ? {\n display: 'inline-flex',\n flexWrap: 'nowrap',\n minWidth: '100%',\n width: 'max-content',\n '& .MuiStep-root': { flex: '0 0 auto', minWidth: 120 },\n }\n : undefined\n }\n >\n {steps.map((step, idx) => {\n const {\n label,\n completed,\n disabled,\n className,\n sx: stepSx,\n dotColor,\n activeDotColor,\n completedDotColor,\n iconTextColor,\n } = step.props;\n const key = step.key ?? idx;\n return (\n <MuiStep\n key={key}\n completed={completed}\n disabled={disabled}\n className={className}\n sx={stepSx}\n >\n <MuiStepLabel\n sx={{\n pointerEvents: 'none',\n '& .MuiStepIcon-root': { color: dotColor },\n '& .MuiStepIcon-active': { color: activeDotColor },\n '& .MuiStepIcon-completed': { color: completedDotColor },\n '& .MuiStepIcon-text': { fill: iconTextColor },\n }}\n >\n {label}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n </MuiStepper>\n </Box>\n {isHorizontal && (\n <StepperScrollArrow\n direction=\"right\"\n enabled={canScrollRight}\n visible={showArrows}\n onClick={() => scrollBy(160)}\n />\n )}\n </Box>\n\n {/* Cuerpos de los steps — render según el modo `keepMounted` */}\n <Box mt={2}>\n {keepMounted\n ? steps.map((step, idx) => {\n const key = step.key ?? idx;\n const isActive = idx === currentStep;\n return (\n <Box\n key={key}\n // `display: none` mantiene el nodo en el DOM — state de los\n // hijos (inputs, useState, etc.) no se pierde al navegar.\n sx={{ display: isActive ? 'block' : 'none' }}\n // Accesibilidad: oculta del flujo de lectura pero no del DOM.\n aria-hidden={!isActive}\n >\n {step.props.children}\n </Box>\n );\n })\n : steps.map((step, idx) => {\n if (idx !== currentStep) return null;\n const key = step.key ?? idx;\n return <Box key={key}>{step.props.children}</Box>;\n })}\n </Box>\n </Box>\n );\n};\n\nexport default Stepper;\n","import React from \"react\";\nimport { StepProps as MuiStepProps } from \"@mui/material\";\n\ntype PickMuiStepProps = Pick<MuiStepProps, \"completed\" | \"disabled\" | \"sx\" | \"className\">;\n\nexport interface StepProps extends PickMuiStepProps {\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n sx?: object;\n dotColor?: string; // dot base\n activeDotColor?: string; // dot activa\n completedDotColor?: string; // dot completada\n iconTextColor?: string; // número o check dentro\n}\n\nexport const Step = (_: StepProps): null => null;\n\nStep.displayName = \"Step\";\n\nexport default Step;"],"names":["createContext","useContext","useState","useCallback","useMemo","jsx","useRef","useLayoutEffect","useEffect","IconButton","Children","isValidElement","jsxs","Box","MuiStepper","MuiStep","MuiStepLabel"],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+ const jsxRuntime = require("react/jsx-runtime");
34
+ const styles = require("@mui/material/styles");
35
+ const material = require("@mui/material");
36
+ const reactHookForm = require("react-hook-form");
37
+ const resolvePreset = require("./resolvePreset-CxTI6_Ln.cjs");
38
+ const toRadius = (borderRadius) => typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius;
39
+ const FOCUS_TRANSITION = "border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms";
40
+ const buildSwitchSx = ({
41
+ bordered,
42
+ borderRadius,
43
+ hasLabel,
44
+ error
45
+ }) => {
46
+ const radius = toRadius(borderRadius);
47
+ if (!bordered) {
48
+ return {
49
+ "& .MuiFormHelperText-root": { marginLeft: 0 }
50
+ };
51
+ }
52
+ return (theme) => ({
53
+ "& .MuiFormControlLabel-root": __spreadValues(__spreadProps(__spreadValues({
54
+ marginLeft: 0,
55
+ marginRight: 0,
56
+ paddingX: 1.5,
57
+ paddingY: 1.25,
58
+ border: `1px solid ${error ? theme.palette.error.main : theme.palette.divider}`,
59
+ borderRadius: radius,
60
+ transition: FOCUS_TRANSITION
61
+ }, error && {
62
+ boxShadow: `0 0 0 1px ${theme.palette.error.main}`
63
+ }), {
64
+ // Focus del usuario sobre el switch interno.
65
+ "&:focus-within": {
66
+ borderColor: error ? theme.palette.error.main : theme.palette.primary.main,
67
+ boxShadow: `0 0 0 1px ${error ? theme.palette.error.main : theme.palette.primary.main}`
68
+ }
69
+ }), hasLabel && {
70
+ width: "100%",
71
+ justifyContent: "space-between"
72
+ }),
73
+ "& .MuiFormHelperText-root": {
74
+ marginLeft: 0
75
+ }
76
+ });
77
+ };
78
+ const Switch = (props) => {
79
+ const _a = props, {
80
+ label,
81
+ size = "medium",
82
+ labelPlacement = "end",
83
+ disabled = false,
84
+ error = false,
85
+ helperText,
86
+ bordered = false,
87
+ borderRadius = 10,
88
+ defaultChecked,
89
+ preset,
90
+ sx
91
+ } = _a, rest = __objRest(_a, [
92
+ "label",
93
+ "size",
94
+ "labelPlacement",
95
+ "disabled",
96
+ "error",
97
+ "helperText",
98
+ "bordered",
99
+ "borderRadius",
100
+ "defaultChecked",
101
+ "preset",
102
+ "sx"
103
+ ]);
104
+ const theme = styles.useTheme();
105
+ const presetSx = resolvePreset.resolvePreset("Switch", preset, theme);
106
+ const buildSx = (effectiveError) => [
107
+ buildSwitchSx({
108
+ bordered,
109
+ borderRadius,
110
+ hasLabel: !!label,
111
+ error: effectiveError
112
+ }),
113
+ ...presetSx ? [presetSx] : [],
114
+ ...Array.isArray(sx) ? sx : [sx]
115
+ ];
116
+ const renderSwitch = (checked2, onChange2, onBlur, inputRef) => {
117
+ const switchEl = /* @__PURE__ */ jsxRuntime.jsx(
118
+ material.Switch,
119
+ __spreadProps(__spreadValues({}, rest), {
120
+ size,
121
+ checked: !!checked2,
122
+ onChange: (_e, next) => onChange2(next),
123
+ onBlur,
124
+ inputRef,
125
+ disabled
126
+ })
127
+ );
128
+ return label ? /* @__PURE__ */ jsxRuntime.jsx(
129
+ material.FormControlLabel,
130
+ {
131
+ control: switchEl,
132
+ label,
133
+ labelPlacement,
134
+ disabled
135
+ }
136
+ ) : switchEl;
137
+ };
138
+ if ("control" in props && props.control) {
139
+ const { name, control, validation, onValueChange } = props;
140
+ return /* @__PURE__ */ jsxRuntime.jsx(
141
+ reactHookForm.Controller,
142
+ {
143
+ name,
144
+ control,
145
+ rules: validation,
146
+ defaultValue: defaultChecked,
147
+ render: ({ field, fieldState: { error: fieldError } }) => {
148
+ var _a2;
149
+ const finalError = !!fieldError || error;
150
+ const finalHelperText = (_a2 = fieldError == null ? void 0 : fieldError.message) != null ? _a2 : helperText;
151
+ return /* @__PURE__ */ jsxRuntime.jsxs(
152
+ material.FormControl,
153
+ {
154
+ error: finalError,
155
+ disabled,
156
+ sx: buildSx(finalError),
157
+ children: [
158
+ renderSwitch(
159
+ !!field.value,
160
+ (next) => {
161
+ field.onChange(next);
162
+ onValueChange == null ? void 0 : onValueChange(next);
163
+ },
164
+ field.onBlur,
165
+ field.ref
166
+ ),
167
+ finalHelperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: finalHelperText })
168
+ ]
169
+ }
170
+ );
171
+ }
172
+ }
173
+ );
174
+ }
175
+ const { checked, onChange } = props;
176
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.FormControl, { error, disabled, sx: buildSx(error), children: [
177
+ renderSwitch(checked, onChange),
178
+ helperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: helperText })
179
+ ] });
180
+ };
181
+ exports.Switch = Switch;
182
+ //# sourceMappingURL=Switch-CQFOopYy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch-CQFOopYy.cjs","sources":["../src/components/Switch/Switch.sx.ts","../src/components/Switch/Switch.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BuildSwitchSxOptions {\n bordered: boolean;\n borderRadius: number | string;\n hasLabel: boolean;\n error: boolean;\n}\n\nconst toRadius = (borderRadius: number | string) =>\n typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;\n\n/**\n * Transición compartida (matchea el InputGroup y el RadioGroup).\n */\nconst FOCUS_TRANSITION =\n 'border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, ' +\n 'box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms';\n\n/**\n * Builder de sx para Switch. Reproduce el estilo del antiguo\n * `FormToggleInput` legacy cuando `bordered=true`: contenedor con borde,\n * label a la izquierda y switch a la derecha (vía justify-content: space-between).\n *\n * Cuando `bordered=true`, el contenedor gana:\n * - `:focus-within` → borde + shadow primario (mismo patrón que `InputGroup`).\n * - `error=true` → borde + shadow de error (palette.error.main).\n *\n * El shadow es de 1px, así que no hay shift de layout — sólo se intensifica\n * visualmente el borde sin empujar nada alrededor.\n *\n * Si `bordered=false`, sólo aplica un reset de margin del helper text.\n */\nexport const buildSwitchSx = ({\n bordered,\n borderRadius,\n hasLabel,\n error,\n}: BuildSwitchSxOptions): SxProps<Theme> => {\n const radius = toRadius(borderRadius);\n\n if (!bordered) {\n return {\n '& .MuiFormHelperText-root': { marginLeft: 0 },\n };\n }\n\n return (theme) => ({\n '& .MuiFormControlLabel-root': {\n marginLeft: 0,\n marginRight: 0,\n paddingX: 1.5,\n paddingY: 1.25,\n border: `1px solid ${\n error ? theme.palette.error.main : theme.palette.divider\n }`,\n borderRadius: radius,\n transition: FOCUS_TRANSITION,\n ...(error && {\n boxShadow: `0 0 0 1px ${theme.palette.error.main}`,\n }),\n // Focus del usuario sobre el switch interno.\n '&:focus-within': {\n borderColor: error\n ? theme.palette.error.main\n : theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${\n error ? theme.palette.error.main : theme.palette.primary.main\n }`,\n },\n // Si hay label, separar el switch al borde opuesto.\n ...(hasLabel && {\n width: '100%',\n justifyContent: 'space-between',\n }),\n },\n '& .MuiFormHelperText-root': {\n marginLeft: 0,\n },\n });\n};\n","import { useTheme } from '@mui/material/styles';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n Switch as MuiSwitch,\n type SwitchProps as MuiSwitchProps,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildSwitchSx } from './Switch.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type SwitchSize = 'small' | 'medium';\nexport type SwitchLabelPlacement = 'start' | 'end' | 'top' | 'bottom';\n\n// ── Props base (todo lo común entre RHF y controlado) ────────────────────\nexport interface BaseSwitchProps\n extends Omit<MuiSwitchProps, 'value' | 'onChange' | 'checked' | 'defaultChecked' | 'size'> {\n /** Texto al lado del switch. Si está ausente, no se renderiza FormControlLabel. */\n label?: string;\n size?: SwitchSize;\n /** Posición del label. Default: 'end' (legacy `FormToggleInput` lo ponía a la izquierda con su flex-stack). */\n labelPlacement?: SwitchLabelPlacement;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Renderiza un contenedor con borde alrededor del switch + label. Default: false. */\n bordered?: boolean;\n /** Border radius del contenedor (cuando bordered). Default: 10. */\n borderRadius?: number | string;\n defaultChecked?: boolean;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Switch`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n sx?: SxProps<Theme>;\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFSwitchProps extends BaseSwitchProps {\n name: string;\n // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente o su uso involucra generics adicionales, TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda. El\n // `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del componente.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos. NO reemplaza al handler de RHF.\n */\n onValueChange?: (checked: boolean) => void;\n checked?: never;\n onChange?: never;\n}\n\nexport interface ControlledSwitchProps extends BaseSwitchProps {\n name?: string;\n control?: never;\n validation?: never;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SwitchProps = RHFSwitchProps | ControlledSwitchProps;\n\nexport const Switch: React.FC<SwitchProps> = (props) => {\n const {\n label,\n size = 'medium',\n labelPlacement = 'end',\n disabled = false,\n error = false,\n helperText,\n bordered = false,\n borderRadius = 10,\n defaultChecked,\n preset,\n sx,\n ...rest\n } = props as ControlledSwitchProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('Switch', preset, theme);\n\n // Construye el sx con el estado de error efectivo; se llama por rama\n // (RHF usa el error del Controller, controlado usa el prop `error`).\n const buildSx = (effectiveError: boolean) => [\n buildSwitchSx({\n bordered,\n borderRadius,\n hasLabel: !!label,\n error: effectiveError,\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : [sx]),\n ];\n\n const renderSwitch = (\n checked: boolean,\n onChange: (next: boolean) => void,\n onBlur?: () => void,\n inputRef?: React.Ref<HTMLInputElement>,\n ) => {\n const switchEl = (\n <MuiSwitch\n {...rest}\n size={size}\n checked={!!checked}\n onChange={(_e, next) => onChange(next)}\n onBlur={onBlur}\n // @ts-ignore — Ref<HTMLInputElement> type mismatch between @types/react versions in monorepo\n inputRef={inputRef}\n disabled={disabled}\n />\n );\n\n return label ? (\n <FormControlLabel\n control={switchEl}\n label={label}\n labelPlacement={labelPlacement}\n disabled={disabled}\n />\n ) : (\n switchEl\n );\n };\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFSwitchProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultChecked}\n render={({ field, fieldState: { error: fieldError } }) => {\n const finalError = !!fieldError || error;\n const finalHelperText = fieldError?.message ?? helperText;\n return (\n <FormControl\n error={finalError}\n disabled={disabled}\n sx={buildSx(finalError)}\n >\n {renderSwitch(\n !!field.value,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n )}\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n }}\n />\n );\n }\n\n // ── Controlled mode ───────────────────────────────────────────────────\n const { checked, onChange } = props as ControlledSwitchProps;\n return (\n <FormControl error={error} disabled={disabled} sx={buildSx(error)}>\n {renderSwitch(checked, onChange)}\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n\nexport default Switch;\n"],"names":["useTheme","resolvePreset","checked","onChange","jsx","MuiSwitch","FormControlLabel","Controller","_a","jsxs","FormControl","FormHelperText"],"mappings":"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"}
@@ -0,0 +1,183 @@
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
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ import { jsx, jsxs } from "react/jsx-runtime";
33
+ import { useTheme } from "@mui/material/styles";
34
+ import { FormControl, FormHelperText, Switch as Switch$1, FormControlLabel } from "@mui/material";
35
+ import { Controller } from "react-hook-form";
36
+ import { r as resolvePreset } from "./resolvePreset-K6_BfWHD.js";
37
+ const toRadius = (borderRadius) => typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius;
38
+ const FOCUS_TRANSITION = "border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms";
39
+ const buildSwitchSx = ({
40
+ bordered,
41
+ borderRadius,
42
+ hasLabel,
43
+ error
44
+ }) => {
45
+ const radius = toRadius(borderRadius);
46
+ if (!bordered) {
47
+ return {
48
+ "& .MuiFormHelperText-root": { marginLeft: 0 }
49
+ };
50
+ }
51
+ return (theme) => ({
52
+ "& .MuiFormControlLabel-root": __spreadValues(__spreadProps(__spreadValues({
53
+ marginLeft: 0,
54
+ marginRight: 0,
55
+ paddingX: 1.5,
56
+ paddingY: 1.25,
57
+ border: `1px solid ${error ? theme.palette.error.main : theme.palette.divider}`,
58
+ borderRadius: radius,
59
+ transition: FOCUS_TRANSITION
60
+ }, error && {
61
+ boxShadow: `0 0 0 1px ${theme.palette.error.main}`
62
+ }), {
63
+ // Focus del usuario sobre el switch interno.
64
+ "&:focus-within": {
65
+ borderColor: error ? theme.palette.error.main : theme.palette.primary.main,
66
+ boxShadow: `0 0 0 1px ${error ? theme.palette.error.main : theme.palette.primary.main}`
67
+ }
68
+ }), hasLabel && {
69
+ width: "100%",
70
+ justifyContent: "space-between"
71
+ }),
72
+ "& .MuiFormHelperText-root": {
73
+ marginLeft: 0
74
+ }
75
+ });
76
+ };
77
+ const Switch = (props) => {
78
+ const _a = props, {
79
+ label,
80
+ size = "medium",
81
+ labelPlacement = "end",
82
+ disabled = false,
83
+ error = false,
84
+ helperText,
85
+ bordered = false,
86
+ borderRadius = 10,
87
+ defaultChecked,
88
+ preset,
89
+ sx
90
+ } = _a, rest = __objRest(_a, [
91
+ "label",
92
+ "size",
93
+ "labelPlacement",
94
+ "disabled",
95
+ "error",
96
+ "helperText",
97
+ "bordered",
98
+ "borderRadius",
99
+ "defaultChecked",
100
+ "preset",
101
+ "sx"
102
+ ]);
103
+ const theme = useTheme();
104
+ const presetSx = resolvePreset("Switch", preset, theme);
105
+ const buildSx = (effectiveError) => [
106
+ buildSwitchSx({
107
+ bordered,
108
+ borderRadius,
109
+ hasLabel: !!label,
110
+ error: effectiveError
111
+ }),
112
+ ...presetSx ? [presetSx] : [],
113
+ ...Array.isArray(sx) ? sx : [sx]
114
+ ];
115
+ const renderSwitch = (checked2, onChange2, onBlur, inputRef) => {
116
+ const switchEl = /* @__PURE__ */ jsx(
117
+ Switch$1,
118
+ __spreadProps(__spreadValues({}, rest), {
119
+ size,
120
+ checked: !!checked2,
121
+ onChange: (_e, next) => onChange2(next),
122
+ onBlur,
123
+ inputRef,
124
+ disabled
125
+ })
126
+ );
127
+ return label ? /* @__PURE__ */ jsx(
128
+ FormControlLabel,
129
+ {
130
+ control: switchEl,
131
+ label,
132
+ labelPlacement,
133
+ disabled
134
+ }
135
+ ) : switchEl;
136
+ };
137
+ if ("control" in props && props.control) {
138
+ const { name, control, validation, onValueChange } = props;
139
+ return /* @__PURE__ */ jsx(
140
+ Controller,
141
+ {
142
+ name,
143
+ control,
144
+ rules: validation,
145
+ defaultValue: defaultChecked,
146
+ render: ({ field, fieldState: { error: fieldError } }) => {
147
+ var _a2;
148
+ const finalError = !!fieldError || error;
149
+ const finalHelperText = (_a2 = fieldError == null ? void 0 : fieldError.message) != null ? _a2 : helperText;
150
+ return /* @__PURE__ */ jsxs(
151
+ FormControl,
152
+ {
153
+ error: finalError,
154
+ disabled,
155
+ sx: buildSx(finalError),
156
+ children: [
157
+ renderSwitch(
158
+ !!field.value,
159
+ (next) => {
160
+ field.onChange(next);
161
+ onValueChange == null ? void 0 : onValueChange(next);
162
+ },
163
+ field.onBlur,
164
+ field.ref
165
+ ),
166
+ finalHelperText && /* @__PURE__ */ jsx(FormHelperText, { children: finalHelperText })
167
+ ]
168
+ }
169
+ );
170
+ }
171
+ }
172
+ );
173
+ }
174
+ const { checked, onChange } = props;
175
+ return /* @__PURE__ */ jsxs(FormControl, { error, disabled, sx: buildSx(error), children: [
176
+ renderSwitch(checked, onChange),
177
+ helperText && /* @__PURE__ */ jsx(FormHelperText, { children: helperText })
178
+ ] });
179
+ };
180
+ export {
181
+ Switch as S
182
+ };
183
+ //# sourceMappingURL=Switch-D72dpkH2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch-D72dpkH2.js","sources":["../src/components/Switch/Switch.sx.ts","../src/components/Switch/Switch.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BuildSwitchSxOptions {\n bordered: boolean;\n borderRadius: number | string;\n hasLabel: boolean;\n error: boolean;\n}\n\nconst toRadius = (borderRadius: number | string) =>\n typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;\n\n/**\n * Transición compartida (matchea el InputGroup y el RadioGroup).\n */\nconst FOCUS_TRANSITION =\n 'border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, ' +\n 'box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms';\n\n/**\n * Builder de sx para Switch. Reproduce el estilo del antiguo\n * `FormToggleInput` legacy cuando `bordered=true`: contenedor con borde,\n * label a la izquierda y switch a la derecha (vía justify-content: space-between).\n *\n * Cuando `bordered=true`, el contenedor gana:\n * - `:focus-within` → borde + shadow primario (mismo patrón que `InputGroup`).\n * - `error=true` → borde + shadow de error (palette.error.main).\n *\n * El shadow es de 1px, así que no hay shift de layout — sólo se intensifica\n * visualmente el borde sin empujar nada alrededor.\n *\n * Si `bordered=false`, sólo aplica un reset de margin del helper text.\n */\nexport const buildSwitchSx = ({\n bordered,\n borderRadius,\n hasLabel,\n error,\n}: BuildSwitchSxOptions): SxProps<Theme> => {\n const radius = toRadius(borderRadius);\n\n if (!bordered) {\n return {\n '& .MuiFormHelperText-root': { marginLeft: 0 },\n };\n }\n\n return (theme) => ({\n '& .MuiFormControlLabel-root': {\n marginLeft: 0,\n marginRight: 0,\n paddingX: 1.5,\n paddingY: 1.25,\n border: `1px solid ${\n error ? theme.palette.error.main : theme.palette.divider\n }`,\n borderRadius: radius,\n transition: FOCUS_TRANSITION,\n ...(error && {\n boxShadow: `0 0 0 1px ${theme.palette.error.main}`,\n }),\n // Focus del usuario sobre el switch interno.\n '&:focus-within': {\n borderColor: error\n ? theme.palette.error.main\n : theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${\n error ? theme.palette.error.main : theme.palette.primary.main\n }`,\n },\n // Si hay label, separar el switch al borde opuesto.\n ...(hasLabel && {\n width: '100%',\n justifyContent: 'space-between',\n }),\n },\n '& .MuiFormHelperText-root': {\n marginLeft: 0,\n },\n });\n};\n","import { useTheme } from '@mui/material/styles';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n Switch as MuiSwitch,\n type SwitchProps as MuiSwitchProps,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildSwitchSx } from './Switch.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type SwitchSize = 'small' | 'medium';\nexport type SwitchLabelPlacement = 'start' | 'end' | 'top' | 'bottom';\n\n// ── Props base (todo lo común entre RHF y controlado) ────────────────────\nexport interface BaseSwitchProps\n extends Omit<MuiSwitchProps, 'value' | 'onChange' | 'checked' | 'defaultChecked' | 'size'> {\n /** Texto al lado del switch. Si está ausente, no se renderiza FormControlLabel. */\n label?: string;\n size?: SwitchSize;\n /** Posición del label. Default: 'end' (legacy `FormToggleInput` lo ponía a la izquierda con su flex-stack). */\n labelPlacement?: SwitchLabelPlacement;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Renderiza un contenedor con borde alrededor del switch + label. Default: false. */\n bordered?: boolean;\n /** Border radius del contenedor (cuando bordered). Default: 10. */\n borderRadius?: number | string;\n defaultChecked?: boolean;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Switch`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n sx?: SxProps<Theme>;\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFSwitchProps extends BaseSwitchProps {\n name: string;\n // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente o su uso involucra generics adicionales, TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda. El\n // `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del componente.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos. NO reemplaza al handler de RHF.\n */\n onValueChange?: (checked: boolean) => void;\n checked?: never;\n onChange?: never;\n}\n\nexport interface ControlledSwitchProps extends BaseSwitchProps {\n name?: string;\n control?: never;\n validation?: never;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SwitchProps = RHFSwitchProps | ControlledSwitchProps;\n\nexport const Switch: React.FC<SwitchProps> = (props) => {\n const {\n label,\n size = 'medium',\n labelPlacement = 'end',\n disabled = false,\n error = false,\n helperText,\n bordered = false,\n borderRadius = 10,\n defaultChecked,\n preset,\n sx,\n ...rest\n } = props as ControlledSwitchProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('Switch', preset, theme);\n\n // Construye el sx con el estado de error efectivo; se llama por rama\n // (RHF usa el error del Controller, controlado usa el prop `error`).\n const buildSx = (effectiveError: boolean) => [\n buildSwitchSx({\n bordered,\n borderRadius,\n hasLabel: !!label,\n error: effectiveError,\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : [sx]),\n ];\n\n const renderSwitch = (\n checked: boolean,\n onChange: (next: boolean) => void,\n onBlur?: () => void,\n inputRef?: React.Ref<HTMLInputElement>,\n ) => {\n const switchEl = (\n <MuiSwitch\n {...rest}\n size={size}\n checked={!!checked}\n onChange={(_e, next) => onChange(next)}\n onBlur={onBlur}\n // @ts-ignore — Ref<HTMLInputElement> type mismatch between @types/react versions in monorepo\n inputRef={inputRef}\n disabled={disabled}\n />\n );\n\n return label ? (\n <FormControlLabel\n control={switchEl}\n label={label}\n labelPlacement={labelPlacement}\n disabled={disabled}\n />\n ) : (\n switchEl\n );\n };\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFSwitchProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultChecked}\n render={({ field, fieldState: { error: fieldError } }) => {\n const finalError = !!fieldError || error;\n const finalHelperText = fieldError?.message ?? helperText;\n return (\n <FormControl\n error={finalError}\n disabled={disabled}\n sx={buildSx(finalError)}\n >\n {renderSwitch(\n !!field.value,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n )}\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n }}\n />\n );\n }\n\n // ── Controlled mode ───────────────────────────────────────────────────\n const { checked, onChange } = props as ControlledSwitchProps;\n return (\n <FormControl error={error} disabled={disabled} sx={buildSx(error)}>\n {renderSwitch(checked, onChange)}\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n\nexport default Switch;\n"],"names":["checked","onChange","MuiSwitch","_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,WAAW,CAAC,iBAChB,OAAO,iBAAiB,WAAW,GAAG,YAAY,OAAO;AAK3D,MAAM,mBACJ;AAiBK,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4C;AAC1C,QAAM,SAAS,SAAS,YAAY;AAEpC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,6BAA6B,EAAE,YAAY,EAAA;AAAA,IAAE;AAAA,EAEjD;AAEA,SAAO,CAAC,WAAW;AAAA,IACjB,+BAA+B;AAAA,MAC7B,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ,aACN,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,OACnD;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,OACR,SAAS;AAAA,MACX,WAAW,aAAa,MAAM,QAAQ,MAAM,IAAI;AAAA,IAAA,IAXrB;AAAA;AAAA,MAc7B,kBAAkB;AAAA,QAChB,aAAa,QACT,MAAM,QAAQ,MAAM,OACpB,MAAM,QAAQ,QAAQ;AAAA,QAC1B,WAAW,aACT,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,QAAQ,IAC3D;AAAA,MAAA;AAAA,QAGE,YAAY;AAAA,MACd,OAAO;AAAA,MACP,gBAAgB;AAAA,IAAA;AAAA,IAGpB,6BAA6B;AAAA,MAC3B,YAAY;AAAA,IAAA;AAAA,EACd;AAEJ;ACJO,MAAM,SAAgC,CAAC,UAAU;AACtD,QAaI,YAZF;AAAA;AAAA,IACA,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,MAEE,IADC,iBACD,IADC;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOF,QAAM,QAAQ,SAAA;AACd,QAAM,WAAW,cAAc,UAAU,QAAQ,KAAK;AAItD,QAAM,UAAU,CAAC,mBAA4B;AAAA,IAC3C,cAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA,UAAU,CAAC,CAAC;AAAA,MACZ,OAAO;AAAA,IAAA,CACR;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE;AAAA,EAAA;AAGlC,QAAM,eAAe,CACnBA,UACAC,WACA,QACA,aACG;AACH,UAAM,WACJ;AAAA,MAACC;AAAAA,MAAA,iCACK,OADL;AAAA,QAEC;AAAA,QACA,SAAS,CAAC,CAACF;AAAAA,QACX,UAAU,CAAC,IAAI,SAASC,UAAS,IAAI;AAAA,QACrC;AAAA,QAEA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAIJ,WAAO,QACL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA,IAGF;AAAA,EAEJ;AAGA,MAAI,aAAa,SAAS,MAAM,SAAS;AACvC,UAAM,EAAE,MAAM,SAAS,YAAY,kBAAkB;AACrD,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,cAAc;AAAA,QACd,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,OAAO,WAAA,QAAmB;;AACxD,gBAAM,aAAa,CAAC,CAAC,cAAc;AACnC,gBAAM,mBAAkBE,MAAA,yCAAY,YAAZ,OAAAA,MAAuB;AAC/C,iBACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA,IAAI,QAAQ,UAAU;AAAA,cAErB,UAAA;AAAA,gBAAA;AAAA,kBACC,CAAC,CAAC,MAAM;AAAA,kBACR,CAAC,SAAS;AACR,0BAAM,SAAS,IAAI;AACnB,mEAAgB;AAAA,kBAClB;AAAA,kBACA,MAAM;AAAA,kBACN,MAAM;AAAA,gBAAA;AAAA,gBAEP,mBAAmB,oBAAC,gBAAA,EAAgB,UAAA,gBAAA,CAAgB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAG3D;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAGA,QAAM,EAAE,SAAS,SAAA,IAAa;AAC9B,8BACG,aAAA,EAAY,OAAc,UAAoB,IAAI,QAAQ,KAAK,GAC7D,UAAA;AAAA,IAAA,aAAa,SAAS,QAAQ;AAAA,IAC9B,cAAc,oBAAC,gBAAA,EAAgB,UAAA,WAAA,CAAW;AAAA,EAAA,GAC7C;AAEJ;"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const React = require("react");
4
+ const material = require("@mui/material");
5
+ const mergeSx = require("./mergeSx-Dbccoo_H.cjs");
6
+ const TAB_DISPLAY_MAP = {
7
+ horizontal: { display: "flex", flexDirection: "column" },
8
+ vertical: { display: "flex", flexDirection: "row" }
9
+ };
10
+ const Tabs = ({
11
+ children,
12
+ defaultValue,
13
+ onChangeValue,
14
+ centered = true,
15
+ orientation = "horizontal",
16
+ scrollButtons = "auto",
17
+ variant = "standard",
18
+ indicatorColor = "primary",
19
+ labelColor = "primary",
20
+ className,
21
+ allowScrollButtonsMobile = true,
22
+ keepMounted = false,
23
+ sx
24
+ }) => {
25
+ var _a, _b;
26
+ const tabs = React.Children.toArray(children).filter(
27
+ (child) => {
28
+ var _a2;
29
+ return React.isValidElement(child) && ((_a2 = child.type) == null ? void 0 : _a2.displayName) === "Tab";
30
+ }
31
+ );
32
+ const firstValue = (_a = tabs[0]) == null ? void 0 : _a.props.value;
33
+ const [currentValue, setCurrentValue] = React.useState(
34
+ (_b = defaultValue != null ? defaultValue : firstValue) != null ? _b : 0
35
+ );
36
+ const handleChange = (_event, newValue) => {
37
+ setCurrentValue(newValue);
38
+ onChangeValue == null ? void 0 : onChangeValue(newValue);
39
+ };
40
+ const { display, flexDirection } = TAB_DISPLAY_MAP[orientation];
41
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display, flexDirection }, children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx(
43
+ material.Tabs,
44
+ {
45
+ value: currentValue,
46
+ onChange: handleChange,
47
+ centered,
48
+ indicatorColor,
49
+ orientation,
50
+ scrollButtons,
51
+ variant,
52
+ className,
53
+ textColor: labelColor,
54
+ allowScrollButtonsMobile,
55
+ sx: mergeSx.mergeSx({}, sx),
56
+ children: tabs.map((tab, idx) => {
57
+ const {
58
+ label,
59
+ icon,
60
+ value = idx,
61
+ disabled,
62
+ wrapped,
63
+ iconPosition,
64
+ className: tabClassName,
65
+ sx: tabSx
66
+ } = tab.props;
67
+ return /* @__PURE__ */ jsxRuntime.jsx(
68
+ material.Tab,
69
+ {
70
+ label,
71
+ icon,
72
+ value,
73
+ disabled,
74
+ wrapped,
75
+ iconPosition,
76
+ className: tabClassName,
77
+ sx: tabSx
78
+ },
79
+ value
80
+ );
81
+ })
82
+ }
83
+ ),
84
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { m: 2, sx: { width: "100%" }, children: keepMounted ? tabs.map((tab, idx) => {
85
+ var _a2;
86
+ const value = (_a2 = tab.props.value) != null ? _a2 : idx;
87
+ const isActive = value === currentValue;
88
+ return /* @__PURE__ */ jsxRuntime.jsx(
89
+ material.Box,
90
+ {
91
+ role: "tabpanel",
92
+ sx: { display: isActive ? "block" : "none" },
93
+ "aria-hidden": !isActive,
94
+ children: tab.props.children
95
+ },
96
+ value
97
+ );
98
+ }) : tabs.map((tab, idx) => {
99
+ var _a2;
100
+ const value = (_a2 = tab.props.value) != null ? _a2 : idx;
101
+ if (value !== currentValue) return null;
102
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { role: "tabpanel", children: tab.props.children }, value);
103
+ }) })
104
+ ] });
105
+ };
106
+ const Tab = (_) => null;
107
+ Tab.displayName = "Tab";
108
+ exports.Tab = Tab;
109
+ exports.Tabs = Tabs;
110
+ //# sourceMappingURL=Tab-BbP8jBcK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab-BbP8jBcK.cjs","sources":["../src/components/Tabs/_tabUtils.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/Tab.tsx"],"sourcesContent":["export const TAB_DISPLAY_MAP: Record<\"horizontal\" | \"vertical\", { display: string, flexDirection: string }> = {\n horizontal: { display: \"flex\", flexDirection: \"column\" },\n vertical: { display: \"flex\", flexDirection: \"row\" }\n};","import {\n Children,\n isValidElement,\n useState,\n type FC,\n type ReactElement,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport {\n Tabs as MuiTabs,\n Tab as MuiTab,\n Box,\n type TabsProps as MuiTabsProps,\n} from '@mui/material';\n\nimport { TabProps } from './Tab';\nimport { TAB_DISPLAY_MAP } from './_tabUtils';\nimport { mergeSx } from '../_shared/mergeSx';\n\ntype PickTabsProps = Pick<\n MuiTabsProps,\n | 'centered'\n | 'indicatorColor'\n | 'orientation'\n | 'scrollButtons'\n | 'variant'\n | 'className'\n | 'sx'\n | 'visibleScrollbar'\n | 'allowScrollButtonsMobile'\n>;\n\nexport interface TabsProps extends PickTabsProps {\n /** Uno o varios `<Tab>`. Children que no sean `<Tab>` se ignoran. */\n children: ReactNode;\n /** Valor del tab inicialmente activo. Si no se provee, toma el `value` del primer `<Tab>` o `0`. */\n defaultValue?: number | string;\n /** Callback al cambiar de tab. Recibe el `value` del tab nuevo. */\n onChangeValue?: (newValue: number | string) => void;\n labelColor?: 'primary' | 'secondary' | 'inherit';\n /**\n * Cómo se manejan los paneles al cambiar de tab:\n * - `false` (default): **unmount** — solo se renderiza el panel activo; los\n * demás se desmontan. El state interno de los hijos se pierde al navegar.\n * Menor uso de memoria.\n * - `true`: **keep mounted** — renderiza todos los paneles pero oculta los\n * no activos con `display: none`. El state se preserva (inputs, scroll,\n * timers, subscripciones) al navegar entre tabs.\n */\n keepMounted?: boolean;\n}\n\nexport const Tabs: FC<TabsProps> = ({\n children,\n defaultValue,\n onChangeValue,\n centered = true,\n orientation = 'horizontal',\n scrollButtons = 'auto',\n variant = 'standard',\n indicatorColor = 'primary',\n labelColor = 'primary',\n className,\n allowScrollButtonsMobile = true,\n keepMounted = false,\n sx,\n}) => {\n // Filtra a solo <Tab> children — acepta arrays, single child, fragments,\n // y descarta cualquier otra cosa (strings, null, condicionales falsy).\n const tabs: ReactElement<TabProps>[] = Children.toArray(children).filter(\n (child): child is ReactElement<TabProps> =>\n isValidElement(child) &&\n (child.type as { displayName?: string })?.displayName === 'Tab',\n );\n\n const firstValue = tabs[0]?.props.value;\n const [currentValue, setCurrentValue] = useState<string | number>(\n defaultValue ?? firstValue ?? 0,\n );\n\n const handleChange = (_event: SyntheticEvent, newValue: number | string) => {\n setCurrentValue(newValue);\n onChangeValue?.(newValue);\n };\n\n const { display, flexDirection } = TAB_DISPLAY_MAP[orientation];\n\n return (\n <Box sx={{ display, flexDirection }}>\n <MuiTabs\n value={currentValue}\n onChange={handleChange}\n centered={centered}\n indicatorColor={indicatorColor}\n orientation={orientation}\n scrollButtons={scrollButtons}\n variant={variant}\n className={className}\n textColor={labelColor}\n allowScrollButtonsMobile={allowScrollButtonsMobile}\n sx={mergeSx({}, sx)}\n >\n {tabs.map((tab, idx) => {\n const {\n label,\n icon,\n value = idx,\n disabled,\n wrapped,\n iconPosition,\n className: tabClassName,\n sx: tabSx,\n } = tab.props;\n return (\n <MuiTab\n key={value}\n label={label}\n icon={icon}\n value={value}\n disabled={disabled}\n wrapped={wrapped}\n iconPosition={iconPosition}\n className={tabClassName}\n sx={tabSx}\n />\n );\n })}\n </MuiTabs>\n\n <Box m={2} sx={{ width: '100%' }}>\n {keepMounted\n ? tabs.map((tab, idx) => {\n const value = tab.props.value ?? idx;\n const isActive = value === currentValue;\n return (\n <Box\n key={value}\n role=\"tabpanel\"\n // `display: none` mantiene el nodo en el DOM — state de los\n // hijos (inputs, useState, etc.) no se pierde al navegar.\n sx={{ display: isActive ? 'block' : 'none' }}\n aria-hidden={!isActive}\n >\n {tab.props.children}\n </Box>\n );\n })\n : tabs.map((tab, idx) => {\n const value = tab.props.value ?? idx;\n if (value !== currentValue) return null;\n return (\n <Box key={value} role=\"tabpanel\">\n {tab.props.children}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n};\n\nexport default Tabs;\n","import React from \"react\";\nimport { TabProps as MuiTabProps } from \"@mui/material\";\n\ntype PickMuiTabProps = Pick<\n MuiTabProps,\n \"label\" | \"icon\" | \"disabled\" | \"sx\" | \"value\" | \"wrapped\" | \"iconPosition\" | \"className\" | \"disabled\"| 'disableRipple'\n>;\n\nexport interface TabProps extends PickMuiTabProps {\n value?: number;\n onChange?: () => void;\n children?: React.ReactNode;\n}\n\nexport const Tab = (_: TabProps): null => null;\n\nTab.displayName = \"Tab\";\n\nexport default Tab;\n"],"names":["Children","isValidElement","_a","useState","Box","jsx","MuiTabs","mergeSx","MuiTab"],"mappings":";;;;;AAAO,MAAM,kBAAiG;AAAA,EAC5G,YAAY,EAAE,SAAS,QAAQ,eAAe,SAAA;AAAA,EAC9C,UAAU,EAAE,SAAS,QAAQ,eAAe,MAAA;AAC9C;ACkDO,MAAM,OAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,2BAA2B;AAAA,EAC3B,cAAc;AAAA,EACd;AACF,MAAM;;AAGJ,QAAM,OAAiCA,MAAAA,SAAS,QAAQ,QAAQ,EAAE;AAAA,IAChE,CAAC,UAAA;;AACCC,mBAAAA,eAAe,KAAK,OACnBC,MAAA,MAAM,SAAN,gBAAAA,IAAyC,iBAAgB;AAAA;AAAA,EAAA;AAG9D,QAAM,cAAa,UAAK,CAAC,MAAN,mBAAS,MAAM;AAClC,QAAM,CAAC,cAAc,eAAe,IAAIC,MAAAA;AAAAA,KACtC,2CAAgB,eAAhB,YAA8B;AAAA,EAAA;AAGhC,QAAM,eAAe,CAAC,QAAwB,aAA8B;AAC1E,oBAAgB,QAAQ;AACxB,mDAAgB;AAAA,EAClB;AAEA,QAAM,EAAE,SAAS,kBAAkB,gBAAgB,WAAW;AAE9D,yCACGC,SAAAA,KAAA,EAAI,IAAI,EAAE,SAAS,iBAClB,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,SAAAA;AAAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,IAAIC,QAAAA,QAAQ,CAAA,GAAI,EAAE;AAAA,QAEjB,UAAA,KAAK,IAAI,CAAC,KAAK,QAAQ;AACtB,gBAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,IAAI;AAAA,UAAA,IACF,IAAI;AACR,iBACEF,2BAAAA;AAAAA,YAACG,SAAAA;AAAAA,YAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW;AAAA,cACX,IAAI;AAAA,YAAA;AAAA,YARC;AAAA,UAAA;AAAA,QAWX,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHH,2BAAAA,IAACD,SAAAA,KAAA,EAAI,GAAG,GAAG,IAAI,EAAE,OAAO,OAAA,GACrB,UAAA,cACG,KAAK,IAAI,CAAC,KAAK,QAAQ;;AACvB,YAAM,SAAQF,MAAA,IAAI,MAAM,UAAV,OAAAA,MAAmB;AACjC,YAAM,WAAW,UAAU;AAC3B,aACEG,2BAAAA;AAAAA,QAACD,SAAAA;AAAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UAGL,IAAI,EAAE,SAAS,WAAW,UAAU,OAAA;AAAA,UACpC,eAAa,CAAC;AAAA,UAEb,cAAI,MAAM;AAAA,QAAA;AAAA,QAPN;AAAA,MAAA;AAAA,IAUX,CAAC,IACC,KAAK,IAAI,CAAC,KAAK,QAAQ;;AACvB,YAAM,SAAQF,MAAA,IAAI,MAAM,UAAV,OAAAA,MAAmB;AACjC,UAAI,UAAU,aAAc,QAAO;AACnC,4CACGE,SAAAA,KAAA,EAAgB,MAAK,YACnB,UAAA,IAAI,MAAM,YADH,KAEV;AAAA,IAEJ,CAAC,EAAA,CACL;AAAA,EAAA,GACF;AAEJ;AClJO,MAAM,MAAM,CAAC,MAAsB;AAE1C,IAAI,cAAc;;;"}