@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import { Card, ElevationCard } from './index';
|
|
4
5
|
import { Grid, GridCol } from '../../layouts';
|
|
@@ -13,69 +14,276 @@ const meta = {
|
|
|
13
14
|
layout: 'centered',
|
|
14
15
|
docs: {
|
|
15
16
|
description: {
|
|
16
|
-
component:
|
|
17
|
-
|
|
17
|
+
component: `
|
|
18
|
+
# Card
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Cards are flexible containers for displaying content with optional headers, images, and footers. They are ideal for grouping related information, showcasing products, or presenting content in a structured format. Cards support multiple variants, sizes, and can be interactive.
|
|
23
|
+
|
|
24
|
+
## Features
|
|
25
|
+
|
|
26
|
+
- Multiple appearance options (filled, outlined, ghost, elevated)
|
|
27
|
+
- Various elevation levels
|
|
28
|
+
- Support for headers, images, and footers
|
|
29
|
+
- Different color variants and sizes
|
|
30
|
+
- Interactive states (active, disabled, loading)
|
|
31
|
+
- Responsive design
|
|
32
|
+
|
|
33
|
+
## Accessibility
|
|
34
|
+
|
|
35
|
+
- Keyboard support: Cards can be navigated using Tab key
|
|
36
|
+
- Screen reader: Proper semantic markup ensures content is accessible
|
|
37
|
+
- ARIA support: Appropriate roles and properties are automatically applied
|
|
38
|
+
- Focus management: Maintains focus within the card when activated
|
|
39
|
+
|
|
40
|
+
## Usage Examples
|
|
41
|
+
|
|
42
|
+
### Basic Usage
|
|
43
|
+
|
|
44
|
+
\`\`\`tsx
|
|
45
|
+
<Card title="Card Title" text="This is a basic card" />
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
### With Image
|
|
49
|
+
|
|
50
|
+
\`\`\`tsx
|
|
51
|
+
<Card
|
|
52
|
+
title="Card with Image"
|
|
53
|
+
text="This card includes an image"
|
|
54
|
+
image="https://example.com/image.jpg"
|
|
55
|
+
imageAlt="Description of image"
|
|
56
|
+
/>
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
## API Reference
|
|
60
|
+
|
|
61
|
+
### Props
|
|
62
|
+
|
|
63
|
+
| Prop | Type | Default | Description |
|
|
64
|
+
| ---- | ---- | ------- | ----------- |
|
|
65
|
+
| header | string | - | Header content for the card |
|
|
66
|
+
| title | string | - | Title of the card |
|
|
67
|
+
| text | string | - | Main text content of the card |
|
|
68
|
+
| image | string | - | Image URL for the card |
|
|
69
|
+
| imageAlt | string | - | Alt text for the card image |
|
|
70
|
+
| footer | string | - | Footer content for the card |
|
|
71
|
+
| size | 'sm' \\| 'md' \\| 'lg' | 'md' | Size of the card |
|
|
72
|
+
| variant | string | 'secondary' | Color variant of the card |
|
|
73
|
+
| appearance | 'filled' \\| 'outlined' \\| 'ghost' \\| 'elevated' | 'filled' | Visual style of the card |
|
|
74
|
+
| elevation | 'none' \\| 'sm' \\| 'md' \\| 'lg' \\| 'xl' | 'none' | Shadow depth of the card |
|
|
75
|
+
| row | boolean | false | Whether to arrange content horizontally |
|
|
76
|
+
| flat | boolean | false | Whether to remove border radius |
|
|
77
|
+
| active | boolean | false | Whether the card is in active state |
|
|
78
|
+
| disabled | boolean | false | Whether the card is disabled |
|
|
79
|
+
| loading | boolean | false | Whether the card is in loading state |
|
|
80
|
+
| selected | boolean | false | Whether the card is selected |
|
|
81
|
+
| interactive | boolean | false | Whether the card responds to interactions |
|
|
82
|
+
| className | string | - | Additional CSS class names |
|
|
83
|
+
`,
|
|
18
84
|
},
|
|
19
85
|
},
|
|
20
86
|
},
|
|
21
87
|
tags: ['autodocs'],
|
|
22
88
|
argTypes: {
|
|
23
|
-
header: { control: 'text', description: 'Header content for the card' },
|
|
24
89
|
title: { control: 'text', description: 'Title of the card' },
|
|
25
90
|
text: { control: 'text', description: 'Main text content of the card' },
|
|
26
91
|
image: { control: 'text', description: 'Image URL for the card' },
|
|
27
92
|
imageAlt: { control: 'text', description: 'Alt text for the card image' },
|
|
28
|
-
footer: { control: 'text', description: 'Footer content for the card' },
|
|
29
93
|
size: {
|
|
30
94
|
control: { type: 'select' },
|
|
31
95
|
options: SIZES,
|
|
32
96
|
description: 'Size of the card',
|
|
33
97
|
defaultValue: 'md',
|
|
98
|
+
table: {
|
|
99
|
+
type: { summary: 'string' },
|
|
100
|
+
defaultValue: { summary: 'md' },
|
|
101
|
+
},
|
|
34
102
|
},
|
|
35
103
|
variant: {
|
|
36
104
|
control: { type: 'select' },
|
|
37
105
|
options: THEME_COLORS,
|
|
38
106
|
description: 'Color variant of the card',
|
|
39
107
|
defaultValue: 'secondary',
|
|
108
|
+
table: {
|
|
109
|
+
type: { summary: 'string' },
|
|
110
|
+
defaultValue: { summary: 'secondary' },
|
|
111
|
+
},
|
|
40
112
|
},
|
|
41
113
|
appearance: {
|
|
42
114
|
control: { type: 'select' },
|
|
43
115
|
options: ['filled', 'outlined', 'ghost', 'elevated'],
|
|
116
|
+
description: 'Visual style of the card',
|
|
44
117
|
defaultValue: 'filled',
|
|
118
|
+
table: {
|
|
119
|
+
type: { summary: '"filled" | "outlined" | "ghost" | "elevated"' },
|
|
120
|
+
defaultValue: { summary: 'filled' },
|
|
121
|
+
},
|
|
45
122
|
},
|
|
46
123
|
elevation: {
|
|
47
124
|
control: { type: 'select' },
|
|
48
125
|
options: ['none', 'sm', 'md', 'lg', 'xl'],
|
|
126
|
+
description: 'Shadow depth of the card',
|
|
49
127
|
defaultValue: 'none',
|
|
128
|
+
table: {
|
|
129
|
+
type: { summary: '"none" | "sm" | "md" | "lg" | "xl"' },
|
|
130
|
+
defaultValue: { summary: 'none' },
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
row: {
|
|
134
|
+
control: 'boolean',
|
|
135
|
+
description: 'Whether to arrange content horizontally',
|
|
136
|
+
table: {
|
|
137
|
+
type: { summary: 'boolean' },
|
|
138
|
+
defaultValue: { summary: false },
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
flat: {
|
|
142
|
+
control: 'boolean',
|
|
143
|
+
description: 'Whether to remove border radius',
|
|
144
|
+
table: {
|
|
145
|
+
type: { summary: 'boolean' },
|
|
146
|
+
defaultValue: { summary: false },
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
active: {
|
|
150
|
+
control: 'boolean',
|
|
151
|
+
description: 'Whether the card is in active state',
|
|
152
|
+
table: {
|
|
153
|
+
type: { summary: 'boolean' },
|
|
154
|
+
defaultValue: { summary: false },
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
disabled: {
|
|
158
|
+
control: 'boolean',
|
|
159
|
+
description: 'Whether the card is disabled',
|
|
160
|
+
table: {
|
|
161
|
+
type: { summary: 'boolean' },
|
|
162
|
+
defaultValue: { summary: false },
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
loading: {
|
|
166
|
+
control: 'boolean',
|
|
167
|
+
description: 'Whether the card is in loading state',
|
|
168
|
+
table: {
|
|
169
|
+
type: { summary: 'boolean' },
|
|
170
|
+
defaultValue: { summary: false },
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
selected: {
|
|
174
|
+
control: 'boolean',
|
|
175
|
+
description: 'Whether the card is selected',
|
|
176
|
+
table: {
|
|
177
|
+
type: { summary: 'boolean' },
|
|
178
|
+
defaultValue: { summary: false },
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
interactive: {
|
|
182
|
+
control: 'boolean',
|
|
183
|
+
description: 'Whether the card responds to interactions',
|
|
184
|
+
table: {
|
|
185
|
+
type: { summary: 'boolean' },
|
|
186
|
+
defaultValue: { summary: false },
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
className: {
|
|
190
|
+
control: 'text',
|
|
191
|
+
description: 'Additional CSS class names',
|
|
192
|
+
table: {
|
|
193
|
+
type: { summary: 'string' },
|
|
194
|
+
defaultValue: { summary: '-' },
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
onClick: {
|
|
198
|
+
action: 'clicked',
|
|
199
|
+
description: 'Callback when card is clicked',
|
|
200
|
+
},
|
|
201
|
+
header: {
|
|
202
|
+
control: 'boolean',
|
|
203
|
+
description: 'Whether to show the header',
|
|
204
|
+
table: {
|
|
205
|
+
type: { summary: 'boolean' },
|
|
206
|
+
defaultValue: { summary: false },
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
footer: {
|
|
210
|
+
control: 'boolean',
|
|
211
|
+
description: 'Whether to show the footer',
|
|
212
|
+
table: {
|
|
213
|
+
type: { summary: 'boolean' },
|
|
214
|
+
defaultValue: { summary: false },
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
glass: {
|
|
218
|
+
control: 'boolean',
|
|
219
|
+
description: 'Enable glass morphism effect',
|
|
220
|
+
table: {
|
|
221
|
+
type: { summary: 'boolean' },
|
|
222
|
+
defaultValue: { summary: false },
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
rounded: {
|
|
226
|
+
control: 'boolean',
|
|
227
|
+
description: 'Whether the card has rounded corners',
|
|
228
|
+
table: {
|
|
229
|
+
type: { summary: 'boolean' },
|
|
230
|
+
defaultValue: { summary: false },
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
border: {
|
|
234
|
+
control: 'boolean',
|
|
235
|
+
description: 'Whether the card has a border',
|
|
236
|
+
table: {
|
|
237
|
+
type: { summary: 'boolean' },
|
|
238
|
+
defaultValue: { summary: false },
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
shadow: {
|
|
242
|
+
control: 'boolean',
|
|
243
|
+
description: 'Whether the card has a shadow',
|
|
244
|
+
table: {
|
|
245
|
+
type: { summary: 'boolean' },
|
|
246
|
+
defaultValue: { summary: false },
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
hoverable: {
|
|
250
|
+
control: 'boolean',
|
|
251
|
+
description: 'Whether the card has hover effects',
|
|
252
|
+
table: {
|
|
253
|
+
type: { summary: 'boolean' },
|
|
254
|
+
defaultValue: { summary: false },
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
mode: {
|
|
258
|
+
control: 'radio',
|
|
259
|
+
options: ['cartesian', 'polar', 'bipolar'],
|
|
260
|
+
description: 'The displacement mode for the glass effect',
|
|
261
|
+
table: {
|
|
262
|
+
type: { summary: '"cartesian" | "polar" | "bipolar"' },
|
|
263
|
+
defaultValue: { summary: 'polar' },
|
|
264
|
+
},
|
|
50
265
|
},
|
|
51
|
-
row: { control: 'boolean' },
|
|
52
|
-
flat: { control: 'boolean' },
|
|
53
|
-
active: { control: 'boolean' },
|
|
54
|
-
disabled: { control: 'boolean' },
|
|
55
|
-
loading: { control: 'boolean' },
|
|
56
|
-
selected: { control: 'boolean' },
|
|
57
|
-
interactive: { control: 'boolean' },
|
|
58
|
-
className: { control: 'text', description: 'Additional CSS class names' },
|
|
59
266
|
},
|
|
60
267
|
} satisfies Meta<typeof Card>;
|
|
61
268
|
|
|
62
269
|
export default meta;
|
|
63
270
|
type Story = StoryObj<typeof meta>;
|
|
64
271
|
|
|
65
|
-
|
|
66
|
-
* Basic card with title and text content.
|
|
67
|
-
*/
|
|
68
|
-
export const Basic: Story = {
|
|
272
|
+
export const BasicUsage: Story = {
|
|
69
273
|
args: {
|
|
70
274
|
title: 'Card Title',
|
|
71
275
|
text: 'This is a basic card with title and text content.',
|
|
72
276
|
className: 'custom-card',
|
|
73
277
|
},
|
|
278
|
+
parameters: {
|
|
279
|
+
docs: {
|
|
280
|
+
description: {
|
|
281
|
+
story: 'Basic card with title and text content.',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
74
285
|
};
|
|
75
286
|
|
|
76
|
-
/**
|
|
77
|
-
* Card with an image displayed above the content.
|
|
78
|
-
*/
|
|
79
287
|
export const WithImage: Story = {
|
|
80
288
|
args: {
|
|
81
289
|
title: 'Card with Image',
|
|
@@ -83,11 +291,15 @@ export const WithImage: Story = {
|
|
|
83
291
|
image: 'https://placehold.co/600x400',
|
|
84
292
|
imageAlt: 'Placeholder image',
|
|
85
293
|
},
|
|
294
|
+
parameters: {
|
|
295
|
+
docs: {
|
|
296
|
+
description: {
|
|
297
|
+
story: 'Card with an image displayed above the content.',
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
},
|
|
86
301
|
};
|
|
87
302
|
|
|
88
|
-
/**
|
|
89
|
-
* Card with action buttons in the footer.
|
|
90
|
-
*/
|
|
91
303
|
export const WithActions: Story = {
|
|
92
304
|
args: {
|
|
93
305
|
title: 'Card with Actions',
|
|
@@ -99,6 +311,13 @@ export const WithActions: Story = {
|
|
|
99
311
|
</React.Fragment>
|
|
100
312
|
),
|
|
101
313
|
},
|
|
314
|
+
parameters: {
|
|
315
|
+
docs: {
|
|
316
|
+
description: {
|
|
317
|
+
story: 'Card with action buttons in the footer.',
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
},
|
|
102
321
|
};
|
|
103
322
|
|
|
104
323
|
/**
|
|
@@ -162,20 +381,16 @@ export const WithGlassEffect: Story = {
|
|
|
162
381
|
parameters: {
|
|
163
382
|
docs: {
|
|
164
383
|
description: {
|
|
165
|
-
story:
|
|
384
|
+
story:
|
|
385
|
+
'Demonstrates a card with glass morphism effect applied, creating a translucent, frosted appearance that works well over colorful backgrounds.',
|
|
166
386
|
},
|
|
167
387
|
},
|
|
168
388
|
},
|
|
169
389
|
render: args => (
|
|
170
390
|
<div
|
|
391
|
+
className="u-bg-cover u-h-80vh u-w-90vw u-grid u-rounded-xl u-overflow-hidden"
|
|
171
392
|
style={{
|
|
172
393
|
backgroundImage: `url(https://picsum.photos/id/128/1920/1024)`,
|
|
173
|
-
backgroundSize: 'cover',
|
|
174
|
-
height: '80vh',
|
|
175
|
-
width: '90vw',
|
|
176
|
-
display: 'grid',
|
|
177
|
-
borderRadius: '12px',
|
|
178
|
-
placeItems: 'center',
|
|
179
394
|
}}
|
|
180
395
|
>
|
|
181
396
|
<Card {...args} style={{ ['--atomix-card-width' as string]: '300px' }} />
|
|
@@ -507,7 +722,8 @@ export const AllGlassModesComparison: Story = {
|
|
|
507
722
|
parameters: {
|
|
508
723
|
docs: {
|
|
509
724
|
description: {
|
|
510
|
-
story:
|
|
725
|
+
story:
|
|
726
|
+
'Side-by-side comparison of all available glass morphism modes (standard, polar, prominent, shader) to help you choose the right effect for your design.',
|
|
511
727
|
},
|
|
512
728
|
},
|
|
513
729
|
},
|
|
@@ -754,42 +970,20 @@ export const GlassCardGallery: Story = {
|
|
|
754
970
|
export const GlassCardLayouts: Story = {
|
|
755
971
|
render: () => (
|
|
756
972
|
<div
|
|
973
|
+
className="u-bg-cover u-bg-center u-p-12 u-rounded-xl u-min-h-95vh u-min-w-95vw u-overflow-auto"
|
|
757
974
|
style={{
|
|
758
975
|
backgroundImage: 'url(https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=1920)',
|
|
759
|
-
backgroundSize: 'cover',
|
|
760
|
-
backgroundPosition: 'center',
|
|
761
|
-
padding: '3rem',
|
|
762
|
-
borderRadius: '12px',
|
|
763
|
-
minHeight: '95vh',
|
|
764
|
-
minWidth: '95vw',
|
|
765
|
-
overflow: 'auto',
|
|
766
976
|
}}
|
|
767
977
|
>
|
|
768
978
|
<Container>
|
|
769
|
-
<h2
|
|
770
|
-
style={{
|
|
771
|
-
textAlign: 'center',
|
|
772
|
-
color: 'white',
|
|
773
|
-
marginBottom: '3rem',
|
|
774
|
-
fontSize: '2rem',
|
|
775
|
-
textShadow: '0 2px 8px rgba(0,0,0,0.5)',
|
|
776
|
-
}}
|
|
777
|
-
>
|
|
979
|
+
<h2 className="u-text-center u-text-white u-mb-12 u-text-2xl u-text-shadow">
|
|
778
980
|
Glass Card Layouts
|
|
779
981
|
</h2>
|
|
780
982
|
|
|
781
|
-
<div
|
|
983
|
+
<div className="u-flex u-gap-8">
|
|
782
984
|
{/* Standard Layout */}
|
|
783
985
|
<div className="u-w-50">
|
|
784
|
-
<h3
|
|
785
|
-
style={{
|
|
786
|
-
color: 'white',
|
|
787
|
-
marginBottom: '1rem',
|
|
788
|
-
textShadow: '0 2px 4px rgba(0,0,0,0.5)',
|
|
789
|
-
}}
|
|
790
|
-
>
|
|
791
|
-
Standard Layout
|
|
792
|
-
</h3>
|
|
986
|
+
<h3 className="u-text-white u-mb-4 u-text-shadow">Standard Layout</h3>
|
|
793
987
|
<Card
|
|
794
988
|
title="Standard Glass Card"
|
|
795
989
|
text="This is a standard glass card with vertical layout."
|
|
@@ -807,15 +1001,7 @@ export const GlassCardLayouts: Story = {
|
|
|
807
1001
|
|
|
808
1002
|
{/* Row Layout */}
|
|
809
1003
|
<div className="u-w-50">
|
|
810
|
-
<h3
|
|
811
|
-
style={{
|
|
812
|
-
color: 'white',
|
|
813
|
-
marginBottom: '1rem',
|
|
814
|
-
textShadow: '0 2px 4px rgba(0,0,0,0.5)',
|
|
815
|
-
}}
|
|
816
|
-
>
|
|
817
|
-
Row Layout
|
|
818
|
-
</h3>
|
|
1004
|
+
<h3 className="u-text-white u-mb-4 u-text-shadow">Row Layout</h3>
|
|
819
1005
|
<Card
|
|
820
1006
|
title="Row Glass Card"
|
|
821
1007
|
text="This is a row glass card with horizontal layout."
|
|
@@ -838,15 +1024,7 @@ export const GlassCardLayouts: Story = {
|
|
|
838
1024
|
|
|
839
1025
|
{/* Flat Layout */}
|
|
840
1026
|
<div className="u-w-50">
|
|
841
|
-
<h3
|
|
842
|
-
style={{
|
|
843
|
-
color: 'white',
|
|
844
|
-
marginBottom: '1rem',
|
|
845
|
-
textShadow: '0 2px 4px rgba(0,0,0,0.5)',
|
|
846
|
-
}}
|
|
847
|
-
>
|
|
848
|
-
Flat Layout
|
|
849
|
-
</h3>
|
|
1027
|
+
<h3 className="u-text-white u-mb-4 u-text-shadow">Flat Layout</h3>
|
|
850
1028
|
<Card
|
|
851
1029
|
title="Flat Glass Card"
|
|
852
1030
|
text="This is a flat glass card with edge-to-edge image."
|
|
@@ -901,7 +1079,13 @@ export const SizeVariants: Story = {
|
|
|
901
1079
|
// Color Variants
|
|
902
1080
|
export const ColorVariants: Story = {
|
|
903
1081
|
render: () => (
|
|
904
|
-
<div
|
|
1082
|
+
<div
|
|
1083
|
+
style={{
|
|
1084
|
+
display: 'grid',
|
|
1085
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',
|
|
1086
|
+
gap: '1rem',
|
|
1087
|
+
}}
|
|
1088
|
+
>
|
|
905
1089
|
<Card variant="primary" title="Primary Card" text="Primary variant card." />
|
|
906
1090
|
<Card variant="secondary" title="Secondary Card" text="Secondary variant card." />
|
|
907
1091
|
<Card variant="success" title="Success Card" text="Success variant card." />
|
|
@@ -917,11 +1101,37 @@ export const ColorVariants: Story = {
|
|
|
917
1101
|
// Appearance Variants
|
|
918
1102
|
export const AppearanceVariants: Story = {
|
|
919
1103
|
render: () => (
|
|
920
|
-
<div
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
1104
|
+
<div
|
|
1105
|
+
style={{
|
|
1106
|
+
display: 'grid',
|
|
1107
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',
|
|
1108
|
+
gap: '1rem',
|
|
1109
|
+
}}
|
|
1110
|
+
>
|
|
1111
|
+
<Card
|
|
1112
|
+
appearance="filled"
|
|
1113
|
+
variant="primary"
|
|
1114
|
+
title="Filled Card"
|
|
1115
|
+
text="Filled appearance with solid background."
|
|
1116
|
+
/>
|
|
1117
|
+
<Card
|
|
1118
|
+
appearance="outlined"
|
|
1119
|
+
variant="primary"
|
|
1120
|
+
title="Outlined Card"
|
|
1121
|
+
text="Outlined appearance with border only."
|
|
1122
|
+
/>
|
|
1123
|
+
<Card
|
|
1124
|
+
appearance="ghost"
|
|
1125
|
+
variant="primary"
|
|
1126
|
+
title="Ghost Card"
|
|
1127
|
+
text="Ghost appearance with minimal styling."
|
|
1128
|
+
/>
|
|
1129
|
+
<Card
|
|
1130
|
+
appearance="elevated"
|
|
1131
|
+
variant="primary"
|
|
1132
|
+
title="Elevated Card"
|
|
1133
|
+
text="Elevated appearance with shadow."
|
|
1134
|
+
/>
|
|
925
1135
|
</div>
|
|
926
1136
|
),
|
|
927
1137
|
};
|
|
@@ -1008,7 +1218,8 @@ export const Comprehensive: Story = {
|
|
|
1008
1218
|
parameters: {
|
|
1009
1219
|
docs: {
|
|
1010
1220
|
description: {
|
|
1011
|
-
story:
|
|
1221
|
+
story:
|
|
1222
|
+
'A comprehensive example demonstrating various card features including sizes, variants, appearances, elevations, and states in a grid layout.',
|
|
1012
1223
|
},
|
|
1013
1224
|
},
|
|
1014
1225
|
},
|
|
@@ -96,7 +96,24 @@ export const Card = React.memo(
|
|
|
96
96
|
]
|
|
97
97
|
.filter(Boolean)
|
|
98
98
|
.join(' '),
|
|
99
|
-
[
|
|
99
|
+
[
|
|
100
|
+
size,
|
|
101
|
+
variant,
|
|
102
|
+
appearance,
|
|
103
|
+
elevation,
|
|
104
|
+
hoverable,
|
|
105
|
+
hoverElevation,
|
|
106
|
+
row,
|
|
107
|
+
flat,
|
|
108
|
+
active,
|
|
109
|
+
disabled,
|
|
110
|
+
loading,
|
|
111
|
+
selected,
|
|
112
|
+
interactive,
|
|
113
|
+
isClickable,
|
|
114
|
+
glass,
|
|
115
|
+
className,
|
|
116
|
+
]
|
|
100
117
|
);
|
|
101
118
|
|
|
102
119
|
// Determine ARIA role
|
|
@@ -239,11 +256,7 @@ export const Card = React.memo(
|
|
|
239
256
|
|
|
240
257
|
if (glass) {
|
|
241
258
|
const glassProps = glass === true ? {} : glass;
|
|
242
|
-
return
|
|
243
|
-
<AtomixGlass {...{ ...glassProps, elasticity: 0 }}>
|
|
244
|
-
{anchorElement}
|
|
245
|
-
</AtomixGlass>
|
|
246
|
-
);
|
|
259
|
+
return <AtomixGlass {...{ ...glassProps, elasticity: 0 }}>{anchorElement}</AtomixGlass>;
|
|
247
260
|
}
|
|
248
261
|
|
|
249
262
|
return anchorElement;
|
|
@@ -258,11 +271,7 @@ export const Card = React.memo(
|
|
|
258
271
|
|
|
259
272
|
if (glass) {
|
|
260
273
|
const glassProps = glass === true ? {} : glass;
|
|
261
|
-
return
|
|
262
|
-
<AtomixGlass {...{ ...glassProps, elasticity: 0 }}>
|
|
263
|
-
{divElement}
|
|
264
|
-
</AtomixGlass>
|
|
265
|
-
);
|
|
274
|
+
return <AtomixGlass {...{ ...glassProps, elasticity: 0 }}>{divElement}</AtomixGlass>;
|
|
266
275
|
}
|
|
267
276
|
|
|
268
277
|
return divElement;
|
|
@@ -327,10 +336,16 @@ export interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
327
336
|
|
|
328
337
|
export const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(
|
|
329
338
|
({ scrollable = false, maxHeight, children, className = '', style, ...props }, ref) => {
|
|
330
|
-
const bodyClasses =
|
|
339
|
+
const bodyClasses =
|
|
340
|
+
`${CARD.SELECTORS.BODY.substring(1)} ${scrollable ? 'c-card__body--scrollable' : ''} ${className}`.trim();
|
|
331
341
|
const bodyStyle: React.CSSProperties = {
|
|
332
342
|
...style,
|
|
333
|
-
...(scrollable && maxHeight
|
|
343
|
+
...(scrollable && maxHeight
|
|
344
|
+
? {
|
|
345
|
+
maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight,
|
|
346
|
+
overflowY: 'auto',
|
|
347
|
+
}
|
|
348
|
+
: {}),
|
|
334
349
|
};
|
|
335
350
|
|
|
336
351
|
return (
|
|
@@ -352,7 +367,8 @@ export interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
352
367
|
|
|
353
368
|
export const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(
|
|
354
369
|
({ align, children, className = '', style, ...props }, ref) => {
|
|
355
|
-
const footerClasses =
|
|
370
|
+
const footerClasses =
|
|
371
|
+
`${CARD.SELECTORS.FOOTER.substring(1)} ${align ? `c-card__footer--align-${align}` : ''} ${className}`.trim();
|
|
356
372
|
|
|
357
373
|
return (
|
|
358
374
|
<div ref={ref} className={footerClasses} style={style} {...props}>
|
|
@@ -49,7 +49,7 @@ const AreaChart = memo(
|
|
|
49
49
|
y: scales.yScale(point.value),
|
|
50
50
|
}));
|
|
51
51
|
|
|
52
|
-
const areaPath = `M ${areaPoints.map(
|
|
52
|
+
const areaPath = `M ${areaPoints.map(p => `${p.x},${p.y}`).join(' L ')} L ${areaPoints[areaPoints.length - 1]?.x},${scales.height} L ${areaPoints[0]?.x},${scales.height} Z`;
|
|
53
53
|
|
|
54
54
|
return (
|
|
55
55
|
<g key={`dataset-${datasetIndex}`}>
|
|
@@ -125,7 +125,10 @@ const CandlestickChart = memo(
|
|
|
125
125
|
borderColor = 'var(--atomix-primary-border-subtle)',
|
|
126
126
|
showMovingAverages = false,
|
|
127
127
|
movingAveragePeriods = [7, 21],
|
|
128
|
-
movingAverageColors = [
|
|
128
|
+
movingAverageColors = [
|
|
129
|
+
'var(--atomix-warning-bg-subtle)',
|
|
130
|
+
'var(--atomix-warning-border-subtle)',
|
|
131
|
+
],
|
|
129
132
|
dateFormat = 'short',
|
|
130
133
|
dateFormatter,
|
|
131
134
|
showGrid = true,
|
|
@@ -189,7 +192,11 @@ const CandlestickChart = memo(
|
|
|
189
192
|
}: ChartRenderContentParams) => {
|
|
190
193
|
if (!candlestickData.length) return null;
|
|
191
194
|
|
|
192
|
-
const showTooltips =
|
|
195
|
+
const showTooltips =
|
|
196
|
+
toolbarState?.showTooltips ??
|
|
197
|
+
renderConfig?.showTooltips ??
|
|
198
|
+
candlestickOptions.showTooltips ??
|
|
199
|
+
true;
|
|
193
200
|
|
|
194
201
|
const padding = 40;
|
|
195
202
|
const chartWidth = scales.width - padding * 2;
|
|
@@ -298,7 +305,9 @@ const CandlestickChart = memo(
|
|
|
298
305
|
);
|
|
299
306
|
}}
|
|
300
307
|
onMouseLeave={handlers.onPointLeave}
|
|
301
|
-
onClick={() =>
|
|
308
|
+
onClick={() =>
|
|
309
|
+
handlers.onDataPointClick?.(candle as unknown as ChartDataPoint, 0, index)
|
|
310
|
+
}
|
|
302
311
|
/>
|
|
303
312
|
</g>
|
|
304
313
|
);
|
|
@@ -372,19 +381,17 @@ const CandlestickChart = memo(
|
|
|
372
381
|
{candles}
|
|
373
382
|
{volumeBars}
|
|
374
383
|
{movingAverages}
|
|
375
|
-
{showTooltips &&
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
/>
|
|
387
|
-
)}
|
|
384
|
+
{showTooltips && hoveredPoint && candlestickData[hoveredPoint.pointIndex] && (
|
|
385
|
+
<ChartTooltip
|
|
386
|
+
dataPoint={candlestickData[hoveredPoint.pointIndex] as unknown as ChartDataPoint}
|
|
387
|
+
datasetLabel="Candlestick"
|
|
388
|
+
position={{
|
|
389
|
+
x: hoveredPoint.clientX,
|
|
390
|
+
y: hoveredPoint.clientY,
|
|
391
|
+
}}
|
|
392
|
+
visible={true}
|
|
393
|
+
/>
|
|
394
|
+
)}
|
|
388
395
|
</>
|
|
389
396
|
);
|
|
390
397
|
};
|