@shohojdhara/atomix 0.3.14 → 0.4.0
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 +20 -0
- package/build-tools/EXAMPLES.md +372 -0
- package/build-tools/README.md +242 -0
- package/build-tools/__tests__/error-handler.test.js +230 -0
- package/build-tools/__tests__/index.test.js +141 -0
- package/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/build-tools/__tests__/utils.test.js +161 -0
- package/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/build-tools/error-handler.js +308 -0
- package/build-tools/index.d.ts +44 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +50 -0
- package/build-tools/rollup-plugin.js +236 -0
- package/build-tools/types.d.ts +163 -0
- package/build-tools/utils.js +203 -0
- package/build-tools/vite-plugin.js +161 -0
- package/build-tools/webpack-loader.js +123 -0
- package/dist/atomix.css +21044 -2618
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +77 -3
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/EXAMPLES.md +372 -0
- package/dist/build-tools/README.md +242 -0
- package/dist/build-tools/__tests__/error-handler.test.js +230 -0
- package/dist/build-tools/__tests__/index.test.js +141 -0
- package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
- package/dist/build-tools/__tests__/utils.test.js +161 -0
- package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
- package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
- package/dist/build-tools/error-handler.js +308 -0
- package/dist/build-tools/index.d.ts +44 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +50 -0
- package/dist/build-tools/rollup-plugin.js +236 -0
- package/dist/build-tools/types.d.ts +163 -0
- package/dist/build-tools/utils.js +203 -0
- package/dist/build-tools/vite-plugin.js +161 -0
- package/dist/build-tools/webpack-loader.js +123 -0
- package/dist/charts.d.ts +1 -1
- package/dist/charts.js +86 -57
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +136 -112
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +2 -5
- package/dist/forms.js +140 -128
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +1 -1
- package/dist/heavy.js +136 -112
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +152 -78
- package/dist/index.esm.js +346 -340
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +359 -353
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/theme.d.ts +9 -9
- package/dist/theme.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +170 -73
- package/scripts/cli/__tests__/README.md +81 -0
- package/scripts/cli/__tests__/basic.test.js +115 -0
- package/scripts/cli/__tests__/component-generator.test.js +332 -0
- package/scripts/cli/__tests__/integration.test.js +327 -0
- package/scripts/cli/__tests__/test-setup.js +133 -0
- package/scripts/cli/__tests__/token-manager.test.js +251 -0
- package/scripts/cli/__tests__/utils.test.js +161 -0
- package/scripts/cli/component-generator.js +253 -299
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/interactive-init.js +46 -5
- package/scripts/cli/template-manager.js +0 -2
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +148 -126
- package/scripts/cli/templates/index.js +23 -16
- package/scripts/cli/templates/project-templates.js +151 -23
- package/scripts/cli/templates/react-templates.js +280 -210
- package/scripts/cli/templates/scss-templates.js +90 -91
- package/scripts/cli/templates/testing-templates.js +206 -27
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/types-templates.js +70 -56
- package/scripts/cli/theme-bridge.js +8 -2
- package/scripts/cli/token-manager.js +318 -206
- package/scripts/cli/utils.js +0 -1
- package/src/components/Accordion/Accordion.stories.tsx +358 -850
- package/src/components/Accordion/Accordion.test.tsx +70 -50
- package/src/components/Accordion/Accordion.tsx +99 -94
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +6 -5
- package/src/components/AtomixGlass/shader-utils.ts +133 -52
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -36
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +2 -2
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +195 -0
- package/src/components/Avatar/Avatar.tsx +58 -56
- package/src/components/Badge/Badge.stories.tsx +122 -352
- package/src/components/Badge/Badge.test.tsx +41 -41
- package/src/components/Badge/Badge.tsx +64 -62
- package/src/components/Block/Block.stories.tsx +30 -11
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +142 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
- package/src/components/Button/Button.stories.tsx +454 -1126
- package/src/components/Button/Button.test.tsx +123 -0
- package/src/components/Button/Button.tsx +88 -60
- package/src/components/Button/ButtonGroup.stories.tsx +376 -215
- package/src/components/Button/ButtonGroup.tsx +4 -15
- package/src/components/Callout/Callout.stories.tsx +316 -568
- package/src/components/Card/Card.stories.tsx +292 -81
- package/src/components/Card/Card.tsx +30 -14
- package/src/components/Chart/AreaChart.tsx +1 -1
- package/src/components/Chart/CandlestickChart.tsx +23 -16
- package/src/components/Chart/Chart.stories.tsx +153 -16
- package/src/components/Chart/Chart.tsx +40 -44
- package/src/components/Chart/ChartRenderer.tsx +39 -12
- package/src/components/Chart/ChartToolbar.tsx +21 -5
- package/src/components/Chart/DonutChart.tsx +1 -1
- package/src/components/Chart/FunnelChart.tsx +4 -1
- package/src/components/Chart/GaugeChart.tsx +3 -1
- package/src/components/Chart/HeatmapChart.tsx +50 -37
- package/src/components/Chart/LineChart.tsx +3 -2
- package/src/components/Chart/MultiAxisChart.tsx +24 -16
- package/src/components/Chart/RadarChart.tsx +19 -17
- package/src/components/Chart/ScatterChart.tsx +29 -21
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +152 -66
- package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
- package/src/components/Countdown/Countdown.stories.tsx +114 -7
- package/src/components/DataTable/DataTable.stories.tsx +349 -144
- package/src/components/DataTable/DataTable.test.tsx +26 -148
- package/src/components/DataTable/DataTable.tsx +485 -456
- package/src/components/DatePicker/DatePicker.stories.tsx +310 -1066
- package/src/components/DatePicker/DatePicker.tsx +31 -26
- package/src/components/Dropdown/Dropdown.stories.tsx +153 -36
- package/src/components/Dropdown/Dropdown.tsx +313 -299
- package/src/components/EdgePanel/EdgePanel.stories.tsx +221 -25
- package/src/components/EdgePanel/EdgePanel.tsx +1 -3
- package/src/components/Footer/Footer.stories.tsx +396 -327
- package/src/components/Footer/Footer.tsx +130 -128
- package/src/components/Footer/FooterLink.tsx +2 -2
- package/src/components/Form/Checkbox.stories.tsx +140 -6
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +122 -78
- package/src/components/Form/Form.stories.tsx +110 -19
- package/src/components/Form/FormGroup.stories.tsx +127 -4
- package/src/components/Form/Input.stories.tsx +22 -39
- package/src/components/Form/Input.test.tsx +38 -44
- package/src/components/Form/Radio.stories.tsx +146 -17
- package/src/components/Form/Radio.tsx +68 -66
- package/src/components/Form/Select.stories.tsx +140 -8
- package/src/components/Form/Select.tsx +184 -182
- package/src/components/Form/Textarea.stories.tsx +149 -6
- package/src/components/Form/Textarea.test.tsx +27 -32
- package/src/components/Hero/Hero.stories.tsx +372 -38
- package/src/components/Hero/Hero.tsx +201 -55
- package/src/components/Icon/index.ts +7 -1
- package/src/components/List/List.stories.tsx +141 -3
- package/src/components/List/List.tsx +19 -23
- package/src/components/Modal/Modal.stories.tsx +183 -43
- package/src/components/Modal/Modal.tsx +130 -127
- package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
- package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
- package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
- package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
- package/src/components/Pagination/Pagination.stories.tsx +7 -4
- package/src/components/Pagination/Pagination.tsx +199 -202
- package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
- package/src/components/Popover/Popover.stories.tsx +354 -97
- package/src/components/Popover/Popover.tsx +41 -37
- package/src/components/Progress/Progress.stories.tsx +160 -7
- package/src/components/River/River.stories.tsx +3 -2
- package/src/components/SectionIntro/SectionIntro.stories.tsx +239 -47
- package/src/components/Slider/Slider.stories.tsx +12 -4
- package/src/components/Spinner/Spinner.stories.tsx +104 -8
- package/src/components/Spinner/Spinner.test.tsx +23 -23
- package/src/components/Spinner/Spinner.tsx +43 -46
- package/src/components/Steps/Steps.stories.tsx +173 -42
- package/src/components/Tabs/Tabs.stories.tsx +141 -12
- package/src/components/Tabs/Tabs.tsx +74 -72
- package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +137 -36
- package/src/components/Toggle/Toggle.test.tsx +65 -70
- package/src/components/Toggle/Toggle.tsx +4 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -100
- package/src/components/Tooltip/Tooltip.tsx +104 -106
- package/src/components/Upload/Upload.stories.tsx +241 -150
- package/src/components/Upload/Upload.tsx +287 -283
- package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
- package/src/components/index.ts +13 -2
- package/src/layouts/Grid/Grid.stories.tsx +9 -3
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +219 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/shared-mouse-tracker.ts +13 -14
- package/src/lib/composables/useAtomixGlass.ts +126 -97
- package/src/lib/composables/useChartExport.ts +3 -8
- package/src/lib/composables/useDataTable.ts +72 -43
- package/src/lib/composables/useHero.ts +58 -14
- package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
- package/src/lib/composables/useInput.ts +10 -8
- package/src/lib/composables/useSideMenu.ts +6 -5
- package/src/lib/composables/useTooltip.ts +1 -2
- package/src/lib/composables/useVideoPlayer.ts +44 -35
- package/src/lib/config/index.ts +154 -154
- package/src/lib/constants/components.ts +9 -32
- package/src/lib/constants/cssVariables.ts +29 -29
- package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
- package/src/lib/hooks/index.ts +1 -1
- package/src/lib/hooks/useComponentCustomization.ts +11 -17
- package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
- package/src/lib/patterns/__tests__/slots.test.ts +1 -1
- package/src/lib/patterns/index.ts +1 -1
- package/src/lib/patterns/slots.tsx +8 -13
- package/src/lib/storybook/InteractiveDemo.tsx +13 -18
- package/src/lib/storybook/PreviewContainer.tsx +1 -1
- package/src/lib/storybook/VariantsGrid.tsx +3 -7
- package/src/lib/storybook/index.ts +1 -1
- package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
- package/src/lib/theme/adapters/index.ts +3 -9
- package/src/lib/theme/adapters/themeAdapter.ts +41 -26
- package/src/lib/theme/config/index.ts +1 -1
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +10 -5
- package/src/lib/theme/constants/constants.ts +2 -2
- package/src/lib/theme/constants/index.ts +1 -2
- package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
- package/src/lib/theme/core/composeTheme.ts +32 -26
- package/src/lib/theme/core/createTheme.ts +1 -1
- package/src/lib/theme/core/createThemeObject.ts +308 -301
- package/src/lib/theme/core/index.ts +3 -3
- package/src/lib/theme/devtools/CLI.ts +107 -105
- package/src/lib/theme/devtools/Comparator.tsx +50 -32
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
- package/src/lib/theme/devtools/Inspector.tsx +75 -60
- package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
- package/src/lib/theme/devtools/Preview.tsx +150 -106
- package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
- package/src/lib/theme/devtools/index.ts +3 -9
- package/src/lib/theme/devtools/useHistory.ts +23 -21
- package/src/lib/theme/errors/errors.ts +12 -11
- package/src/lib/theme/errors/index.ts +2 -7
- package/src/lib/theme/generators/generateCSS.ts +9 -13
- package/src/lib/theme/generators/generateCSSNested.ts +1 -6
- package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
- package/src/lib/theme/generators/index.ts +1 -4
- package/src/lib/theme/i18n/index.ts +1 -1
- package/src/lib/theme/i18n/rtl.ts +13 -13
- package/src/lib/theme/index.ts +7 -16
- package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
- package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
- package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
- package/src/lib/theme/runtime/index.ts +2 -5
- package/src/lib/theme/runtime/useTheme.ts +18 -18
- package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
- package/src/lib/theme/test/testTheme.ts +15 -16
- package/src/lib/theme/tokens/index.ts +2 -7
- package/src/lib/theme/tokens/tokens.ts +25 -24
- package/src/lib/theme/types.ts +428 -411
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
- package/src/lib/theme/utils/componentTheming.ts +18 -18
- package/src/lib/theme/utils/domUtils.ts +277 -289
- package/src/lib/theme/utils/index.ts +1 -2
- package/src/lib/theme/utils/injectCSS.ts +10 -14
- package/src/lib/theme/utils/naming.ts +20 -16
- package/src/lib/theme/utils/themeHelpers.ts +10 -12
- package/src/lib/theme/utils/themeUtils.ts +85 -86
- package/src/lib/theme/utils/themeValidation.ts +82 -33
- package/src/lib/theme-tools.ts +8 -6
- package/src/lib/types/components.ts +172 -71
- package/src/lib/types/partProps.ts +1 -1
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/componentUtils.ts +8 -12
- package/src/lib/utils/csv.ts +19 -0
- package/src/lib/utils/dataTableExport.ts +2 -15
- package/src/lib/utils/fontPreloader.ts +10 -19
- package/src/lib/utils/icons.ts +4 -1
- package/src/lib/utils/index.ts +2 -6
- package/src/lib/utils/memoryMonitor.ts +10 -8
- package/src/lib/utils/themeNaming.ts +2 -2
- package/src/styles/01-settings/_index.scss +1 -1
- package/src/styles/01-settings/_settings.accordion.scss +28 -7
- package/src/styles/01-settings/_settings.colors.scss +11 -11
- package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
- package/src/styles/01-settings/_settings.navbar.scss +1 -1
- package/src/styles/01-settings/_settings.spacing.scss +3 -4
- package/src/styles/01-settings/_settings.tooltip.scss +1 -1
- package/src/styles/01-settings/_settings.typography.scss +4 -4
- package/src/styles/02-tools/_tools.button.scss +51 -21
- package/src/styles/02-tools/_tools.utility-api.scss +38 -12
- package/src/styles/03-generic/_generic.root.scss +4 -3
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.atomix-glass.scss +13 -9
- package/src/styles/06-components/_components.button.scss +16 -4
- package/src/styles/06-components/_components.callout.scss +27 -21
- package/src/styles/06-components/_components.card.scss +5 -14
- package/src/styles/06-components/_components.chart.scss +22 -19
- package/src/styles/06-components/_components.checkbox.scss +25 -17
- package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
- package/src/styles/06-components/_components.edge-panel.scss +9 -2
- package/src/styles/06-components/_components.footer.scss +1 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -5
- package/src/styles/06-components/_components.toggle.scss +18 -0
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/06-components/old.chart.styles.scss +0 -2
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.border.scss +69 -27
- package/src/styles/99-utilities/_utilities.display.scss +1 -1
- package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
- package/src/styles/99-utilities/_utilities.position.scss +16 -9
- package/src/styles/99-utilities/_utilities.scss +2 -0
- package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
- package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +67 -46
- package/themes/dark-complementary/README.md +98 -0
- package/themes/dark-complementary/index.scss +158 -0
- package/themes/default-light/README.md +81 -0
- package/themes/default-light/index.scss +154 -0
- package/themes/high-contrast/README.md +105 -0
- package/themes/high-contrast/index.scss +172 -0
- package/themes/test-theme/README.md +38 -0
- package/themes/test-theme/index.scss +47 -0
- package/scripts/cli/templates-original-backup.js +0 -1655
- package/scripts/cli/templates_backup.js +0 -684
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
- package/src/lib/composables/useButton.ts +0 -93
- package/src/lib/composables/useCheckbox.ts +0 -70
|
@@ -267,32 +267,37 @@ export const DatePicker = forwardRef<DatePickerRef, DatePickerProps>(
|
|
|
267
267
|
</>
|
|
268
268
|
)}
|
|
269
269
|
|
|
270
|
-
{viewMode === 'years' &&
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
270
|
+
{viewMode === 'years' &&
|
|
271
|
+
(() => {
|
|
272
|
+
const years = generateYears();
|
|
273
|
+
return (
|
|
274
|
+
<>
|
|
275
|
+
<button
|
|
276
|
+
type="button"
|
|
277
|
+
className="c-datepicker__nav-button c-datepicker__nav-button--prev-decade"
|
|
278
|
+
onClick={handlePrevDecade}
|
|
279
|
+
aria-label="Previous decade"
|
|
280
|
+
>
|
|
281
|
+
<Icon name="CaretDoubleLeft" size="sm" />
|
|
282
|
+
</button>
|
|
283
|
+
<button
|
|
284
|
+
type="button"
|
|
285
|
+
className="c-datepicker__view-switch"
|
|
286
|
+
onClick={switchToDayView}
|
|
287
|
+
>
|
|
288
|
+
{years[0]} - {years[years.length - 1]}
|
|
289
|
+
</button>
|
|
290
|
+
<button
|
|
291
|
+
type="button"
|
|
292
|
+
className="c-datepicker__nav-button c-datepicker__nav-button--next-decade"
|
|
293
|
+
onClick={handleNextDecade}
|
|
294
|
+
aria-label="Next decade"
|
|
295
|
+
>
|
|
296
|
+
<Icon name="CaretDoubleRight" size="sm" />
|
|
297
|
+
</button>
|
|
298
|
+
</>
|
|
299
|
+
);
|
|
300
|
+
})()}
|
|
296
301
|
</div>
|
|
297
302
|
|
|
298
303
|
<div className="c-datepicker__body">
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
2
3
|
import React, { useState } from 'react';
|
|
3
4
|
import { ThemeColor } from '../../lib/types/components';
|
|
4
5
|
import { Icon } from '../Icon';
|
|
@@ -12,8 +13,72 @@ const meta = {
|
|
|
12
13
|
layout: 'centered',
|
|
13
14
|
docs: {
|
|
14
15
|
description: {
|
|
15
|
-
component:
|
|
16
|
-
|
|
16
|
+
component: `
|
|
17
|
+
# Dropdown
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
Dropdown provides a toggleable menu that appears relative to a trigger element. It supports multiple placement options, click or hover triggers, and can include dividers, headers, and icons. Dropdowns are ideal for navigation menus, action menus, or any context where options need to be revealed on demand.
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- Multiple placement options (top, bottom, left, right with start/end variations)
|
|
26
|
+
- Click or hover trigger modes
|
|
27
|
+
- Color variants
|
|
28
|
+
- Glass morphism effect
|
|
29
|
+
- Customizable dimensions
|
|
30
|
+
- Auto-close behaviors
|
|
31
|
+
- Rich content support (headers, dividers, icons)
|
|
32
|
+
|
|
33
|
+
## Accessibility
|
|
34
|
+
|
|
35
|
+
- Keyboard support: Navigate with arrow keys, activate with Enter/Space
|
|
36
|
+
- Screen reader: Menu items and structure announced properly
|
|
37
|
+
- ARIA support: Proper roles and properties for dropdown components
|
|
38
|
+
- Focus management: Maintains focus within the dropdown menu
|
|
39
|
+
|
|
40
|
+
## Usage Examples
|
|
41
|
+
|
|
42
|
+
### Basic Usage
|
|
43
|
+
|
|
44
|
+
\`\`\`tsx
|
|
45
|
+
<Dropdown
|
|
46
|
+
trigger="click"
|
|
47
|
+
placement="bottom-start"
|
|
48
|
+
children={<button>Dropdown</button>}
|
|
49
|
+
menu={<div>Menu content</div>}
|
|
50
|
+
/>
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
### With Glass Effect
|
|
54
|
+
|
|
55
|
+
\`\`\`tsx
|
|
56
|
+
<Dropdown
|
|
57
|
+
trigger="click"
|
|
58
|
+
placement="bottom-start"
|
|
59
|
+
glass={true}
|
|
60
|
+
children={<button>Dropdown</button>}
|
|
61
|
+
menu={<div>Menu content</div>}
|
|
62
|
+
/>
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
## API Reference
|
|
66
|
+
|
|
67
|
+
### Props
|
|
68
|
+
|
|
69
|
+
| Prop | Type | Default | Description |
|
|
70
|
+
| ---- | ---- | ------- | ----------- |
|
|
71
|
+
| placement | Placement | 'bottom-start' | The placement of the dropdown menu relative to the trigger element |
|
|
72
|
+
| trigger | 'click' \\| 'hover' | 'click' | How the dropdown is triggered - by click or hover |
|
|
73
|
+
| variant | ThemeColor | 'secondary' | The color variant of the dropdown |
|
|
74
|
+
| minWidth | string | - | Minimum width of the dropdown menu |
|
|
75
|
+
| maxHeight | string | - | Maximum height of the dropdown menu |
|
|
76
|
+
| closeOnClickOutside | boolean | true | Whether to close the dropdown when clicking outside |
|
|
77
|
+
| closeOnEscape | boolean | true | Whether to close the dropdown when pressing the Escape key |
|
|
78
|
+
| glass | boolean | false | Enable glass morphism effect |
|
|
79
|
+
| isOpen | boolean | - | Controlled open state of the dropdown |
|
|
80
|
+
| onOpenChange | (open: boolean) => void | - | Callback when open state changes |
|
|
81
|
+
`,
|
|
17
82
|
},
|
|
18
83
|
},
|
|
19
84
|
},
|
|
@@ -32,36 +97,80 @@ const meta = {
|
|
|
32
97
|
'right-end',
|
|
33
98
|
],
|
|
34
99
|
description: 'The placement of the dropdown menu relative to the trigger element',
|
|
100
|
+
table: {
|
|
101
|
+
type: { summary: 'Placement' },
|
|
102
|
+
defaultValue: { summary: 'bottom-start' },
|
|
103
|
+
},
|
|
35
104
|
},
|
|
36
105
|
trigger: {
|
|
37
106
|
control: { type: 'radio' },
|
|
38
107
|
options: ['click', 'hover'],
|
|
39
108
|
description: 'How the dropdown is triggered - by click or hover',
|
|
109
|
+
table: {
|
|
110
|
+
type: { summary: '"click" | "hover"' },
|
|
111
|
+
defaultValue: { summary: 'click' },
|
|
112
|
+
},
|
|
40
113
|
},
|
|
41
114
|
variant: {
|
|
42
115
|
control: { type: 'select' },
|
|
43
116
|
options: THEME_COLORS,
|
|
44
117
|
description: 'The color variant of the dropdown',
|
|
118
|
+
table: {
|
|
119
|
+
type: { summary: 'ThemeColor' },
|
|
120
|
+
defaultValue: { summary: 'secondary' },
|
|
121
|
+
},
|
|
45
122
|
},
|
|
46
123
|
minWidth: {
|
|
47
124
|
control: 'text',
|
|
48
125
|
description: 'Minimum width of the dropdown menu',
|
|
126
|
+
table: {
|
|
127
|
+
type: { summary: 'string' },
|
|
128
|
+
defaultValue: { summary: '-' },
|
|
129
|
+
},
|
|
49
130
|
},
|
|
50
131
|
maxHeight: {
|
|
51
132
|
control: 'text',
|
|
52
133
|
description: 'Maximum height of the dropdown menu',
|
|
134
|
+
table: {
|
|
135
|
+
type: { summary: 'string' },
|
|
136
|
+
defaultValue: { summary: '-' },
|
|
137
|
+
},
|
|
53
138
|
},
|
|
54
139
|
closeOnClickOutside: {
|
|
55
140
|
control: 'boolean',
|
|
56
141
|
description: 'Whether to close the dropdown when clicking outside',
|
|
142
|
+
table: {
|
|
143
|
+
type: { summary: 'boolean' },
|
|
144
|
+
defaultValue: { summary: true },
|
|
145
|
+
},
|
|
57
146
|
},
|
|
58
147
|
closeOnEscape: {
|
|
59
148
|
control: 'boolean',
|
|
60
149
|
description: 'Whether to close the dropdown when pressing the Escape key',
|
|
150
|
+
table: {
|
|
151
|
+
type: { summary: 'boolean' },
|
|
152
|
+
defaultValue: { summary: true },
|
|
153
|
+
},
|
|
61
154
|
},
|
|
62
155
|
glass: {
|
|
63
156
|
control: 'boolean',
|
|
64
157
|
description: 'Enable glass morphism effect',
|
|
158
|
+
table: {
|
|
159
|
+
type: { summary: 'boolean' },
|
|
160
|
+
defaultValue: { summary: false },
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
isOpen: {
|
|
164
|
+
control: 'boolean',
|
|
165
|
+
description: 'Controlled open state of the dropdown',
|
|
166
|
+
table: {
|
|
167
|
+
type: { summary: 'boolean' },
|
|
168
|
+
defaultValue: { summary: '-' },
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
onOpenChange: {
|
|
172
|
+
action: 'open state changed',
|
|
173
|
+
description: 'Callback when open state changes',
|
|
65
174
|
},
|
|
66
175
|
},
|
|
67
176
|
} satisfies Meta<typeof Dropdown>;
|
|
@@ -85,10 +194,7 @@ const InteractiveDropdown = (args: React.ComponentProps<typeof Dropdown>) => {
|
|
|
85
194
|
);
|
|
86
195
|
};
|
|
87
196
|
|
|
88
|
-
|
|
89
|
-
* Basic dropdown example with default settings
|
|
90
|
-
*/
|
|
91
|
-
export const Default: Story = {
|
|
197
|
+
export const BasicUsage: Story = {
|
|
92
198
|
args: {
|
|
93
199
|
trigger: 'click',
|
|
94
200
|
placement: 'bottom-start',
|
|
@@ -99,35 +205,49 @@ export const Default: Story = {
|
|
|
99
205
|
),
|
|
100
206
|
menu: (
|
|
101
207
|
<>
|
|
102
|
-
<
|
|
103
|
-
<
|
|
104
|
-
<DropdownItem>
|
|
208
|
+
<DropdownHeader>Dropdown Header</DropdownHeader>
|
|
209
|
+
<DropdownDivider />
|
|
210
|
+
<DropdownItem>Option 1</DropdownItem>
|
|
211
|
+
<DropdownItem>Option 2</DropdownItem>
|
|
212
|
+
<DropdownItem>Option 3</DropdownItem>
|
|
213
|
+
<DropdownDivider />
|
|
214
|
+
<DropdownItem disabled>Disabled Option</DropdownItem>
|
|
105
215
|
</>
|
|
106
216
|
),
|
|
107
217
|
},
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
export const ClickTrigger: Story = {
|
|
115
|
-
args: {
|
|
116
|
-
...Default.args,
|
|
117
|
-
trigger: 'click',
|
|
218
|
+
parameters: {
|
|
219
|
+
docs: {
|
|
220
|
+
description: {
|
|
221
|
+
story: 'Basic dropdown with default settings and menu items.',
|
|
222
|
+
},
|
|
223
|
+
},
|
|
118
224
|
},
|
|
119
|
-
render: args => <InteractiveDropdown {...args} />,
|
|
120
225
|
};
|
|
121
226
|
|
|
122
|
-
/**
|
|
123
|
-
* Dropdown that opens on hover
|
|
124
|
-
*/
|
|
125
227
|
export const HoverTrigger: Story = {
|
|
126
228
|
args: {
|
|
127
|
-
...Default.args,
|
|
128
229
|
trigger: 'hover',
|
|
230
|
+
placement: 'bottom-start',
|
|
231
|
+
children: (
|
|
232
|
+
<button className="c-btn c-btn--secondary">
|
|
233
|
+
Hover Dropdown <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
|
|
234
|
+
</button>
|
|
235
|
+
),
|
|
236
|
+
menu: (
|
|
237
|
+
<>
|
|
238
|
+
<DropdownItem>Hover Option 1</DropdownItem>
|
|
239
|
+
<DropdownItem>Hover Option 2</DropdownItem>
|
|
240
|
+
<DropdownItem>Hover Option 3</DropdownItem>
|
|
241
|
+
</>
|
|
242
|
+
),
|
|
243
|
+
},
|
|
244
|
+
parameters: {
|
|
245
|
+
docs: {
|
|
246
|
+
description: {
|
|
247
|
+
story: 'Dropdown that opens on hover instead of click.',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
129
250
|
},
|
|
130
|
-
render: args => <InteractiveDropdown {...args} />,
|
|
131
251
|
};
|
|
132
252
|
|
|
133
253
|
/**
|
|
@@ -135,7 +255,7 @@ export const HoverTrigger: Story = {
|
|
|
135
255
|
*/
|
|
136
256
|
export const WithIcons: Story = {
|
|
137
257
|
args: {
|
|
138
|
-
...
|
|
258
|
+
...BasicUsage.args,
|
|
139
259
|
menu: (
|
|
140
260
|
<>
|
|
141
261
|
<DropdownItem icon={<Icon name="House" size="sm" />}>Home</DropdownItem>
|
|
@@ -153,7 +273,7 @@ export const WithIcons: Story = {
|
|
|
153
273
|
*/
|
|
154
274
|
export const WithLinks: Story = {
|
|
155
275
|
args: {
|
|
156
|
-
...
|
|
276
|
+
...BasicUsage.args,
|
|
157
277
|
menu: (
|
|
158
278
|
<>
|
|
159
279
|
<DropdownItem href="#home">Home</DropdownItem>
|
|
@@ -171,7 +291,7 @@ export const WithLinks: Story = {
|
|
|
171
291
|
*/
|
|
172
292
|
export const WithHeader: Story = {
|
|
173
293
|
args: {
|
|
174
|
-
...
|
|
294
|
+
...BasicUsage.args,
|
|
175
295
|
menu: (
|
|
176
296
|
<>
|
|
177
297
|
<DropdownHeader>Account Options</DropdownHeader>
|
|
@@ -192,7 +312,7 @@ export const WithHeader: Story = {
|
|
|
192
312
|
*/
|
|
193
313
|
export const ActiveItem: Story = {
|
|
194
314
|
args: {
|
|
195
|
-
...
|
|
315
|
+
...BasicUsage.args,
|
|
196
316
|
menu: (
|
|
197
317
|
<>
|
|
198
318
|
<DropdownItem active>Active Item</DropdownItem>
|
|
@@ -209,7 +329,7 @@ export const ActiveItem: Story = {
|
|
|
209
329
|
*/
|
|
210
330
|
export const DisabledItem: Story = {
|
|
211
331
|
args: {
|
|
212
|
-
...
|
|
332
|
+
...BasicUsage.args,
|
|
213
333
|
menu: (
|
|
214
334
|
<>
|
|
215
335
|
<DropdownItem>Regular Item</DropdownItem>
|
|
@@ -259,10 +379,7 @@ export const AllPlacements: Story = {
|
|
|
259
379
|
}}
|
|
260
380
|
>
|
|
261
381
|
{placements.map(placement => (
|
|
262
|
-
<div
|
|
263
|
-
key={placement.value}
|
|
264
|
-
className="u-flex u-items-center u-justify-center"
|
|
265
|
-
>
|
|
382
|
+
<div key={placement.value} className="u-flex u-items-center u-justify-center">
|
|
266
383
|
<Dropdown
|
|
267
384
|
trigger="click"
|
|
268
385
|
placement={placement.value as any}
|
|
@@ -358,7 +475,7 @@ export const AllVariants: Story = {
|
|
|
358
475
|
*/
|
|
359
476
|
export const GlassDropdown: Story = {
|
|
360
477
|
args: {
|
|
361
|
-
...
|
|
478
|
+
...BasicUsage.args,
|
|
362
479
|
glass: true,
|
|
363
480
|
},
|
|
364
481
|
render: args => <InteractiveDropdown {...args} />,
|
|
@@ -382,7 +499,7 @@ export const GlassDropdown: Story = {
|
|
|
382
499
|
*/
|
|
383
500
|
export const GlassDropdownCustom: Story = {
|
|
384
501
|
args: {
|
|
385
|
-
...
|
|
502
|
+
...BasicUsage.args,
|
|
386
503
|
glass: {
|
|
387
504
|
displacementScale: 80,
|
|
388
505
|
blurAmount: 2,
|