@shohojdhara/atomix 0.1.30 → 0.2.2
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/CHANGELOG.md +0 -0
- package/LICENSE +0 -0
- package/README.md +128 -43
- package/dist/atomix.css +15025 -0
- package/dist/atomix.min.css +15 -0
- package/dist/index.d.ts +6459 -1748
- package/dist/index.esm.js +17559 -8364
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +17603 -8369
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/themes/boomdevs.css +14677 -0
- package/dist/themes/boomdevs.min.css +405 -0
- package/dist/themes/esrar.css +16870 -0
- package/dist/themes/esrar.min.css +189 -0
- package/dist/themes/mashroom.css +29578 -0
- package/dist/themes/mashroom.min.css +403 -0
- package/dist/themes/shaj-default.css +15702 -0
- package/dist/themes/shaj-default.min.css +500 -0
- package/dist/themes/yabai.css +15207 -0
- package/dist/themes/yabai.min.css +189 -0
- package/package.json +126 -99
- package/src/components/Accordion/Accordion.stories.tsx +271 -0
- package/src/components/Accordion/Accordion.tsx +131 -0
- package/src/components/Accordion/index.ts +3 -0
- package/src/components/AtomixLogo/AtomixLogo.tsx +36 -0
- package/src/components/AtomixLogo/index.ts +3 -0
- package/src/components/AtomixLogo.tsx +40 -0
- package/src/components/Avatar/Avatar.stories.tsx +257 -0
- package/src/components/Avatar/Avatar.tsx +68 -0
- package/src/components/Avatar/AvatarGroup.tsx +73 -0
- package/src/components/Avatar/index.ts +3 -0
- package/src/components/Badge/Badge.stories.tsx +371 -0
- package/src/components/Badge/Badge.tsx +39 -0
- package/src/components/Badge/index.ts +3 -0
- package/src/components/Block/Block.stories.tsx +408 -0
- package/src/components/Block/Block.tsx +137 -0
- package/src/components/Block/index.ts +1 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +106 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +112 -0
- package/src/components/Breadcrumb/index.ts +3 -0
- package/src/components/Button/Button.stories.tsx +312 -0
- package/src/components/Button/Button.tsx +69 -0
- package/src/components/Button/index.ts +3 -0
- package/src/components/Callout/Callout.stories.tsx +588 -0
- package/src/components/Callout/Callout.tsx +78 -0
- package/src/components/Callout/index.ts +1 -0
- package/src/components/Card/Card.stories.tsx +105 -0
- package/src/components/Card/Card.tsx +69 -0
- package/src/components/Card/ElevationCard.tsx +47 -0
- package/src/components/Card/index.ts +15 -0
- package/src/components/Chart/AdvancedChart.tsx +624 -0
- package/src/components/Chart/AnimatedChart.tsx +206 -0
- package/src/components/Chart/AreaChart.tsx +27 -0
- package/src/components/Chart/BarChart.tsx +148 -0
- package/src/components/Chart/BubbleChart.tsx +411 -0
- package/src/components/Chart/CandlestickChart.tsx +765 -0
- package/src/components/Chart/Chart.stories.tsx +527 -0
- package/src/components/Chart/Chart.tsx +218 -0
- package/src/components/Chart/ChartRenderer.tsx +322 -0
- package/src/components/Chart/ChartToolbar.tsx +436 -0
- package/src/components/Chart/ChartTooltip.tsx +101 -0
- package/src/components/Chart/DonutChart.tsx +370 -0
- package/src/components/Chart/FunnelChart.tsx +393 -0
- package/src/components/Chart/GaugeChart.tsx +550 -0
- package/src/components/Chart/HeatmapChart.tsx +614 -0
- package/src/components/Chart/LineChart.tsx +172 -0
- package/src/components/Chart/LineChartNew.tsx +167 -0
- package/src/components/Chart/MultiAxisChart.tsx +498 -0
- package/src/components/Chart/PieChart.tsx +103 -0
- package/src/components/Chart/RadarChart.tsx +332 -0
- package/src/components/Chart/RealTimeChart.tsx +436 -0
- package/src/components/Chart/ScatterChart.tsx +152 -0
- package/src/components/Chart/TreemapChart.tsx +574 -0
- package/src/components/Chart/WaterfallChart.tsx +450 -0
- package/src/components/Chart/index.ts +119 -0
- package/src/components/Chart/types.ts +338 -0
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +44 -0
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +85 -0
- package/src/components/ColorModeToggle/index.ts +2 -0
- package/src/components/Countdown/Countdown.stories.tsx +46 -0
- package/src/components/Countdown/Countdown.tsx +90 -0
- package/src/components/Countdown/index.ts +2 -0
- package/src/components/DataTable/DataTable.stories.tsx +248 -0
- package/src/components/DataTable/DataTable.tsx +213 -0
- package/src/components/DataTable/index.ts +3 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +364 -0
- package/src/components/DatePicker/DatePicker.tsx +504 -0
- package/src/components/DatePicker/index.ts +4 -0
- package/src/components/DatePicker/readme.md +106 -0
- package/src/components/DatePicker/types.ts +167 -0
- package/src/components/DatePicker/utils.ts +185 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +358 -0
- package/src/components/Dropdown/Dropdown.tsx +352 -0
- package/src/components/Dropdown/index.ts +14 -0
- package/src/components/Dropdown/readme.md +151 -0
- package/src/components/EdgePanel/EdgePanel.stories.tsx +266 -0
- package/src/components/EdgePanel/EdgePanel.tsx +73 -0
- package/src/components/EdgePanel/index.ts +1 -0
- package/src/components/Footer/Footer.stories.tsx +388 -0
- package/src/components/Footer/Footer.tsx +197 -0
- package/src/components/Footer/FooterLink.tsx +72 -0
- package/src/components/Footer/FooterSection.tsx +87 -0
- package/src/components/Footer/FooterSocialLink.tsx +117 -0
- package/src/components/Footer/README.md +261 -0
- package/src/components/Footer/index.ts +13 -0
- package/src/components/Form/Checkbox.stories.tsx +76 -0
- package/src/components/Form/Checkbox.tsx +69 -0
- package/src/components/Form/Form.stories.tsx +497 -0
- package/src/components/Form/Form.tsx +46 -0
- package/src/components/Form/FormGroup.stories.tsx +162 -0
- package/src/components/Form/FormGroup.tsx +53 -0
- package/src/components/Form/Input.stories.tsx +106 -0
- package/src/components/Form/Input.tsx +87 -0
- package/src/components/Form/Radio.stories.tsx +94 -0
- package/src/components/Form/Radio.tsx +65 -0
- package/src/components/Form/Select.stories.tsx +151 -0
- package/src/components/Form/Select.tsx +191 -0
- package/src/components/Form/Textarea.stories.tsx +123 -0
- package/src/components/Form/Textarea.tsx +78 -0
- package/src/components/Form/index.ts +7 -0
- package/src/components/Hero/Hero.stories.tsx +295 -0
- package/src/components/Hero/Hero.tsx +175 -0
- package/src/components/Hero/index.ts +6 -0
- package/src/components/Icon/Icon.tsx +87 -0
- package/src/components/Icon/index.ts +2 -0
- package/src/components/List/List.stories.tsx +122 -0
- package/src/components/List/List.tsx +35 -0
- package/src/components/List/ListGroup.tsx +35 -0
- package/src/components/List/index.ts +2 -0
- package/src/components/Messages/Messages.stories.tsx +160 -0
- package/src/components/Messages/Messages.tsx +172 -0
- package/src/components/Messages/index.ts +3 -0
- package/src/components/Modal/Modal.stories.tsx +284 -0
- package/src/components/Modal/Modal.tsx +198 -0
- package/src/components/Modal/README.md +169 -0
- package/src/components/Modal/index.ts +1 -0
- package/src/components/Navigation/Menu/MegaMenu.tsx +109 -0
- package/src/components/Navigation/Menu/Menu.stories.tsx +339 -0
- package/src/components/Navigation/Menu/Menu.tsx +111 -0
- package/src/components/Navigation/Nav/Nav.stories.tsx +456 -0
- package/src/components/Navigation/Nav/Nav.tsx +51 -0
- package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
- package/src/components/Navigation/Nav/NavItem.tsx +168 -0
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +569 -0
- 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 +609 -0
- package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +103 -0
- package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
- package/src/components/Navigation/index.ts +23 -0
- package/src/components/Pagination/Pagination.stories.tsx +188 -0
- package/src/components/Pagination/Pagination.tsx +162 -0
- package/src/components/Pagination/index.ts +1 -0
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +397 -0
- package/src/components/PhotoViewer/PhotoViewer.tsx +246 -0
- package/src/components/PhotoViewer/PhotoViewerHeader.tsx +184 -0
- package/src/components/PhotoViewer/PhotoViewerImage.tsx +173 -0
- package/src/components/PhotoViewer/PhotoViewerInfo.tsx +91 -0
- package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +85 -0
- package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +63 -0
- package/src/components/PhotoViewer/README.md +358 -0
- package/src/components/PhotoViewer/examples/ImageGallery.tsx +187 -0
- package/src/components/PhotoViewer/examples/SimpleGallery.tsx +73 -0
- package/src/components/PhotoViewer/examples/index.ts +2 -0
- package/src/components/PhotoViewer/index.ts +14 -0
- package/src/components/Popover/Popover.stories.tsx +143 -0
- package/src/components/Popover/Popover.tsx +137 -0
- package/src/components/Popover/index.ts +5 -0
- package/src/components/Popover/readme.md +120 -0
- package/src/components/ProductReview/ProductReview.stories.tsx +88 -0
- package/src/components/ProductReview/ProductReview.tsx +169 -0
- package/src/components/ProductReview/index.ts +3 -0
- package/src/components/Progress/Progress.stories.tsx +75 -0
- package/src/components/Progress/Progress.tsx +45 -0
- package/src/components/Progress/index.ts +1 -0
- package/src/components/Rating/Rating.stories.tsx +109 -0
- package/src/components/Rating/Rating.tsx +286 -0
- package/src/components/Rating/index.ts +6 -0
- package/src/components/River/River.stories.tsx +230 -0
- package/src/components/River/River.tsx +134 -0
- package/src/components/River/index.ts +2 -0
- package/src/components/SectionIntro/SectionIntro.stories.tsx +143 -0
- package/src/components/SectionIntro/SectionIntro.tsx +182 -0
- package/src/components/SectionIntro/index.ts +3 -0
- package/src/components/Slider/Slider.stories.tsx +825 -0
- package/src/components/Slider/Slider.tsx +227 -0
- package/src/components/Slider/index.ts +24 -0
- package/src/components/Spinner/Spinner.stories.tsx +65 -0
- package/src/components/Spinner/Spinner.tsx +36 -0
- package/src/components/Spinner/index.ts +2 -0
- package/src/components/Steps/Steps.stories.tsx +158 -0
- package/src/components/Steps/Steps.tsx +115 -0
- package/src/components/Steps/index.ts +3 -0
- package/src/components/Tab/Tab.stories.tsx +129 -0
- package/src/components/Tab/Tab.tsx +111 -0
- package/src/components/Tab/index.ts +2 -0
- package/src/components/Testimonial/Testimonial.stories.tsx +180 -0
- package/src/components/Testimonial/Testimonial.tsx +138 -0
- package/src/components/Testimonial/index.ts +3 -0
- package/src/components/Todo/Todo.stories.tsx +103 -0
- package/src/components/Todo/Todo.tsx +158 -0
- package/src/components/Todo/index.ts +1 -0
- package/src/components/Toggle/Toggle.stories.tsx +49 -0
- package/src/components/Toggle/Toggle.tsx +84 -0
- package/src/components/Toggle/index.ts +2 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +115 -0
- package/src/components/Tooltip/Tooltip.tsx +150 -0
- package/src/components/Tooltip/index.ts +3 -0
- package/src/components/Upload/Upload.stories.tsx +220 -0
- package/src/components/Upload/Upload.tsx +354 -0
- package/src/components/Upload/index.ts +3 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.tsx +484 -0
- package/src/components/VideoPlayer/VideoPlayer.tsx +574 -0
- package/src/components/VideoPlayer/index.ts +7 -0
- package/src/components/index.ts +124 -0
- package/src/layouts/Grid/Container.tsx +58 -0
- package/src/layouts/Grid/Grid.stories.tsx +928 -0
- package/src/layouts/Grid/Grid.tsx +68 -0
- package/src/layouts/Grid/GridCol.tsx +161 -0
- package/src/layouts/Grid/README.md +108 -0
- package/src/layouts/Grid/Row.tsx +70 -0
- package/src/layouts/Grid/index.ts +8 -0
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +387 -0
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +408 -0
- package/src/layouts/MasonryGrid/MasonryGridItem.tsx +44 -0
- package/src/layouts/MasonryGrid/README.md +117 -0
- package/src/layouts/MasonryGrid/index.ts +4 -0
- package/src/layouts/index.ts +7 -0
- package/src/lib/README.md +89 -0
- package/src/lib/composables/index.ts +63 -0
- package/src/lib/composables/useAccordion.ts +129 -0
- package/src/lib/composables/useAmbientMode.ts +90 -0
- package/src/lib/composables/useBadge.ts +42 -0
- package/src/lib/composables/useBarChart.ts +365 -0
- package/src/lib/composables/useBlock.ts +56 -0
- package/src/lib/composables/useBreadcrumb.ts +81 -0
- package/src/lib/composables/useButton.ts +59 -0
- package/src/lib/composables/useCallout.ts +55 -0
- package/src/lib/composables/useCard.ts +155 -0
- package/src/lib/composables/useChart.ts +1082 -0
- package/src/lib/composables/useChartAnalytics.ts +505 -0
- package/src/lib/composables/useChartData.ts +38 -0
- package/src/lib/composables/useChartExport.ts +392 -0
- package/src/lib/composables/useChartInteraction.ts +34 -0
- package/src/lib/composables/useChartInteractions.ts +123 -0
- package/src/lib/composables/useChartPerformance.ts +323 -0
- package/src/lib/composables/useChartScale.ts +48 -0
- package/src/lib/composables/useChartToolbar.ts +532 -0
- package/src/lib/composables/useCheckbox.ts +70 -0
- package/src/lib/composables/useDataTable.ts +208 -0
- package/src/lib/composables/useDatePicker.ts +564 -0
- package/src/lib/composables/useDropdown.ts +272 -0
- package/src/lib/composables/useEdgePanel.ts +261 -0
- package/src/lib/composables/useFooter.ts +85 -0
- package/src/lib/composables/useForm.ts +62 -0
- package/src/lib/composables/useFormGroup.ts +51 -0
- package/src/lib/composables/useHero.ts +250 -0
- package/src/lib/composables/useInput.ts +58 -0
- package/src/lib/composables/useLineChart.ts +319 -0
- package/src/lib/composables/useMessages.ts +77 -0
- package/src/lib/composables/useModal.ts +110 -0
- package/src/lib/composables/useNavbar.ts +288 -0
- package/src/lib/composables/usePagination.ts +101 -0
- package/src/lib/composables/usePhotoViewer.ts +937 -0
- package/src/lib/composables/usePieChart.ts +362 -0
- package/src/lib/composables/usePopover.ts +354 -0
- package/src/lib/composables/useProgress.ts +74 -0
- package/src/lib/composables/useRadio.ts +47 -0
- package/src/lib/composables/useRating.ts +174 -0
- package/src/lib/composables/useRiver.ts +205 -0
- package/src/lib/composables/useSelect.ts +52 -0
- package/src/lib/composables/useSideMenu.ts +197 -0
- package/src/lib/composables/useSlider.ts +526 -0
- package/src/lib/composables/useSpinner.ts +42 -0
- package/src/lib/composables/useTextarea.ts +55 -0
- package/src/lib/composables/useTodo.ts +141 -0
- package/src/lib/composables/useVideoPlayer.ts +398 -0
- package/src/lib/constants/components.ts +1518 -0
- package/src/lib/constants/index.ts +4 -0
- package/src/lib/index.ts +11 -0
- package/src/lib/types/components.ts +5020 -0
- package/src/lib/types/index.ts +2 -0
- package/src/lib/utils/dom.ts +41 -0
- package/src/lib/utils/icons.ts +74 -0
- package/src/lib/utils/index.ts +55 -0
- package/src/lib/utils/useForkRef.test.tsx +64 -0
- package/src/lib/utils/useForkRef.ts +36 -0
- package/src/lib/utils.test.ts +14 -0
- package/src/styles/01-settings/_index.scss +3 -0
- package/src/styles/01-settings/_settings.accordion.scss +22 -19
- package/src/styles/01-settings/_settings.animations.scss +5 -5
- package/src/styles/01-settings/_settings.avatar-group.scss +7 -4
- package/src/styles/01-settings/_settings.avatar.scss +19 -20
- package/src/styles/01-settings/_settings.background.scss +9 -0
- package/src/styles/01-settings/_settings.badge.scss +15 -9
- package/src/styles/01-settings/_settings.block.scss +11 -0
- package/src/styles/01-settings/_settings.border-radius.scss +12 -9
- package/src/styles/01-settings/_settings.border.scss +4 -1
- package/src/styles/01-settings/_settings.box-shadow.scss +1 -1
- package/src/styles/01-settings/_settings.breadcrumb.scss +16 -9
- package/src/styles/01-settings/_settings.breakpoints.scss +0 -0
- package/src/styles/01-settings/_settings.btn-group.scss +4 -1
- package/src/styles/01-settings/_settings.button.scss +19 -21
- package/src/styles/01-settings/_settings.callout.scss +42 -24
- package/src/styles/01-settings/_settings.card.scss +13 -11
- package/src/styles/01-settings/_settings.chart.scss +199 -0
- package/src/styles/01-settings/_settings.checkbox-group.scss +5 -2
- package/src/styles/01-settings/_settings.checkbox.scss +10 -4
- package/src/styles/01-settings/_settings.color-mode.scss +0 -0
- package/src/styles/01-settings/_settings.colors.scss +20 -0
- package/src/styles/01-settings/_settings.config.scss +1 -1
- package/src/styles/01-settings/_settings.countdown.scss +6 -4
- package/src/styles/01-settings/_settings.data-table.scss +0 -0
- package/src/styles/01-settings/_settings.datepicker.scss +0 -0
- package/src/styles/01-settings/_settings.dropdown.scss +9 -7
- package/src/styles/01-settings/_settings.edge-panel.scss +3 -2
- package/src/styles/01-settings/_settings.fonts.scss +1 -1
- package/src/styles/01-settings/_settings.footer.scss +125 -0
- package/src/styles/01-settings/_settings.form-group.scss +3 -1
- package/src/styles/01-settings/_settings.form.scss +4 -2
- package/src/styles/01-settings/_settings.grid.scss +3 -3
- package/src/styles/01-settings/_settings.hero.scss +10 -8
- package/src/styles/01-settings/_settings.input.scss +9 -7
- package/src/styles/01-settings/_settings.link.scss +0 -0
- package/src/styles/01-settings/_settings.list-group.scss +4 -2
- package/src/styles/01-settings/_settings.list.scss +4 -2
- package/src/styles/01-settings/_settings.maps.scss +43 -8
- package/src/styles/01-settings/_settings.masonry-grid.scss +0 -0
- package/src/styles/01-settings/_settings.menu.scss +10 -8
- package/src/styles/01-settings/_settings.messages.scss +19 -17
- package/src/styles/01-settings/_settings.modal.scss +7 -5
- package/src/styles/01-settings/_settings.nav.scss +6 -4
- package/src/styles/01-settings/_settings.navbar.scss +8 -5
- package/src/styles/01-settings/_settings.pagination.scss +5 -3
- package/src/styles/01-settings/_settings.photoviewer.scss +89 -23
- package/src/styles/01-settings/_settings.popover.scss +6 -4
- package/src/styles/01-settings/_settings.position.scss +0 -0
- package/src/styles/01-settings/_settings.progress.scss +0 -0
- package/src/styles/01-settings/_settings.rating.scss +5 -3
- package/src/styles/01-settings/_settings.river.scss +8 -6
- package/src/styles/01-settings/_settings.sectionintro.scss +8 -6
- package/src/styles/01-settings/_settings.select.scss +7 -5
- package/src/styles/01-settings/_settings.side-menu.scss +15 -13
- package/src/styles/01-settings/_settings.skeleton.scss +0 -0
- package/src/styles/01-settings/_settings.slider.scss +59 -0
- package/src/styles/01-settings/_settings.spacing.scss +15 -3
- package/src/styles/01-settings/_settings.spinner.scss +0 -0
- package/src/styles/01-settings/_settings.steps.scss +8 -6
- package/src/styles/01-settings/_settings.tabs.scss +11 -9
- package/src/styles/01-settings/_settings.testimonials.scss +6 -4
- package/src/styles/01-settings/_settings.todo.scss +0 -0
- package/src/styles/01-settings/_settings.toggle.scss +4 -2
- package/src/styles/01-settings/_settings.tooltip.scss +5 -3
- package/src/styles/01-settings/_settings.typography.scss +2 -0
- package/src/styles/01-settings/_settings.upload.scss +22 -20
- package/src/styles/01-settings/_settings.video-player.scss +64 -0
- package/src/styles/01-settings/_settings.z-layers.scss +0 -0
- package/src/styles/02-tools/_index.scss +1 -0
- package/src/styles/02-tools/_tools.animations.scss +82 -0
- package/src/styles/02-tools/_tools.background.scss +85 -0
- package/src/styles/02-tools/_tools.border-radius.scss +0 -0
- package/src/styles/02-tools/_tools.breakpoints.scss +0 -0
- package/src/styles/02-tools/_tools.button.scss +5 -0
- package/src/styles/02-tools/_tools.clearfix.scss +0 -0
- package/src/styles/02-tools/_tools.color-functions.scss +0 -0
- package/src/styles/02-tools/_tools.color-mode.scss +1 -1
- package/src/styles/02-tools/_tools.component.scss +479 -0
- package/src/styles/02-tools/_tools.event.scss +0 -0
- package/src/styles/02-tools/_tools.grid.scss +0 -0
- package/src/styles/02-tools/_tools.hidden-visually.scss +0 -0
- package/src/styles/02-tools/_tools.hidden.scss +0 -0
- package/src/styles/02-tools/_tools.map-loop.scss +0 -0
- package/src/styles/02-tools/_tools.media-queries.scss +0 -0
- package/src/styles/02-tools/_tools.object-fit.scss +0 -0
- package/src/styles/02-tools/_tools.placeholder.scss +0 -0
- package/src/styles/02-tools/_tools.rem.scss +19 -2
- package/src/styles/02-tools/_tools.size.scss +0 -0
- package/src/styles/02-tools/_tools.spacing.scss +0 -0
- package/src/styles/02-tools/_tools.to-rgb.scss +0 -0
- package/src/styles/02-tools/_tools.transition.scss +0 -0
- package/src/styles/02-tools/_tools.utilities.scss +0 -0
- package/src/styles/02-tools/_tools.utility-api.scss +55 -28
- package/src/styles/03-generic/_generic.fonts.scss +0 -0
- package/src/styles/03-generic/_generic.reset.scss +0 -0
- package/src/styles/03-generic/_generic.root.scss +19 -3
- package/src/styles/03-generic/_generic.selection.scss +0 -0
- package/src/styles/03-generic/_index.scss +0 -0
- package/src/styles/04-elements/_elements.all.scss +0 -0
- package/src/styles/04-elements/_elements.body.scss +24 -0
- package/src/styles/04-elements/_elements.heading.scss +0 -0
- package/src/styles/04-elements/_elements.html.scss +0 -0
- package/src/styles/04-elements/_elements.links.scss +0 -0
- package/src/styles/04-elements/_index.scss +0 -0
- package/src/styles/05-objects/_index.scss +1 -0
- package/src/styles/05-objects/_objects.block.scss +122 -0
- package/src/styles/05-objects/_objects.container.scss +14 -10
- package/src/styles/05-objects/_objects.grid.scss +0 -0
- package/src/styles/05-objects/_objects.masonry-grid.scss +0 -0
- package/src/styles/06-components/_components.accordion.scss +10 -4
- package/src/styles/06-components/_components.avatar-group.scss +2 -1
- package/src/styles/06-components/_components.avatar.scss +2 -1
- package/src/styles/06-components/_components.badge.scss +11 -10
- package/src/styles/06-components/_components.breadcrumb.scss +2 -1
- package/src/styles/06-components/_components.btn-group.scss +0 -0
- package/src/styles/06-components/_components.button.scss +4 -3
- package/src/styles/06-components/_components.callout.scss +5 -3
- package/src/styles/06-components/_components.card.scss +4 -3
- package/src/styles/06-components/_components.chart.scss +2103 -0
- package/src/styles/06-components/_components.checkbox-group.scss +0 -0
- package/src/styles/06-components/_components.checkbox.scss +2 -1
- package/src/styles/06-components/_components.color-mode-toggle.scss +3 -2
- package/src/styles/06-components/_components.countdown.scss +2 -1
- package/src/styles/06-components/_components.data-table.scss +7 -6
- package/src/styles/06-components/_components.datepicker.scss +2 -1
- package/src/styles/06-components/_components.dropdown.scss +4 -3
- package/src/styles/06-components/_components.edge-panel.scss +4 -3
- package/src/styles/06-components/_components.footer.scss +825 -0
- package/src/styles/06-components/_components.form-group.scss +1 -0
- package/src/styles/06-components/_components.form.scss +0 -0
- package/src/styles/06-components/_components.hero.scss +4 -2
- package/src/styles/06-components/_components.icon.scss +2 -2
- package/src/styles/06-components/_components.image-gallery.scss +1 -0
- package/src/styles/06-components/_components.input.scss +2 -1
- package/src/styles/06-components/_components.list-group.scss +3 -2
- package/src/styles/06-components/_components.list.scss +2 -1
- package/src/styles/06-components/_components.menu.scss +5 -4
- package/src/styles/06-components/_components.messages.scss +8 -7
- package/src/styles/06-components/_components.modal.scss +6 -2
- package/src/styles/06-components/_components.nav.scss +6 -5
- package/src/styles/06-components/_components.navbar.scss +4 -3
- package/src/styles/06-components/_components.pagination.scss +2 -1
- package/src/styles/06-components/_components.photoviewer.scss +604 -545
- package/src/styles/06-components/_components.popover.scss +3 -2
- package/src/styles/06-components/_components.product-review.scss +3 -2
- package/src/styles/06-components/_components.progress.scss +3 -2
- package/src/styles/06-components/_components.rating.scss +0 -0
- package/src/styles/06-components/_components.river.scss +3 -2
- package/src/styles/06-components/_components.sectionintro.scss +2 -1
- package/src/styles/06-components/_components.select.scss +5 -4
- package/src/styles/06-components/_components.side-menu.scss +8 -7
- package/src/styles/06-components/_components.skeleton.scss +3 -2
- package/src/styles/06-components/_components.slider.scss +274 -0
- package/src/styles/06-components/_components.spinner.scss +1 -0
- package/src/styles/06-components/_components.steps.scss +4 -2
- package/src/styles/06-components/_components.tabs.scss +4 -3
- package/src/styles/06-components/_components.testimonials.scss +2 -1
- package/src/styles/06-components/_components.todo.scss +3 -2
- package/src/styles/06-components/_components.toggle.scss +5 -4
- package/src/styles/06-components/_components.tooltip.scss +7 -11
- package/src/styles/06-components/_components.upload.scss +4 -3
- package/src/styles/06-components/_components.video-player.scss +624 -0
- package/src/styles/06-components/_index.scss +4 -0
- package/src/styles/06-components/old.chart.styles.scss +2819 -0
- package/src/styles/99-utilities/_index.scss +0 -0
- package/src/styles/99-utilities/_utilities.background.scss +0 -0
- package/src/styles/99-utilities/_utilities.border.scss +0 -0
- package/src/styles/99-utilities/_utilities.clearfix.scss +0 -0
- package/src/styles/99-utilities/_utilities.display.scss +0 -0
- package/src/styles/99-utilities/_utilities.flex.scss +0 -0
- package/src/styles/99-utilities/_utilities.link.scss +0 -0
- package/src/styles/99-utilities/_utilities.object-fit.scss +0 -0
- package/src/styles/99-utilities/_utilities.opacity.scss +0 -0
- package/src/styles/99-utilities/_utilities.overflow.scss +0 -0
- package/src/styles/99-utilities/_utilities.position.scss +0 -0
- package/src/styles/99-utilities/_utilities.scss +2 -1
- package/src/styles/99-utilities/_utilities.shadow.scss +0 -0
- package/src/styles/99-utilities/_utilities.sizes.scss +0 -0
- package/src/styles/99-utilities/_utilities.spacing.scss +0 -0
- package/src/styles/99-utilities/_utilities.text.scss +5 -0
- package/src/styles/99-utilities/_utilities.visibility.scss +0 -0
- package/src/styles/99-utilities/_utilities.visually-hidden.scss +0 -0
- package/src/styles/99-utilities/_utilities.z-index.scss +0 -0
- package/src/styles/css-modules.d.ts +0 -0
- package/src/styles/index.scss +0 -0
- package/dist/index.css +0 -15
- package/dist/index.esm.css +0 -15
- package/dist/index.min.css +0 -15
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export type DatePickerViewMode = 'days' | 'months' | 'years';
|
|
4
|
+
|
|
5
|
+
export type DatePickerPlacement =
|
|
6
|
+
| 'top-start'
|
|
7
|
+
| 'top-end'
|
|
8
|
+
| 'bottom-start'
|
|
9
|
+
| 'bottom-end'
|
|
10
|
+
| 'left-start'
|
|
11
|
+
| 'left-end'
|
|
12
|
+
| 'right-start'
|
|
13
|
+
| 'right-end';
|
|
14
|
+
|
|
15
|
+
export type DatePickerSize = 'sm' | 'md' | 'lg';
|
|
16
|
+
|
|
17
|
+
export type DatePickerSelectionMode = 'single' | 'range';
|
|
18
|
+
|
|
19
|
+
export interface DateRange {
|
|
20
|
+
startDate: Date | null;
|
|
21
|
+
endDate: Date | null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface DatePickerProps {
|
|
25
|
+
/**
|
|
26
|
+
* The currently selected date value
|
|
27
|
+
*/
|
|
28
|
+
value?: Date | null;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Callback function when date is changed
|
|
32
|
+
*/
|
|
33
|
+
onChange?: (date: Date | null) => void;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Selection mode - single date or date range
|
|
37
|
+
* @default "single"
|
|
38
|
+
*/
|
|
39
|
+
selectionMode?: DatePickerSelectionMode;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The start date of the range (only used when selectionMode is "range")
|
|
43
|
+
*/
|
|
44
|
+
startDate?: Date | null;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The end date of the range (only used when selectionMode is "range")
|
|
48
|
+
*/
|
|
49
|
+
endDate?: Date | null;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Callback function when date range is changed
|
|
53
|
+
*/
|
|
54
|
+
onRangeChange?: (range: DateRange) => void;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Format for the date display (follows Intl.DateTimeFormat patterns)
|
|
58
|
+
* @default "MM/dd/yyyy"
|
|
59
|
+
*/
|
|
60
|
+
format?: string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Minimum selectable date
|
|
64
|
+
*/
|
|
65
|
+
minDate?: Date;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Maximum selectable date
|
|
69
|
+
*/
|
|
70
|
+
maxDate?: Date;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Placeholder text for the input
|
|
74
|
+
* @default "Select date..."
|
|
75
|
+
*/
|
|
76
|
+
placeholder?: string;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Whether the datepicker is disabled
|
|
80
|
+
* @default false
|
|
81
|
+
*/
|
|
82
|
+
disabled?: boolean;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Whether the datepicker is read-only
|
|
86
|
+
* @default false
|
|
87
|
+
*/
|
|
88
|
+
readOnly?: boolean;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Whether to show a clear button
|
|
92
|
+
* @default true
|
|
93
|
+
*/
|
|
94
|
+
clearable?: boolean;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Whether to show the "Today" button
|
|
98
|
+
* @default true
|
|
99
|
+
*/
|
|
100
|
+
showTodayButton?: boolean;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Whether to show week numbers
|
|
104
|
+
* @default false
|
|
105
|
+
*/
|
|
106
|
+
showWeekNumbers?: boolean;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether to display the datepicker inline (always visible)
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
112
|
+
inline?: boolean;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* ID for the input element
|
|
116
|
+
*/
|
|
117
|
+
id?: string;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Name for the input element
|
|
121
|
+
*/
|
|
122
|
+
name?: string;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Additional class name for the datepicker component
|
|
126
|
+
*/
|
|
127
|
+
className?: string;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Placement of the dropdown calendar
|
|
131
|
+
* @default "bottom-start"
|
|
132
|
+
*/
|
|
133
|
+
placement?: DatePickerPlacement;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Additional class name for the input element
|
|
137
|
+
*/
|
|
138
|
+
inputClassName?: string;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Size of the input field
|
|
142
|
+
* @default "md"
|
|
143
|
+
*/
|
|
144
|
+
size?: DatePickerSize;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export interface DatePickerRef {
|
|
148
|
+
/**
|
|
149
|
+
* Open the datepicker
|
|
150
|
+
*/
|
|
151
|
+
open: () => void;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Close the datepicker
|
|
155
|
+
*/
|
|
156
|
+
close: () => void;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Clear the selected date
|
|
160
|
+
*/
|
|
161
|
+
clear: () => void;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Set focus on the input element
|
|
165
|
+
*/
|
|
166
|
+
focus: () => void;
|
|
167
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the name of a month by its index (0-11)
|
|
3
|
+
*/
|
|
4
|
+
export function getMonthName(month: number): string {
|
|
5
|
+
const date = new Date();
|
|
6
|
+
date.setMonth(month);
|
|
7
|
+
|
|
8
|
+
return date.toLocaleString('default', { month: 'long' });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the number of days in a month
|
|
13
|
+
*/
|
|
14
|
+
export function getDaysInMonth(year: number, month: number): number {
|
|
15
|
+
return new Date(year, month + 1, 0).getDate();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get the day of the week of the first day of a month (0-6, where 0 is Sunday)
|
|
20
|
+
*/
|
|
21
|
+
export function getFirstDayOfMonth(year: number, month: number): number {
|
|
22
|
+
return new Date(year, month, 1).getDay();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Format a date according to the specified format
|
|
27
|
+
*/
|
|
28
|
+
export function formatDate(date: Date, format: string): string {
|
|
29
|
+
if (!date) return '';
|
|
30
|
+
|
|
31
|
+
const day = date.getDate();
|
|
32
|
+
const month = date.getMonth() + 1;
|
|
33
|
+
const year = date.getFullYear();
|
|
34
|
+
|
|
35
|
+
// Simple formatting for the most common patterns
|
|
36
|
+
return format
|
|
37
|
+
.replace('yyyy', year.toString())
|
|
38
|
+
.replace('MM', month.toString().padStart(2, '0'))
|
|
39
|
+
.replace('M', month.toString())
|
|
40
|
+
.replace('dd', day.toString().padStart(2, '0'))
|
|
41
|
+
.replace('d', day.toString());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Format a date range for display
|
|
46
|
+
*/
|
|
47
|
+
export function formatDateRange(
|
|
48
|
+
startDate: Date | null,
|
|
49
|
+
endDate: Date | null,
|
|
50
|
+
format: string
|
|
51
|
+
): string {
|
|
52
|
+
if (!startDate) return '';
|
|
53
|
+
|
|
54
|
+
if (!endDate) {
|
|
55
|
+
return `${formatDate(startDate, format)} - Select end date`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Parse a date string according to the specified format
|
|
63
|
+
*/
|
|
64
|
+
export function parseDate(dateStr: string, format: string): Date | null {
|
|
65
|
+
if (!dateStr) return null;
|
|
66
|
+
|
|
67
|
+
// Simple parsing for common formats
|
|
68
|
+
const normalized = format.toLowerCase();
|
|
69
|
+
|
|
70
|
+
if (normalized === 'mm/dd/yyyy') {
|
|
71
|
+
const parts = dateStr.split('/');
|
|
72
|
+
if (parts.length !== 3) return null;
|
|
73
|
+
|
|
74
|
+
const monthStr = parts[0];
|
|
75
|
+
const dayStr = parts[1];
|
|
76
|
+
const yearStr = parts[2];
|
|
77
|
+
|
|
78
|
+
if (!monthStr || !dayStr || !yearStr) return null;
|
|
79
|
+
|
|
80
|
+
const month = parseInt(monthStr, 10) - 1;
|
|
81
|
+
const day = parseInt(dayStr, 10);
|
|
82
|
+
const year = parseInt(yearStr, 10);
|
|
83
|
+
|
|
84
|
+
if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
|
|
85
|
+
|
|
86
|
+
return new Date(year, month, day);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (normalized === 'dd/mm/yyyy') {
|
|
90
|
+
const parts = dateStr.split('/');
|
|
91
|
+
if (parts.length !== 3) return null;
|
|
92
|
+
|
|
93
|
+
const dayStr = parts[0];
|
|
94
|
+
const monthStr = parts[1];
|
|
95
|
+
const yearStr = parts[2];
|
|
96
|
+
|
|
97
|
+
if (!dayStr || !monthStr || !yearStr) return null;
|
|
98
|
+
|
|
99
|
+
const day = parseInt(dayStr, 10);
|
|
100
|
+
const month = parseInt(monthStr, 10) - 1;
|
|
101
|
+
const year = parseInt(yearStr, 10);
|
|
102
|
+
|
|
103
|
+
if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
|
|
104
|
+
|
|
105
|
+
return new Date(year, month, day);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (normalized === 'yyyy-mm-dd') {
|
|
109
|
+
const parts = dateStr.split('-');
|
|
110
|
+
if (parts.length !== 3) return null;
|
|
111
|
+
|
|
112
|
+
const yearStr = parts[0];
|
|
113
|
+
const monthStr = parts[1];
|
|
114
|
+
const dayStr = parts[2];
|
|
115
|
+
|
|
116
|
+
if (!yearStr || !monthStr || !dayStr) return null;
|
|
117
|
+
|
|
118
|
+
const year = parseInt(yearStr, 10);
|
|
119
|
+
const month = parseInt(monthStr, 10) - 1;
|
|
120
|
+
const day = parseInt(dayStr, 10);
|
|
121
|
+
|
|
122
|
+
if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
|
|
123
|
+
|
|
124
|
+
return new Date(year, month, day);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Fallback to native parsing
|
|
128
|
+
const parsedDate = new Date(dateStr);
|
|
129
|
+
return isNaN(parsedDate.getTime()) ? null : parsedDate;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Try to parse a date range string (e.g. "01/01/2023 - 01/15/2023")
|
|
134
|
+
*/
|
|
135
|
+
export function parseDateRange(
|
|
136
|
+
rangeStr: string,
|
|
137
|
+
format: string
|
|
138
|
+
): { startDate: Date | null; endDate: Date | null } {
|
|
139
|
+
if (!rangeStr) return { startDate: null, endDate: null };
|
|
140
|
+
|
|
141
|
+
const parts = rangeStr.split('-');
|
|
142
|
+
if (parts.length !== 2) return { startDate: null, endDate: null };
|
|
143
|
+
|
|
144
|
+
const startDateStr = parts[0]?.trim();
|
|
145
|
+
const endDateStr = parts[1]?.trim();
|
|
146
|
+
|
|
147
|
+
if (!startDateStr || !endDateStr) {
|
|
148
|
+
return { startDate: null, endDate: null };
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const startDate = parseDate(startDateStr, format);
|
|
152
|
+
const endDate = parseDate(endDateStr, format);
|
|
153
|
+
|
|
154
|
+
return { startDate, endDate };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Check if a date is within a min and max range
|
|
159
|
+
*/
|
|
160
|
+
export function isDateInRange(date: Date, minDate?: Date, maxDate?: Date): boolean {
|
|
161
|
+
if (!date) return false;
|
|
162
|
+
|
|
163
|
+
if (minDate && date < minDate) return false;
|
|
164
|
+
if (maxDate && date > maxDate) return false;
|
|
165
|
+
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Check if a date is between startDate and endDate (inclusive)
|
|
171
|
+
*/
|
|
172
|
+
export function isDateInSelectedRange(
|
|
173
|
+
date: Date,
|
|
174
|
+
startDate: Date | null,
|
|
175
|
+
endDate: Date | null
|
|
176
|
+
): boolean {
|
|
177
|
+
if (!date || !startDate || !endDate) return false;
|
|
178
|
+
|
|
179
|
+
// Handle case where end date is before start date
|
|
180
|
+
if (endDate < startDate) {
|
|
181
|
+
return date >= endDate && date <= startDate;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return date >= startDate && date <= endDate;
|
|
185
|
+
}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { ThemeColor } from '../../lib/types/components';
|
|
4
|
+
import { Icon } from '../Icon';
|
|
5
|
+
import { Dropdown, DropdownDivider, DropdownHeader, DropdownItem } from './index';
|
|
6
|
+
|
|
7
|
+
const meta: Meta<typeof Dropdown> = {
|
|
8
|
+
title: 'Components/Dropdown',
|
|
9
|
+
component: Dropdown,
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'centered',
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component:
|
|
15
|
+
'Dropdown component with a toggleable menu. The dropdown menu appears on click or hover, depending on the trigger prop.',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
argTypes: {
|
|
20
|
+
placement: {
|
|
21
|
+
control: 'select',
|
|
22
|
+
options: [
|
|
23
|
+
'bottom-start',
|
|
24
|
+
'bottom-end',
|
|
25
|
+
'top-start',
|
|
26
|
+
'top-end',
|
|
27
|
+
'left-start',
|
|
28
|
+
'left-end',
|
|
29
|
+
'right-start',
|
|
30
|
+
'right-end',
|
|
31
|
+
],
|
|
32
|
+
description: 'The placement of the dropdown menu relative to the trigger element',
|
|
33
|
+
},
|
|
34
|
+
trigger: {
|
|
35
|
+
control: 'radio',
|
|
36
|
+
options: ['click', 'hover'],
|
|
37
|
+
description: 'How the dropdown is triggered - by click or hover',
|
|
38
|
+
},
|
|
39
|
+
variant: {
|
|
40
|
+
control: 'select',
|
|
41
|
+
options: [
|
|
42
|
+
'primary',
|
|
43
|
+
'secondary',
|
|
44
|
+
'tertiary',
|
|
45
|
+
'success',
|
|
46
|
+
'info',
|
|
47
|
+
'warning',
|
|
48
|
+
'error',
|
|
49
|
+
'light',
|
|
50
|
+
'dark',
|
|
51
|
+
],
|
|
52
|
+
description: 'The color variant of the dropdown',
|
|
53
|
+
},
|
|
54
|
+
minWidth: {
|
|
55
|
+
control: 'text',
|
|
56
|
+
description: 'Minimum width of the dropdown menu',
|
|
57
|
+
},
|
|
58
|
+
maxHeight: {
|
|
59
|
+
control: 'text',
|
|
60
|
+
description: 'Maximum height of the dropdown menu',
|
|
61
|
+
},
|
|
62
|
+
closeOnClickOutside: {
|
|
63
|
+
control: 'boolean',
|
|
64
|
+
description: 'Whether to close the dropdown when clicking outside',
|
|
65
|
+
},
|
|
66
|
+
closeOnEscape: {
|
|
67
|
+
control: 'boolean',
|
|
68
|
+
description: 'Whether to close the dropdown when pressing the Escape key',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default meta;
|
|
74
|
+
type Story = StoryObj<typeof Dropdown>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Interactive dropdown component that can be used in Storybook
|
|
78
|
+
*/
|
|
79
|
+
const InteractiveDropdown = (args: React.ComponentProps<typeof Dropdown>) => {
|
|
80
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<div
|
|
84
|
+
className="u-p-4"
|
|
85
|
+
style={{ minHeight: '300px', display: 'flex', alignItems: 'flex-start' }}
|
|
86
|
+
>
|
|
87
|
+
<Dropdown {...args} isOpen={isOpen} onOpenChange={setIsOpen} />
|
|
88
|
+
</div>
|
|
89
|
+
);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Basic dropdown example with default settings
|
|
94
|
+
*/
|
|
95
|
+
export const Default: Story = {
|
|
96
|
+
args: {
|
|
97
|
+
trigger: 'click',
|
|
98
|
+
placement: 'bottom-start',
|
|
99
|
+
children: (
|
|
100
|
+
<button className="c-btn c-btn--primary">
|
|
101
|
+
Dropdown <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
|
|
102
|
+
</button>
|
|
103
|
+
),
|
|
104
|
+
menu: (
|
|
105
|
+
<>
|
|
106
|
+
<DropdownItem>Menu item 1</DropdownItem>
|
|
107
|
+
<DropdownItem>Menu item 2</DropdownItem>
|
|
108
|
+
<DropdownItem>Menu item 3</DropdownItem>
|
|
109
|
+
</>
|
|
110
|
+
),
|
|
111
|
+
},
|
|
112
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Dropdown that opens on click
|
|
117
|
+
*/
|
|
118
|
+
export const ClickTrigger: Story = {
|
|
119
|
+
args: {
|
|
120
|
+
...Default.args,
|
|
121
|
+
trigger: 'click',
|
|
122
|
+
},
|
|
123
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Dropdown that opens on hover
|
|
128
|
+
*/
|
|
129
|
+
export const HoverTrigger: Story = {
|
|
130
|
+
args: {
|
|
131
|
+
...Default.args,
|
|
132
|
+
trigger: 'hover',
|
|
133
|
+
},
|
|
134
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Dropdown menu items with icons
|
|
139
|
+
*/
|
|
140
|
+
export const WithIcons: Story = {
|
|
141
|
+
args: {
|
|
142
|
+
...Default.args,
|
|
143
|
+
menu: (
|
|
144
|
+
<>
|
|
145
|
+
<DropdownItem icon={<Icon name="House" size="sm" />}>Home</DropdownItem>
|
|
146
|
+
<DropdownItem icon={<Icon name="User" size="sm" />}>Profile</DropdownItem>
|
|
147
|
+
<DropdownItem icon={<Icon name="Gear" size="sm" />}>Settings</DropdownItem>
|
|
148
|
+
<DropdownItem icon={<Icon name="SignOut" size="sm" />}>Logout</DropdownItem>
|
|
149
|
+
</>
|
|
150
|
+
),
|
|
151
|
+
},
|
|
152
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Dropdown menu items as links
|
|
157
|
+
*/
|
|
158
|
+
export const WithLinks: Story = {
|
|
159
|
+
args: {
|
|
160
|
+
...Default.args,
|
|
161
|
+
menu: (
|
|
162
|
+
<>
|
|
163
|
+
<DropdownItem href="#home">Home</DropdownItem>
|
|
164
|
+
<DropdownItem href="#about">About</DropdownItem>
|
|
165
|
+
<DropdownItem href="#services">Services</DropdownItem>
|
|
166
|
+
<DropdownItem href="#contact">Contact</DropdownItem>
|
|
167
|
+
</>
|
|
168
|
+
),
|
|
169
|
+
},
|
|
170
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Dropdown with section headers and dividers
|
|
175
|
+
*/
|
|
176
|
+
export const WithHeader: Story = {
|
|
177
|
+
args: {
|
|
178
|
+
...Default.args,
|
|
179
|
+
menu: (
|
|
180
|
+
<>
|
|
181
|
+
<DropdownHeader>Account Options</DropdownHeader>
|
|
182
|
+
<DropdownItem>Profile</DropdownItem>
|
|
183
|
+
<DropdownItem>Settings</DropdownItem>
|
|
184
|
+
<DropdownDivider />
|
|
185
|
+
<DropdownHeader>Help & Support</DropdownHeader>
|
|
186
|
+
<DropdownItem>Documentation</DropdownItem>
|
|
187
|
+
<DropdownItem>Contact Support</DropdownItem>
|
|
188
|
+
</>
|
|
189
|
+
),
|
|
190
|
+
},
|
|
191
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Dropdown with an active menu item
|
|
196
|
+
*/
|
|
197
|
+
export const ActiveItem: Story = {
|
|
198
|
+
args: {
|
|
199
|
+
...Default.args,
|
|
200
|
+
menu: (
|
|
201
|
+
<>
|
|
202
|
+
<DropdownItem active>Active Item</DropdownItem>
|
|
203
|
+
<DropdownItem>Regular Item</DropdownItem>
|
|
204
|
+
<DropdownItem>Regular Item</DropdownItem>
|
|
205
|
+
</>
|
|
206
|
+
),
|
|
207
|
+
},
|
|
208
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Dropdown with a disabled menu item
|
|
213
|
+
*/
|
|
214
|
+
export const DisabledItem: Story = {
|
|
215
|
+
args: {
|
|
216
|
+
...Default.args,
|
|
217
|
+
menu: (
|
|
218
|
+
<>
|
|
219
|
+
<DropdownItem>Regular Item</DropdownItem>
|
|
220
|
+
<DropdownItem disabled>Disabled Item</DropdownItem>
|
|
221
|
+
<DropdownItem>Regular Item</DropdownItem>
|
|
222
|
+
</>
|
|
223
|
+
),
|
|
224
|
+
},
|
|
225
|
+
render: args => <InteractiveDropdown {...args} />,
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Shows all possible dropdown placement options
|
|
230
|
+
*/
|
|
231
|
+
export const AllPlacements: Story = {
|
|
232
|
+
parameters: {
|
|
233
|
+
docs: {
|
|
234
|
+
description: {
|
|
235
|
+
story:
|
|
236
|
+
'The Dropdown component supports various placement options to position the menu relative to the trigger element.',
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
render: () => {
|
|
241
|
+
// All possible placement options with properly typed icon names
|
|
242
|
+
const placements = [
|
|
243
|
+
{ value: 'bottom-start', label: 'Bottom Start', icon: 'CaretDown' as const },
|
|
244
|
+
{ value: 'bottom-end', label: 'Bottom End', icon: 'CaretDown' as const },
|
|
245
|
+
{ value: 'top-start', label: 'Top Start', icon: 'CaretUp' as const },
|
|
246
|
+
{ value: 'top-end', label: 'Top End', icon: 'CaretUp' as const },
|
|
247
|
+
{ value: 'left-start', label: 'Left Start', icon: 'CaretLeft' as const },
|
|
248
|
+
{ value: 'left-end', label: 'Left End', icon: 'CaretLeft' as const },
|
|
249
|
+
{ value: 'right-start', label: 'Right Start', icon: 'CaretRight' as const },
|
|
250
|
+
{ value: 'right-end', label: 'Right End', icon: 'CaretRight' as const },
|
|
251
|
+
];
|
|
252
|
+
|
|
253
|
+
// Create a grid layout with plenty of space for dropdowns to display correctly
|
|
254
|
+
return (
|
|
255
|
+
<div className="u-p-5" style={{ height: '650px' }}>
|
|
256
|
+
<div
|
|
257
|
+
className="u-d-grid"
|
|
258
|
+
style={{
|
|
259
|
+
gridTemplateColumns: 'repeat(4, 1fr)',
|
|
260
|
+
gridTemplateRows: 'repeat(2, 1fr)',
|
|
261
|
+
gap: '1.5rem',
|
|
262
|
+
height: '100%',
|
|
263
|
+
}}
|
|
264
|
+
>
|
|
265
|
+
{placements.map(placement => (
|
|
266
|
+
<div
|
|
267
|
+
key={placement.value}
|
|
268
|
+
className="u-d-flex u-align-items-center u-justify-content-center"
|
|
269
|
+
>
|
|
270
|
+
<Dropdown
|
|
271
|
+
trigger="click"
|
|
272
|
+
placement={placement.value as any}
|
|
273
|
+
defaultOpen={true}
|
|
274
|
+
closeOnClickOutside={false}
|
|
275
|
+
closeOnEscape={false}
|
|
276
|
+
children={
|
|
277
|
+
<button className="c-btn c-btn--primary">
|
|
278
|
+
{placement.label}{' '}
|
|
279
|
+
<Icon name={placement.icon} className="c-dropdown__toggle-icon" size="sm" />
|
|
280
|
+
</button>
|
|
281
|
+
}
|
|
282
|
+
menu={
|
|
283
|
+
<>
|
|
284
|
+
<DropdownItem>Menu item 1</DropdownItem>
|
|
285
|
+
<DropdownItem>Menu item 2</DropdownItem>
|
|
286
|
+
<DropdownItem>Menu item 3</DropdownItem>
|
|
287
|
+
</>
|
|
288
|
+
}
|
|
289
|
+
/>
|
|
290
|
+
</div>
|
|
291
|
+
))}
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
);
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Dropdown with all color variants
|
|
300
|
+
*/
|
|
301
|
+
export const AllVariants: Story = {
|
|
302
|
+
parameters: {
|
|
303
|
+
docs: {
|
|
304
|
+
description: {
|
|
305
|
+
story:
|
|
306
|
+
'The Dropdown component supports various color variants to match your design system.',
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
render: () => {
|
|
311
|
+
const [openDropdown, setOpenDropdown] = useState<string | null>(null);
|
|
312
|
+
|
|
313
|
+
const handleOpenChange = (variant: string, isOpen: boolean) => {
|
|
314
|
+
if (isOpen) {
|
|
315
|
+
setOpenDropdown(variant);
|
|
316
|
+
} else if (openDropdown === variant) {
|
|
317
|
+
setOpenDropdown(null);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
return (
|
|
322
|
+
<div className="u-p-4" style={{ minHeight: '300px' }}>
|
|
323
|
+
<div className="u-d-flex u-flex-wrap u-gap-3">
|
|
324
|
+
{[
|
|
325
|
+
'primary',
|
|
326
|
+
'secondary',
|
|
327
|
+
'tertiary',
|
|
328
|
+
'success',
|
|
329
|
+
'info',
|
|
330
|
+
'warning',
|
|
331
|
+
'error',
|
|
332
|
+
'light',
|
|
333
|
+
'dark',
|
|
334
|
+
].map(color => (
|
|
335
|
+
<Dropdown
|
|
336
|
+
key={color}
|
|
337
|
+
variant={color as ThemeColor}
|
|
338
|
+
trigger="click"
|
|
339
|
+
isOpen={openDropdown === color}
|
|
340
|
+
onOpenChange={isOpen => handleOpenChange(color, isOpen)}
|
|
341
|
+
children={
|
|
342
|
+
<button className={`c-btn c-btn--${color}`}>
|
|
343
|
+
{color} <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
|
|
344
|
+
</button>
|
|
345
|
+
}
|
|
346
|
+
menu={
|
|
347
|
+
<>
|
|
348
|
+
<DropdownItem>Menu item 1</DropdownItem>
|
|
349
|
+
<DropdownItem>Menu item 2</DropdownItem>
|
|
350
|
+
</>
|
|
351
|
+
}
|
|
352
|
+
/>
|
|
353
|
+
))}
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
);
|
|
357
|
+
},
|
|
358
|
+
};
|