@shohojdhara/atomix 0.3.13 → 0.3.15
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 +39 -0
- package/README.md +2 -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 +43 -0
- package/build-tools/index.js +88 -0
- package/build-tools/package.json +67 -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 +298 -167
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +3 -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 +43 -0
- package/dist/build-tools/index.js +88 -0
- package/dist/build-tools/package.json +67 -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 +2 -2
- package/dist/charts.js +87 -58
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +42 -12
- package/dist/core.js +175 -135
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +30 -16
- package/dist/forms.js +146 -131
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +2 -2
- package/dist/heavy.js +151 -118
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +130 -106
- package/dist/index.esm.js +1083 -465
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1102 -483
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +27 -2
- package/dist/theme.js +721 -108
- package/dist/theme.js.map +1 -1
- package/package.json +23 -8
- package/scripts/atomix-cli.js +749 -1153
- 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 +78 -118
- package/scripts/cli/component-generator.js +564 -0
- package/scripts/cli/dependency-checker.js +355 -0
- package/scripts/cli/documentation-sync.js +542 -0
- package/scripts/cli/interactive-init.js +129 -292
- package/scripts/cli/mappings.js +211 -0
- package/scripts/cli/migration-tools.js +95 -288
- package/scripts/cli/template-manager.js +105 -0
- package/scripts/cli/templates/README.md +123 -0
- package/scripts/cli/templates/common-templates.js +636 -0
- package/scripts/cli/templates/composable-templates.js +171 -0
- package/scripts/cli/templates/config-templates.js +126 -0
- package/scripts/cli/templates/index.js +102 -0
- package/scripts/cli/templates/project-templates.js +342 -0
- package/scripts/cli/templates/react-templates.js +331 -0
- package/scripts/cli/templates/scss-templates.js +155 -0
- package/scripts/cli/templates/storybook-templates.js +236 -0
- package/scripts/cli/templates/testing-templates.js +224 -0
- package/scripts/cli/templates/testing-utils.js +278 -0
- package/scripts/cli/templates/token-templates.js +447 -0
- package/scripts/cli/templates/types-templates.js +147 -0
- package/scripts/cli/templates.js +35 -0
- package/scripts/cli/theme-bridge.js +28 -16
- package/scripts/cli/token-manager.js +432 -247
- package/scripts/cli/utils.js +37 -26
- package/src/components/Accordion/Accordion.stories.tsx +369 -870
- package/src/components/Accordion/Accordion.test.tsx +57 -0
- package/src/components/Accordion/Accordion.tsx +4 -0
- package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
- package/src/components/AtomixGlass/glass-utils.ts +2 -2
- package/src/components/AtomixGlass/shader-utils.ts +5 -0
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2965 -2861
- 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 +73 -59
- package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
- package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
- package/src/components/Avatar/Avatar.stories.tsx +239 -27
- package/src/components/Badge/Badge.stories.tsx +132 -373
- package/src/components/Badge/Badge.test.tsx +51 -0
- package/src/components/Badge/Badge.tsx +20 -1
- package/src/components/Block/Block.stories.tsx +26 -17
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
- package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
- package/src/components/Button/Button.stories.tsx +463 -1126
- package/src/components/Button/Button.test.tsx +107 -0
- package/src/components/Button/Button.tsx +50 -54
- package/src/components/Button/ButtonGroup.stories.tsx +373 -217
- package/src/components/Button/README.md +5 -0
- package/src/components/Callout/Callout.stories.tsx +299 -644
- package/src/components/Callout/Callout.test.tsx +10 -10
- package/src/components/Callout/Callout.tsx +7 -7
- package/src/components/Callout/README.md +9 -8
- package/src/components/Card/Card.stories.tsx +248 -68
- package/src/components/Card/Card.tsx +2 -2
- package/src/components/Chart/Chart.stories.tsx +156 -14
- package/src/components/Chart/Chart.tsx +1 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
- package/src/components/Countdown/Countdown.stories.tsx +115 -8
- package/src/components/DataTable/DataTable.stories.tsx +346 -146
- package/src/components/DataTable/DataTable.tsx +14 -12
- package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
- package/src/components/Dropdown/Dropdown.stories.tsx +157 -37
- package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
- package/src/components/Footer/Footer.stories.tsx +392 -328
- package/src/components/Form/Checkbox.stories.tsx +143 -9
- package/src/components/Form/Checkbox.test.tsx +63 -0
- package/src/components/Form/Checkbox.tsx +90 -52
- package/src/components/Form/Form.stories.tsx +121 -22
- package/src/components/Form/FormGroup.stories.tsx +128 -5
- package/src/components/Form/Input.stories.tsx +28 -16
- package/src/components/Form/Input.test.tsx +59 -0
- package/src/components/Form/Input.tsx +97 -95
- package/src/components/Form/Radio.stories.tsx +232 -97
- package/src/components/Form/Radio.tsx +2 -2
- package/src/components/Form/Select.stories.tsx +144 -12
- package/src/components/Form/Select.tsx +2 -2
- package/src/components/Form/Textarea.stories.tsx +171 -13
- package/src/components/Form/Textarea.test.tsx +45 -0
- package/src/components/Form/Textarea.tsx +88 -86
- package/src/components/Hero/Hero.stories.tsx +333 -32
- package/src/components/List/List.stories.tsx +143 -5
- package/src/components/Modal/Modal.stories.tsx +185 -46
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
- package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
- package/src/components/Navigation/README.md +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +5 -2
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
- package/src/components/Popover/Popover.stories.tsx +449 -99
- package/src/components/ProductReview/ProductReview.tsx +1 -1
- package/src/components/Progress/Progress.stories.tsx +167 -5
- package/src/components/Progress/Progress.tsx +46 -46
- package/src/components/Rating/Rating.stories.tsx +4 -4
- package/src/components/Rating/Rating.tsx +8 -8
- package/src/components/River/River.stories.tsx +1 -1
- package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
- package/src/components/Slider/Slider.stories.tsx +63 -63
- package/src/components/Spinner/Spinner.stories.tsx +104 -10
- package/src/components/Spinner/Spinner.test.tsx +35 -0
- package/src/components/Spinner/Spinner.tsx +9 -2
- package/src/components/Steps/Steps.stories.tsx +172 -43
- package/src/components/Tabs/Tabs.stories.tsx +136 -10
- package/src/components/Testimonial/Testimonial.stories.tsx +121 -4
- package/src/components/Todo/Todo.stories.tsx +198 -9
- package/src/components/Toggle/Toggle.stories.tsx +153 -43
- package/src/components/Toggle/Toggle.test.tsx +91 -0
- package/src/components/Toggle/Toggle.tsx +44 -27
- package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/components/Upload/Upload.stories.tsx +113 -24
- package/src/layouts/Grid/Grid.stories.tsx +49 -49
- package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
- package/src/lib/README.md +2 -2
- package/src/lib/__tests__/theme-tools.test.ts +193 -0
- package/src/lib/composables/index.ts +2 -2
- package/src/lib/composables/useAccordion.ts +12 -3
- package/src/lib/composables/useAtomixGlass.ts +28 -56
- package/src/lib/composables/useBreadcrumb.ts +2 -2
- package/src/lib/composables/useCallout.ts +7 -7
- package/src/lib/composables/useChartExport.ts +2 -7
- package/src/lib/composables/useDataTable.ts +46 -29
- package/src/lib/composables/useNavbar.ts +1 -1
- package/src/lib/constants/components.ts +10 -33
- package/src/lib/storybook/InteractiveDemo.tsx +113 -0
- package/src/lib/storybook/PreviewContainer.tsx +36 -0
- package/src/lib/storybook/VariantsGrid.tsx +21 -0
- package/src/lib/storybook/index.ts +3 -0
- package/src/lib/theme/core/createThemeObject.ts +9 -5
- package/src/lib/theme/devtools/CLI.ts +155 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
- package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
- package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
- package/src/lib/theme/devtools/index.ts +3 -0
- package/src/lib/theme/errors/errors.ts +8 -0
- package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
- package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
- package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
- package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
- package/src/lib/theme/utils/index.ts +1 -0
- package/src/lib/theme/utils/themeValidation.ts +501 -0
- package/src/lib/theme-tools.ts +32 -3
- package/src/lib/types/components.ts +82 -27
- package/src/lib/utils/__tests__/csv.test.ts +45 -0
- package/src/lib/utils/csv.ts +17 -0
- package/src/lib/utils/dataTableExport.ts +1 -10
- package/src/lib/utils/themeNaming.ts +1 -1
- package/src/styles/01-settings/_index.scss +2 -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.typography.scss +5 -5
- package/src/styles/02-tools/_tools.utility-api.scss +14 -0
- package/src/styles/06-components/_components.accordion.scss +56 -14
- package/src/styles/06-components/_components.callout.scss +29 -33
- package/src/styles/06-components/_components.checkbox.scss +23 -17
- package/src/styles/06-components/_index.scss +1 -1
- package/src/styles/99-utilities/_index.scss +2 -0
- package/src/styles/99-utilities/_utilities.display.scss +14 -3
- package/src/styles/99-utilities/_utilities.flex.scss +10 -10
- package/src/styles/99-utilities/_utilities.scss +3 -1
- package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
- package/src/styles/99-utilities/_utilities.text.scss +28 -8
- 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/__tests__/cli-commands.test.js +0 -204
- package/scripts/cli/__tests__/vitest.config.js +0 -26
- 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,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
3
4
|
import { Popover, PopoverTrigger } from './Popover';
|
|
4
5
|
import { Toggle } from '../Toggle/Toggle';
|
|
5
6
|
import { Button } from '../Button/Button';
|
|
@@ -11,8 +12,79 @@ const meta = {
|
|
|
11
12
|
layout: 'fullscreen',
|
|
12
13
|
docs: {
|
|
13
14
|
description: {
|
|
14
|
-
component:
|
|
15
|
-
|
|
15
|
+
component: `
|
|
16
|
+
# Popover
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
Popover displays floating content relative to a trigger element. It provides a flexible way to show additional information, actions, or controls without navigating away from the current context. Popovers support multiple positions, click or hover triggers, and can include rich interactive content.
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
- Multiple position options (top, bottom, left, right, auto)
|
|
25
|
+
- Click or hover triggers
|
|
26
|
+
- Configurable delays and offsets
|
|
27
|
+
- Click outside and escape key closing
|
|
28
|
+
- Glass morphism effect
|
|
29
|
+
- Rich content support
|
|
30
|
+
- Accessible design
|
|
31
|
+
- Responsive behavior
|
|
32
|
+
|
|
33
|
+
## Accessibility
|
|
34
|
+
|
|
35
|
+
- Keyboard support: Navigate and activate with keyboard
|
|
36
|
+
- Screen reader: Popover content and purpose announced appropriately
|
|
37
|
+
- ARIA support: Proper roles and properties for popover components
|
|
38
|
+
- Focus management: Traps focus within the popover when open
|
|
39
|
+
|
|
40
|
+
## Usage Examples
|
|
41
|
+
|
|
42
|
+
### Basic Usage
|
|
43
|
+
|
|
44
|
+
\`\`\`tsx
|
|
45
|
+
<Popover
|
|
46
|
+
position="top"
|
|
47
|
+
trigger="click"
|
|
48
|
+
>
|
|
49
|
+
<PopoverTrigger>
|
|
50
|
+
<button>Trigger</button>
|
|
51
|
+
</PopoverTrigger>
|
|
52
|
+
<div>Popover content</div>
|
|
53
|
+
</Popover>
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
### With Configuration
|
|
57
|
+
|
|
58
|
+
\`\`\`tsx
|
|
59
|
+
<Popover
|
|
60
|
+
position="right"
|
|
61
|
+
trigger="hover"
|
|
62
|
+
delay={200}
|
|
63
|
+
offset={10}
|
|
64
|
+
>
|
|
65
|
+
<PopoverTrigger>
|
|
66
|
+
<button>Trigger</button>
|
|
67
|
+
</PopoverTrigger>
|
|
68
|
+
<div>Popover content</div>
|
|
69
|
+
</Popover>
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
## API Reference
|
|
73
|
+
|
|
74
|
+
### Props
|
|
75
|
+
|
|
76
|
+
| Prop | Type | Default | Description |
|
|
77
|
+
| ---- | ---- | ------- | ----------- |
|
|
78
|
+
| position | 'top' \\| 'bottom' \\| 'left' \\| 'right' \\| 'auto' | 'top' | Position of the popover relative to the trigger |
|
|
79
|
+
| trigger | 'click' \\| 'hover' | 'click' | How the popover is triggered |
|
|
80
|
+
| delay | number | 0 | Delay in milliseconds before showing the popover |
|
|
81
|
+
| offset | number | 12 | Offset distance from the trigger element |
|
|
82
|
+
| defaultOpen | boolean | false | Whether the popover is initially open |
|
|
83
|
+
| closeOnClickOutside | boolean | true | Whether to close the popover when clicking outside |
|
|
84
|
+
| closeOnEscape | boolean | true | Whether to close the popover when pressing Escape key |
|
|
85
|
+
| glass | boolean | false | Enable glass morphism effect |
|
|
86
|
+
| className | string | - | Additional CSS classes for the component |
|
|
87
|
+
`,
|
|
16
88
|
},
|
|
17
89
|
},
|
|
18
90
|
},
|
|
@@ -21,39 +93,76 @@ const meta = {
|
|
|
21
93
|
position: {
|
|
22
94
|
control: { type: 'select' },
|
|
23
95
|
options: ['top', 'bottom', 'left', 'right', 'auto'],
|
|
24
|
-
|
|
96
|
+
description: 'Position of the popover relative to the trigger',
|
|
97
|
+
table: {
|
|
98
|
+
type: { summary: '"top" | "bottom" | "left" | "right" | "auto"' },
|
|
99
|
+
defaultValue: { summary: 'top' },
|
|
100
|
+
},
|
|
25
101
|
},
|
|
26
102
|
trigger: {
|
|
27
103
|
control: { type: 'select' },
|
|
28
104
|
options: ['click', 'hover'],
|
|
29
|
-
|
|
105
|
+
description: 'How the popover is triggered',
|
|
106
|
+
table: {
|
|
107
|
+
type: { summary: '"click" | "hover"' },
|
|
108
|
+
defaultValue: { summary: 'click' },
|
|
109
|
+
},
|
|
30
110
|
},
|
|
31
111
|
delay: {
|
|
32
112
|
control: { type: 'number' },
|
|
33
|
-
|
|
113
|
+
description: 'Delay in milliseconds before showing the popover',
|
|
114
|
+
table: {
|
|
115
|
+
type: { summary: 'number' },
|
|
116
|
+
defaultValue: { summary: 0 },
|
|
117
|
+
},
|
|
34
118
|
},
|
|
35
119
|
offset: {
|
|
36
120
|
control: { type: 'number' },
|
|
37
|
-
|
|
121
|
+
description: 'Offset distance from the trigger element',
|
|
122
|
+
table: {
|
|
123
|
+
type: { summary: 'number' },
|
|
124
|
+
defaultValue: { summary: 12 },
|
|
125
|
+
},
|
|
38
126
|
},
|
|
39
127
|
defaultOpen: {
|
|
40
128
|
control: { type: 'boolean' },
|
|
41
|
-
|
|
129
|
+
description: 'Whether the popover is initially open',
|
|
130
|
+
table: {
|
|
131
|
+
type: { summary: 'boolean' },
|
|
132
|
+
defaultValue: { summary: false },
|
|
133
|
+
},
|
|
42
134
|
},
|
|
43
135
|
closeOnClickOutside: {
|
|
44
136
|
control: { type: 'boolean' },
|
|
45
|
-
|
|
137
|
+
description: 'Whether to close the popover when clicking outside',
|
|
138
|
+
table: {
|
|
139
|
+
type: { summary: 'boolean' },
|
|
140
|
+
defaultValue: { summary: true },
|
|
141
|
+
},
|
|
46
142
|
},
|
|
47
143
|
closeOnEscape: {
|
|
48
144
|
control: { type: 'boolean' },
|
|
49
|
-
|
|
145
|
+
description: 'Whether to close the popover when pressing Escape key',
|
|
146
|
+
table: {
|
|
147
|
+
type: { summary: 'boolean' },
|
|
148
|
+
defaultValue: { summary: true },
|
|
149
|
+
},
|
|
50
150
|
},
|
|
51
151
|
className: {
|
|
52
152
|
control: { type: 'text' },
|
|
153
|
+
description: 'Additional CSS classes for the component',
|
|
154
|
+
table: {
|
|
155
|
+
type: { summary: 'string' },
|
|
156
|
+
defaultValue: { summary: '-' },
|
|
157
|
+
},
|
|
53
158
|
},
|
|
54
159
|
glass: {
|
|
55
160
|
control: { type: 'boolean' },
|
|
56
161
|
description: 'Enable glass morphism effect',
|
|
162
|
+
table: {
|
|
163
|
+
type: { summary: 'boolean' },
|
|
164
|
+
defaultValue: { summary: false },
|
|
165
|
+
},
|
|
57
166
|
},
|
|
58
167
|
},
|
|
59
168
|
} satisfies Meta<typeof Popover>;
|
|
@@ -83,7 +192,7 @@ const InteractivePopover = (args: React.ComponentProps<typeof Popover>) => {
|
|
|
83
192
|
|
|
84
193
|
const content = (
|
|
85
194
|
<>
|
|
86
|
-
<div className="u-
|
|
195
|
+
<div className="u-flex u-items-center u-gap-7">
|
|
87
196
|
<span className="u-text-nowrap">Sort by</span>
|
|
88
197
|
<div className="c-select">
|
|
89
198
|
<select value={selectedOption} onChange={handleSelectChange}>
|
|
@@ -103,94 +212,162 @@ const InteractivePopover = (args: React.ComponentProps<typeof Popover>) => {
|
|
|
103
212
|
);
|
|
104
213
|
|
|
105
214
|
return (
|
|
106
|
-
<div
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
<PopoverTrigger trigger={args.trigger}>
|
|
111
|
-
<Button variant="primary" label="Open Popover" />
|
|
215
|
+
<div style={{ display: 'flex', justifyContent: 'center', padding: '100px' }}>
|
|
216
|
+
<Popover {...args}>
|
|
217
|
+
<PopoverTrigger>
|
|
218
|
+
<Button variant="primary">Open Popover</Button>
|
|
112
219
|
</PopoverTrigger>
|
|
220
|
+
{content}
|
|
113
221
|
</Popover>
|
|
114
222
|
</div>
|
|
115
223
|
);
|
|
116
224
|
};
|
|
117
225
|
|
|
118
|
-
export const
|
|
119
|
-
render: args => <InteractivePopover {...args} />,
|
|
120
|
-
args: {
|
|
121
|
-
position: 'top',
|
|
122
|
-
trigger: 'click',
|
|
123
|
-
offset: 12,
|
|
124
|
-
delay: 0,
|
|
125
|
-
defaultOpen: false,
|
|
126
|
-
closeOnClickOutside: true,
|
|
127
|
-
closeOnEscape: true,
|
|
128
|
-
} as any,
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
export const Hover: Story = {
|
|
132
|
-
render: args => <InteractivePopover {...args} />,
|
|
226
|
+
export const BasicUsage: Story = {
|
|
227
|
+
render: (args) => <InteractivePopover {...args} />,
|
|
133
228
|
args: {
|
|
134
229
|
position: 'top',
|
|
135
|
-
trigger: 'hover',
|
|
136
|
-
offset: 12,
|
|
137
|
-
delay: 200,
|
|
138
|
-
defaultOpen: false,
|
|
139
|
-
closeOnClickOutside: true,
|
|
140
|
-
closeOnEscape: true,
|
|
141
|
-
} as any,
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
export const BottomPosition: Story = {
|
|
145
|
-
render: args => <InteractivePopover {...args} />,
|
|
146
|
-
args: {
|
|
147
|
-
position: 'bottom',
|
|
148
230
|
trigger: 'click',
|
|
149
|
-
offset: 12,
|
|
150
|
-
delay: 0,
|
|
151
|
-
defaultOpen: false,
|
|
152
231
|
closeOnClickOutside: true,
|
|
153
232
|
closeOnEscape: true,
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
offset: 12,
|
|
163
|
-
delay: 0,
|
|
164
|
-
defaultOpen: false,
|
|
165
|
-
closeOnClickOutside: true,
|
|
166
|
-
closeOnEscape: true,
|
|
167
|
-
} as any,
|
|
233
|
+
},
|
|
234
|
+
parameters: {
|
|
235
|
+
docs: {
|
|
236
|
+
description: {
|
|
237
|
+
story: 'Basic popover with top position and click trigger.',
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
},
|
|
168
241
|
};
|
|
169
242
|
|
|
170
|
-
export const
|
|
171
|
-
render:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
243
|
+
export const AllPositions: Story = {
|
|
244
|
+
render: () => {
|
|
245
|
+
const content = <div style={{ padding: '20px' }}>Popover Content</div>;
|
|
246
|
+
|
|
247
|
+
return (
|
|
248
|
+
<div style={{
|
|
249
|
+
display: 'grid',
|
|
250
|
+
gridTemplateColumns: 'repeat(3, 1fr)',
|
|
251
|
+
gap: '20px',
|
|
252
|
+
padding: '50px',
|
|
253
|
+
alignItems: 'center',
|
|
254
|
+
justifyItems: 'center',
|
|
255
|
+
height: '500px'
|
|
256
|
+
}}>
|
|
257
|
+
<div>
|
|
258
|
+
<Popover position="top-start">
|
|
259
|
+
<PopoverTrigger>
|
|
260
|
+
<Button variant="primary">Top Start</Button>
|
|
261
|
+
</PopoverTrigger>
|
|
262
|
+
{content}
|
|
263
|
+
</Popover>
|
|
264
|
+
</div>
|
|
265
|
+
<div>
|
|
266
|
+
<Popover position="top">
|
|
267
|
+
<PopoverTrigger>
|
|
268
|
+
<Button variant="primary">Top</Button>
|
|
269
|
+
</PopoverTrigger>
|
|
270
|
+
{content}
|
|
271
|
+
</Popover>
|
|
272
|
+
</div>
|
|
273
|
+
<div>
|
|
274
|
+
<Popover position="top-end">
|
|
275
|
+
<PopoverTrigger>
|
|
276
|
+
<Button variant="primary">Top End</Button>
|
|
277
|
+
</PopoverTrigger>
|
|
278
|
+
{content}
|
|
279
|
+
</Popover>
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<div>
|
|
283
|
+
<Popover position="left">
|
|
284
|
+
<PopoverTrigger>
|
|
285
|
+
<Button variant="primary">Left</Button>
|
|
286
|
+
</PopoverTrigger>
|
|
287
|
+
{content}
|
|
288
|
+
</Popover>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div style={{ textAlign: 'center' }}>
|
|
292
|
+
<p>All popover positions</p>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
<div>
|
|
296
|
+
<Popover position="right">
|
|
297
|
+
<PopoverTrigger>
|
|
298
|
+
<Button variant="primary">Right</Button>
|
|
299
|
+
</PopoverTrigger>
|
|
300
|
+
{content}
|
|
301
|
+
</Popover>
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
<div>
|
|
305
|
+
<Popover position="bottom-start">
|
|
306
|
+
<PopoverTrigger>
|
|
307
|
+
<Button variant="primary">Bottom Start</Button>
|
|
308
|
+
</PopoverTrigger>
|
|
309
|
+
{content}
|
|
310
|
+
</Popover>
|
|
311
|
+
</div>
|
|
312
|
+
<div>
|
|
313
|
+
<Popover position="bottom">
|
|
314
|
+
<PopoverTrigger>
|
|
315
|
+
<Button variant="primary">Bottom</Button>
|
|
316
|
+
</PopoverTrigger>
|
|
317
|
+
{content}
|
|
318
|
+
</Popover>
|
|
319
|
+
</div>
|
|
320
|
+
<div>
|
|
321
|
+
<Popover position="bottom-end">
|
|
322
|
+
<PopoverTrigger>
|
|
323
|
+
<Button variant="primary">Bottom End</Button>
|
|
324
|
+
</PopoverTrigger>
|
|
325
|
+
{content}
|
|
326
|
+
</Popover>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
);
|
|
330
|
+
},
|
|
331
|
+
parameters: {
|
|
332
|
+
docs: {
|
|
333
|
+
description: {
|
|
334
|
+
story: 'All available popover positions demonstrated.',
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
},
|
|
181
338
|
};
|
|
182
339
|
|
|
183
|
-
export const
|
|
184
|
-
render: args =>
|
|
340
|
+
export const WithGlassEffect: Story = {
|
|
341
|
+
render: (args) => (
|
|
342
|
+
<div style={{
|
|
343
|
+
display: 'flex',
|
|
344
|
+
justifyContent: 'center',
|
|
345
|
+
padding: '100px',
|
|
346
|
+
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
347
|
+
minHeight: '300px'
|
|
348
|
+
}}>
|
|
349
|
+
<Popover {...args}>
|
|
350
|
+
<PopoverTrigger>
|
|
351
|
+
<Button variant="primary">Open Glass Popover</Button>
|
|
352
|
+
</PopoverTrigger>
|
|
353
|
+
<div style={{ padding: '20px' }}>Glass Effect Popover Content</div>
|
|
354
|
+
</Popover>
|
|
355
|
+
</div>
|
|
356
|
+
),
|
|
185
357
|
args: {
|
|
186
|
-
position: '
|
|
358
|
+
position: 'top',
|
|
187
359
|
trigger: 'click',
|
|
188
|
-
|
|
189
|
-
delay: 0,
|
|
190
|
-
defaultOpen: true, // Open by default to showcase auto-positioning
|
|
360
|
+
glass: true,
|
|
191
361
|
closeOnClickOutside: true,
|
|
192
362
|
closeOnEscape: true,
|
|
193
|
-
}
|
|
363
|
+
},
|
|
364
|
+
parameters: {
|
|
365
|
+
docs: {
|
|
366
|
+
description: {
|
|
367
|
+
story: 'Popover with glass morphism effect applied.',
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
},
|
|
194
371
|
};
|
|
195
372
|
|
|
196
373
|
/**
|
|
@@ -227,7 +404,57 @@ export const GlassPopover: Story = {
|
|
|
227
404
|
* Glass popover with custom settings.
|
|
228
405
|
*/
|
|
229
406
|
export const GlassPopoverCustom: Story = {
|
|
230
|
-
render: args =>
|
|
407
|
+
render: (args) => {
|
|
408
|
+
const selectOptions = [
|
|
409
|
+
{ value: '1', label: 'Option 1' },
|
|
410
|
+
{ value: '2', label: 'Option 2' },
|
|
411
|
+
{ value: '3', label: 'Option 3' },
|
|
412
|
+
{ value: '4', label: 'Option 4' },
|
|
413
|
+
];
|
|
414
|
+
|
|
415
|
+
const [selectedOption, setSelectedOption] = React.useState('1');
|
|
416
|
+
const [showInternalOnly, setShowInternalOnly] = React.useState(false);
|
|
417
|
+
|
|
418
|
+
const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
|
419
|
+
setSelectedOption(e.target.value);
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
const handleToggleChange = () => {
|
|
423
|
+
setShowInternalOnly(!showInternalOnly);
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
const content = (
|
|
427
|
+
<>
|
|
428
|
+
<div className="u-flex u-items-center u-gap-7">
|
|
429
|
+
<span className="u-text-nowrap">Sort by</span>
|
|
430
|
+
<div className="c-select">
|
|
431
|
+
<select value={selectedOption} onChange={handleSelectChange}>
|
|
432
|
+
{selectOptions.map(option => (
|
|
433
|
+
<option key={option.value} value={option.value}>
|
|
434
|
+
{option.label}
|
|
435
|
+
</option>
|
|
436
|
+
))}
|
|
437
|
+
</select>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
<div className="c-toggle" onClick={handleToggleChange}>
|
|
441
|
+
<div className="c-toggle__label">Show internal comments only</div>
|
|
442
|
+
<div className="c-toggle__switch"></div>
|
|
443
|
+
</div>
|
|
444
|
+
</>
|
|
445
|
+
);
|
|
446
|
+
|
|
447
|
+
return (
|
|
448
|
+
<div style={{ display: 'flex', justifyContent: 'center', padding: '100px' }}>
|
|
449
|
+
<Popover {...args}>
|
|
450
|
+
<PopoverTrigger>
|
|
451
|
+
<Button variant="primary">Open Popover</Button>
|
|
452
|
+
</PopoverTrigger>
|
|
453
|
+
{content}
|
|
454
|
+
</Popover>
|
|
455
|
+
</div>
|
|
456
|
+
);
|
|
457
|
+
},
|
|
231
458
|
args: {
|
|
232
459
|
position: 'top',
|
|
233
460
|
trigger: 'click',
|
|
@@ -244,7 +471,7 @@ export const GlassPopoverCustom: Story = {
|
|
|
244
471
|
cornerRadius: 16,
|
|
245
472
|
mode: 'polar',
|
|
246
473
|
} as any,
|
|
247
|
-
}
|
|
474
|
+
},
|
|
248
475
|
decorators: [
|
|
249
476
|
Story => (
|
|
250
477
|
<div
|
|
@@ -264,7 +491,57 @@ export const GlassPopoverCustom: Story = {
|
|
|
264
491
|
* Glass popover with hover trigger.
|
|
265
492
|
*/
|
|
266
493
|
export const GlassPopoverHover: Story = {
|
|
267
|
-
render: args =>
|
|
494
|
+
render: (args) => {
|
|
495
|
+
const selectOptions = [
|
|
496
|
+
{ value: '1', label: 'Option 1' },
|
|
497
|
+
{ value: '2', label: 'Option 2' },
|
|
498
|
+
{ value: '3', label: 'Option 3' },
|
|
499
|
+
{ value: '4', label: 'Option 4' },
|
|
500
|
+
];
|
|
501
|
+
|
|
502
|
+
const [selectedOption, setSelectedOption] = React.useState('1');
|
|
503
|
+
const [showInternalOnly, setShowInternalOnly] = React.useState(false);
|
|
504
|
+
|
|
505
|
+
const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
|
506
|
+
setSelectedOption(e.target.value);
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
const handleToggleChange = () => {
|
|
510
|
+
setShowInternalOnly(!showInternalOnly);
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
const content = (
|
|
514
|
+
<>
|
|
515
|
+
<div className="u-flex u-items-center u-gap-7">
|
|
516
|
+
<span className="u-text-nowrap">Sort by</span>
|
|
517
|
+
<div className="c-select">
|
|
518
|
+
<select value={selectedOption} onChange={handleSelectChange}>
|
|
519
|
+
{selectOptions.map(option => (
|
|
520
|
+
<option key={option.value} value={option.value}>
|
|
521
|
+
{option.label}
|
|
522
|
+
</option>
|
|
523
|
+
))}
|
|
524
|
+
</select>
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
<div className="c-toggle" onClick={handleToggleChange}>
|
|
528
|
+
<div className="c-toggle__label">Show internal comments only</div>
|
|
529
|
+
<div className="c-toggle__switch"></div>
|
|
530
|
+
</div>
|
|
531
|
+
</>
|
|
532
|
+
);
|
|
533
|
+
|
|
534
|
+
return (
|
|
535
|
+
<div style={{ display: 'flex', justifyContent: 'center', padding: '100px' }}>
|
|
536
|
+
<Popover {...args}>
|
|
537
|
+
<PopoverTrigger>
|
|
538
|
+
<Button variant="primary">Open Popover</Button>
|
|
539
|
+
</PopoverTrigger>
|
|
540
|
+
{content}
|
|
541
|
+
</Popover>
|
|
542
|
+
</div>
|
|
543
|
+
);
|
|
544
|
+
},
|
|
268
545
|
args: {
|
|
269
546
|
position: 'top',
|
|
270
547
|
trigger: 'hover',
|
|
@@ -274,7 +551,7 @@ export const GlassPopoverHover: Story = {
|
|
|
274
551
|
closeOnClickOutside: true,
|
|
275
552
|
closeOnEscape: true,
|
|
276
553
|
glass: true,
|
|
277
|
-
}
|
|
554
|
+
},
|
|
278
555
|
decorators: [
|
|
279
556
|
Story => (
|
|
280
557
|
<div
|
|
@@ -294,9 +571,95 @@ export const GlassPopoverHover: Story = {
|
|
|
294
571
|
* Glass popover with different positions.
|
|
295
572
|
*/
|
|
296
573
|
export const GlassPopoverPositions: Story = {
|
|
297
|
-
render: args =>
|
|
574
|
+
render: (args) => {
|
|
575
|
+
const content = <div style={{ padding: '20px' }}>Popover Content</div>;
|
|
576
|
+
|
|
577
|
+
return (
|
|
578
|
+
<div style={{
|
|
579
|
+
display: 'grid',
|
|
580
|
+
gridTemplateColumns: 'repeat(3, 1fr)',
|
|
581
|
+
gap: '20px',
|
|
582
|
+
padding: '50px',
|
|
583
|
+
alignItems: 'center',
|
|
584
|
+
justifyItems: 'center',
|
|
585
|
+
height: '500px',
|
|
586
|
+
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
|
|
587
|
+
}}>
|
|
588
|
+
<div>
|
|
589
|
+
<Popover {...args} position="top-start">
|
|
590
|
+
<PopoverTrigger>
|
|
591
|
+
<Button variant="primary">Top Start</Button>
|
|
592
|
+
</PopoverTrigger>
|
|
593
|
+
{content}
|
|
594
|
+
</Popover>
|
|
595
|
+
</div>
|
|
596
|
+
<div>
|
|
597
|
+
<Popover {...args} position="top">
|
|
598
|
+
<PopoverTrigger>
|
|
599
|
+
<Button variant="primary">Top</Button>
|
|
600
|
+
</PopoverTrigger>
|
|
601
|
+
{content}
|
|
602
|
+
</Popover>
|
|
603
|
+
</div>
|
|
604
|
+
<div>
|
|
605
|
+
<Popover {...args} position="top-end">
|
|
606
|
+
<PopoverTrigger>
|
|
607
|
+
<Button variant="primary">Top End</Button>
|
|
608
|
+
</PopoverTrigger>
|
|
609
|
+
{content}
|
|
610
|
+
</Popover>
|
|
611
|
+
</div>
|
|
612
|
+
|
|
613
|
+
<div>
|
|
614
|
+
<Popover {...args} position="left">
|
|
615
|
+
<PopoverTrigger>
|
|
616
|
+
<Button variant="primary">Left</Button>
|
|
617
|
+
</PopoverTrigger>
|
|
618
|
+
{content}
|
|
619
|
+
</Popover>
|
|
620
|
+
</div>
|
|
621
|
+
|
|
622
|
+
<div style={{ textAlign: 'center' }}>
|
|
623
|
+
<p>All popover positions</p>
|
|
624
|
+
</div>
|
|
625
|
+
|
|
626
|
+
<div>
|
|
627
|
+
<Popover {...args} position="right">
|
|
628
|
+
<PopoverTrigger>
|
|
629
|
+
<Button variant="primary">Right</Button>
|
|
630
|
+
</PopoverTrigger>
|
|
631
|
+
{content}
|
|
632
|
+
</Popover>
|
|
633
|
+
</div>
|
|
634
|
+
|
|
635
|
+
<div>
|
|
636
|
+
<Popover {...args} position="bottom-start">
|
|
637
|
+
<PopoverTrigger>
|
|
638
|
+
<Button variant="primary">Bottom Start</Button>
|
|
639
|
+
</PopoverTrigger>
|
|
640
|
+
{content}
|
|
641
|
+
</Popover>
|
|
642
|
+
</div>
|
|
643
|
+
<div>
|
|
644
|
+
<Popover {...args} position="bottom">
|
|
645
|
+
<PopoverTrigger>
|
|
646
|
+
<Button variant="primary">Bottom</Button>
|
|
647
|
+
</PopoverTrigger>
|
|
648
|
+
{content}
|
|
649
|
+
</Popover>
|
|
650
|
+
</div>
|
|
651
|
+
<div>
|
|
652
|
+
<Popover {...args} position="bottom-end">
|
|
653
|
+
<PopoverTrigger>
|
|
654
|
+
<Button variant="primary">Bottom End</Button>
|
|
655
|
+
</PopoverTrigger>
|
|
656
|
+
{content}
|
|
657
|
+
</Popover>
|
|
658
|
+
</div>
|
|
659
|
+
</div>
|
|
660
|
+
);
|
|
661
|
+
},
|
|
298
662
|
args: {
|
|
299
|
-
position: 'top',
|
|
300
663
|
trigger: 'click',
|
|
301
664
|
offset: 12,
|
|
302
665
|
delay: 0,
|
|
@@ -304,18 +667,5 @@ export const GlassPopoverPositions: Story = {
|
|
|
304
667
|
closeOnClickOutside: true,
|
|
305
668
|
closeOnEscape: true,
|
|
306
669
|
glass: true,
|
|
307
|
-
}
|
|
308
|
-
decorators: [
|
|
309
|
-
Story => (
|
|
310
|
-
<div
|
|
311
|
-
style={{
|
|
312
|
-
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
313
|
-
minHeight: '100vh',
|
|
314
|
-
padding: '2rem',
|
|
315
|
-
}}
|
|
316
|
-
>
|
|
317
|
-
<Story />
|
|
318
|
-
</div>
|
|
319
|
-
),
|
|
320
|
-
],
|
|
670
|
+
},
|
|
321
671
|
};
|
|
@@ -135,7 +135,7 @@ export const ProductReview: React.FC<ProductReviewProps> = ({
|
|
|
135
135
|
allowHalf={allowHalf}
|
|
136
136
|
maxValue={maxRating}
|
|
137
137
|
size="lg"
|
|
138
|
-
|
|
138
|
+
variant={ratingColor}
|
|
139
139
|
/>
|
|
140
140
|
<span className="c-rating__value">
|
|
141
141
|
{rating > 0 ? rating.toFixed(1) : 'Select a rating'}
|