@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,110 @@
|
|
|
1
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface UseModalProps {
|
|
4
|
+
/**
|
|
5
|
+
* Whether the modal is open
|
|
6
|
+
*/
|
|
7
|
+
isOpen?: boolean;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Callback when modal state changes
|
|
11
|
+
*/
|
|
12
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Callback when modal opens
|
|
16
|
+
*/
|
|
17
|
+
onOpen?: () => void;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Callback when modal closes
|
|
21
|
+
*/
|
|
22
|
+
onClose?: () => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface UseModalReturn {
|
|
26
|
+
/**
|
|
27
|
+
* Current open state
|
|
28
|
+
*/
|
|
29
|
+
isOpen: boolean;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Function to open the modal
|
|
33
|
+
*/
|
|
34
|
+
open: () => void;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Function to close the modal
|
|
38
|
+
*/
|
|
39
|
+
close: () => void;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Function to toggle the modal
|
|
43
|
+
*/
|
|
44
|
+
toggle: () => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Hook for managing modal state
|
|
49
|
+
*/
|
|
50
|
+
export function useModal({
|
|
51
|
+
isOpen: isOpenProp,
|
|
52
|
+
onOpenChange,
|
|
53
|
+
onOpen,
|
|
54
|
+
onClose,
|
|
55
|
+
}: UseModalProps = {}): UseModalReturn {
|
|
56
|
+
// For uncontrolled usage
|
|
57
|
+
const [isOpenState, setIsOpenState] = useState(false);
|
|
58
|
+
|
|
59
|
+
// Determine if we're in controlled or uncontrolled mode
|
|
60
|
+
const isControlled = isOpenProp !== undefined;
|
|
61
|
+
const isOpen = isControlled ? !!isOpenProp : isOpenState;
|
|
62
|
+
|
|
63
|
+
// Update internal state when prop changes (for controlled mode)
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (isControlled) {
|
|
66
|
+
setIsOpenState(!!isOpenProp);
|
|
67
|
+
}
|
|
68
|
+
}, [isOpenProp, isControlled]);
|
|
69
|
+
|
|
70
|
+
const updateOpen = useCallback(
|
|
71
|
+
(nextIsOpen: boolean) => {
|
|
72
|
+
// For uncontrolled mode, update internal state
|
|
73
|
+
if (!isControlled) {
|
|
74
|
+
setIsOpenState(nextIsOpen);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Call the change handler in either mode
|
|
78
|
+
if (onOpenChange) {
|
|
79
|
+
onOpenChange(nextIsOpen);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Call the specific handler
|
|
83
|
+
if (nextIsOpen && onOpen) {
|
|
84
|
+
onOpen();
|
|
85
|
+
} else if (!nextIsOpen && onClose) {
|
|
86
|
+
onClose();
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
[isControlled, onOpenChange, onOpen, onClose]
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const open = useCallback(() => {
|
|
93
|
+
updateOpen(true);
|
|
94
|
+
}, [updateOpen]);
|
|
95
|
+
|
|
96
|
+
const close = useCallback(() => {
|
|
97
|
+
updateOpen(false);
|
|
98
|
+
}, [updateOpen]);
|
|
99
|
+
|
|
100
|
+
const toggle = useCallback(() => {
|
|
101
|
+
updateOpen(!isOpen);
|
|
102
|
+
}, [isOpen, updateOpen]);
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
isOpen,
|
|
106
|
+
open,
|
|
107
|
+
close,
|
|
108
|
+
toggle,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { NavbarProps, NavProps, NavItemProps, NavDropdownProps } from '../types/components';
|
|
3
|
+
import { NAVBAR, NAV } from '../constants/components';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { Icon } from '../../components/Icon/Icon';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Navbar state and functionality
|
|
9
|
+
* @param initialProps - Initial navbar properties
|
|
10
|
+
* @returns Navbar state and methods
|
|
11
|
+
*/
|
|
12
|
+
export function useNavbar(initialProps?: Partial<NavbarProps>) {
|
|
13
|
+
// Default navbar properties
|
|
14
|
+
const defaultProps: Partial<NavbarProps> = {
|
|
15
|
+
position: 'static',
|
|
16
|
+
collapsible: true,
|
|
17
|
+
backdrop: false,
|
|
18
|
+
closeOnOutsideClick: true,
|
|
19
|
+
closeOnEscape: true,
|
|
20
|
+
ariaLabel: 'Main navigation',
|
|
21
|
+
...initialProps,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// Local expanded state for when not controlled externally
|
|
25
|
+
const [isExpanded, setIsExpanded] = useState(defaultProps.expanded || false);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Generate navbar class based on properties
|
|
29
|
+
* @param props - Navbar properties
|
|
30
|
+
* @returns Class string
|
|
31
|
+
*/
|
|
32
|
+
const generateNavbarClass = (props: Partial<NavbarProps>): string => {
|
|
33
|
+
const {
|
|
34
|
+
position = defaultProps.position,
|
|
35
|
+
variant,
|
|
36
|
+
collapsible = defaultProps.collapsible,
|
|
37
|
+
className = '',
|
|
38
|
+
} = props;
|
|
39
|
+
|
|
40
|
+
const positionClass = position !== 'static' ? `c-navbar--${position}` : '';
|
|
41
|
+
const variantClass = variant ? `c-navbar--${variant}` : '';
|
|
42
|
+
const collapsibleClass = collapsible ? 'c-navbar--collapsible' : '';
|
|
43
|
+
|
|
44
|
+
return `c-navbar ${positionClass} ${variantClass} ${collapsibleClass} ${className}`.trim();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Generate container style
|
|
49
|
+
* @param width - Container width
|
|
50
|
+
* @returns Style object
|
|
51
|
+
*/
|
|
52
|
+
const generateContainerStyle = (width?: string) => {
|
|
53
|
+
return width ? { maxWidth: width } : {};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Generate collapse class based on expanded state
|
|
58
|
+
* @param expanded - Whether the collapse is expanded
|
|
59
|
+
* @returns Class string
|
|
60
|
+
*/
|
|
61
|
+
const generateCollapseClass = (expanded: boolean): string => {
|
|
62
|
+
return `c-navbar__collapse ${expanded ? 'is-expanded' : ''}`.trim();
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Toggle expanded state
|
|
67
|
+
*/
|
|
68
|
+
const toggleExpanded = () => {
|
|
69
|
+
const newState = !isExpanded;
|
|
70
|
+
setIsExpanded(newState);
|
|
71
|
+
|
|
72
|
+
if (defaultProps.onToggle) {
|
|
73
|
+
defaultProps.onToggle(newState);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get current expanded state
|
|
79
|
+
* @param controlled - External expanded value if controlled
|
|
80
|
+
* @returns Current expanded state
|
|
81
|
+
*/
|
|
82
|
+
const getExpandedState = (controlled?: boolean): boolean => {
|
|
83
|
+
return typeof controlled !== 'undefined' ? controlled : isExpanded;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
defaultProps,
|
|
88
|
+
isExpanded,
|
|
89
|
+
setIsExpanded,
|
|
90
|
+
generateNavbarClass,
|
|
91
|
+
generateContainerStyle,
|
|
92
|
+
generateCollapseClass,
|
|
93
|
+
toggleExpanded,
|
|
94
|
+
getExpandedState,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Nav state and functionality
|
|
100
|
+
* @param initialProps - Initial nav properties
|
|
101
|
+
* @returns Nav state and methods
|
|
102
|
+
*/
|
|
103
|
+
export function useNav(initialProps?: Partial<NavProps>) {
|
|
104
|
+
// Default nav properties
|
|
105
|
+
const defaultProps: Partial<NavProps> = {
|
|
106
|
+
alignment: 'start',
|
|
107
|
+
variant: 'default',
|
|
108
|
+
...initialProps,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Generate nav class based on properties
|
|
113
|
+
* @param props - Nav properties
|
|
114
|
+
* @returns Class string
|
|
115
|
+
*/
|
|
116
|
+
const generateNavClass = (props: Partial<NavProps>): string => {
|
|
117
|
+
const {
|
|
118
|
+
alignment = defaultProps.alignment,
|
|
119
|
+
variant = defaultProps.variant,
|
|
120
|
+
className = '',
|
|
121
|
+
} = props;
|
|
122
|
+
|
|
123
|
+
const alignmentClass = alignment !== 'start' ? `c-nav--${alignment}` : '';
|
|
124
|
+
const variantClass = variant !== 'default' ? `c-nav--${variant}` : '';
|
|
125
|
+
|
|
126
|
+
return `c-nav ${alignmentClass} ${variantClass} ${className}`.trim();
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
defaultProps,
|
|
131
|
+
generateNavClass,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Nav item state and functionality
|
|
137
|
+
* @param initialProps - Initial nav item properties
|
|
138
|
+
* @returns Nav item state and methods
|
|
139
|
+
*/
|
|
140
|
+
export function useNavItem(initialProps?: Partial<NavItemProps & { megaMenu?: boolean }>) {
|
|
141
|
+
// Default nav item properties
|
|
142
|
+
const defaultProps: Partial<NavItemProps & { megaMenu?: boolean }> = {
|
|
143
|
+
dropdown: false,
|
|
144
|
+
megaMenu: false,
|
|
145
|
+
active: false,
|
|
146
|
+
...initialProps,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Generate nav item class based on properties
|
|
151
|
+
* @param props - Nav item properties
|
|
152
|
+
* @returns Class string
|
|
153
|
+
*/
|
|
154
|
+
const generateNavItemClass = (props: Partial<NavItemProps & { megaMenu?: boolean }>): string => {
|
|
155
|
+
const {
|
|
156
|
+
dropdown = defaultProps.dropdown,
|
|
157
|
+
megaMenu = defaultProps.megaMenu,
|
|
158
|
+
active = defaultProps.active,
|
|
159
|
+
disabled = defaultProps.disabled,
|
|
160
|
+
className = '',
|
|
161
|
+
} = props;
|
|
162
|
+
|
|
163
|
+
// Apply dropdown class only for regular dropdowns, not mega menus
|
|
164
|
+
const dropdownClass = dropdown && !megaMenu ? NAV.SELECTORS.DROPDOWN.replace('.', '') : '';
|
|
165
|
+
// Add a custom class for mega menu items if needed
|
|
166
|
+
const megaMenuClass = megaMenu ? 'c-nav__item--mega-menu' : '';
|
|
167
|
+
const activeClass = active ? NAV.CLASSES.ACTIVE : '';
|
|
168
|
+
const disabledClass = disabled ? NAV.CLASSES.DISABLED : '';
|
|
169
|
+
|
|
170
|
+
return `c-nav__item ${dropdownClass} ${megaMenuClass} ${activeClass} ${disabledClass} ${className}`.trim();
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Generate nav link class based on properties
|
|
175
|
+
* @param active - Whether link is active
|
|
176
|
+
* @param disabled - Whether link is disabled
|
|
177
|
+
* @param className - Additional class names
|
|
178
|
+
* @returns Class string
|
|
179
|
+
*/
|
|
180
|
+
const generateNavLinkClass = (active = false, disabled = false, className = ''): string => {
|
|
181
|
+
const activeClass = active ? NAV.CLASSES.ACTIVE : '';
|
|
182
|
+
const disabledClass = disabled ? 'c-nav__link--disabled' : '';
|
|
183
|
+
|
|
184
|
+
return `c-nav__link ${activeClass} ${disabledClass} ${className}`.trim();
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Handle nav item click with disabled check
|
|
189
|
+
* @param handler - Click handler function
|
|
190
|
+
* @returns Function that respects disabled state
|
|
191
|
+
*/
|
|
192
|
+
const handleClick = (handler?: () => void) => {
|
|
193
|
+
return (e: React.MouseEvent) => {
|
|
194
|
+
if (defaultProps.disabled || !handler) {
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
handler();
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
defaultProps,
|
|
205
|
+
generateNavItemClass,
|
|
206
|
+
generateNavLinkClass,
|
|
207
|
+
handleClick,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Nav dropdown state and functionality
|
|
213
|
+
* @param initialProps - Initial dropdown properties
|
|
214
|
+
* @returns Dropdown state and methods
|
|
215
|
+
*/
|
|
216
|
+
export function useNavDropdown(initialProps?: Partial<NavDropdownProps>) {
|
|
217
|
+
// Default dropdown properties
|
|
218
|
+
const defaultProps: Partial<NavDropdownProps> = {
|
|
219
|
+
alignment: 'start',
|
|
220
|
+
megaMenu: false,
|
|
221
|
+
...initialProps,
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Generate dropdown menu class based on properties
|
|
226
|
+
* @param props - Dropdown properties
|
|
227
|
+
* @returns Class string
|
|
228
|
+
*/
|
|
229
|
+
const generateDropdownMenuClass = (props: Partial<NavDropdownProps>): string => {
|
|
230
|
+
const {
|
|
231
|
+
alignment = defaultProps.alignment,
|
|
232
|
+
megaMenu = defaultProps.megaMenu,
|
|
233
|
+
className = '',
|
|
234
|
+
} = props;
|
|
235
|
+
|
|
236
|
+
// Select the base class based on mega menu or regular dropdown
|
|
237
|
+
const baseClass = megaMenu
|
|
238
|
+
? NAV.SELECTORS.MEGA_MENU.replace('.', '')
|
|
239
|
+
: NAV.SELECTORS.DROPDOWN_MENU.replace('.', '');
|
|
240
|
+
|
|
241
|
+
// Add alignment class if not default 'start'
|
|
242
|
+
let alignmentClass = '';
|
|
243
|
+
if (alignment === 'center') {
|
|
244
|
+
alignmentClass = `${baseClass}--center`;
|
|
245
|
+
} else if (alignment === 'end') {
|
|
246
|
+
alignmentClass = `${baseClass}--end`;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return `${baseClass} ${alignmentClass} ${className}`.trim();
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Detect whether we're in a fixed-bottom navbar
|
|
254
|
+
* @returns Boolean indicating if in fixed-bottom navbar
|
|
255
|
+
*/
|
|
256
|
+
const isInFixedBottomNavbar = (): boolean => {
|
|
257
|
+
// This would need to be called in the component itself
|
|
258
|
+
// because it requires DOM access
|
|
259
|
+
return document.querySelector('.c-navbar--fixed-bottom') !== null;
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Get the appropriate icon name based on navbar position
|
|
264
|
+
* @param isMegaMenu - Whether it's a mega menu
|
|
265
|
+
* @returns Icon name for the new Icon component
|
|
266
|
+
*/
|
|
267
|
+
const getIconName = (isMegaMenu: boolean = false): string => {
|
|
268
|
+
const isFixedBottom = isInFixedBottomNavbar();
|
|
269
|
+
return isFixedBottom ? 'CaretUp' : 'CaretDown';
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// Keeping this for backward compatibility
|
|
273
|
+
const getIconClass = (isMegaMenu: boolean = false): string => {
|
|
274
|
+
console.warn(
|
|
275
|
+
'getIconClass is deprecated. Please use the Icon component directly with the getIconName function.'
|
|
276
|
+
);
|
|
277
|
+
const isFixedBottom = isInFixedBottomNavbar();
|
|
278
|
+
return `c-nav__icon ${isFixedBottom ? 'icon-lux-caret-up' : 'icon-lux-caret-down'}`;
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
return {
|
|
282
|
+
defaultProps,
|
|
283
|
+
generateDropdownMenuClass,
|
|
284
|
+
isInFixedBottomNavbar,
|
|
285
|
+
getIconClass,
|
|
286
|
+
getIconName,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { useState, useMemo } from 'react';
|
|
2
|
+
import { PaginationProps } from '../types/components';
|
|
3
|
+
|
|
4
|
+
export const DOTS = '...';
|
|
5
|
+
|
|
6
|
+
const range = (start: number, end: number) => {
|
|
7
|
+
const length = end - start + 1;
|
|
8
|
+
return Array.from({ length }, (_, idx) => idx + start);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const usePagination = ({
|
|
12
|
+
currentPage,
|
|
13
|
+
totalPages,
|
|
14
|
+
siblingCount = 1,
|
|
15
|
+
onPageChange,
|
|
16
|
+
}: Omit<PaginationProps, 'className'>) => {
|
|
17
|
+
const paginationRange = useMemo(() => {
|
|
18
|
+
const totalPageNumbers = siblingCount + 5; // siblingCount + firstPage + lastPage + currentPage + 2*DOTS
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
Case 1: If the number of pages is less than the page numbers we want to show in our
|
|
22
|
+
paginationComponent, we return the range [1..totalPages]
|
|
23
|
+
*/
|
|
24
|
+
if (totalPageNumbers >= totalPages) {
|
|
25
|
+
return range(1, totalPages);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
|
|
29
|
+
const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
|
|
30
|
+
|
|
31
|
+
const shouldShowLeftDots = leftSiblingIndex > 2;
|
|
32
|
+
const shouldShowRightDots = rightSiblingIndex < totalPages - 2;
|
|
33
|
+
|
|
34
|
+
const firstPageIndex = 1;
|
|
35
|
+
const lastPageIndex = totalPages;
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
Case 2: No left dots to show, but rights dots to be shown
|
|
39
|
+
*/
|
|
40
|
+
if (!shouldShowLeftDots && shouldShowRightDots) {
|
|
41
|
+
let leftItemCount = 3 + 2 * siblingCount;
|
|
42
|
+
let leftRange = range(1, leftItemCount);
|
|
43
|
+
|
|
44
|
+
return [...leftRange, DOTS, totalPages];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
Case 3: No right dots to show, but left dots to be shown
|
|
49
|
+
*/
|
|
50
|
+
if (shouldShowLeftDots && !shouldShowRightDots) {
|
|
51
|
+
let rightItemCount = 3 + 2 * siblingCount;
|
|
52
|
+
let rightRange = range(totalPages - rightItemCount + 1, totalPages);
|
|
53
|
+
return [firstPageIndex, DOTS, ...rightRange];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
Case 4: Both left and right dots to be shown
|
|
58
|
+
*/
|
|
59
|
+
if (shouldShowLeftDots && shouldShowRightDots) {
|
|
60
|
+
let middleRange = range(leftSiblingIndex, rightSiblingIndex);
|
|
61
|
+
return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// This case should ideally not be reached if logic is correct
|
|
65
|
+
return [];
|
|
66
|
+
}, [totalPages, siblingCount, currentPage]);
|
|
67
|
+
|
|
68
|
+
const goToPage = (page: number) => {
|
|
69
|
+
if (page >= 1 && page <= totalPages && page !== currentPage) {
|
|
70
|
+
onPageChange(page);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const nextPage = () => {
|
|
75
|
+
goToPage(currentPage + 1);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const prevPage = () => {
|
|
79
|
+
goToPage(currentPage - 1);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const firstPage = () => {
|
|
83
|
+
goToPage(1);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const lastPage = () => {
|
|
87
|
+
goToPage(totalPages);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
paginationRange,
|
|
92
|
+
currentPage,
|
|
93
|
+
totalPages,
|
|
94
|
+
goToPage,
|
|
95
|
+
nextPage,
|
|
96
|
+
prevPage,
|
|
97
|
+
firstPage,
|
|
98
|
+
lastPage,
|
|
99
|
+
DOTS,
|
|
100
|
+
};
|
|
101
|
+
};
|