@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
|
@@ -19,7 +19,7 @@ export default {
|
|
|
19
19
|
},
|
|
20
20
|
} as Meta<typeof Toggle>;
|
|
21
21
|
|
|
22
|
-
const Template: StoryFn<typeof Toggle> =
|
|
22
|
+
const Template: StoryFn<typeof Toggle> = args => (
|
|
23
23
|
<div style={{ display: 'flex', justifyContent: 'center', padding: '30px' }}>
|
|
24
24
|
<Toggle {...args} />
|
|
25
25
|
</div>
|
|
@@ -47,4 +47,4 @@ export const DisabledOn = Template.bind({});
|
|
|
47
47
|
DisabledOn.args = {
|
|
48
48
|
initialOn: true,
|
|
49
49
|
disabled: true,
|
|
50
|
-
};
|
|
50
|
+
};
|
|
@@ -6,22 +6,22 @@ export interface ToggleProps {
|
|
|
6
6
|
* Whether the toggle is initially on
|
|
7
7
|
*/
|
|
8
8
|
initialOn?: boolean;
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
/**
|
|
11
11
|
* Callback when the toggle is turned on
|
|
12
12
|
*/
|
|
13
13
|
onToggleOn?: () => void;
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Callback when the toggle is turned off
|
|
17
17
|
*/
|
|
18
18
|
onToggleOff?: () => void;
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Whether the toggle is disabled
|
|
22
22
|
*/
|
|
23
23
|
disabled?: boolean;
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
/**
|
|
26
26
|
* Additional CSS class for the toggle
|
|
27
27
|
*/
|
|
@@ -41,7 +41,7 @@ export const Toggle: React.FC<ToggleProps> = ({
|
|
|
41
41
|
const [isOn, setIsOn] = useState(initialOn);
|
|
42
42
|
const toggleRef = useRef<HTMLDivElement>(null);
|
|
43
43
|
const toggleInstance = useRef<any>(null);
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
useEffect(() => {
|
|
46
46
|
// Only run on client-side
|
|
47
47
|
if (typeof window === 'undefined' || !toggleRef.current) return undefined;
|
|
@@ -52,52 +52,52 @@ export const Toggle: React.FC<ToggleProps> = ({
|
|
|
52
52
|
toggleInstance.current = new ToggleClass(toggleRef.current);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
// Add event listeners for custom events
|
|
57
57
|
const handleToggleOn = () => {
|
|
58
58
|
setIsOn(true);
|
|
59
59
|
if (onToggleOn) onToggleOn();
|
|
60
60
|
};
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
const handleToggleOff = () => {
|
|
63
63
|
setIsOn(false);
|
|
64
64
|
if (onToggleOff) onToggleOff();
|
|
65
65
|
};
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
const element = toggleRef.current;
|
|
68
68
|
element?.addEventListener('toggle:on', handleToggleOn);
|
|
69
69
|
element?.addEventListener('toggle:off', handleToggleOff);
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
// Set initial state if needed
|
|
72
72
|
if (initialOn && toggleInstance.current) {
|
|
73
73
|
toggleInstance.current.turnOn();
|
|
74
74
|
}
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
// Cleanup on unmount
|
|
77
77
|
return () => {
|
|
78
78
|
element?.removeEventListener('toggle:on', handleToggleOn);
|
|
79
79
|
element?.removeEventListener('toggle:off', handleToggleOff);
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
if (toggleInstance.current) {
|
|
82
82
|
toggleInstance.current.destroy();
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
85
|
}, [initialOn, onToggleOn, onToggleOff]);
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
// Update the toggle when the isOn prop changes
|
|
88
88
|
useEffect(() => {
|
|
89
89
|
if (!toggleInstance.current) return;
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
if (isOn) {
|
|
92
92
|
toggleInstance.current.turnOn();
|
|
93
93
|
} else {
|
|
94
94
|
toggleInstance.current.turnOff();
|
|
95
95
|
}
|
|
96
96
|
}, [isOn]);
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
return (
|
|
99
|
-
<div
|
|
100
|
-
className={`c-toggle ${isOn ? TOGGLE.CLASSES.IS_ON : ''} ${disabled ? 'is-disabled' : ''} ${className}`}
|
|
99
|
+
<div
|
|
100
|
+
className={`c-toggle ${isOn ? TOGGLE.CLASSES.IS_ON : ''} ${disabled ? 'is-disabled' : ''} ${className}`}
|
|
101
101
|
ref={toggleRef}
|
|
102
102
|
role="switch"
|
|
103
103
|
aria-checked={isOn}
|
|
@@ -107,8 +107,8 @@ export const Toggle: React.FC<ToggleProps> = ({
|
|
|
107
107
|
<div className="c-toggle__switch"></div>
|
|
108
108
|
</div>
|
|
109
109
|
);
|
|
110
|
-
};
|
|
110
|
+
};
|
|
111
111
|
|
|
112
112
|
Toggle.displayName = 'Toggle';
|
|
113
113
|
|
|
114
|
-
export default Toggle;
|
|
114
|
+
export default Toggle;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Toggle } from
|
|
2
|
-
export type { ToggleProps } from
|
|
1
|
+
export { Toggle } from './Toggle';
|
|
2
|
+
export type { ToggleProps } from './Toggle';
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import Toggle from './index';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
applyHoverEffect,
|
|
4
|
+
applyFocusEffect,
|
|
5
|
+
initializeToggle,
|
|
6
|
+
initializeAllToggles,
|
|
7
|
+
} from './toggleInteractions';
|
|
3
8
|
|
|
4
9
|
// Initialize global namespace if not exists
|
|
5
10
|
window.Atomix = window.Atomix || {};
|
|
@@ -11,4 +16,4 @@ window.Atomix.applyToggleFocusEffect = applyFocusEffect;
|
|
|
11
16
|
window.Atomix.initializeToggle = initializeToggle;
|
|
12
17
|
window.Atomix.initializeAllToggles = initializeAllToggles;
|
|
13
18
|
|
|
14
|
-
export default Toggle;
|
|
19
|
+
export default Toggle;
|
|
@@ -61,11 +61,13 @@ class Toggle implements ToggleInstance {
|
|
|
61
61
|
public turnOn(): void {
|
|
62
62
|
this.element.classList.add(TOGGLE.CLASSES.IS_ON);
|
|
63
63
|
this.isOn = true;
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
// Dispatch custom event
|
|
66
|
-
this.element.dispatchEvent(
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
this.element.dispatchEvent(
|
|
67
|
+
new CustomEvent('toggle:on', {
|
|
68
|
+
bubbles: true,
|
|
69
|
+
})
|
|
70
|
+
);
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
/**
|
|
@@ -74,11 +76,13 @@ class Toggle implements ToggleInstance {
|
|
|
74
76
|
public turnOff(): void {
|
|
75
77
|
this.element.classList.remove(TOGGLE.CLASSES.IS_ON);
|
|
76
78
|
this.isOn = false;
|
|
77
|
-
|
|
79
|
+
|
|
78
80
|
// Dispatch custom event
|
|
79
|
-
this.element.dispatchEvent(
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
this.element.dispatchEvent(
|
|
82
|
+
new CustomEvent('toggle:off', {
|
|
83
|
+
bubbles: true,
|
|
84
|
+
})
|
|
85
|
+
);
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
/**
|
|
@@ -99,7 +103,7 @@ export function initializeToggles(): ToggleInstance[] {
|
|
|
99
103
|
|
|
100
104
|
if (!toggleElements.length) return toggleInstances;
|
|
101
105
|
|
|
102
|
-
toggleElements.forEach(
|
|
106
|
+
toggleElements.forEach(element => {
|
|
103
107
|
try {
|
|
104
108
|
const instance = new Toggle(element);
|
|
105
109
|
toggleInstances.push(instance);
|
|
@@ -111,4 +115,4 @@ export function initializeToggles(): ToggleInstance[] {
|
|
|
111
115
|
return toggleInstances;
|
|
112
116
|
}
|
|
113
117
|
|
|
114
|
-
export default Toggle;
|
|
118
|
+
export default Toggle;
|
|
@@ -7,11 +7,11 @@ import { TOGGLE } from '../../../lib/constants/components';
|
|
|
7
7
|
*/
|
|
8
8
|
export function applyHoverEffect(toggle: HTMLElement): void {
|
|
9
9
|
const hoverClass = 'is-hovered';
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
toggle.addEventListener('mouseenter', () => {
|
|
12
12
|
toggle.classList.add(hoverClass);
|
|
13
13
|
});
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
toggle.addEventListener('mouseleave', () => {
|
|
16
16
|
toggle.classList.remove(hoverClass);
|
|
17
17
|
});
|
|
@@ -24,12 +24,12 @@ export function applyHoverEffect(toggle: HTMLElement): void {
|
|
|
24
24
|
export function applyFocusEffect(toggle: HTMLElement): void {
|
|
25
25
|
const focusClass = 'is-focused';
|
|
26
26
|
const input = toggle.querySelector('input');
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
if (input) {
|
|
29
29
|
input.addEventListener('focus', () => {
|
|
30
30
|
toggle.classList.add(focusClass);
|
|
31
31
|
});
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
input.addEventListener('blur', () => {
|
|
34
34
|
toggle.classList.remove(focusClass);
|
|
35
35
|
});
|
|
@@ -41,17 +41,14 @@ export function applyFocusEffect(toggle: HTMLElement): void {
|
|
|
41
41
|
* @param toggle - Toggle element
|
|
42
42
|
* @param onChange - Change callback
|
|
43
43
|
*/
|
|
44
|
-
export function initializeToggle(
|
|
45
|
-
toggle: HTMLElement,
|
|
46
|
-
onChange?: (checked: boolean) => void
|
|
47
|
-
): void {
|
|
44
|
+
export function initializeToggle(toggle: HTMLElement, onChange?: (checked: boolean) => void): void {
|
|
48
45
|
const input = toggle.querySelector('input[type="checkbox"]') as HTMLInputElement;
|
|
49
|
-
|
|
46
|
+
|
|
50
47
|
if (input) {
|
|
51
48
|
input.addEventListener('change', () => {
|
|
52
49
|
if (onChange) onChange(input.checked);
|
|
53
50
|
});
|
|
54
|
-
|
|
51
|
+
|
|
55
52
|
// Apply effects
|
|
56
53
|
applyHoverEffect(toggle);
|
|
57
54
|
applyFocusEffect(toggle);
|
|
@@ -66,8 +63,8 @@ export function initializeToggle(
|
|
|
66
63
|
export function initializeAllToggles(selector = '[data-component="toggle"]'): Toggle[] {
|
|
67
64
|
const toggleInstances: Toggle[] = [];
|
|
68
65
|
const toggleElements = document.querySelectorAll<HTMLElement>(selector);
|
|
69
|
-
|
|
70
|
-
toggleElements.forEach(
|
|
66
|
+
|
|
67
|
+
toggleElements.forEach(element => {
|
|
71
68
|
try {
|
|
72
69
|
const instance = new Toggle(element);
|
|
73
70
|
toggleInstances.push(instance);
|
|
@@ -75,6 +72,6 @@ export function initializeAllToggles(selector = '[data-component="toggle"]'): To
|
|
|
75
72
|
console.error('Error initializing toggle:', error);
|
|
76
73
|
}
|
|
77
74
|
});
|
|
78
|
-
|
|
75
|
+
|
|
79
76
|
return toggleInstances;
|
|
80
|
-
}
|
|
77
|
+
}
|
|
@@ -8,7 +8,16 @@ export default {
|
|
|
8
8
|
argTypes: {
|
|
9
9
|
position: {
|
|
10
10
|
control: { type: 'select' },
|
|
11
|
-
options: [
|
|
11
|
+
options: [
|
|
12
|
+
'top',
|
|
13
|
+
'bottom',
|
|
14
|
+
'left',
|
|
15
|
+
'right',
|
|
16
|
+
'top-left',
|
|
17
|
+
'top-right',
|
|
18
|
+
'bottom-left',
|
|
19
|
+
'bottom-right',
|
|
20
|
+
],
|
|
12
21
|
defaultValue: 'top',
|
|
13
22
|
},
|
|
14
23
|
trigger: {
|
|
@@ -27,7 +36,7 @@ export default {
|
|
|
27
36
|
},
|
|
28
37
|
} as Meta<typeof Tooltip>;
|
|
29
38
|
|
|
30
|
-
const Template: StoryFn<typeof Tooltip> =
|
|
39
|
+
const Template: StoryFn<typeof Tooltip> = args => (
|
|
31
40
|
<div style={{ display: 'flex', justifyContent: 'center', padding: '100px' }}>
|
|
32
41
|
<Tooltip {...args}>
|
|
33
42
|
<button className="c-btn c-btn--primary">Hover me</button>
|
|
@@ -71,9 +80,7 @@ export const WithIcon = Template.bind({});
|
|
|
71
80
|
WithIcon.args = {
|
|
72
81
|
content: <p className="u-mb-0">Tooltips work great with icons</p>,
|
|
73
82
|
position: 'top',
|
|
74
|
-
children:
|
|
75
|
-
<i className="icon-lux-info" style={{ fontSize: '24px', cursor: 'pointer' }}></i>
|
|
76
|
-
),
|
|
83
|
+
children: <i className="icon-lux-info" style={{ fontSize: '24px', cursor: 'pointer' }}></i>,
|
|
77
84
|
};
|
|
78
85
|
|
|
79
86
|
export const CustomDelay = Template.bind({});
|
|
@@ -105,4 +112,4 @@ RichContent.args = {
|
|
|
105
112
|
position: 'bottom',
|
|
106
113
|
trigger: 'click',
|
|
107
114
|
offset: 15,
|
|
108
|
-
};
|
|
115
|
+
};
|
|
@@ -7,32 +7,40 @@ export interface TooltipProps {
|
|
|
7
7
|
* Content to be displayed in the tooltip
|
|
8
8
|
*/
|
|
9
9
|
content: ReactNode;
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
/**
|
|
12
12
|
* The element that will trigger the tooltip
|
|
13
13
|
*/
|
|
14
14
|
children: ReactNode;
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
/**
|
|
17
17
|
* The position of the tooltip relative to the trigger
|
|
18
18
|
*/
|
|
19
|
-
position?:
|
|
20
|
-
|
|
19
|
+
position?:
|
|
20
|
+
| 'top'
|
|
21
|
+
| 'bottom'
|
|
22
|
+
| 'left'
|
|
23
|
+
| 'right'
|
|
24
|
+
| 'top-left'
|
|
25
|
+
| 'top-right'
|
|
26
|
+
| 'bottom-left'
|
|
27
|
+
| 'bottom-right';
|
|
28
|
+
|
|
21
29
|
/**
|
|
22
30
|
* How the tooltip is triggered
|
|
23
31
|
*/
|
|
24
32
|
trigger?: 'hover' | 'click';
|
|
25
|
-
|
|
33
|
+
|
|
26
34
|
/**
|
|
27
35
|
* Additional CSS class for the tooltip
|
|
28
36
|
*/
|
|
29
37
|
className?: string;
|
|
30
|
-
|
|
38
|
+
|
|
31
39
|
/**
|
|
32
40
|
* Delay before showing the tooltip (in milliseconds)
|
|
33
41
|
*/
|
|
34
42
|
delay?: number;
|
|
35
|
-
|
|
43
|
+
|
|
36
44
|
/**
|
|
37
45
|
* Offset from the trigger element (in pixels)
|
|
38
46
|
*/
|
|
@@ -50,7 +58,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|
|
50
58
|
}) => {
|
|
51
59
|
const tooltipRef = useRef<HTMLDivElement>(null);
|
|
52
60
|
const tooltipInstance = useRef<any>(null);
|
|
53
|
-
|
|
61
|
+
|
|
54
62
|
useEffect(() => {
|
|
55
63
|
if (tooltipRef.current) {
|
|
56
64
|
// Initialize tooltip
|
|
@@ -61,7 +69,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|
|
61
69
|
offset,
|
|
62
70
|
});
|
|
63
71
|
}
|
|
64
|
-
|
|
72
|
+
|
|
65
73
|
// Cleanup on unmount
|
|
66
74
|
return () => {
|
|
67
75
|
if (tooltipInstance.current) {
|
|
@@ -69,14 +77,16 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|
|
69
77
|
}
|
|
70
78
|
};
|
|
71
79
|
}, [position, trigger, delay, offset]);
|
|
72
|
-
|
|
80
|
+
|
|
73
81
|
return (
|
|
74
82
|
<div className="u-position-relative u-d-inline-block">
|
|
75
|
-
<div
|
|
83
|
+
<div
|
|
84
|
+
className={`${TOOLTIP.SELECTORS.TRIGGER.substring(1)}${className ? ` ${className}` : ''}`}
|
|
85
|
+
>
|
|
76
86
|
{children}
|
|
77
87
|
</div>
|
|
78
|
-
<div
|
|
79
|
-
className={`c-tooltip ${TOOLTIP.SELECTORS.TOOLTIP.substring(1)}`}
|
|
88
|
+
<div
|
|
89
|
+
className={`c-tooltip ${TOOLTIP.SELECTORS.TOOLTIP.substring(1)}`}
|
|
80
90
|
ref={tooltipRef}
|
|
81
91
|
data-tooltip-position={position}
|
|
82
92
|
data-tooltip-trigger={trigger}
|
|
@@ -88,8 +98,8 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|
|
88
98
|
</div>
|
|
89
99
|
</div>
|
|
90
100
|
);
|
|
91
|
-
};
|
|
101
|
+
};
|
|
92
102
|
|
|
93
103
|
Tooltip.displayName = 'Tooltip';
|
|
94
104
|
|
|
95
|
-
export default Tooltip;
|
|
105
|
+
export default Tooltip;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Tooltip } from
|
|
2
|
-
export type { TooltipProps } from
|
|
3
|
-
export { default } from
|
|
1
|
+
export { Tooltip } from './Tooltip';
|
|
2
|
+
export type { TooltipProps } from './Tooltip';
|
|
3
|
+
export { default } from './Tooltip';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -11,7 +11,7 @@ const DEFAULT_OPTIONS = {
|
|
|
11
11
|
activeClass: TOOLTIP.CLASSES.IS_ACTIVE,
|
|
12
12
|
contentIdAttr: TOOLTIP.ATTRIBUTES.CONTENT_ID,
|
|
13
13
|
positionAttr: TOOLTIP.ATTRIBUTES.POSITION,
|
|
14
|
-
triggerAttr: TOOLTIP.ATTRIBUTES.TRIGGER
|
|
14
|
+
triggerAttr: TOOLTIP.ATTRIBUTES.TRIGGER,
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -64,10 +64,10 @@ export class Tooltip implements TooltipInstance {
|
|
|
64
64
|
*/
|
|
65
65
|
constructor(selector: string | Element, options = {}) {
|
|
66
66
|
this.selector = selector || TOOLTIP.SELECTORS.TOOLTIP;
|
|
67
|
-
this.$element =
|
|
68
|
-
typeof selector === 'string'
|
|
67
|
+
this.$element =
|
|
68
|
+
typeof selector === 'string'
|
|
69
69
|
? document.querySelector<HTMLElement>(selector)
|
|
70
|
-
: selector as HTMLElement;
|
|
70
|
+
: (selector as HTMLElement);
|
|
71
71
|
this.options = { ...DEFAULT_OPTIONS, ...options } as TooltipOptions;
|
|
72
72
|
this.timeout = null;
|
|
73
73
|
this.hideTimeout = null;
|
|
@@ -92,21 +92,21 @@ export class Tooltip implements TooltipInstance {
|
|
|
92
92
|
*/
|
|
93
93
|
private _initializeElements(): void {
|
|
94
94
|
if (!this.$element) return;
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
// Find the parent container that wraps both trigger and tooltip
|
|
97
97
|
const parentContainer = this.$element.parentElement;
|
|
98
98
|
if (!parentContainer) return;
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
// Find the trigger as a sibling or within the same parent container
|
|
101
101
|
this.$trigger = parentContainer.querySelector<HTMLElement>(TOOLTIP.SELECTORS.TRIGGER);
|
|
102
102
|
this.$content = this.$element.querySelector<HTMLElement>(TOOLTIP.SELECTORS.CONTENT);
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
// Check for custom position from data attribute
|
|
105
105
|
const customPosition = this.$element.getAttribute(this.options.positionAttr);
|
|
106
106
|
if (customPosition) {
|
|
107
107
|
this.options.position = customPosition;
|
|
108
108
|
}
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
// Check for custom trigger from data attribute
|
|
111
111
|
const customTrigger = this.$element.getAttribute(this.options.triggerAttr);
|
|
112
112
|
if (customTrigger) {
|
|
@@ -119,19 +119,19 @@ export class Tooltip implements TooltipInstance {
|
|
|
119
119
|
*/
|
|
120
120
|
private _setPosition(): void {
|
|
121
121
|
if (!this.$content || !this.$element) return;
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
// Reset any existing position classes
|
|
124
124
|
this.$element.classList.remove(
|
|
125
|
-
TOOLTIP.CLASSES.TOP,
|
|
126
|
-
TOOLTIP.CLASSES.BOTTOM,
|
|
127
|
-
TOOLTIP.CLASSES.LEFT,
|
|
128
|
-
TOOLTIP.CLASSES.RIGHT,
|
|
129
|
-
TOOLTIP.CLASSES.TOP_LEFT,
|
|
130
|
-
TOOLTIP.CLASSES.TOP_RIGHT,
|
|
131
|
-
TOOLTIP.CLASSES.BOTTOM_LEFT,
|
|
125
|
+
TOOLTIP.CLASSES.TOP,
|
|
126
|
+
TOOLTIP.CLASSES.BOTTOM,
|
|
127
|
+
TOOLTIP.CLASSES.LEFT,
|
|
128
|
+
TOOLTIP.CLASSES.RIGHT,
|
|
129
|
+
TOOLTIP.CLASSES.TOP_LEFT,
|
|
130
|
+
TOOLTIP.CLASSES.TOP_RIGHT,
|
|
131
|
+
TOOLTIP.CLASSES.BOTTOM_LEFT,
|
|
132
132
|
TOOLTIP.CLASSES.BOTTOM_RIGHT
|
|
133
133
|
);
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
// Add the appropriate position class
|
|
136
136
|
switch (this.options.position) {
|
|
137
137
|
case 'top':
|
|
@@ -161,10 +161,10 @@ export class Tooltip implements TooltipInstance {
|
|
|
161
161
|
default:
|
|
162
162
|
this.$element.classList.add(TOOLTIP.CLASSES.TOP);
|
|
163
163
|
}
|
|
164
|
-
|
|
164
|
+
|
|
165
165
|
// Calculate offset based on position
|
|
166
166
|
const offset = this.options.offset;
|
|
167
|
-
|
|
167
|
+
|
|
168
168
|
switch (this.options.position) {
|
|
169
169
|
case 'top':
|
|
170
170
|
case 'top-left':
|
|
@@ -192,14 +192,14 @@ export class Tooltip implements TooltipInstance {
|
|
|
192
192
|
*/
|
|
193
193
|
private _bindEvents(): void {
|
|
194
194
|
if (!this.$trigger) return;
|
|
195
|
-
|
|
195
|
+
|
|
196
196
|
if (this.options.trigger === 'hover') {
|
|
197
197
|
this.$trigger.addEventListener('mouseenter', this._handleTriggerEnter.bind(this));
|
|
198
198
|
this.$trigger.addEventListener('mouseleave', this._handleTriggerLeave.bind(this));
|
|
199
199
|
} else if (this.options.trigger === 'click') {
|
|
200
200
|
this.$trigger.addEventListener('click', this._handleTriggerClick.bind(this));
|
|
201
201
|
}
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
// Handle focus for accessibility
|
|
204
204
|
this.$trigger.addEventListener('focus', this._handleTriggerEnter.bind(this));
|
|
205
205
|
this.$trigger.addEventListener('blur', this._handleTriggerLeave.bind(this));
|
|
@@ -213,9 +213,9 @@ export class Tooltip implements TooltipInstance {
|
|
|
213
213
|
clearTimeout(this.hideTimeout);
|
|
214
214
|
this.hideTimeout = null;
|
|
215
215
|
}
|
|
216
|
-
|
|
216
|
+
|
|
217
217
|
if (this.timeout) return;
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
this.timeout = window.setTimeout(() => {
|
|
220
220
|
this.show();
|
|
221
221
|
this.timeout = null;
|
|
@@ -230,7 +230,7 @@ export class Tooltip implements TooltipInstance {
|
|
|
230
230
|
clearTimeout(this.timeout);
|
|
231
231
|
this.timeout = null;
|
|
232
232
|
}
|
|
233
|
-
|
|
233
|
+
|
|
234
234
|
this.hideTimeout = window.setTimeout(() => {
|
|
235
235
|
this.hide();
|
|
236
236
|
this.hideTimeout = null;
|
|
@@ -298,19 +298,19 @@ export class Tooltip implements TooltipInstance {
|
|
|
298
298
|
*/
|
|
299
299
|
public show(): void {
|
|
300
300
|
if (!this.$element) return;
|
|
301
|
-
|
|
301
|
+
|
|
302
302
|
// Dispatch custom event before showing
|
|
303
303
|
const showEvent = new CustomEvent('tooltip:show', {
|
|
304
304
|
bubbles: true,
|
|
305
305
|
cancelable: true,
|
|
306
|
-
detail: { tooltip: this }
|
|
306
|
+
detail: { tooltip: this },
|
|
307
307
|
});
|
|
308
|
-
|
|
308
|
+
|
|
309
309
|
this.$element.dispatchEvent(showEvent);
|
|
310
|
-
|
|
310
|
+
|
|
311
311
|
// If event was canceled, don't show
|
|
312
312
|
if (showEvent.defaultPrevented) return;
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
this.$element.classList.add(this.options.activeClass);
|
|
315
315
|
this.isActive = true;
|
|
316
316
|
}
|
|
@@ -320,19 +320,19 @@ export class Tooltip implements TooltipInstance {
|
|
|
320
320
|
*/
|
|
321
321
|
public hide(): void {
|
|
322
322
|
if (!this.$element) return;
|
|
323
|
-
|
|
323
|
+
|
|
324
324
|
// Dispatch custom event before hiding
|
|
325
325
|
const hideEvent = new CustomEvent('tooltip:hide', {
|
|
326
326
|
bubbles: true,
|
|
327
327
|
cancelable: true,
|
|
328
|
-
detail: { tooltip: this }
|
|
328
|
+
detail: { tooltip: this },
|
|
329
329
|
});
|
|
330
|
-
|
|
330
|
+
|
|
331
331
|
this.$element.dispatchEvent(hideEvent);
|
|
332
|
-
|
|
332
|
+
|
|
333
333
|
// If event was canceled, don't hide
|
|
334
334
|
if (hideEvent.defaultPrevented) return;
|
|
335
|
-
|
|
335
|
+
|
|
336
336
|
this.$element.classList.remove(this.options.activeClass);
|
|
337
337
|
this.isActive = false;
|
|
338
338
|
}
|
|
@@ -342,7 +342,7 @@ export class Tooltip implements TooltipInstance {
|
|
|
342
342
|
*/
|
|
343
343
|
public destroy(): void {
|
|
344
344
|
if (!this.$trigger) return;
|
|
345
|
-
|
|
345
|
+
|
|
346
346
|
// Remove event listeners
|
|
347
347
|
if (this.options.trigger === 'hover') {
|
|
348
348
|
this.$trigger.removeEventListener('mouseenter', this._handleTriggerEnter.bind(this));
|
|
@@ -350,21 +350,21 @@ export class Tooltip implements TooltipInstance {
|
|
|
350
350
|
} else if (this.options.trigger === 'click') {
|
|
351
351
|
this.$trigger.removeEventListener('click', this._handleTriggerClick.bind(this));
|
|
352
352
|
}
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
this.$trigger.removeEventListener('focus', this._handleTriggerEnter.bind(this));
|
|
355
355
|
this.$trigger.removeEventListener('blur', this._handleTriggerLeave.bind(this));
|
|
356
|
-
|
|
356
|
+
|
|
357
357
|
// Clear timeouts
|
|
358
358
|
if (this.timeout) {
|
|
359
359
|
clearTimeout(this.timeout);
|
|
360
360
|
this.timeout = null;
|
|
361
361
|
}
|
|
362
|
-
|
|
362
|
+
|
|
363
363
|
if (this.hideTimeout) {
|
|
364
364
|
clearTimeout(this.hideTimeout);
|
|
365
365
|
this.hideTimeout = null;
|
|
366
366
|
}
|
|
367
|
-
|
|
367
|
+
|
|
368
368
|
// Hide tooltip
|
|
369
369
|
if (this.$element) {
|
|
370
370
|
this.$element.classList.remove(this.options.activeClass);
|
|
@@ -387,6 +387,9 @@ export class Tooltip implements TooltipInstance {
|
|
|
387
387
|
* @param selector - CSS selector for tooltip elements
|
|
388
388
|
* @param options - Custom options
|
|
389
389
|
*/
|
|
390
|
-
export function initializeTooltips(
|
|
390
|
+
export function initializeTooltips(
|
|
391
|
+
selector = TOOLTIP.SELECTORS.TOOLTIP,
|
|
392
|
+
options = {}
|
|
393
|
+
): TooltipInstance[] {
|
|
391
394
|
return Tooltip.initializeAll(selector, options);
|
|
392
|
-
}
|
|
395
|
+
}
|