@shohojdhara/atomix 0.4.4 → 0.4.6

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 (62) hide show
  1. package/dist/atomix.css +50 -11
  2. package/dist/atomix.css.map +1 -1
  3. package/dist/atomix.min.css +1 -1
  4. package/dist/atomix.min.css.map +1 -1
  5. package/dist/charts.js +184 -189
  6. package/dist/charts.js.map +1 -1
  7. package/dist/core.d.ts +4 -4
  8. package/dist/core.js +194 -199
  9. package/dist/core.js.map +1 -1
  10. package/dist/forms.js +184 -189
  11. package/dist/forms.js.map +1 -1
  12. package/dist/heavy.js +189 -194
  13. package/dist/heavy.js.map +1 -1
  14. package/dist/index.d.ts +44 -47
  15. package/dist/index.esm.js +496 -613
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.js +528 -631
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.min.js +1 -1
  20. package/dist/index.min.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/components/AtomixGlass/AtomixGlass.tsx +60 -39
  23. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +8 -42
  24. package/src/components/AtomixGlass/glass-utils.ts +27 -14
  25. package/src/components/AtomixGlass/stories/Overview.stories.tsx +19 -21
  26. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1162 -515
  27. package/src/components/AtomixGlass/stories/shared-components.tsx +11 -3
  28. package/src/components/Breadcrumb/Breadcrumb.tsx +5 -5
  29. package/src/components/Breadcrumb/BreadcrumbCompound.test.tsx +2 -2
  30. package/src/components/Button/Button.tsx +6 -6
  31. package/src/components/Card/Card.tsx +3 -3
  32. package/src/components/Dropdown/Dropdown.tsx +5 -3
  33. package/src/components/Footer/Footer.tsx +124 -166
  34. package/src/components/Footer/FooterLink.tsx +16 -19
  35. package/src/components/Footer/FooterSection.tsx +40 -39
  36. package/src/components/Footer/FooterSocialLink.tsx +59 -58
  37. package/src/components/Footer/README.md +1 -1
  38. package/src/components/Hero/Hero.tsx +72 -142
  39. package/src/components/Navigation/Menu/MegaMenu.tsx +17 -12
  40. package/src/components/Navigation/Menu/Menu.tsx +49 -24
  41. package/src/components/Navigation/Nav/NavItem.tsx +5 -3
  42. package/src/components/Navigation/Navbar/Navbar.tsx +13 -5
  43. package/src/components/Navigation/SideMenu/SideMenu.tsx +2 -2
  44. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -4
  45. package/src/components/Slider/Slider.tsx +7 -4
  46. package/src/lib/composables/index.ts +1 -2
  47. package/src/lib/composables/useAtomixGlass.ts +246 -222
  48. package/src/lib/composables/useAtomixGlassStyles.ts +46 -23
  49. package/src/lib/composables/useFooter.ts +117 -20
  50. package/src/lib/composables/useSlider.ts +3 -1
  51. package/src/lib/constants/components.ts +3 -1
  52. package/src/lib/types/components.ts +44 -12
  53. package/src/styles/06-components/_components.atomix-glass.scss +72 -14
  54. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +0 -222
  55. package/src/lib/composables/atomix-glass/useGlassBackgroundDetection.ts +0 -329
  56. package/src/lib/composables/atomix-glass/useGlassCornerRadius.ts +0 -82
  57. package/src/lib/composables/atomix-glass/useGlassMouseTracking.ts +0 -153
  58. package/src/lib/composables/atomix-glass/useGlassOverLight.ts +0 -198
  59. package/src/lib/composables/atomix-glass/useGlassState.ts +0 -112
  60. package/src/lib/composables/atomix-glass/useGlassTransforms.ts +0 -160
  61. package/src/lib/composables/glass-styles.ts +0 -302
  62. package/src/lib/composables/useGlassContainer.ts +0 -177
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shohojdhara/atomix",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "Atomix Design System - A modern component library for web applications",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1,5 +1,5 @@
1
- import React, { useMemo, useRef, useEffect } from 'react';
2
- import type { AtomixGlassProps, GlassSize } from '../../lib/types/components';
1
+ import React, { useMemo, useRef } from 'react';
2
+ import type { AtomixGlassProps } from '../../lib/types/components';
3
3
  import { ATOMIX_GLASS } from '../../lib/constants/components';
