@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
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
DropdownPosition,
|
|
4
4
|
DropdownTrigger,
|
|
5
5
|
DropdownOptions,
|
|
6
|
-
TimerRef
|
|
6
|
+
TimerRef,
|
|
7
7
|
} from './componentInteractions';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -34,16 +34,17 @@ class Dropdown {
|
|
|
34
34
|
this.isOpen = false;
|
|
35
35
|
this.timeoutRef = { current: null };
|
|
36
36
|
this.animating = false;
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
// Set default options
|
|
39
39
|
this.options = {
|
|
40
|
-
placement: options.placement || DROPDOWN.DEFAULTS.PLACEMENT as DropdownPosition,
|
|
41
|
-
trigger: options.trigger || DROPDOWN.DEFAULTS.TRIGGER as DropdownTrigger,
|
|
40
|
+
placement: options.placement || (DROPDOWN.DEFAULTS.PLACEMENT as DropdownPosition),
|
|
41
|
+
trigger: options.trigger || (DROPDOWN.DEFAULTS.TRIGGER as DropdownTrigger),
|
|
42
42
|
offset: options.offset !== undefined ? options.offset : DROPDOWN.DEFAULTS.OFFSET,
|
|
43
|
-
closeOnClickOutside:
|
|
43
|
+
closeOnClickOutside:
|
|
44
|
+
options.closeOnClickOutside !== undefined ? options.closeOnClickOutside : true,
|
|
44
45
|
closeOnEscape: options.closeOnEscape !== undefined ? options.closeOnEscape : true,
|
|
45
46
|
minWidth: options.minWidth?.toString() || DROPDOWN.DEFAULTS.MIN_WIDTH.toString(),
|
|
46
|
-
maxHeight: options.maxHeight || ''
|
|
47
|
+
maxHeight: options.maxHeight || '',
|
|
47
48
|
};
|
|
48
49
|
|
|
49
50
|
this._initialize();
|
|
@@ -56,50 +57,51 @@ class Dropdown {
|
|
|
56
57
|
// Generate unique ID if not already set
|
|
57
58
|
const id = this.element.id || `dropdown-${Math.random().toString(36).substring(2, 9)}`;
|
|
58
59
|
this.element.id = id;
|
|
59
|
-
|
|
60
|
+
|
|
60
61
|
// Add proper CSS class based on trigger type
|
|
61
62
|
if (this.options.trigger === 'click') {
|
|
62
63
|
this.element.classList.add('c-dropdown--onclick');
|
|
63
64
|
} else {
|
|
64
65
|
this.element.classList.remove('c-dropdown--onclick');
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
+
|
|
67
68
|
// Find trigger element
|
|
68
|
-
this.trigger =
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
this.trigger =
|
|
70
|
+
this.element.querySelector('.c-dropdown__trigger') ||
|
|
71
|
+
this.element.querySelector('.c-dropdown__toggle');
|
|
72
|
+
|
|
71
73
|
// Find or create menu structure
|
|
72
74
|
this._setupMenuStructure(id);
|
|
73
|
-
|
|
75
|
+
|
|
74
76
|
// Setup ARIA attributes
|
|
75
77
|
this._setupAriaAttributes(id);
|
|
76
|
-
|
|
78
|
+
|
|
77
79
|
// Apply styles to menu
|
|
78
80
|
this._applyStyles();
|
|
79
|
-
|
|
81
|
+
|
|
80
82
|
// Bind events
|
|
81
83
|
this._bindEvents();
|
|
82
84
|
}
|
|
83
|
-
|
|
85
|
+
|
|
84
86
|
/**
|
|
85
87
|
* Set up menu structure
|
|
86
88
|
*/
|
|
87
89
|
private _setupMenuStructure(id: string): void {
|
|
88
90
|
this.menuWrapper = this.element.querySelector('.c-dropdown__menu-wrapper');
|
|
89
|
-
|
|
91
|
+
|
|
90
92
|
if (!this.menuWrapper) {
|
|
91
|
-
// Create menu wrapper
|
|
93
|
+
// Create menu wrapper
|
|
92
94
|
this.menuWrapper = document.createElement('div');
|
|
93
95
|
this.menuWrapper.className = 'c-dropdown__menu-wrapper';
|
|
94
96
|
this.menuWrapper.classList.add(`c-dropdown__menu-wrapper--${this.options.placement}`);
|
|
95
|
-
|
|
97
|
+
|
|
96
98
|
// Create inner wrapper
|
|
97
99
|
this.menuInner = document.createElement('div');
|
|
98
100
|
this.menuInner.className = 'c-dropdown__menu-inner';
|
|
99
|
-
|
|
101
|
+
|
|
100
102
|
// Handle existing menu or create new one
|
|
101
103
|
const existingMenu = this.element.querySelector('.c-dropdown__menu');
|
|
102
|
-
|
|
104
|
+
|
|
103
105
|
if (existingMenu) {
|
|
104
106
|
this.menu = existingMenu as HTMLElement;
|
|
105
107
|
this.menuInner.appendChild(existingMenu);
|
|
@@ -108,18 +110,18 @@ class Dropdown {
|
|
|
108
110
|
this.menu.className = 'c-dropdown__menu';
|
|
109
111
|
this.menuInner.appendChild(this.menu);
|
|
110
112
|
}
|
|
111
|
-
|
|
113
|
+
|
|
112
114
|
this.menuWrapper.appendChild(this.menuInner);
|
|
113
115
|
this.element.appendChild(this.menuWrapper);
|
|
114
116
|
} else {
|
|
115
117
|
// Find existing menu elements
|
|
116
118
|
this.menuInner = this.menuWrapper.querySelector('.c-dropdown__menu-inner');
|
|
117
119
|
this.menu = this.menuWrapper.querySelector('.c-dropdown__menu');
|
|
118
|
-
|
|
120
|
+
|
|
119
121
|
if (!this.menuInner) {
|
|
120
122
|
this.menuInner = document.createElement('div');
|
|
121
123
|
this.menuInner.className = 'c-dropdown__menu-inner';
|
|
122
|
-
|
|
124
|
+
|
|
123
125
|
if (this.menu) {
|
|
124
126
|
this.menuInner.appendChild(this.menu);
|
|
125
127
|
} else {
|
|
@@ -127,7 +129,7 @@ class Dropdown {
|
|
|
127
129
|
this.menu.className = 'c-dropdown__menu';
|
|
128
130
|
this.menuInner.appendChild(this.menu);
|
|
129
131
|
}
|
|
130
|
-
|
|
132
|
+
|
|
131
133
|
this.menuWrapper.appendChild(this.menuInner);
|
|
132
134
|
} else if (!this.menu) {
|
|
133
135
|
this.menu = document.createElement('ul');
|
|
@@ -135,7 +137,7 @@ class Dropdown {
|
|
|
135
137
|
this.menuInner.appendChild(this.menu);
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
|
-
|
|
140
|
+
|
|
139
141
|
// Add proper role to menu items
|
|
140
142
|
if (this.menu) {
|
|
141
143
|
const menuItems = this.menu.querySelectorAll('button, a');
|
|
@@ -143,11 +145,11 @@ class Dropdown {
|
|
|
143
145
|
if (!item.getAttribute('role')) {
|
|
144
146
|
item.setAttribute('role', 'menuitem');
|
|
145
147
|
}
|
|
146
|
-
|
|
148
|
+
|
|
147
149
|
if (!item.getAttribute('tabindex')) {
|
|
148
150
|
item.setAttribute('tabindex', '0');
|
|
149
151
|
}
|
|
150
|
-
|
|
152
|
+
|
|
151
153
|
// Add proper class if missing
|
|
152
154
|
if (!item.classList.contains('c-dropdown__menu-item')) {
|
|
153
155
|
item.classList.add('c-dropdown__menu-item');
|
|
@@ -155,9 +157,9 @@ class Dropdown {
|
|
|
155
157
|
});
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
|
-
|
|
160
|
+
|
|
159
161
|
/**
|
|
160
|
-
* Setup ARIA attributes
|
|
162
|
+
* Setup ARIA attributes
|
|
161
163
|
*/
|
|
162
164
|
private _setupAriaAttributes(id: string): void {
|
|
163
165
|
if (this.trigger) {
|
|
@@ -166,7 +168,7 @@ class Dropdown {
|
|
|
166
168
|
this.trigger.setAttribute('aria-controls', id);
|
|
167
169
|
this.trigger.setAttribute('tabindex', '0');
|
|
168
170
|
}
|
|
169
|
-
|
|
171
|
+
|
|
170
172
|
if (this.menuWrapper) {
|
|
171
173
|
this.menuWrapper.setAttribute('role', 'menu');
|
|
172
174
|
this.menuWrapper.setAttribute('aria-orientation', 'vertical');
|
|
@@ -174,61 +176,59 @@ class Dropdown {
|
|
|
174
176
|
this.menuWrapper.id = id;
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
|
-
|
|
179
|
+
|
|
178
180
|
/**
|
|
179
181
|
* Apply styles to menu
|
|
180
182
|
*/
|
|
181
183
|
private _applyStyles(): void {
|
|
182
184
|
if (!this.menuInner) return;
|
|
183
|
-
|
|
185
|
+
|
|
184
186
|
// Apply minWidth
|
|
185
187
|
if (this.options.minWidth) {
|
|
186
188
|
const minWidthStr = String(this.options.minWidth);
|
|
187
|
-
this.menuInner.style.minWidth = minWidthStr.includes('px')
|
|
188
|
-
? minWidthStr
|
|
189
|
-
: `${minWidthStr}px`;
|
|
189
|
+
this.menuInner.style.minWidth = minWidthStr.includes('px') ? minWidthStr : `${minWidthStr}px`;
|
|
190
190
|
}
|
|
191
|
-
|
|
191
|
+
|
|
192
192
|
// Apply maxHeight
|
|
193
193
|
if (this.options.maxHeight) {
|
|
194
194
|
this.menuInner.style.maxHeight = this.options.maxHeight.includes('px')
|
|
195
195
|
? this.options.maxHeight
|
|
196
196
|
: `${this.options.maxHeight}px`;
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
this.menuInner.style.overflowY = 'auto';
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
-
|
|
201
|
+
|
|
202
202
|
/**
|
|
203
203
|
* Bind event listeners
|
|
204
204
|
*/
|
|
205
205
|
private _bindEvents(): void {
|
|
206
206
|
if (!this.trigger) return;
|
|
207
|
-
|
|
207
|
+
|
|
208
208
|
// Click or hover events based on trigger type
|
|
209
209
|
if (this.options.trigger === 'click') {
|
|
210
210
|
this.trigger.addEventListener('click', this._handleTriggerClick);
|
|
211
|
-
|
|
211
|
+
|
|
212
212
|
if (this.options.closeOnClickOutside) {
|
|
213
213
|
document.addEventListener('click', this._handleDocumentClick);
|
|
214
214
|
}
|
|
215
215
|
} else if (this.options.trigger === 'hover') {
|
|
216
216
|
this.trigger.addEventListener('mouseenter', this._handleTriggerMouseEnter);
|
|
217
217
|
this.trigger.addEventListener('mouseleave', this._handleTriggerMouseLeave);
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
if (this.menuWrapper) {
|
|
220
220
|
this.menuWrapper.addEventListener('mouseenter', this._handleMenuMouseEnter);
|
|
221
221
|
this.menuWrapper.addEventListener('mouseleave', this._handleMenuMouseLeave);
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
// Keyboard event handlers
|
|
226
226
|
this.trigger.addEventListener('keydown', this._handleTriggerKeyDown);
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
if (this.options.closeOnEscape) {
|
|
229
229
|
document.addEventListener('keydown', this._handleEscapeKey);
|
|
230
230
|
}
|
|
231
|
-
|
|
231
|
+
|
|
232
232
|
if (this.menuWrapper) {
|
|
233
233
|
this.menuWrapper.addEventListener('keydown', this._handleMenuKeyDown);
|
|
234
234
|
this.menuWrapper.addEventListener('animationend', this._handleAnimationEnd);
|
|
@@ -241,12 +241,12 @@ class Dropdown {
|
|
|
241
241
|
private _handleAnimationEnd = (event: AnimationEvent): void => {
|
|
242
242
|
if (event.target === this.menuWrapper) {
|
|
243
243
|
this.animating = false;
|
|
244
|
-
|
|
244
|
+
|
|
245
245
|
if (!this.isOpen && this.menuWrapper) {
|
|
246
246
|
this.menuWrapper.setAttribute('aria-hidden', 'true');
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
|
-
}
|
|
249
|
+
};
|
|
250
250
|
|
|
251
251
|
/**
|
|
252
252
|
* Handle click on trigger
|
|
@@ -254,10 +254,10 @@ class Dropdown {
|
|
|
254
254
|
private _handleTriggerClick = (event: Event): void => {
|
|
255
255
|
event.preventDefault();
|
|
256
256
|
event.stopPropagation();
|
|
257
|
-
|
|
257
|
+
|
|
258
258
|
this.toggle();
|
|
259
|
-
}
|
|
260
|
-
|
|
259
|
+
};
|
|
260
|
+
|
|
261
261
|
/**
|
|
262
262
|
* Handle keydown on trigger
|
|
263
263
|
*/
|
|
@@ -269,20 +269,20 @@ class Dropdown {
|
|
|
269
269
|
event.preventDefault();
|
|
270
270
|
this.close();
|
|
271
271
|
}
|
|
272
|
-
}
|
|
272
|
+
};
|
|
273
273
|
|
|
274
274
|
/**
|
|
275
275
|
* Handle document click
|
|
276
276
|
*/
|
|
277
277
|
private _handleDocumentClick = (event: MouseEvent): void => {
|
|
278
278
|
if (!this.isOpen) return;
|
|
279
|
-
|
|
279
|
+
|
|
280
280
|
const target = event.target as Node;
|
|
281
|
-
|
|
281
|
+
|
|
282
282
|
if (this.element && !this.element.contains(target)) {
|
|
283
283
|
this.close();
|
|
284
284
|
}
|
|
285
|
-
}
|
|
285
|
+
};
|
|
286
286
|
|
|
287
287
|
/**
|
|
288
288
|
* Handle mouseenter on trigger
|
|
@@ -292,24 +292,24 @@ class Dropdown {
|
|
|
292
292
|
window.clearTimeout(this.timeoutRef.current);
|
|
293
293
|
this.timeoutRef.current = null;
|
|
294
294
|
}
|
|
295
|
-
|
|
295
|
+
|
|
296
296
|
this.open();
|
|
297
|
-
}
|
|
297
|
+
};
|
|
298
298
|
|
|
299
299
|
/**
|
|
300
300
|
* Handle mouseleave on trigger
|
|
301
301
|
*/
|
|
302
302
|
private _handleTriggerMouseLeave = (): void => {
|
|
303
303
|
if (!this.menuWrapper) return;
|
|
304
|
-
|
|
304
|
+
|
|
305
305
|
this.timeoutRef.current = window.setTimeout(() => {
|
|
306
306
|
if (!this.menuWrapper?.matches(':hover')) {
|
|
307
307
|
this.close();
|
|
308
308
|
}
|
|
309
309
|
this.timeoutRef.current = null;
|
|
310
310
|
}, 150);
|
|
311
|
-
}
|
|
312
|
-
|
|
311
|
+
};
|
|
312
|
+
|
|
313
313
|
/**
|
|
314
314
|
* Handle mouseenter on menu
|
|
315
315
|
*/
|
|
@@ -318,8 +318,8 @@ class Dropdown {
|
|
|
318
318
|
window.clearTimeout(this.timeoutRef.current);
|
|
319
319
|
this.timeoutRef.current = null;
|
|
320
320
|
}
|
|
321
|
-
}
|
|
322
|
-
|
|
321
|
+
};
|
|
322
|
+
|
|
323
323
|
/**
|
|
324
324
|
* Handle mouseleave on menu
|
|
325
325
|
*/
|
|
@@ -327,7 +327,7 @@ class Dropdown {
|
|
|
327
327
|
if (this.options.trigger === 'hover') {
|
|
328
328
|
this.close();
|
|
329
329
|
}
|
|
330
|
-
}
|
|
330
|
+
};
|
|
331
331
|
|
|
332
332
|
/**
|
|
333
333
|
* Handle escape key
|
|
@@ -338,22 +338,22 @@ class Dropdown {
|
|
|
338
338
|
this.close();
|
|
339
339
|
this.trigger?.focus();
|
|
340
340
|
}
|
|
341
|
-
}
|
|
342
|
-
|
|
341
|
+
};
|
|
342
|
+
|
|
343
343
|
/**
|
|
344
344
|
* Handle keyboard navigation
|
|
345
345
|
*/
|
|
346
346
|
private _handleMenuKeyDown = (event: KeyboardEvent): void => {
|
|
347
347
|
if (!this.menuWrapper || !this.isOpen) return;
|
|
348
|
-
|
|
348
|
+
|
|
349
349
|
const focusableItems = Array.from(
|
|
350
350
|
this.menuWrapper.querySelectorAll<HTMLElement>('[role="menuitem"]:not([disabled])')
|
|
351
351
|
);
|
|
352
|
-
|
|
352
|
+
|
|
353
353
|
if (!focusableItems.length) return;
|
|
354
|
-
|
|
354
|
+
|
|
355
355
|
const currentIndex = focusableItems.findIndex(item => item === document.activeElement);
|
|
356
|
-
|
|
356
|
+
|
|
357
357
|
switch (event.key) {
|
|
358
358
|
case 'ArrowDown':
|
|
359
359
|
event.preventDefault();
|
|
@@ -363,7 +363,7 @@ class Dropdown {
|
|
|
363
363
|
focusableItems[0].focus();
|
|
364
364
|
}
|
|
365
365
|
break;
|
|
366
|
-
|
|
366
|
+
|
|
367
367
|
case 'ArrowUp':
|
|
368
368
|
event.preventDefault();
|
|
369
369
|
if (currentIndex > 0) {
|
|
@@ -372,27 +372,27 @@ class Dropdown {
|
|
|
372
372
|
focusableItems[focusableItems.length - 1].focus();
|
|
373
373
|
}
|
|
374
374
|
break;
|
|
375
|
-
|
|
375
|
+
|
|
376
376
|
case 'Home':
|
|
377
377
|
event.preventDefault();
|
|
378
378
|
focusableItems[0].focus();
|
|
379
379
|
break;
|
|
380
|
-
|
|
380
|
+
|
|
381
381
|
case 'End':
|
|
382
382
|
event.preventDefault();
|
|
383
383
|
focusableItems[focusableItems.length - 1].focus();
|
|
384
384
|
break;
|
|
385
385
|
}
|
|
386
|
-
}
|
|
386
|
+
};
|
|
387
387
|
|
|
388
388
|
/**
|
|
389
389
|
* Focus the first menu item
|
|
390
390
|
*/
|
|
391
391
|
private _focusFirstMenuItem(): void {
|
|
392
392
|
if (!this.menuWrapper) return;
|
|
393
|
-
|
|
393
|
+
|
|
394
394
|
const firstItem = this.menuWrapper.querySelector<HTMLElement>('[role="menuitem"]');
|
|
395
|
-
|
|
395
|
+
|
|
396
396
|
if (firstItem) {
|
|
397
397
|
requestAnimationFrame(() => {
|
|
398
398
|
firstItem.focus();
|
|
@@ -405,29 +405,31 @@ class Dropdown {
|
|
|
405
405
|
*/
|
|
406
406
|
public open(): void {
|
|
407
407
|
if (this.isOpen) return;
|
|
408
|
-
|
|
408
|
+
|
|
409
409
|
this.isOpen = true;
|
|
410
410
|
this.animating = true;
|
|
411
|
-
|
|
411
|
+
|
|
412
412
|
if (this.trigger) {
|
|
413
413
|
this.trigger.setAttribute('aria-expanded', 'true');
|
|
414
414
|
}
|
|
415
|
-
|
|
415
|
+
|
|
416
416
|
if (this.menuWrapper) {
|
|
417
417
|
this.menuWrapper.setAttribute('aria-hidden', 'false');
|
|
418
418
|
this.menuWrapper.classList.add('is-open');
|
|
419
|
-
|
|
419
|
+
|
|
420
420
|
if (this.animating) {
|
|
421
421
|
this.menuWrapper.classList.add('is-animating');
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
|
-
|
|
424
|
+
|
|
425
425
|
this._focusFirstMenuItem();
|
|
426
|
-
|
|
427
|
-
this.element.dispatchEvent(
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
426
|
+
|
|
427
|
+
this.element.dispatchEvent(
|
|
428
|
+
new CustomEvent('dropdown:open', {
|
|
429
|
+
bubbles: true,
|
|
430
|
+
detail: { dropdown: this },
|
|
431
|
+
})
|
|
432
|
+
);
|
|
431
433
|
}
|
|
432
434
|
|
|
433
435
|
/**
|
|
@@ -435,26 +437,28 @@ class Dropdown {
|
|
|
435
437
|
*/
|
|
436
438
|
public close(): void {
|
|
437
439
|
if (!this.isOpen) return;
|
|
438
|
-
|
|
440
|
+
|
|
439
441
|
this.isOpen = false;
|
|
440
442
|
this.animating = true;
|
|
441
|
-
|
|
443
|
+
|
|
442
444
|
if (this.trigger) {
|
|
443
445
|
this.trigger.setAttribute('aria-expanded', 'false');
|
|
444
446
|
}
|
|
445
|
-
|
|
447
|
+
|
|
446
448
|
if (this.menuWrapper) {
|
|
447
449
|
this.menuWrapper.classList.remove('is-open');
|
|
448
|
-
|
|
450
|
+
|
|
449
451
|
if (this.animating) {
|
|
450
452
|
this.menuWrapper.classList.add('is-animating');
|
|
451
453
|
}
|
|
452
454
|
}
|
|
453
|
-
|
|
454
|
-
this.element.dispatchEvent(
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
455
|
+
|
|
456
|
+
this.element.dispatchEvent(
|
|
457
|
+
new CustomEvent('dropdown:close', {
|
|
458
|
+
bubbles: true,
|
|
459
|
+
detail: { dropdown: this },
|
|
460
|
+
})
|
|
461
|
+
);
|
|
458
462
|
}
|
|
459
463
|
|
|
460
464
|
/**
|
|
@@ -470,7 +474,7 @@ class Dropdown {
|
|
|
470
474
|
public update(options: Partial<DropdownOptions>): void {
|
|
471
475
|
// Update options
|
|
472
476
|
Object.assign(this.options, options);
|
|
473
|
-
|
|
477
|
+
|
|
474
478
|
// Update trigger type class if needed
|
|
475
479
|
if (options.trigger !== undefined) {
|
|
476
480
|
if (options.trigger === 'click') {
|
|
@@ -479,18 +483,18 @@ class Dropdown {
|
|
|
479
483
|
this.element.classList.remove('c-dropdown--onclick');
|
|
480
484
|
}
|
|
481
485
|
}
|
|
482
|
-
|
|
486
|
+
|
|
483
487
|
// Update placement class if needed
|
|
484
488
|
if (options.placement && this.menuWrapper) {
|
|
485
489
|
// Remove existing placement classes
|
|
486
490
|
Array.from(this.menuWrapper.classList)
|
|
487
491
|
.filter(cls => cls.startsWith('c-dropdown__menu-wrapper--'))
|
|
488
492
|
.forEach(cls => this.menuWrapper?.classList.remove(cls));
|
|
489
|
-
|
|
493
|
+
|
|
490
494
|
// Add new placement class
|
|
491
495
|
this.menuWrapper.classList.add(`c-dropdown__menu-wrapper--${options.placement}`);
|
|
492
496
|
}
|
|
493
|
-
|
|
497
|
+
|
|
494
498
|
// Apply updated styles
|
|
495
499
|
this._applyStyles();
|
|
496
500
|
}
|
|
@@ -506,28 +510,28 @@ class Dropdown {
|
|
|
506
510
|
this.trigger.removeEventListener('mouseleave', this._handleTriggerMouseLeave);
|
|
507
511
|
this.trigger.removeEventListener('keydown', this._handleTriggerKeyDown);
|
|
508
512
|
}
|
|
509
|
-
|
|
513
|
+
|
|
510
514
|
document.removeEventListener('click', this._handleDocumentClick);
|
|
511
515
|
document.removeEventListener('keydown', this._handleEscapeKey);
|
|
512
|
-
|
|
516
|
+
|
|
513
517
|
if (this.menuWrapper) {
|
|
514
518
|
this.menuWrapper.removeEventListener('mouseenter', this._handleMenuMouseEnter);
|
|
515
519
|
this.menuWrapper.removeEventListener('mouseleave', this._handleMenuMouseLeave);
|
|
516
520
|
this.menuWrapper.removeEventListener('keydown', this._handleMenuKeyDown);
|
|
517
521
|
this.menuWrapper.removeEventListener('animationend', this._handleAnimationEnd);
|
|
518
522
|
}
|
|
519
|
-
|
|
523
|
+
|
|
520
524
|
// Close if open
|
|
521
525
|
if (this.isOpen) {
|
|
522
526
|
this.close();
|
|
523
527
|
}
|
|
524
|
-
|
|
528
|
+
|
|
525
529
|
// Clear timeouts
|
|
526
530
|
if (this.timeoutRef.current !== null) {
|
|
527
531
|
window.clearTimeout(this.timeoutRef.current);
|
|
528
532
|
this.timeoutRef.current = null;
|
|
529
533
|
}
|
|
530
|
-
|
|
534
|
+
|
|
531
535
|
// Remove reference
|
|
532
536
|
// @ts-ignore: Custom property
|
|
533
537
|
this.element._dropdown = null;
|
|
@@ -539,7 +543,7 @@ class Dropdown {
|
|
|
539
543
|
*/
|
|
540
544
|
const initializeDropdowns = (): Dropdown[] => {
|
|
541
545
|
const dropdownElements = Array.from(document.querySelectorAll(DROPDOWN.SELECTORS.DROPDOWN));
|
|
542
|
-
|
|
546
|
+
|
|
543
547
|
return dropdownElements.map(element => {
|
|
544
548
|
// Skip already initialized dropdowns
|
|
545
549
|
// @ts-ignore: Custom property
|
|
@@ -547,25 +551,25 @@ const initializeDropdowns = (): Dropdown[] => {
|
|
|
547
551
|
// @ts-ignore: Custom property
|
|
548
552
|
return element._dropdown;
|
|
549
553
|
}
|
|
550
|
-
|
|
554
|
+
|
|
551
555
|
const options: DropdownOptions = {
|
|
552
556
|
placement: (element as HTMLElement).dataset.dropdownPlacement as DropdownPosition,
|
|
553
557
|
trigger: (element as HTMLElement).dataset.dropdownTrigger as DropdownTrigger,
|
|
554
|
-
offset: (element as HTMLElement).dataset.dropdownOffset
|
|
555
|
-
Number((element as HTMLElement).dataset.dropdownOffset)
|
|
556
|
-
undefined,
|
|
558
|
+
offset: (element as HTMLElement).dataset.dropdownOffset
|
|
559
|
+
? Number((element as HTMLElement).dataset.dropdownOffset)
|
|
560
|
+
: undefined,
|
|
557
561
|
closeOnClickOutside: (element as HTMLElement).dataset.dropdownCloseOnClickOutside !== 'false',
|
|
558
562
|
closeOnEscape: (element as HTMLElement).dataset.dropdownCloseOnEscape !== 'false',
|
|
559
563
|
minWidth: (element as HTMLElement).dataset.dropdownMinWidth || undefined,
|
|
560
|
-
maxHeight: (element as HTMLElement).dataset.dropdownMaxHeight || undefined
|
|
564
|
+
maxHeight: (element as HTMLElement).dataset.dropdownMaxHeight || undefined,
|
|
561
565
|
};
|
|
562
|
-
|
|
566
|
+
|
|
563
567
|
const dropdown = new Dropdown(element as HTMLElement, options);
|
|
564
|
-
|
|
568
|
+
|
|
565
569
|
// Store instance on element
|
|
566
570
|
// @ts-ignore: Custom property
|
|
567
571
|
(element as HTMLElement)._dropdown = dropdown;
|
|
568
|
-
|
|
572
|
+
|
|
569
573
|
return dropdown;
|
|
570
574
|
});
|
|
571
575
|
};
|
|
@@ -574,24 +578,25 @@ const initializeDropdowns = (): Dropdown[] => {
|
|
|
574
578
|
* Create a dropdown instance for a specific element
|
|
575
579
|
*/
|
|
576
580
|
const createDropdown = (element: HTMLElement | string, options: DropdownOptions = {}): Dropdown => {
|
|
577
|
-
const el =
|
|
578
|
-
|
|
581
|
+
const el =
|
|
582
|
+
typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
|
|
583
|
+
|
|
579
584
|
if (!el) {
|
|
580
585
|
throw new Error(`Dropdown target not found: ${element}`);
|
|
581
586
|
}
|
|
582
|
-
|
|
587
|
+
|
|
583
588
|
// @ts-ignore: Custom property
|
|
584
589
|
if (el._dropdown instanceof Dropdown) {
|
|
585
590
|
// @ts-ignore: Custom property
|
|
586
591
|
return el._dropdown;
|
|
587
592
|
}
|
|
588
|
-
|
|
593
|
+
|
|
589
594
|
const dropdown = new Dropdown(el, options);
|
|
590
|
-
|
|
595
|
+
|
|
591
596
|
// Store instance on element
|
|
592
597
|
// @ts-ignore: Custom property
|
|
593
598
|
el._dropdown = dropdown;
|
|
594
|
-
|
|
599
|
+
|
|
595
600
|
return dropdown;
|
|
596
601
|
};
|
|
597
602
|
|
|
@@ -604,4 +609,4 @@ if (typeof document !== 'undefined') {
|
|
|
604
609
|
} else {
|
|
605
610
|
document.addEventListener('DOMContentLoaded', initializeDropdowns);
|
|
606
611
|
}
|
|
607
|
-
}
|
|
612
|
+
}
|