@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.
Files changed (249) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -0
  3. package/build-tools/EXAMPLES.md +372 -0
  4. package/build-tools/README.md +242 -0
  5. package/build-tools/__tests__/error-handler.test.js +230 -0
  6. package/build-tools/__tests__/index.test.js +141 -0
  7. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  8. package/build-tools/__tests__/utils.test.js +161 -0
  9. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  10. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  11. package/build-tools/error-handler.js +308 -0
  12. package/build-tools/index.d.ts +43 -0
  13. package/build-tools/index.js +88 -0
  14. package/build-tools/package.json +67 -0
  15. package/build-tools/rollup-plugin.js +236 -0
  16. package/build-tools/types.d.ts +163 -0
  17. package/build-tools/utils.js +203 -0
  18. package/build-tools/vite-plugin.js +161 -0
  19. package/build-tools/webpack-loader.js +123 -0
  20. package/dist/atomix.css +298 -167
  21. package/dist/atomix.css.map +1 -1
  22. package/dist/atomix.min.css +3 -3
  23. package/dist/atomix.min.css.map +1 -1
  24. package/dist/build-tools/EXAMPLES.md +372 -0
  25. package/dist/build-tools/README.md +242 -0
  26. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  27. package/dist/build-tools/__tests__/index.test.js +141 -0
  28. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  29. package/dist/build-tools/__tests__/utils.test.js +161 -0
  30. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  31. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  32. package/dist/build-tools/error-handler.js +308 -0
  33. package/dist/build-tools/index.d.ts +43 -0
  34. package/dist/build-tools/index.js +88 -0
  35. package/dist/build-tools/package.json +67 -0
  36. package/dist/build-tools/rollup-plugin.js +236 -0
  37. package/dist/build-tools/types.d.ts +163 -0
  38. package/dist/build-tools/utils.js +203 -0
  39. package/dist/build-tools/vite-plugin.js +161 -0
  40. package/dist/build-tools/webpack-loader.js +123 -0
  41. package/dist/charts.d.ts +2 -2
  42. package/dist/charts.js +87 -58
  43. package/dist/charts.js.map +1 -1
  44. package/dist/core.d.ts +42 -12
  45. package/dist/core.js +175 -135
  46. package/dist/core.js.map +1 -1
  47. package/dist/forms.d.ts +30 -16
  48. package/dist/forms.js +146 -131
  49. package/dist/forms.js.map +1 -1
  50. package/dist/heavy.d.ts +2 -2
  51. package/dist/heavy.js +151 -118
  52. package/dist/heavy.js.map +1 -1
  53. package/dist/index.d.ts +130 -106
  54. package/dist/index.esm.js +1083 -465
  55. package/dist/index.esm.js.map +1 -1
  56. package/dist/index.js +1102 -483
  57. package/dist/index.js.map +1 -1
  58. package/dist/index.min.js +1 -1
  59. package/dist/index.min.js.map +1 -1
  60. package/dist/theme.d.ts +27 -2
  61. package/dist/theme.js +721 -108
  62. package/dist/theme.js.map +1 -1
  63. package/package.json +23 -8
  64. package/scripts/atomix-cli.js +749 -1153
  65. package/scripts/cli/__tests__/README.md +81 -0
  66. package/scripts/cli/__tests__/basic.test.js +115 -0
  67. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  68. package/scripts/cli/__tests__/integration.test.js +327 -0
  69. package/scripts/cli/__tests__/test-setup.js +133 -0
  70. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  71. package/scripts/cli/__tests__/utils.test.js +78 -118
  72. package/scripts/cli/component-generator.js +564 -0
  73. package/scripts/cli/dependency-checker.js +355 -0
  74. package/scripts/cli/documentation-sync.js +542 -0
  75. package/scripts/cli/interactive-init.js +129 -292
  76. package/scripts/cli/mappings.js +211 -0
  77. package/scripts/cli/migration-tools.js +95 -288
  78. package/scripts/cli/template-manager.js +105 -0
  79. package/scripts/cli/templates/README.md +123 -0
  80. package/scripts/cli/templates/common-templates.js +636 -0
  81. package/scripts/cli/templates/composable-templates.js +171 -0
  82. package/scripts/cli/templates/config-templates.js +126 -0
  83. package/scripts/cli/templates/index.js +102 -0
  84. package/scripts/cli/templates/project-templates.js +342 -0
  85. package/scripts/cli/templates/react-templates.js +331 -0
  86. package/scripts/cli/templates/scss-templates.js +155 -0
  87. package/scripts/cli/templates/storybook-templates.js +236 -0
  88. package/scripts/cli/templates/testing-templates.js +224 -0
  89. package/scripts/cli/templates/testing-utils.js +278 -0
  90. package/scripts/cli/templates/token-templates.js +447 -0
  91. package/scripts/cli/templates/types-templates.js +147 -0
  92. package/scripts/cli/templates.js +35 -0
  93. package/scripts/cli/theme-bridge.js +28 -16
  94. package/scripts/cli/token-manager.js +432 -247
  95. package/scripts/cli/utils.js +37 -26
  96. package/src/components/Accordion/Accordion.stories.tsx +369 -870
  97. package/src/components/Accordion/Accordion.test.tsx +57 -0
  98. package/src/components/Accordion/Accordion.tsx +4 -0
  99. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  100. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  101. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  102. package/src/components/AtomixGlass/glass-utils.ts +2 -2
  103. package/src/components/AtomixGlass/shader-utils.ts +5 -0
  104. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  105. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2965 -2861
  106. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  107. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  108. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  109. package/src/components/AtomixGlass/stories/Playground.stories.tsx +73 -59
  110. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
  111. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  112. package/src/components/Avatar/Avatar.stories.tsx +239 -27
  113. package/src/components/Badge/Badge.stories.tsx +132 -373
  114. package/src/components/Badge/Badge.test.tsx +51 -0
  115. package/src/components/Badge/Badge.tsx +20 -1
  116. package/src/components/Block/Block.stories.tsx +26 -17
  117. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
  118. package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
  119. package/src/components/Button/Button.stories.tsx +463 -1126
  120. package/src/components/Button/Button.test.tsx +107 -0
  121. package/src/components/Button/Button.tsx +50 -54
  122. package/src/components/Button/ButtonGroup.stories.tsx +373 -217
  123. package/src/components/Button/README.md +5 -0
  124. package/src/components/Callout/Callout.stories.tsx +299 -644
  125. package/src/components/Callout/Callout.test.tsx +10 -10
  126. package/src/components/Callout/Callout.tsx +7 -7
  127. package/src/components/Callout/README.md +9 -8
  128. package/src/components/Card/Card.stories.tsx +248 -68
  129. package/src/components/Card/Card.tsx +2 -2
  130. package/src/components/Chart/Chart.stories.tsx +156 -14
  131. package/src/components/Chart/Chart.tsx +1 -1
  132. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
  133. package/src/components/Countdown/Countdown.stories.tsx +115 -8
  134. package/src/components/DataTable/DataTable.stories.tsx +346 -146
  135. package/src/components/DataTable/DataTable.tsx +14 -12
  136. package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
  137. package/src/components/Dropdown/Dropdown.stories.tsx +157 -37
  138. package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
  139. package/src/components/Footer/Footer.stories.tsx +392 -328
  140. package/src/components/Form/Checkbox.stories.tsx +143 -9
  141. package/src/components/Form/Checkbox.test.tsx +63 -0
  142. package/src/components/Form/Checkbox.tsx +90 -52
  143. package/src/components/Form/Form.stories.tsx +121 -22
  144. package/src/components/Form/FormGroup.stories.tsx +128 -5
  145. package/src/components/Form/Input.stories.tsx +28 -16
  146. package/src/components/Form/Input.test.tsx +59 -0
  147. package/src/components/Form/Input.tsx +97 -95
  148. package/src/components/Form/Radio.stories.tsx +232 -97
  149. package/src/components/Form/Radio.tsx +2 -2
  150. package/src/components/Form/Select.stories.tsx +144 -12
  151. package/src/components/Form/Select.tsx +2 -2
  152. package/src/components/Form/Textarea.stories.tsx +171 -13
  153. package/src/components/Form/Textarea.test.tsx +45 -0
  154. package/src/components/Form/Textarea.tsx +88 -86
  155. package/src/components/Hero/Hero.stories.tsx +333 -32
  156. package/src/components/List/List.stories.tsx +143 -5
  157. package/src/components/Modal/Modal.stories.tsx +185 -46
  158. package/src/components/Navigation/Navbar/Navbar.stories.tsx +5 -5
  159. package/src/components/Navigation/Navbar/Navbar.tsx +1 -1
  160. package/src/components/Navigation/README.md +1 -1
  161. package/src/components/Pagination/Pagination.stories.tsx +5 -2
  162. package/src/components/Pagination/Pagination.tsx +1 -1
  163. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -10
  164. package/src/components/Popover/Popover.stories.tsx +449 -99
  165. package/src/components/ProductReview/ProductReview.tsx +1 -1
  166. package/src/components/Progress/Progress.stories.tsx +167 -5
  167. package/src/components/Progress/Progress.tsx +46 -46
  168. package/src/components/Rating/Rating.stories.tsx +4 -4
  169. package/src/components/Rating/Rating.tsx +8 -8
  170. package/src/components/River/River.stories.tsx +1 -1
  171. package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
  172. package/src/components/Slider/Slider.stories.tsx +63 -63
  173. package/src/components/Spinner/Spinner.stories.tsx +104 -10
  174. package/src/components/Spinner/Spinner.test.tsx +35 -0
  175. package/src/components/Spinner/Spinner.tsx +9 -2
  176. package/src/components/Steps/Steps.stories.tsx +172 -43
  177. package/src/components/Tabs/Tabs.stories.tsx +136 -10
  178. package/src/components/Testimonial/Testimonial.stories.tsx +121 -4
  179. package/src/components/Todo/Todo.stories.tsx +198 -9
  180. package/src/components/Toggle/Toggle.stories.tsx +153 -43
  181. package/src/components/Toggle/Toggle.test.tsx +91 -0
  182. package/src/components/Toggle/Toggle.tsx +44 -27
  183. package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
  184. package/src/components/Tooltip/Tooltip.tsx +1 -1
  185. package/src/components/Upload/Upload.stories.tsx +113 -24
  186. package/src/layouts/Grid/Grid.stories.tsx +49 -49
  187. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +2 -2
  188. package/src/lib/README.md +2 -2
  189. package/src/lib/__tests__/theme-tools.test.ts +193 -0
  190. package/src/lib/composables/index.ts +2 -2
  191. package/src/lib/composables/useAccordion.ts +12 -3
  192. package/src/lib/composables/useAtomixGlass.ts +28 -56
  193. package/src/lib/composables/useBreadcrumb.ts +2 -2
  194. package/src/lib/composables/useCallout.ts +7 -7
  195. package/src/lib/composables/useChartExport.ts +2 -7
  196. package/src/lib/composables/useDataTable.ts +46 -29
  197. package/src/lib/composables/useNavbar.ts +1 -1
  198. package/src/lib/constants/components.ts +10 -33
  199. package/src/lib/storybook/InteractiveDemo.tsx +113 -0
  200. package/src/lib/storybook/PreviewContainer.tsx +36 -0
  201. package/src/lib/storybook/VariantsGrid.tsx +21 -0
  202. package/src/lib/storybook/index.ts +3 -0
  203. package/src/lib/theme/core/createThemeObject.ts +9 -5
  204. package/src/lib/theme/devtools/CLI.ts +155 -0
  205. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +213 -0
  206. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +566 -0
  207. package/src/lib/theme/devtools/LiveEditor.tsx +2 -1
  208. package/src/lib/theme/devtools/index.ts +3 -0
  209. package/src/lib/theme/errors/errors.ts +8 -0
  210. package/src/lib/theme/runtime/ThemeProvider.tsx +117 -57
  211. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +305 -0
  212. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +588 -0
  213. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +264 -0
  214. package/src/lib/theme/utils/index.ts +1 -0
  215. package/src/lib/theme/utils/themeValidation.ts +501 -0
  216. package/src/lib/theme-tools.ts +32 -3
  217. package/src/lib/types/components.ts +82 -27
  218. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  219. package/src/lib/utils/csv.ts +17 -0
  220. package/src/lib/utils/dataTableExport.ts +1 -10
  221. package/src/lib/utils/themeNaming.ts +1 -1
  222. package/src/styles/01-settings/_index.scss +2 -1
  223. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  224. package/src/styles/01-settings/_settings.colors.scss +11 -11
  225. package/src/styles/01-settings/_settings.typography.scss +5 -5
  226. package/src/styles/02-tools/_tools.utility-api.scss +14 -0
  227. package/src/styles/06-components/_components.accordion.scss +56 -14
  228. package/src/styles/06-components/_components.callout.scss +29 -33
  229. package/src/styles/06-components/_components.checkbox.scss +23 -17
  230. package/src/styles/06-components/_index.scss +1 -1
  231. package/src/styles/99-utilities/_index.scss +2 -0
  232. package/src/styles/99-utilities/_utilities.display.scss +14 -3
  233. package/src/styles/99-utilities/_utilities.flex.scss +10 -10
  234. package/src/styles/99-utilities/_utilities.scss +3 -1
  235. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  236. package/src/styles/99-utilities/_utilities.text.scss +28 -8
  237. package/themes/dark-complementary/README.md +98 -0
  238. package/themes/dark-complementary/index.scss +158 -0
  239. package/themes/default-light/README.md +81 -0
  240. package/themes/default-light/index.scss +154 -0
  241. package/themes/high-contrast/README.md +105 -0
  242. package/themes/high-contrast/index.scss +172 -0
  243. package/themes/test-theme/README.md +38 -0
  244. package/themes/test-theme/index.scss +47 -0
  245. package/scripts/cli/__tests__/cli-commands.test.js +0 -204
  246. package/scripts/cli/__tests__/vitest.config.js +0 -26
  247. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  248. package/src/lib/composables/useButton.ts +0 -93
  249. 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