4
4
  import { AtomixGlassContainer } from './AtomixGlassContainer';
5
5
  import { useAtomixGlass } from '../../lib/composables/useAtomixGlass';
@@ -155,20 +155,48 @@ export function AtomixGlass({
155
155
  style,
156
156
  });
157
157
 
158
- // Calculate isOverLight independently from overLightConfig to prevent displacement changes on hover
159
- // overLightConfig recalculates with hover/active states, but displacement should remain stable
160
- // eslint-disable-next-line react-hooks/exhaustive-deps
161
- const isOverLight = useMemo(() => overLightConfig?.isOverLight, [overLight]);
158
+ const isOverLight = useMemo(() => overLightConfig.isOverLight, [overLightConfig.isOverLight]);
162
159
 
163
160
  const shouldRenderOverLightLayers = withOverLightLayers && isOverLight;
164
161
 
162
+ // ── Layout hoisting ──────────────────────────────────────────────────
163
+ // When position is fixed/sticky the layout props must live on the ROOT
164
+ // `.c-atomix-glass` element so that every decorative layer (borders,
165
+ // backgrounds, hover effects) stays in the same stacking context.
166
+
167
+ // Extract zIndex from style so it becomes the base for ALL internal
168
+ // layers via --atomix-glass-base-z-index. It must NOT be applied as a
169
+ // real z-index on the root element — that would break the glass effect.
170
+ const { zIndex: customZIndex, ...restStyle } = style;
171
+ const isFixedOrSticky = restStyle.position === 'fixed' || restStyle.position === 'sticky';
172
+
173
+ const rootLayoutStyle = useMemo<React.CSSProperties>(() => {
174
+ if (!isFixedOrSticky) return {};
175
+ const { position: p, top: t, left: l, right: r, bottom: b } = restStyle;
176
+ return {
177
+ ...(p && { position: p }),
178
+ ...(t !== undefined && { top: t }),
179
+ ...(l !== undefined && { left: l }),
180
+ ...(r !== undefined && { right: r }),
181
+ ...(b !== undefined && { bottom: b }),
182
+ };
183
+ }, [isFixedOrSticky, restStyle]);
184
+
165
185
  // Calculate base style with transforms
166
- const baseStyle = {
167
- ...style,
168
- ...(!effectiveWithoutEffects && {
169
- transform: transformStyle,
170
- }),
171
- };
186
+ // When layout is hoisted to the root, strip those props from the container
187
+ const baseStyle = useMemo(() => {
188
+ if (isFixedOrSticky) {
189
+ const { position: _p, top: _t, left: _l, right: _r, bottom: _b, ...visualStyle } = restStyle;
190
+ return {
191
+ ...visualStyle,
192
+ ...(!effectiveWithoutEffects && { transform: transformStyle }),
193
+ };
194
+ }
195
+ return {
196
+ ...restStyle,
197
+ ...(!effectiveWithoutEffects && { transform: transformStyle }),
198
+ };
199
+ }, [isFixedOrSticky, restStyle, effectiveWithoutEffects, transformStyle]);
172
200
 
173
201
  // Build className with state modifiers
