@soyfri/shared-library 2.0.0-beta.1 → 2.0.0-beta.3
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/package.json +164 -43
- package/.dockerignore +0 -8
- package/.github/workflows/publish.yml +0 -107
- package/.prettierrc +0 -3
- package/.storybook/main.ts +0 -19
- package/.storybook/preview.ts +0 -14
- package/.storybook/vitest.setup.ts +0 -9
- package/Dockerfile +0 -37
- package/build.js +0 -139
- package/chromatic.config.json +0 -5
- package/cleanDirectories.js +0 -40
- package/rollup.config.cjs +0 -87
- package/src/components/ActionMenu/ActionMenu.stories.tsx +0 -230
- package/src/components/ActionMenu/ActionMenu.tsx +0 -174
- package/src/components/ActionMenu/index.ts +0 -2
- package/src/components/AppBar/AppBar.stories.tsx +0 -272
- package/src/components/AppBar/AppBar.sx.ts +0 -32
- package/src/components/AppBar/AppBar.tsx +0 -123
- package/src/components/AppBar/AppBarBrand.tsx +0 -120
- package/src/components/AppBar/AppBarContext.ts +0 -25
- package/src/components/AppBar/AppBarMenuToggle.tsx +0 -90
- package/src/components/AppBar/AppBarUserMenu.tsx +0 -217
- package/src/components/AppBar/index.ts +0 -25
- package/src/components/Autocomplete/Autocomplete.definitions.ts +0 -477
- package/src/components/Autocomplete/Autocomplete.helpers.ts +0 -60
- package/src/components/Autocomplete/Autocomplete.stories.tsx +0 -748
- package/src/components/Autocomplete/Autocomplete.sx.ts +0 -30
- package/src/components/Autocomplete/Autocomplete.tsx +0 -361
- package/src/components/Autocomplete/Autocomplete.types.ts +0 -13
- package/src/components/Autocomplete/_parts/AutocompleteChips.tsx +0 -55
- package/src/components/Autocomplete/_parts/AutocompleteLoader.tsx +0 -17
- package/src/components/Autocomplete/_parts/AutocompleteOption.tsx +0 -31
- package/src/components/Autocomplete/index.ts +0 -12
- package/src/components/Avatar/Avatar.definitions.ts +0 -162
- package/src/components/Avatar/Avatar.stories.tsx +0 -258
- package/src/components/Avatar/Avatar.tsx +0 -206
- package/src/components/Avatar/index.ts +0 -1
- package/src/components/Button/Button.definition.ts +0 -97
- package/src/components/Button/Button.stories.tsx +0 -285
- package/src/components/Button/Button.tsx +0 -67
- package/src/components/Button/index.ts +0 -1
- package/src/components/Card/Card.definition.ts +0 -5
- package/src/components/Card/Card.stories.tsx +0 -221
- package/src/components/Card/Card.sx.ts +0 -104
- package/src/components/Card/Card.tsx +0 -200
- package/src/components/Card/index.ts +0 -9
- package/src/components/Chip/Chip.definitions.ts +0 -167
- package/src/components/Chip/Chip.stories.tsx +0 -265
- package/src/components/Chip/Chip.tsx +0 -61
- package/src/components/Chip/index.ts +0 -1
- package/src/components/Column/Column.tsx +0 -29
- package/src/components/Column/index.ts +0 -1
- package/src/components/DatePicker/DatePicker.definitions.ts +0 -228
- package/src/components/DatePicker/DatePicker.helpers.ts +0 -24
- package/src/components/DatePicker/DatePicker.stories.tsx +0 -309
- package/src/components/DatePicker/DatePicker.sx.ts +0 -33
- package/src/components/DatePicker/DatePicker.tsx +0 -189
- package/src/components/DatePicker/DatePicker.types.ts +0 -10
- package/src/components/DatePicker/index.ts +0 -9
- package/src/components/DateRangePicker/DateRangePicker.definitions.ts +0 -191
- package/src/components/DateRangePicker/DateRangePicker.stories.tsx +0 -252
- package/src/components/DateRangePicker/DateRangePicker.tsx +0 -56
- package/src/components/DateRangePicker/index.ts +0 -1
- package/src/components/DateTimePicker/DateTimePicker.definitions.ts +0 -256
- package/src/components/DateTimePicker/DateTimePicker.helpers.ts +0 -38
- package/src/components/DateTimePicker/DateTimePicker.stories.tsx +0 -418
- package/src/components/DateTimePicker/DateTimePicker.sx.ts +0 -30
- package/src/components/DateTimePicker/DateTimePicker.tsx +0 -225
- package/src/components/DateTimePicker/DateTimePicker.types.ts +0 -10
- package/src/components/DateTimePicker/index.ts +0 -9
- package/src/components/Drawer/Drawer.stories.tsx +0 -270
- package/src/components/Drawer/Drawer.sx.ts +0 -106
- package/src/components/Drawer/Drawer.tsx +0 -214
- package/src/components/Drawer/DrawerContext.ts +0 -26
- package/src/components/Drawer/DrawerItem.tsx +0 -110
- package/src/components/Drawer/index.ts +0 -10
- package/src/components/Flyout/Flyout.stories.tsx +0 -282
- package/src/components/Flyout/Flyout.tsx +0 -122
- package/src/components/Flyout/index.ts +0 -1
- package/src/components/Gallery/Gallery.definition.tsx +0 -37
- package/src/components/Gallery/Gallery.stories.tsx +0 -82
- package/src/components/Gallery/Gallery.tsx +0 -118
- package/src/components/Gallery/GalleryLightbox.tsx +0 -170
- package/src/components/Gallery/GalleryMain.tsx +0 -84
- package/src/components/Gallery/GalleryThumbnails.tsx +0 -106
- package/src/components/Gallery/index.ts +0 -1
- package/src/components/Icon/Icon.stories.tsx +0 -121
- package/src/components/Icon/Icon.tsx +0 -175
- package/src/components/Icon/index.ts +0 -2
- package/src/components/Input/Input.definitions.ts +0 -324
- package/src/components/Input/Input.helpers.ts +0 -49
- package/src/components/Input/Input.stories.tsx +0 -499
- package/src/components/Input/Input.sx.ts +0 -42
- package/src/components/Input/Input.tsx +0 -141
- package/src/components/Input/Input.types.ts +0 -10
- package/src/components/Input/index.ts +0 -9
- package/src/components/InputGroup/InputGroup.definitions.ts +0 -158
- package/src/components/InputGroup/InputGroup.stories.tsx +0 -267
- package/src/components/InputGroup/InputGroup.tsx +0 -179
- package/src/components/InputGroup/index.ts +0 -1
- package/src/components/MenuButton/MenuButton.stories.tsx +0 -197
- package/src/components/MenuButton/MenuButton.tsx +0 -100
- package/src/components/MenuButton/index.ts +0 -1
- package/src/components/Modal/Modal.stories.tsx +0 -721
- package/src/components/Modal/Modal.tsx +0 -355
- package/src/components/Modal/ModalBody.tsx +0 -16
- package/src/components/Modal/ModalFooter.tsx +0 -71
- package/src/components/Modal/ModalHeader.tsx +0 -18
- package/src/components/Modal/index.ts +0 -6
- package/src/components/PageLoader/PageLoader.stories.tsx +0 -217
- package/src/components/PageLoader/PageLoader.tsx +0 -96
- package/src/components/PageLoader/index.ts +0 -2
- package/src/components/ScrollTopButton/ScrollTopButton.stories.tsx +0 -158
- package/src/components/ScrollTopButton/ScrollTopButton.tsx +0 -135
- package/src/components/ScrollTopButton/index.ts +0 -8
- package/src/components/ScrollTopButton/scrollToTop.ts +0 -37
- package/src/components/Select/Select.definitions.ts +0 -602
- package/src/components/Select/Select.helpers.ts +0 -71
- package/src/components/Select/Select.stories.tsx +0 -687
- package/src/components/Select/Select.sx.ts +0 -14
- package/src/components/Select/Select.tsx +0 -429
- package/src/components/Select/Select.types.ts +0 -15
- package/src/components/Select/_parts/SelectMenuItem.tsx +0 -40
- package/src/components/Select/_parts/SelectSearchHeader.tsx +0 -51
- package/src/components/Select/_parts/SelectValue.tsx +0 -96
- package/src/components/Select/index.ts +0 -14
- package/src/components/Stat/Stat.stories.tsx +0 -85
- package/src/components/Stat/Stat.tsx +0 -117
- package/src/components/Stat/index.ts +0 -2
- package/src/components/StatusMessage/StatusMessage.stories.tsx +0 -130
- package/src/components/StatusMessage/StatusMessage.tsx +0 -162
- package/src/components/StatusMessage/index.ts +0 -2
- package/src/components/Stepper/Step.tsx +0 -21
- package/src/components/Stepper/Stepper.definition.ts +0 -75
- package/src/components/Stepper/Stepper.stories.tsx +0 -122
- package/src/components/Stepper/Stepper.tsx +0 -75
- package/src/components/Stepper/index.ts +0 -2
- package/src/components/Table/EmptyTable.png +0 -0
- package/src/components/Table/Table.definition.ts +0 -580
- package/src/components/Table/Table.stories.tsx +0 -853
- package/src/components/Table/Table.tsx +0 -495
- package/src/components/Table/data.ts +0 -134
- package/src/components/Table/exportsUtils.ts +0 -195
- package/src/components/Table/index.ts +0 -3
- package/src/components/Table/types.ts +0 -34
- package/src/components/Tabs/Tab.definition.ts +0 -53
- package/src/components/Tabs/Tab.tsx +0 -19
- package/src/components/Tabs/Tabs.stories.tsx +0 -118
- package/src/components/Tabs/Tabs.tsx +0 -99
- package/src/components/Tabs/_tabUtils.tsx +0 -4
- package/src/components/Tabs/index.ts +0 -2
- package/src/components/Timeline/Timeline.definition.ts +0 -43
- package/src/components/Timeline/Timeline.stories.tsx +0 -108
- package/src/components/Timeline/Timeline.tsx +0 -49
- package/src/components/Timeline/TimelineItem.tsx +0 -31
- package/src/components/Timeline/index.ts +0 -2
- package/src/components/Tooltip/Tooltip.stories.tsx +0 -129
- package/src/components/Tooltip/Tooltip.tsx +0 -58
- package/src/components/Tooltip/index.ts +0 -1
- package/src/components/_shared/formField.sx.ts +0 -118
- package/src/components/_shared/resolvePreset.ts +0 -35
- package/src/hooks/ClipBoard/ClipBoard.stories.tsx +0 -168
- package/src/hooks/ClipBoard/ClipBoard.tsx +0 -131
- package/src/hooks/ClipBoard/ClipboardUnifiedDemo.tsx +0 -111
- package/src/hooks/ClipBoard/index.ts +0 -1
- package/src/hooks/Wizard/Wizard.stories.tsx +0 -301
- package/src/hooks/Wizard/WizardContext.tsx +0 -166
- package/src/hooks/Wizard/index.ts +0 -6
- package/src/hooks/Wizard/useWizard.ts +0 -13
- package/src/index.ts +0 -17
- package/src/mui.ts +0 -44
- package/src/styles.css +0 -3
- package/src/theme/componentStyles.ts +0 -47
- package/src/theme/tokens.ts +0 -43
- package/tailwind.config.js +0 -10
- package/tsconfig.json +0 -48
- package/tsup.config.js +0 -41
- package/vite.config.js +0 -132
- package/vitest.config.ts +0 -35
- /package/{dist/Button-C17mExpd.cjs → Button-C17mExpd.cjs} +0 -0
- /package/{dist/Button-C17mExpd.cjs.map → Button-C17mExpd.cjs.map} +0 -0
- /package/{dist/Button-UkkP-bNw.js → Button-UkkP-bNw.js} +0 -0
- /package/{dist/Button-UkkP-bNw.js.map → Button-UkkP-bNw.js.map} +0 -0
- /package/{Readme.md → README.md} +0 -0
- /package/{dist/components → components}/ActionMenu/ActionMenu.cjs +0 -0
- /package/{dist/components → components}/ActionMenu/ActionMenu.cjs.map +0 -0
- /package/{dist/components → components}/ActionMenu/ActionMenu.d.ts +0 -0
- /package/{dist/components → components}/ActionMenu/ActionMenu.js +0 -0
- /package/{dist/components → components}/ActionMenu/ActionMenu.js.map +0 -0
- /package/{dist/components → components}/ActionMenu/index.d.ts +0 -0
- /package/{dist/components → components}/ActionMenu.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBar.cjs +0 -0
- /package/{dist/components → components}/AppBar/AppBar.cjs.map +0 -0
- /package/{dist/components → components}/AppBar/AppBar.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBar.js +0 -0
- /package/{dist/components → components}/AppBar/AppBar.js.map +0 -0
- /package/{dist/components → components}/AppBar/AppBar.sx.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBarBrand.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBarContext.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBarMenuToggle.d.ts +0 -0
- /package/{dist/components → components}/AppBar/AppBarUserMenu.d.ts +0 -0
- /package/{dist/components → components}/AppBar/index.d.ts +0 -0
- /package/{dist/components → components}/AppBar.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.cjs +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.cjs.map +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.definitions.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.helpers.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.js +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.js.map +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.sx.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/Autocomplete.types.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/_parts/AutocompleteChips.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/_parts/AutocompleteLoader.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/_parts/AutocompleteOption.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete/index.d.ts +0 -0
- /package/{dist/components → components}/Autocomplete.d.ts +0 -0
- /package/{dist/components → components}/Avatar/Avatar.cjs +0 -0
- /package/{dist/components → components}/Avatar/Avatar.cjs.map +0 -0
- /package/{dist/components → components}/Avatar/Avatar.d.ts +0 -0
- /package/{dist/components → components}/Avatar/Avatar.definitions.d.ts +0 -0
- /package/{dist/components → components}/Avatar/Avatar.js +0 -0
- /package/{dist/components → components}/Avatar/Avatar.js.map +0 -0
- /package/{dist/components → components}/Avatar/index.d.ts +0 -0
- /package/{dist/components → components}/Avatar.d.ts +0 -0
- /package/{dist/components → components}/Button/Button.cjs +0 -0
- /package/{dist/components → components}/Button/Button.cjs.map +0 -0
- /package/{dist/components → components}/Button/Button.d.ts +0 -0
- /package/{dist/components → components}/Button/Button.definition.d.ts +0 -0
- /package/{dist/components → components}/Button/Button.js +0 -0
- /package/{dist/components → components}/Button/Button.js.map +0 -0
- /package/{dist/components → components}/Button/index.d.ts +0 -0
- /package/{dist/components → components}/Button.d.ts +0 -0
- /package/{dist/components → components}/Card/Card.cjs +0 -0
- /package/{dist/components → components}/Card/Card.cjs.map +0 -0
- /package/{dist/components → components}/Card/Card.d.ts +0 -0
- /package/{dist/components → components}/Card/Card.definition.d.ts +0 -0
- /package/{dist/components → components}/Card/Card.js +0 -0
- /package/{dist/components → components}/Card/Card.js.map +0 -0
- /package/{dist/components → components}/Card/Card.sx.d.ts +0 -0
- /package/{dist/components → components}/Card/index.d.ts +0 -0
- /package/{dist/components → components}/Card.d.ts +0 -0
- /package/{dist/components → components}/Chip/Chip.cjs +0 -0
- /package/{dist/components → components}/Chip/Chip.cjs.map +0 -0
- /package/{dist/components → components}/Chip/Chip.d.ts +0 -0
- /package/{dist/components → components}/Chip/Chip.definitions.d.ts +0 -0
- /package/{dist/components → components}/Chip/Chip.js +0 -0
- /package/{dist/components → components}/Chip/Chip.js.map +0 -0
- /package/{dist/components → components}/Chip/index.d.ts +0 -0
- /package/{dist/components → components}/Chip.d.ts +0 -0
- /package/{dist/components → components}/Column/Column.cjs +0 -0
- /package/{dist/components → components}/Column/Column.cjs.map +0 -0
- /package/{dist/components → components}/Column/Column.d.ts +0 -0
- /package/{dist/components → components}/Column/Column.js +0 -0
- /package/{dist/components → components}/Column/Column.js.map +0 -0
- /package/{dist/components → components}/Column/index.d.ts +0 -0
- /package/{dist/components → components}/Column.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.cjs +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.cjs.map +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.definitions.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.helpers.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.js +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.js.map +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.sx.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/DatePicker.types.d.ts +0 -0
- /package/{dist/components → components}/DatePicker/index.d.ts +0 -0
- /package/{dist/components → components}/DatePicker.d.ts +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.cjs +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.cjs.map +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.d.ts +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.definitions.d.ts +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.js +0 -0
- /package/{dist/components → components}/DateRangePicker/DateRangePicker.js.map +0 -0
- /package/{dist/components → components}/DateRangePicker/index.d.ts +0 -0
- /package/{dist/components → components}/DateRangePicker.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.cjs +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.cjs.map +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.definitions.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.helpers.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.js +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.js.map +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.sx.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/DateTimePicker.types.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker/index.d.ts +0 -0
- /package/{dist/components → components}/DateTimePicker.d.ts +0 -0
- /package/{dist/components → components}/Drawer/Drawer.cjs +0 -0
- /package/{dist/components → components}/Drawer/Drawer.cjs.map +0 -0
- /package/{dist/components → components}/Drawer/Drawer.d.ts +0 -0
- /package/{dist/components → components}/Drawer/Drawer.js +0 -0
- /package/{dist/components → components}/Drawer/Drawer.js.map +0 -0
- /package/{dist/components → components}/Drawer/Drawer.sx.d.ts +0 -0
- /package/{dist/components → components}/Drawer/DrawerContext.d.ts +0 -0
- /package/{dist/components → components}/Drawer/DrawerItem.d.ts +0 -0
- /package/{dist/components → components}/Drawer/index.d.ts +0 -0
- /package/{dist/components → components}/Drawer.d.ts +0 -0
- /package/{dist/components → components}/Flyout/Flyout.cjs +0 -0
- /package/{dist/components → components}/Flyout/Flyout.cjs.map +0 -0
- /package/{dist/components → components}/Flyout/Flyout.d.ts +0 -0
- /package/{dist/components → components}/Flyout/Flyout.js +0 -0
- /package/{dist/components → components}/Flyout/Flyout.js.map +0 -0
- /package/{dist/components → components}/Flyout/index.d.ts +0 -0
- /package/{dist/components → components}/Flyout.d.ts +0 -0
- /package/{dist/components → components}/Gallery/Gallery.cjs +0 -0
- /package/{dist/components → components}/Gallery/Gallery.cjs.map +0 -0
- /package/{dist/components → components}/Gallery/Gallery.d.ts +0 -0
- /package/{dist/components → components}/Gallery/Gallery.definition.d.ts +0 -0
- /package/{dist/components → components}/Gallery/Gallery.js +0 -0
- /package/{dist/components → components}/Gallery/Gallery.js.map +0 -0
- /package/{dist/components → components}/Gallery/GalleryLightbox.d.ts +0 -0
- /package/{dist/components → components}/Gallery/GalleryMain.d.ts +0 -0
- /package/{dist/components → components}/Gallery/GalleryThumbnails.d.ts +0 -0
- /package/{dist/components → components}/Gallery/index.d.ts +0 -0
- /package/{dist/components → components}/Gallery.d.ts +0 -0
- /package/{dist/components → components}/Icon/Icon.cjs +0 -0
- /package/{dist/components → components}/Icon/Icon.cjs.map +0 -0
- /package/{dist/components → components}/Icon/Icon.d.ts +0 -0
- /package/{dist/components → components}/Icon/Icon.js +0 -0
- /package/{dist/components → components}/Icon/Icon.js.map +0 -0
- /package/{dist/components → components}/Icon/index.d.ts +0 -0
- /package/{dist/components → components}/Icon.d.ts +0 -0
- /package/{dist/components → components}/Input/Input.cjs +0 -0
- /package/{dist/components → components}/Input/Input.cjs.map +0 -0
- /package/{dist/components → components}/Input/Input.d.ts +0 -0
- /package/{dist/components → components}/Input/Input.definitions.d.ts +0 -0
- /package/{dist/components → components}/Input/Input.helpers.d.ts +0 -0
- /package/{dist/components → components}/Input/Input.js +0 -0
- /package/{dist/components → components}/Input/Input.js.map +0 -0
- /package/{dist/components → components}/Input/Input.sx.d.ts +0 -0
- /package/{dist/components → components}/Input/Input.types.d.ts +0 -0
- /package/{dist/components → components}/Input/index.d.ts +0 -0
- /package/{dist/components → components}/Input.d.ts +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.cjs +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.cjs.map +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.d.ts +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.definitions.d.ts +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.js +0 -0
- /package/{dist/components → components}/InputGroup/InputGroup.js.map +0 -0
- /package/{dist/components → components}/InputGroup/index.d.ts +0 -0
- /package/{dist/components → components}/InputGroup.d.ts +0 -0
- /package/{dist/components → components}/MenuButton/MenuButton.cjs +0 -0
- /package/{dist/components → components}/MenuButton/MenuButton.cjs.map +0 -0
- /package/{dist/components → components}/MenuButton/MenuButton.d.ts +0 -0
- /package/{dist/components → components}/MenuButton/MenuButton.js +0 -0
- /package/{dist/components → components}/MenuButton/MenuButton.js.map +0 -0
- /package/{dist/components → components}/MenuButton/index.d.ts +0 -0
- /package/{dist/components → components}/MenuButton.d.ts +0 -0
- /package/{dist/components → components}/Modal/Modal.cjs +0 -0
- /package/{dist/components → components}/Modal/Modal.cjs.map +0 -0
- /package/{dist/components → components}/Modal/Modal.d.ts +0 -0
- /package/{dist/components → components}/Modal/Modal.js +0 -0
- /package/{dist/components → components}/Modal/Modal.js.map +0 -0
- /package/{dist/components → components}/Modal/ModalBody.d.ts +0 -0
- /package/{dist/components → components}/Modal/ModalFooter.d.ts +0 -0
- /package/{dist/components → components}/Modal/ModalHeader.d.ts +0 -0
- /package/{dist/components → components}/Modal/index.d.ts +0 -0
- /package/{dist/components → components}/Modal.d.ts +0 -0
- /package/{dist/components → components}/PageLoader/PageLoader.cjs +0 -0
- /package/{dist/components → components}/PageLoader/PageLoader.cjs.map +0 -0
- /package/{dist/components → components}/PageLoader/PageLoader.d.ts +0 -0
- /package/{dist/components → components}/PageLoader/PageLoader.js +0 -0
- /package/{dist/components → components}/PageLoader/PageLoader.js.map +0 -0
- /package/{dist/components → components}/PageLoader/index.d.ts +0 -0
- /package/{dist/components → components}/PageLoader.d.ts +0 -0
- /package/{dist/components → components}/ScrollTopButton/ScrollTopButton.cjs +0 -0
- /package/{dist/components → components}/ScrollTopButton/ScrollTopButton.cjs.map +0 -0
- /package/{dist/components → components}/ScrollTopButton/ScrollTopButton.d.ts +0 -0
- /package/{dist/components → components}/ScrollTopButton/ScrollTopButton.js +0 -0
- /package/{dist/components → components}/ScrollTopButton/ScrollTopButton.js.map +0 -0
- /package/{dist/components → components}/ScrollTopButton/index.d.ts +0 -0
- /package/{dist/components → components}/ScrollTopButton/scrollToTop.d.ts +0 -0
- /package/{dist/components → components}/ScrollTopButton.d.ts +0 -0
- /package/{dist/components → components}/Select/Select.cjs +0 -0
- /package/{dist/components → components}/Select/Select.cjs.map +0 -0
- /package/{dist/components → components}/Select/Select.d.ts +0 -0
- /package/{dist/components → components}/Select/Select.definitions.d.ts +0 -0
- /package/{dist/components → components}/Select/Select.helpers.d.ts +0 -0
- /package/{dist/components → components}/Select/Select.js +0 -0
- /package/{dist/components → components}/Select/Select.js.map +0 -0
- /package/{dist/components → components}/Select/Select.sx.d.ts +0 -0
- /package/{dist/components → components}/Select/Select.types.d.ts +0 -0
- /package/{dist/components → components}/Select/_parts/SelectMenuItem.d.ts +0 -0
- /package/{dist/components → components}/Select/_parts/SelectSearchHeader.d.ts +0 -0
- /package/{dist/components → components}/Select/_parts/SelectValue.d.ts +0 -0
- /package/{dist/components → components}/Select/index.d.ts +0 -0
- /package/{dist/components → components}/Select.d.ts +0 -0
- /package/{dist/components → components}/Stat/Stat.cjs +0 -0
- /package/{dist/components → components}/Stat/Stat.cjs.map +0 -0
- /package/{dist/components → components}/Stat/Stat.d.ts +0 -0
- /package/{dist/components → components}/Stat/Stat.js +0 -0
- /package/{dist/components → components}/Stat/Stat.js.map +0 -0
- /package/{dist/components → components}/Stat/index.d.ts +0 -0
- /package/{dist/components → components}/Stat.d.ts +0 -0
- /package/{dist/components → components}/StatusMessage/StatusMessage.cjs +0 -0
- /package/{dist/components → components}/StatusMessage/StatusMessage.cjs.map +0 -0
- /package/{dist/components → components}/StatusMessage/StatusMessage.d.ts +0 -0
- /package/{dist/components → components}/StatusMessage/StatusMessage.js +0 -0
- /package/{dist/components → components}/StatusMessage/StatusMessage.js.map +0 -0
- /package/{dist/components → components}/StatusMessage/index.d.ts +0 -0
- /package/{dist/components → components}/StatusMessage.d.ts +0 -0
- /package/{dist/components → components}/Stepper/Step.d.ts +0 -0
- /package/{dist/components → components}/Stepper/Stepper.cjs +0 -0
- /package/{dist/components → components}/Stepper/Stepper.cjs.map +0 -0
- /package/{dist/components → components}/Stepper/Stepper.d.ts +0 -0
- /package/{dist/components → components}/Stepper/Stepper.definition.d.ts +0 -0
- /package/{dist/components → components}/Stepper/Stepper.js +0 -0
- /package/{dist/components → components}/Stepper/Stepper.js.map +0 -0
- /package/{dist/components → components}/Stepper/index.d.ts +0 -0
- /package/{dist/components → components}/Stepper.d.ts +0 -0
- /package/{dist/components → components}/Table/Table.cjs +0 -0
- /package/{dist/components → components}/Table/Table.cjs.map +0 -0
- /package/{dist/components → components}/Table/Table.d.ts +0 -0
- /package/{dist/components → components}/Table/Table.definition.d.ts +0 -0
- /package/{dist/components → components}/Table/Table.js +0 -0
- /package/{dist/components → components}/Table/Table.js.map +0 -0
- /package/{dist/components → components}/Table/data.d.ts +0 -0
- /package/{dist/components → components}/Table/exportsUtils.d.ts +0 -0
- /package/{dist/components → components}/Table/index.d.ts +0 -0
- /package/{dist/components → components}/Table/types.d.ts +0 -0
- /package/{dist/components → components}/Table.d.ts +0 -0
- /package/{dist/components → components}/Tabs/Tab.d.ts +0 -0
- /package/{dist/components → components}/Tabs/Tab.definition.d.ts +0 -0
- /package/{dist/components → components}/Tabs/Tabs.cjs +0 -0
- /package/{dist/components → components}/Tabs/Tabs.cjs.map +0 -0
- /package/{dist/components → components}/Tabs/Tabs.d.ts +0 -0
- /package/{dist/components → components}/Tabs/Tabs.js +0 -0
- /package/{dist/components → components}/Tabs/Tabs.js.map +0 -0
- /package/{dist/components → components}/Tabs/_tabUtils.d.ts +0 -0
- /package/{dist/components → components}/Tabs/index.d.ts +0 -0
- /package/{dist/components → components}/Tabs.d.ts +0 -0
- /package/{dist/components → components}/Timeline/Timeline.cjs +0 -0
- /package/{dist/components → components}/Timeline/Timeline.cjs.map +0 -0
- /package/{dist/components → components}/Timeline/Timeline.d.ts +0 -0
- /package/{dist/components → components}/Timeline/Timeline.definition.d.ts +0 -0
- /package/{dist/components → components}/Timeline/Timeline.js +0 -0
- /package/{dist/components → components}/Timeline/Timeline.js.map +0 -0
- /package/{dist/components → components}/Timeline/TimelineItem.d.ts +0 -0
- /package/{dist/components → components}/Timeline/index.d.ts +0 -0
- /package/{dist/components → components}/Timeline.d.ts +0 -0
- /package/{dist/components → components}/Tooltip/Tooltip.cjs +0 -0
- /package/{dist/components → components}/Tooltip/Tooltip.cjs.map +0 -0
- /package/{dist/components → components}/Tooltip/Tooltip.d.ts +0 -0
- /package/{dist/components → components}/Tooltip/Tooltip.js +0 -0
- /package/{dist/components → components}/Tooltip/Tooltip.js.map +0 -0
- /package/{dist/components → components}/Tooltip/index.d.ts +0 -0
- /package/{dist/components → components}/Tooltip.d.ts +0 -0
- /package/{dist/components → components}/_shared/formField.sx.d.ts +0 -0
- /package/{dist/components → components}/_shared/resolvePreset.d.ts +0 -0
- /package/{dist/formField.sx-CQ1mbk9M.cjs → formField.sx-CQ1mbk9M.cjs} +0 -0
- /package/{dist/formField.sx-CQ1mbk9M.cjs.map → formField.sx-CQ1mbk9M.cjs.map} +0 -0
- /package/{dist/formField.sx-DfVbMe0V.js → formField.sx-DfVbMe0V.js} +0 -0
- /package/{dist/formField.sx-DfVbMe0V.js.map → formField.sx-DfVbMe0V.js.map} +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipBoard.cjs +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipBoard.cjs.map +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipBoard.d.ts +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipBoard.js +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipBoard.js.map +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/ClipboardUnifiedDemo.d.ts +0 -0
- /package/{dist/hooks → hooks}/ClipBoard/index.d.ts +0 -0
- /package/{dist/hooks → hooks}/ClipBoard.d.ts +0 -0
- /package/{dist/hooks → hooks}/Wizard/Wizard.cjs +0 -0
- /package/{dist/hooks → hooks}/Wizard/Wizard.cjs.map +0 -0
- /package/{dist/hooks → hooks}/Wizard/Wizard.js +0 -0
- /package/{dist/hooks → hooks}/Wizard/Wizard.js.map +0 -0
- /package/{dist/hooks → hooks}/Wizard/WizardContext.d.ts +0 -0
- /package/{dist/hooks → hooks}/Wizard/index.d.ts +0 -0
- /package/{dist/hooks → hooks}/Wizard/useWizard.d.ts +0 -0
- /package/{dist/hooks → hooks}/Wizard.d.ts +0 -0
- /package/{dist/index.cjs → index.cjs} +0 -0
- /package/{dist/index.cjs.map → index.cjs.map} +0 -0
- /package/{dist/index.d.ts → index.d.ts} +0 -0
- /package/{dist/index.js → index.js} +0 -0
- /package/{dist/index.js.map → index.js.map} +0 -0
- /package/{dist/mui.d.ts → mui.d.ts} +0 -0
- /package/{dist/resolvePreset-B-IB0ehH.js → resolvePreset-B-IB0ehH.js} +0 -0
- /package/{dist/resolvePreset-B-IB0ehH.js.map → resolvePreset-B-IB0ehH.js.map} +0 -0
- /package/{dist/resolvePreset-CT3kU-K2.cjs → resolvePreset-CT3kU-K2.cjs} +0 -0
- /package/{dist/resolvePreset-CT3kU-K2.cjs.map → resolvePreset-CT3kU-K2.cjs.map} +0 -0
- /package/{dist/styles.css → styles.css} +0 -0
- /package/{dist/theme → theme}/componentStyles.d.ts +0 -0
- /package/{dist/theme → theme}/tokens.d.ts +0 -0
- /package/{dist/useWizard-CWdIxZzX.cjs → useWizard-CWdIxZzX.cjs} +0 -0
- /package/{dist/useWizard-CWdIxZzX.cjs.map → useWizard-CWdIxZzX.cjs.map} +0 -0
- /package/{dist/useWizard-CWq--C3o.js → useWizard-CWq--C3o.js} +0 -0
- /package/{dist/useWizard-CWq--C3o.js.map → useWizard-CWq--C3o.js.map} +0 -0
|
@@ -1,721 +0,0 @@
|
|
|
1
|
-
import React, { useState, useRef } from 'react'; // 👈 Importa useRef
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
-
import { useForm } from 'react-hook-form';
|
|
4
|
-
|
|
5
|
-
import { Button, Typography, Box, Stack } from '@mui/material';
|
|
6
|
-
import { fn } from '@storybook/test';
|
|
7
|
-
import Modal, { ModalRef } from './Modal';
|
|
8
|
-
import { Input } from '../Input/Input';
|
|
9
|
-
import { useClipboard } from '../../hooks/ClipBoard';
|
|
10
|
-
|
|
11
|
-
const meta: Meta<typeof Modal> = {
|
|
12
|
-
title: 'Components/Modal',
|
|
13
|
-
component: Modal,
|
|
14
|
-
tags: ['autodocs'],
|
|
15
|
-
argTypes: {
|
|
16
|
-
open: {
|
|
17
|
-
control: 'boolean',
|
|
18
|
-
description: 'Controla si el modal está abierto o cerrado (uso controlado). Opcional si se usa el control imperativo con `ref`.',
|
|
19
|
-
},
|
|
20
|
-
onClose: {
|
|
21
|
-
action: 'onClose clickeado',
|
|
22
|
-
description: 'Función a ejecutar cuando el modal solicita cerrarse (ej. clic fuera o botón de cerrar). Opcional si se usa el control imperativo con `ref`.',
|
|
23
|
-
},
|
|
24
|
-
title: {
|
|
25
|
-
control: 'text',
|
|
26
|
-
description: 'Título opcional para el encabezado del modal. Se usará si no se proporciona `Modal.Header` explícitamente.',
|
|
27
|
-
},
|
|
28
|
-
children: {
|
|
29
|
-
control: 'object',
|
|
30
|
-
description: 'Contenido del modal, típicamente `Modal.Header`, `Modal.Body` y `Modal.Footer`.',
|
|
31
|
-
},
|
|
32
|
-
showCloseButton: {
|
|
33
|
-
control: 'boolean',
|
|
34
|
-
description: 'Controla la visibilidad del botón "Cerrar" por defecto en el `Modal.Footer`.',
|
|
35
|
-
},
|
|
36
|
-
closeButtonText: {
|
|
37
|
-
control: 'text',
|
|
38
|
-
description: 'Texto personalizado para el botón "Cerrar".',
|
|
39
|
-
},
|
|
40
|
-
closeButtonDisabled: {
|
|
41
|
-
control: 'boolean',
|
|
42
|
-
description: 'Deshabilita el botón "Cerrar".',
|
|
43
|
-
},
|
|
44
|
-
actions: {
|
|
45
|
-
control: 'object',
|
|
46
|
-
description: 'Un arreglo de objetos `ModalAction` para botones de acción personalizados en el `Modal.Footer`.',
|
|
47
|
-
},
|
|
48
|
-
maxWidth: {
|
|
49
|
-
control: 'select',
|
|
50
|
-
options: ['xs', 'sm', 'md', 'lg', 'xl', false],
|
|
51
|
-
description: 'Tamaño máximo del modal (propiedad de Material-UI `Dialog`).',
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
parameters: {
|
|
55
|
-
docs: {
|
|
56
|
-
description: {
|
|
57
|
-
component: 'Un componente de modal reutilizable de Material-UI con una estructura de componente compuesto (`Modal.Header`, `Modal.Body`, `Modal.Footer`). Puede ser controlado por una prop `open` o de forma imperativa a través de `ref` (`open()` y `close()` métodos). Permite definir acciones personalizadas y controlar la visibilidad y el estado de los botones por defecto.',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export default meta;
|
|
64
|
-
type Story = StoryObj<typeof Modal>;
|
|
65
|
-
|
|
66
|
-
// --- Historias ---
|
|
67
|
-
|
|
68
|
-
// Historia base: Modal simple con título y contenido básico (uso controlado por estado)
|
|
69
|
-
export const Default: Story = {
|
|
70
|
-
args: {
|
|
71
|
-
open: true,
|
|
72
|
-
onClose: fn(),
|
|
73
|
-
title: 'Modal de Ejemplo (Controlado por Estado)',
|
|
74
|
-
children: (
|
|
75
|
-
<Modal.Body>
|
|
76
|
-
<Typography>Este es el contenido principal del modal.</Typography>
|
|
77
|
-
<Typography sx={{ mt: 2 }}>Puedes colocar cualquier elemento React aquí.</Typography>
|
|
78
|
-
</Modal.Body>
|
|
79
|
-
),
|
|
80
|
-
showCloseButton: true,
|
|
81
|
-
closeButtonText: 'Cerrar',
|
|
82
|
-
actions: [
|
|
83
|
-
{ text: 'Guardar', onClick: fn(() => console.log("some some")), variant: 'contained' },
|
|
84
|
-
{ text: 'Aceptar', onClick: fn(), color: 'success' },
|
|
85
|
-
],
|
|
86
|
-
},
|
|
87
|
-
parameters: {
|
|
88
|
-
docs: {
|
|
89
|
-
description: {
|
|
90
|
-
story: 'Muestra un modal básico con un título y botones de acción, controlado por una prop `open` en el componente padre.',
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
// Nueva Historia: Modal controlado de forma Imperativa (sin estado `open` en el padre)
|
|
97
|
-
export const ImperativeControl: Story = {
|
|
98
|
-
render: (args) => {
|
|
99
|
-
const modalRef = useRef<ModalRef>(null);
|
|
100
|
-
|
|
101
|
-
const handleOpen = () => {
|
|
102
|
-
modalRef.current?.open();
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const handleConfirm = () => {
|
|
106
|
-
alert('Acción confirmada desde el modal imperativo!');
|
|
107
|
-
modalRef.current?.close();
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
return (
|
|
111
|
-
<Box>
|
|
112
|
-
<Button onClick={handleOpen} variant="contained">
|
|
113
|
-
Abrir Modal Imperativo
|
|
114
|
-
</Button>
|
|
115
|
-
|
|
116
|
-
<Modal
|
|
117
|
-
ref={modalRef} // Asigna la ref al modal
|
|
118
|
-
// No se pasa la prop `open` aquí, el modal gestiona su estado interno
|
|
119
|
-
onClose={fn(() => console.log('Modal cerrado imperativamente'))} // El padre aún puede escuchar el cierre
|
|
120
|
-
title="Modal Controlado Imperativamente"
|
|
121
|
-
showCloseButton={true}
|
|
122
|
-
closeButtonText="Cerrar"
|
|
123
|
-
actions={[{ text: 'Aceptar', onClick: handleConfirm, variant: 'contained' }]}
|
|
124
|
-
maxWidth="sm"
|
|
125
|
-
{...args} // Pasa otras props del story
|
|
126
|
-
>
|
|
127
|
-
<Modal.Body>
|
|
128
|
-
<Typography>Este modal se abre y cierra llamando a métodos de la `ref`.</Typography>
|
|
129
|
-
<Typography sx={{ mt: 2 }}>No hay un `useState` para `open` en este componente padre.</Typography>
|
|
130
|
-
</Modal.Body>
|
|
131
|
-
</Modal>
|
|
132
|
-
</Box>
|
|
133
|
-
);
|
|
134
|
-
},
|
|
135
|
-
args: {
|
|
136
|
-
// Las props 'open' y 'onClose' se omiten o se gestionan internamente en el render
|
|
137
|
-
open: undefined, // Asegúrate de que `open` no se pase para activar el control interno
|
|
138
|
-
onClose: undefined, // `onClose` se gestiona en el render
|
|
139
|
-
},
|
|
140
|
-
parameters: {
|
|
141
|
-
docs: {
|
|
142
|
-
description: {
|
|
143
|
-
story: 'Demuestra cómo controlar el modal de forma imperativa usando `useRef` y los métodos `open()` y `close()` expuestos por el modal, sin necesidad de gestionar un estado `open` en el componente padre.',
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
// Historia: Modal con estructura de componente compuesto completa
|
|
151
|
-
export const CompleteStructure: Story = {
|
|
152
|
-
args: {
|
|
153
|
-
open: true,
|
|
154
|
-
onClose: fn(),
|
|
155
|
-
maxWidth: 'md',
|
|
156
|
-
children: (
|
|
157
|
-
<>
|
|
158
|
-
<Modal.Header>
|
|
159
|
-
<Typography variant="h6">Detalles del Artículo</Typography>
|
|
160
|
-
</Modal.Header>
|
|
161
|
-
<Modal.Body>
|
|
162
|
-
<Box sx={{ p: 2, border: '1px dashed grey', borderRadius: 1 }}>
|
|
163
|
-
<Typography>Aquí va un formulario complejo o información detallada.</Typography>
|
|
164
|
-
<Typography sx={{ mt: 1 }}>El cuerpo puede crecer y tener scroll si es necesario.</Typography>
|
|
165
|
-
<Button onClick={fn()} sx={{ mt: 2 }}>Acción en el cuerpo</Button>
|
|
166
|
-
</Box>
|
|
167
|
-
</Modal.Body>
|
|
168
|
-
<Modal.Footer
|
|
169
|
-
showCloseButton={false}
|
|
170
|
-
onClose={fn()} // Added onClose property
|
|
171
|
-
actions={[
|
|
172
|
-
{ text: 'Cancelar', onClick: fn(), variant: 'outlined', color: 'error' },
|
|
173
|
-
{ text: 'Confirmar Envío', onClick: fn(), variant: 'contained', color: 'primary' },
|
|
174
|
-
]}
|
|
175
|
-
>
|
|
176
|
-
<Typography variant="caption" sx={{ mr: 2 }}>
|
|
177
|
-
Requiere confirmación.
|
|
178
|
-
</Typography>
|
|
179
|
-
</Modal.Footer>
|
|
180
|
-
</>
|
|
181
|
-
),
|
|
182
|
-
},
|
|
183
|
-
parameters: {
|
|
184
|
-
docs: {
|
|
185
|
-
description: {
|
|
186
|
-
story: 'Demuestra el uso completo de la estructura de componente compuesto (`Modal.Header`, `Modal.Body`, `Modal.Footer`) con contenido variado y control de botones.',
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
// Historia: Modal sin botón de cerrar por defecto
|
|
193
|
-
export const NoDefaultCloseButton: Story = {
|
|
194
|
-
args: {
|
|
195
|
-
...Default.args,
|
|
196
|
-
title: 'Modal sin botón de cerrar',
|
|
197
|
-
showCloseButton: false,
|
|
198
|
-
actions: [
|
|
199
|
-
{ text: 'Entendido', onClick: fn(), variant: 'contained' },
|
|
200
|
-
],
|
|
201
|
-
},
|
|
202
|
-
parameters: {
|
|
203
|
-
docs: {
|
|
204
|
-
description: {
|
|
205
|
-
story: 'Un modal que no muestra el botón "Cerrar" por defecto, forzando al usuario a usar las acciones personalizadas.',
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
// Historia: Modal con botón de cerrar deshabilitado
|
|
212
|
-
export const DisabledCloseButton: Story = {
|
|
213
|
-
args: {
|
|
214
|
-
...Default.args,
|
|
215
|
-
title: 'Modal con botón de cerrar deshabilitado',
|
|
216
|
-
closeButtonDisabled: true,
|
|
217
|
-
actions: [
|
|
218
|
-
{ text: 'Habilitar', onClick: fn(), variant: 'contained' },
|
|
219
|
-
],
|
|
220
|
-
},
|
|
221
|
-
parameters: {
|
|
222
|
-
docs: {
|
|
223
|
-
description: {
|
|
224
|
-
story: 'Muestra un modal donde el botón "Cerrar" por defecto está deshabilitado.',
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
// Historia: Modal con diferentes tamaños (maxWidth)
|
|
231
|
-
export const Sizing: Story = {
|
|
232
|
-
render: (args: any) => {
|
|
233
|
-
const [openXs, setOpenXs] = useState(false);
|
|
234
|
-
const [openLg, setOpenLg] = useState(false);
|
|
235
|
-
const { ref, CopyMessage } = useClipboard();
|
|
236
|
-
|
|
237
|
-
return (
|
|
238
|
-
<Box sx={{ display: 'flex', gap: 2 }}>
|
|
239
|
-
<Button onClick={() => setOpenXs(true)} variant="outlined">Abrir XS</Button>
|
|
240
|
-
<Button onClick={() => setOpenLg(true)} variant="outlined">Abrir LG</Button>
|
|
241
|
-
|
|
242
|
-
<Modal {...args} open={openXs} onClose={() => setOpenXs(false)} title="Modal XS" maxWidth="xs">
|
|
243
|
-
<Modal.Body><Typography>Este es un modal de tamaño extra pequeño.</Typography></Modal.Body>
|
|
244
|
-
</Modal>
|
|
245
|
-
|
|
246
|
-
<Modal {...args} open={openLg} onClose={() => setOpenLg(false)} title="Modal LG" maxWidth="lg">
|
|
247
|
-
<Modal.Body>
|
|
248
|
-
<Typography ref={ref}>Este es un modal de tamaño grande.</Typography>
|
|
249
|
-
<CopyMessage />
|
|
250
|
-
</Modal.Body>
|
|
251
|
-
</Modal>
|
|
252
|
-
</Box>
|
|
253
|
-
);
|
|
254
|
-
},
|
|
255
|
-
args: {
|
|
256
|
-
open: false,
|
|
257
|
-
onClose: fn(),
|
|
258
|
-
},
|
|
259
|
-
parameters: {
|
|
260
|
-
docs: {
|
|
261
|
-
description: {
|
|
262
|
-
story: 'Demuestra cómo el modal se ajusta a diferentes tamaños (`maxWidth`) definidos por las propiedades de Material-UI.',
|
|
263
|
-
},
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
// Historia: Modal con texto largo en el cuerpo (para probar el scroll)
|
|
269
|
-
export const LongContent: Story = {
|
|
270
|
-
args: {
|
|
271
|
-
open: true,
|
|
272
|
-
onClose: fn(),
|
|
273
|
-
title: 'Modal con Contenido Largo',
|
|
274
|
-
maxWidth: 'sm',
|
|
275
|
-
children: (
|
|
276
|
-
<Modal.Body>
|
|
277
|
-
{Array.from({ length: 30 }, (_, i) => (
|
|
278
|
-
<Typography key={i} sx={{ mb: 1 }}>
|
|
279
|
-
Este es un párrafo de contenido largo para probar el scroll del modal. Línea {i + 1}.
|
|
280
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
281
|
-
</Typography>
|
|
282
|
-
))}
|
|
283
|
-
</Modal.Body>
|
|
284
|
-
),
|
|
285
|
-
},
|
|
286
|
-
parameters: {
|
|
287
|
-
docs: {
|
|
288
|
-
description: {
|
|
289
|
-
story: 'Muestra un modal con un cuerpo que contiene mucho texto, demostrando la funcionalidad de scroll automático.',
|
|
290
|
-
},
|
|
291
|
-
},
|
|
292
|
-
},
|
|
293
|
-
};
|
|
294
|
-
// =============================================================================
|
|
295
|
-
// RHF DENTRO DEL MODAL — Botones a nivel de BODY (forma recomendada)
|
|
296
|
-
// =============================================================================
|
|
297
|
-
// PROBLEMA: Si los botones viven en `Modal.Footer` (hermano de `Modal.Body`),
|
|
298
|
-
// el `<form>` no puede envolver a ambos porque son hermanos en el árbol.
|
|
299
|
-
// Entonces "Guardar" NO dispara submit ni validaciones.
|
|
300
|
-
//
|
|
301
|
-
// SOLUCIÓN: Meter el `<form>` + inputs + botones dentro del mismo `Modal.Body`.
|
|
302
|
-
// Usar `hiddenFooter` para ocultar el footer por defecto.
|
|
303
|
-
// =============================================================================
|
|
304
|
-
|
|
305
|
-
type UserFormValues = {
|
|
306
|
-
name: string;
|
|
307
|
-
email: string;
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
export const RHFInsideBody: Story = {
|
|
311
|
-
render: () => {
|
|
312
|
-
const [open, setOpen] = useState(false);
|
|
313
|
-
const [submitted, setSubmitted] = useState<UserFormValues | null>(null);
|
|
314
|
-
|
|
315
|
-
const {
|
|
316
|
-
control,
|
|
317
|
-
handleSubmit,
|
|
318
|
-
reset,
|
|
319
|
-
formState: { isSubmitting },
|
|
320
|
-
} = useForm<UserFormValues>({
|
|
321
|
-
defaultValues: { name: '', email: '' },
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
const onSubmit = async (data: UserFormValues) => {
|
|
325
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
326
|
-
setSubmitted(data);
|
|
327
|
-
setOpen(false);
|
|
328
|
-
reset();
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
const handleClose = () => {
|
|
332
|
-
setOpen(false);
|
|
333
|
-
reset();
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
return (
|
|
337
|
-
<Box>
|
|
338
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
339
|
-
Abrir form en Modal
|
|
340
|
-
</Button>
|
|
341
|
-
{submitted && (
|
|
342
|
-
<Typography sx={{ mt: 2 }} color="success.main">
|
|
343
|
-
Enviado: {JSON.stringify(submitted)}
|
|
344
|
-
</Typography>
|
|
345
|
-
)}
|
|
346
|
-
|
|
347
|
-
<Modal
|
|
348
|
-
open={open}
|
|
349
|
-
onClose={handleClose}
|
|
350
|
-
title="Crear usuario"
|
|
351
|
-
maxWidth="sm"
|
|
352
|
-
hiddenFooter // 👈 ocultamos el footer por defecto
|
|
353
|
-
>
|
|
354
|
-
<Modal.Body>
|
|
355
|
-
{/* El form envuelve TODO: inputs + botones.
|
|
356
|
-
Los botones están dentro del body, NO en un footer. */}
|
|
357
|
-
<Box
|
|
358
|
-
component="form"
|
|
359
|
-
onSubmit={handleSubmit(onSubmit)}
|
|
360
|
-
noValidate
|
|
361
|
-
paddingTop={2}
|
|
362
|
-
>
|
|
363
|
-
<Stack spacing={3}>
|
|
364
|
-
<Input
|
|
365
|
-
name="name"
|
|
366
|
-
control={control}
|
|
367
|
-
label="Nombre"
|
|
368
|
-
validation={{
|
|
369
|
-
required: 'El nombre es requerido',
|
|
370
|
-
minLength: { value: 2, message: 'Mínimo 2 caracteres' },
|
|
371
|
-
}}
|
|
372
|
-
/>
|
|
373
|
-
<Input
|
|
374
|
-
name="email"
|
|
375
|
-
control={control}
|
|
376
|
-
label="Email"
|
|
377
|
-
type="email"
|
|
378
|
-
validation={{
|
|
379
|
-
required: 'El email es requerido',
|
|
380
|
-
pattern: {
|
|
381
|
-
value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
382
|
-
message: 'Email inválido',
|
|
383
|
-
},
|
|
384
|
-
}}
|
|
385
|
-
/>
|
|
386
|
-
|
|
387
|
-
{/* Botones DENTRO del form, a nivel del body. */}
|
|
388
|
-
<Stack
|
|
389
|
-
direction="row"
|
|
390
|
-
spacing={1}
|
|
391
|
-
justifyContent="flex-end"
|
|
392
|
-
sx={{ pt: 1 }}
|
|
393
|
-
>
|
|
394
|
-
<Button
|
|
395
|
-
type="button"
|
|
396
|
-
variant="text"
|
|
397
|
-
onClick={handleClose}
|
|
398
|
-
disabled={isSubmitting}
|
|
399
|
-
>
|
|
400
|
-
Cancelar
|
|
401
|
-
</Button>
|
|
402
|
-
<Button
|
|
403
|
-
type="submit"
|
|
404
|
-
variant="contained"
|
|
405
|
-
disabled={isSubmitting}
|
|
406
|
-
>
|
|
407
|
-
{isSubmitting ? 'Guardando...' : 'Guardar'}
|
|
408
|
-
</Button>
|
|
409
|
-
</Stack>
|
|
410
|
-
</Stack>
|
|
411
|
-
</Box>
|
|
412
|
-
</Modal.Body>
|
|
413
|
-
</Modal>
|
|
414
|
-
</Box>
|
|
415
|
-
);
|
|
416
|
-
},
|
|
417
|
-
parameters: {
|
|
418
|
-
docs: {
|
|
419
|
-
description: {
|
|
420
|
-
story: [
|
|
421
|
-
'**Modal + React Hook Form con botones a nivel del Body (recomendado).**',
|
|
422
|
-
'',
|
|
423
|
-
'Cuando usás RHF dentro de un modal, los botones de submit/cancel deben',
|
|
424
|
-
'vivir dentro del mismo `<form>` que los inputs. Si ponés los botones',
|
|
425
|
-
'en `Modal.Footer`, quedan en un subárbol hermano al Body y el submit',
|
|
426
|
-
'no dispara porque el `<form>` no los envuelve.',
|
|
427
|
-
'',
|
|
428
|
-
'La solución es:',
|
|
429
|
-
'1. Usar `hiddenFooter` en el Modal para ocultar el footer por defecto.',
|
|
430
|
-
'2. Meter el `<form>`, los inputs y los botones todos dentro de `Modal.Body`.',
|
|
431
|
-
'3. El botón de submit usa `type="submit"`, que dispara el `onSubmit` del form.',
|
|
432
|
-
].join('\n'),
|
|
433
|
-
},
|
|
434
|
-
},
|
|
435
|
-
},
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
// =============================================================================
|
|
439
|
-
// RHF con botones en FOOTER usando formId (alternativa avanzada)
|
|
440
|
-
// =============================================================================
|
|
441
|
-
// Si querés mantener el layout clásico (botones en footer, form en body), la
|
|
442
|
-
// forma correcta es conectar el botón al form por su atributo `form=""`.
|
|
443
|
-
// Esto sí funciona con HTML5 nativo: un `<button form="myFormId">` fuera del
|
|
444
|
-
// `<form>` sigue disparando el submit.
|
|
445
|
-
// =============================================================================
|
|
446
|
-
|
|
447
|
-
// =============================================================================
|
|
448
|
-
// MODO CONFIRM — reemplazo del ConfirmModal legacy
|
|
449
|
-
// =============================================================================
|
|
450
|
-
|
|
451
|
-
export const ConfirmInfo: Story = {
|
|
452
|
-
render: () => {
|
|
453
|
-
const [open, setOpen] = useState(false);
|
|
454
|
-
return (
|
|
455
|
-
<Box>
|
|
456
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
457
|
-
Abrir confirm (info)
|
|
458
|
-
</Button>
|
|
459
|
-
<Modal
|
|
460
|
-
mode="confirm"
|
|
461
|
-
open={open}
|
|
462
|
-
onClose={() => setOpen(false)}
|
|
463
|
-
title="¿Deseas continuar?"
|
|
464
|
-
confirmMessage="Esta acción guardará los cambios realizados en el formulario."
|
|
465
|
-
confirmText="Sí, continuar"
|
|
466
|
-
closeButtonText="Cancelar"
|
|
467
|
-
onConfirm={() => console.log('confirmed')}
|
|
468
|
-
/>
|
|
469
|
-
</Box>
|
|
470
|
-
);
|
|
471
|
-
},
|
|
472
|
-
parameters: {
|
|
473
|
-
docs: {
|
|
474
|
-
description: {
|
|
475
|
-
story: 'Confirm de severidad `info` (default). Layout centrado con icono circular, título, mensaje y botones Cancelar / Confirmar.',
|
|
476
|
-
},
|
|
477
|
-
},
|
|
478
|
-
},
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
export const ConfirmDelete: Story = {
|
|
482
|
-
render: () => {
|
|
483
|
-
const [open, setOpen] = useState(false);
|
|
484
|
-
return (
|
|
485
|
-
<Box>
|
|
486
|
-
<Button variant="outlined" color="error" onClick={() => setOpen(true)}>
|
|
487
|
-
Eliminar afiliación
|
|
488
|
-
</Button>
|
|
489
|
-
<Modal
|
|
490
|
-
mode="confirm"
|
|
491
|
-
severity="error"
|
|
492
|
-
open={open}
|
|
493
|
-
onClose={() => setOpen(false)}
|
|
494
|
-
title="Eliminar afiliación"
|
|
495
|
-
confirmMessage="Esta acción no se puede deshacer. ¿Confirmas que deseas eliminar la afiliación #12458?"
|
|
496
|
-
confirmText="Sí, eliminar"
|
|
497
|
-
closeButtonText="Cancelar"
|
|
498
|
-
onConfirm={() => console.log('deleted')}
|
|
499
|
-
/>
|
|
500
|
-
</Box>
|
|
501
|
-
);
|
|
502
|
-
},
|
|
503
|
-
parameters: {
|
|
504
|
-
docs: {
|
|
505
|
-
description: {
|
|
506
|
-
story: 'Confirm de severidad `error` — icono rojo y botón primario rojo. Patrón típico para operaciones destructivas.',
|
|
507
|
-
},
|
|
508
|
-
},
|
|
509
|
-
},
|
|
510
|
-
};
|
|
511
|
-
|
|
512
|
-
export const ConfirmWarning: Story = {
|
|
513
|
-
render: () => {
|
|
514
|
-
const [open, setOpen] = useState(false);
|
|
515
|
-
return (
|
|
516
|
-
<Box>
|
|
517
|
-
<Button variant="contained" color="warning" onClick={() => setOpen(true)}>
|
|
518
|
-
Salir sin guardar
|
|
519
|
-
</Button>
|
|
520
|
-
<Modal
|
|
521
|
-
mode="confirm"
|
|
522
|
-
severity="warning"
|
|
523
|
-
open={open}
|
|
524
|
-
onClose={() => setOpen(false)}
|
|
525
|
-
title="Tienes cambios sin guardar"
|
|
526
|
-
confirmMessage="Si sales ahora perderás los cambios realizados. ¿Deseas salir igualmente?"
|
|
527
|
-
confirmText="Salir sin guardar"
|
|
528
|
-
closeButtonText="Seguir editando"
|
|
529
|
-
onConfirm={() => console.log('discarded')}
|
|
530
|
-
/>
|
|
531
|
-
</Box>
|
|
532
|
-
);
|
|
533
|
-
},
|
|
534
|
-
};
|
|
535
|
-
|
|
536
|
-
export const ConfirmSuccess: Story = {
|
|
537
|
-
render: () => {
|
|
538
|
-
const [open, setOpen] = useState(false);
|
|
539
|
-
return (
|
|
540
|
-
<Box>
|
|
541
|
-
<Button variant="contained" color="success" onClick={() => setOpen(true)}>
|
|
542
|
-
Aprobar solicitud
|
|
543
|
-
</Button>
|
|
544
|
-
<Modal
|
|
545
|
-
mode="confirm"
|
|
546
|
-
severity="success"
|
|
547
|
-
open={open}
|
|
548
|
-
onClose={() => setOpen(false)}
|
|
549
|
-
title="Aprobar solicitud"
|
|
550
|
-
confirmMessage="Al aprobar, el cliente recibirá una notificación y se activará su afiliación."
|
|
551
|
-
confirmText="Aprobar"
|
|
552
|
-
closeButtonText="Cancelar"
|
|
553
|
-
onConfirm={() => console.log('approved')}
|
|
554
|
-
/>
|
|
555
|
-
</Box>
|
|
556
|
-
);
|
|
557
|
-
},
|
|
558
|
-
};
|
|
559
|
-
|
|
560
|
-
export const ConfirmAsync: Story = {
|
|
561
|
-
render: () => {
|
|
562
|
-
const [open, setOpen] = useState(false);
|
|
563
|
-
const [result, setResult] = useState<string | null>(null);
|
|
564
|
-
|
|
565
|
-
const simulateRequest = () =>
|
|
566
|
-
new Promise<void>((resolve) => {
|
|
567
|
-
setTimeout(() => {
|
|
568
|
-
setResult('Ejecutado después de 1.5s');
|
|
569
|
-
resolve();
|
|
570
|
-
}, 1500);
|
|
571
|
-
});
|
|
572
|
-
|
|
573
|
-
return (
|
|
574
|
-
<Box>
|
|
575
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
576
|
-
Confirmar con request async
|
|
577
|
-
</Button>
|
|
578
|
-
{result && (
|
|
579
|
-
<Typography sx={{ mt: 2 }} color="success.main">
|
|
580
|
-
{result}
|
|
581
|
-
</Typography>
|
|
582
|
-
)}
|
|
583
|
-
<Modal
|
|
584
|
-
mode="confirm"
|
|
585
|
-
open={open}
|
|
586
|
-
onClose={() => setOpen(false)}
|
|
587
|
-
title="Procesar afiliación"
|
|
588
|
-
confirmMessage="Esto enviará la solicitud al backend y puede tardar unos segundos."
|
|
589
|
-
confirmText="Procesar"
|
|
590
|
-
onConfirm={simulateRequest}
|
|
591
|
-
/>
|
|
592
|
-
</Box>
|
|
593
|
-
);
|
|
594
|
-
},
|
|
595
|
-
parameters: {
|
|
596
|
-
docs: {
|
|
597
|
-
description: {
|
|
598
|
-
story: 'El `onConfirm` puede devolver una `Promise`. Mientras resuelve, los botones quedan deshabilitados para evitar clicks dobles. Al resolver, el modal cierra automáticamente.',
|
|
599
|
-
},
|
|
600
|
-
},
|
|
601
|
-
},
|
|
602
|
-
};
|
|
603
|
-
|
|
604
|
-
export const RHFWithFooterFormId: Story = {
|
|
605
|
-
render: () => {
|
|
606
|
-
const [open, setOpen] = useState(false);
|
|
607
|
-
const [submitted, setSubmitted] = useState<UserFormValues | null>(null);
|
|
608
|
-
|
|
609
|
-
const {
|
|
610
|
-
control,
|
|
611
|
-
handleSubmit,
|
|
612
|
-
reset,
|
|
613
|
-
formState: { isSubmitting },
|
|
614
|
-
} = useForm<UserFormValues>({
|
|
615
|
-
defaultValues: { name: '', email: '' },
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
const FORM_ID = 'user-form-footer';
|
|
619
|
-
|
|
620
|
-
const onSubmit = async (data: UserFormValues) => {
|
|
621
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
622
|
-
setSubmitted(data);
|
|
623
|
-
setOpen(false);
|
|
624
|
-
reset();
|
|
625
|
-
};
|
|
626
|
-
|
|
627
|
-
const handleClose = () => {
|
|
628
|
-
setOpen(false);
|
|
629
|
-
reset();
|
|
630
|
-
};
|
|
631
|
-
|
|
632
|
-
return (
|
|
633
|
-
<Box>
|
|
634
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
635
|
-
Abrir form (footer con formId)
|
|
636
|
-
</Button>
|
|
637
|
-
{submitted && (
|
|
638
|
-
<Typography sx={{ mt: 2 }} color="success.main">
|
|
639
|
-
Enviado: {JSON.stringify(submitted)}
|
|
640
|
-
</Typography>
|
|
641
|
-
)}
|
|
642
|
-
|
|
643
|
-
<Modal
|
|
644
|
-
open={open}
|
|
645
|
-
onClose={handleClose}
|
|
646
|
-
title="Crear usuario (footer)"
|
|
647
|
-
maxWidth="sm"
|
|
648
|
-
actions={[
|
|
649
|
-
{
|
|
650
|
-
text: isSubmitting ? 'Guardando...' : 'Guardar',
|
|
651
|
-
// 👇 clave: el botón referencia al form por id.
|
|
652
|
-
buttonProps: {
|
|
653
|
-
type: 'submit',
|
|
654
|
-
form: FORM_ID,
|
|
655
|
-
variant: 'contained',
|
|
656
|
-
disabled: isSubmitting,
|
|
657
|
-
},
|
|
658
|
-
},
|
|
659
|
-
]}
|
|
660
|
-
closeButtonText="Cancelar"
|
|
661
|
-
>
|
|
662
|
-
<Modal.Body>
|
|
663
|
-
<Box
|
|
664
|
-
component="form"
|
|
665
|
-
id={FORM_ID}
|
|
666
|
-
onSubmit={handleSubmit(onSubmit)}
|
|
667
|
-
noValidate
|
|
668
|
-
paddingTop={2}
|
|
669
|
-
>
|
|
670
|
-
<Stack spacing={3}>
|
|
671
|
-
<Input
|
|
672
|
-
name="name"
|
|
673
|
-
control={control}
|
|
674
|
-
label="Nombre"
|
|
675
|
-
validation={{
|
|
676
|
-
required: 'El nombre es requerido',
|
|
677
|
-
}}
|
|
678
|
-
/>
|
|
679
|
-
<Input
|
|
680
|
-
name="email"
|
|
681
|
-
control={control}
|
|
682
|
-
label="Email"
|
|
683
|
-
type="email"
|
|
684
|
-
validation={{
|
|
685
|
-
required: 'El email es requerido',
|
|
686
|
-
pattern: {
|
|
687
|
-
value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
688
|
-
message: 'Email inválido',
|
|
689
|
-
},
|
|
690
|
-
}}
|
|
691
|
-
/>
|
|
692
|
-
</Stack>
|
|
693
|
-
</Box>
|
|
694
|
-
</Modal.Body>
|
|
695
|
-
</Modal>
|
|
696
|
-
</Box>
|
|
697
|
-
);
|
|
698
|
-
},
|
|
699
|
-
parameters: {
|
|
700
|
-
docs: {
|
|
701
|
-
description: {
|
|
702
|
-
story: [
|
|
703
|
-
'**Alternativa avanzada: botones en el footer usando `form="formId"`.**',
|
|
704
|
-
'',
|
|
705
|
-
'Si necesitás mantener el layout clásico (Header / Body / Footer) con los',
|
|
706
|
-
'botones en el footer, la forma correcta es asignarle un `id` al `<form>`',
|
|
707
|
-
'y al botón de submit le pasás `form="mismoId"`. HTML5 nativo conecta',
|
|
708
|
-
'el botón con el form aunque no sean hermanos en el DOM.',
|
|
709
|
-
'',
|
|
710
|
-
'```tsx',
|
|
711
|
-
'<form id="user-form" onSubmit={handleSubmit(onSubmit)}>...</form>',
|
|
712
|
-
'<button type="submit" form="user-form">Guardar</button>',
|
|
713
|
-
'```',
|
|
714
|
-
'',
|
|
715
|
-
'Es la alternativa cuando querés reutilizar `Modal.Footer` con sus `actions`',
|
|
716
|
-
'en lugar de construir los botones a mano dentro del body.',
|
|
717
|
-
].join('\n'),
|
|
718
|
-
},
|
|
719
|
-
},
|
|
720
|
-
},
|
|
721
|
-
};
|