- 'The Popover component 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.',
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
- defaultValue: 'top',
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
- defaultValue: 'click',
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
- defaultValue: 0,
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
- defaultValue: 12,
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
- defaultValue: false,
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
- defaultValue: true,
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
- defaultValue: true,
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-d-flex u-align-items-center u-gap-7">
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
- style={{ padding: '80px', display: 'flex', justifyContent: 'center', background: '#f5f5f5' }}
108
- >
109
- <Popover {...args} content={content}>
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 Default: Story = {
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
- } as any,
155
- };
156
-
157
- export const LeftPosition: Story = {
158
- render: args => <InteractivePopover {...args} />,
159
- args: {
160
- position: 'left',
161
- trigger: 'click',
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 RightPosition: Story = {
171
- render: args => <InteractivePopover {...args} />,
172
- args: {
173
- position: 'right',
174
- trigger: 'click',
175
- offset: 12,
176
- delay: 0,
177
- defaultOpen: false,
178
- closeOnClickOutside: true,
179
- closeOnEscape: true,
180
- } as any,
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 AutoPosition: Story = {
184
- render: args => <InteractivePopover {...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: 'auto',
358
+ position: 'top',
187
359
  trigger: 'click',
188
- offset: 12,
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
- } as any,
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 => <InteractivePopover {...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
- } as any,
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 => <InteractivePopover {...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
- } as any,
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 => <InteractivePopover {...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
- } as any,
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
- color={ratingColor}
138
+ variant={ratingColor}
139
139
  />
140
140
  <span className="c-rating__value">
141
141
  {rating > 0 ? rating.toFixed(1) : 'Select a rating'}