174
202
  const componentClassName = [
@@ -181,14 +209,17 @@ export function AtomixGlass({
181
209
  .filter(Boolean)
182
210
  .join(' ');
183
211
 
184
- // Calculate position and size styles
212
+ // Calculate position and size styles for internal layers
213
+ // When root is fixed/sticky, internal layers use absolute (relative to root)
185
214
  const positionStyles = useMemo(
186
215
  () => ({
187
- position: (style.position || 'absolute') as React.CSSProperties['position'],
188
- top: style.top || 0,
189
- left: style.left || 0,
216
+ position: (isFixedOrSticky
217
+ ? 'absolute'
218
+ : restStyle.position || 'absolute') as React.CSSProperties['position'],
219
+ top: isFixedOrSticky ? 0 : restStyle.top || 0,
220
+ left: isFixedOrSticky ? 0 : restStyle.left || 0,
190
221
  }),
191
- [style.position, style.top, style.left]
222
+ [isFixedOrSticky, restStyle.position, restStyle.top, restStyle.left]
192
223
  );
193
224
 
194
225
  const adjustedSize = useMemo(() => {
@@ -205,14 +236,14 @@ export function AtomixGlass({
205
236
  };
206
237
 
207
238
  return {
208
- width: resolveSize(width, style.width, glassSize.width),
209
- height: resolveSize(height, style.height, glassSize.height),
239
+ width: resolveSize(width, restStyle.width, glassSize.width),
240
+ height: resolveSize(height, restStyle.height, glassSize.height),
210
241
  };
211
242
  }, [
212
243
  width,
213
244
  height,
214
- style.width,
215
- style.height,
245
+ restStyle.width,
246
+ restStyle.height,
216
247
  positionStyles.position,
217
248
  glassSize.width,
218
249
  glassSize.height,
@@ -304,6 +335,7 @@ export function AtomixGlass({
304
335
  const configBorderOpacity = overLightConfig?.borderOpacity ?? 1;
305
336
 
306
337
  return {
338
+ ...(customZIndex !== undefined && { '--atomix-glass-base-z-index': customZIndex }),
307
339
  '--atomix-glass-radius': `${effectiveBorderRadius}px`,
308
340
  '--atomix-glass-transform': transformStyle || 'none',
309
341
  '--atomix-glass-position': positionStyles.position,
@@ -335,6 +367,9 @@ export function AtomixGlass({
335
367
  '--atomix-glass-overlay-gradient': isOverLight
336
368
  ? `radial-gradient(circle at ${basePosition.x}% ${basePosition.y}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_BASE + absMx * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_MID_STOP}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_BASE + absMy * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_MULTIPLIER}) 100%)`
337
369
  : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`,
370
+ '--atomix-glass-overlay-highlight-opacity':
371
+ opacityValues.over * ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.OPACITY_MULTIPLIER,
372
+ '--atomix-glass-overlay-highlight-bg': `radial-gradient(circle at ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.POSITION_X}% ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.POSITION_Y}%, rgba(255, 255, 255, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.WHITE_OPACITY}) 0%, transparent ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.STOP}%)`,
338
373
  } as React.CSSProperties;
339
374
  }, [
340
375
  gradientValues,
@@ -345,6 +380,7 @@ export function AtomixGlass({
345
380
  adjustedSize,
346
381
  isOverLight,
347
382
  overLightConfig.borderOpacity,
383
+ customZIndex,
348
384
  ]);
349
385
 
350
386
  // Helper function to render background layers
@@ -361,13 +397,6 @@ export function AtomixGlass({
361
397
  ]
362
398
  .filter(Boolean)
363
399
  .join(' ')}
364
- style={{
365
- ...positionStyles,
366
- height: adjustedSize.height,
367
- width: adjustedSize.width,
368
- borderRadius: `${effectiveBorderRadius}px`,
369
- transform: baseStyle.transform,
370
- }}
371
400
  />
372
401
  );
373
402
 
@@ -375,7 +404,7 @@ export function AtomixGlass({
375
404
  <div
376
405
  {...rest}
377
406
  className={componentClassName}
378
- style={glassVars}
407
+ style={{ ...glassVars }}
379
408
  role={role || (onClick ? 'button' : undefined)}
380
409
  tabIndex={onClick ? (tabIndex ?? 0) : tabIndex}
381
410
  aria-label={ariaLabel}
@@ -388,7 +417,7 @@ export function AtomixGlass({
388
417
  ref={glassRef}
389
418
  contentRef={contentRef}
390
419
  className={className}
391
- style={baseStyle}
420
+ style={rootLayoutStyle}
392
421
  borderRadius={effectiveBorderRadius}
393
422
  displacementScale={
394
423
  effectiveWithoutEffects
@@ -437,7 +466,6 @@ export function AtomixGlass({
437
466
  effectiveWithoutEffects={effectiveWithoutEffects}
438
467
  effectiveReducedMotion={effectiveReducedMotion}
439
468
  shaderVariant={shaderVariant}
440
- elasticity={elasticity}
441
469
  withLiquidBlur={withLiquidBlur}
442
470
  >
443
471
  {children}
@@ -461,14 +489,7 @@ export function AtomixGlass({
461
489
  <div className={ATOMIX_GLASS.BASE_LAYER_CLASS} />
462
490
  <div className={ATOMIX_GLASS.OVERLAY_LAYER_CLASS} />
463
491
  {/* Overlay highlight - opacity and background are dynamic, calculated inline */}
464
- <div
465
- className={ATOMIX_GLASS.OVERLAY_HIGHLIGHT_CLASS}
466
- style={{
467
- opacity:
468
- opacityValues.over * ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.OPACITY_MULTIPLIER,
469
- background: `radial-gradient(circle at ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.POSITION_X}% ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.POSITION_Y}%, rgba(255, 255, 255, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.WHITE_OPACITY}) 0%, transparent ${ATOMIX_GLASS.CONSTANTS.OVERLAY_HIGHLIGHT.STOP}%)`,
470
- }}
471
- />
492
+ <div className={ATOMIX_GLASS.OVERLAY_HIGHLIGHT_CLASS} />
472
493
  </>
473
494
  )}
474
495
  {withBorder && (
@@ -91,7 +91,7 @@ interface AtomixGlassContainerProps {
91
91
  effectiveReducedMotion?: boolean;
92
92
  shaderVariant?: FragmentShaderType;
93
93
  withLiquidBlur?: boolean;
94
- elasticity?: number;
94
+
95
95
  contentRef?: React.RefObject<HTMLDivElement>;
96
96
  children?: React.ReactNode;
97
97
  }
@@ -129,7 +129,7 @@ export const AtomixGlassContainer = forwardRef<HTMLDivElement, AtomixGlassContai
129
129
  effectiveReducedMotion = false,
130
130
  shaderVariant = 'liquidGlass',
131
131
  withLiquidBlur = false,
132
- elasticity = 0,
132
+
133
133
  contentRef,
134
134
  },
135
135
  ref
@@ -489,21 +489,12 @@ export const AtomixGlassContainer = forwardRef<HTMLDivElement, AtomixGlassContai
489
489
  >
490
490
  <div
491
491
  className={ATOMIX_GLASS.INNER_CLASS}
492
- style={
493
- {
494
- padding: `var(--atomix-glass-container-padding)`,
495
- boxShadow: `var(--atomix-glass-container-box-shadow)`,
496
- } as CSSProperties
497
- }
498
492
  onMouseEnter={onMouseEnter}
499
493
  onMouseLeave={onMouseLeave}
500
494
  onMouseDown={onMouseDown}
501
495
  onMouseUp={onMouseUp}
502
496
  >
503
- <div
504
- className={ATOMIX_GLASS.FILTER_CLASS}
505
- style={{ zIndex: 1, position: 'absolute', inset: 0 }}
506
- >
497
+ <div className={ATOMIX_GLASS.FILTER_CLASS}>
507
498
  <GlassFilter
508
499
  blurAmount={blurAmount}
509
500
  mode={mode}
@@ -524,39 +515,14 @@ export const AtomixGlassContainer = forwardRef<HTMLDivElement, AtomixGlassContai
524
515
  <div
525
516
  ref={setForceNoTransition}
526
517
  className={ATOMIX_GLASS.FILTER_OVERLAY_CLASS}
527
- style={
528
- {
529
- filter: `url(#${filterId})`,
530
- backdropFilter: `var(--atomix-glass-container-backdrop)`,
531
- borderRadius: `var(--atomix-glass-container-radius)`,
532
- } as CSSProperties
533
- }
534
- />
535
- <div
536
- className={ATOMIX_GLASS.FILTER_SHADOW_CLASS}
537
- style={
538
- {
539
- boxShadow: `var(--atomix-glass-container-shadow)`,
540
- opacity: `var(--atomix-glass-container-shadow-opacity)`,
541
- background: `var(--atomix-glass-container-bg)`,
542
- borderRadius: `var(--atomix-glass-container-radius)`,
543
- } as CSSProperties
544
- }
518
+ style={{
519
+ filter: `url(#${filterId})`,
520
+ }}
545
521
  />
522
+ <div className={ATOMIX_GLASS.FILTER_SHADOW_CLASS} />
546
523
  </div>
547
524
 
548
- <div
549
- ref={contentRef}
550
- className={ATOMIX_GLASS.CONTENT_CLASS}
551
- style={
552
- {
553
- position: 'relative',
554
- textShadow: `var(--atomix-glass-container-text-shadow)`,
555
- // Ensure content is always above the filter layer (zIndex 1)
556
- zIndex: elasticity > 0 ? 100 : 2,
557
- } as CSSProperties
558
- }
559
- >
525
+ <div ref={contentRef} className={ATOMIX_GLASS.CONTENT_CLASS}>
560
526
  {children}
561
527
  </div>
562
528
  </div>
@@ -51,21 +51,8 @@ export const calculateMouseInfluence = (mouseOffset: MousePosition): number => {
51
51
  return Math.min(0.8, influence); // Tighter cap to prevent blur/filter blow-out
52
52
  };
53
53
 
54
- /**
55
- * Calculate overlight intensity based on background and mouse position
56
- */
57
- export const calculateOverLightIntensity = (
58
- mouseOffset: MousePosition,
59
- baseIntensity: number
60
- ): number => {
61
- if (!mouseOffset || typeof mouseOffset.x !== 'number' || typeof mouseOffset.y !== 'number') {
62
- return baseIntensity;
63
- }
64
54
 
65
- // Calculate additional intensity based on mouse position
66
- const mouseInfluence = calculateMouseInfluence(mouseOffset);
67
- return Math.min(1.0, baseIntensity * (1 + mouseInfluence * 0.3));
68
- };
55
+
69
56
 
70
57
  /**
71
58
  * Clamp blur value to minimum and maximum with overlight consideration
@@ -238,6 +225,32 @@ export const extractBorderRadiusFromChildren = (children: React.ReactNode): numb
238
225
  return CONSTANTS.DEFAULT_CORNER_RADIUS;
239
226
  };
240
227
 
228
+ /**
229
+ * Smoothstep interpolation — hermite S-curve
230
+ * Creates a smooth ease-in / ease-out transition from 0 to 1.
231
+ * `t` is clamped to [0, 1] before evaluation.
232
+ */
233
+ export const smoothstep = (t: number): number => {
234
+ const clamped = Math.max(0, Math.min(1, t));
235
+ return clamped * clamped * (3 - 2 * clamped);
236
+ };
237
+
238
+ /**
239
+ * Linear interpolation between `a` and `b` by factor `t` ∈ [0, 1]
240
+ */
241
+ export const lerp = (a: number, b: number, t: number): number => {
242
+ return a + (b - a) * t;
243
+ };
244
+
245
+ /**
246
+ * Soft clamp — exponentially approaches `max` without a hard cutoff.
247
+ * Gives a natural deceleration curve near the limit.
248
+ */
249
+ export const softClamp = (value: number, max: number): number => {
250
+ if (max <= 0) return 0;
251
+ return max * (1 - Math.exp(-value / max));
252
+ };
253
+
241
254
  /**
242
255
  * Get displacement map URL based on mode
243
256
  */
@@ -272,9 +272,9 @@ type Story = StoryObj<typeof meta>;
272
272
  export const BasicUsage: Story = {
273
273
  args: {
274
274
  children: (
275
- <div className="u-text-center">
276
- <h2 className="u-mb-4 u-mt-0 u-text-white u-text-28">Basic Glass Effect</h2>
277
- <p className="u-mb-6 u-mt-0 u-text-white u-opacity-90">
275
+ <div className="u-text-center u-flex u-flex-column u-items-center u-justify-center">
276
+ <h2 className="u-mb-4 u-mt-0 u-text-white u-fs-2xl u-font-bold">Basic Glass Effect</h2>
277
+ <p className="u-mb-6 u-mt-0 u-text-white u-opacity-90 u-fs-base">
278
278
  This is a basic AtomixGlass component with default settings.
279
279
  </p>
280
280
  <Button variant="primary" glass>
@@ -284,15 +284,13 @@ export const BasicUsage: Story = {
284
284
  ),
285
285
  padding: '32px', // Increased padding for better visual appearance
286
286
  },
287
- render: args => (
288
- <div className="u-bg-gradient-to-br u-from-indigo-500 u-via-purple-500 u-to-blue-500 u-min-h-screen u-w-full u-flex u-items-center u-justify-center">
289
- <div className="u-w-full u-h-full">
290
- <div className="u-flex u-justify-center u-items-center u-h-full">
291
- <AtomixGlass {...args} />
292
- </div>
293
- </div>
294
- </div>
295
- ),
287
+ decorators: [
288
+ Story => (
289
+ <BackgroundWrapper backgroundImage={backgroundImages[2]} overlay overlayOpacity={0.2}>
290
+ <Story />
291
+ </BackgroundWrapper>
292
+ ),
293
+ ],
296
294
  parameters: {
297
295
  docs: {
298
296
  description: {
@@ -306,8 +304,8 @@ export const WithAllProps: Story = {
306
304
  args: {
307
305
  children: (
308
306
  <div className="u-text-center">
309
- <h2 className="u-mb-4 u-mt-0 u-text-white u-text-24">Fully Configured Glass</h2>
310
- <p className="u-mb-6 u-mt-0 u-text-white u-opacity-90 u-text-16">
307
+ <h2 className="u-mb-4 u-mt-0 u-text-white u-fs-2xl u-font-bold">Fully Configured Glass</h2>
308
+ <p className="u-mb-6 u-mt-0 u-text-white u-opacity-90 u-fs-base">
311
309
  This glass component uses all configurable properties.
312
310
  </p>
313
311
  <div className="u-flex u-gap-4 u-justify-center">
@@ -331,13 +329,13 @@ export const WithAllProps: Story = {
331
329
  padding: '32px', // Increased padding for better visual appearance
332
330
  onClick: mockHandlers.onClick,
333
331
  },
334
- render: args => (
335
- <BackgroundWrapper backgroundImage={backgroundImages[0]}>
336
- <div className="u-flex u-justify-center u-items-center u-h-full">
337
- <AtomixGlass {...args} />
338
- </div>
339
- </BackgroundWrapper>
340
- ),
332
+ decorators: [
333
+ Story => (
334
+ <BackgroundWrapper backgroundImage={backgroundImages[0]} overlay overlayOpacity={0.3}>
335
+ <Story />
336
+ </BackgroundWrapper>
337
+ ),
338
+ ],
341
339
  parameters: {
342
340
  docs: {
343
341
  description: {