@shohojdhara/atomix 0.2.1 → 0.2.3

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 (201) hide show
  1. package/README.md +1 -28
  2. package/dist/atomix.css +1500 -241
  3. package/dist/atomix.min.css +6 -6
  4. package/dist/index.d.ts +1052 -194
  5. package/dist/index.esm.js +12201 -6066
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +5481 -2827
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.js +1 -1
  10. package/dist/index.min.js.map +1 -1
  11. package/dist/themes/boomdevs.css +1500 -301
  12. package/dist/themes/boomdevs.min.css +60 -8
  13. package/dist/themes/esrar.css +1500 -241
  14. package/dist/themes/esrar.min.css +6 -6
  15. package/dist/themes/mashroom.css +1496 -237
  16. package/dist/themes/mashroom.min.css +8 -8
  17. package/dist/themes/shaj-default.css +1451 -192
  18. package/dist/themes/shaj-default.min.css +6 -6
  19. package/package.json +66 -15
  20. package/src/components/Accordion/Accordion.stories.tsx +137 -0
  21. package/src/components/Accordion/Accordion.tsx +33 -3
  22. package/src/components/AtomixGlass/AtomixGlass.stories.tsx +3011 -0
  23. package/src/components/AtomixGlass/AtomixGlass.test.tsx +199 -0
  24. package/src/components/AtomixGlass/AtomixGlass.tsx +1281 -0
  25. package/src/components/AtomixGlass/AtomixGlassComprehensivePreview.stories.tsx +1369 -0
  26. package/src/components/AtomixGlass/README.md +134 -0
  27. package/src/components/AtomixGlass/index.ts +10 -0
  28. package/src/components/AtomixGlass/shader-utils.ts +140 -0
  29. package/src/components/AtomixGlass/utils.ts +8 -0
  30. package/src/components/Badge/Badge.stories.tsx +169 -0
  31. package/src/components/Badge/Badge.tsx +27 -2
  32. package/src/components/Button/Button.stories.tsx +345 -0
  33. package/src/components/Button/Button.tsx +35 -3
  34. package/src/components/Button/README.md +216 -0
  35. package/src/components/Callout/Callout.stories.tsx +813 -78
  36. package/src/components/Callout/Callout.test.tsx +368 -0
  37. package/src/components/Callout/Callout.tsx +26 -7
  38. package/src/components/Callout/README.md +409 -0
  39. package/src/components/Card/Card.stories.tsx +140 -0
  40. package/src/components/Card/Card.tsx +19 -3
  41. package/src/components/DatePicker/DatePicker copy.tsx +551 -0
  42. package/src/components/DatePicker/DatePicker.stories.tsx +188 -0
  43. package/src/components/DatePicker/DatePicker.tsx +379 -332
  44. package/src/components/DatePicker/readme.md +110 -1
  45. package/src/components/DatePicker/types.ts +8 -0
  46. package/src/components/Dropdown/Dropdown.stories.tsx +145 -0
  47. package/src/components/Dropdown/Dropdown.tsx +34 -5
  48. package/src/components/Footer/Footer.stories.tsx +388 -0
  49. package/src/components/Footer/Footer.tsx +197 -0
  50. package/src/components/Footer/FooterLink.tsx +72 -0
  51. package/src/components/Footer/FooterSection.tsx +87 -0
  52. package/src/components/Footer/FooterSocialLink.tsx +117 -0
  53. package/src/components/Footer/README.md +261 -0
  54. package/src/components/Footer/index.ts +13 -0
  55. package/src/components/Form/Checkbox.stories.tsx +101 -0
  56. package/src/components/Form/Checkbox.tsx +26 -2
  57. package/src/components/Form/Input.stories.tsx +124 -0
  58. package/src/components/Form/Input.tsx +36 -7
  59. package/src/components/Form/Radio.stories.tsx +139 -0
  60. package/src/components/Form/Radio.tsx +26 -2
  61. package/src/components/Form/Select.stories.tsx +110 -0
  62. package/src/components/Form/Select.tsx +26 -2
  63. package/src/components/Form/Textarea.stories.tsx +104 -0
  64. package/src/components/Form/Textarea.tsx +36 -7
  65. package/src/components/Hero/Hero.stories.tsx +54 -1
  66. package/src/components/Hero/Hero.tsx +70 -11
  67. package/src/components/Modal/Modal.stories.tsx +235 -0
  68. package/src/components/Modal/Modal.tsx +64 -35
  69. package/src/components/Pagination/Pagination.stories.tsx +101 -0
  70. package/src/components/Pagination/Pagination.tsx +25 -1
  71. package/src/components/Popover/Popover.stories.tsx +94 -0
  72. package/src/components/Popover/Popover.tsx +30 -4
  73. package/src/components/Rating/Rating.stories.tsx +112 -0
  74. package/src/components/Rating/Rating.tsx +25 -1
  75. package/src/components/SectionIntro/SectionIntro.tsx +9 -11
  76. package/src/components/Slider/Slider.stories.tsx +634 -50
  77. package/src/components/Slider/Slider.tsx +5 -3
  78. package/src/components/Steps/Steps.stories.tsx +119 -0
  79. package/src/components/Steps/Steps.tsx +32 -1
  80. package/src/components/Tab/Tab.stories.tsx +88 -0
  81. package/src/components/Tab/Tab.tsx +32 -1
  82. package/src/components/Toggle/Toggle.stories.tsx +92 -0
  83. package/src/components/Toggle/Toggle.tsx +32 -1
  84. package/src/components/Tooltip/Tooltip.stories.tsx +131 -0
  85. package/src/components/Tooltip/Tooltip.tsx +43 -7
  86. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +1002 -196
  87. package/src/components/VideoPlayer/VideoPlayer.tsx +161 -4
  88. package/src/components/index.ts +14 -0
  89. package/src/layouts/Grid/Grid.stories.tsx +226 -159
  90. package/src/lib/composables/index.ts +4 -0
  91. package/src/lib/composables/useAtomixGlass.ts +71 -0
  92. package/src/lib/composables/useButton.ts +3 -1
  93. package/src/lib/composables/useCallout.ts +4 -1
  94. package/src/lib/composables/useFooter.ts +85 -0
  95. package/src/lib/composables/useGlassContainer.ts +168 -0
  96. package/src/lib/composables/useSlider.ts +191 -4
  97. package/src/lib/constants/components.ts +173 -0
  98. package/src/lib/types/components.ts +622 -0
  99. package/src/lib/utils/displacement-generator.ts +86 -0
  100. package/src/styles/01-settings/_index.scss +1 -0
  101. package/src/styles/01-settings/_settings.accordion.scss +20 -19
  102. package/src/styles/01-settings/_settings.animations.scss +5 -5
  103. package/src/styles/01-settings/_settings.avatar-group.scss +1 -1
  104. package/src/styles/01-settings/_settings.avatar.scss +17 -18
  105. package/src/styles/01-settings/_settings.background.scss +10 -0
  106. package/src/styles/01-settings/_settings.badge.scss +1 -1
  107. package/src/styles/01-settings/_settings.breadcrumb.scss +8 -2
  108. package/src/styles/01-settings/_settings.callout.scss +7 -7
  109. package/src/styles/01-settings/_settings.card.scss +2 -2
  110. package/src/styles/01-settings/_settings.chart.scss +7 -7
  111. package/src/styles/01-settings/_settings.checkbox-group.scss +5 -2
  112. package/src/styles/01-settings/_settings.checkbox.scss +10 -4
  113. package/src/styles/01-settings/_settings.countdown.scss +6 -4
  114. package/src/styles/01-settings/_settings.dropdown.scss +9 -7
  115. package/src/styles/01-settings/_settings.edge-panel.scss +3 -2
  116. package/src/styles/01-settings/_settings.footer.scss +125 -0
  117. package/src/styles/01-settings/_settings.form-group.scss +3 -1
  118. package/src/styles/01-settings/_settings.form.scss +4 -2
  119. package/src/styles/01-settings/_settings.hero.scss +9 -7
  120. package/src/styles/01-settings/_settings.input.scss +9 -7
  121. package/src/styles/01-settings/_settings.list-group.scss +4 -2
  122. package/src/styles/01-settings/_settings.list.scss +4 -2
  123. package/src/styles/01-settings/_settings.menu.scss +10 -8
  124. package/src/styles/01-settings/_settings.messages.scss +19 -17
  125. package/src/styles/01-settings/_settings.modal.scss +6 -4
  126. package/src/styles/01-settings/_settings.nav.scss +6 -4
  127. package/src/styles/01-settings/_settings.navbar.scss +8 -5
  128. package/src/styles/01-settings/_settings.pagination.scss +5 -3
  129. package/src/styles/01-settings/_settings.popover.scss +6 -4
  130. package/src/styles/01-settings/_settings.rating.scss +5 -3
  131. package/src/styles/01-settings/_settings.river.scss +8 -6
  132. package/src/styles/01-settings/_settings.sectionintro.scss +8 -6
  133. package/src/styles/01-settings/_settings.select.scss +7 -5
  134. package/src/styles/01-settings/_settings.side-menu.scss +15 -13
  135. package/src/styles/01-settings/_settings.spacing.scss +4 -0
  136. package/src/styles/01-settings/_settings.steps.scss +7 -5
  137. package/src/styles/01-settings/_settings.tabs.scss +7 -5
  138. package/src/styles/01-settings/_settings.testimonials.scss +6 -4
  139. package/src/styles/01-settings/_settings.toggle.scss +3 -1
  140. package/src/styles/01-settings/_settings.tooltip.scss +5 -3
  141. package/src/styles/01-settings/_settings.upload.scss +22 -20
  142. package/src/styles/02-tools/_tools.animations.scss +19 -0
  143. package/src/styles/02-tools/_tools.background.scss +87 -0
  144. package/src/styles/02-tools/_tools.glass.scss +1 -0
  145. package/src/styles/02-tools/_tools.rem.scss +18 -5
  146. package/src/styles/02-tools/_tools.utility-api.scss +32 -26
  147. package/src/styles/03-generic/_generic.root.scss +15 -2
  148. package/src/styles/04-elements/_elements.body.scss +6 -0
  149. package/src/styles/06-components/_components.accordion.scss +24 -4
  150. package/src/styles/06-components/_components.atomix-glass.scss +0 -0
  151. package/src/styles/06-components/_components.avatar-group.scss +2 -1
  152. package/src/styles/06-components/_components.avatar.scss +2 -1
  153. package/src/styles/06-components/_components.badge.scss +36 -1
  154. package/src/styles/06-components/_components.breadcrumb.scss +2 -1
  155. package/src/styles/06-components/_components.button.scss +14 -3
  156. package/src/styles/06-components/_components.callout.scss +44 -4
  157. package/src/styles/06-components/_components.card.scss +21 -2
  158. package/src/styles/06-components/_components.chart.scss +3 -2
  159. package/src/styles/06-components/_components.checkbox.scss +2 -1
  160. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -2
  161. package/src/styles/06-components/_components.countdown.scss +2 -1
  162. package/src/styles/06-components/_components.data-table.scss +7 -6
  163. package/src/styles/06-components/_components.datepicker.scss +20 -1
  164. package/src/styles/06-components/_components.dropdown.scss +11 -4
  165. package/src/styles/06-components/_components.edge-panel.scss +4 -3
  166. package/src/styles/06-components/_components.footer.scss +825 -0
  167. package/src/styles/06-components/_components.form-group.scss +1 -0
  168. package/src/styles/06-components/_components.hero.scss +4 -4
  169. package/src/styles/06-components/_components.image-gallery.scss +1 -0
  170. package/src/styles/06-components/_components.input.scss +33 -2
  171. package/src/styles/06-components/_components.list-group.scss +3 -2
  172. package/src/styles/06-components/_components.list.scss +2 -1
  173. package/src/styles/06-components/_components.menu.scss +5 -4
  174. package/src/styles/06-components/_components.messages.scss +8 -7
  175. package/src/styles/06-components/_components.modal.scss +3 -2
  176. package/src/styles/06-components/_components.nav.scss +6 -5
  177. package/src/styles/06-components/_components.navbar.scss +4 -3
  178. package/src/styles/06-components/_components.pagination.scss +2 -1
  179. package/src/styles/06-components/_components.photoviewer.scss +4 -3
  180. package/src/styles/06-components/_components.popover.scss +3 -2
  181. package/src/styles/06-components/_components.product-review.scss +3 -2
  182. package/src/styles/06-components/_components.progress.scss +3 -2
  183. package/src/styles/06-components/_components.river.scss +3 -2
  184. package/src/styles/06-components/_components.sectionintro.scss +2 -1
  185. package/src/styles/06-components/_components.select.scss +5 -4
  186. package/src/styles/06-components/_components.side-menu.scss +8 -7
  187. package/src/styles/06-components/_components.skeleton.scss +3 -2
  188. package/src/styles/06-components/_components.slider.scss +7 -6
  189. package/src/styles/06-components/_components.spinner.scss +1 -0
  190. package/src/styles/06-components/_components.steps.scss +3 -2
  191. package/src/styles/06-components/_components.tabs.scss +4 -3
  192. package/src/styles/06-components/_components.testimonials.scss +2 -1
  193. package/src/styles/06-components/_components.todo.scss +3 -2
  194. package/src/styles/06-components/_components.toggle.scss +5 -4
  195. package/src/styles/06-components/_components.tooltip.scss +3 -2
  196. package/src/styles/06-components/_components.upload.scss +4 -3
  197. package/src/styles/06-components/_components.video-player.scss +50 -27
  198. package/src/styles/06-components/_index.scss +2 -0
  199. package/src/styles/99-utilities/_utilities.glass-fixes.scss +48 -0
  200. package/dist/themes/yabai.css +0 -13711
  201. package/dist/themes/yabai.min.css +0 -189
