@shohojdhara/atomix 0.3.14 → 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 (173) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/build-tools/EXAMPLES.md +372 -0
  3. package/build-tools/README.md +242 -0
  4. package/build-tools/__tests__/error-handler.test.js +230 -0
  5. package/build-tools/__tests__/index.test.js +141 -0
  6. package/build-tools/__tests__/rollup-plugin.test.js +194 -0
  7. package/build-tools/__tests__/utils.test.js +161 -0
  8. package/build-tools/__tests__/vite-plugin.test.js +129 -0
  9. package/build-tools/__tests__/webpack-loader.test.js +190 -0
  10. package/build-tools/error-handler.js +308 -0
  11. package/build-tools/index.d.ts +43 -0
  12. package/build-tools/index.js +88 -0
  13. package/build-tools/package.json +67 -0
  14. package/build-tools/rollup-plugin.js +236 -0
  15. package/build-tools/types.d.ts +163 -0
  16. package/build-tools/utils.js +203 -0
  17. package/build-tools/vite-plugin.js +161 -0
  18. package/build-tools/webpack-loader.js +123 -0
  19. package/dist/atomix.css +203 -90
  20. package/dist/atomix.css.map +1 -1
  21. package/dist/atomix.min.css +3 -3
  22. package/dist/atomix.min.css.map +1 -1
  23. package/dist/build-tools/EXAMPLES.md +372 -0
  24. package/dist/build-tools/README.md +242 -0
  25. package/dist/build-tools/__tests__/error-handler.test.js +230 -0
  26. package/dist/build-tools/__tests__/index.test.js +141 -0
  27. package/dist/build-tools/__tests__/rollup-plugin.test.js +194 -0
  28. package/dist/build-tools/__tests__/utils.test.js +161 -0
  29. package/dist/build-tools/__tests__/vite-plugin.test.js +129 -0
  30. package/dist/build-tools/__tests__/webpack-loader.test.js +190 -0
  31. package/dist/build-tools/error-handler.js +308 -0
  32. package/dist/build-tools/index.d.ts +43 -0
  33. package/dist/build-tools/index.js +88 -0
  34. package/dist/build-tools/package.json +67 -0
  35. package/dist/build-tools/rollup-plugin.js +236 -0
  36. package/dist/build-tools/types.d.ts +163 -0
  37. package/dist/build-tools/utils.js +203 -0
  38. package/dist/build-tools/vite-plugin.js +161 -0
  39. package/dist/build-tools/webpack-loader.js +123 -0
  40. package/dist/charts.d.ts +1 -1
  41. package/dist/charts.js +86 -57
  42. package/dist/charts.js.map +1 -1
  43. package/dist/core.d.ts +1 -1
  44. package/dist/core.js +136 -112
  45. package/dist/core.js.map +1 -1
  46. package/dist/forms.d.ts +2 -5
  47. package/dist/forms.js +140 -128
  48. package/dist/forms.js.map +1 -1
  49. package/dist/heavy.d.ts +1 -1
  50. package/dist/heavy.js +136 -112
  51. package/dist/heavy.js.map +1 -1
  52. package/dist/index.d.ts +9 -61
  53. package/dist/index.esm.js +237 -286
  54. package/dist/index.esm.js.map +1 -1
  55. package/dist/index.js +250 -299
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.min.js +1 -1
  58. package/dist/index.min.js.map +1 -1
  59. package/package.json +23 -8
  60. package/scripts/atomix-cli.js +170 -73
  61. package/scripts/cli/__tests__/README.md +81 -0
  62. package/scripts/cli/__tests__/basic.test.js +115 -0
  63. package/scripts/cli/__tests__/component-generator.test.js +332 -0
  64. package/scripts/cli/__tests__/integration.test.js +327 -0
  65. package/scripts/cli/__tests__/test-setup.js +133 -0
  66. package/scripts/cli/__tests__/token-manager.test.js +251 -0
  67. package/scripts/cli/__tests__/utils.test.js +161 -0
  68. package/scripts/cli/component-generator.js +253 -299
  69. package/scripts/cli/dependency-checker.js +355 -0
  70. package/scripts/cli/interactive-init.js +46 -5
  71. package/scripts/cli/template-manager.js +0 -2
  72. package/scripts/cli/templates/common-templates.js +636 -0
  73. package/scripts/cli/templates/composable-templates.js +148 -126
  74. package/scripts/cli/templates/index.js +23 -16
  75. package/scripts/cli/templates/project-templates.js +151 -23
  76. package/scripts/cli/templates/react-templates.js +280 -210
  77. package/scripts/cli/templates/scss-templates.js +90 -91
  78. package/scripts/cli/templates/testing-templates.js +206 -27
  79. package/scripts/cli/templates/testing-utils.js +278 -0
  80. package/scripts/cli/templates/types-templates.js +70 -56
  81. package/scripts/cli/theme-bridge.js +8 -2
  82. package/scripts/cli/token-manager.js +318 -206
  83. package/scripts/cli/utils.js +0 -1
  84. package/src/components/Accordion/Accordion.stories.tsx +369 -870
  85. package/src/components/AtomixGlass/AtomixGlass.tsx +80 -39
  86. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +103 -81
  87. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +8 -7
  88. package/src/components/AtomixGlass/glass-utils.ts +2 -2
  89. package/src/components/AtomixGlass/shader-utils.ts +5 -0
  90. package/src/components/AtomixGlass/stories/Customization.stories.tsx +131 -0
  91. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2957 -2853
  92. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1 -1
  93. package/src/components/AtomixGlass/stories/Overview.stories.tsx +348 -0
  94. package/src/components/AtomixGlass/stories/Performance.stories.tsx +103 -0
  95. package/src/components/AtomixGlass/stories/Playground.stories.tsx +50 -35
  96. package/src/components/AtomixGlass/stories/{ShaderVariants.stories.tsx → Shaders.stories.tsx} +1 -1
  97. package/src/components/AtomixGlass/stories/shared-components.tsx +90 -190
  98. package/src/components/Avatar/Avatar.stories.tsx +213 -1
  99. package/src/components/Badge/Badge.stories.tsx +121 -362
  100. package/src/components/Block/Block.stories.tsx +21 -12
  101. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +141 -23
  102. package/src/components/Button/Button.stories.tsx +463 -1126
  103. package/src/components/Button/Button.test.tsx +107 -0
  104. package/src/components/Button/Button.tsx +46 -50
  105. package/src/components/Button/ButtonGroup.stories.tsx +373 -217
  106. package/src/components/Callout/Callout.stories.tsx +289 -634
  107. package/src/components/Card/Card.stories.tsx +248 -68
  108. package/src/components/Chart/Chart.stories.tsx +150 -8
  109. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +151 -69
  110. package/src/components/Countdown/Countdown.stories.tsx +115 -8
  111. package/src/components/DataTable/DataTable.stories.tsx +346 -146
  112. package/src/components/DatePicker/DatePicker.stories.tsx +325 -1066
  113. package/src/components/Dropdown/Dropdown.stories.tsx +153 -33
  114. package/src/components/EdgePanel/EdgePanel.stories.tsx +230 -21
  115. package/src/components/Footer/Footer.stories.tsx +392 -328
  116. package/src/components/Form/Checkbox.stories.tsx +140 -6
  117. package/src/components/Form/Checkbox.test.tsx +63 -0
  118. package/src/components/Form/Checkbox.tsx +87 -51
  119. package/src/components/Form/Form.stories.tsx +119 -20
  120. package/src/components/Form/FormGroup.stories.tsx +127 -4
  121. package/src/components/Form/Radio.stories.tsx +140 -5
  122. package/src/components/Form/Select.stories.tsx +140 -8
  123. package/src/components/Form/Textarea.stories.tsx +149 -6
  124. package/src/components/Hero/Hero.stories.tsx +333 -32
  125. package/src/components/List/List.stories.tsx +141 -3
  126. package/src/components/Modal/Modal.stories.tsx +181 -42
  127. package/src/components/Popover/Popover.stories.tsx +448 -98
  128. package/src/components/Progress/Progress.stories.tsx +167 -5
  129. package/src/components/River/River.stories.tsx +1 -1
  130. package/src/components/SectionIntro/SectionIntro.stories.tsx +240 -48
  131. package/src/components/Spinner/Spinner.stories.tsx +102 -8
  132. package/src/components/Steps/Steps.stories.tsx +172 -43
  133. package/src/components/Tabs/Tabs.stories.tsx +136 -10
  134. package/src/components/Testimonial/Testimonial.stories.tsx +120 -3
  135. package/src/components/Todo/Todo.stories.tsx +198 -9
  136. package/src/components/Toggle/Toggle.stories.tsx +126 -39
  137. package/src/components/Tooltip/Tooltip.stories.tsx +194 -104
  138. package/src/components/Upload/Upload.stories.tsx +113 -24
  139. package/src/lib/README.md +2 -2
  140. package/src/lib/__tests__/theme-tools.test.ts +193 -0
  141. package/src/lib/composables/index.ts +2 -2
  142. package/src/lib/composables/useAtomixGlass.ts +28 -56
  143. package/src/lib/composables/useChartExport.ts +2 -7
  144. package/src/lib/composables/useDataTable.ts +46 -29
  145. package/src/lib/constants/components.ts +9 -32
  146. package/src/lib/theme/devtools/CLI.ts +1 -1
  147. package/src/lib/types/components.ts +1 -1
  148. package/src/lib/utils/__tests__/csv.test.ts +45 -0
  149. package/src/lib/utils/csv.ts +17 -0
  150. package/src/lib/utils/dataTableExport.ts +1 -10
  151. package/src/styles/01-settings/_index.scss +2 -1
  152. package/src/styles/01-settings/_settings.accordion.scss +28 -7
  153. package/src/styles/01-settings/_settings.colors.scss +11 -11
  154. package/src/styles/01-settings/_settings.typography.scss +5 -5
  155. package/src/styles/02-tools/_tools.utility-api.scss +14 -0
  156. package/src/styles/06-components/_components.accordion.scss +56 -14
  157. package/src/styles/06-components/_components.checkbox.scss +23 -17
  158. package/src/styles/99-utilities/_index.scss +2 -0
  159. package/src/styles/99-utilities/_utilities.scss +3 -1
  160. package/src/styles/99-utilities/_utilities.text-gradient.scss +45 -0
  161. package/themes/dark-complementary/README.md +98 -0
  162. package/themes/dark-complementary/index.scss +158 -0
  163. package/themes/default-light/README.md +81 -0
  164. package/themes/default-light/index.scss +154 -0
  165. package/themes/high-contrast/README.md +105 -0
  166. package/themes/high-contrast/index.scss +172 -0
  167. package/themes/test-theme/README.md +38 -0
  168. package/themes/test-theme/index.scss +47 -0
  169. package/scripts/cli/templates-original-backup.js +0 -1655
  170. package/scripts/cli/templates_backup.js +0 -684
  171. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +0 -1438
  172. package/src/lib/composables/useButton.ts +0 -93
  173. 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>;
@@ -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
  };