@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
|
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|
|
2
2
|
import { Meta, StoryObj } from '@storybook/react';
|
|
3
3
|
import { MasonryGrid } from './MasonryGrid';
|
|
4
4
|
import { MasonryGridItem } from './MasonryGridItem';
|
|
5
|
-
import Card
|
|
5
|
+
import Card from '../../components/Card/Card';
|
|
6
6
|
import ElevationCard from '../../components/Card/Card';
|
|
7
7
|
|
|
8
8
|
const meta: Meta<typeof MasonryGrid> = {
|
|
@@ -12,7 +12,7 @@ const meta: Meta<typeof MasonryGrid> = {
|
|
|
12
12
|
layout: 'fullscreen',
|
|
13
13
|
},
|
|
14
14
|
decorators: [
|
|
15
|
-
|
|
15
|
+
Story => (
|
|
16
16
|
<div style={{ padding: '1rem' }}>
|
|
17
17
|
<Story />
|
|
18
18
|
</div>
|
|
@@ -28,10 +28,10 @@ const getPlaceholderImage = (index: number, width = 600, height?: number) => {
|
|
|
28
28
|
// Create different heights for variety if not specified
|
|
29
29
|
const heights = [300, 400, 500, 350, 450, 550, 320, 420];
|
|
30
30
|
const imgHeight = height || heights[index % heights.length];
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
// Use different image IDs for variety
|
|
33
33
|
const imageId = (index % 30) + 10; // Use IDs between 10-40 for variety
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
// Use Picsum Photos which is more reliable
|
|
36
36
|
return `https://picsum.photos/id/${imageId}/${width}/${imgHeight}`;
|
|
37
37
|
};
|
|
@@ -47,13 +47,15 @@ const CardWithImage: React.FC<{
|
|
|
47
47
|
}> = ({ index, title, text, useElevation = false, width, height }) => {
|
|
48
48
|
const CardComponent = useElevation ? ElevationCard : Card;
|
|
49
49
|
const imageUrl = getPlaceholderImage(index, width, height);
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
// Generate random content if not provided
|
|
52
52
|
const cardTitle = title || `Card Title ${index + 1}`;
|
|
53
|
-
const cardText =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
const cardText =
|
|
54
|
+
text ||
|
|
55
|
+
(index % 2 === 0
|
|
56
|
+
? 'This is a short description for this card item.'
|
|
57
|
+
: 'This is a longer description that takes up more space to demonstrate how the masonry layout handles different content heights effectively.');
|
|
58
|
+
|
|
57
59
|
return (
|
|
58
60
|
<CardComponent
|
|
59
61
|
image={imageUrl}
|
|
@@ -78,8 +80,11 @@ export const BasicMasonryGrid: Story = {
|
|
|
78
80
|
render: () => (
|
|
79
81
|
<div>
|
|
80
82
|
<h3 className="u-mb-4">Basic Masonry Grid</h3>
|
|
81
|
-
<p className="u-mb-4">
|
|
82
|
-
|
|
83
|
+
<p className="u-mb-4">
|
|
84
|
+
Items are automatically positioned in the optimal location based on available vertical
|
|
85
|
+
space.
|
|
86
|
+
</p>
|
|
87
|
+
|
|
83
88
|
<MasonryGrid xs={1} sm={2} md={3} lg={4}>
|
|
84
89
|
{Array.from({ length: 8 }).map((_, index) => (
|
|
85
90
|
<MasonryGridItem key={index}>
|
|
@@ -99,14 +104,11 @@ export const CustomGap: Story = {
|
|
|
99
104
|
<div>
|
|
100
105
|
<h3 className="u-mb-4">Custom Gap (24px)</h3>
|
|
101
106
|
<p className="u-mb-4">The gap between items can be customized.</p>
|
|
102
|
-
|
|
107
|
+
|
|
103
108
|
<MasonryGrid xs={1} sm={2} md={3} lg={4} gap={24}>
|
|
104
109
|
{Array.from({ length: 6 }).map((_, index) => (
|
|
105
110
|
<MasonryGridItem key={index}>
|
|
106
|
-
<CardWithImage
|
|
107
|
-
index={index + 10}
|
|
108
|
-
title={`Card with Gap ${index + 1}`}
|
|
109
|
-
/>
|
|
111
|
+
<CardWithImage index={index + 10} title={`Card with Gap ${index + 1}`} />
|
|
110
112
|
</MasonryGridItem>
|
|
111
113
|
))}
|
|
112
114
|
</MasonryGrid>
|
|
@@ -123,44 +125,44 @@ export const DynamicLoading: Story = {
|
|
|
123
125
|
const DynamicLoadingExample = () => {
|
|
124
126
|
const [items, setItems] = useState<number[]>([]);
|
|
125
127
|
const [loading, setLoading] = useState(true);
|
|
126
|
-
|
|
128
|
+
|
|
127
129
|
useEffect(() => {
|
|
128
130
|
// Simulate loading items in batches
|
|
129
131
|
const loadItems = () => {
|
|
130
132
|
setLoading(true);
|
|
131
|
-
|
|
133
|
+
|
|
132
134
|
// Initial set of items
|
|
133
135
|
setTimeout(() => {
|
|
134
136
|
setItems([0, 1, 2, 3, 4, 5]);
|
|
135
137
|
setLoading(false);
|
|
136
138
|
}, 1000);
|
|
137
|
-
|
|
139
|
+
|
|
138
140
|
// Add more items after a delay
|
|
139
141
|
setTimeout(() => {
|
|
140
142
|
setItems(prev => [...prev, 6, 7, 8, 9, 10, 11]);
|
|
141
143
|
}, 3000);
|
|
142
144
|
};
|
|
143
|
-
|
|
145
|
+
|
|
144
146
|
loadItems();
|
|
145
147
|
}, []);
|
|
146
|
-
|
|
148
|
+
|
|
147
149
|
return (
|
|
148
150
|
<div>
|
|
149
151
|
<h3 className="u-mb-4">Dynamic Loading</h3>
|
|
150
152
|
<p className="u-mb-4">The masonry grid recalculates positions as new items are added.</p>
|
|
151
|
-
|
|
153
|
+
|
|
152
154
|
{loading && (
|
|
153
155
|
<div className="u-p-4 u-mb-4 u-bg-light u-border u-rounded u-text-center">
|
|
154
156
|
<div className="u-spinner u-spinner-primary u-mb-3"></div>
|
|
155
157
|
<p className="u-m-0">Loading initial items...</p>
|
|
156
158
|
</div>
|
|
157
159
|
)}
|
|
158
|
-
|
|
160
|
+
|
|
159
161
|
<MasonryGrid xs={1} sm={2} md={3} lg={4}>
|
|
160
|
-
{items.map(
|
|
162
|
+
{items.map(index => (
|
|
161
163
|
<MasonryGridItem key={index}>
|
|
162
|
-
<CardWithImage
|
|
163
|
-
index={index + 20}
|
|
164
|
+
<CardWithImage
|
|
165
|
+
index={index + 20}
|
|
164
166
|
useElevation={true}
|
|
165
167
|
title={`Dynamic Card ${index + 1}`}
|
|
166
168
|
/>
|
|
@@ -170,7 +172,7 @@ export const DynamicLoading: Story = {
|
|
|
170
172
|
</div>
|
|
171
173
|
);
|
|
172
174
|
};
|
|
173
|
-
|
|
175
|
+
|
|
174
176
|
return <DynamicLoadingExample />;
|
|
175
177
|
},
|
|
176
178
|
};
|
|
@@ -183,14 +185,18 @@ export const CustomColumns: Story = {
|
|
|
183
185
|
<div>
|
|
184
186
|
<h3 className="u-mb-4">Custom Column Configuration</h3>
|
|
185
187
|
<p className="u-mb-4">Different column counts can be specified for each breakpoint.</p>
|
|
186
|
-
|
|
188
|
+
|
|
187
189
|
<MasonryGrid xs={1} sm={2} md={2} lg={3} xl={4} xxl={5}>
|
|
188
190
|
{Array.from({ length: 10 }).map((_, index) => (
|
|
189
191
|
<MasonryGridItem key={index}>
|
|
190
|
-
<CardWithImage
|
|
191
|
-
index={index + 30}
|
|
192
|
+
<CardWithImage
|
|
193
|
+
index={index + 30}
|
|
192
194
|
title={`Column Config ${index + 1}`}
|
|
193
|
-
text={
|
|
195
|
+
text={
|
|
196
|
+
index % 2 === 0
|
|
197
|
+
? undefined
|
|
198
|
+
: 'This card demonstrates the custom column configuration across different breakpoints.'
|
|
199
|
+
}
|
|
194
200
|
/>
|
|
195
201
|
</MasonryGridItem>
|
|
196
202
|
))}
|
|
@@ -206,18 +212,22 @@ export const WithElevationCards: Story = {
|
|
|
206
212
|
render: () => (
|
|
207
213
|
<div>
|
|
208
214
|
<h3 className="u-mb-4">Elevation Cards in Masonry Layout</h3>
|
|
209
|
-
<p className="u-mb-4">
|
|
210
|
-
|
|
215
|
+
<p className="u-mb-4">
|
|
216
|
+
The masonry grid works well with elevation card components that have hover effects.
|
|
217
|
+
</p>
|
|
218
|
+
|
|
211
219
|
<MasonryGrid xs={1} sm={2} md={3} lg={4}>
|
|
212
220
|
{Array.from({ length: 8 }).map((_, index) => (
|
|
213
221
|
<MasonryGridItem key={index}>
|
|
214
|
-
<CardWithImage
|
|
215
|
-
index={index + 40}
|
|
222
|
+
<CardWithImage
|
|
223
|
+
index={index + 40}
|
|
216
224
|
useElevation={true}
|
|
217
225
|
title={`Elevation Card ${index + 1}`}
|
|
218
|
-
text={
|
|
219
|
-
|
|
220
|
-
|
|
226
|
+
text={
|
|
227
|
+
index % 2 === 0
|
|
228
|
+
? 'Hover over this card to see the elevation effect.'
|
|
229
|
+
: 'This card demonstrates the elevation effect when hovered. The masonry layout handles different content heights automatically.'
|
|
230
|
+
}
|
|
221
231
|
/>
|
|
222
232
|
</MasonryGridItem>
|
|
223
233
|
))}
|
|
@@ -234,14 +244,11 @@ export const NoAnimation: Story = {
|
|
|
234
244
|
<div>
|
|
235
245
|
<h3 className="u-mb-4">No Animation</h3>
|
|
236
246
|
<p className="u-mb-4">The animation can be disabled for immediate positioning.</p>
|
|
237
|
-
|
|
247
|
+
|
|
238
248
|
<MasonryGrid xs={1} sm={2} md={3} lg={4} animate={false}>
|
|
239
249
|
{Array.from({ length: 6 }).map((_, index) => (
|
|
240
250
|
<MasonryGridItem key={index}>
|
|
241
|
-
<CardWithImage
|
|
242
|
-
index={index + 50}
|
|
243
|
-
title={`No Animation ${index + 1}`}
|
|
244
|
-
/>
|
|
251
|
+
<CardWithImage index={index + 50} title={`No Animation ${index + 1}`} />
|
|
245
252
|
</MasonryGridItem>
|
|
246
253
|
))}
|
|
247
254
|
</MasonryGrid>
|
|
@@ -257,23 +264,27 @@ export const ProgressiveImageLoading: Story = {
|
|
|
257
264
|
const [loadedCount, setLoadedCount] = useState(0);
|
|
258
265
|
const [totalCount, setTotalCount] = useState(0);
|
|
259
266
|
const [layoutComplete, setLayoutComplete] = useState(false);
|
|
260
|
-
|
|
267
|
+
|
|
261
268
|
return (
|
|
262
269
|
<div>
|
|
263
270
|
<h3 className="u-mb-4">Progressive Image Loading</h3>
|
|
264
|
-
<p className="u-mb-4">
|
|
265
|
-
|
|
271
|
+
<p className="u-mb-4">
|
|
272
|
+
The grid shows items immediately and updates positions as each image loads.
|
|
273
|
+
</p>
|
|
274
|
+
|
|
266
275
|
<div className="u-bg-light u-p-3 u-rounded u-mb-4">
|
|
267
276
|
<h4 className="u-mb-2">Loading Progress</h4>
|
|
268
277
|
{totalCount > 0 && (
|
|
269
278
|
<div className="u-mb-2">
|
|
270
279
|
<div className="u-d-flex u-justify-content-between u-mb-1">
|
|
271
|
-
<span>
|
|
280
|
+
<span>
|
|
281
|
+
Loading images: {loadedCount} of {totalCount}
|
|
282
|
+
</span>
|
|
272
283
|
<span>{Math.round((loadedCount / totalCount) * 100)}%</span>
|
|
273
284
|
</div>
|
|
274
285
|
<div className="u-progress u-mb-2" style={{ height: '8px' }}>
|
|
275
|
-
<div
|
|
276
|
-
className="u-progress-bar u-bg-primary"
|
|
286
|
+
<div
|
|
287
|
+
className="u-progress-bar u-bg-primary"
|
|
277
288
|
style={{ width: `${(loadedCount / totalCount) * 100}%` }}
|
|
278
289
|
></div>
|
|
279
290
|
</div>
|
|
@@ -285,13 +296,13 @@ export const ProgressiveImageLoading: Story = {
|
|
|
285
296
|
</div>
|
|
286
297
|
)}
|
|
287
298
|
</div>
|
|
288
|
-
|
|
289
|
-
<MasonryGrid
|
|
290
|
-
xs={1}
|
|
291
|
-
sm={2}
|
|
292
|
-
md={3}
|
|
299
|
+
|
|
300
|
+
<MasonryGrid
|
|
301
|
+
xs={1}
|
|
302
|
+
sm={2}
|
|
303
|
+
md={3}
|
|
293
304
|
lg={4}
|
|
294
|
-
gap={16}
|
|
305
|
+
gap={16}
|
|
295
306
|
imagesLoaded={true}
|
|
296
307
|
onLayoutComplete={() => setLayoutComplete(true)}
|
|
297
308
|
onImageLoad={(loaded, total) => {
|
|
@@ -301,8 +312,8 @@ export const ProgressiveImageLoading: Story = {
|
|
|
301
312
|
>
|
|
302
313
|
{Array.from({ length: 8 }).map((_, index) => (
|
|
303
314
|
<MasonryGridItem key={index}>
|
|
304
|
-
<CardWithImage
|
|
305
|
-
index={index + 70}
|
|
315
|
+
<CardWithImage
|
|
316
|
+
index={index + 70}
|
|
306
317
|
title={`Progressive Loading ${index + 1}`}
|
|
307
318
|
text="This card's image loads independently and updates the layout as it loads."
|
|
308
319
|
// Use different sized images to demonstrate the progressive loading
|
|
@@ -324,24 +335,24 @@ export const MixedContent: Story = {
|
|
|
324
335
|
render: () => (
|
|
325
336
|
<div>
|
|
326
337
|
<h3 className="u-mb-4">Mixed Content Types</h3>
|
|
327
|
-
<p className="u-mb-4">
|
|
328
|
-
|
|
338
|
+
<p className="u-mb-4">
|
|
339
|
+
The masonry grid can handle various content types with different heights.
|
|
340
|
+
</p>
|
|
341
|
+
|
|
329
342
|
<MasonryGrid xs={1} sm={2} md={3} lg={4}>
|
|
330
343
|
<MasonryGridItem>
|
|
331
344
|
<Card
|
|
332
345
|
title="Text Only Card"
|
|
333
346
|
text="This card contains only text content with no image."
|
|
334
347
|
className="u-h-100"
|
|
335
|
-
actions={
|
|
336
|
-
<button className="u-btn u-btn-primary u-btn-sm u-mt-3">Action</button>
|
|
337
|
-
}
|
|
348
|
+
actions={<button className="u-btn u-btn-primary u-btn-sm u-mt-3">Action</button>}
|
|
338
349
|
/>
|
|
339
350
|
</MasonryGridItem>
|
|
340
|
-
|
|
351
|
+
|
|
341
352
|
<MasonryGridItem>
|
|
342
353
|
<CardWithImage index={60} useElevation={true} />
|
|
343
354
|
</MasonryGridItem>
|
|
344
|
-
|
|
355
|
+
|
|
345
356
|
<MasonryGridItem>
|
|
346
357
|
<div className="u-p-4 u-border u-rounded u-bg-light u-h-100">
|
|
347
358
|
<h4 className="u-mb-3">Custom Content</h4>
|
|
@@ -352,21 +363,17 @@ export const MixedContent: Story = {
|
|
|
352
363
|
</div>
|
|
353
364
|
</div>
|
|
354
365
|
</MasonryGridItem>
|
|
355
|
-
|
|
366
|
+
|
|
356
367
|
<MasonryGridItem>
|
|
357
368
|
<CardWithImage index={61} />
|
|
358
369
|
</MasonryGridItem>
|
|
359
|
-
|
|
370
|
+
|
|
360
371
|
<MasonryGridItem>
|
|
361
372
|
<div className="u-p-0 u-border u-rounded u-overflow-hidden u-shadow-sm">
|
|
362
|
-
<img
|
|
363
|
-
src="https://picsum.photos/id/15/600/400"
|
|
364
|
-
alt="Nature"
|
|
365
|
-
className="u-w-100"
|
|
366
|
-
/>
|
|
373
|
+
<img src="https://picsum.photos/id/15/600/400" alt="Nature" className="u-w-100" />
|
|
367
374
|
</div>
|
|
368
375
|
</MasonryGridItem>
|
|
369
|
-
|
|
376
|
+
|
|
370
377
|
<MasonryGridItem>
|
|
371
378
|
<Card
|
|
372
379
|
title="Card with Icon"
|
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {
|
|
2
|
+
forwardRef,
|
|
3
|
+
HTMLAttributes,
|
|
4
|
+
ReactNode,
|
|
5
|
+
useEffect,
|
|
6
|
+
useImperativeHandle,
|
|
7
|
+
useRef,
|
|
8
|
+
useState,
|
|
9
|
+
useCallback,
|
|
10
|
+
useMemo,
|
|
11
|
+
Children,
|
|
12
|
+
cloneElement,
|
|
13
|
+
isValidElement,
|
|
14
|
+
} from 'react';
|
|
2
15
|
// Import styles for scoped CSS modules
|
|
3
16
|
|
|
4
17
|
export interface MasonryGridProps extends HTMLAttributes<HTMLDivElement> {
|
|
@@ -122,7 +135,6 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
122
135
|
else setLoadingImages(false);
|
|
123
136
|
}, [columns, imagesLoaded]);
|
|
124
137
|
|
|
125
|
-
|
|
126
138
|
// Types
|
|
127
139
|
type MasonryImageElement = HTMLImageElement & {
|
|
128
140
|
_masonryLoadHandler?: EventListener;
|
|
@@ -190,12 +202,9 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
190
202
|
});
|
|
191
203
|
});
|
|
192
204
|
onImageLoad?.(imagesLoadedCount.current, totalImagesCount.current);
|
|
193
|
-
|
|
205
|
+
|
|
194
206
|
// If all images have loaded, update loading state and complete layout
|
|
195
|
-
if (
|
|
196
|
-
imagesLoadedCount.current >= totalImagesCount.current &&
|
|
197
|
-
totalImagesCount.current > 0
|
|
198
|
-
) {
|
|
207
|
+
if (imagesLoadedCount.current >= totalImagesCount.current && totalImagesCount.current > 0) {
|
|
199
208
|
setLayoutComplete(true);
|
|
200
209
|
setLoadingImages(false); // This ensures the loading class is removed *immediately* after images load
|
|
201
210
|
// Force a double requestAnimationFrame for final layout calculation after all images are loaded (guarantees DOM paint)
|
|
@@ -225,7 +234,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
225
234
|
return undefined;
|
|
226
235
|
}
|
|
227
236
|
setLoadingImages(true);
|
|
228
|
-
images.forEach(
|
|
237
|
+
images.forEach(img => {
|
|
229
238
|
const masonryImg = img as MasonryImageElement;
|
|
230
239
|
const itemElement = img.closest('.o-masonry-grid > div');
|
|
231
240
|
if (itemElement) {
|
|
@@ -242,7 +251,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
242
251
|
});
|
|
243
252
|
// Cleanup
|
|
244
253
|
return () => {
|
|
245
|
-
images.forEach(
|
|
254
|
+
images.forEach(img => {
|
|
246
255
|
const masonryImg = img as MasonryImageElement;
|
|
247
256
|
if (masonryImg._masonryLoadHandler) {
|
|
248
257
|
img.removeEventListener('load', masonryImg._masonryLoadHandler);
|
|
@@ -263,9 +272,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
263
272
|
items.forEach((item, index) => {
|
|
264
273
|
if (item.ref.current) {
|
|
265
274
|
// Find the shortest column
|
|
266
|
-
const shortestCol = columnHeights.current.indexOf(
|
|
267
|
-
Math.min(...columnHeights.current)
|
|
268
|
-
);
|
|
275
|
+
const shortestCol = columnHeights.current.indexOf(Math.min(...columnHeights.current));
|
|
269
276
|
const left = shortestCol * (colWidth + gap);
|
|
270
277
|
const top = columnHeights.current[shortestCol];
|
|
271
278
|
const height = item.ref.current.offsetHeight;
|
|
@@ -308,14 +315,13 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
308
315
|
return undefined;
|
|
309
316
|
}
|
|
310
317
|
// Only reset layoutComplete when items or columns change
|
|
311
|
-
// eslint-disable-next-line
|
|
312
318
|
}, [items, columns, calculateLayout, imagesLoaded, trackImages]);
|
|
313
319
|
|
|
314
320
|
// === NEW: Add ResizeObservers to all grid items for bulletproof image+content measurement ===
|
|
315
321
|
React.useEffect(() => {
|
|
316
322
|
// Clean up old observers if items ever change
|
|
317
323
|
const observers: ResizeObserver[] = [];
|
|
318
|
-
items.forEach(
|
|
324
|
+
items.forEach(item => {
|
|
319
325
|
if (item.ref.current) {
|
|
320
326
|
const obs = new ResizeObserver(() => {
|
|
321
327
|
// Double rAF: ensures layout only runs after DOM/paint/async renders
|
|
@@ -330,7 +336,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
330
336
|
}
|
|
331
337
|
});
|
|
332
338
|
return () => {
|
|
333
|
-
observers.forEach(
|
|
339
|
+
observers.forEach(obs => obs.disconnect());
|
|
334
340
|
};
|
|
335
341
|
}, [items, calculateLayout]);
|
|
336
342
|
|
|
@@ -338,9 +344,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
338
344
|
|
|
339
345
|
// === DETERMINE CONTAINER HEIGHT ===
|
|
340
346
|
const containerHeight =
|
|
341
|
-
columnHeights.current.length > 0
|
|
342
|
-
? Math.max(...columnHeights.current)
|
|
343
|
-
: 0;
|
|
347
|
+
columnHeights.current.length > 0 ? Math.max(...columnHeights.current) : 0;
|
|
344
348
|
|
|
345
349
|
// === DETERMINE CLASSES ===
|
|
346
350
|
const classes = [
|
|
@@ -354,8 +358,6 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
354
358
|
|
|
355
359
|
// === RENDER ===
|
|
356
360
|
|
|
357
|
-
|
|
358
|
-
|
|
359
361
|
return (
|
|
360
362
|
<div
|
|
361
363
|
ref={containerRef}
|
|
@@ -372,11 +374,7 @@ export const MasonryGrid = forwardRef<HTMLDivElement, MasonryGridProps>(
|
|
|
372
374
|
const position = positions[index];
|
|
373
375
|
if (!position) {
|
|
374
376
|
return (
|
|
375
|
-
<div
|
|
376
|
-
key={item.id}
|
|
377
|
-
ref={item.ref}
|
|
378
|
-
style={{ opacity: 0, position: 'absolute' }}
|
|
379
|
-
>
|
|
377
|
+
<div key={item.id} ref={item.ref} style={{ opacity: 0, position: 'absolute' }}>
|
|
380
378
|
{item.element}
|
|
381
379
|
</div>
|
|
382
380
|
);
|
|
@@ -24,23 +24,15 @@ export interface MasonryGridItemProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
export const MasonryGridItem = forwardRef<HTMLDivElement, MasonryGridItemProps>(
|
|
27
|
-
({
|
|
28
|
-
children,
|
|
29
|
-
className = '',
|
|
30
|
-
...props
|
|
31
|
-
}, ref) => {
|
|
27
|
+
({ children, className = '', ...props }, ref) => {
|
|
32
28
|
const classes = ['o-masonry-grid__item-inner'];
|
|
33
|
-
|
|
29
|
+
|
|
34
30
|
if (className) {
|
|
35
31
|
classes.push(className);
|
|
36
32
|
}
|
|
37
|
-
|
|
33
|
+
|
|
38
34
|
return (
|
|
39
|
-
<div
|
|
40
|
-
ref={ref}
|
|
41
|
-
className={classes.join(' ')}
|
|
42
|
-
{...props}
|
|
43
|
-
>
|
|
35
|
+
<div ref={ref} className={classes.join(' ')} {...props}>
|
|
44
36
|
{children}
|
|
45
37
|
</div>
|
|
46
38
|
);
|
package/src/layouts/index.ts
CHANGED
|
@@ -34,11 +34,11 @@ export * from './useCheckbox';
|
|
|
34
34
|
export * from './useRadio';
|
|
35
35
|
export * from './useTextarea';
|
|
36
36
|
|
|
37
|
-
// Export other composables as needed
|
|
37
|
+
// Export other composables as needed
|
|
38
38
|
|
|
39
39
|
// New composables
|
|
40
40
|
export * from './useDataTable';
|
|
41
41
|
export * from './usePagination';
|
|
42
42
|
export * from './useModal';
|
|
43
|
-
export * from './useBreadcrumb';
|
|
44
|
-
export * from './useCard';
|
|
43
|
+
export * from './useBreadcrumb';
|
|
44
|
+
export * from './useCard';
|
|
@@ -27,13 +27,21 @@ interface UseAccordionResult {
|
|
|
27
27
|
* @param initialProps - Initial accordion properties
|
|
28
28
|
* @returns Accordion state and methods
|
|
29
29
|
*/
|
|
30
|
-
export function useAccordion(
|
|
30
|
+
export function useAccordion(
|
|
31
|
+
initialProps?: Partial<AccordionProps> & {
|
|
32
|
+
isOpen?: boolean;
|
|
33
|
+
onOpenChange?: (open: boolean) => void;
|
|
34
|
+
}
|
|
35
|
+
): UseAccordionResult {
|
|
31
36
|
// Default accordion properties
|
|
32
|
-
const defaultProps: Partial<AccordionProps> & {
|
|
37
|
+
const defaultProps: Partial<AccordionProps> & {
|
|
38
|
+
isOpen?: boolean;
|
|
39
|
+
onOpenChange?: (open: boolean) => void;
|
|
40
|
+
} = {
|
|
33
41
|
defaultOpen: false,
|
|
34
42
|
disabled: false,
|
|
35
43
|
iconPosition: 'right' as IconPosition,
|
|
36
|
-
...initialProps
|
|
44
|
+
...initialProps,
|
|
37
45
|
};
|
|
38
46
|
|
|
39
47
|
// Controlled/uncontrolled open state
|
|
@@ -104,7 +112,8 @@ export function useAccordion(initialProps?: Partial<AccordionProps> & { isOpen?:
|
|
|
104
112
|
* Generate header class names
|
|
105
113
|
*/
|
|
106
114
|
const generateHeaderClassNames = (): string => {
|
|
107
|
-
const iconPositionClass =
|
|
115
|
+
const iconPositionClass =
|
|
116
|
+
defaultProps.iconPosition === 'left' ? 'c-accordion__header--icon-left' : '';
|
|
108
117
|
return `c-accordion__header ${iconPositionClass}`.trim();
|
|
109
118
|
};
|
|
110
119
|
|
|
@@ -115,6 +124,6 @@ export function useAccordion(initialProps?: Partial<AccordionProps> & { isOpen?:
|
|
|
115
124
|
panelRef,
|
|
116
125
|
contentRef,
|
|
117
126
|
generateClassNames,
|
|
118
|
-
generateHeaderClassNames
|
|
127
|
+
generateHeaderClassNames,
|
|
119
128
|
};
|
|
120
|
-
}
|
|
129
|
+
}
|
|
@@ -12,7 +12,7 @@ export function useBadge(initialProps?: Partial<BadgeProps>) {
|
|
|
12
12
|
variant: 'primary',
|
|
13
13
|
size: 'md',
|
|
14
14
|
disabled: false,
|
|
15
|
-
...initialProps
|
|
15
|
+
...initialProps,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -31,7 +31,7 @@ export function useBadge(initialProps?: Partial<BadgeProps>) {
|
|
|
31
31
|
const sizeClass = size === 'md' ? '' : `${BADGE.SIZE_PREFIX}${size}`;
|
|
32
32
|
const variantClass = variant ? `${BADGE.VARIANT_PREFIX}${variant}` : '';
|
|
33
33
|
const disabledClass = disabled ? 'c-badge--disabled' : '';
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
return `${BADGE.BASE_CLASS} ${variantClass} ${sizeClass} ${disabledClass} ${className}`.trim();
|
|
36
36
|
};
|
|
37
37
|
|
|
@@ -39,4 +39,4 @@ export function useBadge(initialProps?: Partial<BadgeProps>) {
|
|
|
39
39
|
defaultProps,
|
|
40
40
|
generateBadgeClass,
|
|
41
41
|
};
|
|
42
|
-
}
|
|
42
|
+
}
|
|
@@ -13,7 +13,7 @@ export function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {
|
|
|
13
13
|
divider: BREADCRUMB.DEFAULTS.DIVIDER,
|
|
14
14
|
className: '',
|
|
15
15
|
ariaLabel: 'Breadcrumb',
|
|
16
|
-
...initialOptions
|
|
16
|
+
...initialOptions,
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -23,11 +23,8 @@ export function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {
|
|
|
23
23
|
*/
|
|
24
24
|
const generateBreadcrumbClass = (options: Partial<BreadcrumbOptions>): string => {
|
|
25
25
|
const { className = '' } = options;
|
|
26
|
-
|
|
27
|
-
return [BREADCRUMB.CLASSES.BASE, className]
|
|
28
|
-
.filter(Boolean)
|
|
29
|
-
.join(' ')
|
|
30
|
-
.trim();
|
|
26
|
+
|
|
27
|
+
return [BREADCRUMB.CLASSES.BASE, className].filter(Boolean).join(' ').trim();
|
|
31
28
|
};
|
|
32
29
|
|
|
33
30
|
/**
|
|
@@ -37,10 +34,7 @@ export function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {
|
|
|
37
34
|
* @returns Class string
|
|
38
35
|
*/
|
|
39
36
|
const generateItemClass = (item: BreadcrumbItem, isLast: boolean): string => {
|
|
40
|
-
return [
|
|
41
|
-
BREADCRUMB.CLASSES.ITEM,
|
|
42
|
-
(item.active || isLast) ? BREADCRUMB.CLASSES.ACTIVE : ''
|
|
43
|
-
]
|
|
37
|
+
return [BREADCRUMB.CLASSES.ITEM, item.active || isLast ? BREADCRUMB.CLASSES.ACTIVE : '']
|
|
44
38
|
.filter(Boolean)
|
|
45
39
|
.join(' ')
|
|
46
40
|
.trim();
|
|
@@ -75,6 +69,6 @@ export function useBreadcrumb(initialOptions?: Partial<BreadcrumbOptions>) {
|
|
|
75
69
|
generateBreadcrumbClass,
|
|
76
70
|
generateItemClass,
|
|
77
71
|
isItemLink,
|
|
78
|
-
parseItemsFromJson
|
|
72
|
+
parseItemsFromJson,
|
|
79
73
|
};
|
|
80
|
-
}
|
|
74
|
+
}
|
|
@@ -12,7 +12,7 @@ export function useButton(initialProps?: Partial<ButtonProps>) {
|
|
|
12
12
|
size: 'md',
|
|
13
13
|
disabled: false,
|
|
14
14
|
rounded: false,
|
|
15
|
-
...initialProps
|
|
15
|
+
...initialProps,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -34,7 +34,7 @@ export function useButton(initialProps?: Partial<ButtonProps>) {
|
|
|
34
34
|
const iconOnlyClass = iconOnly ? 'c-btn--icon' : '';
|
|
35
35
|
const roundedClass = rounded ? 'c-btn--rounded' : '';
|
|
36
36
|
const disabledClass = disabled ? 'c-btn--disabled' : '';
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
return `c-btn c-btn--${variant} ${sizeClass} ${iconOnlyClass} ${roundedClass} ${disabledClass} ${className}`.trim();
|
|
39
39
|
};
|
|
40
40
|
|
|
@@ -56,4 +56,4 @@ export function useButton(initialProps?: Partial<ButtonProps>) {
|
|
|
56
56
|
generateButtonClass,
|
|
57
57
|
handleClick,
|
|
58
58
|
};
|
|
59
|
-
}
|
|
59
|
+
}
|