@shohojdhara/atomix 0.2.9 → 0.3.1

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 (102) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/atomix.css +309 -105
  3. package/dist/atomix.min.css +3 -5
  4. package/dist/index.d.ts +807 -51
  5. package/dist/index.esm.js +16367 -16405
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +16277 -16330
  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/applemix.css +309 -105
  12. package/dist/themes/applemix.min.css +5 -7
  13. package/dist/themes/boomdevs.css +202 -10
  14. package/dist/themes/boomdevs.min.css +3 -5
  15. package/dist/themes/esrar.css +309 -105
  16. package/dist/themes/esrar.min.css +4 -6
  17. package/dist/themes/flashtrade.css +310 -105
  18. package/dist/themes/flashtrade.min.css +5 -7
  19. package/dist/themes/mashroom.css +300 -96
  20. package/dist/themes/mashroom.min.css +4 -6
  21. package/dist/themes/shaj-default.css +300 -96
  22. package/dist/themes/shaj-default.min.css +4 -6
  23. package/package.json +1 -1
  24. package/src/components/AtomixGlass/AtomixGlass.test.tsx +21 -32
  25. package/src/components/AtomixGlass/AtomixGlass.tsx +55 -42
  26. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +205 -57
  27. package/src/components/AtomixGlass/GlassFilter.tsx +22 -8
  28. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +221 -0
  29. package/src/components/AtomixGlass/atomixGLass.old.tsx +0 -3
  30. package/src/components/AtomixGlass/shader-utils.ts +8 -0
  31. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +319 -100
  32. package/src/components/AtomixGlass/stories/Examples.stories.tsx +601 -105
  33. package/src/components/AtomixGlass/stories/Modes.stories.tsx +30 -12
  34. package/src/components/AtomixGlass/stories/Playground.stories.tsx +173 -38
  35. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +18 -18
  36. package/src/components/AtomixGlass/stories/shared-components.tsx +27 -5
  37. package/src/components/Breadcrumb/Breadcrumb.tsx +8 -3
  38. package/src/components/Button/Button.tsx +62 -17
  39. package/src/components/Callout/Callout.test.tsx +8 -14
  40. package/src/components/Card/Card.tsx +103 -1
  41. package/src/components/Card/index.ts +3 -2
  42. package/src/components/Footer/Footer.stories.tsx +1 -2
  43. package/src/components/Footer/Footer.tsx +0 -5
  44. package/src/components/Footer/FooterLink.tsx +3 -2
  45. package/src/components/Footer/FooterSection.tsx +0 -7
  46. package/src/components/Icon/index.ts +1 -1
  47. package/src/components/Modal/Modal.stories.tsx +29 -38
  48. package/src/components/Modal/Modal.tsx +4 -4
  49. package/src/components/Navigation/Nav/NavItem.tsx +8 -3
  50. package/src/components/Navigation/SideMenu/SideMenu.tsx +49 -41
  51. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +63 -19
  52. package/src/components/Popover/Popover.tsx +1 -1
  53. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +977 -400
  54. package/src/components/VideoPlayer/VideoPlayer.tsx +1 -6
  55. package/src/lib/composables/shared-mouse-tracker.ts +133 -0
  56. package/src/lib/composables/useAtomixGlass.ts +303 -115
  57. package/src/lib/theme/ThemeManager.integration.test.ts +124 -0
  58. package/src/lib/theme/ThemeManager.stories.tsx +13 -13
  59. package/src/lib/theme/ThemeManager.test.ts +4 -0
  60. package/src/lib/theme/ThemeManager.ts +203 -59
  61. package/src/lib/theme/ThemeProvider.tsx +183 -33
  62. package/src/lib/theme/composeTheme.ts +375 -0
  63. package/src/lib/theme/createTheme.test.ts +475 -0
  64. package/src/lib/theme/createTheme.ts +510 -0
  65. package/src/lib/theme/generateCSSVariables.ts +713 -0
  66. package/src/lib/theme/index.ts +67 -0
  67. package/src/lib/theme/themeUtils.ts +333 -0
  68. package/src/lib/theme/types.ts +337 -8
  69. package/src/lib/theme/useTheme.test.tsx +2 -1
  70. package/src/lib/theme/useTheme.ts +6 -22
  71. package/src/lib/types/components.ts +152 -57
  72. package/src/styles/01-settings/_index.scss +2 -2
  73. package/src/styles/01-settings/_settings.badge.scss +2 -2
  74. package/src/styles/01-settings/_settings.border-radius.scss +1 -1
  75. package/src/styles/01-settings/{_settings.maps.scss → _settings.design-tokens.scss} +163 -49
  76. package/src/styles/01-settings/_settings.modal.scss +1 -1
  77. package/src/styles/01-settings/_settings.spacing.scss +14 -13
  78. package/src/styles/03-generic/_generic.root.scss +131 -50
  79. package/src/styles/05-objects/_objects.block.scss +1 -1
  80. package/src/styles/06-components/_components.atomix-glass.scss +20 -22
  81. package/src/styles/06-components/_components.badge.scss +2 -2
  82. package/src/styles/06-components/_components.button.scss +1 -1
  83. package/src/styles/06-components/_components.callout.scss +1 -1
  84. package/src/styles/06-components/_components.card.scss +74 -2
  85. package/src/styles/06-components/_components.chart.scss +1 -1
  86. package/src/styles/06-components/_components.dropdown.scss +6 -0
  87. package/src/styles/06-components/_components.footer.scss +1 -1
  88. package/src/styles/06-components/_components.list-group.scss +1 -1
  89. package/src/styles/06-components/_components.list.scss +1 -1
  90. package/src/styles/06-components/_components.menu.scss +1 -1
  91. package/src/styles/06-components/_components.messages.scss +1 -1
  92. package/src/styles/06-components/_components.modal.scss +7 -2
  93. package/src/styles/06-components/_components.navbar.scss +1 -1
  94. package/src/styles/06-components/_components.popover.scss +10 -0
  95. package/src/styles/06-components/_components.product-review.scss +1 -1
  96. package/src/styles/06-components/_components.progress.scss +1 -1
  97. package/src/styles/06-components/_components.rating.scss +1 -1
  98. package/src/styles/06-components/_components.spinner.scss +1 -1
  99. package/src/styles/99-utilities/_utilities.background.scss +1 -1
  100. package/src/styles/99-utilities/_utilities.border.scss +1 -1
  101. package/src/styles/99-utilities/_utilities.link.scss +1 -1
  102. package/src/styles/99-utilities/_utilities.text.scss +1 -1
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { memo } from 'react';
2
2
  import type { DisplacementMode } from '../../lib/types/components';
