@shohojdhara/atomix 0.1.16 → 0.1.18
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/CONTRIBUTING.md +151 -0
- package/NEXTJS_INTEGRATION.md +358 -0
- package/README.md +168 -119
- package/babel.config.js +58 -0
- package/css.d.ts +10 -0
- package/dist/css/atomix.css +1 -2
- package/dist/js/194.js +1 -2
- package/dist/js/244.js +1 -0
- package/dist/js/atomix.react.cjs.js +1 -0
- package/dist/js/atomix.react.esm.js +1 -2
- package/dist/js/atomix.react.umd.js +1 -2
- package/dist/js/chunks/cjs/202.9d3b1ef1eaa0d5c8a309.js +1 -0
- package/dist/js/chunks/cjs/308.6ea9685ea38ead4120d0.js +1 -0
- package/dist/js/chunks/cjs/54.73db6922594e421ba6b1.js +1 -0
- package/dist/js/chunks/cjs/619.51feecaadcab819780d4.js +1 -0
- package/dist/js/chunks/cjs/690.90f6d11164081cbcbc4d.js +1 -0
- package/dist/js/chunks/cjs/894.24877561df336a8dfd14.js +1 -0
- package/dist/js/chunks/cjs/897.6c2a71fae95338890de7.js +1 -0
- package/dist/js/chunks/esm/{202.ff48d27672233280e021.js → 202.82aa7b3244e53c9edb72.js} +1 -2
- package/dist/js/chunks/esm/{308.f873332126eba90e5c62.js → 308.27e1e4005705ae320432.js} +1 -2
- package/dist/js/chunks/esm/{54.4db919e5e4e5cc6d7c72.js → 54.ece1fd6964f98d4d994f.js} +1 -2
- package/dist/js/chunks/esm/{619.afc5a718eff77fa423b5.js → 619.ebeb0298432a066ac05c.js} +1 -2
- package/dist/js/chunks/esm/{690.a9e968c7497d61e56cdc.js → 690.c5f412cc979b55740359.js} +1 -2
- package/dist/js/chunks/esm/{894.f1091a4a8758c26d29e4.js → 894.3604ddc9367d75191198.js} +1 -2
- package/dist/js/chunks/esm/{897.561a50f7d043d42169da.js → 897.a4aab2fad9401693eb12.js} +1 -2
- package/dist/js/chunks/umd/{202.dac7605cc555b6bda542.js → 202.5017dd0403d696bf1644.js} +1 -2
- package/dist/js/chunks/umd/{308.6709979849dcbdb90c9b.js → 308.4bc14b9d7b16b6ee0ab8.js} +1 -2
- package/dist/js/chunks/umd/{54.403470e1f7d0ef4424a7.js → 54.7fdfb4a031989470a70d.js} +1 -2
- package/dist/js/chunks/umd/{619.fa05ea98c10270eb64c5.js → 619.84a0c35ecee695250085.js} +1 -2
- package/dist/js/chunks/umd/{690.aa7054d1c53e5402c2d6.js → 690.d7041094a34a4a434be2.js} +1 -2
- package/dist/js/chunks/umd/{894.3e1eaf0a2aadf4434390.js → 894.c127ee4e9513c22ee97d.js} +1 -2
- package/dist/js/chunks/umd/{897.554ea37be4453698c167.js → 897.26932ac837a39fc91907.js} +1 -2
- package/dist/types/components/Badge/index.d.ts +3 -3
- package/dist/types/components/{Navbar → Navigation/Menu}/MegaMenu.d.ts +1 -1
- package/dist/types/components/{Navbar → Navigation/Menu}/Menu.d.ts +1 -1
- package/dist/types/components/Navigation/Nav/Nav.d.ts +20 -0
- package/dist/types/components/{Navbar → Navigation/Nav}/NavDropdown.d.ts +1 -1
- package/dist/types/components/Navigation/Nav/NavItem.d.ts +33 -0
- package/dist/types/components/Navigation/Navbar/Navbar.d.ts +19 -0
- package/dist/types/components/Navigation/SideMenu/SideMenu.d.ts +20 -0
- package/dist/types/components/Navigation/SideMenu/SideMenuItem.d.ts +30 -0
- package/dist/types/components/Navigation/SideMenu/SideMenuList.d.ts +17 -0
- package/dist/types/components/Navigation/index.d.ts +10 -0
- package/dist/types/components/PhotoViewer/PhotoViewer.d.ts +2 -2
- package/dist/types/components/PhotoViewer/PhotoViewerHeader.d.ts +2 -2
- package/dist/types/components/Tab/index.d.ts +2 -2
- package/dist/types/components/Toggle/index.d.ts +2 -2
- package/dist/types/components/Tooltip/index.d.ts +3 -3
- package/dist/types/components/index.d.ts +1 -1
- package/dist/types/lib/composables/index.d.ts +1 -0
- package/dist/types/lib/composables/useDatePicker.d.ts +1 -1
- package/dist/types/lib/composables/useDropdown.d.ts +1 -1
- package/dist/types/lib/composables/useModal.d.ts +1 -1
- package/dist/types/lib/composables/usePhotoViewer.d.ts +1 -1
- package/dist/types/lib/composables/useRating.d.ts +1 -1
- package/dist/types/lib/composables/useSideMenu.d.ts +28 -0
- package/dist/types/lib/constants/components.d.ts +72 -0
- package/dist/types/lib/types/components.d.ts +103 -0
- package/examples/nextjs-example.tsx +271 -0
- package/implementation-guide.md +505 -0
- package/next.config.js +69 -0
- package/package.json +80 -42
- package/postcss.config.js +28 -0
- package/src/Introduction.mdx +3 -5
- package/src/assets/fonts/HelveticaNeue/stylesheet.css +140 -127
- package/src/components/Accordion/Accordion.stories.tsx +58 -45
- package/src/components/Accordion/Accordion.tsx +14 -4
- package/src/components/Accordion/scripts/accordionInteractions.ts +9 -9
- package/src/components/Accordion/scripts/bundle.ts +1 -1
- package/src/components/Accordion/scripts/index.ts +3 -3
- package/src/components/AtomixLogo.tsx +13 -19
- package/src/components/Avatar/Avatar.stories.tsx +24 -21
- package/src/components/Avatar/Avatar.tsx +5 -8
- package/src/components/Avatar/AvatarGroup.tsx +11 -11
- package/src/components/Avatar/index.ts +1 -1
- package/src/components/Avatar/scripts/index.ts +66 -71
- package/src/components/Badge/Badge.stories.tsx +51 -21
- package/src/components/Badge/Badge.tsx +14 -12
- package/src/components/Badge/index.ts +3 -3
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +40 -40
- package/src/components/Breadcrumb/Breadcrumb.tsx +19 -26
- package/src/components/Breadcrumb/index.ts +1 -1
- package/src/components/Breadcrumb/scripts/breadcrumb.ts +36 -34
- package/src/components/Breadcrumb/scripts/index.ts +1 -1
- package/src/components/Breadcrumb/scripts/types.ts +9 -9
- package/src/components/Button/Button.stories.tsx +36 -12
- package/src/components/Button/Button.tsx +52 -39
- package/src/components/Button/index.ts +1 -1
- package/src/components/Button/scripts/buttonInteractions.ts +9 -9
- package/src/components/Button/scripts/index.ts +1 -1
- package/src/components/Callout/Callout.stories.tsx +207 -114
- package/src/components/Callout/Callout.tsx +12 -12
- package/src/components/Callout/index.ts +1 -1
- package/src/components/Callout/scripts/CalloutInteractions.ts +58 -48
- package/src/components/Callout/scripts/bundle.ts +2 -2
- package/src/components/Callout/scripts/index.ts +19 -15
- package/src/components/Card/Card.stories.tsx +2 -2
- package/src/components/Card/Card.tsx +49 -72
- package/src/components/Card/ElevationCard.tsx +4 -8
- package/src/components/Card/index.ts +1 -1
- package/src/components/Card/scripts/bundle.ts +7 -7
- package/src/components/Card/scripts/cardInteractions.ts +24 -24
- package/src/components/Card/scripts/index.ts +25 -26
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -3
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +12 -15
- package/src/components/ColorModeToggle/index.ts +1 -1
- package/src/components/Countdown/Countdown.stories.tsx +6 -2
- package/src/components/Countdown/Countdown.tsx +56 -48
- package/src/components/Countdown/index.ts +1 -1
- package/src/components/Countdown/scripts/index.ts +33 -28
- package/src/components/DataTable/DataTable.stories.tsx +23 -18
- package/src/components/DataTable/DataTable.tsx +39 -39
- package/src/components/DataTable/index.ts +1 -1
- package/src/components/DataTable/scripts/bundle.ts +8 -3
- package/src/components/DataTable/scripts/index.ts +182 -164
- package/src/components/DatePicker/DatePicker.stories.tsx +136 -148
- package/src/components/DatePicker/DatePicker.tsx +461 -420
- package/src/components/DatePicker/scripts/bundle.ts +12 -7
- package/src/components/DatePicker/scripts/componentInteractions.ts +76 -46
- package/src/components/DatePicker/scripts/index.ts +176 -156
- package/src/components/DatePicker/types.ts +32 -32
- package/src/components/DatePicker/utils.ts +41 -30
- package/src/components/Dropdown/Dropdown.stories.tsx +85 -55
- package/src/components/Dropdown/Dropdown.tsx +97 -88
- package/src/components/Dropdown/index.ts +5 -10
- package/src/components/Dropdown/scripts/bundle.ts +10 -10
- package/src/components/Dropdown/scripts/componentInteractions.ts +10 -2
- package/src/components/Dropdown/scripts/index.ts +122 -117
- package/src/components/EdgePanel/EdgePanel.stories.tsx +142 -58
- package/src/components/EdgePanel/EdgePanel.tsx +7 -13
- package/src/components/EdgePanel/index.ts +1 -1
- package/src/components/EdgePanel/scripts/bundle.ts +5 -5
- package/src/components/EdgePanel/scripts/edgePanelInteractions.ts +26 -26
- package/src/components/EdgePanel/scripts/index.ts +53 -53
- package/src/components/Form/Checkbox.stories.tsx +2 -2
- package/src/components/Form/Checkbox.tsx +13 -7
- package/src/components/Form/Form.stories.tsx +144 -218
- package/src/components/Form/Form.tsx +6 -6
- package/src/components/Form/FormGroup.stories.tsx +21 -38
- package/src/components/Form/FormGroup.tsx +18 -20
- package/src/components/Form/Input.stories.tsx +1 -1
- package/src/components/Form/Input.tsx +18 -8
- package/src/components/Form/Radio.stories.tsx +12 -25
- package/src/components/Form/Radio.tsx +11 -6
- package/src/components/Form/Select.stories.tsx +6 -6
- package/src/components/Form/Select.tsx +31 -33
- package/src/components/Form/Textarea.stories.tsx +7 -2
- package/src/components/Form/Textarea.tsx +17 -8
- package/src/components/Form/index.ts +1 -1
- package/src/components/Hero/Hero.stories.tsx +44 -42
- package/src/components/Hero/Hero.tsx +28 -38
- package/src/components/Hero/index.ts +1 -1
- package/src/components/Hero/scripts/bundle.ts +6 -6
- package/src/components/Hero/scripts/heroInteractions.ts +24 -29
- package/src/components/Hero/scripts/index.ts +16 -17
- package/src/components/Icon/Icon.tsx +16 -18
- package/src/components/Icon/index.ts +1 -1
- package/src/components/List/List.stories.tsx +1 -3
- package/src/components/List/List.tsx +6 -10
- package/src/components/List/ListGroup.tsx +1 -1
- package/src/components/List/index.ts +1 -1
- package/src/components/Messages/Messages.stories.tsx +30 -29
- package/src/components/Messages/Messages.tsx +60 -55
- package/src/components/Messages/index.ts +1 -1
- package/src/components/Messages/scripts/bundle.ts +1 -6
- package/src/components/Messages/scripts/componentInteractions.ts +32 -37
- package/src/components/Messages/scripts/index.ts +61 -55
- package/src/components/Modal/Modal.stories.tsx +77 -53
- package/src/components/Modal/Modal.tsx +63 -62
- package/src/components/Modal/index.ts +1 -1
- package/src/components/Modal/scripts/bundle.ts +3 -3
- package/src/components/Modal/scripts/index.ts +96 -84
- package/src/components/Modal/scripts/modalInteractions.ts +16 -14
- package/src/components/{Navbar → Navigation/Menu}/MegaMenu.tsx +50 -59
- package/src/components/Navigation/Menu/Menu.stories.tsx +340 -0
- package/src/components/Navigation/Menu/Menu.tsx +110 -0
- package/src/components/Navigation/Nav/Nav.stories.tsx +458 -0
- package/src/components/Navigation/Nav/Nav.tsx +50 -0
- package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
- package/src/components/Navigation/Nav/NavItem.tsx +159 -0
- package/src/components/{Navbar → Navigation/Navbar}/Navbar.stories.tsx +198 -104
- package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
- package/src/components/Navigation/README.md +314 -0
- package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +618 -0
- package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +95 -0
- package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
- package/src/components/Navigation/index.ts +23 -0
- package/src/components/Navigation/scripts/NavbarInteractions.ts +171 -0
- package/src/components/Navigation/scripts/SideMenu.ts +319 -0
- package/src/components/Navigation/scripts/SideMenuBundle.ts +69 -0
- package/src/components/Navigation/scripts/SideMenuInteractions.ts +250 -0
- package/src/components/Navigation/scripts/bundle.ts +58 -0
- package/src/components/Navigation/scripts/index.ts +248 -0
- package/src/components/Pagination/Pagination.stories.tsx +34 -33
- package/src/components/Pagination/Pagination.tsx +25 -35
- package/src/components/Pagination/index.ts +1 -1
- package/src/components/Pagination/scripts/index.ts +42 -37
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +48 -48
- package/src/components/PhotoViewer/PhotoViewer.tsx +29 -46
- package/src/components/PhotoViewer/PhotoViewerHeader.tsx +20 -26
- package/src/components/PhotoViewer/PhotoViewerImage.tsx +19 -17
- package/src/components/PhotoViewer/PhotoViewerInfo.tsx +13 -5
- package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +5 -5
- package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +31 -30
- package/src/components/PhotoViewer/examples/ImageGallery.tsx +27 -37
- package/src/components/PhotoViewer/examples/SimpleGallery.tsx +19 -13
- package/src/components/PhotoViewer/examples/index.ts +1 -1
- package/src/components/PhotoViewer/index.ts +1 -1
- package/src/components/PhotoViewer/scripts/PhotoViewerInteractions.ts +43 -33
- package/src/components/PhotoViewer/scripts/bundle.ts +14 -14
- package/src/components/PhotoViewer/scripts/index.ts +173 -129
- package/src/components/Popover/Popover.stories.tsx +11 -12
- package/src/components/Popover/Popover.tsx +36 -36
- package/src/components/Popover/index.ts +1 -1
- package/src/components/Popover/scripts/bundle.ts +1 -1
- package/src/components/Popover/scripts/componentInteractions.ts +34 -46
- package/src/components/Popover/scripts/index.ts +64 -53
- package/src/components/ProductReview/ProductReview.stories.tsx +10 -8
- package/src/components/ProductReview/ProductReview.tsx +28 -32
- package/src/components/ProductReview/scripts/componentInteractions.ts +20 -20
- package/src/components/Progress/Progress.tsx +36 -34
- package/src/components/Progress/scripts/bundle.ts +7 -2
- package/src/components/Progress/scripts/componentInteractions.ts +29 -23
- package/src/components/Progress/scripts/index.ts +45 -39
- package/src/components/Rating/Rating.stories.tsx +3 -16
- package/src/components/Rating/Rating.tsx +250 -231
- package/src/components/Rating/scripts/bundle.ts +11 -6
- package/src/components/Rating/scripts/index.ts +85 -80
- package/src/components/Rating/scripts/ratingInteractions.ts +27 -24
- package/src/components/River/River.stories.tsx +70 -24
- package/src/components/River/River.tsx +28 -38
- package/src/components/River/index.ts +1 -1
- package/src/components/River/scripts/index.ts +11 -12
- package/src/components/SectionIntro/SectionIntro.stories.tsx +12 -9
- package/src/components/SectionIntro/SectionIntro.tsx +25 -31
- package/src/components/SectionIntro/scripts/componentInteractions.ts +1 -1
- package/src/components/SectionIntro/scripts/index.ts +30 -16
- package/src/components/Spinner/Spinner.stories.tsx +5 -7
- package/src/components/Spinner/Spinner.tsx +11 -6
- package/src/components/Spinner/index.ts +2 -2
- package/src/components/Steps/Steps.stories.tsx +44 -48
- package/src/components/Steps/Steps.tsx +20 -20
- package/src/components/Steps/index.ts +1 -1
- package/src/components/Steps/scripts/index.ts +9 -9
- package/src/components/Tab/Tab.stories.tsx +14 -6
- package/src/components/Tab/Tab.tsx +16 -18
- package/src/components/Tab/index.ts +2 -2
- package/src/components/Tab/scripts/index.ts +13 -13
- package/src/components/Testimonial/Testimonial.stories.tsx +54 -51
- package/src/components/Testimonial/Testimonial.tsx +18 -19
- package/src/components/Testimonial/index.ts +1 -1
- package/src/components/Testimonial/scripts/index.ts +19 -8
- package/src/components/Todo/Todo.stories.tsx +7 -24
- package/src/components/Todo/Todo.tsx +35 -46
- package/src/components/Todo/index.ts +1 -1
- package/src/components/Todo/scripts/bundle.ts +1 -1
- package/src/components/Todo/scripts/index.ts +99 -81
- package/src/components/Todo/scripts/todoInteractions.ts +12 -12
- package/src/components/Todo/scripts/types.ts +3 -3
- package/src/components/Toggle/Toggle.stories.tsx +2 -2
- package/src/components/Toggle/Toggle.tsx +18 -18
- package/src/components/Toggle/index.ts +2 -2
- package/src/components/Toggle/scripts/bundle.ts +7 -2
- package/src/components/Toggle/scripts/index.ts +14 -10
- package/src/components/Toggle/scripts/toggleInteractions.ts +11 -14
- package/src/components/Tooltip/Tooltip.stories.tsx +13 -6
- package/src/components/Tooltip/Tooltip.tsx +25 -15
- package/src/components/Tooltip/index.ts +3 -3
- package/src/components/Tooltip/scripts/bundle.ts +0 -1
- package/src/components/Tooltip/scripts/index.ts +44 -41
- package/src/components/Tooltip/scripts/tooltipInteractions.ts +22 -22
- package/src/components/Upload/Upload.stories.tsx +28 -34
- package/src/components/Upload/Upload.tsx +86 -71
- package/src/components/Upload/index.ts +1 -1
- package/src/components/Upload/scripts/index.ts +58 -43
- package/src/components/index.ts +5 -6
- package/src/design-tokens/BoxShadow/BoxShadow.stories.tsx +13 -10
- package/src/design-tokens/Colors/colors.scss +10 -7
- package/src/design-tokens/Colors/colors.stories.tsx +46 -59
- package/src/design-tokens/Spacing/Spacing.scss +7 -5
- package/src/design-tokens/Spacing/Spacing.stories.tsx +19 -18
- package/src/design-tokens/Typography/Typography.scss +88 -25
- package/src/design-tokens/Typography/Typography.stories.tsx +22 -25
- package/src/docs/implementation-guide.mdx +2 -2
- package/src/htmlComponentsEntry.ts +23 -23
- package/src/index.ts +1 -1
- package/src/layouts/Grid/Container.tsx +6 -10
- package/src/layouts/Grid/Grid.stories.tsx +72 -34
- package/src/layouts/Grid/Grid.tsx +6 -13
- package/src/layouts/Grid/GridCol.tsx +29 -26
- package/src/layouts/Grid/Row.tsx +6 -13
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +79 -72
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +23 -25
- package/src/layouts/MasonryGrid/MasonryGridItem.tsx +4 -12
- package/src/layouts/index.ts +3 -4
- package/src/lib/composables/index.ts +3 -3
- package/src/lib/composables/useAccordion.ts +15 -6
- package/src/lib/composables/useBadge.ts +3 -3
- package/src/lib/composables/useBreadcrumb.ts +6 -12
- package/src/lib/composables/useButton.ts +3 -3
- package/src/lib/composables/useCallout.ts +3 -3
- package/src/lib/composables/useCard.ts +50 -28
- package/src/lib/composables/useCheckbox.ts +7 -7
- package/src/lib/composables/useDataTable.ts +61 -57
- package/src/lib/composables/useDatePicker.ts +255 -231
- package/src/lib/composables/useDropdown.ts +90 -75
- package/src/lib/composables/useEdgePanel.ts +50 -47
- package/src/lib/composables/useForm.ts +4 -7
- package/src/lib/composables/useFormGroup.ts +11 -12
- package/src/lib/composables/useHero.ts +36 -38
- package/src/lib/composables/useInput.ts +9 -10
- package/src/lib/composables/useMessages.ts +12 -14
- package/src/lib/composables/useModal.ts +37 -34
- package/src/lib/composables/useNavbar.ts +33 -22
- package/src/lib/composables/usePagination.ts +3 -10
- package/src/lib/composables/usePhotoViewer.ts +625 -578
- package/src/lib/composables/usePopover.ts +68 -62
- package/src/lib/composables/useProgress.ts +9 -12
- package/src/lib/composables/useRadio.ts +4 -4
- package/src/lib/composables/useRating.ts +82 -70
- package/src/lib/composables/useRiver.ts +28 -31
- package/src/lib/composables/useSelect.ts +7 -8
- package/src/lib/composables/useSideMenu.ts +197 -0
- package/src/lib/composables/useSpinner.ts +3 -3
- package/src/lib/composables/useTextarea.ts +8 -9
- package/src/lib/composables/useTodo.ts +14 -18
- package/src/lib/constants/components.ts +191 -118
- package/src/lib/constants/index.ts +1 -1
- package/src/lib/types/components.ts +454 -324
- package/src/lib/utils/dom.ts +2 -6
- package/src/lib/utils/icons.ts +20 -12
- package/src/lib/utils/index.ts +2 -2
- package/src/lib/utils/useForkRef.ts +1 -2
- package/src/styles/01-settings/_index.scss +59 -59
- package/src/styles/01-settings/_settings.accordion.scss +21 -21
- package/src/styles/01-settings/_settings.animations.scss +2 -2
- package/src/styles/01-settings/_settings.avatar-group.scss +14 -14
- package/src/styles/01-settings/_settings.avatar.scss +31 -31
- package/src/styles/01-settings/_settings.badge.scss +11 -11
- package/src/styles/01-settings/_settings.border-radius.scss +10 -9
- package/src/styles/01-settings/_settings.border.scss +7 -7
- package/src/styles/01-settings/_settings.box-shadow.scss +24 -12
- package/src/styles/01-settings/_settings.breadcrumb.scss +18 -18
- package/src/styles/01-settings/_settings.btn-group.scss +1 -1
- package/src/styles/01-settings/_settings.button.scss +63 -49
- package/src/styles/01-settings/_settings.callout.scss +27 -7
- package/src/styles/01-settings/_settings.card.scss +27 -30
- package/src/styles/01-settings/_settings.checkbox-group.scss +2 -3
- package/src/styles/01-settings/_settings.checkbox.scss +17 -18
- package/src/styles/01-settings/_settings.color-mode.scss +1 -1
- package/src/styles/01-settings/_settings.colors.scss +197 -214
- package/src/styles/01-settings/_settings.config.scss +1 -3
- package/src/styles/01-settings/_settings.countdown.scss +14 -14
- package/src/styles/01-settings/_settings.data-table.scss +6 -6
- package/src/styles/01-settings/_settings.datepicker.scss +40 -42
- package/src/styles/01-settings/_settings.dropdown.scss +30 -30
- package/src/styles/01-settings/_settings.edge-panel.scss +16 -16
- package/src/styles/01-settings/_settings.fonts.scss +14 -12
- package/src/styles/01-settings/_settings.form-group.scss +10 -10
- package/src/styles/01-settings/_settings.form.scss +3 -3
- package/src/styles/01-settings/_settings.grid.scss +1 -1
- package/src/styles/01-settings/_settings.hero.scss +23 -23
- package/src/styles/01-settings/_settings.input.scss +32 -32
- package/src/styles/01-settings/_settings.link.scss +6 -6
- package/src/styles/01-settings/_settings.list-group.scss +12 -12
- package/src/styles/01-settings/_settings.list.scss +2 -2
- package/src/styles/01-settings/_settings.maps.scss +183 -188
- package/src/styles/01-settings/_settings.masonry-grid.scss +2 -2
- package/src/styles/01-settings/_settings.menu.scss +35 -38
- package/src/styles/01-settings/_settings.messages.scss +71 -77
- package/src/styles/01-settings/_settings.modal.scss +24 -24
- package/src/styles/01-settings/_settings.nav.scss +15 -15
- package/src/styles/01-settings/_settings.navbar.scss +39 -12
- package/src/styles/01-settings/_settings.pagination.scss +21 -21
- package/src/styles/01-settings/_settings.photoviewer.scss +1 -1
- package/src/styles/01-settings/_settings.popover.scss +3 -3
- package/src/styles/01-settings/_settings.position.scss +2 -2
- package/src/styles/01-settings/_settings.progress.scss +15 -18
- package/src/styles/01-settings/_settings.rating.scss +7 -7
- package/src/styles/01-settings/_settings.river.scss +25 -25
- package/src/styles/01-settings/_settings.sectionintro.scss +15 -16
- package/src/styles/01-settings/_settings.select.scss +31 -31
- package/src/styles/01-settings/_settings.side-menu.scss +64 -16
- package/src/styles/01-settings/_settings.skeleton.scss +12 -12
- package/src/styles/01-settings/_settings.spacing.scss +62 -33
- package/src/styles/01-settings/_settings.spinner.scss +10 -10
- package/src/styles/01-settings/_settings.steps.scss +22 -22
- package/src/styles/01-settings/_settings.tabs.scss +25 -25
- package/src/styles/01-settings/_settings.testimonials.scss +17 -19
- package/src/styles/01-settings/_settings.todo.scss +1 -1
- package/src/styles/01-settings/_settings.toggle.scss +26 -26
- package/src/styles/01-settings/_settings.tooltip.scss +15 -15
- package/src/styles/01-settings/_settings.typography.scss +65 -48
- package/src/styles/01-settings/_settings.upload.scss +70 -77
- package/src/styles/01-settings/_settings.z-layers.scss +1 -1
- package/src/styles/02-tools/_index.scss +19 -19
- package/src/styles/02-tools/_tools.animations.scss +4 -4
- package/src/styles/02-tools/_tools.border-radius.scss +4 -5
- package/src/styles/02-tools/_tools.breakpoints.scss +33 -34
- package/src/styles/02-tools/_tools.button.scss +49 -25
- package/src/styles/02-tools/_tools.color-mode.scss +11 -11
- package/src/styles/02-tools/_tools.event.scss +1 -1
- package/src/styles/02-tools/_tools.hidden-visually.scss +1 -1
- package/src/styles/02-tools/_tools.hidden.scss +1 -1
- package/src/styles/02-tools/_tools.map-loop.scss +9 -9
- package/src/styles/02-tools/_tools.media-queries.scss +5 -3
- package/src/styles/02-tools/_tools.object-fit.scss +3 -3
- package/src/styles/02-tools/_tools.placeholder.scss +0 -1
- package/src/styles/02-tools/_tools.rem.scss +1 -1
- package/src/styles/02-tools/_tools.spacing.scss +8 -34
- package/src/styles/02-tools/_tools.to-rgb.scss +3 -3
- package/src/styles/02-tools/_tools.transition.scss +1 -1
- package/src/styles/02-tools/_tools.utility-api.scss +29 -14
- package/src/styles/03-generic/_generic.fonts.scss +0 -1
- package/src/styles/03-generic/_generic.reset.scss +13 -8
- package/src/styles/03-generic/_generic.root.scss +5 -5
- package/src/styles/03-generic/_index.scss +4 -4
- package/src/styles/04-elements/_elements.all.scss +2 -2
- package/src/styles/04-elements/_elements.body.scss +1 -2
- package/src/styles/04-elements/_elements.heading.scss +37 -21
- package/src/styles/04-elements/_elements.links.scss +0 -1
- package/src/styles/04-elements/_index.scss +5 -5
- package/src/styles/05-objects/_index.scss +3 -3
- package/src/styles/05-objects/_objects.container.scss +5 -4
- package/src/styles/05-objects/_objects.grid.scss +12 -12
- package/src/styles/05-objects/_objects.masonry-grid.scss +80 -74
- package/src/styles/06-components/_components.accordion.scss +12 -6
- package/src/styles/06-components/_components.avatar-group.scss +9 -8
- package/src/styles/06-components/_components.avatar.scss +78 -77
- package/src/styles/06-components/_components.badge.scss +48 -48
- package/src/styles/06-components/_components.breadcrumb.scss +57 -58
- package/src/styles/06-components/_components.btn-group.scss +22 -22
- package/src/styles/06-components/_components.button.scss +118 -110
- package/src/styles/06-components/_components.callout.scss +21 -15
- package/src/styles/06-components/_components.card.scss +6 -10
- package/src/styles/06-components/_components.checkbox-group.scss +9 -10
- package/src/styles/06-components/_components.checkbox.scss +10 -17
- package/src/styles/06-components/_components.color-mode-toggle.scss +6 -6
- package/src/styles/06-components/_components.countdown.scss +53 -54
- package/src/styles/06-components/_components.data-table.scss +40 -36
- package/src/styles/06-components/_components.datepicker.scss +95 -73
- package/src/styles/06-components/_components.dropdown.scss +15 -9
- package/src/styles/06-components/_components.edge-panel.scss +87 -46
- package/src/styles/06-components/_components.form-group.scss +5 -4
- package/src/styles/06-components/_components.hero.scss +128 -132
- package/src/styles/06-components/_components.icon.scss +16 -16
- package/src/styles/06-components/_components.image-gallery.scss +9 -7
- package/src/styles/06-components/_components.input.scss +18 -16
- package/src/styles/06-components/_components.list-group.scss +52 -51
- package/src/styles/06-components/_components.list.scss +15 -15
- package/src/styles/06-components/_components.menu.scss +225 -220
- package/src/styles/06-components/_components.messages.scss +45 -32
- package/src/styles/06-components/_components.modal.scss +0 -1
- package/src/styles/06-components/_components.nav.scss +56 -11
- package/src/styles/06-components/_components.navbar.scss +278 -202
- package/src/styles/06-components/_components.pagination.scss +7 -6
- package/src/styles/06-components/_components.photoviewer.scss +121 -116
- package/src/styles/06-components/_components.popover.scss +10 -10
- package/src/styles/06-components/_components.product-review.scss +3 -3
- package/src/styles/06-components/_components.progress.scss +32 -35
- package/src/styles/06-components/_components.rating.scss +9 -8
- package/src/styles/06-components/_components.river.scss +4 -2
- package/src/styles/06-components/_components.sectionintro.scss +19 -26
- package/src/styles/06-components/_components.select.scss +7 -8
- package/src/styles/06-components/_components.side-menu.scss +154 -28
- package/src/styles/06-components/_components.skeleton.scss +0 -1
- package/src/styles/06-components/_components.spinner.scss +2 -4
- package/src/styles/06-components/_components.steps.scss +76 -77
- package/src/styles/06-components/_components.tabs.scss +17 -12
- package/src/styles/06-components/_components.testimonials.scss +49 -52
- package/src/styles/06-components/_components.todo.scss +26 -26
- package/src/styles/06-components/_components.tooltip.scss +114 -115
- package/src/styles/06-components/_components.upload.scss +8 -18
- package/src/styles/06-components/_index.scss +48 -48
- package/src/styles/99-utilities/_index.scss +18 -18
- package/src/styles/99-utilities/_utilities.background.scss +13 -13
- package/src/styles/99-utilities/_utilities.border.scss +30 -30
- package/src/styles/99-utilities/_utilities.clearfix.scss +1 -1
- package/src/styles/99-utilities/_utilities.display.scss +5 -4
- package/src/styles/99-utilities/_utilities.flex.scss +19 -19
- package/src/styles/99-utilities/_utilities.link.scss +52 -35
- package/src/styles/99-utilities/_utilities.object-fit.scss +3 -3
- package/src/styles/99-utilities/_utilities.opacity.scss +6 -6
- package/src/styles/99-utilities/_utilities.overflow.scss +4 -4
- package/src/styles/99-utilities/_utilities.position.scss +8 -8
- package/src/styles/99-utilities/_utilities.shadow.scss +13 -13
- package/src/styles/99-utilities/_utilities.sizes.scss +17 -17
- package/src/styles/99-utilities/_utilities.spacing.scss +72 -37
- package/src/styles/99-utilities/_utilities.text.scss +15 -15
- package/src/styles/99-utilities/_utilities.visibility.scss +8 -8
- package/src/styles/99-utilities/_utilities.visually-hidden.scss +1 -1
- package/src/styles/99-utilities/_utilities.z-index.scss +2 -2
- package/tsconfig.json +74 -0
- package/webpack.config.js +463 -0
- package/NPM_PUBLISHING.md +0 -221
- package/dist/css/atomix.css.map +0 -1
- package/dist/js/194.js.map +0 -1
- package/dist/js/atomix.react.esm.js.map +0 -1
- package/dist/js/atomix.react.umd.js.map +0 -1
- package/dist/js/chunks/esm/202.ff48d27672233280e021.js.map +0 -1
- package/dist/js/chunks/esm/308.f873332126eba90e5c62.js.map +0 -1
- package/dist/js/chunks/esm/54.4db919e5e4e5cc6d7c72.js.map +0 -1
- package/dist/js/chunks/esm/619.afc5a718eff77fa423b5.js.map +0 -1
- package/dist/js/chunks/esm/690.a9e968c7497d61e56cdc.js.map +0 -1
- package/dist/js/chunks/esm/894.f1091a4a8758c26d29e4.js.map +0 -1
- package/dist/js/chunks/esm/897.561a50f7d043d42169da.js.map +0 -1
- package/dist/js/chunks/umd/202.dac7605cc555b6bda542.js.map +0 -1
- package/dist/js/chunks/umd/308.6709979849dcbdb90c9b.js.map +0 -1
- package/dist/js/chunks/umd/54.403470e1f7d0ef4424a7.js.map +0 -1
- package/dist/js/chunks/umd/619.fa05ea98c10270eb64c5.js.map +0 -1
- package/dist/js/chunks/umd/690.aa7054d1c53e5402c2d6.js.map +0 -1
- package/dist/js/chunks/umd/894.3e1eaf0a2aadf4434390.js.map +0 -1
- package/dist/js/chunks/umd/897.554ea37be4453698c167.js.map +0 -1
- package/dist/types/components/Navbar/Nav.d.ts +0 -5
- package/dist/types/components/Navbar/NavItem.d.ts +0 -5
- package/dist/types/components/Navbar/Navbar.d.ts +0 -5
- package/dist/types/components/Navbar/index.d.ts +0 -6
- package/src/components/Navbar/Menu.tsx +0 -122
- package/src/components/Navbar/Nav.tsx +0 -35
- package/src/components/Navbar/NavDropdown.tsx +0 -108
- package/src/components/Navbar/NavItem.tsx +0 -128
- package/src/components/Navbar/Navbar.tsx +0 -124
- package/src/components/Navbar/index.ts +0 -6
|
@@ -9,7 +9,7 @@ function useModal({
|
|
|
9
9
|
isOpen: isOpenProp,
|
|
10
10
|
onOpenChange,
|
|
11
11
|
onOpen,
|
|
12
|
-
onClose
|
|
12
|
+
onClose,
|
|
13
13
|
}: {
|
|
14
14
|
isOpen?: boolean;
|
|
15
15
|
onOpenChange?: (isOpen: boolean) => void;
|
|
@@ -18,54 +18,57 @@ function useModal({
|
|
|
18
18
|
} = {}) {
|
|
19
19
|
// For uncontrolled usage
|
|
20
20
|
const [isOpenState, setIsOpenState] = useState(false);
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
// Determine if we're in controlled or uncontrolled mode
|
|
23
23
|
const isControlled = isOpenProp !== undefined;
|
|
24
24
|
const isOpen = isControlled ? !!isOpenProp : isOpenState;
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
// Update internal state when prop changes (for controlled mode)
|
|
27
27
|
useEffect(() => {
|
|
28
28
|
if (isControlled) {
|
|
29
29
|
setIsOpenState(!!isOpenProp);
|
|
30
30
|
}
|
|
31
31
|
}, [isOpenProp, isControlled]);
|
|
32
|
-
|
|
33
|
-
const updateOpen = useCallback(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
onOpenChange
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
onOpen
|
|
47
|
-
|
|
48
|
-
onClose
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
32
|
+
|
|
33
|
+
const updateOpen = useCallback(
|
|
34
|
+
(nextIsOpen: boolean) => {
|
|
35
|
+
// For uncontrolled mode, update internal state
|
|
36
|
+
if (!isControlled) {
|
|
37
|
+
setIsOpenState(nextIsOpen);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Call the change handler in either mode
|
|
41
|
+
if (onOpenChange) {
|
|
42
|
+
onOpenChange(nextIsOpen);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Call the specific handler
|
|
46
|
+
if (nextIsOpen && onOpen) {
|
|
47
|
+
onOpen();
|
|
48
|
+
} else if (!nextIsOpen && onClose) {
|
|
49
|
+
onClose();
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
[isControlled, onOpenChange, onOpen, onClose]
|
|
53
|
+
);
|
|
54
|
+
|
|
52
55
|
const open = useCallback(() => {
|
|
53
56
|
updateOpen(true);
|
|
54
57
|
}, [updateOpen]);
|
|
55
|
-
|
|
58
|
+
|
|
56
59
|
const close = useCallback(() => {
|
|
57
60
|
updateOpen(false);
|
|
58
61
|
}, [updateOpen]);
|
|
59
|
-
|
|
62
|
+
|
|
60
63
|
const toggle = useCallback(() => {
|
|
61
64
|
updateOpen(!isOpen);
|
|
62
65
|
}, [isOpen, updateOpen]);
|
|
63
|
-
|
|
66
|
+
|
|
64
67
|
return {
|
|
65
68
|
isOpen,
|
|
66
69
|
open,
|
|
67
70
|
close,
|
|
68
|
-
toggle
|
|
71
|
+
toggle,
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
74
|
|
|
@@ -91,51 +94,53 @@ export const Modal: React.FC<ModalProps> = ({
|
|
|
91
94
|
const modalRef = useRef<HTMLDivElement>(null);
|
|
92
95
|
const dialogRef = useRef<HTMLDivElement>(null);
|
|
93
96
|
const backdropRef = useRef<HTMLDivElement>(null);
|
|
94
|
-
|
|
97
|
+
|
|
95
98
|
const {
|
|
96
99
|
isOpen: isOpenState,
|
|
97
100
|
open,
|
|
98
|
-
close
|
|
101
|
+
close,
|
|
99
102
|
} = useModal({
|
|
100
103
|
isOpen,
|
|
101
104
|
onOpenChange,
|
|
102
105
|
onClose,
|
|
103
|
-
onOpen
|
|
106
|
+
onOpen,
|
|
104
107
|
});
|
|
105
108
|
|
|
106
109
|
// Handle keyboard events for Escape key
|
|
107
110
|
useEffect(() => {
|
|
108
111
|
if (!keyboard) return undefined;
|
|
109
|
-
|
|
112
|
+
|
|
110
113
|
const handleKeydown = (event: KeyboardEvent) => {
|
|
111
114
|
if (event.key === 'Escape' && isOpenState) {
|
|
112
115
|
close();
|
|
113
116
|
}
|
|
114
117
|
};
|
|
115
|
-
|
|
118
|
+
|
|
116
119
|
document.addEventListener('keydown', handleKeydown);
|
|
117
120
|
return () => {
|
|
118
121
|
document.removeEventListener('keydown', handleKeydown);
|
|
119
122
|
};
|
|
120
123
|
}, [isOpenState, close, keyboard]);
|
|
121
|
-
|
|
124
|
+
|
|
122
125
|
// Handle backdrop click
|
|
123
126
|
const handleBackdropClick = (event: React.MouseEvent<HTMLDivElement>) => {
|
|
124
127
|
if (backdrop && event.target === event.currentTarget) {
|
|
125
128
|
close();
|
|
126
129
|
}
|
|
127
130
|
};
|
|
128
|
-
|
|
131
|
+
|
|
129
132
|
// Assemble classes
|
|
130
133
|
const modalClasses = [
|
|
131
134
|
'c-modal',
|
|
132
135
|
isOpenState ? MODAL.CLASSES.IS_OPEN : '',
|
|
133
136
|
size ? `c-modal--${size}` : '',
|
|
134
|
-
className
|
|
135
|
-
]
|
|
136
|
-
|
|
137
|
+
className,
|
|
138
|
+
]
|
|
139
|
+
.filter(Boolean)
|
|
140
|
+
.join(' ');
|
|
141
|
+
|
|
137
142
|
return (
|
|
138
|
-
<div
|
|
143
|
+
<div
|
|
139
144
|
ref={modalRef}
|
|
140
145
|
className={modalClasses}
|
|
141
146
|
style={{ display: isOpenState ? 'block' : 'none' }}
|
|
@@ -144,15 +149,8 @@ export const Modal: React.FC<ModalProps> = ({
|
|
|
144
149
|
aria-hidden={!isOpenState}
|
|
145
150
|
{...props}
|
|
146
151
|
>
|
|
147
|
-
<div
|
|
148
|
-
|
|
149
|
-
className="c-modal__backdrop"
|
|
150
|
-
onClick={handleBackdropClick}
|
|
151
|
-
/>
|
|
152
|
-
<div
|
|
153
|
-
ref={dialogRef}
|
|
154
|
-
className="c-modal__dialog"
|
|
155
|
-
>
|
|
152
|
+
<div ref={backdropRef} className="c-modal__backdrop" onClick={handleBackdropClick} />
|
|
153
|
+
<div ref={dialogRef} className="c-modal__dialog">
|
|
156
154
|
<div className="c-modal__content">
|
|
157
155
|
{(title || closeButton) && (
|
|
158
156
|
<div className="c-modal__header">
|
|
@@ -161,29 +159,32 @@ export const Modal: React.FC<ModalProps> = ({
|
|
|
161
159
|
{subtitle && <p className="c-modal__sub">{subtitle}</p>}
|
|
162
160
|
</div>
|
|
163
161
|
{closeButton && (
|
|
164
|
-
<button
|
|
165
|
-
type="button"
|
|
166
|
-
className="c-modal__close c-btn js-modal-close"
|
|
162
|
+
<button
|
|
163
|
+
type="button"
|
|
164
|
+
className="c-modal__close c-btn js-modal-close"
|
|
167
165
|
onClick={close}
|
|
168
166
|
aria-label="Close modal"
|
|
169
167
|
>
|
|
170
|
-
<svg
|
|
171
|
-
|
|
168
|
+
<svg
|
|
169
|
+
width="20"
|
|
170
|
+
height="20"
|
|
171
|
+
viewBox="0 0 20 20"
|
|
172
|
+
fill="none"
|
|
173
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
174
|
+
>
|
|
175
|
+
<path
|
|
176
|
+
d="M16.0672 15.1828C16.1253 15.2409 16.1713 15.3098 16.2028 15.3857C16.2342 15.4615 16.2504 15.5429 16.2504 15.625C16.2504 15.7071 16.2342 15.7884 16.2028 15.8643C16.1713 15.9402 16.1253 16.0091 16.0672 16.0672C16.0091 16.1252 15.9402 16.1713 15.8643 16.2027C15.7885 16.2342 15.7071 16.2503 15.625 16.2503C15.5429 16.2503 15.4616 16.2342 15.3857 16.2027C15.3098 16.1713 15.2409 16.1252 15.1828 16.0672L10 10.8836L4.8172 16.0672C4.69992 16.1844 4.54086 16.2503 4.37501 16.2503C4.20916 16.2503 4.0501 16.1844 3.93282 16.0672C3.81555 15.9499 3.74966 15.7908 3.74966 15.625C3.74966 15.4591 3.81555 15.3001 3.93282 15.1828L9.11642 9.99998L3.93282 4.81717C3.81555 4.69989 3.74966 4.54083 3.74966 4.37498C3.74966 4.20913 3.81555 4.05007 3.93282 3.93279C4.0501 3.81552 4.20916 3.74963 4.37501 3.74963C4.54086 3.74963 4.69992 3.81552 4.8172 3.93279L10 9.11639L15.1828 3.93279C15.3001 3.81552 15.4592 3.74963 15.625 3.74963C15.7909 3.74963 15.9499 3.81552 16.0672 3.93279C16.1845 4.05007 16.2504 4.20913 16.2504 4.37498C16.2504 4.54083 16.1845 4.69989 16.0672 4.81717L10.8836 9.99998L16.0672 15.1828Z"
|
|
177
|
+
fill="#141414"
|
|
178
|
+
/>
|
|
172
179
|
</svg>
|
|
173
180
|
</button>
|
|
174
181
|
)}
|
|
175
182
|
</div>
|
|
176
183
|
)}
|
|
177
|
-
|
|
178
|
-
<div className="c-modal__body">
|
|
179
|
-
|
|
180
|
-
</div>
|
|
181
|
-
|
|
182
|
-
{footer && (
|
|
183
|
-
<div className="c-modal__footer">
|
|
184
|
-
{footer}
|
|
185
|
-
</div>
|
|
186
|
-
)}
|
|
184
|
+
|
|
185
|
+
<div className="c-modal__body">{children}</div>
|
|
186
|
+
|
|
187
|
+
{footer && <div className="c-modal__footer">{footer}</div>}
|
|
187
188
|
</div>
|
|
188
189
|
</div>
|
|
189
190
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './Modal';
|
|
1
|
+
export { default } from './Modal';
|
|
@@ -10,8 +10,8 @@ if (typeof window !== 'undefined') {
|
|
|
10
10
|
(window as any).Atomix.initializeModals = initializeModals;
|
|
11
11
|
(window as any).Atomix.getModalInstance = getModalInstance;
|
|
12
12
|
(window as any).Atomix.setupModalEventDelegation = setupModalEventDelegation;
|
|
13
|
-
|
|
14
|
-
// Auto-initialize on DOMContentLoaded
|
|
13
|
+
|
|
14
|
+
// Auto-initialize on DOMContentLoaded
|
|
15
15
|
document.addEventListener('DOMContentLoaded', () => {
|
|
16
16
|
if ((window as any).Atomix.autoInitModals !== false) {
|
|
17
17
|
initializeModals();
|
|
@@ -20,4 +20,4 @@ if (typeof window !== 'undefined') {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export { Modal, initializeModals, getModalInstance, setupModalEventDelegation };
|
|
23
|
+
export { Modal, initializeModals, getModalInstance, setupModalEventDelegation };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Modal component implementation based on the old JS code
|
|
2
2
|
import { MODAL } from '../../../lib/constants/components';
|
|
3
|
-
import {
|
|
4
|
-
handleModalCloseClick,
|
|
5
|
-
handleModalKeydown,
|
|
3
|
+
import {
|
|
4
|
+
handleModalCloseClick,
|
|
5
|
+
handleModalKeydown,
|
|
6
6
|
handleBackdropClick,
|
|
7
7
|
} from './modalInteractions';
|
|
8
8
|
|
|
@@ -43,28 +43,36 @@ class Modal {
|
|
|
43
43
|
this.selector = selector;
|
|
44
44
|
this.$element =
|
|
45
45
|
typeof selector === 'string'
|
|
46
|
-
? document.querySelector(selector as string) as HTMLElement
|
|
46
|
+
? (document.querySelector(selector as string) as HTMLElement)
|
|
47
47
|
: selector;
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
if (!this.$element) {
|
|
50
50
|
throw new Error(`Modal element not found: ${selector}`);
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
// Merge default options with user options and data attributes
|
|
54
54
|
this.options = this._mergeOptions(options);
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
// Initialize elements
|
|
57
|
-
this.$closeButtons = this.$element.querySelectorAll(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.$
|
|
61
|
-
|
|
57
|
+
this.$closeButtons = this.$element.querySelectorAll(
|
|
58
|
+
this.options.closeSelector || MODAL.SELECTORS.CLOSE_BUTTONS
|
|
59
|
+
);
|
|
60
|
+
this.$backdrop = this.$element.querySelector(
|
|
61
|
+
this.options.backdropSelector || MODAL.SELECTORS.BACKDROP
|
|
62
|
+
);
|
|
63
|
+
this.$dialog = this.$element.querySelector(
|
|
64
|
+
this.options.dialogSelector || MODAL.SELECTORS.DIALOG
|
|
65
|
+
);
|
|
66
|
+
this.$openButtons = document.querySelectorAll(
|
|
67
|
+
this.options.openSelector || MODAL.SELECTORS.OPEN_BUTTON
|
|
68
|
+
);
|
|
69
|
+
|
|
62
70
|
// Initialize the modal
|
|
63
71
|
this._initialize();
|
|
64
|
-
|
|
72
|
+
|
|
65
73
|
// Store reference to this instance on the element
|
|
66
74
|
(this.$element as any).modalInstance = this;
|
|
67
|
-
|
|
75
|
+
|
|
68
76
|
return this;
|
|
69
77
|
}
|
|
70
78
|
|
|
@@ -73,35 +81,35 @@ class Modal {
|
|
|
73
81
|
*/
|
|
74
82
|
private _mergeOptions(options: ModalOptions): ModalOptions {
|
|
75
83
|
const dataOptions: ModalOptions = {};
|
|
76
|
-
|
|
84
|
+
|
|
77
85
|
// Extract options from data attributes
|
|
78
86
|
if (this.$element) {
|
|
79
87
|
if (this.$element.dataset.backdrop !== undefined) {
|
|
80
88
|
dataOptions.backdrop = this.$element.dataset.backdrop === 'true';
|
|
81
89
|
}
|
|
82
|
-
|
|
90
|
+
|
|
83
91
|
if (this.$element.dataset.keyboard !== undefined) {
|
|
84
92
|
dataOptions.keyboard = this.$element.dataset.keyboard === 'true';
|
|
85
93
|
}
|
|
86
|
-
|
|
94
|
+
|
|
87
95
|
if (this.$element.dataset.size) {
|
|
88
96
|
dataOptions.size = this.$element.dataset.size as 'sm' | 'md' | 'lg' | 'xl';
|
|
89
97
|
}
|
|
90
|
-
|
|
98
|
+
|
|
91
99
|
if (this.$element.dataset.openSelector) {
|
|
92
100
|
dataOptions.openSelector = this.$element.dataset.openSelector;
|
|
93
101
|
}
|
|
94
|
-
|
|
102
|
+
|
|
95
103
|
if (this.$element.dataset.closeSelector) {
|
|
96
104
|
dataOptions.closeSelector = this.$element.dataset.closeSelector;
|
|
97
105
|
}
|
|
98
106
|
}
|
|
99
|
-
|
|
107
|
+
|
|
100
108
|
// Merge defaults with passed options and data attributes
|
|
101
|
-
return {
|
|
102
|
-
...MODAL.DEFAULT_OPTIONS,
|
|
109
|
+
return {
|
|
110
|
+
...MODAL.DEFAULT_OPTIONS,
|
|
103
111
|
...options,
|
|
104
|
-
...dataOptions
|
|
112
|
+
...dataOptions,
|
|
105
113
|
};
|
|
106
114
|
}
|
|
107
115
|
|
|
@@ -113,13 +121,13 @@ class Modal {
|
|
|
113
121
|
if (this.options.size) {
|
|
114
122
|
this.$element.classList.add(`c-modal--${this.options.size}`);
|
|
115
123
|
}
|
|
116
|
-
|
|
124
|
+
|
|
117
125
|
// Check initial state
|
|
118
126
|
this.isOpen = this.$element.classList.contains(MODAL.CLASSES.IS_OPEN);
|
|
119
|
-
|
|
127
|
+
|
|
120
128
|
// Bind events
|
|
121
129
|
this._bindEvents();
|
|
122
|
-
|
|
130
|
+
|
|
123
131
|
// Initialize targets if modal has ID
|
|
124
132
|
if (this.$element.id) {
|
|
125
133
|
this._setupTargetButtons();
|
|
@@ -134,23 +142,23 @@ class Modal {
|
|
|
134
142
|
this.$closeButtons.forEach(button => {
|
|
135
143
|
button.addEventListener('click', this.close.bind(this));
|
|
136
144
|
});
|
|
137
|
-
|
|
145
|
+
|
|
138
146
|
this.$openButtons.forEach(button => {
|
|
139
147
|
button.addEventListener('click', this.open.bind(this));
|
|
140
148
|
});
|
|
141
|
-
|
|
149
|
+
|
|
142
150
|
// Backdrop click
|
|
143
151
|
if (this.options.backdrop && this.$backdrop) {
|
|
144
|
-
this.$backdrop.addEventListener('click',
|
|
152
|
+
this.$backdrop.addEventListener('click', e => {
|
|
145
153
|
if (e.target === this.$backdrop) {
|
|
146
154
|
this.close();
|
|
147
155
|
}
|
|
148
156
|
});
|
|
149
157
|
}
|
|
150
|
-
|
|
158
|
+
|
|
151
159
|
// Keyboard events
|
|
152
160
|
if (this.options.keyboard) {
|
|
153
|
-
this._keydownHandler =
|
|
161
|
+
this._keydownHandler = e => {
|
|
154
162
|
if (e.key === 'Escape' && this.isOpen) {
|
|
155
163
|
this.close();
|
|
156
164
|
}
|
|
@@ -158,95 +166,99 @@ class Modal {
|
|
|
158
166
|
document.addEventListener('keydown', this._keydownHandler);
|
|
159
167
|
}
|
|
160
168
|
}
|
|
161
|
-
|
|
169
|
+
|
|
162
170
|
/**
|
|
163
171
|
* Set up buttons that target this modal using data-target attribute
|
|
164
172
|
*/
|
|
165
173
|
private _setupTargetButtons(): void {
|
|
166
174
|
if (!this.$element.id) return;
|
|
167
|
-
|
|
175
|
+
|
|
168
176
|
const targetSelector = `[data-target="#${this.$element.id}"]`;
|
|
169
177
|
const targetButtons = document.querySelectorAll(targetSelector);
|
|
170
|
-
|
|
178
|
+
|
|
171
179
|
targetButtons.forEach(button => {
|
|
172
|
-
button.addEventListener('click',
|
|
180
|
+
button.addEventListener('click', e => {
|
|
173
181
|
e.preventDefault();
|
|
174
182
|
this.open();
|
|
175
183
|
});
|
|
176
184
|
});
|
|
177
185
|
}
|
|
178
|
-
|
|
186
|
+
|
|
179
187
|
/**
|
|
180
188
|
* Open the modal
|
|
181
189
|
*/
|
|
182
190
|
open(): void {
|
|
183
191
|
if (this.isOpen) return;
|
|
184
|
-
|
|
192
|
+
|
|
185
193
|
// Display the modal
|
|
186
194
|
this.$element.style.display = 'block';
|
|
187
|
-
|
|
195
|
+
|
|
188
196
|
// Use requestAnimationFrame for smooth animation
|
|
189
197
|
requestAnimationFrame(() => {
|
|
190
198
|
this.$element.classList.add(MODAL.CLASSES.IS_OPEN);
|
|
191
199
|
this.isOpen = true;
|
|
192
|
-
|
|
200
|
+
|
|
193
201
|
// Focus the first focusable element inside modal
|
|
194
202
|
this._trapFocus();
|
|
195
|
-
|
|
203
|
+
|
|
196
204
|
// Call the onOpen callback if provided
|
|
197
205
|
if (typeof this.options.onOpen === 'function') {
|
|
198
206
|
this.options.onOpen();
|
|
199
207
|
}
|
|
200
|
-
|
|
208
|
+
|
|
201
209
|
// Call the onToggle callback if provided
|
|
202
210
|
if (typeof this.options.onToggle === 'function') {
|
|
203
211
|
this.options.onToggle(true);
|
|
204
212
|
}
|
|
205
|
-
|
|
213
|
+
|
|
206
214
|
// Dispatch custom event
|
|
207
|
-
this.$element.dispatchEvent(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
215
|
+
this.$element.dispatchEvent(
|
|
216
|
+
new CustomEvent('modal:open', {
|
|
217
|
+
bubbles: true,
|
|
218
|
+
detail: { instance: this },
|
|
219
|
+
})
|
|
220
|
+
);
|
|
211
221
|
});
|
|
212
222
|
}
|
|
213
|
-
|
|
223
|
+
|
|
214
224
|
/**
|
|
215
225
|
* Close the modal
|
|
216
226
|
*/
|
|
217
227
|
close(): void {
|
|
218
228
|
if (!this.isOpen) return;
|
|
219
|
-
|
|
229
|
+
|
|
220
230
|
this.$element.classList.remove(MODAL.CLASSES.IS_OPEN);
|
|
221
231
|
this.isOpen = false;
|
|
222
|
-
|
|
232
|
+
|
|
223
233
|
// Call the onClose callback if provided
|
|
224
234
|
if (typeof this.options.onClose === 'function') {
|
|
225
235
|
this.options.onClose();
|
|
226
236
|
}
|
|
227
|
-
|
|
237
|
+
|
|
228
238
|
// Call the onToggle callback if provided
|
|
229
239
|
if (typeof this.options.onToggle === 'function') {
|
|
230
240
|
this.options.onToggle(false);
|
|
231
241
|
}
|
|
232
|
-
|
|
242
|
+
|
|
233
243
|
// Dispatch custom event
|
|
234
|
-
this.$element.dispatchEvent(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
244
|
+
this.$element.dispatchEvent(
|
|
245
|
+
new CustomEvent('modal:close', {
|
|
246
|
+
bubbles: true,
|
|
247
|
+
detail: { instance: this },
|
|
248
|
+
})
|
|
249
|
+
);
|
|
250
|
+
|
|
239
251
|
// Wait for animation to complete before hiding
|
|
240
252
|
const onTransitionEnd = () => {
|
|
241
253
|
if (!this.isOpen) {
|
|
242
254
|
this.$element.style.display = 'none';
|
|
243
255
|
}
|
|
244
|
-
|
|
256
|
+
|
|
245
257
|
if (this.$backdrop) {
|
|
246
258
|
this.$backdrop.removeEventListener('transitionend', onTransitionEnd);
|
|
247
259
|
}
|
|
248
260
|
};
|
|
249
|
-
|
|
261
|
+
|
|
250
262
|
if (this.$backdrop) {
|
|
251
263
|
this.$backdrop.addEventListener('transitionend', onTransitionEnd);
|
|
252
264
|
} else {
|
|
@@ -254,7 +266,7 @@ class Modal {
|
|
|
254
266
|
setTimeout(onTransitionEnd, 300);
|
|
255
267
|
}
|
|
256
268
|
}
|
|
257
|
-
|
|
269
|
+
|
|
258
270
|
/**
|
|
259
271
|
* Toggle the modal's open/closed state
|
|
260
272
|
*/
|
|
@@ -265,23 +277,23 @@ class Modal {
|
|
|
265
277
|
this.open();
|
|
266
278
|
}
|
|
267
279
|
}
|
|
268
|
-
|
|
280
|
+
|
|
269
281
|
/**
|
|
270
282
|
* Focus trap for accessibility
|
|
271
283
|
*/
|
|
272
284
|
private _trapFocus(): void {
|
|
273
285
|
if (!this.$dialog) return;
|
|
274
|
-
|
|
286
|
+
|
|
275
287
|
// Find the first focusable element
|
|
276
288
|
const focusableElements = this.$dialog.querySelectorAll(
|
|
277
289
|
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
278
290
|
);
|
|
279
|
-
|
|
291
|
+
|
|
280
292
|
if (focusableElements.length > 0) {
|
|
281
293
|
(focusableElements[0] as HTMLElement).focus();
|
|
282
294
|
}
|
|
283
295
|
}
|
|
284
|
-
|
|
296
|
+
|
|
285
297
|
/**
|
|
286
298
|
* Destroy the modal instance and remove event listeners
|
|
287
299
|
*/
|
|
@@ -290,27 +302,29 @@ class Modal {
|
|
|
290
302
|
this.$closeButtons.forEach(button => {
|
|
291
303
|
button.removeEventListener('click', this.close);
|
|
292
304
|
});
|
|
293
|
-
|
|
305
|
+
|
|
294
306
|
this.$openButtons.forEach(button => {
|
|
295
307
|
button.removeEventListener('click', this.open);
|
|
296
308
|
});
|
|
297
|
-
|
|
309
|
+
|
|
298
310
|
if (this.$backdrop) {
|
|
299
311
|
this.$backdrop.removeEventListener('click', this.close);
|
|
300
312
|
}
|
|
301
|
-
|
|
313
|
+
|
|
302
314
|
if (this._keydownHandler) {
|
|
303
315
|
document.removeEventListener('keydown', this._keydownHandler);
|
|
304
316
|
}
|
|
305
|
-
|
|
317
|
+
|
|
306
318
|
// Remove data-modal reference
|
|
307
319
|
delete (this.$element as any).modalInstance;
|
|
308
|
-
|
|
320
|
+
|
|
309
321
|
// Dispatch destroy event
|
|
310
|
-
this.$element.dispatchEvent(
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
322
|
+
this.$element.dispatchEvent(
|
|
323
|
+
new CustomEvent('modal:destroy', {
|
|
324
|
+
bubbles: true,
|
|
325
|
+
detail: { instance: this },
|
|
326
|
+
})
|
|
327
|
+
);
|
|
314
328
|
}
|
|
315
329
|
}
|
|
316
330
|
|
|
@@ -321,18 +335,18 @@ class Modal {
|
|
|
321
335
|
* @returns Array of initialized Modal instances
|
|
322
336
|
*/
|
|
323
337
|
export function initializeModals(
|
|
324
|
-
selector = MODAL.SELECTORS.MODAL,
|
|
338
|
+
selector = MODAL.SELECTORS.MODAL,
|
|
325
339
|
options: ModalOptions = {}
|
|
326
340
|
): Modal[] {
|
|
327
341
|
const instances: Modal[] = [];
|
|
328
342
|
const elements = document.querySelectorAll(selector);
|
|
329
|
-
|
|
343
|
+
|
|
330
344
|
if (!elements.length) return instances;
|
|
331
|
-
|
|
345
|
+
|
|
332
346
|
elements.forEach(element => {
|
|
333
347
|
// Skip if already initialized
|
|
334
348
|
if ((element as any).modalInstance) return;
|
|
335
|
-
|
|
349
|
+
|
|
336
350
|
try {
|
|
337
351
|
const instance = new Modal(element as HTMLElement, options);
|
|
338
352
|
instances.push(instance);
|
|
@@ -340,23 +354,21 @@ export function initializeModals(
|
|
|
340
354
|
console.error('Failed to initialize modal:', error);
|
|
341
355
|
}
|
|
342
356
|
});
|
|
343
|
-
|
|
357
|
+
|
|
344
358
|
return instances;
|
|
345
359
|
}
|
|
346
360
|
|
|
347
361
|
/**
|
|
348
362
|
* Get a modal instance from an element
|
|
349
|
-
* @param element - Modal element or selector
|
|
363
|
+
* @param element - Modal element or selector
|
|
350
364
|
* @returns Modal instance or null
|
|
351
365
|
*/
|
|
352
366
|
export function getModalInstance(element: string | HTMLElement): Modal | null {
|
|
353
|
-
const el = typeof element === 'string'
|
|
354
|
-
|
|
355
|
-
: element;
|
|
356
|
-
|
|
367
|
+
const el = typeof element === 'string' ? document.querySelector(element) : element;
|
|
368
|
+
|
|
357
369
|
if (!el) return null;
|
|
358
|
-
|
|
370
|
+
|
|
359
371
|
return (el as any).modalInstance || null;
|
|
360
372
|
}
|
|
361
373
|
|
|
362
|
-
export default Modal;
|
|
374
|
+
export default Modal;
|