@@ -84,6 +84,7 @@ const RangeExample = () => {
84
84
  | `placement` | `string` | `'bottom-start'` | Placement of the dropdown calendar |
85
85
  | `inputClassName` | `string` | - | Additional class for the input |
86
86
  | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size of the input field |
87
+ | `glass` | `boolean \| AtomixGlassProps` | `false` | Applies glass morphism effect to calendar dropdown |
87
88
 
88
89
  ## Ref API
89
90
 
@@ -103,4 +104,112 @@ datePickerRef.current.clear();
103
104
 
104
105
  // Focus the input
105
106
  datePickerRef.current.focus();
106
- ```
107
+ ```
108
+
109
+ ## Glass Morphism Effect
110
+
111
+ The DatePicker component supports glass morphism effects through the `glass` prop, which can be applied to the calendar dropdown for a modern, translucent appearance.
112
+
113
+ ### Basic Glass Effect
114
+
115
+ ```jsx
116
+ import React, { useState } from 'react';
117
+ import DatePicker from '../components/DatePicker';
118
+
119
+ const GlassExample = () => {
120
+ const [selectedDate, setSelectedDate] = useState(null);
121
+
122
+ return (
123
+ <div style={{ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)', padding: '2rem' }}>
124
+ <DatePicker
125
+ value={selectedDate}
126
+ onChange={setSelectedDate}
127
+ placeholder="Select a date..."
128
+ glass={true}
129
+ />
130
+ </div>
131
+ );
132
+ };
133
+ ```
134
+
135
+ ### Custom Glass Configuration
136
+
137
+ ```jsx
138
+ import React, { useState } from 'react';
139
+ import DatePicker from '../components/DatePicker';
140
+
141
+ const CustomGlassExample = () => {
142
+ const [selectedDate, setSelectedDate] = useState(null);
143
+
144
+ return (
145
+ <div style={{ background: 'linear-gradient(45deg, #f093fb 0%, #f5576c 100%)', padding: '2rem' }}>
146
+ <DatePicker
147
+ value={selectedDate}
148
+ onChange={setSelectedDate}
149
+ placeholder="Select a date..."
150
+ glass={{
151
+ displacementScale: 60,
152
+ blurAmount: 0,
153
+ saturation: 180,
154
+ aberrationIntensity: 2,
155
+ cornerRadius: 16,
156
+ overLight: false,
157
+ mode: 'polar',
158
+ }}
159
+ />
160
+ </div>
161
+ );
162
+ };
163
+ ```
164
+
165
+ ### Glass with Date Range Selection
166
+
167
+ ```jsx
168
+ import React, { useState } from 'react';
169
+ import DatePicker from '../components/DatePicker';
170
+
171
+ const GlassRangeExample = () => {
172
+ const [dateRange, setDateRange] = useState({ startDate: null, endDate: null });
173
+
174
+ return (
175
+ <div style={{ background: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', padding: '2rem' }}>
176
+ <DatePicker
177
+ selectionMode="range"
178
+ startDate={dateRange.startDate}
179
+ endDate={dateRange.endDate}
180
+ onRangeChange={setDateRange}
181
+ placeholder="Select date range..."
182
+ glass={{
183
+ displacementScale: 45,
184
+ blurAmount: 0,
185
+ saturation: 160,
186
+ aberrationIntensity: 1.5,
187
+ cornerRadius: 14,
188
+ mode: 'prominent',
189
+ }}
190
+ />
191
+ </div>
192
+ );
193
+ };
194
+ ```
195
+
196
+ ### Glass Props
197
+
198
+ When `glass` is an object, it accepts the same props as the `AtomixGlass` component:
199
+
200
+ | Prop | Type | Default | Description |
201
+ |------|------|---------|-------------|
202
+ | `displacementScale` | `number` | `40` | Displacement scale for the glass effect |
203
+ | `blurAmount` | `number` | `0` | Blur amount for the backdrop |
204
+ | `saturation` | `number` | `160` | Saturation percentage for the backdrop |
205
+ | `aberrationIntensity` | `number` | `1.5` | Chromatic aberration intensity |
206
+ | `cornerRadius` | `number` | `12` | Corner radius in pixels |
207
+ | `overLight` | `boolean` | `false` | Whether the glass is over a light background |
208
+ | `mode` | `'standard' \| 'polar' \| 'prominent' \| 'shader'` | `'standard'` | Glass effect mode |
209
+
210
+ ### Best Practices for Glass DatePicker
211
+
212
+ - Use glass effects with colorful or gradient backgrounds for best visual impact
213
+ - Consider the `overLight` prop when using light backgrounds
214
+ - The `polar` and `prominent` modes work well for date pickers with larger calendar dropdowns
215
+ - Ensure sufficient contrast between the glass effect and background for accessibility
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { AtomixGlassProps } from '../../lib/types/components';
2
3
 
3
4
  export type DatePickerViewMode = 'days' | 'months' | 'years';
4
5
 
@@ -142,6 +143,13 @@ export interface DatePickerProps {
142
143
  * @default "md"
143
144
  */
144
145
  size?: DatePickerSize;
146
+
147
+ /**
148
+ * Applies a glass morphism effect to the calendar dropdown.
149
+ * Can be a boolean to enable with default settings, or an object with AtomixGlassProps to customize the effect.
150
+ * @default false
151
+ */
152
+ glass?: boolean | AtomixGlassProps;
145
153
  }
146
154
 
147
155
  export interface DatePickerRef {
@@ -67,6 +67,10 @@ const meta: Meta<typeof Dropdown> = {
67
67
  control: 'boolean',
68
68
  description: 'Whether to close the dropdown when pressing the Escape key',
69
69
  },
70
+ glass: {
71
+ control: 'boolean',
72
+ description: 'Enable glass morphism effect',
73
+ },
70
74
  },
71
75
  };
