@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
|
@@ -1,41 +1,147 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { Navbar } from './Navbar';
|
|
3
|
-
import { Nav } from '
|
|
4
|
-
import { NavItem } from '
|
|
5
|
-
import { NavDropdown } from '
|
|
6
|
-
import { Menu, MenuItem, MenuDivider } from '
|
|
7
|
-
import { MegaMenu, MegaMenuColumn, MegaMenuLink } from '
|
|
8
|
-
import { Icon } from '
|
|
9
|
-
import { AtomixLogo } from '
|
|
3
|
+
import { Nav } from '../Nav/Nav';
|
|
4
|
+
import { NavItem } from '../Nav/NavItem';
|
|
5
|
+
import { NavDropdown } from '../Nav/NavDropdown';
|
|
6
|
+
import { Menu, MenuItem, MenuDivider } from '../Menu/Menu';
|
|
7
|
+
import { MegaMenu, MegaMenuColumn, MegaMenuLink } from '../Menu/MegaMenu';
|
|
8
|
+
import { Icon } from '../../Icon';
|
|
9
|
+
import { AtomixLogo } from '../../AtomixLogo';
|
|
10
10
|
|
|
11
11
|
const meta = {
|
|
12
|
-
title: 'Components/Navbar',
|
|
12
|
+
title: 'Components/Navigation/Navbar',
|
|
13
13
|
component: Navbar,
|
|
14
14
|
parameters: {
|
|
15
15
|
layout: 'fullscreen',
|
|
16
|
+
docs: {
|
|
17
|
+
description: {
|
|
18
|
+
component: `
|
|
19
|
+
The Navbar component provides a responsive navigation header with brand, navigation items, and collapsible mobile menu functionality. It follows the Atomix design system guidelines and includes both React and vanilla JavaScript implementations.
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- **Responsive Design**: Automatically collapses on mobile devices
|
|
24
|
+
- **Multiple Positions**: Static, fixed top, or fixed bottom positioning
|
|
25
|
+
- **Theme Variants**: Support for all theme colors
|
|
26
|
+
- **Accessibility**: Full keyboard navigation and screen reader support
|
|
27
|
+
- **Dropdown & Mega Menus**: Support for both regular dropdowns and full-width mega menus
|
|
28
|
+
- **Vanilla JS Support**: Complete vanilla JavaScript implementation available
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### Basic Navbar
|
|
33
|
+
\`\`\`tsx
|
|
34
|
+
<Navbar brand="My App">
|
|
35
|
+
<Nav>
|
|
36
|
+
<NavItem href="/">Home</NavItem>
|
|
37
|
+
<NavItem href="/about">About</NavItem>
|
|
38
|
+
</Nav>
|
|
39
|
+
</Navbar>
|
|
40
|
+
\`\`\`
|
|
41
|
+
|
|
42
|
+
### With Dropdown
|
|
43
|
+
\`\`\`tsx
|
|
44
|
+
<Navbar brand="My App">
|
|
45
|
+
<Nav>
|
|
46
|
+
<NavDropdown title="Services">
|
|
47
|
+
<Menu>
|
|
48
|
+
<MenuItem href="/web">Web Design</MenuItem>
|
|
49
|
+
<MenuItem href="/mobile">Mobile Apps</MenuItem>
|
|
50
|
+
</Menu>
|
|
51
|
+
</NavDropdown>
|
|
52
|
+
</Nav>
|
|
53
|
+
</Navbar>
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
### Vanilla JavaScript
|
|
57
|
+
\`\`\`html
|
|
58
|
+
<nav class="c-navbar" data-navbar data-collapsible="true">
|
|
59
|
+
<div class="c-navbar__container">
|
|
60
|
+
<a href="/" class="c-navbar__brand">My App</a>
|
|
61
|
+
<button class="c-navbar__toggler" aria-expanded="false">
|
|
62
|
+
<span class="c-navbar__toggler-icon"></span>
|
|
63
|
+
</button>
|
|
64
|
+
<div class="c-navbar__collapse">
|
|
65
|
+
<!-- Navigation content -->
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</nav>
|
|
69
|
+
\`\`\`
|
|
70
|
+
`,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
16
73
|
},
|
|
17
74
|
tags: ['autodocs'],
|
|
18
75
|
argTypes: {
|
|
19
76
|
position: {
|
|
20
77
|
control: { type: 'select' },
|
|
21
78
|
options: ['static', 'fixed', 'fixed-bottom'],
|
|
22
|
-
description: 'Position of the navbar'
|
|
79
|
+
description: 'Position of the navbar',
|
|
80
|
+
table: {
|
|
81
|
+
type: { summary: 'string' },
|
|
82
|
+
defaultValue: { summary: 'static' },
|
|
83
|
+
},
|
|
23
84
|
},
|
|
24
85
|
variant: {
|
|
25
86
|
control: { type: 'select' },
|
|
26
87
|
options: [
|
|
27
|
-
'primary',
|
|
28
|
-
'
|
|
88
|
+
'primary',
|
|
89
|
+
'secondary',
|
|
90
|
+
'tertiary',
|
|
91
|
+
'invert',
|
|
92
|
+
'brand',
|
|
93
|
+
'success',
|
|
94
|
+
'error',
|
|
95
|
+
'warning',
|
|
96
|
+
'info',
|
|
97
|
+
'light',
|
|
98
|
+
'dark',
|
|
29
99
|
],
|
|
30
|
-
description: 'The color variant of the navbar'
|
|
100
|
+
description: 'The color variant of the navbar',
|
|
101
|
+
table: {
|
|
102
|
+
type: { summary: 'ThemeColor' },
|
|
103
|
+
defaultValue: { summary: 'undefined' },
|
|
104
|
+
},
|
|
31
105
|
},
|
|
32
106
|
collapsible: {
|
|
33
107
|
control: 'boolean',
|
|
34
|
-
description: 'Whether the navbar should collapse on small screens'
|
|
108
|
+
description: 'Whether the navbar should collapse on small screens',
|
|
109
|
+
table: {
|
|
110
|
+
type: { summary: 'boolean' },
|
|
111
|
+
defaultValue: { summary: 'true' },
|
|
112
|
+
},
|
|
35
113
|
},
|
|
36
114
|
containerWidth: {
|
|
37
115
|
control: 'text',
|
|
38
|
-
description: 'Custom width for the navbar container'
|
|
116
|
+
description: 'Custom width for the navbar container',
|
|
117
|
+
table: {
|
|
118
|
+
type: { summary: 'string' },
|
|
119
|
+
defaultValue: { summary: 'undefined' },
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
backdrop: {
|
|
123
|
+
control: 'boolean',
|
|
124
|
+
description: 'Whether to show backdrop when expanded on mobile',
|
|
125
|
+
table: {
|
|
126
|
+
type: { summary: 'boolean' },
|
|
127
|
+
defaultValue: { summary: 'false' },
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
closeOnOutsideClick: {
|
|
131
|
+
control: 'boolean',
|
|
132
|
+
description: 'Whether to close navbar when clicking outside',
|
|
133
|
+
table: {
|
|
134
|
+
type: { summary: 'boolean' },
|
|
135
|
+
defaultValue: { summary: 'true' },
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
closeOnEscape: {
|
|
139
|
+
control: 'boolean',
|
|
140
|
+
description: 'Whether to close navbar on escape key press',
|
|
141
|
+
table: {
|
|
142
|
+
type: { summary: 'boolean' },
|
|
143
|
+
defaultValue: { summary: 'true' },
|
|
144
|
+
},
|
|
39
145
|
},
|
|
40
146
|
},
|
|
41
147
|
} satisfies Meta<typeof Navbar>;
|
|
@@ -44,9 +150,7 @@ export default meta;
|
|
|
44
150
|
type Story = StoryObj<typeof Navbar>;
|
|
45
151
|
|
|
46
152
|
// Brand logo component
|
|
47
|
-
const LogoBrand = () =>
|
|
48
|
-
<AtomixLogo height={40} />
|
|
49
|
-
);
|
|
153
|
+
const LogoBrand = () => <AtomixLogo height={40} />;
|
|
50
154
|
|
|
51
155
|
// Default Navbar
|
|
52
156
|
export const Default: Story = {
|
|
@@ -60,12 +164,22 @@ export const Default: Story = {
|
|
|
60
164
|
<NavItem>Contact</NavItem>
|
|
61
165
|
<NavDropdown title="Dropdown">
|
|
62
166
|
<Menu>
|
|
63
|
-
<MenuItem href="#" icon="icon-lux-circle">
|
|
64
|
-
|
|
65
|
-
|
|
167
|
+
<MenuItem href="#" icon="icon-lux-circle">
|
|
168
|
+
Menu Item 1
|
|
169
|
+
</MenuItem>
|
|
170
|
+
<MenuItem href="#" icon="icon-lux-circle">
|
|
171
|
+
Menu Item 2
|
|
172
|
+
</MenuItem>
|
|
173
|
+
<MenuItem href="#" icon="icon-lux-circle">
|
|
174
|
+
Menu Item 3
|
|
175
|
+
</MenuItem>
|
|
66
176
|
<MenuDivider />
|
|
67
|
-
<MenuItem href="#" icon="icon-lux-circle">
|
|
68
|
-
|
|
177
|
+
<MenuItem href="#" icon="icon-lux-circle">
|
|
178
|
+
Menu Item 4
|
|
179
|
+
</MenuItem>
|
|
180
|
+
<MenuItem href="#" icon="icon-lux-circle">
|
|
181
|
+
Menu Item 5
|
|
182
|
+
</MenuItem>
|
|
69
183
|
</Menu>
|
|
70
184
|
</NavDropdown>
|
|
71
185
|
</Nav>
|
|
@@ -96,110 +210,77 @@ export const FixedBottom: Story = {
|
|
|
96
210
|
export const Variants: Story = {
|
|
97
211
|
render: () => (
|
|
98
212
|
<div className="u-d-flex u-flex-column u-gap-3">
|
|
99
|
-
<Navbar
|
|
100
|
-
brand={<LogoBrand />}
|
|
101
|
-
variant="primary"
|
|
102
|
-
>
|
|
213
|
+
<Navbar brand={<LogoBrand />} variant="primary">
|
|
103
214
|
<Nav alignment="end">
|
|
104
215
|
<NavItem>Link 1</NavItem>
|
|
105
216
|
<NavItem>Link 2</NavItem>
|
|
106
217
|
</Nav>
|
|
107
218
|
</Navbar>
|
|
108
|
-
|
|
109
|
-
<Navbar
|
|
110
|
-
brand={<LogoBrand />}
|
|
111
|
-
variant="secondary"
|
|
112
|
-
>
|
|
219
|
+
|
|
220
|
+
<Navbar brand={<LogoBrand />} variant="secondary">
|
|
113
221
|
<Nav alignment="end">
|
|
114
222
|
<NavItem>Link 1</NavItem>
|
|
115
223
|
<NavItem>Link 2</NavItem>
|
|
116
224
|
</Nav>
|
|
117
225
|
</Navbar>
|
|
118
|
-
|
|
119
|
-
<Navbar
|
|
120
|
-
brand={<LogoBrand />}
|
|
121
|
-
variant="tertiary"
|
|
122
|
-
>
|
|
226
|
+
|
|
227
|
+
<Navbar brand={<LogoBrand />} variant="tertiary">
|
|
123
228
|
<Nav alignment="end">
|
|
124
229
|
<NavItem>Link 1</NavItem>
|
|
125
230
|
<NavItem>Link 2</NavItem>
|
|
126
231
|
</Nav>
|
|
127
232
|
</Navbar>
|
|
128
|
-
|
|
129
|
-
<Navbar
|
|
130
|
-
brand={<LogoBrand />}
|
|
131
|
-
variant="invert"
|
|
132
|
-
>
|
|
233
|
+
|
|
234
|
+
<Navbar brand={<LogoBrand />} variant="invert">
|
|
133
235
|
<Nav alignment="end">
|
|
134
236
|
<NavItem>Link 1</NavItem>
|
|
135
237
|
<NavItem>Link 2</NavItem>
|
|
136
238
|
</Nav>
|
|
137
239
|
</Navbar>
|
|
138
|
-
|
|
139
|
-
<Navbar
|
|
140
|
-
brand={<LogoBrand />}
|
|
141
|
-
variant="brand"
|
|
142
|
-
>
|
|
240
|
+
|
|
241
|
+
<Navbar brand={<LogoBrand />} variant="brand">
|
|
143
242
|
<Nav alignment="end">
|
|
144
243
|
<NavItem>Link 1</NavItem>
|
|
145
244
|
<NavItem>Link 2</NavItem>
|
|
146
245
|
</Nav>
|
|
147
246
|
</Navbar>
|
|
148
|
-
|
|
149
|
-
<Navbar
|
|
150
|
-
brand={<LogoBrand />}
|
|
151
|
-
variant="success"
|
|
152
|
-
>
|
|
247
|
+
|
|
248
|
+
<Navbar brand={<LogoBrand />} variant="success">
|
|
153
249
|
<Nav alignment="end">
|
|
154
250
|
<NavItem>Link 1</NavItem>
|
|
155
251
|
<NavItem>Link 2</NavItem>
|
|
156
252
|
</Nav>
|
|
157
253
|
</Navbar>
|
|
158
|
-
|
|
159
|
-
<Navbar
|
|
160
|
-
brand={<LogoBrand />}
|
|
161
|
-
variant="error"
|
|
162
|
-
>
|
|
254
|
+
|
|
255
|
+
<Navbar brand={<LogoBrand />} variant="error">
|
|
163
256
|
<Nav alignment="end">
|
|
164
257
|
<NavItem>Link 1</NavItem>
|
|
165
258
|
<NavItem>Link 2</NavItem>
|
|
166
259
|
</Nav>
|
|
167
260
|
</Navbar>
|
|
168
|
-
|
|
169
|
-
<Navbar
|
|
170
|
-
brand={<LogoBrand />}
|
|
171
|
-
variant="warning"
|
|
172
|
-
>
|
|
261
|
+
|
|
262
|
+
<Navbar brand={<LogoBrand />} variant="warning">
|
|
173
263
|
<Nav alignment="end">
|
|
174
264
|
<NavItem>Link 1</NavItem>
|
|
175
265
|
<NavItem>Link 2</NavItem>
|
|
176
266
|
</Nav>
|
|
177
267
|
</Navbar>
|
|
178
|
-
|
|
179
|
-
<Navbar
|
|
180
|
-
brand={<LogoBrand />}
|
|
181
|
-
variant="info"
|
|
182
|
-
>
|
|
268
|
+
|
|
269
|
+
<Navbar brand={<LogoBrand />} variant="info">
|
|
183
270
|
<Nav alignment="end">
|
|
184
271
|
<NavItem>Link 1</NavItem>
|
|
185
272
|
<NavItem>Link 2</NavItem>
|
|
186
273
|
</Nav>
|
|
187
274
|
</Navbar>
|
|
188
|
-
|
|
189
|
-
<Navbar
|
|
190
|
-
brand={<LogoBrand />}
|
|
191
|
-
variant="light"
|
|
192
|
-
>
|
|
275
|
+
|
|
276
|
+
<Navbar brand={<LogoBrand />} variant="light">
|
|
193
277
|
<Nav alignment="end">
|
|
194
278
|
<NavItem>Link 1</NavItem>
|
|
195
279
|
<NavItem>Link 2</NavItem>
|
|
196
280
|
</Nav>
|
|
197
281
|
</Navbar>
|
|
198
|
-
|
|
199
|
-
<Navbar
|
|
200
|
-
brand={<LogoBrand />}
|
|
201
|
-
variant="dark"
|
|
202
|
-
>
|
|
282
|
+
|
|
283
|
+
<Navbar brand={<LogoBrand />} variant="dark">
|
|
203
284
|
<Nav alignment="end">
|
|
204
285
|
<NavItem>Link 1</NavItem>
|
|
205
286
|
<NavItem>Link 2</NavItem>
|
|
@@ -220,7 +301,7 @@ export const NavAlignments: Story = {
|
|
|
220
301
|
<NavItem>Link 3</NavItem>
|
|
221
302
|
</Nav>
|
|
222
303
|
</Navbar>
|
|
223
|
-
|
|
304
|
+
|
|
224
305
|
<Navbar brand={<LogoBrand />}>
|
|
225
306
|
<Nav alignment="center">
|
|
226
307
|
<NavItem>Link 1</NavItem>
|
|
@@ -228,7 +309,7 @@ export const NavAlignments: Story = {
|
|
|
228
309
|
<NavItem>Link 3</NavItem>
|
|
229
310
|
</Nav>
|
|
230
311
|
</Navbar>
|
|
231
|
-
|
|
312
|
+
|
|
232
313
|
<Navbar brand={<LogoBrand />}>
|
|
233
314
|
<Nav alignment="end">
|
|
234
315
|
<NavItem>Link 1</NavItem>
|
|
@@ -254,13 +335,13 @@ export const WithMegaMenu: Story = {
|
|
|
254
335
|
<MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
|
|
255
336
|
<MegaMenuLink href="#">Sub Menu 3</MegaMenuLink>
|
|
256
337
|
</MegaMenuColumn>
|
|
257
|
-
|
|
338
|
+
|
|
258
339
|
<MegaMenuColumn title="Column 2" icon="icon-lux-circle">
|
|
259
340
|
<MegaMenuLink href="#">Sub Menu 1</MegaMenuLink>
|
|
260
341
|
<MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
|
|
261
342
|
<MegaMenuLink href="#">Sub Menu 3</MegaMenuLink>
|
|
262
343
|
</MegaMenuColumn>
|
|
263
|
-
|
|
344
|
+
|
|
264
345
|
<MegaMenuColumn title="Column 3" icon="icon-lux-circle">
|
|
265
346
|
<MegaMenuLink href="#">Sub Menu 1</MegaMenuLink>
|
|
266
347
|
<MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
|
|
@@ -282,8 +363,12 @@ export const WithStateModifiers: Story = {
|
|
|
282
363
|
<NavItem disabled>Disabled Link</NavItem>
|
|
283
364
|
<NavDropdown title="Dropdown">
|
|
284
365
|
<Menu>
|
|
285
|
-
<MenuItem href="#" active>
|
|
286
|
-
|
|
366
|
+
<MenuItem href="#" active>
|
|
367
|
+
Active Item
|
|
368
|
+
</MenuItem>
|
|
369
|
+
<MenuItem href="#" disabled>
|
|
370
|
+
Disabled Item
|
|
371
|
+
</MenuItem>
|
|
287
372
|
<MenuItem href="#">Regular Item</MenuItem>
|
|
288
373
|
</Menu>
|
|
289
374
|
</NavDropdown>
|
|
@@ -323,23 +408,29 @@ export const WithAvatarDropdown: Story = {
|
|
|
323
408
|
<NavItem>Link 3</NavItem>
|
|
324
409
|
</Nav>
|
|
325
410
|
<Nav alignment="end">
|
|
326
|
-
<NavDropdown
|
|
411
|
+
<NavDropdown
|
|
327
412
|
title={
|
|
328
413
|
<>
|
|
329
|
-
<img
|
|
330
|
-
src="/assets/images/avatar.jpg"
|
|
331
|
-
alt="User"
|
|
332
|
-
className="c-avatar c-avatar--sm c-avatar--circle"
|
|
414
|
+
<img
|
|
415
|
+
src="/assets/images/avatar.jpg"
|
|
416
|
+
alt="User"
|
|
417
|
+
className="c-avatar c-avatar--sm c-avatar--circle"
|
|
333
418
|
/>
|
|
334
419
|
<span className="u-ms-2">User Name</span>
|
|
335
420
|
</>
|
|
336
421
|
}
|
|
337
422
|
>
|
|
338
423
|
<Menu>
|
|
339
|
-
<MenuItem href="#" icon="icon-lux-user">
|
|
340
|
-
|
|
424
|
+
<MenuItem href="#" icon="icon-lux-user">
|
|
425
|
+
Profile
|
|
426
|
+
</MenuItem>
|
|
427
|
+
<MenuItem href="#" icon="icon-lux-settings">
|
|
428
|
+
Settings
|
|
429
|
+
</MenuItem>
|
|
341
430
|
<MenuDivider />
|
|
342
|
-
<MenuItem href="#" icon="icon-lux-sign-out">
|
|
431
|
+
<MenuItem href="#" icon="icon-lux-sign-out">
|
|
432
|
+
Logout
|
|
433
|
+
</MenuItem>
|
|
343
434
|
</Menu>
|
|
344
435
|
</NavDropdown>
|
|
345
436
|
</Nav>
|
|
@@ -350,10 +441,7 @@ export const WithAvatarDropdown: Story = {
|
|
|
350
441
|
// Responsive Navbar
|
|
351
442
|
export const ResponsiveNavbar: Story = {
|
|
352
443
|
render: () => (
|
|
353
|
-
<Navbar
|
|
354
|
-
brand={<LogoBrand />}
|
|
355
|
-
collapsible={true}
|
|
356
|
-
>
|
|
444
|
+
<Navbar brand={<LogoBrand />} collapsible={true}>
|
|
357
445
|
<Nav alignment="start">
|
|
358
446
|
<NavItem>Home</NavItem>
|
|
359
447
|
<NavItem>Products</NavItem>
|
|
@@ -390,22 +478,28 @@ export const ResponsiveNavbar: Story = {
|
|
|
390
478
|
<Icon name="Bell" size="sm" className="u-me-2" />
|
|
391
479
|
Notifications
|
|
392
480
|
</NavItem>
|
|
393
|
-
<NavDropdown
|
|
481
|
+
<NavDropdown
|
|
394
482
|
title={
|
|
395
483
|
<>
|
|
396
|
-
<img
|
|
397
|
-
src="/assets/images/avatar.jpg"
|
|
398
|
-
alt="User"
|
|
399
|
-
className="c-avatar c-avatar--sm c-avatar--circle"
|
|
484
|
+
<img
|
|
485
|
+
src="/assets/images/avatar.jpg"
|
|
486
|
+
alt="User"
|
|
487
|
+
className="c-avatar c-avatar--sm c-avatar--circle"
|
|
400
488
|
/>
|
|
401
489
|
</>
|
|
402
490
|
}
|
|
403
491
|
>
|
|
404
492
|
<Menu>
|
|
405
|
-
<MenuItem href="#" icon="icon-lux-user">
|
|
406
|
-
|
|
493
|
+
<MenuItem href="#" icon="icon-lux-user">
|
|
494
|
+
Profile
|
|
495
|
+
</MenuItem>
|
|
496
|
+
<MenuItem href="#" icon="icon-lux-settings">
|
|
497
|
+
Settings
|
|
498
|
+
</MenuItem>
|
|
407
499
|
<MenuDivider />
|
|
408
|
-
<MenuItem href="#" icon="icon-lux-sign-out">
|
|
500
|
+
<MenuItem href="#" icon="icon-lux-sign-out">
|
|
501
|
+
Logout
|
|
502
|
+
</MenuItem>
|
|
409
503
|
</Menu>
|
|
410
504
|
</NavDropdown>
|
|
411
505
|
</Nav>
|
|
@@ -432,7 +526,7 @@ export const MegaMenuVsDropdown: Story = {
|
|
|
432
526
|
</Nav>
|
|
433
527
|
</Navbar>
|
|
434
528
|
</div>
|
|
435
|
-
|
|
529
|
+
|
|
436
530
|
<div>
|
|
437
531
|
<h4 className="u-mb-3">Mega Menu</h4>
|
|
438
532
|
<Navbar brand={<LogoBrand />}>
|
|
@@ -455,4 +549,4 @@ export const MegaMenuVsDropdown: Story = {
|
|
|
455
549
|
</div>
|
|
456
550
|
</div>
|
|
457
551
|
),
|
|
458
|
-
};
|
|
552
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import React, { useState, useEffect, useRef, forwardRef } from 'react';
|
|
2
|
+
import { NavbarProps } from '../../../lib/types/components';
|
|
3
|
+
import { useNavbar } from '../../../lib/composables/useNavbar';
|
|
4
|
+
import { NAVBAR } from '../../../lib/constants/components';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Navbar component provides a responsive navigation header with brand, navigation items,
|
|
8
|
+
* and collapsible mobile menu functionality.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <Navbar brand="My App" position="fixed" collapsible>
|
|
13
|
+
* <Nav>
|
|
14
|
+
* <NavItem href="/">Home</NavItem>
|
|
15
|
+
* <NavItem href="/about">About</NavItem>
|
|
16
|
+
* </Nav>
|
|
17
|
+
* </Navbar>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const Navbar = forwardRef<HTMLElement, NavbarProps>(
|
|
21
|
+
(
|
|
22
|
+
{
|
|
23
|
+
brand,
|
|
24
|
+
children,
|
|
25
|
+
variant,
|
|
26
|
+
position = 'static',
|
|
27
|
+
containerWidth,
|
|
28
|
+
collapsible = true,
|
|
29
|
+
expanded,
|
|
30
|
+
onToggle,
|
|
31
|
+
className = '',
|
|
32
|
+
disabled = false,
|
|
33
|
+
backdrop = false,
|
|
34
|
+
closeOnOutsideClick = true,
|
|
35
|
+
closeOnEscape = true,
|
|
36
|
+
ariaLabel = 'Main navigation',
|
|
37
|
+
id,
|
|
38
|
+
},
|
|
39
|
+
ref
|
|
40
|
+
) => {
|
|
41
|
+
const { generateNavbarClass, generateContainerStyle, generateCollapseClass } = useNavbar({
|
|
42
|
+
position,
|
|
43
|
+
collapsible,
|
|
44
|
+
expanded,
|
|
45
|
+
onToggle,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Use controlled or uncontrolled expanded state
|
|
49
|
+
const [navbarExpanded, setNavbarExpanded] = useState(expanded || false);
|
|
50
|
+
|
|
51
|
+
// Ref for the collapse element to handle responsive behavior
|
|
52
|
+
const collapseRef = useRef<HTMLDivElement>(null);
|
|
53
|
+
|
|
54
|
+
// Update local state when external state changes
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (typeof expanded !== 'undefined') {
|
|
57
|
+
setNavbarExpanded(expanded);
|
|
58
|
+
}
|
|
59
|
+
}, [expanded]);
|
|
60
|
+
|
|
61
|
+
// Handle resize to reset mobile menu state when switching to desktop
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
const handleResize = () => {
|
|
64
|
+
const isMobile = window.innerWidth < 768; // MD breakpoint
|
|
65
|
+
if (!isMobile && collapsible) {
|
|
66
|
+
// Reset expanded state on desktop
|
|
67
|
+
if (typeof onToggle === 'function') {
|
|
68
|
+
// Only update if different to avoid unnecessary renders
|
|
69
|
+
if (expanded) onToggle(false);
|
|
70
|
+
} else {
|
|
71
|
+
setNavbarExpanded(false);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
window.addEventListener('resize', handleResize);
|
|
77
|
+
return () => {
|
|
78
|
+
window.removeEventListener('resize', handleResize);
|
|
79
|
+
};
|
|
80
|
+
}, [collapsible, expanded, onToggle]);
|
|
81
|
+
|
|
82
|
+
// Generate the navbar class
|
|
83
|
+
const navbarClass = generateNavbarClass({
|
|
84
|
+
position,
|
|
85
|
+
variant,
|
|
86
|
+
collapsible,
|
|
87
|
+
className,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Generate the container style
|
|
91
|
+
const containerStyle = generateContainerStyle(containerWidth);
|
|
92
|
+
|
|
93
|
+
// Generate collapse class
|
|
94
|
+
const collapseClass = generateCollapseClass(navbarExpanded);
|
|
95
|
+
|
|
96
|
+
// Handle toggler click
|
|
97
|
+
const handleToggleClick = () => {
|
|
98
|
+
if (disabled) return;
|
|
99
|
+
|
|
100
|
+
const newState = !navbarExpanded;
|
|
101
|
+
|
|
102
|
+
if (typeof onToggle === 'function') {
|
|
103
|
+
// Controlled component
|
|
104
|
+
onToggle(newState);
|
|
105
|
+
} else {
|
|
106
|
+
// Uncontrolled component
|
|
107
|
+
setNavbarExpanded(newState);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<nav ref={ref} className={navbarClass} aria-label={ariaLabel} id={id}>
|
|
113
|
+
<div className="c-navbar__container" style={containerStyle}>
|
|
114
|
+
{brand &&
|
|
115
|
+
(typeof brand === 'string' ? (
|
|
116
|
+
<a href="/" className="c-navbar__brand">
|
|
117
|
+
{brand}
|
|
118
|
+
</a>
|
|
119
|
+
) : (
|
|
120
|
+
<div className="c-navbar__brand">{brand}</div>
|
|
121
|
+
))}
|
|
122
|
+
|
|
123
|
+
{collapsible && (
|
|
124
|
+
<button
|
|
125
|
+
className="c-navbar__toggler"
|
|
126
|
+
onClick={handleToggleClick}
|
|
127
|
+
aria-expanded={navbarExpanded}
|
|
128
|
+
aria-label="Toggle navigation"
|
|
129
|
+
aria-controls="navbar-collapse"
|
|
130
|
+
disabled={disabled}
|
|
131
|
+
type="button"
|
|
132
|
+
>
|
|
133
|
+
<span className="c-navbar__toggler-icon"></span>
|
|
134
|
+
</button>
|
|
135
|
+
)}
|
|
136
|
+
|
|
137
|
+
<div id="navbar-collapse" className={collapseClass} ref={collapseRef}>
|
|
138
|
+
{children}
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</nav>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
export type { NavbarProps };
|
|
147
|
+
|
|
148
|
+
Navbar.displayName = 'Navbar';
|
|
149
|
+
|
|
150
|
+
export default Navbar;
|