@soyfri/shared-library 2.0.0-beta8 → 3.1.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.
- package/Alert-B3SMPD1s.cjs +31 -0
- package/Alert-B3SMPD1s.cjs.map +1 -0
- package/Alert-YsPScpSE.js +32 -0
- package/Alert-YsPScpSE.js.map +1 -0
- package/{Autocomplete-BA-cGASd.js → Autocomplete-C_lW1VER.js} +57 -36
- package/Autocomplete-C_lW1VER.js.map +1 -0
- package/{Autocomplete-C2x-lBvZ.cjs → Autocomplete-CejWztBY.cjs} +56 -35
- package/Autocomplete-CejWztBY.cjs.map +1 -0
- package/{Avatar-9L7YMxya.cjs → Avatar-Dw5rzayR.cjs} +28 -24
- package/Avatar-Dw5rzayR.cjs.map +1 -0
- package/{Avatar-BJTr-PBd.js → Avatar-H8akSege.js} +28 -24
- package/Avatar-H8akSege.js.map +1 -0
- package/Breadcrumbs-B9I3vxPb.cjs +25 -0
- package/Breadcrumbs-B9I3vxPb.cjs.map +1 -0
- package/Breadcrumbs-C41SPbtX.js +26 -0
- package/Breadcrumbs-C41SPbtX.js.map +1 -0
- package/Button-C17mExpd.cjs.map +1 -1
- package/Button-UkkP-bNw.js.map +1 -1
- package/ButtonGroup-CNunDofQ.cjs +33 -0
- package/ButtonGroup-CNunDofQ.cjs.map +1 -0
- package/ButtonGroup-CcKUZ-lT.js +34 -0
- package/ButtonGroup-CcKUZ-lT.js.map +1 -0
- package/Card-DYKGY-NG.js +116 -0
- package/Card-DYKGY-NG.js.map +1 -0
- package/Card-Dr1-ATRY.cjs +115 -0
- package/Card-Dr1-ATRY.cjs.map +1 -0
- package/Checkbox-BCqMFWt4.cjs +187 -0
- package/Checkbox-BCqMFWt4.cjs.map +1 -0
- package/Checkbox-gB5YKkVo.js +188 -0
- package/Checkbox-gB5YKkVo.js.map +1 -0
- package/{DatePicker-8f_9bwhS.js → DatePicker-_IGWc3I5.js} +38 -62
- package/DatePicker-_IGWc3I5.js.map +1 -0
- package/{DatePicker-DLSfkgGA.cjs → DatePicker-t7uDTZMl.cjs} +42 -66
- package/DatePicker-t7uDTZMl.cjs.map +1 -0
- package/{DateTimePicker-CWNW09-O.cjs → DateTimePicker-BxQyjTCY.cjs} +33 -24
- package/DateTimePicker-BxQyjTCY.cjs.map +1 -0
- package/{DateTimePicker-D4L9GAod.js → DateTimePicker-CrmWav_j.js} +29 -20
- package/DateTimePicker-CrmWav_j.js.map +1 -0
- package/Divider-BApcM5CV.js +28 -0
- package/Divider-BApcM5CV.js.map +1 -0
- package/Divider-CIY0JK4U.cjs +27 -0
- package/Divider-CIY0JK4U.cjs.map +1 -0
- package/{Input-Cp911l23.js → Input-BL1NUIbr.js} +36 -15
- package/Input-BL1NUIbr.js.map +1 -0
- package/{Input-DI0jfq5X.cjs → Input-BcLJlPRo.cjs} +39 -18
- package/Input-BcLJlPRo.cjs.map +1 -0
- package/{Modal-Bnz6d9m9.js → Modal-C_QY7ZzY.js} +137 -105
- package/Modal-C_QY7ZzY.js.map +1 -0
- package/{Modal-Bm_HH9cv.cjs → Modal-D_6ZdSzw.cjs} +132 -100
- package/Modal-D_6ZdSzw.cjs.map +1 -0
- package/README.md +181 -173
- package/{RadioGroup-CxqDHap1.cjs → RadioGroup-Dd0rHXSX.cjs} +10 -8
- package/RadioGroup-Dd0rHXSX.cjs.map +1 -0
- package/{RadioGroup-DMi9FvMP.js → RadioGroup-bO-ahP9T.js} +10 -8
- package/RadioGroup-bO-ahP9T.js.map +1 -0
- package/{Select-3CBOfM2H.js → Select-BY5Y0qZ1.js} +160 -231
- package/Select-BY5Y0qZ1.js.map +1 -0
- package/{Select-Bku4f4f8.cjs → Select-CURrHSyl.cjs} +155 -226
- package/Select-CURrHSyl.cjs.map +1 -0
- package/Spinner-B6sThC1p.js +74 -0
- package/Spinner-B6sThC1p.js.map +1 -0
- package/Spinner-D7qRmNS9.cjs +73 -0
- package/Spinner-D7qRmNS9.cjs.map +1 -0
- package/StatusMessage-B3nXpuRl.cjs +88 -0
- package/StatusMessage-B3nXpuRl.cjs.map +1 -0
- package/StatusMessage-D0WgSBx7.js +89 -0
- package/StatusMessage-D0WgSBx7.js.map +1 -0
- package/Step-BArsou1V.js +301 -0
- package/Step-BArsou1V.js.map +1 -0
- package/Step-Nd7SJbRZ.cjs +300 -0
- package/Step-Nd7SJbRZ.cjs.map +1 -0
- package/{Switch-BIeobv6i.cjs → Switch-CQFOopYy.cjs} +6 -3
- package/Switch-CQFOopYy.cjs.map +1 -0
- package/{Switch-DQEOxM2R.js → Switch-D72dpkH2.js} +6 -3
- package/Switch-D72dpkH2.js.map +1 -0
- package/Tab-D1S7kxXI.cjs +137 -0
- package/Tab-D1S7kxXI.cjs.map +1 -0
- package/Tab-DycIMXmQ.js +138 -0
- package/Tab-DycIMXmQ.js.map +1 -0
- package/components/ActionMenu/ActionMenu.cjs +52 -52
- package/components/ActionMenu/ActionMenu.cjs.map +1 -1
- package/components/ActionMenu/ActionMenu.d.ts +20 -36
- package/components/ActionMenu/ActionMenu.js +55 -55
- package/components/ActionMenu/ActionMenu.js.map +1 -1
- package/components/ActionMenu/index.d.ts +2 -2
- package/components/Alert/Alert.cjs +6 -0
- package/components/Alert/Alert.cjs.map +1 -0
- package/components/Alert/Alert.d.ts +31 -0
- package/components/Alert/Alert.js +6 -0
- package/components/Alert/Alert.js.map +1 -0
- package/components/Alert/index.d.ts +2 -0
- package/components/Alert.d.ts +6 -0
- package/components/AppBar/AppBar.cjs +2 -219
- package/components/AppBar/AppBar.cjs.map +1 -1
- package/components/AppBar/AppBar.d.ts +6 -6
- package/components/AppBar/AppBar.js +5 -222
- package/components/AppBar/AppBar.js.map +1 -1
- package/components/AppBar/index.d.ts +0 -6
- package/components/Autocomplete/Autocomplete.cjs +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +8 -6
- package/components/Autocomplete/Autocomplete.helpers.d.ts +8 -4
- package/components/Autocomplete/Autocomplete.js +1 -1
- package/components/Autocomplete/_parts/AutocompleteOption.d.ts +5 -8
- package/components/Autocomplete/index.d.ts +1 -1
- package/components/Avatar/Avatar.cjs +1 -1
- package/components/Avatar/Avatar.d.ts +16 -1
- package/components/Avatar/Avatar.js +1 -1
- package/components/Avatar/index.d.ts +1 -0
- package/components/Breadcrumbs/Breadcrumbs.cjs +6 -0
- package/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -0
- package/components/Breadcrumbs/Breadcrumbs.d.ts +16 -0
- package/components/Breadcrumbs/Breadcrumbs.js +6 -0
- package/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/components/Breadcrumbs/index.d.ts +2 -0
- package/components/Breadcrumbs.d.ts +6 -0
- package/components/Button/Button.d.ts +5 -5
- package/components/Button/index.d.ts +1 -0
- package/components/ButtonGroup/ButtonGroup.cjs +6 -0
- package/components/ButtonGroup/ButtonGroup.cjs.map +1 -0
- package/components/ButtonGroup/ButtonGroup.d.ts +18 -0
- package/components/ButtonGroup/ButtonGroup.js +6 -0
- package/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/components/ButtonGroup/index.d.ts +2 -0
- package/components/ButtonGroup.d.ts +6 -0
- package/components/Card/Card.cjs +1 -4
- package/components/Card/Card.cjs.map +1 -1
- package/components/Card/Card.d.ts +21 -50
- package/components/Card/Card.js +1 -4
- package/components/Card/Card.sx.d.ts +3 -6
- package/components/Card/index.d.ts +1 -1
- package/components/Checkbox/Checkbox.cjs +6 -0
- package/components/Checkbox/Checkbox.cjs.map +1 -0
- package/components/Checkbox/Checkbox.d.ts +55 -0
- package/components/Checkbox/Checkbox.js +6 -0
- package/components/Checkbox/Checkbox.js.map +1 -0
- package/components/Checkbox/Checkbox.sx.d.ts +13 -0
- package/components/Checkbox/index.d.ts +2 -0
- package/components/Checkbox.d.ts +6 -0
- package/components/Chip/Chip.cjs +2 -1
- package/components/Chip/Chip.cjs.map +1 -1
- package/components/Chip/Chip.js +3 -2
- package/components/Chip/index.d.ts +2 -1
- package/components/Chip.d.ts +4 -0
- package/components/DatePicker/DatePicker.cjs +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -13
- package/components/DatePicker/DatePicker.js +1 -1
- package/components/DatePicker/index.d.ts +1 -1
- package/components/DateTimePicker/DateTimePicker.cjs +1 -1
- package/components/DateTimePicker/DateTimePicker.d.ts +10 -6
- package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
- package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
- package/components/DateTimePicker/DateTimePicker.js +1 -1
- package/components/DateTimePicker/index.d.ts +1 -1
- package/components/Divider/Divider.cjs +6 -0
- package/components/Divider/Divider.cjs.map +1 -0
- package/components/Divider/Divider.d.ts +17 -0
- package/components/Divider/Divider.js +6 -0
- package/components/Divider/Divider.js.map +1 -0
- package/components/Divider/index.d.ts +2 -0
- package/components/Divider.d.ts +6 -0
- package/components/Drawer/Drawer.cjs +10 -6
- package/components/Drawer/Drawer.cjs.map +1 -1
- package/components/Drawer/Drawer.js +11 -7
- package/components/Drawer/Drawer.js.map +1 -1
- package/components/Drawer/DrawerItem.d.ts +6 -1
- package/components/Gallery/Gallery.cjs +154 -79
- package/components/Gallery/Gallery.cjs.map +1 -1
- package/components/Gallery/Gallery.d.ts +25 -9
- package/components/Gallery/Gallery.js +154 -79
- package/components/Gallery/Gallery.js.map +1 -1
- package/components/Gallery/GalleryLightbox.d.ts +6 -10
- package/components/Gallery/GalleryMain.d.ts +3 -7
- package/components/Gallery/GalleryThumbnails.d.ts +7 -11
- package/components/Gallery/index.d.ts +2 -1
- package/components/Gallery.d.ts +4 -0
- package/components/Icon/Icon.cjs +6 -8
- package/components/Icon/Icon.cjs.map +1 -1
- package/components/Icon/Icon.d.ts +11 -17
- package/components/Icon/Icon.js +6 -8
- package/components/Icon/Icon.js.map +1 -1
- package/components/Icon/index.d.ts +2 -1
- package/components/Icon.d.ts +4 -0
- package/components/Input/Input.cjs +1 -1
- package/components/Input/Input.d.ts +13 -2
- package/components/Input/Input.helpers.d.ts +4 -4
- package/components/Input/Input.js +1 -1
- package/components/Input/index.d.ts +1 -1
- package/components/InputGroup/InputGroup.cjs +23 -22
- package/components/InputGroup/InputGroup.cjs.map +1 -1
- package/components/InputGroup/InputGroup.d.ts +4 -4
- package/components/InputGroup/InputGroup.js +22 -21
- package/components/InputGroup/InputGroup.js.map +1 -1
- package/components/InputGroup/index.d.ts +2 -1
- package/components/InputGroup.d.ts +4 -0
- package/components/Modal/Modal.cjs +2 -2
- package/components/Modal/Modal.d.ts +27 -5
- package/components/Modal/Modal.js +2 -2
- package/components/Modal/ModalBody.d.ts +6 -1
- package/components/Modal/ModalFooter.d.ts +4 -4
- package/components/Modal/ModalHeader.d.ts +6 -1
- package/components/Modal/index.d.ts +3 -2
- package/components/RadioGroup/RadioGroup.cjs +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +9 -3
- package/components/RadioGroup/RadioGroup.js +1 -1
- package/components/RadioGroup/index.d.ts +1 -1
- package/components/Select/Select.cjs +1 -1
- package/components/Select/Select.d.ts +37 -18
- package/components/Select/Select.helpers.d.ts +5 -19
- package/components/Select/Select.js +1 -1
- package/components/Select/index.d.ts +1 -1
- package/components/Spinner/Spinner.cjs +6 -0
- package/components/Spinner/Spinner.cjs.map +1 -0
- package/components/Spinner/Spinner.d.ts +26 -0
- package/components/Spinner/Spinner.js +6 -0
- package/components/Spinner/Spinner.js.map +1 -0
- package/components/Spinner/index.d.ts +2 -0
- package/components/Spinner.d.ts +6 -0
- package/components/Stat/Stat.cjs +2 -2
- package/components/Stat/Stat.js +3 -3
- package/components/Stat/Stat.js.map +1 -1
- package/components/Stat/index.d.ts +2 -1
- package/components/Stat.d.ts +4 -0
- package/components/StatusMessage/StatusMessage.cjs +1 -1
- package/components/StatusMessage/StatusMessage.d.ts +20 -36
- package/components/StatusMessage/StatusMessage.js +1 -1
- package/components/Stepper/Stepper.cjs +6 -2
- package/components/Stepper/Stepper.cjs.map +1 -1
- package/components/Stepper/Stepper.d.ts +9 -8
- package/components/Stepper/Stepper.js +6 -2
- package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +28 -22
- package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
- package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
- package/components/Stepper/index.d.ts +6 -2
- package/components/Stepper.d.ts +4 -0
- package/components/Switch/Switch.cjs +1 -1
- package/components/Switch/Switch.d.ts +7 -2
- package/components/Switch/Switch.js +1 -1
- package/components/Tabs/Tab.d.ts +13 -2
- package/components/Tabs/Tabs.cjs +3 -2
- package/components/Tabs/Tabs.cjs.map +1 -1
- package/components/Tabs/Tabs.d.ts +33 -16
- package/components/Tabs/Tabs.js +3 -2
- package/components/Tabs/index.d.ts +4 -2
- package/components/Tabs.d.ts +4 -0
- package/components/Timeline/Timeline.cjs +3 -2
- package/components/Timeline/Timeline.cjs.map +1 -1
- package/components/Timeline/Timeline.d.ts +4 -8
- package/components/Timeline/Timeline.js +3 -2
- package/components/Timeline/Timeline.js.map +1 -1
- package/components/Timeline/index.d.ts +4 -2
- package/components/Timeline.d.ts +4 -0
- package/components/_shared/mergeSx.d.ts +7 -0
- package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
- package/formField.sx-8_QRnKxv.js.map +1 -0
- package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
- package/formField.sx-BAX7KwMR.cjs.map +1 -0
- package/index.cjs +49 -26
- package/index.cjs.map +1 -1
- package/index.d.ts +13 -1
- package/index.js +45 -25
- package/index.js.map +1 -1
- package/local/affiliations/affiliations.dev.soyfri.com-key.pem +28 -0
- package/local/affiliations/affiliations.dev.soyfri.com.pem +27 -0
- package/local/aficiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
- package/local/aficiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
- package/local/afiliaciones/afiliaciones.dev.soyfri.com-key.pem +28 -0
- package/local/afiliaciones/afiliaciones.dev.soyfri.com.pem +27 -0
- package/local/root/rootCA-key.pem +40 -0
- package/local/root/rootCA.pem +30 -0
- package/local/soporte/supportweb.dev.soyfri.com-key.pem +28 -0
- package/local/soporte/supportweb.dev.soyfri.com.pem +27 -0
- package/local/support/supportweb.dev.soyfri.com-key.pem +28 -0
- package/local/support/supportweb.dev.soyfri.com.pem +27 -0
- package/mergeSx-BXoNZjB_.js +10 -0
- package/mergeSx-BXoNZjB_.js.map +1 -0
- package/mergeSx-Dbccoo_H.cjs +9 -0
- package/mergeSx-Dbccoo_H.cjs.map +1 -0
- package/mui.d.ts +2 -1
- package/package.json +83 -76
- package/theme/componentStyles.d.ts +1 -1
- package/tokens-BRrcP_p_.js +21 -0
- package/tokens-BRrcP_p_.js.map +1 -0
- package/tokens-jaWWNk39.cjs +20 -0
- package/tokens-jaWWNk39.cjs.map +1 -0
- package/utils/index.d.ts +2 -0
- package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
- package/Autocomplete-BA-cGASd.js.map +0 -1
- package/Autocomplete-C2x-lBvZ.cjs.map +0 -1
- package/Avatar-9L7YMxya.cjs.map +0 -1
- package/Avatar-BJTr-PBd.js.map +0 -1
- package/Card-DG_crfkK.cjs +0 -185
- package/Card-DG_crfkK.cjs.map +0 -1
- package/Card-Ug-ttVSh.js +0 -186
- package/Card-Ug-ttVSh.js.map +0 -1
- package/DatePicker-8f_9bwhS.js.map +0 -1
- package/DatePicker-DLSfkgGA.cjs.map +0 -1
- package/DateRangePicker-BVpeJCHI.js +0 -76
- package/DateRangePicker-BVpeJCHI.js.map +0 -1
- package/DateRangePicker-B_hKQhbj.cjs +0 -75
- package/DateRangePicker-B_hKQhbj.cjs.map +0 -1
- package/DateTimePicker-CWNW09-O.cjs.map +0 -1
- package/DateTimePicker-D4L9GAod.js.map +0 -1
- package/Input-Cp911l23.js.map +0 -1
- package/Input-DI0jfq5X.cjs.map +0 -1
- package/Modal-Bm_HH9cv.cjs.map +0 -1
- package/Modal-Bnz6d9m9.js.map +0 -1
- package/RadioGroup-CxqDHap1.cjs.map +0 -1
- package/RadioGroup-DMi9FvMP.js.map +0 -1
- package/Select-3CBOfM2H.js.map +0 -1
- package/Select-Bku4f4f8.cjs.map +0 -1
- package/StatusMessage-C5B6oGZ_.cjs +0 -78
- package/StatusMessage-C5B6oGZ_.cjs.map +0 -1
- package/StatusMessage-D1GlfQdz.js +0 -79
- package/StatusMessage-D1GlfQdz.js.map +0 -1
- package/Step-Dq0N72YB.js +0 -49
- package/Step-Dq0N72YB.js.map +0 -1
- package/Step-a8U8O-91.cjs +0 -48
- package/Step-a8U8O-91.cjs.map +0 -1
- package/Switch-BIeobv6i.cjs.map +0 -1
- package/Switch-DQEOxM2R.js.map +0 -1
- package/Tab-Co31KY2k.cjs +0 -95
- package/Tab-Co31KY2k.cjs.map +0 -1
- package/Tab-DiK62gRz.js +0 -96
- package/Tab-DiK62gRz.js.map +0 -1
- package/components/AppBar/AppBarBrand.d.ts +0 -31
- package/components/AppBar/AppBarUserMenu.d.ts +0 -65
- package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
- package/components/DatePicker/DatePicker.types.d.ts +0 -1
- package/components/DateRangePicker/DateRangePicker.cjs +0 -5
- package/components/DateRangePicker/DateRangePicker.cjs.map +0 -1
- package/components/DateRangePicker/DateRangePicker.d.ts +0 -15
- package/components/DateRangePicker/DateRangePicker.definitions.d.ts +0 -6
- package/components/DateRangePicker/DateRangePicker.js +0 -5
- package/components/DateRangePicker/DateRangePicker.js.map +0 -1
- package/components/DateRangePicker/index.d.ts +0 -1
- package/components/DateRangePicker.d.ts +0 -2
- package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
- package/components/Input/Input.types.d.ts +0 -1
- package/components/PageLoader/PageLoader.cjs +0 -61
- package/components/PageLoader/PageLoader.cjs.map +0 -1
- package/components/PageLoader/PageLoader.d.ts +0 -38
- package/components/PageLoader/PageLoader.js +0 -61
- package/components/PageLoader/PageLoader.js.map +0 -1
- package/components/PageLoader/index.d.ts +0 -2
- package/components/PageLoader.d.ts +0 -6
- package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
- package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
- package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
- package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
- package/components/ScrollTopButton/ScrollTopButton.js +0 -79
- package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
- package/components/ScrollTopButton/index.d.ts +0 -4
- package/components/ScrollTopButton.d.ts +0 -6
- package/components/Select/Select.definitions.d.ts +0 -17
- package/components/Select/Select.types.d.ts +0 -1
- package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
- package/formField.sx-CQ1mbk9M.cjs.map +0 -1
- package/formField.sx-DfVbMe0V.js.map +0 -1
- package/hooks/Wizard/Wizard.cjs +0 -7
- package/hooks/Wizard/Wizard.cjs.map +0 -1
- package/hooks/Wizard/Wizard.js +0 -7
- package/hooks/Wizard/Wizard.js.map +0 -1
- package/hooks/Wizard/index.d.ts +0 -3
- package/hooks/Wizard/useWizard.d.ts +0 -9
- package/hooks/Wizard.d.ts +0 -2
- package/useWizard-CWdIxZzX.cjs +0 -94
- package/useWizard-CWdIxZzX.cjs.map +0 -1
- package/useWizard-CWq--C3o.js +0 -95
- package/useWizard-CWq--C3o.js.map +0 -1
- /package/{styles.css → index.css} +0 -0
package/README.md
CHANGED
|
@@ -1,243 +1,251 @@
|
|
|
1
1
|
# @soyfri/shared-library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Librería de componentes React de FRI, construida sobre **Material UI v7** + TypeScript. Provee componentes UI consistentes y tipados para los frontends del ecosistema (`soporte`, `afiliaciones`, …).
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
- [Características](#características)
|
|
8
|
-
- [Instalación](#instalación)
|
|
9
|
-
- [Uso](#uso)
|
|
10
|
-
- [Componentes Disponibles](#componentes-disponibles)
|
|
11
|
-
- [Desarrollo](#desarrollo)
|
|
12
|
-
- [Scripts Disponibles](#scripts-disponibles)
|
|
13
|
-
- [Storybook](#storybook)
|
|
14
|
-
- [Testing](#testing)
|
|
15
|
-
- [Tecnologías](#tecnologías)
|
|
16
|
-
- [Estructura del Proyecto](#estructura-del-proyecto)
|
|
17
|
-
|
|
18
|
-
## ✨ Características
|
|
19
|
-
|
|
20
|
-
- 🎨 **Componentes tipados**: Todos los componentes están construidos con TypeScript para mayor seguridad de tipos
|
|
21
|
-
- 📚 **Documentación con Storybook**: Cada componente incluye historias interactivas y documentación
|
|
22
|
-
- 🎯 **Material-UI**: Basado en Material-UI para un diseño consistente y accesible
|
|
23
|
-
- 🌈 **Tailwind CSS**: Integración con Tailwind para estilos utilitarios
|
|
24
|
-
- 🧪 **Testing**: Configurado con Vitest y Playwright para testing de componentes
|
|
25
|
-
- 📦 **Build optimizado**: Configuración con Rollup para generar builds ESM y CommonJS
|
|
26
|
-
|
|
27
|
-
## 📦 Instalación
|
|
5
|
+
## Instalación
|
|
28
6
|
|
|
29
7
|
```bash
|
|
30
8
|
npm install @soyfri/shared-library
|
|
31
9
|
```
|
|
32
10
|
|
|
33
|
-
|
|
11
|
+
### Peer dependencies
|
|
34
12
|
|
|
35
|
-
|
|
36
|
-
import { Button, Table, Select } from '@soyfri/shared-library';
|
|
37
|
-
import '@soyfri/shared-library/dist/styles.css';
|
|
13
|
+
El consumidor debe tener instaladas (la librería no las empaqueta):
|
|
38
14
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Mi Botón
|
|
44
|
-
</Button>
|
|
45
|
-
</div>
|
|
46
|
-
);
|
|
47
|
-
}
|
|
15
|
+
```
|
|
16
|
+
react >=18 react-dom >=18 react-hook-form ^7
|
|
17
|
+
@mui/material ^7 @mui/icons-material ^7 @mui/x-date-pickers ^8 @mui/lab ^7
|
|
18
|
+
@emotion/react ^11 @emotion/styled ^11 dayjs ^1
|
|
48
19
|
```
|
|
49
20
|
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
### Button
|
|
53
|
-
Componente de botón personalizable basado en Material-UI con soporte para iconos, diferentes tamaños y estados.
|
|
21
|
+
## Setup
|
|
54
22
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- Tamaños: `small`, `medium`, `large`
|
|
58
|
-
- Soporte para iconos de inicio y fin
|
|
59
|
-
- Estados de carga
|
|
60
|
-
- Completamente tipado
|
|
23
|
+
1. Envuelve la app en el `ThemeProvider` de MUI (los componentes leen el theme del contexto).
|
|
24
|
+
2. Importa los estilos una vez. El barrel los importa solo; si **solo** usas subpaths, impórtalos manualmente:
|
|
61
25
|
|
|
62
|
-
|
|
63
|
-
|
|
26
|
+
```tsx
|
|
27
|
+
import '@soyfri/shared-library/styles.css'
|
|
28
|
+
```
|
|
64
29
|
|
|
65
|
-
|
|
66
|
-
- Paginación interna automática
|
|
67
|
-
- Paginación externa controlada
|
|
68
|
-
- Columnas personalizables con renderizado custom
|
|
69
|
-
- Soporte para componentes complejos en celdas
|
|
70
|
-
- Completamente tipado con generics
|
|
30
|
+
## Dos formas de importar
|
|
71
31
|
|
|
72
|
-
|
|
73
|
-
|
|
32
|
+
```tsx
|
|
33
|
+
// 1) Subpath por componente (recomendado — tree-shaking, lo que usan los proyectos)
|
|
34
|
+
import { Button } from '@soyfri/shared-library/components/Button'
|
|
35
|
+
import { Table } from '@soyfri/shared-library/components/Table'
|
|
74
36
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- Agrupación de opciones
|
|
79
|
-
- Renderizado personalizado con avatars
|
|
80
|
-
- Placeholder configurable
|
|
37
|
+
// 2) Barrel raíz (importa styles.css automáticamente)
|
|
38
|
+
import { Button, Table, Select } from '@soyfri/shared-library'
|
|
39
|
+
```
|
|
81
40
|
|
|
82
|
-
|
|
83
|
-
Componente para mostrar avatares de usuarios con soporte para imágenes y texto.
|
|
41
|
+
> Cada componente se publica como subpath `@soyfri/shared-library/components/<Nombre>`.
|
|
84
42
|
|
|
85
|
-
|
|
86
|
-
Wrapper para iconos de Material-UI con propiedades consistentes.
|
|
43
|
+
---
|
|
87
44
|
|
|
88
|
-
|
|
89
|
-
Componente para mostrar estadísticas con diferentes plantillas de visualización.
|
|
45
|
+
## Componentes
|
|
90
46
|
|
|
91
|
-
|
|
92
|
-
- Plantilla simple
|
|
93
|
-
- Plantilla con chip
|
|
94
|
-
- Plantilla con lista de chips
|
|
95
|
-
- Colores personalizables
|
|
47
|
+
Uso mínimo de cada componente. Todos aceptan `sx` y son tipados.
|
|
96
48
|
|
|
97
|
-
###
|
|
98
|
-
Componente auxiliar para definir columnas en el componente Table.
|
|
49
|
+
### Formularios e inputs
|
|
99
50
|
|
|
100
|
-
|
|
51
|
+
**Button** — `variant` (`text`/`outlined`/`contained`), `color`, `size`, `loading`, `startIcon`/`endIcon`.
|
|
52
|
+
```tsx
|
|
53
|
+
<Button variant="contained" color="primary" onClick={fn}>Guardar</Button>
|
|
54
|
+
```
|
|
101
55
|
|
|
102
|
-
|
|
56
|
+
**Input** — campo de texto. Modo controlado (`value`/`onChange`) o RHF (`name`/`control`).
|
|
57
|
+
```tsx
|
|
58
|
+
<Input label="Nombre" value={v} onChange={setV} />
|
|
59
|
+
<Input label="Correo" type="email" name="email" control={control} />
|
|
60
|
+
```
|
|
103
61
|
|
|
104
|
-
|
|
105
|
-
|
|
62
|
+
**InputGroup** — agrupa inputs/botones adyacentes con bordes unificados.
|
|
63
|
+
```tsx
|
|
64
|
+
<InputGroup><Input label="Buscar" value={q} onChange={setQ} /><Button>Ir</Button></InputGroup>
|
|
65
|
+
```
|
|
106
66
|
|
|
107
|
-
|
|
67
|
+
**Select** + **Option** — single, múltiple y filtrable. Modo controlado o RHF.
|
|
68
|
+
```tsx
|
|
69
|
+
<Select label="País" value={v} onChange={setV} options={[{value:'gt',label:'Guatemala'}]} />
|
|
70
|
+
<Select label="Tags" multiple value={vals} onChange={setVals} options={opts} filterable />
|
|
71
|
+
```
|
|
108
72
|
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
cd shared-library
|
|
73
|
+
**Autocomplete** — búsqueda con `options` (`{value,label,img?}`), `multiple`.
|
|
74
|
+
```tsx
|
|
75
|
+
<Autocomplete label="Usuario" options={opts} value={v} onChange={setV} />
|
|
113
76
|
```
|
|
114
77
|
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
|
|
78
|
+
**Checkbox** / **Switch** — `label`, controlado (`checked`/`onChange`) o RHF (`name`/`control`).
|
|
79
|
+
```tsx
|
|
80
|
+
<Checkbox label="Acepto" checked={ok} onChange={setOk} />
|
|
81
|
+
<Switch label="Activo" checked={on} onChange={setOn} />
|
|
118
82
|
```
|
|
119
83
|
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
|
|
84
|
+
**RadioGroup** — `options` (`{value,label}`), `row`.
|
|
85
|
+
```tsx
|
|
86
|
+
<RadioGroup label="Tipo" options={[{value:'a',label:'A'},{value:'b',label:'B'}]} value={v} onChange={setV} />
|
|
123
87
|
```
|
|
124
88
|
|
|
125
|
-
|
|
89
|
+
**DatePicker** / **DateTimePicker** — valor `Dayjs`, `minDate`/`maxDate`.
|
|
90
|
+
```tsx
|
|
91
|
+
<DatePicker label="Fecha" value={date} onChange={setDate} />
|
|
92
|
+
```
|
|
126
93
|
|
|
127
|
-
|
|
128
|
-
- `npm run dev` - Inicia el modo de desarrollo con watch
|
|
129
|
-
- `npm run build:css` - Construye los estilos CSS
|
|
130
|
-
- `npm run watch:css` - Observa cambios en los estilos CSS
|
|
131
|
-
- `npm run clean` - Limpia la carpeta dist
|
|
132
|
-
- `npm run prepare` - Limpia y construye la librería
|
|
133
|
-
- `npm run storybook` - Inicia Storybook en modo desarrollo
|
|
134
|
-
- `npm run build-storybook` - Construye Storybook para producción
|
|
135
|
-
- `npm run dist` - Ejecuta el script de distribución personalizado
|
|
94
|
+
### Datos y visualización
|
|
136
95
|
|
|
137
|
-
|
|
96
|
+
**Table** + **Column** — paginación interna o externa, render por columna.
|
|
97
|
+
```tsx
|
|
98
|
+
<Table data={rows}>
|
|
99
|
+
<Column name="Nombre" field="name">{({name}) => <b>{name}</b>}</Column>
|
|
100
|
+
<Column name="Estado" field="status">{({status}) => <Chip label={status} />}</Column>
|
|
101
|
+
</Table>
|
|
102
|
+
```
|
|
138
103
|
|
|
139
|
-
|
|
104
|
+
**Avatar** — uno (`src`/`alt`/`fallback`) o grupo apilado (`items`).
|
|
105
|
+
```tsx
|
|
106
|
+
<Avatar src={url} alt="Ada" fallback="AL" />
|
|
107
|
+
<Avatar items={[{imageUrl:u1,text:'Ada'},{imageUrl:u2,text:'Bob'}]} displayedAvatars={3} />
|
|
108
|
+
```
|
|
140
109
|
|
|
141
|
-
|
|
110
|
+
**Chip** — `label`, `color`, `variant`, `onDelete`.
|
|
111
|
+
```tsx
|
|
112
|
+
<Chip label="Activo" color="success" size="small" />
|
|
113
|
+
```
|
|
142
114
|
|
|
143
|
-
|
|
144
|
-
|
|
115
|
+
**Stat** — KPI con plantillas `simple`/`chip`/`chipList`.
|
|
116
|
+
```tsx
|
|
117
|
+
<Stat simple statDisplay={() => <>Q 1,200</>} />
|
|
145
118
|
```
|
|
146
119
|
|
|
147
|
-
|
|
120
|
+
**Icon** — SVG por `path`/`url` o `children`, con `badge`, `spin`.
|
|
121
|
+
```tsx
|
|
122
|
+
<Icon url="/icons/user.svg" size="md" />
|
|
123
|
+
```
|
|
148
124
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
125
|
+
**Gallery** — galería con lightbox; `items` (`{url,type,title}`).
|
|
126
|
+
```tsx
|
|
127
|
+
<Gallery items={[{url:img,type:'image',title:'Doc'}]} />
|
|
128
|
+
```
|
|
153
129
|
|
|
154
|
-
|
|
130
|
+
**Timeline** + **TimelineItem** — línea temporal.
|
|
131
|
+
```tsx
|
|
132
|
+
<Timeline><TimelineItem>Creado</TimelineItem><TimelineItem>Aprobado</TimelineItem></Timeline>
|
|
133
|
+
```
|
|
155
134
|
|
|
156
|
-
|
|
157
|
-
|
|
135
|
+
**Stepper** + **Step** — pasos `horizontal`/`vertical`, `currentStep`.
|
|
136
|
+
```tsx
|
|
137
|
+
<Stepper currentStep={1}><Step label="Datos" /><Step label="Pago" /></Stepper>
|
|
158
138
|
```
|
|
159
139
|
|
|
160
|
-
|
|
140
|
+
### Feedback
|
|
141
|
+
|
|
142
|
+
**Alert** — `severity` (`success`/`info`/`warning`/`error`), `variant`.
|
|
143
|
+
```tsx
|
|
144
|
+
<Alert severity="error">No se pudo guardar</Alert>
|
|
145
|
+
```
|
|
161
146
|
|
|
162
|
-
|
|
147
|
+
**Spinner** — `size`, `color`.
|
|
148
|
+
```tsx
|
|
149
|
+
<Spinner size={16} />
|
|
150
|
+
```
|
|
163
151
|
|
|
164
|
-
|
|
152
|
+
**StatusMessage** — mensaje de estado como `alert` o `modal`.
|
|
153
|
+
```tsx
|
|
154
|
+
<StatusMessage open messageType="success" title="Listo" description="Guardado" close={fn} />
|
|
155
|
+
```
|
|
165
156
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
157
|
+
**Tooltip** — `text` envolviendo un hijo.
|
|
158
|
+
```tsx
|
|
159
|
+
<Tooltip text="Editar"><Button>✎</Button></Tooltip>
|
|
160
|
+
```
|
|
169
161
|
|
|
170
|
-
|
|
162
|
+
**Modal** (+ `ModalHeader`/`ModalBody`/`ModalFooter`) — `open`/`onClose`, `actions`, `staticBackdrop`, `maxWidth`.
|
|
163
|
+
```tsx
|
|
164
|
+
<Modal open={open} onClose={close} title="Confirmar" actions={[{text:'OK',onClick:save}]} staticBackdrop />
|
|
165
|
+
```
|
|
171
166
|
|
|
172
|
-
###
|
|
167
|
+
### Navegación
|
|
173
168
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
169
|
+
**Tabs** + **Tab** — paneles por contenido, o modo `nav` (enlaces controlados por ruta).
|
|
170
|
+
```tsx
|
|
171
|
+
<Tabs onChangeValue={setV}>
|
|
172
|
+
<Tab value={0} label="General">…</Tab>
|
|
173
|
+
<Tab value={1} label="Historial">…</Tab>
|
|
174
|
+
</Tabs>
|
|
175
|
+
// Modo nav (router): value controlado, sin paneles
|
|
176
|
+
<Tabs nav value={current}>
|
|
177
|
+
<Tab value="info" label="Info" component={Link} to="info" />
|
|
178
|
+
</Tabs>
|
|
179
|
+
```
|
|
178
180
|
|
|
179
|
-
|
|
181
|
+
**Breadcrumbs** — migas; los hijos son `Link`/`Typography`.
|
|
182
|
+
```tsx
|
|
183
|
+
<Breadcrumbs><Link href="/">Inicio</Link><Typography>Detalle</Typography></Breadcrumbs>
|
|
184
|
+
```
|
|
180
185
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- **Prettier**: Formateo de código
|
|
186
|
+
**Drawer** + **DrawerItem** — panel lateral colapsable.
|
|
187
|
+
```tsx
|
|
188
|
+
<Drawer open variant="permanent"><DrawerItem>Inicio</DrawerItem></Drawer>
|
|
189
|
+
```
|
|
186
190
|
|
|
187
|
-
|
|
191
|
+
**AppBar** — barra superior (incluye `AppBarMenuToggle`, `useAppBarContext`).
|
|
188
192
|
|
|
193
|
+
**MenuButton** — botón que abre un menú de `options`.
|
|
194
|
+
```tsx
|
|
195
|
+
<MenuButton buttonText="Acciones" options={[{label:'Editar',onClick:fn}]} />
|
|
189
196
|
```
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
│ │ ├── Avatar/
|
|
195
|
-
│ │ ├── Button/
|
|
196
|
-
│ │ ├── Column/
|
|
197
|
-
│ │ ├── Icon/
|
|
198
|
-
│ │ ├── Select/
|
|
199
|
-
│ │ ├── Stat/
|
|
200
|
-
│ │ └── Table/
|
|
201
|
-
│ ├── index.ts # Punto de entrada principal
|
|
202
|
-
│ └── styles.css # Estilos globales
|
|
203
|
-
├── dist/ # Archivos construidos
|
|
204
|
-
├── package.json
|
|
205
|
-
├── tsconfig.json
|
|
206
|
-
├── tailwind.config.js
|
|
207
|
-
├── rollup.config.cjs
|
|
208
|
-
└── vitest.config.ts
|
|
197
|
+
|
|
198
|
+
**ActionMenu** + **ActionMenuItem** — menú contextual (compound; `trigger` opcional, default ⋮).
|
|
199
|
+
```tsx
|
|
200
|
+
<ActionMenu><ActionMenuItem onClick={edit}>Editar</ActionMenuItem><ActionMenuItem onClick={del}>Eliminar</ActionMenuItem></ActionMenu>
|
|
209
201
|
```
|
|
210
202
|
|
|
211
|
-
###
|
|
203
|
+
### Layout y contenedores
|
|
204
|
+
|
|
205
|
+
**Card** — `variant`, `padding`; o composición con `title`/`subheader`/`action` y `contentSx`.
|
|
206
|
+
```tsx
|
|
207
|
+
<Card title="Resumen" action={<Button>Editar</Button>}>…</Card>
|
|
208
|
+
<Card contentSx={{ p: 0 }}><Table data={rows}>…</Table></Card> // tabla flush
|
|
209
|
+
```
|
|
212
210
|
|
|
213
|
-
|
|
211
|
+
**Divider** — separador `horizontal`/`vertical`.
|
|
212
|
+
```tsx
|
|
213
|
+
<Divider sx={{ my: 2 }} />
|
|
214
|
+
```
|
|
214
215
|
|
|
216
|
+
**ButtonGroup** — agrupa botones.
|
|
217
|
+
```tsx
|
|
218
|
+
<ButtonGroup><Button>Día</Button><Button>Mes</Button></ButtonGroup>
|
|
215
219
|
```
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
├── index.ts # Exportaciones
|
|
221
|
-
└── types.ts # Tipos específicos (opcional)
|
|
220
|
+
|
|
221
|
+
**Flyout** — panel flotante `open`/`onClose`, `anchor`.
|
|
222
|
+
```tsx
|
|
223
|
+
<Flyout open={open} onClose={close} anchor="right">…</Flyout>
|
|
222
224
|
```
|
|
223
225
|
|
|
224
|
-
|
|
226
|
+
### Hooks
|
|
227
|
+
|
|
228
|
+
**useClipboard** — copiar al portapapeles con feedback.
|
|
229
|
+
```tsx
|
|
230
|
+
import { useClipboard } from '@soyfri/shared-library/hooks/ClipBoard'
|
|
231
|
+
const { copy, CopyMessage } = useClipboard({ message: 'Copiado', severity: 'success' })
|
|
232
|
+
```
|
|
225
233
|
|
|
226
|
-
|
|
234
|
+
---
|
|
227
235
|
|
|
228
|
-
|
|
229
|
-
2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`)
|
|
230
|
-
3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`)
|
|
231
|
-
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
|
|
232
|
-
5. Crea un Pull Request
|
|
236
|
+
## Desarrollo
|
|
233
237
|
|
|
234
|
-
|
|
238
|
+
```bash
|
|
239
|
+
npm install
|
|
240
|
+
npm run dev # build en watch (tsup)
|
|
241
|
+
npm run storybook # Storybook en :6006 (documentación interactiva, 260+ stories)
|
|
242
|
+
npm run build # build de producción (vite + postbuild genera subpaths en dist/)
|
|
243
|
+
```
|
|
235
244
|
|
|
236
|
-
|
|
245
|
+
## Tecnologías
|
|
237
246
|
|
|
238
|
-
|
|
247
|
+
React 18/19 · Material UI v7 · TypeScript 5 · Tailwind CSS 4 · Storybook 9 · Vite/Rollup · Vitest + Playwright.
|
|
239
248
|
|
|
240
|
-
|
|
249
|
+
## Licencia
|
|
241
250
|
|
|
242
|
-
|
|
243
|
-
|
|
251
|
+
ISC
|
|
@@ -106,9 +106,9 @@ const RadioGroup = (props) => {
|
|
|
106
106
|
const buildSx = (effectiveError) => [
|
|
107
107
|
buildRadioGroupSx({ bordered, borderRadius, error: effectiveError }),
|
|
108
108
|
...presetSx ? [presetSx] : [],
|
|
109
|
-
...Array.isArray(sx) ? sx : [sx]
|
|
109
|
+
...Array.isArray(sx) ? sx : sx ? [sx] : []
|
|
110
110
|
];
|
|
111
|
-
const renderOptions = (
|
|
111
|
+
const renderOptions = (fieldName) => options.map((opt) => {
|
|
112
112
|
var _a2;
|
|
113
113
|
const inputId = (_a2 = opt.id) != null ? _a2 : `${fieldName != null ? fieldName : "radio"}-${opt.value}`;
|
|
114
114
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -124,14 +124,13 @@ const RadioGroup = (props) => {
|
|
|
124
124
|
}
|
|
125
125
|
),
|
|
126
126
|
label: opt.label,
|
|
127
|
-
checked: currentValue === opt.value,
|
|
128
127
|
disabled: disabled || opt.disabled
|
|
129
128
|
},
|
|
130
129
|
inputId
|
|
131
130
|
);
|
|
132
131
|
});
|
|
133
132
|
if ("control" in props && props.control) {
|
|
134
|
-
const { name: name2, control, validation } = props;
|
|
133
|
+
const { name: name2, control, validation, onValueChange } = props;
|
|
135
134
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
135
|
reactHookForm.Controller,
|
|
137
136
|
{
|
|
@@ -159,8 +158,11 @@ const RadioGroup = (props) => {
|
|
|
159
158
|
name: field.name,
|
|
160
159
|
value: (_b = field.value) != null ? _b : "",
|
|
161
160
|
onBlur: field.onBlur,
|
|
162
|
-
onChange: (_e, value2) =>
|
|
163
|
-
|
|
161
|
+
onChange: (_e, value2) => {
|
|
162
|
+
field.onChange(value2);
|
|
163
|
+
onValueChange == null ? void 0 : onValueChange(value2);
|
|
164
|
+
},
|
|
165
|
+
children: renderOptions(field.name)
|
|
164
166
|
})
|
|
165
167
|
),
|
|
166
168
|
finalHelperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: finalHelperText })
|
|
@@ -188,7 +190,7 @@ const RadioGroup = (props) => {
|
|
|
188
190
|
name,
|
|
189
191
|
value: value != null ? value : "",
|
|
190
192
|
onChange: (_e, next) => onChange(next),
|
|
191
|
-
children: renderOptions(
|
|
193
|
+
children: renderOptions(name)
|
|
192
194
|
})
|
|
193
195
|
),
|
|
194
196
|
helperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: helperText })
|
|
@@ -197,4 +199,4 @@ const RadioGroup = (props) => {
|
|
|
197
199
|
);
|
|
198
200
|
};
|
|
199
201
|
exports.RadioGroup = RadioGroup;
|
|
200
|
-
//# sourceMappingURL=RadioGroup-
|
|
202
|
+
//# sourceMappingURL=RadioGroup-Dd0rHXSX.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup-Dd0rHXSX.cjs","sources":["../src/components/RadioGroup/RadioGroup.sx.ts","../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BuildRadioGroupSxOptions {\n bordered: boolean;\n borderRadius: number | string;\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).\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 RadioGroup. Reproduce el estilo del antiguo\n * `FormRadioGroup` legacy: contenedor con borde + padding vertical.\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`, devuelve un sx mínimo (sólo helper text reset).\n */\nexport const buildRadioGroupSx = ({\n bordered,\n borderRadius,\n error,\n}: BuildRadioGroupSxOptions): 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 '& .MuiRadioGroup-root': {\n paddingTop: 1.25,\n paddingBottom: 1.25,\n paddingX: 1.5,\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 cualquier radio 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 },\n '& .MuiFormHelperText-root': {\n marginLeft: 0,\n },\n '& .MuiFormLabel-root': {\n marginBottom: 0.5,\n },\n });\n};\n","import type { FC } from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n FormLabel,\n Radio,\n RadioGroup as MuiRadioGroup,\n type RadioGroupProps as MuiRadioGroupProps,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildRadioGroupSx } from './RadioGroup.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport interface RadioOption {\n /** Valor que se emite cuando se selecciona la opción. */\n value: string;\n /** Texto mostrado al lado del radio. */\n label: string;\n /** Deshabilitar opción individualmente. */\n disabled?: boolean;\n /** ID custom del input (default: prefijo + value). */\n id?: string;\n}\n\nexport type RadioGroupSize = 'small' | 'medium';\n\n// ── Props base (todo lo común entre RHF y controlado) ────────────────────\nexport interface BaseRadioGroupProps\n extends Omit<MuiRadioGroupProps, 'value' | 'onChange' | 'defaultValue'> {\n options: RadioOption[];\n /** Label superior del grupo. */\n label?: string;\n /** Distribución horizontal (default: true — replica el comportamiento legacy). */\n row?: boolean;\n size?: RadioGroupSize;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Renderiza un contenedor con borde estilo \"form field\". Default: true. */\n bordered?: boolean;\n /** Border radius del contenedor (cuando bordered). Default: 10. */\n borderRadius?: number | string;\n defaultValue?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.RadioGroup`.\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 RHFRadioGroupProps extends BaseRadioGroupProps {\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?: (value: string) => void;\n value?: never;\n onChange?: never;\n}\n\nexport interface ControlledRadioGroupProps extends BaseRadioGroupProps {\n name?: string;\n control?: never;\n validation?: never;\n value: string;\n onChange: (value: string) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type RadioGroupProps = RHFRadioGroupProps | ControlledRadioGroupProps;\n\nexport const RadioGroup: FC<RadioGroupProps> = (props) => {\n const {\n options,\n label,\n row = true,\n size = 'small',\n disabled = false,\n error = false,\n helperText,\n bordered = true,\n borderRadius = 10,\n defaultValue,\n preset,\n sx,\n ...rest\n } = props as ControlledRadioGroupProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('RadioGroup', 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 buildRadioGroupSx({ bordered, borderRadius, error: effectiveError }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderOptions = (fieldName?: string) =>\n options.map((opt) => {\n const inputId = opt.id ?? `${fieldName ?? 'radio'}-${opt.value}`;\n return (\n <FormControlLabel\n key={inputId}\n value={opt.value}\n control={\n <Radio\n id={inputId}\n size={size}\n disabled={disabled || opt.disabled}\n />\n }\n label={opt.label}\n disabled={disabled || opt.disabled}\n />\n );\n });\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFRadioGroupProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultValue}\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 fullWidth\n >\n {label && <FormLabel>{label}</FormLabel>}\n <MuiRadioGroup\n {...rest}\n row={row}\n name={field.name}\n value={field.value ?? ''}\n onBlur={field.onBlur}\n onChange={(_e, value) => {\n field.onChange(value);\n onValueChange?.(value);\n }}\n >\n {renderOptions(field.name)}\n </MuiRadioGroup>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n }}\n />\n );\n }\n\n // ── Controlled mode ───────────────────────────────────────────────────\n const { value, onChange, name } = props as ControlledRadioGroupProps;\n return (\n <FormControl\n error={error}\n disabled={disabled}\n sx={buildSx(error)}\n fullWidth\n >\n {label && <FormLabel>{label}</FormLabel>}\n <MuiRadioGroup\n {...rest}\n row={row}\n name={name}\n value={value ?? ''}\n onChange={(_e, next) => onChange(next)}\n >\n {renderOptions(name)}\n </MuiRadioGroup>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n\nexport default RadioGroup;\n"],"names":["useTheme","resolvePreset","_a","jsx","FormControlLabel","Radio","name","Controller","jsxs","FormControl","FormLabel","MuiRadioGroup","value","FormHelperText"],"mappings":"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"}
|
|
@@ -105,9 +105,9 @@ const RadioGroup = (props) => {
|
|
|
105
105
|
const buildSx = (effectiveError) => [
|
|
106
106
|
buildRadioGroupSx({ bordered, borderRadius, error: effectiveError }),
|
|
107
107
|
...presetSx ? [presetSx] : [],
|
|
108
|
-
...Array.isArray(sx) ? sx : [sx]
|
|
108
|
+
...Array.isArray(sx) ? sx : sx ? [sx] : []
|
|
109
109
|
];
|
|
110
|
-
const renderOptions = (
|
|
110
|
+
const renderOptions = (fieldName) => options.map((opt) => {
|
|
111
111
|
var _a2;
|
|
112
112
|
const inputId = (_a2 = opt.id) != null ? _a2 : `${fieldName != null ? fieldName : "radio"}-${opt.value}`;
|
|
113
113
|
return /* @__PURE__ */ jsx(
|
|
@@ -123,14 +123,13 @@ const RadioGroup = (props) => {
|
|
|
123
123
|
}
|
|
124
124
|
),
|
|
125
125
|
label: opt.label,
|
|
126
|
-
checked: currentValue === opt.value,
|
|
127
126
|
disabled: disabled || opt.disabled
|
|
128
127
|
},
|
|
129
128
|
inputId
|
|
130
129
|
);
|
|
131
130
|
});
|
|
132
131
|
if ("control" in props && props.control) {
|
|
133
|
-
const { name: name2, control, validation } = props;
|
|
132
|
+
const { name: name2, control, validation, onValueChange } = props;
|
|
134
133
|
return /* @__PURE__ */ jsx(
|
|
135
134
|
Controller,
|
|
136
135
|
{
|
|
@@ -158,8 +157,11 @@ const RadioGroup = (props) => {
|
|
|
158
157
|
name: field.name,
|
|
159
158
|
value: (_b = field.value) != null ? _b : "",
|
|
160
159
|
onBlur: field.onBlur,
|
|
161
|
-
onChange: (_e, value2) =>
|
|
162
|
-
|
|
160
|
+
onChange: (_e, value2) => {
|
|
161
|
+
field.onChange(value2);
|
|
162
|
+
onValueChange == null ? void 0 : onValueChange(value2);
|
|
163
|
+
},
|
|
164
|
+
children: renderOptions(field.name)
|
|
163
165
|
})
|
|
164
166
|
),
|
|
165
167
|
finalHelperText && /* @__PURE__ */ jsx(FormHelperText, { children: finalHelperText })
|
|
@@ -187,7 +189,7 @@ const RadioGroup = (props) => {
|
|
|
187
189
|
name,
|
|
188
190
|
value: value != null ? value : "",
|
|
189
191
|
onChange: (_e, next) => onChange(next),
|
|
190
|
-
children: renderOptions(
|
|
192
|
+
children: renderOptions(name)
|
|
191
193
|
})
|
|
192
194
|
),
|
|
193
195
|
helperText && /* @__PURE__ */ jsx(FormHelperText, { children: helperText })
|
|
@@ -198,4 +200,4 @@ const RadioGroup = (props) => {
|
|
|
198
200
|
export {
|
|
199
201
|
RadioGroup as R
|
|
200
202
|
};
|
|
201
|
-
//# sourceMappingURL=RadioGroup-
|
|
203
|
+
//# sourceMappingURL=RadioGroup-bO-ahP9T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup-bO-ahP9T.js","sources":["../src/components/RadioGroup/RadioGroup.sx.ts","../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BuildRadioGroupSxOptions {\n bordered: boolean;\n borderRadius: number | string;\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).\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 RadioGroup. Reproduce el estilo del antiguo\n * `FormRadioGroup` legacy: contenedor con borde + padding vertical.\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`, devuelve un sx mínimo (sólo helper text reset).\n */\nexport const buildRadioGroupSx = ({\n bordered,\n borderRadius,\n error,\n}: BuildRadioGroupSxOptions): 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 '& .MuiRadioGroup-root': {\n paddingTop: 1.25,\n paddingBottom: 1.25,\n paddingX: 1.5,\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 cualquier radio 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 },\n '& .MuiFormHelperText-root': {\n marginLeft: 0,\n },\n '& .MuiFormLabel-root': {\n marginBottom: 0.5,\n },\n });\n};\n","import type { FC } from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport {\n FormControl,\n FormControlLabel,\n FormHelperText,\n FormLabel,\n Radio,\n RadioGroup as MuiRadioGroup,\n type RadioGroupProps as MuiRadioGroupProps,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildRadioGroupSx } from './RadioGroup.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport interface RadioOption {\n /** Valor que se emite cuando se selecciona la opción. */\n value: string;\n /** Texto mostrado al lado del radio. */\n label: string;\n /** Deshabilitar opción individualmente. */\n disabled?: boolean;\n /** ID custom del input (default: prefijo + value). */\n id?: string;\n}\n\nexport type RadioGroupSize = 'small' | 'medium';\n\n// ── Props base (todo lo común entre RHF y controlado) ────────────────────\nexport interface BaseRadioGroupProps\n extends Omit<MuiRadioGroupProps, 'value' | 'onChange' | 'defaultValue'> {\n options: RadioOption[];\n /** Label superior del grupo. */\n label?: string;\n /** Distribución horizontal (default: true — replica el comportamiento legacy). */\n row?: boolean;\n size?: RadioGroupSize;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Renderiza un contenedor con borde estilo \"form field\". Default: true. */\n bordered?: boolean;\n /** Border radius del contenedor (cuando bordered). Default: 10. */\n borderRadius?: number | string;\n defaultValue?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.RadioGroup`.\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 RHFRadioGroupProps extends BaseRadioGroupProps {\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?: (value: string) => void;\n value?: never;\n onChange?: never;\n}\n\nexport interface ControlledRadioGroupProps extends BaseRadioGroupProps {\n name?: string;\n control?: never;\n validation?: never;\n value: string;\n onChange: (value: string) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type RadioGroupProps = RHFRadioGroupProps | ControlledRadioGroupProps;\n\nexport const RadioGroup: FC<RadioGroupProps> = (props) => {\n const {\n options,\n label,\n row = true,\n size = 'small',\n disabled = false,\n error = false,\n helperText,\n bordered = true,\n borderRadius = 10,\n defaultValue,\n preset,\n sx,\n ...rest\n } = props as ControlledRadioGroupProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('RadioGroup', 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 buildRadioGroupSx({ bordered, borderRadius, error: effectiveError }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderOptions = (fieldName?: string) =>\n options.map((opt) => {\n const inputId = opt.id ?? `${fieldName ?? 'radio'}-${opt.value}`;\n return (\n <FormControlLabel\n key={inputId}\n value={opt.value}\n control={\n <Radio\n id={inputId}\n size={size}\n disabled={disabled || opt.disabled}\n />\n }\n label={opt.label}\n disabled={disabled || opt.disabled}\n />\n );\n });\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFRadioGroupProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultValue}\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 fullWidth\n >\n {label && <FormLabel>{label}</FormLabel>}\n <MuiRadioGroup\n {...rest}\n row={row}\n name={field.name}\n value={field.value ?? ''}\n onBlur={field.onBlur}\n onChange={(_e, value) => {\n field.onChange(value);\n onValueChange?.(value);\n }}\n >\n {renderOptions(field.name)}\n </MuiRadioGroup>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n }}\n />\n );\n }\n\n // ── Controlled mode ───────────────────────────────────────────────────\n const { value, onChange, name } = props as ControlledRadioGroupProps;\n return (\n <FormControl\n error={error}\n disabled={disabled}\n sx={buildSx(error)}\n fullWidth\n >\n {label && <FormLabel>{label}</FormLabel>}\n <MuiRadioGroup\n {...rest}\n row={row}\n name={name}\n value={value ?? ''}\n onChange={(_e, next) => onChange(next)}\n >\n {renderOptions(name)}\n </MuiRadioGroup>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n\nexport default RadioGroup;\n"],"names":["_a","name","MuiRadioGroup","value"],"mappings":"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"}
|