72
76
 
@@ -356,3 +360,144 @@ export const AllVariants: Story = {
356
360
  );
357
361
  },
358
362
  };
363
+
364
+ /**
365
+ * Glass morphism dropdown example.
366
+ */
367
+ export const GlassDropdown: Story = {
368
+ args: {
369
+ ...Default.args,
370
+ glass: true,
371
+ },
372
+ render: args => <InteractiveDropdown {...args} />,
373
+ decorators: [
374
+ (Story) => (
375
+ <div style={{
376
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
377
+ minHeight: '100vh',
378
+ padding: '2rem'
379
+ }}>
380
+ <Story />
381
+ </div>
382
+ ),
383
+ ],
384
+ };
385
+
386
+ /**
387
+ * Glass dropdown with custom settings.
388
+ */
389
+ export const GlassDropdownCustom: Story = {
390
+ args: {
391
+ ...Default.args,
392
+ glass: {
393
+ displacementScale: 80,
394
+ blurAmount: 2,
395
+ saturation: 200,
396
+ aberrationIntensity: 1,
397
+ cornerRadius: 16,
398
+ mode: 'polar',
399
+ },
400
+ },
401
+ render: args => <InteractiveDropdown {...args} />,
402
+ decorators: [
403
+ (Story) => (
404
+ <div style={{
405
+ background: 'linear-gradient(45deg, #f093fb 0%, #f5576c 100%)',
406
+ minHeight: '100vh',
407
+ padding: '2rem'
408
+ }}>
409
+ <Story />
410
+ </div>
411
+ ),
412
+ ],
413
+ };
414
+
415
+ /**
416
+ * Glass dropdown with icons.
417
+ */
418
+ export const GlassDropdownWithIcons: Story = {
419
+ args: {
420
+ ...WithIcons.args,
421
+ glass: true,
422
+ },
423
+ render: args => <InteractiveDropdown {...args} />,
424
+ decorators: [
425
+ (Story) => (
426
+ <div style={{
427
+ background: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)',
428
+ minHeight: '100vh',
429
+ padding: '2rem'
430
+ }}>
431
+ <Story />
432
+ </div>
433
+ ),
434
+ ],
435
+ };
436
+
437
+ /**
438
+ * Glass dropdown with all variants.
439
+ */
440
+ export const GlassAllVariants: Story = {
441
+ parameters: {
442
+ docs: {
443
+ description: {
444
+ story:
445
+ 'Glass morphism effect applied to dropdowns with all color variants.',
446
+ },
447
+ },
448
+ },
449
+ render: () => {
450
+ const [openDropdown, setOpenDropdown] = useState<string | null>(null);
451
+
452
+ const handleOpenChange = (variant: string, isOpen: boolean) => {
453
+ if (isOpen) {
454
+ setOpenDropdown(variant);
455
+ } else if (openDropdown === variant) {
456
+ setOpenDropdown(null);
457
+ }
458
+ };
459
+
460
+ return (
461
+ <div style={{
462
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
463
+ minHeight: '100vh',
464
+ padding: '2rem'
465
+ }}>
466
+ <div className="u-d-flex u-flex-wrap u-gap-3">
467
+ {[
468
+ 'primary',
469
+ 'secondary',
470
+ 'tertiary',
471
+ 'success',
472
+ 'info',
473
+ 'warning',
474
+ 'error',
475
+ 'light',
476
+ 'dark',
477
+ ].map(color => (
478
+ <Dropdown
479
+ key={color}
480
+ variant={color as ThemeColor}
481
+ trigger="click"
482
+ isOpen={openDropdown === color}
483
+ onOpenChange={isOpen => handleOpenChange(color, isOpen)}
484
+ glass={true}
485
+ children={
486
+ <button className={`c-btn c-btn--${color}`}>
487
+ {color} <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
488
+ </button>
489
+ }
490
+ menu={
491
+ <>
492
+ <DropdownItem>Menu item 1</DropdownItem>
493
+ <DropdownItem>Menu item 2</DropdownItem>
494
+ <DropdownItem>Menu item 3</DropdownItem>
495
+ </>
496
+ }
497
+ />
498
+ ))}
499
+ </div>
500
+ </div>
501
+ );
502
+ },
503
+ };
@@ -1,5 +1,6 @@
1
1
  import React, { useRef, useState, useCallback, createContext, useContext, useEffect } from 'react';
