@shohojdhara/atomix 0.1.30 → 0.2.1
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 +151 -39
- package/dist/atomix.css +13529 -0
- package/dist/atomix.min.css +15 -0
- package/dist/index.d.ts +6112 -1757
- package/dist/index.esm.js +16852 -8364
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +16892 -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 +13241 -0
- package/dist/themes/boomdevs.min.css +353 -0
- package/dist/themes/esrar.css +15374 -0
- package/dist/themes/esrar.min.css +189 -0
- package/dist/themes/mashroom.css +28079 -0
- package/dist/themes/mashroom.min.css +403 -0
- package/dist/themes/shaj-default.css +14203 -0
- package/dist/themes/shaj-default.min.css +500 -0
- package/dist/themes/yabai.css +13711 -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/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 +184 -0
- package/src/components/SectionIntro/index.ts +3 -0
- package/src/components/Slider/Slider.stories.tsx +241 -0
- package/src/components/Slider/Slider.tsx +225 -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 +111 -0
- package/src/layouts/Grid/Container.tsx +58 -0
- package/src/layouts/Grid/Grid.stories.tsx +861 -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/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 +339 -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 +1433 -0
- package/src/lib/constants/index.ts +4 -0
- package/src/lib/index.ts +11 -0
- package/src/lib/types/components.ts +4750 -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 +2 -0
- package/src/styles/01-settings/_settings.accordion.scss +7 -5
- package/src/styles/01-settings/_settings.animations.scss +0 -0
- package/src/styles/01-settings/_settings.avatar-group.scss +6 -3
- package/src/styles/01-settings/_settings.avatar.scss +2 -2
- 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 +9 -8
- 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 +12 -10
- package/src/styles/01-settings/_settings.chart.scss +199 -0
- package/src/styles/01-settings/_settings.checkbox-group.scss +0 -0
- package/src/styles/01-settings/_settings.checkbox.scss +0 -0
- 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 +0 -0
- 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 +0 -0
- package/src/styles/01-settings/_settings.edge-panel.scss +0 -0
- package/src/styles/01-settings/_settings.fonts.scss +1 -1
- package/src/styles/01-settings/_settings.form-group.scss +0 -0
- package/src/styles/01-settings/_settings.form.scss +0 -0
- package/src/styles/01-settings/_settings.grid.scss +3 -3
- package/src/styles/01-settings/_settings.hero.scss +1 -1
- package/src/styles/01-settings/_settings.input.scss +1 -1
- package/src/styles/01-settings/_settings.link.scss +0 -0
- package/src/styles/01-settings/_settings.list-group.scss +0 -0
- package/src/styles/01-settings/_settings.list.scss +0 -0
- 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 +0 -0
- package/src/styles/01-settings/_settings.messages.scss +0 -0
- package/src/styles/01-settings/_settings.modal.scss +1 -1
- package/src/styles/01-settings/_settings.nav.scss +0 -0
- package/src/styles/01-settings/_settings.navbar.scss +0 -0
- package/src/styles/01-settings/_settings.pagination.scss +0 -0
- package/src/styles/01-settings/_settings.photoviewer.scss +89 -23
- package/src/styles/01-settings/_settings.popover.scss +0 -0
- 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 +0 -0
- package/src/styles/01-settings/_settings.river.scss +0 -0
- package/src/styles/01-settings/_settings.sectionintro.scss +0 -0
- package/src/styles/01-settings/_settings.select.scss +0 -0
- package/src/styles/01-settings/_settings.side-menu.scss +0 -0
- 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 +11 -3
- package/src/styles/01-settings/_settings.spinner.scss +0 -0
- package/src/styles/01-settings/_settings.steps.scss +1 -1
- package/src/styles/01-settings/_settings.tabs.scss +4 -4
- package/src/styles/01-settings/_settings.testimonials.scss +0 -0
- package/src/styles/01-settings/_settings.todo.scss +0 -0
- package/src/styles/01-settings/_settings.toggle.scss +1 -1
- package/src/styles/01-settings/_settings.tooltip.scss +0 -0
- package/src/styles/01-settings/_settings.typography.scss +2 -0
- package/src/styles/01-settings/_settings.upload.scss +0 -0
- 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.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 +5 -1
- 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 +23 -2
- 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 +5 -1
- 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 +0 -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 +3 -1
- package/src/styles/06-components/_components.avatar-group.scss +0 -0
- package/src/styles/06-components/_components.avatar.scss +0 -0
- package/src/styles/06-components/_components.badge.scss +9 -9
- package/src/styles/06-components/_components.breadcrumb.scss +0 -0
- package/src/styles/06-components/_components.btn-group.scss +0 -0
- package/src/styles/06-components/_components.button.scss +0 -0
- package/src/styles/06-components/_components.callout.scss +2 -1
- package/src/styles/06-components/_components.card.scss +0 -1
- package/src/styles/06-components/_components.chart.scss +2102 -0
- package/src/styles/06-components/_components.checkbox-group.scss +0 -0
- package/src/styles/06-components/_components.checkbox.scss +0 -0
- package/src/styles/06-components/_components.color-mode-toggle.scss +0 -0
- package/src/styles/06-components/_components.countdown.scss +0 -0
- package/src/styles/06-components/_components.data-table.scss +0 -0
- package/src/styles/06-components/_components.datepicker.scss +0 -0
- package/src/styles/06-components/_components.dropdown.scss +0 -0
- package/src/styles/06-components/_components.edge-panel.scss +0 -0
- package/src/styles/06-components/_components.form-group.scss +0 -0
- package/src/styles/06-components/_components.form.scss +0 -0
- package/src/styles/06-components/_components.hero.scss +1 -0
- package/src/styles/06-components/_components.icon.scss +2 -2
- package/src/styles/06-components/_components.image-gallery.scss +0 -0
- package/src/styles/06-components/_components.input.scss +0 -0
- package/src/styles/06-components/_components.list-group.scss +0 -0
- package/src/styles/06-components/_components.list.scss +0 -0
- package/src/styles/06-components/_components.menu.scss +0 -0
- package/src/styles/06-components/_components.messages.scss +0 -0
- package/src/styles/06-components/_components.modal.scss +3 -0
- package/src/styles/06-components/_components.nav.scss +0 -0
- package/src/styles/06-components/_components.navbar.scss +0 -0
- package/src/styles/06-components/_components.pagination.scss +0 -0
- package/src/styles/06-components/_components.photoviewer.scss +603 -545
- package/src/styles/06-components/_components.popover.scss +0 -0
- package/src/styles/06-components/_components.product-review.scss +0 -0
- package/src/styles/06-components/_components.progress.scss +0 -0
- package/src/styles/06-components/_components.rating.scss +0 -0
- package/src/styles/06-components/_components.river.scss +0 -0
- package/src/styles/06-components/_components.sectionintro.scss +0 -0
- package/src/styles/06-components/_components.select.scss +0 -0
- package/src/styles/06-components/_components.side-menu.scss +0 -0
- package/src/styles/06-components/_components.skeleton.scss +0 -0
- package/src/styles/06-components/_components.slider.scss +273 -0
- package/src/styles/06-components/_components.spinner.scss +0 -0
- package/src/styles/06-components/_components.steps.scss +1 -0
- package/src/styles/06-components/_components.tabs.scss +0 -0
- package/src/styles/06-components/_components.testimonials.scss +0 -0
- package/src/styles/06-components/_components.todo.scss +0 -0
- package/src/styles/06-components/_components.toggle.scss +0 -0
- package/src/styles/06-components/_components.tooltip.scss +4 -9
- package/src/styles/06-components/_components.upload.scss +0 -0
- package/src/styles/06-components/_components.video-player.scss +623 -0
- package/src/styles/06-components/_index.scss +3 -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,191 @@
|
|
|
1
|
+
import React, { useRef, useEffect, useState } from 'react';
|
|
2
|
+
import { SelectProps } from '../../lib/types/components';
|
|
3
|
+
import { useSelect } from '../../lib/composables';
|
|
4
|
+
import { SELECT } from '../../lib/constants/components';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Select - A component for dropdown selection
|
|
8
|
+
*/
|
|
9
|
+
export const Select: React.FC<SelectProps> = ({
|
|
10
|
+
options = [],
|
|
11
|
+
value,
|
|
12
|
+
onChange,
|
|
13
|
+
onBlur,
|
|
14
|
+
onFocus,
|
|
15
|
+
placeholder = 'Select an option',
|
|
16
|
+
className = '',
|
|
17
|
+
disabled = false,
|
|
18
|
+
required = false,
|
|
19
|
+
id,
|
|
20
|
+
name,
|
|
21
|
+
size = 'md',
|
|
22
|
+
invalid = false,
|
|
23
|
+
valid = false,
|
|
24
|
+
multiple = false,
|
|
25
|
+
ariaLabel,
|
|
26
|
+
ariaDescribedBy,
|
|
27
|
+
}) => {
|
|
28
|
+
const { generateSelectClass } = useSelect({
|
|
29
|
+
size,
|
|
30
|
+
disabled,
|
|
31
|
+
invalid,
|
|
32
|
+
valid,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const selectClass = generateSelectClass({
|
|
36
|
+
className,
|
|
37
|
+
size,
|
|
38
|
+
disabled,
|
|
39
|
+
invalid,
|
|
40
|
+
valid,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
44
|
+
const [selectedLabel, setSelectedLabel] = useState(placeholder);
|
|
45
|
+
const dropdownRef = useRef<HTMLDivElement>(null);
|
|
46
|
+
const panelRef = useRef<HTMLDivElement>(null);
|
|
47
|
+
const bodyRef = useRef<HTMLDivElement>(null);
|
|
48
|
+
const nativeSelectRef = useRef<HTMLSelectElement>(null);
|
|
49
|
+
|
|
50
|
+
// Update selected label when value changes
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (value) {
|
|
53
|
+
const selectedOption = options.find(opt => opt.value === value);
|
|
54
|
+
if (selectedOption) {
|
|
55
|
+
setSelectedLabel(selectedOption.label);
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
setSelectedLabel(placeholder);
|
|
59
|
+
}
|
|
60
|
+
}, [value, options, placeholder]);
|
|
61
|
+
|
|
62
|
+
// Handle click outside to close dropdown
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
65
|
+
if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
|
|
66
|
+
setIsOpen(false);
|
|
67
|
+
if (bodyRef.current) {
|
|
68
|
+
bodyRef.current.style.height = '0px';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
74
|
+
return () => {
|
|
75
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
76
|
+
};
|
|
77
|
+
}, []);
|
|
78
|
+
|
|
79
|
+
// Toggle dropdown
|
|
80
|
+
const handleToggle = () => {
|
|
81
|
+
if (!disabled) {
|
|
82
|
+
if (!isOpen && bodyRef.current && panelRef.current) {
|
|
83
|
+
bodyRef.current.style.height = `${panelRef.current.clientHeight}px`;
|
|
84
|
+
} else if (bodyRef.current) {
|
|
85
|
+
bodyRef.current.style.height = '0px';
|
|
86
|
+
}
|
|
87
|
+
setIsOpen(!isOpen);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// Handle item selection
|
|
92
|
+
const handleItemClick = (option: { value: string; label: string }) => {
|
|
93
|
+
setSelectedLabel(option.label);
|
|
94
|
+
setIsOpen(false);
|
|
95
|
+
if (bodyRef.current) {
|
|
96
|
+
bodyRef.current.style.height = '0px';
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (nativeSelectRef.current) {
|
|
100
|
+
nativeSelectRef.current.value = option.value;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (onChange) {
|
|
104
|
+
// Create a synthetic event
|
|
105
|
+
const event = {
|
|
106
|
+
target: {
|
|
107
|
+
name,
|
|
108
|
+
value: option.value,
|
|
109
|
+
},
|
|
110
|
+
} as React.ChangeEvent<HTMLSelectElement>;
|
|
111
|
+
onChange(event);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<div
|
|
117
|
+
className={`${selectClass} ${isOpen ? SELECT.CLASSES.IS_OPEN : ''}`}
|
|
118
|
+
ref={dropdownRef}
|
|
119
|
+
aria-expanded={isOpen}
|
|
120
|
+
>
|
|
121
|
+
{/* Native select for accessibility and form submission */}
|
|
122
|
+
<select
|
|
123
|
+
ref={nativeSelectRef}
|
|
124
|
+
value={value}
|
|
125
|
+
onChange={onChange}
|
|
126
|
+
onBlur={onBlur}
|
|
127
|
+
onFocus={onFocus}
|
|
128
|
+
disabled={disabled}
|
|
129
|
+
required={required}
|
|
130
|
+
id={id}
|
|
131
|
+
name={name}
|
|
132
|
+
multiple={multiple}
|
|
133
|
+
aria-label={ariaLabel}
|
|
134
|
+
aria-describedby={ariaDescribedBy}
|
|
135
|
+
aria-invalid={invalid}
|
|
136
|
+
style={{ display: 'none' }}
|
|
137
|
+
>
|
|
138
|
+
{placeholder && (
|
|
139
|
+
<option value="" disabled>
|
|
140
|
+
{placeholder}
|
|
141
|
+
</option>
|
|
142
|
+
)}
|
|
143
|
+
{options.map(option => (
|
|
144
|
+
<option key={option.value} value={option.value} disabled={option.disabled}>
|
|
145
|
+
{option.label}
|
|
146
|
+
</option>
|
|
147
|
+
))}
|
|
148
|
+
</select>
|
|
149
|
+
|
|
150
|
+
{/* Custom Select UI */}
|
|
151
|
+
<div className={SELECT.CLASSES.SELECTED} onClick={handleToggle} aria-disabled={disabled}>
|
|
152
|
+
{selectedLabel}
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<i className={`${SELECT.CLASSES.ICON_CARET} ${SELECT.CLASSES.TOGGLE_ICON}`} />
|
|
156
|
+
|
|
157
|
+
<div className={SELECT.CLASSES.SELECT_BODY} ref={bodyRef} style={{ height: 0 }}>
|
|
158
|
+
<div className={SELECT.CLASSES.SELECT_PANEL} ref={panelRef}>
|
|
159
|
+
<ul className={SELECT.CLASSES.SELECT_ITEMS}>
|
|
160
|
+
{options.map((option, index) => (
|
|
161
|
+
<li
|
|
162
|
+
key={option.value}
|
|
163
|
+
className={SELECT.CLASSES.SELECT_ITEM}
|
|
164
|
+
data-value={option.value}
|
|
165
|
+
onClick={() => !option.disabled && handleItemClick(option)}
|
|
166
|
+
>
|
|
167
|
+
<label htmlFor={`SelectItem${index}`} className="c-checkbox">
|
|
168
|
+
<input
|
|
169
|
+
type="checkbox"
|
|
170
|
+
id={`SelectItem${index}`}
|
|
171
|
+
className="c-checkbox__input c-select__item-input"
|
|
172
|
+
checked={value === option.value}
|
|
173
|
+
readOnly
|
|
174
|
+
disabled={option.disabled}
|
|
175
|
+
/>
|
|
176
|
+
<div className="c-select__item-label">{option.label}</div>
|
|
177
|
+
</label>
|
|
178
|
+
</li>
|
|
179
|
+
))}
|
|
180
|
+
</ul>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
);
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export type { SelectProps };
|
|
188
|
+
|
|
189
|
+
Select.displayName = 'Select';
|
|
190
|
+
|
|
191
|
+
export default Select;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Textarea } from './Textarea';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Components/Form/Textarea',
|
|
6
|
+
component: Textarea,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'centered',
|
|
9
|
+
},
|
|
10
|
+
argTypes: {
|
|
11
|
+
value: {
|
|
12
|
+
control: 'text',
|
|
13
|
+
description: 'Textarea value',
|
|
14
|
+
},
|
|
15
|
+
placeholder: {
|
|
16
|
+
control: 'text',
|
|
17
|
+
description: 'Placeholder text',
|
|
18
|
+
},
|
|
19
|
+
rows: {
|
|
20
|
+
control: 'number',
|
|
21
|
+
description: 'Number of visible text lines',
|
|
22
|
+
},
|
|
23
|
+
cols: {
|
|
24
|
+
control: 'number',
|
|
25
|
+
description: 'Number of average character widths',
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
control: { type: 'select' },
|
|
29
|
+
options: ['sm', 'md', 'lg'],
|
|
30
|
+
description: 'Size of the textarea',
|
|
31
|
+
},
|
|
32
|
+
variant: {
|
|
33
|
+
control: { type: 'select' },
|
|
34
|
+
options: ['primary', 'secondary', 'success', 'error', 'warning', 'info'],
|
|
35
|
+
description: 'Color variant of the textarea',
|
|
36
|
+
},
|
|
37
|
+
disabled: {
|
|
38
|
+
control: 'boolean',
|
|
39
|
+
description: 'Whether the textarea is disabled',
|
|
40
|
+
},
|
|
41
|
+
invalid: {
|
|
42
|
+
control: 'boolean',
|
|
43
|
+
description: 'Whether the textarea is invalid',
|
|
44
|
+
},
|
|
45
|
+
valid: {
|
|
46
|
+
control: 'boolean',
|
|
47
|
+
description: 'Whether the textarea is valid',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
} satisfies Meta<typeof Textarea>;
|
|
51
|
+
|
|
52
|
+
export default meta;
|
|
53
|
+
type Story = StoryObj<typeof meta>;
|
|
54
|
+
|
|
55
|
+
// Basic textarea
|
|
56
|
+
export const Basic: Story = {
|
|
57
|
+
args: {
|
|
58
|
+
placeholder: 'Enter text here',
|
|
59
|
+
rows: 4,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// With value
|
|
64
|
+
export const WithValue: Story = {
|
|
65
|
+
args: {
|
|
66
|
+
value: 'This is some sample text in the textarea.',
|
|
67
|
+
rows: 4,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Textarea sizes
|
|
72
|
+
export const Sizes: Story = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
75
|
+
<Textarea size="sm" placeholder="Small textarea" rows={3} />
|
|
76
|
+
<Textarea size="md" placeholder="Medium textarea (default)" rows={3} />
|
|
77
|
+
<Textarea size="lg" placeholder="Large textarea" rows={3} />
|
|
78
|
+
</div>
|
|
79
|
+
),
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Textarea rows
|
|
83
|
+
export const Rows: Story = {
|
|
84
|
+
render: () => (
|
|
85
|
+
<div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
86
|
+
<Textarea placeholder="2 rows" rows={2} />
|
|
87
|
+
<Textarea placeholder="4 rows" rows={4} />
|
|
88
|
+
<Textarea placeholder="6 rows" rows={6} />
|
|
89
|
+
</div>
|
|
90
|
+
),
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// Textarea variants
|
|
94
|
+
export const Variants: Story = {
|
|
95
|
+
render: () => (
|
|
96
|
+
<div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
97
|
+
<Textarea variant="primary" placeholder="Primary textarea" rows={2} />
|
|
98
|
+
<Textarea variant="secondary" placeholder="Secondary textarea" rows={2} />
|
|
99
|
+
<Textarea variant="success" placeholder="Success textarea" rows={2} />
|
|
100
|
+
<Textarea variant="error" placeholder="Error textarea" rows={2} />
|
|
101
|
+
<Textarea variant="warning" placeholder="Warning textarea" rows={2} />
|
|
102
|
+
<Textarea variant="info" placeholder="Info textarea" rows={2} />
|
|
103
|
+
</div>
|
|
104
|
+
),
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// States
|
|
108
|
+
export const States: Story = {
|
|
109
|
+
render: () => (
|
|
110
|
+
<div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
|
|
111
|
+
<Textarea placeholder="Default textarea" rows={2} />
|
|
112
|
+
<Textarea placeholder="Disabled textarea" disabled rows={2} />
|
|
113
|
+
<Textarea placeholder="Valid textarea" valid rows={2} />
|
|
114
|
+
<Textarea placeholder="Invalid textarea" invalid rows={2} />
|
|
115
|
+
<Textarea
|
|
116
|
+
placeholder="Read-only textarea"
|
|
117
|
+
readOnly
|
|
118
|
+
value="This content cannot be edited"
|
|
119
|
+
rows={2}
|
|
120
|
+
/>
|
|
121
|
+
</div>
|
|
122
|
+
),
|
|
123
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TextareaProps } from '../../lib/types/components';
|
|
3
|
+
import { useTextarea } from '../../lib/composables/useTextarea';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Textarea - A component for multiline text input
|
|
7
|
+
*/
|
|
8
|
+
export const Textarea: React.FC<TextareaProps> = ({
|
|
9
|
+
value,
|
|
10
|
+
onChange,
|
|
11
|
+
onBlur,
|
|
12
|
+
onFocus,
|
|
13
|
+
placeholder,
|
|
14
|
+
className = '',
|
|
15
|
+
disabled = false,
|
|
16
|
+
required = false,
|
|
17
|
+
readOnly = false,
|
|
18
|
+
id,
|
|
19
|
+
name,
|
|
20
|
+
rows = 4,
|
|
21
|
+
cols,
|
|
22
|
+
maxLength,
|
|
23
|
+
minLength,
|
|
24
|
+
size = 'md',
|
|
25
|
+
variant,
|
|
26
|
+
invalid = false,
|
|
27
|
+
valid = false,
|
|
28
|
+
autoFocus = false,
|
|
29
|
+
ariaLabel,
|
|
30
|
+
ariaDescribedBy,
|
|
31
|
+
}) => {
|
|
32
|
+
const { generateTextareaClass } = useTextarea({
|
|
33
|
+
size,
|
|
34
|
+
variant,
|
|
35
|
+
disabled,
|
|
36
|
+
invalid,
|
|
37
|
+
valid,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const textareaClass = generateTextareaClass({
|
|
41
|
+
className,
|
|
42
|
+
size,
|
|
43
|
+
variant,
|
|
44
|
+
disabled,
|
|
45
|
+
invalid,
|
|
46
|
+
valid,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<textarea
|
|
51
|
+
className={textareaClass}
|
|
52
|
+
value={value}
|
|
53
|
+
onChange={onChange}
|
|
54
|
+
onBlur={onBlur}
|
|
55
|
+
onFocus={onFocus}
|
|
56
|
+
placeholder={placeholder}
|
|
57
|
+
disabled={disabled}
|
|
58
|
+
required={required}
|
|
59
|
+
readOnly={readOnly}
|
|
60
|
+
id={id}
|
|
61
|
+
name={name}
|
|
62
|
+
rows={rows}
|
|
63
|
+
cols={cols}
|
|
64
|
+
maxLength={maxLength}
|
|
65
|
+
minLength={minLength}
|
|
66
|
+
autoFocus={autoFocus}
|
|
67
|
+
aria-label={ariaLabel}
|
|
68
|
+
aria-describedby={ariaDescribedBy}
|
|
69
|
+
aria-invalid={invalid}
|
|
70
|
+
/>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export type { TextareaProps };
|
|
75
|
+
|
|
76
|
+
Textarea.displayName = 'Textarea';
|
|
77
|
+
|
|
78
|
+
export default Textarea;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as Form } from './Form';
|
|
2
|
+
export { default as FormGroup } from './FormGroup';
|
|
3
|
+
export { default as Input } from './Input';
|
|
4
|
+
export { default as Select } from './Select';
|
|
5
|
+
export { default as Checkbox } from './Checkbox';
|
|
6
|
+
export { default as Radio } from './Radio';
|
|
7
|
+
export { default as Textarea } from './Textarea';
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { HERO } from '../../lib/constants/components';
|
|
3
|
+
import { Button } from '../Button/Button';
|
|
4
|
+
import { Hero } from './Hero';
|
|
5
|
+
|
|
6
|
+
// Extract class names without the leading dots
|
|
7
|
+
const HERO_CLASS = HERO.SELECTORS.HERO.replace('.', '');
|
|
8
|
+
const CONTAINER_CLASS = HERO.SELECTORS.CONTAINER.replace('.', '');
|
|
9
|
+
const GRID_CLASS = HERO.SELECTORS.GRID.replace('.', '');
|
|
10
|
+
const CONTENT_CLASS = HERO.SELECTORS.CONTENT.replace('.', '');
|
|
11
|
+
const SUBTITLE_CLASS = HERO.SELECTORS.SUBTITLE.replace('.', '');
|
|
12
|
+
const TITLE_CLASS = HERO.SELECTORS.TITLE.replace('.', '');
|
|
13
|
+
const TEXT_CLASS = HERO.SELECTORS.TEXT.replace('.', '');
|
|
14
|
+
const ACTIONS_CLASS = HERO.SELECTORS.ACTIONS.replace('.', '');
|
|
15
|
+
const IMAGE_CLASS = HERO.SELECTORS.IMAGE.replace('.', '');
|
|
16
|
+
const BG_CLASS = HERO.SELECTORS.BG.replace('.', '');
|
|
17
|
+
const BG_IMAGE_CLASS = HERO.SELECTORS.BG_IMAGE.replace('.', '');
|
|
18
|
+
const OVERLAY_CLASS = HERO.SELECTORS.OVERLAY.replace('.', '');
|
|
19
|
+
const IMAGE_WRAPPER_CLASS = HERO.SELECTORS.IMAGE_WRAPPER.replace('.', '');
|
|
20
|
+
const CENTER_CLASS = HERO.CLASSES.CENTER;
|
|
21
|
+
const RIGHT_CLASS = HERO.CLASSES.RIGHT;
|
|
22
|
+
const LEFT_CLASS = HERO.CLASSES.LEFT;
|
|
23
|
+
const FULL_VH_CLASS = HERO.CLASSES.FULL_VH;
|
|
24
|
+
|
|
25
|
+
const meta = {
|
|
26
|
+
title: 'Components/Hero',
|
|
27
|
+
component: Hero,
|
|
28
|
+
parameters: {
|
|
29
|
+
layout: 'padded',
|
|
30
|
+
},
|
|
31
|
+
argTypes: {
|
|
32
|
+
title: {
|
|
33
|
+
control: 'text',
|
|
34
|
+
description: 'Hero title',
|
|
35
|
+
},
|
|
36
|
+
subtitle: {
|
|
37
|
+
control: 'text',
|
|
38
|
+
description: 'Hero subtitle',
|
|
39
|
+
},
|
|
40
|
+
text: {
|
|
41
|
+
control: 'text',
|
|
42
|
+
description: 'Hero text content',
|
|
43
|
+
},
|
|
44
|
+
imageSrc: {
|
|
45
|
+
control: 'text',
|
|
46
|
+
description: 'Image source URL',
|
|
47
|
+
},
|
|
48
|
+
imageAlt: {
|
|
49
|
+
control: 'text',
|
|
50
|
+
description: 'Image alt text',
|
|
51
|
+
},
|
|
52
|
+
alignment: {
|
|
53
|
+
control: { type: 'select', options: ['left', 'center', 'right'] },
|
|
54
|
+
description: 'Content alignment',
|
|
55
|
+
},
|
|
56
|
+
backgroundImageSrc: {
|
|
57
|
+
control: 'text',
|
|
58
|
+
description: 'Background image source URL',
|
|
59
|
+
},
|
|
60
|
+
showOverlay: {
|
|
61
|
+
control: 'boolean',
|
|
62
|
+
description: 'Show background overlay',
|
|
63
|
+
},
|
|
64
|
+
fullViewportHeight: {
|
|
65
|
+
control: 'boolean',
|
|
66
|
+
description: 'Make hero full viewport height',
|
|
67
|
+
},
|
|
68
|
+
imageColSize: {
|
|
69
|
+
control: { type: 'range', min: 1, max: 12, step: 1 },
|
|
70
|
+
description: 'Image column size (1-12)',
|
|
71
|
+
},
|
|
72
|
+
contentColSize: {
|
|
73
|
+
control: { type: 'range', min: 1, max: 12, step: 1 },
|
|
74
|
+
description: 'Content column size (1-12)',
|
|
75
|
+
},
|
|
76
|
+
contentWidth: {
|
|
77
|
+
control: 'text',
|
|
78
|
+
description: 'Custom width for the hero content (e.g., "800px", "50%")',
|
|
79
|
+
table: {
|
|
80
|
+
defaultValue: { summary: '536px' },
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
parallax: {
|
|
84
|
+
control: 'boolean',
|
|
85
|
+
description: 'Enable parallax effect on background image',
|
|
86
|
+
},
|
|
87
|
+
parallaxIntensity: {
|
|
88
|
+
control: { type: 'range', min: 0, max: 1, step: 0.1 },
|
|
89
|
+
description: 'Parallax effect intensity (0-1)',
|
|
90
|
+
},
|
|
91
|
+
videoBackground: {
|
|
92
|
+
control: 'text',
|
|
93
|
+
description: 'Video background URL',
|
|
94
|
+
},
|
|
95
|
+
videoOptions: {
|
|
96
|
+
control: 'object',
|
|
97
|
+
description: 'Video background options',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
} satisfies Meta<typeof Hero>;
|
|
101
|
+
|
|
102
|
+
export default meta;
|
|
103
|
+
type Story = StoryObj<typeof meta>;
|
|
104
|
+
|
|
105
|
+
// Helper for button actions
|
|
106
|
+
const primaryActionButtons = (
|
|
107
|
+
<>
|
|
108
|
+
<Button label="Get Started" variant="primary" />
|
|
109
|
+
<Button label="Learn More" variant="outline-secondary" />
|
|
110
|
+
</>
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
const showcaseActionButtons = (
|
|
114
|
+
<>
|
|
115
|
+
<Button label="Explore Components" variant="primary" />
|
|
116
|
+
<Button label="View Documentation" variant="outline-secondary" />
|
|
117
|
+
</>
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
const demoText =
|
|
121
|
+
'Build modern, responsive interfaces with a clean, consistent design language. Our component library helps you create beautiful user experiences with minimal effort.';
|
|
122
|
+
|
|
123
|
+
const showcaseText =
|
|
124
|
+
'Atomix provides a complete design system with powerful, flexible components that follow best practices for accessibility, performance, and user experience.';
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Default Hero component with right-aligned content and image
|
|
128
|
+
*/
|
|
129
|
+
export const Default: Story = {
|
|
130
|
+
args: {
|
|
131
|
+
title: 'Modern UI Components for Developers',
|
|
132
|
+
subtitle: 'Atomix Design System',
|
|
133
|
+
text: demoText,
|
|
134
|
+
imageSrc: 'https://picsum.photos/id/0/712/500',
|
|
135
|
+
imageAlt: 'Developer working with code',
|
|
136
|
+
alignment: 'right',
|
|
137
|
+
actions: primaryActionButtons,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Hero with left-aligned content and image on right
|
|
143
|
+
*/
|
|
144
|
+
export const LeftAligned: Story = {
|
|
145
|
+
args: {
|
|
146
|
+
...Default.args,
|
|
147
|
+
title: 'Crafted for Developer Experience',
|
|
148
|
+
alignment: 'left',
|
|
149
|
+
imageSrc: 'https://picsum.photos/id/3/712/500',
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Hero with center-aligned content and image below
|
|
155
|
+
*/
|
|
156
|
+
export const CenterAligned: Story = {
|
|
157
|
+
args: {
|
|
158
|
+
...Default.args,
|
|
159
|
+
title: 'Build Faster with Atomix',
|
|
160
|
+
text: 'Our components follow best practices for accessibility, performance, and responsive design. Start building beautiful interfaces in minutes.',
|
|
161
|
+
alignment: 'center',
|
|
162
|
+
imageSrc: 'https://picsum.photos/id/1/1024/300',
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Hero with background image
|
|
168
|
+
*/
|
|
169
|
+
export const WithBackgroundImage: Story = {
|
|
170
|
+
args: {
|
|
171
|
+
...Default.args,
|
|
172
|
+
title: 'Powerful Design System',
|
|
173
|
+
text: showcaseText,
|
|
174
|
+
actions: showcaseActionButtons,
|
|
175
|
+
backgroundImageSrc: 'https://picsum.photos/id/24/1920/1080',
|
|
176
|
+
showOverlay: true,
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Hero with background image and no foreground image
|
|
182
|
+
*/
|
|
183
|
+
export const BackgroundImageOnly: Story = {
|
|
184
|
+
args: {
|
|
185
|
+
...Default.args,
|
|
186
|
+
title: 'Beautiful & Accessible Components',
|
|
187
|
+
text: 'Atomix is built with accessibility in mind, ensuring your applications work for everyone. Our components are fully responsive and follow WAI-ARIA guidelines.',
|
|
188
|
+
imageSrc: undefined,
|
|
189
|
+
backgroundImageSrc: 'https://picsum.photos/id/1067/1920/1080',
|
|
190
|
+
showOverlay: true,
|
|
191
|
+
alignment: 'center',
|
|
192
|
+
actions: showcaseActionButtons,
|
|
193
|
+
contentWidth: '800px',
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Full viewport height hero
|
|
199
|
+
*/
|
|
200
|
+
export const FullViewportHeight: Story = {
|
|
201
|
+
args: {
|
|
202
|
+
...BackgroundImageOnly.args,
|
|
203
|
+
title: 'Atomix. Build Once. Use Everywhere.',
|
|
204
|
+
text: 'A flexible, scalable design system that works seamlessly across all devices and platforms.',
|
|
205
|
+
fullViewportHeight: true,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Left-aligned content with background image
|
|
211
|
+
*/
|
|
212
|
+
export const LeftAlignedWithBackground: Story = {
|
|
213
|
+
args: {
|
|
214
|
+
...WithBackgroundImage.args,
|
|
215
|
+
title: 'Customizable & Extensible',
|
|
216
|
+
text: 'Easily customize components to match your brand. Built with a flexible architecture that allows for easy extension and adaptation.',
|
|
217
|
+
alignment: 'left',
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Center-aligned content with background and foreground image
|
|
223
|
+
*/
|
|
224
|
+
export const CenterAlignedWithImageBackground: Story = {
|
|
225
|
+
args: {
|
|
226
|
+
...WithBackgroundImage.args,
|
|
227
|
+
title: 'Based on Modern Standards',
|
|
228
|
+
text: 'Built with the latest technologies like React, TypeScript, and SCSS. Follows BEM, ITCSS, and OOCSS methodologies for clean, maintainable CSS.',
|
|
229
|
+
alignment: 'center',
|
|
230
|
+
imageSrc: 'https://picsum.photos/id/160/1312/280',
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Center-aligned content with custom content width
|
|
236
|
+
*/
|
|
237
|
+
export const CustomContentWidth: Story = {
|
|
238
|
+
args: {
|
|
239
|
+
...CenterAligned.args,
|
|
240
|
+
title: 'Hero with Custom Content Width',
|
|
241
|
+
text: 'This hero component has a custom content width set through the contentWidth prop, which sets the --atomix-hero-content-width CSS variable.',
|
|
242
|
+
contentWidth: '800px',
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Hero with parallax background effect
|
|
248
|
+
*/
|
|
249
|
+
export const WithParallaxEffect: Story = {
|
|
250
|
+
args: {
|
|
251
|
+
...BackgroundImageOnly.args,
|
|
252
|
+
title: 'Parallax Background Effect',
|
|
253
|
+
text: 'This hero features a parallax scrolling effect on the background image, creating depth and visual interest as the user scrolls.',
|
|
254
|
+
backgroundImageSrc: 'https://picsum.photos/id/1015/1920/1080',
|
|
255
|
+
parallax: true,
|
|
256
|
+
parallaxIntensity: 0.5,
|
|
257
|
+
fullViewportHeight: true,
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Hero with video background
|
|
263
|
+
*/
|
|
264
|
+
export const WithVideoBackground: Story = {
|
|
265
|
+
args: {
|
|
266
|
+
title: 'Video Background Hero',
|
|
267
|
+
subtitle: 'Dynamic & Engaging',
|
|
268
|
+
text: 'Add motion and visual interest to your hero sections with video backgrounds. Perfect for creating immersive landing pages.',
|
|
269
|
+
alignment: 'center',
|
|
270
|
+
videoBackground: 'https://storage.googleapis.com/coverr-main/mp4/Mt_Baker.mp4',
|
|
271
|
+
videoOptions: {
|
|
272
|
+
autoplay: true,
|
|
273
|
+
loop: true,
|
|
274
|
+
muted: true,
|
|
275
|
+
posterUrl: 'https://picsum.photos/id/1018/1920/1080',
|
|
276
|
+
},
|
|
277
|
+
showOverlay: true,
|
|
278
|
+
actions: showcaseActionButtons,
|
|
279
|
+
contentWidth: '800px',
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Hero with video background and foreground image
|
|
285
|
+
*/
|
|
286
|
+
export const VideoBackgroundWithImage: Story = {
|
|
287
|
+
args: {
|
|
288
|
+
...WithVideoBackground.args,
|
|
289
|
+
title: 'Complete Media Support',
|
|
290
|
+
text: 'Combine video backgrounds with foreground images for rich, layered visual presentations.',
|
|
291
|
+
alignment: 'left',
|
|
292
|
+
imageSrc: 'https://picsum.photos/id/180/712/500',
|
|
293
|
+
imageAlt: 'Product showcase',
|
|
294
|
+
},
|
|
295
|
+
};
|