3
3
  import type { FragmentShaderType } from './shader-utils';
4
4
  import { getDisplacementMap } from './glass-utils';
@@ -10,18 +10,20 @@ interface GlassFilterProps {
10
10
  aberrationIntensity: number;
11
11
  mode: DisplacementMode;
12
12
  shaderMapUrl?: string;
13
+ blurAmount: number;
13
14
  }
14
15
 
15
16
  /**
16
17
  * GlassFilter - SVG filter component for glass morphism effects
17
18
  * Creates chromatic aberration and edge distortion effects using SVG filters
18
19
  */
19
- export const GlassFilter: React.FC<GlassFilterProps> = ({
20
+ const GlassFilterComponent: React.FC<GlassFilterProps> = ({
20
21
  id,
21
22
  displacementScale,
22
23
  aberrationIntensity,
23
24
  mode,
24
25
  shaderMapUrl,
26
+ blurAmount,
25
27
  }) => (
26
28
  <svg
27
29
  style={{
@@ -29,10 +31,9 @@ export const GlassFilter: React.FC<GlassFilterProps> = ({
29
31
  width: '100%',
30
32
  height: '100%',
31
33
  inset: 0,
32
- visibility: 'hidden',
33
- opacity: 0,
34
34
  }}
35
35
  aria-hidden="true"
36
+ suppressHydrationWarning
36
37
  >
37
38
  <defs>
38
39
  <radialGradient id={`${id}-edge-mask`} cx="50%" cy="50%" r="50%">
@@ -128,11 +129,11 @@ export const GlassFilter: React.FC<GlassFilterProps> = ({
128
129
  <feBlend in="GREEN_CHANNEL" in2="BLUE_CHANNEL" mode="screen" result="GB_COMBINED" />
129
130
  <feBlend in="RED_CHANNEL" in2="GB_COMBINED" mode="screen" result="RGB_COMBINED" />
130
131
 
131
- {/* <feGaussianBlur
132
+ <feGaussianBlur
132
133
  in="RGB_COMBINED"
133
- stdDeviation='0'
134
134
  result="ABERRATED_BLURRED"
135
- /> */}
135
+ stdDeviation={blurAmount * aberrationIntensity * 0.05}
136
+ />
136
137
 
137
138
  <feComposite
138
139
  in="ABERRATED_BLURRED"
@@ -152,5 +153,18 @@ export const GlassFilter: React.FC<GlassFilterProps> = ({
152
153
  </svg>
153
154
  );
154
155
 
155
- GlassFilter.displayName = 'GlassFilter';
156
+ GlassFilterComponent.displayName = 'GlassFilter';
157
+
158
+ // Memoize component to prevent unnecessary re-renders
159
+ export const GlassFilter = memo(GlassFilterComponent, (prevProps, nextProps) => {
160
+ // Custom comparison: only re-render if props actually changed
161
+ return (
162
+ prevProps.id === nextProps.id &&
163
+ prevProps.displacementScale === nextProps.displacementScale &&
164
+ prevProps.aberrationIntensity === nextProps.aberrationIntensity &&
165
+ prevProps.mode === nextProps.mode &&
166
+ prevProps.shaderMapUrl === nextProps.shaderMapUrl &&
167
+ prevProps.blurAmount === nextProps.blurAmount
168
+ );
169
+ });
156
170
 
@@ -0,0 +1,221 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`AtomixGlass Visual Regression > matches snapshot with default props 1`] = `
4
+ <div>
5
+ <div
6
+ class="c-atomix-glass"
7
+ style="--atomix-glass-radius: 16px; --atomix-glass-transform: translate(0px, 0px) scale(1); --atomix-glass-position: absolute; --atomix-glass-top: 0px; --atomix-glass-left: 0px; --atomix-glass-width: 100%; --atomix-glass-height: 100%; --atomix-glass-border-width: var(--atomix-spacing-0-5, 0.09375rem); --atomix-glass-blend-mode: overlay; --atomix-glass-border-gradient-1: linear-gradient(135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.12) 33%, rgba(255, 255, 255, 0.4) 66%, rgba(255, 255, 255, 0) 100%); --atomix-glass-border-gradient-2: linear-gradient(135deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.32) 33%, rgba(255, 255, 255, 0.6) 66%, rgba(255, 255, 255, 0) 100%); --atomix-glass-hover-1-opacity: 0; --atomix-glass-hover-1-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 50%); --atomix-glass-hover-2-opacity: 0; --atomix-glass-hover-2-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 80%); --atomix-glass-hover-3-opacity: 0; --atomix-glass-hover-3-gradient: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); --atomix-glass-base-opacity: 0; --atomix-glass-base-gradient: rgba(255, 255, 255, 0.1); --atomix-glass-overlay-opacity: 0; --atomix-glass-overlay-gradient: rgba(255, 255, 255, 0.05);"
8
+ >
9
+ <div
10
+ class="c-atomix-glass__container "
11
+ style="transform: translate(0px, 0px) scale(1); --atomix-glass-container-width: 270; --atomix-glass-container-height: 69; --atomix-glass-container-padding: 0 0; --atomix-glass-container-radius: 16px; --atomix-glass-container-backdrop: blur(1.2100000000000002px) saturate(160%) contrast(1.05) brightness(1.05); --atomix-glass-container-shadow: 0 0 20px rgba(0, 0, 0, 0.15) inset, 0 4px 8px rgba(0, 0, 0, 0.08) inset; --atomix-glass-container-shadow-opacity: 1; --atomix-glass-container-bg: none; --atomix-glass-container-text-shadow: 0px 2px 12px rgba(0, 0, 0, 0.4); --atomix-glass-container-box-shadow: 0px 12px 40px rgba(0, 0, 0, 0.25);"
12
+ >
13
+ <div
14
+ class="c-atomix-glass__inner"
15
+ style="box-shadow: var(--atomix-glass-container-box-shadow);"
16
+ >
17
+ <div
18
+ class="c-atomix-glass__filter"
19
+ >
20
+ <svg
21
+ aria-hidden="true"
22
+ style="position: absolute; width: 100%; height: 100%; inset: 0;"
23
+ >
24
+ <defs>
25
+ <radialgradient
26
+ cx="50%"
27
+ cy="50%"
28
+ id=":rd:-edge-mask"
29
+ r="50%"
30
+ >
31
+ <stop
32
+ offset="0%"
33
+ stop-color="black"
34
+ stop-opacity="0"
35
+ />
36
+ <stop
37
+ offset="75%"
38
+ stop-color="black"
39
+ stop-opacity="0"
40
+ />
41
+ <stop
42
+ offset="100%"
43
+ stop-color="white"
44
+ stop-opacity="1"
45
+ />
46
+ </radialgradient>
47
+ <filter
48
+ color-interpolation-filters="sRGB"
49
+ height="170%"
50
+ id=":rd:"
51
+ width="170%"
52
+ x="-35%"
53
+ y="-35%"
54
+ >
55
+ <feimage
56
+ height="100%"
57
+ href="data:image/jpeg;base64,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cUAUAkEkziomgGgkoxZGgxZFQFQlYnQHRdPfj/10KCSCKESCNiVkViPSLpD0h6I0Q0I0A2IoBWBIJIBKBIJoJIJ2R2J0JWBUJ0JUB0XTv479dFZDYiglYigkhEgjZFQjRFQjRFQjQigFYigHYigmgEgmglYlYnQlQlYlQHQlQnQ9P/kf1yVkNiNCNkNiVENiNiViNEViNkVCVgKCViViViSCViSCVgdCViVCViVCdgVCVCdD1D+U/XBWQ2I0I2Q2JUQ2I0JWQ0I2JUQ2JUI2JUI2J0JWJWJWA2R0BWJ0I2JUJ2BUJUJ0P//EABkQAQEBAQEBAAAAAAAAAAAAAAECABEDEP/aAAgBAQABAgB1atWrVq1atWrVq1atWrVq1atWrVq1atWrVq+OrVq1atWrVq1atWrVq1atWrVq1atWrVq1atXxVppppppdWrVq1atWrVq1NNNNNNNNNNNPVWmmmmms6tWrVq1atWpppppppppppppp6q0000uc51atWrVq1ammmmmmmmmmmmmt1Vpppc5znVq1atWrVqaaaaaaaaaaaaaeqtNLnOc51atWrVq1ammmmmmmmmmmmmnqrS5znOc6tWrVq16222mmmmmmlVppp6tKuc5znOrVq1a9TbbbbTTTTTSq000qtLnOc5zq1atWrW0222200000qqqtKqrnOc5zq1atTbbbbbbbbTTTSqqqqqq5znOc6tTTTbbbbbbbbTTTSqqqqrlVznOctNNNtttttttttNNNNKqqqrqznKqrTTTTbbbbbbbbbTTTSqqqqrqznOc5aaaabbbbbbbbbaaaaVVVVVdWc5znVq1NNttttttttttNNKqqqqudWc5znVq16tbbbbbbbbbbTTSqqqq5XVnOc6tWrVrb1tttttttttNNKqqqqrWrK5VWmmm2230bbbbbbaaaXOc5zlVa1KuVVppptttt9G22222mmlzlVznK6tWVVWmmmm2222222222mlznOc5znLWppVVWmmm22222229bTWrOc5znOcq1qaaVpWmm222222229erVqznOc5znKtatStK0rTbTTbbbberXr1as5znOc5aVpppppWlabaabbbb1ta9WrVnOc5znU0rTTTTTTTTTbTTbbbTWvVq1as5znOdTTStNNNNNNNNNtNNtttN6tWvVq1ZznOrU00rTTTTTTTTTTTTTbTWvVq1atWrOc6tTTTStNNNNNNNNNNtNNtNa9WrVq1Z1Z1NNNNNK1q1NNNNNNNNNNNtNatWrVq1atWrU00000rWrVq1atWrVq1alaaa1atWrVq1NNNammmmla1atWrVq1aterVq16tWrVnVqa1NK1qaaaVX/xAAWEAADAAAAAAAAAAAAAAAAAAAhgJD/2gAIAQEAAz8AaExf/8QAGhEBAQEBAQEBAAAAAAAAAAAAAQISEQADEP/aAAgBAgEBAgDx48ePHjx48ePHjx48ePHjx48ePHjx48ePHj86IiIiIiInjx48ePHjx48IiIiIj0oooooooooRERER73ve60UUUUUUVrWiiiiiihERERER73ve97ooooorRWiiiiihKERERER73ve973RRRRWtFFFFFFCIiIiIiPe973ve60UUVrRRRRRRQiIlCIiI973ve973pRRWiiiiiiiiiiiiiiihEe973ve973RRWtFFFFFFFFFFFFFFFFFFa13ve973WitaKKKKKKKKKKKKKKKKKK1rWtd1rutFa1oooooooooooosssooorWta1rWta1rRRRRRRRRRRZZZZZZZZZWta1rWta1rRRRRRRRRZZZZZZZZZZZZe9a1rWta1rWitaKLLLLLLLLLLLLLLLLL3rWta1rWtFbLLLLLLLLLLLLLLLLLLLL3vWta1rWita1ssssssss+hZZZZZZZZe961rWta0Vre97LLLLLLLLLLLPoWWWWWXrWta1oorWta3ssss+hZZZZ9Cyyyyyyyyiita1orWta1ve9llllllllllllllllFFa0VorWta1ve9llllllllllllllllllFFFaK1rWta1rWiyyyyyyyyyyyyiiiiiiitFFa1rWta1oosoosssssoooosoooorRRRWta1rWta0UUUUUWUUUUUUUUUUUVoooorWta1rWtaKKKKKKmiiiiiiiiiiiiiiitd73ve61oSiiipoqaKKKKKKKKKK0UUUVrve973vREREZoSihEooooorRRRRWtd73ve9EREREREoSiiiiitFllllla73ve9ERERERESiiiiiitH0PoWWWWVrXe96IiIiMoiJRRRRRRWjwlFFllllFFd6IiIiIlCUUUUUUUUUePHjx48ePCIiIiIiIiUUUUUUUUUUUePHjx48ePHjx48ePHjx48IiUUUUUUJRRRX//xAAWEQADAAAAAAAAAAAAAAAAAAABYJD/2gAIAQIBAz8AtEV7/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAECEP/aAAgBAwEBAgCtNNNNNNNNNNNNNNNNNNNNNNNNNNNNNcrTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXKrTTTTTTTU000000000000000000001FVpppppqampqaaaaaaaaaaaaaaaaaaaa5Vaaaaampqampqammmmmmmmmmmlaaaaaaiq0001NTU1NTU1NTTTTTTTTTTSqqtNNNcqtNNSyzU1LNTU1NTTTTTTTTTSqqq001ytNLLLLNTU1NTU1NTbbbTTTTTSqqq001ytNLLLLLNTU1NTU3NttttNNNNNKqq001KrSyyyyyzU1NTU3Nzc02220000qqqqrSqqyyyyyzU1NTU3Nzc3NttttNNNKqqqqqqssssss1NTU3Nzc3NzbbbbTTTSqqqqqqrLLLLLNTU1Nzc3Nzc22220000qqqqqqqqssss1NTU3Nzc3NzbbbbbTTSqqqqqqqqqqzU1NTc3Nzc3Nzbc22000qqqqqqqqqqqtTU3Nzc3Nzc3NtzbTTSqqqqrKqqqqqtNNzc23Nzc3Nzc3NTU1KqqqrKqqqqqtNNNNttzc3Nzc3NzU1NLLLLLKqqqqqqqq0022223Nzc3NzU1NSyyyyyyqqqqqqqrTTbbbbc3Nzc3NTU1LLLLLLKsqqqqqqrTTTTbbbc3Nzc1NTUsssssssqqqqqqrTTTTTbbbTc3NTU1NTUsssssqqqqqqqq0000222023NTU1NTUsssssqqqqqqqq000000003NTU1NTU1LLLLLNKrTSqqqqtNNNNNNtNNTU1NSzUssss00qq0qqqqrTTTTTTTTTU1NTUs1LLLNNNKrTTTSqqq00000000001NTU1LNTU0000qtNNNKqqqtNNNNNNNNTU1NTUs1NNNNNKss1NNNK00qtK0000001NNTU0s000000qq000001NKrStNNNNK1NNNNStNNNNNKqtNNNNNNNK0000000rU0000rTTTTTSq00000rTTTTTTTTTTTTTTTTStNNNNKr/xAAUEQEAAAAAAAAAAAAAAAAAAACg/9oACAEDAQM/AAAf/9k="
58
+ id="feimage"
59
+ preserveAspectRatio="xMidYMid slice"
60
+ result="DISPLACEMENT_MAP"
61
+ width="100%"
62
+ x="0"
63
+ y="0"
64
+ />
65
+ <fecolormatrix
66
+ in="DISPLACEMENT_MAP"
67
+ result="EDGE_INTENSITY"
68
+ type="matrix"
69
+ values="0.3 0.3 0.3 0 0
70
+ 0.3 0.3 0.3 0 0
71
+ 0.3 0.3 0.3 0 0
72
+ 0 0 0 1 0"
73
+ />
74
+ <fecomponenttransfer
75
+ in="EDGE_INTENSITY"
76
+ result="EDGE_MASK"
77
+ >
78
+ <fefunca
79
+ tableValues="0 0.125 1"
80
+ type="discrete"
81
+ />
82
+ </fecomponenttransfer>
83
+ <feoffset
84
+ dx="0"
85
+ dy="0"
86
+ in="SourceGraphic"
87
+ result="CENTER_ORIGINAL"
88
+ />
89
+ <fedisplacementmap
90
+ in="SourceGraphic"
91
+ in2="DISPLACEMENT_MAP"
92
+ result="RED_DISPLACED"
93
+ scale="-20"
94
+ xChannelSelector="R"
95
+ yChannelSelector="B"
96
+ />
97
+ <fecolormatrix
98
+ in="RED_DISPLACED"
99
+ result="RED_CHANNEL"
100
+ type="matrix"
101
+ values="1 0 0 0 0
102
+ 0 0 0 0 0
103
+ 0 0 0 0 0
104
+ 0 0 0 1 0"
105
+ />
106
+ <fedisplacementmap
107
+ in="SourceGraphic"
108
+ in2="DISPLACEMENT_MAP"
109
+ result="GREEN_DISPLACED"
110
+ scale="-21"
111
+ xChannelSelector="R"
112
+ yChannelSelector="B"
113
+ />
114
+ <fecolormatrix
115
+ in="GREEN_DISPLACED"
116
+ result="GREEN_CHANNEL"
117
+ type="matrix"
118
+ values="0 0 0 0 0
119
+ 0 1 0 0 0
120
+ 0 0 0 0 0
121
+ 0 0 0 1 0"
122
+ />
123
+ <fedisplacementmap
124
+ in="SourceGraphic"
125
+ in2="DISPLACEMENT_MAP"
126
+ result="BLUE_DISPLACED"
127
+ scale="-21.5"
128
+ xChannelSelector="R"
129
+ yChannelSelector="B"
130
+ />
131
+ <fecolormatrix
132
+ in="BLUE_DISPLACED"
133
+ result="BLUE_CHANNEL"
134
+ type="matrix"
135
+ values="0 0 0 0 0
136
+ 0 0 0 0 0
137
+ 0 0 1 0 0
138
+ 0 0 0 1 0"
139
+ />
140
+ <feblend
141
+ in="GREEN_CHANNEL"
142
+ in2="BLUE_CHANNEL"
143
+ mode="screen"
144
+ result="GB_COMBINED"
145
+ />
146
+ <feblend
147
+ in="RED_CHANNEL"
148
+ in2="GB_COMBINED"
149
+ mode="screen"
150
+ result="RGB_COMBINED"
151
+ />
152
+ <fegaussianblur
153
+ in="RGB_COMBINED"
154
+ result="ABERRATED_BLURRED"
155
+ stdDeviation="0.125"
156
+ />
157
+ <fecomposite
158
+ in="ABERRATED_BLURRED"
159
+ in2="EDGE_MASK"
160
+ operator="in"
161
+ result="EDGE_ABERRATION"
162
+ />
163
+ <fecomponenttransfer
164
+ in="EDGE_MASK"
165
+ result="INVERTED_MASK"
166
+ >
167
+ <fefunca
168
+ tableValues="1 0"
169
+ type="table"
170
+ />
171
+ </fecomponenttransfer>
172
+ <fecomposite
173
+ in="CENTER_ORIGINAL"
174
+ in2="INVERTED_MASK"
175
+ operator="in"
176
+ result="CENTER_CLEAN"
177
+ />
178
+ <fecomposite
179
+ in="EDGE_ABERRATION"
180
+ in2="CENTER_CLEAN"
181
+ operator="over"
182
+ />
183
+ </filter>
184
+ </defs>
185
+ </svg>
186
+ <div
187
+ class="c-atomix-glass__filter-overlay"
188
+ style="filter: url(#:rd:); border-radius: var(--atomix-glass-radius);"
189
+ />
190
+ <div
191
+ class="c-atomix-glass__filter-shadow"
192
+ style="box-shadow: var(--atomix-glass-container-shadow); border-radius: var(--atomix-glass-radius);"
193
+ />
194
+ </div>
195
+ <div
196
+ class="c-atomix-glass__content"
197
+ style="position: relative; text-shadow: var(--atomix-glass-container-text-shadow); z-index: 100;"
198
+ >
199
+ <div>
200
+ Default Glass
201
+ </div>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ <div
206
+ class="c-atomix-glass__background-layer c-atomix-glass__background-layer--dark c-atomix-glass__background-layer--hidden"
207
+ style="position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; border-radius: 16px; transform: translate(0px, 0px) scale(1);"
208
+ />
209
+ <div
210
+ class="c-atomix-glass__background-layer c-atomix-glass__background-layer--black c-atomix-glass__background-layer--hidden"
211
+ style="position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; border-radius: 16px; transform: translate(0px, 0px) scale(1);"
212
+ />
213
+ <span
214
+ class="c-atomix-glass__border-1"
215
+ />
216
+ <span
217
+ class="c-atomix-glass__border-2"
218
+ />
219
+ </div>
220
+ </div>
221
+ `;
@@ -920,7 +920,6 @@ import {
920
920
  ...style,
921
921
  transform: transformStyle,
922
922
  transition: effectiveReducedMotion ? 'none' : 'all ease-out 0.2s',
923
- willChange: effectiveDisableEffects ? 'auto' : 'transform',
924
923
  ...(effectiveHighContrast && {
925
924
  border: '2px solid currentColor',
926
925
  outline: '2px solid transparent',
@@ -1196,7 +1195,6 @@ import {
1196
1195
  borderRadius: `${cornerRadius}px`,
1197
1196
  transform: baseStyle.transform,
1198
1197
  transition: baseStyle.transition,
1199
- willChange: 'transform',
1200
1198
  }}
1201
1199
  />
1202
1200
  <div
@@ -1210,7 +1208,6 @@ import {
1210
1208
  transition: baseStyle.transition,
1211
1209
  mixBlendMode: 'overlay',
1212
1210
  pointerEvents: 'none',
1213
- willChange: 'transform',
1214
1211
  }}
1215
1212
  />
1216
1213
 
@@ -851,6 +851,14 @@ export class ShaderDisplacementGenerator {
851
851
 
852
852
  destroy(): void {
853
853
  try {
854
+ // Clear canvas data to free memory
855
+ if (this.context) {
856
+ this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
857
+ }
858
+ // Reduce memory footprint by setting dimensions to 0
859
+ this.canvas.width = 0;
860
+ this.canvas.height = 0;
861
+ // Remove from DOM
854
862
  this.canvas.remove();
855
863
  } catch (e) {
856
864
  // Silently handle cleanup errors