2
2
  import { DROPDOWN } from '../../lib/constants/components';
3
+ import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
3
4
  import type {
4
5
  DropdownProps,
5
6
  DropdownItemProps,
@@ -138,6 +139,7 @@ export const Dropdown: React.FC<DropdownProps> = ({
138
139
  minWidth = DROPDOWN.DEFAULTS.MIN_WIDTH,
139
140
  variant,
140
141
  className = '',
142
+ glass,
141
143
  ...props
142
144
  }) => {
143
145
  // Set up controlled vs uncontrolled state
@@ -294,6 +296,7 @@ export const Dropdown: React.FC<DropdownProps> = ({
294
296
  trigger === 'click' ? 'c-dropdown--onclick' : '',
295
297
  variant ? `c-dropdown--${variant}` : '',
296
298
  isOpen ? 'is-open' : '',
299
+ glass ? 'c-dropdown--glass' : '',
297
300
  className,
298
301
  ]
299
302
  .filter(Boolean)
@@ -306,6 +309,14 @@ export const Dropdown: React.FC<DropdownProps> = ({
306
309
  menuStyleProps.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;
307
310
  }
308
311
 
312
+ const menuContent = (
313
+ <div className="c-dropdown__menu-inner" style={menuStyleProps}>
314
+ <DropdownContext.Provider value={{ isOpen, close, id: dropdownId, trigger }}>
315
+ <ul className={`c-dropdown__menu ${glass ? 'c-dropdown__menu--glass' : ''}`}>{menu}</ul>
316
+ </DropdownContext.Provider>
317
+ </div>
318
+ );
319
+
309
320
  return (
310
321
  <div
311
322
  ref={dropdownRef}
@@ -335,11 +346,29 @@ export const Dropdown: React.FC<DropdownProps> = ({
335
346
  aria-hidden={!isOpen}
336
347
  onKeyDown={handleKeyDown}
337
348
  >
338
- <div className="c-dropdown__menu-inner" style={menuStyleProps}>
339
- <DropdownContext.Provider value={{ isOpen, close, id: dropdownId, trigger }}>
340
- <ul className="c-dropdown__menu">{menu}</ul>
341
- </DropdownContext.Provider>
342
- </div>
349
+ {glass ? (
350
+ // Default glass settings for dropdowns
351
+ (() => {
352
+ const defaultGlassProps = {
353
+ displacementScale: 60,
354
+ blurAmount: 1,
355
+ saturation: 160,
356
+ aberrationIntensity: 0.5,
357
+ cornerRadius: 12,
358
+ mode: 'shader' as const,
359
+ };
360
+
361
+ const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
362
+
363
+ return (
364
+ <AtomixGlass {...glassProps} style={{position: 'absolute', width: '100%', height: '100%'}}>
365
+ {menuContent}
366
+ </AtomixGlass>
367
+ );
368
+ })()
369
+ ) : (
370
+ menuContent
371
+ )}
343
372
  </div>
344
373
  </div>
345
374
  );