@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
|
@@ -6,17 +6,17 @@ export interface TabItemProps {
|
|
|
6
6
|
* Label for the tab
|
|
7
7
|
*/
|
|
8
8
|
label: string;
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
/**
|
|
11
11
|
* Content of the tab panel
|
|
12
12
|
*/
|
|
13
13
|
content: ReactNode;
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Whether the tab is initially active
|
|
17
17
|
*/
|
|
18
18
|
isActive?: boolean;
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Additional CSS class for the tab
|
|
22
22
|
*/
|
|
@@ -28,17 +28,17 @@ export interface TabProps {
|
|
|
28
28
|
* Array of tab items
|
|
29
29
|
*/
|
|
30
30
|
items: TabItemProps[];
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
/**
|
|
33
33
|
* Initial active tab index
|
|
34
34
|
*/
|
|
35
35
|
activeIndex?: number;
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
/**
|
|
38
38
|
* Callback when tab changes
|
|
39
39
|
*/
|
|
40
40
|
onTabChange?: (index: number) => void;
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
/**
|
|
43
43
|
* Additional CSS class for the tab component
|
|
44
44
|
*/
|
|
@@ -57,7 +57,7 @@ export const Tab: React.FC<TabProps> = ({
|
|
|
57
57
|
const [currentTab, setCurrentTab] = useState(activeIndex);
|
|
58
58
|
const tabRef = useRef<HTMLDivElement>(null);
|
|
59
59
|
const tabInstance = useRef<any>(null);
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
// Handle tab instance initialization and cleanup
|
|
62
62
|
useEffect(() => {
|
|
63
63
|
// Only run on client-side
|
|
@@ -69,7 +69,7 @@ export const Tab: React.FC<TabProps> = ({
|
|
|
69
69
|
tabInstance.current = new TabClass(tabRef.current);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
// Cleanup on unmount
|
|
74
74
|
return () => {
|
|
75
75
|
if (tabInstance.current) {
|
|
@@ -77,7 +77,7 @@ export const Tab: React.FC<TabProps> = ({
|
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
79
|
}, []);
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
// Handle tab change
|
|
82
82
|
const handleTabClick = (index: number) => {
|
|
83
83
|
setCurrentTab(index);
|
|
@@ -85,13 +85,13 @@ export const Tab: React.FC<TabProps> = ({
|
|
|
85
85
|
onTabChange(index);
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
return (
|
|
90
90
|
<div className={`c-tabs js-atomix-tab ${className}`} ref={tabRef}>
|
|
91
91
|
<ul className="c-tabs__nav">
|
|
92
92
|
{items.map((item, index) => (
|
|
93
93
|
<li className="c-tabs__nav-item" key={`tab-nav-${index}`}>
|
|
94
|
-
<button
|
|
94
|
+
<button
|
|
95
95
|
className={`c-tabs__nav-btn ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
|
|
96
96
|
onClick={() => handleTabClick(index)}
|
|
97
97
|
data-tabindex={index}
|
|
@@ -106,29 +106,27 @@ export const Tab: React.FC<TabProps> = ({
|
|
|
106
106
|
</ul>
|
|
107
107
|
<div className="c-tabs__panels">
|
|
108
108
|
{items.map((item, index) => (
|
|
109
|
-
<div
|
|
109
|
+
<div
|
|
110
110
|
className={`c-tabs__panel ${index === currentTab ? TAB.CLASSES.ACTIVE : ''}`}
|
|
111
111
|
key={`tab-panel-${index}`}
|
|
112
112
|
data-tabindex={index}
|
|
113
113
|
id={`tab-panel-${index}`}
|
|
114
114
|
role="tabpanel"
|
|
115
115
|
aria-labelledby={`tab-nav-${index}`}
|
|
116
|
-
style={{
|
|
116
|
+
style={{
|
|
117
117
|
height: index === currentTab ? 'auto' : '0px',
|
|
118
118
|
opacity: index === currentTab ? 1 : 0,
|
|
119
119
|
overflow: 'hidden',
|
|
120
|
-
transition: 'height 0.3s ease, opacity 0.3s ease'
|
|
120
|
+
transition: 'height 0.3s ease, opacity 0.3s ease',
|
|
121
121
|
}}
|
|
122
122
|
>
|
|
123
|
-
<div className="c-tabs__panel-body">
|
|
124
|
-
{item.content}
|
|
125
|
-
</div>
|
|
123
|
+
<div className="c-tabs__panel-body">{item.content}</div>
|
|
126
124
|
</div>
|
|
127
125
|
))}
|
|
128
126
|
</div>
|
|
129
127
|
</div>
|
|
130
128
|
);
|
|
131
|
-
};
|
|
129
|
+
};
|
|
132
130
|
|
|
133
131
|
Tab.displayName = 'Tab';
|
|
134
132
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Tab } from
|
|
2
|
-
export type { TabProps, TabItemProps } from
|
|
1
|
+
export { Tab } from './Tab';
|
|
2
|
+
export type { TabProps, TabItemProps } from './Tab';
|
|
@@ -29,7 +29,7 @@ const DEFAULT_OPTIONS = {
|
|
|
29
29
|
panels: TAB.SELECTORS.PANELS,
|
|
30
30
|
panelBodys: TAB.SELECTORS.PANEL_BODIES,
|
|
31
31
|
activeClass: TAB.CLASSES.ACTIVE,
|
|
32
|
-
activeIndex: TAB.DEFAULTS.ACTIVE_INDEX
|
|
32
|
+
activeIndex: TAB.DEFAULTS.ACTIVE_INDEX,
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -53,7 +53,7 @@ class Tab implements TabInstance {
|
|
|
53
53
|
this.$element =
|
|
54
54
|
typeof selector === 'string'
|
|
55
55
|
? document.querySelector<HTMLElement>(selector)
|
|
56
|
-
: selector as HTMLElement;
|
|
56
|
+
: (selector as HTMLElement);
|
|
57
57
|
this.options = { ...DEFAULT_OPTIONS, ...options } as TabOptions;
|
|
58
58
|
this.$navItems = null;
|
|
59
59
|
this.$panels = null;
|
|
@@ -77,7 +77,7 @@ class Tab implements TabInstance {
|
|
|
77
77
|
*/
|
|
78
78
|
private _initializeElements(): void {
|
|
79
79
|
if (!this.$element) return;
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
this.$navItems = this.$element.querySelectorAll<HTMLElement>(this.options.navItems);
|
|
82
82
|
this.$panels = this.$element.querySelectorAll<HTMLElement>(this.options.panels);
|
|
83
83
|
this.$panelBodys = this.$element.querySelectorAll<HTMLElement>(this.options.panelBodys);
|
|
@@ -88,8 +88,8 @@ class Tab implements TabInstance {
|
|
|
88
88
|
*/
|
|
89
89
|
private _bindEvents(): void {
|
|
90
90
|
if (!this.$navItems) return;
|
|
91
|
-
|
|
92
|
-
this.$navItems.forEach(
|
|
91
|
+
|
|
92
|
+
this.$navItems.forEach(item => {
|
|
93
93
|
const btn = item.querySelector<HTMLElement>(this.options.navBtn);
|
|
94
94
|
if (btn) {
|
|
95
95
|
btn.addEventListener('click', () => this._handleTabClick(btn));
|
|
@@ -104,7 +104,7 @@ class Tab implements TabInstance {
|
|
|
104
104
|
private _handleTabClick(btn: HTMLElement): void {
|
|
105
105
|
const tabIndex = btn.dataset.tabindex;
|
|
106
106
|
if (tabIndex === undefined) return;
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
this._hideAllTabs();
|
|
109
109
|
this._showTab(tabIndex);
|
|
110
110
|
}
|
|
@@ -114,14 +114,14 @@ class Tab implements TabInstance {
|
|
|
114
114
|
*/
|
|
115
115
|
private _hideAllTabs(): void {
|
|
116
116
|
if (!this.$panels || !this.$navItems) return;
|
|
117
|
-
|
|
118
|
-
this.$panels.forEach(
|
|
117
|
+
|
|
118
|
+
this.$panels.forEach(panel => {
|
|
119
119
|
panel.style.height = '0px';
|
|
120
120
|
panel.classList.remove(this.options.activeClass);
|
|
121
121
|
panel.style.opacity = '0';
|
|
122
122
|
});
|
|
123
123
|
|
|
124
|
-
this.$navItems.forEach(
|
|
124
|
+
this.$navItems.forEach(item => {
|
|
125
125
|
const btn = item.querySelector<HTMLElement>(this.options.navBtn);
|
|
126
126
|
if (btn) {
|
|
127
127
|
btn.classList.remove(this.options.activeClass);
|
|
@@ -135,7 +135,7 @@ class Tab implements TabInstance {
|
|
|
135
135
|
*/
|
|
136
136
|
private _showTab(index: number | string): void {
|
|
137
137
|
if (!this.$panels || !this.$navItems || !this.$panelBodys) return;
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
this.$panels.forEach((panel, pIndex) => {
|
|
140
140
|
if (panel.dataset.tabindex == index.toString()) {
|
|
141
141
|
const panelBody = this.$panelBodys?.[pIndex];
|
|
@@ -163,7 +163,7 @@ class Tab implements TabInstance {
|
|
|
163
163
|
public destroy(): void {
|
|
164
164
|
if (!this.$element || !this.$navItems) return;
|
|
165
165
|
|
|
166
|
-
this.$navItems.forEach(
|
|
166
|
+
this.$navItems.forEach(item => {
|
|
167
167
|
const btn = item.querySelector<HTMLElement>(this.options.navBtn);
|
|
168
168
|
if (btn) {
|
|
169
169
|
// Need to recreate the bound function to remove it correctly
|
|
@@ -185,7 +185,7 @@ export function initializeTabs(selector = TAB.SELECTORS.TAB, options = {}): TabI
|
|
|
185
185
|
|
|
186
186
|
if (!tabElements.length) return tabInstances;
|
|
187
187
|
|
|
188
|
-
tabElements.forEach(
|
|
188
|
+
tabElements.forEach(element => {
|
|
189
189
|
try {
|
|
190
190
|
const instance = new Tab(element, options);
|
|
191
191
|
tabInstances.push(instance);
|
|
@@ -197,4 +197,4 @@ export function initializeTabs(selector = TAB.SELECTORS.TAB, options = {}): TabI
|
|
|
197
197
|
return tabInstances;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
export default Tab;
|
|
200
|
+
export default Tab;
|
|
@@ -18,7 +18,7 @@ export default {
|
|
|
18
18
|
},
|
|
19
19
|
} as Meta<typeof Testimonial>;
|
|
20
20
|
|
|
21
|
-
const Template: StoryFn<typeof Testimonial> =
|
|
21
|
+
const Template: StoryFn<typeof Testimonial> = args => (
|
|
22
22
|
<div style={{ padding: '30px' }}>
|
|
23
23
|
<Testimonial {...args} />
|
|
24
24
|
</div>
|
|
@@ -27,12 +27,14 @@ const Template: StoryFn<typeof Testimonial> = (args) => (
|
|
|
27
27
|
// Default testimonial
|
|
28
28
|
export const Default = Template.bind({});
|
|
29
29
|
Default.args = {
|
|
30
|
-
quote:
|
|
30
|
+
quote:
|
|
31
|
+
'The intuitive interface, seamless syncing across devices, and helpful features have made me more productive than ever before.',
|
|
31
32
|
author: {
|
|
32
|
-
name:
|
|
33
|
-
role:
|
|
34
|
-
avatarSrc:
|
|
35
|
-
|
|
33
|
+
name: 'Emily Rodriguez',
|
|
34
|
+
role: 'Software Engineer, Acme',
|
|
35
|
+
avatarSrc:
|
|
36
|
+
'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
37
|
+
avatarAlt: 'Emily Rodriguez',
|
|
36
38
|
},
|
|
37
39
|
size: '',
|
|
38
40
|
};
|
|
@@ -40,12 +42,14 @@ Default.args = {
|
|
|
40
42
|
// Large testimonial
|
|
41
43
|
export const Large = Template.bind({});
|
|
42
44
|
Large.args = {
|
|
43
|
-
quote:
|
|
45
|
+
quote:
|
|
46
|
+
'The intuitive interface, seamless syncing across devices, and helpful features have made me more productive than ever before.',
|
|
44
47
|
author: {
|
|
45
|
-
name:
|
|
46
|
-
role:
|
|
47
|
-
avatarSrc:
|
|
48
|
-
|
|
48
|
+
name: 'Emily Rodriguez',
|
|
49
|
+
role: 'Software Engineer, Acme',
|
|
50
|
+
avatarSrc:
|
|
51
|
+
'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
52
|
+
avatarAlt: 'Emily Rodriguez',
|
|
49
53
|
},
|
|
50
54
|
size: 'lg',
|
|
51
55
|
};
|
|
@@ -53,12 +57,14 @@ Large.args = {
|
|
|
53
57
|
// Small testimonial
|
|
54
58
|
export const Small = Template.bind({});
|
|
55
59
|
Small.args = {
|
|
56
|
-
quote:
|
|
60
|
+
quote:
|
|
61
|
+
'The intuitive interface, seamless syncing across devices, and helpful features have made me more productive than ever before.',
|
|
57
62
|
author: {
|
|
58
|
-
name:
|
|
59
|
-
role:
|
|
60
|
-
avatarSrc:
|
|
61
|
-
|
|
63
|
+
name: 'Emily Rodriguez',
|
|
64
|
+
role: 'Software Engineer, Acme',
|
|
65
|
+
avatarSrc:
|
|
66
|
+
'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
67
|
+
avatarAlt: 'Emily Rodriguez',
|
|
62
68
|
},
|
|
63
69
|
size: 'sm',
|
|
64
70
|
};
|
|
@@ -87,10 +93,11 @@ RichContent.args = {
|
|
|
87
93
|
</>
|
|
88
94
|
),
|
|
89
95
|
author: {
|
|
90
|
-
name:
|
|
91
|
-
role:
|
|
92
|
-
avatarSrc:
|
|
93
|
-
|
|
96
|
+
name: 'John Smith',
|
|
97
|
+
role: 'Product Manager, XYZ Corp',
|
|
98
|
+
avatarSrc:
|
|
99
|
+
'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3',
|
|
100
|
+
avatarAlt: 'John Smith',
|
|
94
101
|
},
|
|
95
102
|
};
|
|
96
103
|
|
|
@@ -100,38 +107,41 @@ const TestimonialGrid: React.FC = () => {
|
|
|
100
107
|
<div className="o-container">
|
|
101
108
|
<div className="o-grid">
|
|
102
109
|
<div className="o-grid__col o-grid__col--4">
|
|
103
|
-
<Testimonial
|
|
110
|
+
<Testimonial
|
|
104
111
|
size="sm"
|
|
105
112
|
quote="The intuitive interface, seamless syncing across devices, and helpful features have made me more productive than ever before."
|
|
106
113
|
author={{
|
|
107
|
-
name:
|
|
108
|
-
role:
|
|
109
|
-
avatarSrc:
|
|
110
|
-
|
|
114
|
+
name: 'Emily Rodriguez',
|
|
115
|
+
role: 'Software Engineer, Acme',
|
|
116
|
+
avatarSrc:
|
|
117
|
+
'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
118
|
+
avatarAlt: 'Emily Rodriguez',
|
|
111
119
|
}}
|
|
112
120
|
/>
|
|
113
121
|
</div>
|
|
114
122
|
<div className="o-grid__col o-grid__col--4">
|
|
115
|
-
<Testimonial
|
|
123
|
+
<Testimonial
|
|
116
124
|
size="sm"
|
|
117
125
|
quote="I feel more in charge of my schedule and less overwhelmed. Highly recommended for professionals and anyone aiming to enhance their productivity."
|
|
118
126
|
author={{
|
|
119
|
-
name:
|
|
120
|
-
role:
|
|
121
|
-
avatarSrc:
|
|
122
|
-
|
|
127
|
+
name: 'John Smith',
|
|
128
|
+
role: 'Product Manager, XYZ Corp',
|
|
129
|
+
avatarSrc:
|
|
130
|
+
'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3',
|
|
131
|
+
avatarAlt: 'John Smith',
|
|
123
132
|
}}
|
|
124
133
|
/>
|
|
125
134
|
</div>
|
|
126
135
|
<div className="o-grid__col o-grid__col--4">
|
|
127
|
-
<Testimonial
|
|
136
|
+
<Testimonial
|
|
128
137
|
size="sm"
|
|
129
138
|
quote="I've tried numerous productivity apps in the past, but this one truly stands out. It strikes the perfect balance between simplicity and functionality."
|
|
130
139
|
author={{
|
|
131
|
-
name:
|
|
132
|
-
role:
|
|
133
|
-
avatarSrc:
|
|
134
|
-
|
|
140
|
+
name: 'Sarah Johnson',
|
|
141
|
+
role: 'Marketing Director, ABC Inc',
|
|
142
|
+
avatarSrc:
|
|
143
|
+
'https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3',
|
|
144
|
+
avatarAlt: 'Sarah Johnson',
|
|
135
145
|
}}
|
|
136
146
|
/>
|
|
137
147
|
</div>
|
|
@@ -140,9 +150,7 @@ const TestimonialGrid: React.FC = () => {
|
|
|
140
150
|
);
|
|
141
151
|
};
|
|
142
152
|
|
|
143
|
-
export const TestimonialGridLayout: StoryFn<typeof Testimonial> = () =>
|
|
144
|
-
<TestimonialGrid />
|
|
145
|
-
);
|
|
153
|
+
export const TestimonialGridLayout: StoryFn<typeof Testimonial> = () => <TestimonialGrid />;
|
|
146
154
|
|
|
147
155
|
// Testimonial with image
|
|
148
156
|
const TestimonialWithImage: React.FC = () => {
|
|
@@ -150,28 +158,23 @@ const TestimonialWithImage: React.FC = () => {
|
|
|
150
158
|
<div className="o-container">
|
|
151
159
|
<div className="o-grid u-align-items-center">
|
|
152
160
|
<div className="o-grid__col o-grid__col--6">
|
|
153
|
-
<Testimonial
|
|
161
|
+
<Testimonial
|
|
154
162
|
quote="The intuitive interface, seamless syncing across devices, and helpful features have made me more productive than ever before."
|
|
155
163
|
author={{
|
|
156
|
-
name:
|
|
157
|
-
role:
|
|
158
|
-
avatarSrc:
|
|
159
|
-
|
|
164
|
+
name: 'Emily Rodriguez',
|
|
165
|
+
role: 'Software Engineer, Acme',
|
|
166
|
+
avatarSrc:
|
|
167
|
+
'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
|
|
168
|
+
avatarAlt: 'Emily Rodriguez',
|
|
160
169
|
}}
|
|
161
170
|
/>
|
|
162
171
|
</div>
|
|
163
172
|
<div className="o-grid__col o-grid__col--6">
|
|
164
|
-
<img
|
|
165
|
-
src="https://unsplash.it/g/727/250"
|
|
166
|
-
alt="Image"
|
|
167
|
-
className="c-river__image"
|
|
168
|
-
/>
|
|
173
|
+
<img src="https://unsplash.it/g/727/250" alt="Image" className="c-river__image" />
|
|
169
174
|
</div>
|
|
170
175
|
</div>
|
|
171
176
|
</div>
|
|
172
177
|
);
|
|
173
178
|
};
|
|
174
179
|
|
|
175
|
-
export const WithImage: StoryFn<typeof Testimonial> = () =>
|
|
176
|
-
<TestimonialWithImage />
|
|
177
|
-
);
|
|
180
|
+
export const WithImage: StoryFn<typeof Testimonial> = () => <TestimonialWithImage />;
|
|
@@ -6,17 +6,17 @@ export interface TestimonialAuthor {
|
|
|
6
6
|
* The author's name
|
|
7
7
|
*/
|
|
8
8
|
name: string;
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
/**
|
|
11
11
|
* The author's role or title
|
|
12
12
|
*/
|
|
13
13
|
role: string;
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* The URL to the author's avatar image
|
|
17
17
|
*/
|
|
18
18
|
avatarSrc?: string;
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Alternative text for the avatar image
|
|
22
22
|
*/
|
|
@@ -28,22 +28,22 @@ export interface TestimonialProps {
|
|
|
28
28
|
* The testimonial quote text or content
|
|
29
29
|
*/
|
|
30
30
|
quote: ReactNode;
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
/**
|
|
33
33
|
* Author information
|
|
34
34
|
*/
|
|
35
35
|
author?: TestimonialAuthor;
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
/**
|
|
38
38
|
* Size variant
|
|
39
39
|
*/
|
|
40
40
|
size?: 'sm' | 'lg' | '';
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
/**
|
|
43
43
|
* Whether to show a skeleton loading state
|
|
44
44
|
*/
|
|
45
45
|
skeleton?: boolean;
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
/**
|
|
48
48
|
* Additional CSS class
|
|
49
49
|
*/
|
|
@@ -62,7 +62,7 @@ export const Testimonial: React.FC<TestimonialProps> = ({
|
|
|
62
62
|
}) => {
|
|
63
63
|
const testimonialRef = useRef<HTMLDivElement>(null);
|
|
64
64
|
const testimonialInstance = useRef<any>(null);
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
useEffect(() => {
|
|
67
67
|
// Only run on client-side
|
|
68
68
|
if (typeof window === 'undefined' || !testimonialRef.current) return undefined;
|
|
@@ -72,11 +72,11 @@ export const Testimonial: React.FC<TestimonialProps> = ({
|
|
|
72
72
|
if (testimonialRef.current) {
|
|
73
73
|
testimonialInstance.current = new TestimonialClass(testimonialRef.current, {
|
|
74
74
|
size,
|
|
75
|
-
skeleton
|
|
75
|
+
skeleton,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
// Cleanup on unmount
|
|
81
81
|
return () => {
|
|
82
82
|
if (testimonialInstance.current) {
|
|
@@ -84,15 +84,17 @@ export const Testimonial: React.FC<TestimonialProps> = ({
|
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
}, [size, skeleton]);
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
// Determine CSS classes
|
|
89
89
|
const testimonialClasses = [
|
|
90
90
|
'c-testimonial',
|
|
91
91
|
size === 'sm' ? TESTIMONIAL.CLASSES.SMALL : '',
|
|
92
92
|
size === 'lg' ? TESTIMONIAL.CLASSES.LARGE : '',
|
|
93
|
-
className
|
|
94
|
-
]
|
|
95
|
-
|
|
93
|
+
className,
|
|
94
|
+
]
|
|
95
|
+
.filter(Boolean)
|
|
96
|
+
.join(' ');
|
|
97
|
+
|
|
96
98
|
// Render skeleton version
|
|
97
99
|
if (skeleton) {
|
|
98
100
|
return (
|
|
@@ -117,13 +119,11 @@ export const Testimonial: React.FC<TestimonialProps> = ({
|
|
|
117
119
|
</div>
|
|
118
120
|
);
|
|
119
121
|
}
|
|
120
|
-
|
|
122
|
+
|
|
121
123
|
// Render normal version
|
|
122
124
|
return (
|
|
123
125
|
<div className={testimonialClasses} ref={testimonialRef}>
|
|
124
|
-
<blockquote className="c-testimonial__quote">
|
|
125
|
-
{quote}
|
|
126
|
-
</blockquote>
|
|
126
|
+
<blockquote className="c-testimonial__quote">{quote}</blockquote>
|
|
127
127
|
{author && (
|
|
128
128
|
<div className="c-testimonial__author">
|
|
129
129
|
{author.avatarSrc && (
|
|
@@ -143,7 +143,6 @@ export const Testimonial: React.FC<TestimonialProps> = ({
|
|
|
143
143
|
);
|
|
144
144
|
};
|
|
145
145
|
|
|
146
|
-
|
|
147
146
|
Testimonial.displayName = 'Testimonial';
|
|
148
147
|
|
|
149
148
|
export default Testimonial;
|
|
@@ -21,7 +21,7 @@ interface TestimonialInstance {
|
|
|
21
21
|
*/
|
|
22
22
|
const DEFAULT_OPTIONS: TestimonialOptions = {
|
|
23
23
|
size: '',
|
|
24
|
-
skeleton: false
|
|
24
|
+
skeleton: false,
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -42,7 +42,7 @@ class Testimonial implements TestimonialInstance {
|
|
|
42
42
|
this.$element =
|
|
43
43
|
typeof selector === 'string'
|
|
44
44
|
? document.querySelector<HTMLElement>(selector)
|
|
45
|
-
: selector as HTMLElement;
|
|
45
|
+
: (selector as HTMLElement);
|
|
46
46
|
this.options = { ...DEFAULT_OPTIONS, ...options } as TestimonialOptions;
|
|
47
47
|
this._initialize();
|
|
48
48
|
}
|
|
@@ -54,9 +54,15 @@ class Testimonial implements TestimonialInstance {
|
|
|
54
54
|
if (!this.$element) return;
|
|
55
55
|
|
|
56
56
|
// Apply size classes if specified
|
|
57
|
-
if (
|
|
57
|
+
if (
|
|
58
|
+
this.options.size === 'sm' &&
|
|
59
|
+
!this.$element.classList.contains(TESTIMONIAL.CLASSES.SMALL)
|
|
60
|
+
) {
|
|
58
61
|
this.$element.classList.add(TESTIMONIAL.CLASSES.SMALL);
|
|
59
|
-
} else if (
|
|
62
|
+
} else if (
|
|
63
|
+
this.options.size === 'lg' &&
|
|
64
|
+
!this.$element.classList.contains(TESTIMONIAL.CLASSES.LARGE)
|
|
65
|
+
) {
|
|
60
66
|
this.$element.classList.add(TESTIMONIAL.CLASSES.LARGE);
|
|
61
67
|
}
|
|
62
68
|
}
|
|
@@ -75,13 +81,18 @@ class Testimonial implements TestimonialInstance {
|
|
|
75
81
|
* @param {Object} options - Custom options to override defaults
|
|
76
82
|
* @returns {TestimonialInstance[]} Array of Testimonial instances
|
|
77
83
|
*/
|
|
78
|
-
export function initializeTestimonials(
|
|
84
|
+
export function initializeTestimonials(
|
|
85
|
+
selector = TESTIMONIAL.SELECTORS.TESTIMONIAL,
|
|
86
|
+
options = {}
|
|
87
|
+
): TestimonialInstance[] {
|
|
79
88
|
const testimonialInstances: TestimonialInstance[] = [];
|
|
80
|
-
const testimonialElements = document.querySelectorAll<HTMLElement>(
|
|
89
|
+
const testimonialElements = document.querySelectorAll<HTMLElement>(
|
|
90
|
+
typeof selector === 'string' ? selector : TESTIMONIAL.SELECTORS.TESTIMONIAL
|
|
91
|
+
);
|
|
81
92
|
|
|
82
93
|
if (!testimonialElements.length) return testimonialInstances;
|
|
83
94
|
|
|
84
|
-
testimonialElements.forEach(
|
|
95
|
+
testimonialElements.forEach(element => {
|
|
85
96
|
try {
|
|
86
97
|
const instance = new Testimonial(element, options);
|
|
87
98
|
testimonialInstances.push(instance);
|
|
@@ -93,4 +104,4 @@ export function initializeTestimonials(selector = TESTIMONIAL.SELECTORS.TESTIMON
|
|
|
93
104
|
return testimonialInstances;
|
|
94
105
|
}
|
|
95
106
|
|
|
96
|
-
export default Testimonial;
|
|
107
|
+
export default Testimonial;
|
|
@@ -72,7 +72,7 @@ export const Interactive: Story = {
|
|
|
72
72
|
placeholder: 'Add a new todo',
|
|
73
73
|
showCompleted: true,
|
|
74
74
|
},
|
|
75
|
-
render:
|
|
75
|
+
render: args => {
|
|
76
76
|
const [items, setItems] = useState<TodoItem[]>([
|
|
77
77
|
{ id: uuidv4(), text: 'Learn React', completed: true },
|
|
78
78
|
{ id: uuidv4(), text: 'Build a todo app', completed: false },
|
|
@@ -90,9 +90,7 @@ export const Interactive: Story = {
|
|
|
90
90
|
|
|
91
91
|
const handleToggleTodo = (id: string) => {
|
|
92
92
|
setItems(
|
|
93
|
-
items.map(item =>
|
|
94
|
-
item.id === id ? { ...item, completed: !item.completed } : item
|
|
95
|
-
)
|
|
93
|
+
items.map(item => (item.id === id ? { ...item, completed: !item.completed } : item))
|
|
96
94
|
);
|
|
97
95
|
};
|
|
98
96
|
|
|
@@ -121,26 +119,11 @@ export const Sizes: Story = {
|
|
|
121
119
|
items: sampleItems.slice(0, 3),
|
|
122
120
|
showCompleted: true,
|
|
123
121
|
},
|
|
124
|
-
render:
|
|
122
|
+
render: args => (
|
|
125
123
|
<div className="u-d-flex u-flex-column u-gap-4">
|
|
126
|
-
<Todo
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
items={args.items}
|
|
130
|
-
size="sm"
|
|
131
|
-
/>
|
|
132
|
-
<Todo
|
|
133
|
-
{...args}
|
|
134
|
-
title="Medium Todo List"
|
|
135
|
-
items={args.items}
|
|
136
|
-
size="md"
|
|
137
|
-
/>
|
|
138
|
-
<Todo
|
|
139
|
-
{...args}
|
|
140
|
-
title="Large Todo List"
|
|
141
|
-
items={args.items}
|
|
142
|
-
size="lg"
|
|
143
|
-
/>
|
|
124
|
+
<Todo {...args} title="Small Todo List" items={args.items} size="sm" />
|
|
125
|
+
<Todo {...args} title="Medium Todo List" items={args.items} size="md" />
|
|
126
|
+
<Todo {...args} title="Large Todo List" items={args.items} size="lg" />
|
|
144
127
|
</div>
|
|
145
128
|
),
|
|
146
129
|
};
|
|
@@ -169,4 +152,4 @@ export const Disabled: Story = {
|
|
|
169
152
|
items: sampleItems,
|
|
170
153
|
disabled: true,
|
|
171
154
|
},
|
|
172
|
-
};
|
|
155
|
+
};
|