@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
package/dist/index.esm.js CHANGED
@@ -1226,29 +1226,6 @@ import { createPortal } from "react-dom";
1226
1226
  SIZES: [ "xs", "sm", "md", "lg", "xl", "none" ],
1227
1227
  DEFAULT: "md"
1228
1228
  }
1229
- }, GLASS_CONTAINER = {
1230
- CLASSES: {
1231
- BASE: "c-glass-container",
1232
- GLASS: "c-glass-container__glass",
1233
- WARP: "c-glass-container__warp",
1234
- CONTENT: "c-glass-container__content",
1235
- OVERLAY: "c-glass-container__overlay",
1236
- OVERLAY_VISIBLE: "c-glass-container__overlay--visible",
1237
- OVERLAY_HIDDEN: "c-glass-container__overlay--hidden",
1238
- OVERLAY_BLEND: "c-glass-container__overlay-blend",
1239
- BORDER: "c-glass-container__border",
1240
- BORDER_OVERLAY: "c-glass-container__border-overlay",
1241
- HOVER_EFFECT: "c-glass-container__hover-effect",
1242
- ACTIVE_EFFECT: "c-glass-container__active-effect",
1243
- INTERACTION_EFFECT: "c-glass-container__interaction-effect",
1244
- ACTIVE: "c-glass-container--active",
1245
- CLICKABLE: "c-glass-container--clickable"
1246
- },
1247
- DISPLACEMENT_MAPS: {
1248
- STANDARD: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iZ3JhZGllbnQiIGN4PSI1MCUiIGN5PSI1MCUiIHI9IjUwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzgwODA4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzgwODA4MCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZGllbnQpIi8+PC9zdmc+",
1249
- POLAR: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0icG9sYXIiIGN4PSI1MCUiIGN5PSI1MCUiIHI9IjUwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQwNDA0MCIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjODA4MDgwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNDA0MDQwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNwb2xhcikiLz48L3N2Zz4=",
1250
- PROMINENT: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0icHJvbWluZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNDA0MDQwIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNjMGMwYzAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0MDQwNDAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI3Byb21pbmVudCkiLz48L3N2Zz4="
1251
- }
1252
1229
  }, FOOTER = {
1253
1230
  SELECTORS: {
1254
1231
  FOOTER: ".c-footer",
@@ -1387,10 +1364,16 @@ import { createPortal } from "react-dom";
1387
1364
  MIN_BLUR: .1,
1388
1365
  MOUSE_INFLUENCE_DIVISOR: 100,
1389
1366
  EDGE_FADE_PIXELS: 2,
1367
+ // Note: This default must match the SCSS variable --atomix-radius-md
1368
+ // @see src/styles/01-settings/_settings.global.scss
1390
1369
  DEFAULT_CORNER_RADIUS: 16,
1391
- // Fallback value matching design system
1392
1370
  MAX_SIZE: 4096,
1393
1371
  // Maximum width/height for glass size
1372
+ // Palette for internal calculations (matches design system base colors)
1373
+ PALETTE: {
1374
+ WHITE: "255, 255, 255",
1375
+ BLACK: "0, 0, 0"
1376
+ },
1394
1377
  // Gradient calculation constants
1395
1378
  GRADIENT: {
1396
1379
  BASE_ANGLE: 135,
@@ -1608,10 +1591,10 @@ const {CONSTANTS: CONSTANTS$1} = ATOMIX_GLASS, calculateDistance = (pos1, pos2)
1608
1591
  y: 0
1609
1592
  }, calculateMouseInfluence = mouseOffset => {
1610
1593
  if (!mouseOffset || "number" != typeof mouseOffset.x || "number" != typeof mouseOffset.y) return 0;
1611
- // More responsive calculation for overlight effects
1594
+ // Bounded calculation keeps the glass effect subtle and stable
1612
1595
  const influence = Math.sqrt(mouseOffset.x * mouseOffset.x + mouseOffset.y * mouseOffset.y) / CONSTANTS$1.MOUSE_INFLUENCE_DIVISOR;
1613
- return Math.min(1.5, influence);
1614
- // Cap influence for better control
1596
+ return Math.min(.8, influence);
1597
+ // Tighter cap to prevent blur/filter blow-out
1615
1598
  }, clampBlur = value => "number" != typeof value || isNaN(value) ? CONSTANTS$1.MIN_BLUR : Math.max(CONSTANTS$1.MIN_BLUR, Math.min(50, value)), validateGlassSize = size => size && "number" == typeof size.width && "number" == typeof size.height && size.width > 0 && size.height > 0 && size.width <= CONSTANTS$1.MAX_SIZE && size.height <= CONSTANTS$1.MAX_SIZE, parseBorderRadiusValue = value => {
1616
1599
  if ("number" == typeof value) return Math.max(0, value);
1617
1600
  if ("string" != typeof value || !value.trim()) return CONSTANTS$1.DEFAULT_CORNER_RADIUS;
@@ -1842,7 +1825,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
1842
1825
  }, globalMousePosition: globalMousePosition = {
1843
1826
  x: 0,
1844
1827
  y: 0
1845
- }, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseDown: onMouseDown, onMouseUp: onMouseUp, active: active = !1, isHovered: isHovered = !1, isActive: isActive = !1, overLight: overLight = !1, cornerRadius: cornerRadius = 0, padding: padding = "0 0", glassSize: glassSize = {
1828
+ }, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseDown: onMouseDown, onMouseUp: onMouseUp, isHovered: isHovered = !1, isActive: isActive = !1, overLight: overLight = !1, overLightConfig: overLightConfig = {}, cornerRadius: cornerRadius = 0, padding: padding = "0 0", glassSize: glassSize = {
1846
1829
  width: 0,
1847
1830
  height: 0
1848
1831
  }, onClick: onClick, mode: mode = "standard", effectiveDisableEffects: effectiveDisableEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", enableLiquidBlur: enableLiquidBlur = !1, elasticity: elasticity = 0, contentRef: contentRef}, ref) => {
@@ -1955,28 +1938,29 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
1955
1938
  flowBlur: 1.2 * blurAmount
1956
1939
  };
1957
1940
  // Enhanced validation for liquid blur
1958
- if (!enableLiquidBlur || !rectCache || !globalMousePosition || "number" != typeof globalMousePosition.x || "number" != typeof globalMousePosition.y || isNaN(globalMousePosition.x) || isNaN(globalMousePosition.y)) return defaultBlur;
1941
+ if (!enableLiquidBlur || !rectCache || !mouseOffset || "number" != typeof mouseOffset.x || "number" != typeof mouseOffset.y || isNaN(mouseOffset.x) || isNaN(mouseOffset.y)) return defaultBlur;
1959
1942
  try {
1960
- // Cache center and distance calculations
1961
- const center = calculateElementCenter(rectCache), distance = calculateDistance(globalMousePosition, center), maxDistance = Math.sqrt(rectCache.width * rectCache.width + rectCache.height * rectCache.height) / 2, normalizedDistance = Math.min(distance / maxDistance, 1), mouseInfluence = calculateMouseInfluence(mouseOffset), baseBlur = blurAmount + mouseInfluence * blurAmount * .4, edgeBlur = baseBlur * (.8 + .6 * (1.5 * normalizedDistance + .3 * mouseInfluence)), centerBlur = baseBlur * (.3 + .4 * (.3 * (1 - normalizedDistance) + .2 * mouseInfluence)), deltaX = globalMousePosition.x - center.x, deltaY = globalMousePosition.y - center.y, flowDirection = Math.atan2(deltaY, deltaX), flowBlur = baseBlur * (.4 + .6 * (.5 * Math.sin(flowDirection + mouseInfluence * Math.PI) + .5)), stateMultiplier = (isHovered ? 1.2 : 1) * (isActive ? 1.4 : 1);
1943
+ const mouseInfluence = calculateMouseInfluence(mouseOffset), maxBlur = 2 * blurAmount, baseBlur = Math.min(maxBlur, blurAmount + mouseInfluence * blurAmount * .15), edgeIntensity = .15 * mouseInfluence, edgeBlur = Math.min(maxBlur, baseBlur * (.8 + .4 * edgeIntensity)), centerIntensity = .1 * mouseInfluence, centerBlur = Math.min(maxBlur, baseBlur * (.3 + .3 * centerIntensity)), flowBlur = Math.min(maxBlur, 1.2 * baseBlur);
1944
+ // NOTE: hover/active multipliers intentionally omitted here
1945
+ // they belong on opacity layers, not the blur filter itself.
1962
1946
  return {
1963
- baseBlur: clampBlur(baseBlur * stateMultiplier),
1964
- edgeBlur: clampBlur(edgeBlur * stateMultiplier),
1965
- centerBlur: clampBlur(centerBlur * stateMultiplier),
1966
- flowBlur: clampBlur(flowBlur * stateMultiplier)
1947
+ baseBlur: clampBlur(baseBlur),
1948
+ edgeBlur: clampBlur(edgeBlur),
1949
+ centerBlur: clampBlur(centerBlur),
1950
+ flowBlur: clampBlur(flowBlur)
1967
1951
  };
1968
1952
  } catch (error) {
1969
1953
  return console.warn("AtomixGlassContainer: Error calculating liquid blur", error),
1970
1954
  defaultBlur;
1971
1955
  }
1972
- }), [ enableLiquidBlur, blurAmount, globalMousePosition, mouseOffset, isHovered, isActive, rectCache, style, glassSize ]), backdropStyle = useMemo((() => {
1956
+ }), [ enableLiquidBlur, blurAmount, mouseOffset, rectCache ]), backdropStyle = useMemo((() => {
1973
1957
  try {
1974
1958
  const dynamicSaturation = saturation + 20 * (liquidBlur.baseBlur || 0), validatedBaseBlur = "number" != typeof liquidBlur.baseBlur || isNaN(liquidBlur.baseBlur) ? 0 : liquidBlur.baseBlur, validatedEdgeBlur = "number" != typeof liquidBlur.edgeBlur || isNaN(liquidBlur.edgeBlur) ? 0 : liquidBlur.edgeBlur, validatedCenterBlur = "number" != typeof liquidBlur.centerBlur || isNaN(liquidBlur.centerBlur) ? 0 : liquidBlur.centerBlur, validatedFlowBlur = "number" != typeof liquidBlur.flowBlur || isNaN(liquidBlur.flowBlur) ? 0 : liquidBlur.flowBlur, area = rectCache ? rectCache.width * rectCache.height : 0;
1975
1959
  // Validate blur values before using them
1976
1960
  return !enableLiquidBlur || effectiveReducedMotion || effectiveDisableEffects || area > 18e4 ? {
1977
- backdropFilter: `blur(${clampBlur(Math.max(validatedBaseBlur, .8 * validatedEdgeBlur, 1.1 * validatedCenterBlur, .9 * validatedFlowBlur))}px) saturate(${Math.min(dynamicSaturation, 200)}%) contrast(1.05) brightness(1.05)`
1961
+ backdropFilter: `blur(${clampBlur(Math.max(validatedBaseBlur, .8 * validatedEdgeBlur, 1.1 * validatedCenterBlur, .9 * validatedFlowBlur))}px) saturate(${Math.min(dynamicSaturation, 200)}%) contrast(${overLightConfig?.contrast || 1.05}) brightness(${overLightConfig?.brightness || 1.05})`
1978
1962
  } : {
1979
- backdropFilter: `${[ `blur(${validatedBaseBlur}px)`, `blur(${validatedEdgeBlur}px)`, `blur(${validatedCenterBlur}px)`, `blur(${validatedFlowBlur}px)` ].join(" ")} saturate(${Math.min(dynamicSaturation, 200)}%) contrast(1.05) brightness(1.05)`
1963
+ backdropFilter: `blur(${clampBlur(.4 * validatedBaseBlur + .25 * validatedEdgeBlur + .15 * validatedCenterBlur + .2 * validatedFlowBlur)}px) saturate(${Math.min(dynamicSaturation, 200)}%) contrast(${overLightConfig?.contrast || 1.05}) brightness(${overLightConfig?.brightness || 1.05})`
1980
1964
  };
1981
1965
  // Single-pass fallback: stronger radius to match perceived blur of multi-pass
1982
1966
  } catch (error) {
@@ -1995,7 +1979,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
1995
1979
  "--atomix-glass-container-padding": padding || "0 0",
1996
1980
  "--atomix-glass-container-radius": `${"number" != typeof cornerRadius || isNaN(cornerRadius) ? 0 : cornerRadius}px`,
1997
1981
  "--atomix-glass-container-backdrop": backdropStyle?.backdropFilter || "none",
1998
- "--atomix-glass-container-shadow": overLight ? [ `inset 0 1px 0 rgba(255, 255, 255, ${.4 + .002 * mx})`, `inset 0 -1px 0 rgba(0, 0, 0, ${.2 + .001 * Math.abs(my)})`, `inset 0 0 20px rgba(0, 0, 0, ${.08 + .001 * Math.abs(mx + my)})`, `0 2px 12px rgba(0, 0, 0, ${.12 + .002 * Math.abs(my)})` ].join(", ") : "0 0 20px rgba(0, 0, 0, 0.15) inset, 0 4px 8px rgba(0, 0, 0, 0.08) inset",
1982
+ "--atomix-glass-container-shadow": overLight ? [ `inset 0 1px 0 rgba(255, 255, 255, ${(.4 + .002 * mx) * (overLightConfig?.shadowIntensity || 1)})`, `inset 0 -1px 0 rgba(0, 0, 0, ${(.2 + .001 * Math.abs(my)) * (overLightConfig?.shadowIntensity || 1)})`, `inset 0 0 20px rgba(0, 0, 0, ${(.08 + .001 * Math.abs(mx + my)) * (overLightConfig?.shadowIntensity || 1)})`, `0 2px 12px rgba(0, 0, 0, ${(.12 + .002 * Math.abs(my)) * (overLightConfig?.shadowIntensity || 1)})` ].join(", ") : "0 0 20px rgba(0, 0, 0, 0.15) inset, 0 4px 8px rgba(0, 0, 0, 0.08) inset",
1999
1983
  "--atomix-glass-container-shadow-opacity": effectiveDisableEffects ? 0 : 1,
2000
1984
  // Background and shadow values use design token-aligned RGB values
2001
1985
  "--atomix-glass-container-bg": overLight ? `linear-gradient(${180 + .5 * mx}deg, rgba(255, 255, 255, 0.1) 0%, transparent 20%, transparent 80%, rgba(0, 0, 0, 0.05) 100%)` : "none",
@@ -2014,10 +1998,18 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
2014
1998
  "--atomix-glass-container-text-shadow": "none"
2015
1999
  };
2016
2000
  }
2017
- }), [ glassSize, padding, cornerRadius, backdropStyle, mouseOffset, overLight, effectiveDisableEffects ]);
2001
+ }), [ glassSize, padding, cornerRadius, backdropStyle, mouseOffset, overLight, effectiveDisableEffects ]), setForceNoTransition = el => {
2002
+ el && (el.style.setProperty("transition-duration", "0s", "important"), el.style.setProperty("animation-duration", "0s", "important"),
2003
+ el.style.setProperty("transition-delay", "0s", "important"));
2004
+ };
2018
2005
  return jsx("div", {
2019
- ref: ref,
2020
- className: `${ATOMIX_GLASS.CONTAINER_CLASS} ${className} ${active ? ATOMIX_GLASS.CLASSES.ACTIVE : ""} ${overLight ? ATOMIX_GLASS.CLASSES.OVER_LIGHT : ""}`,
2006
+ ref: el => {
2007
+ // Apply force no-transition
2008
+ setForceNoTransition(el),
2009
+ // Handle forwarded ref
2010
+ "function" == typeof ref ? ref(el) : ref && (ref.current = el);
2011
+ },
2012
+ className: `${ATOMIX_GLASS.CONTAINER_CLASS} ${className} ${isActive ? ATOMIX_GLASS.CLASSES.ACTIVE : ""} ${overLight ? ATOMIX_GLASS.CLASSES.OVER_LIGHT : ""}`,
2021
2013
  style: {
2022
2014
  ...style,
2023
2015
  ...containerVars
@@ -2035,6 +2027,11 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
2035
2027
  onMouseUp: onMouseUp,
2036
2028
  children: [ jsxs("div", {
2037
2029
  className: ATOMIX_GLASS.FILTER_CLASS,
2030
+ style: {
2031
+ zIndex: 1,
2032
+ position: "absolute",
2033
+ inset: 0
2034
+ },
2038
2035
  children: [ jsx(GlassFilter, {
2039
2036
  blurAmount: blurAmount,
2040
2037
  mode: mode,
@@ -2043,6 +2040,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
2043
2040
  aberrationIntensity: "number" != typeof aberrationIntensity || isNaN(aberrationIntensity) ? 0 : aberrationIntensity,
2044
2041
  shaderMapUrl: shaderMapUrl
2045
2042
  }), jsx("div", {
2043
+ ref: setForceNoTransition,
2046
2044
  className: ATOMIX_GLASS.FILTER_OVERLAY_CLASS,
2047
2045
  style: {
2048
2046
  filter: `url(#${filterId})`,
@@ -2064,9 +2062,8 @@ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({childre
2064
2062
  style: {
2065
2063
  position: "relative",
2066
2064
  textShadow: "var(--atomix-glass-container-text-shadow)",
2067
- ...elasticity > 0 ? {
2068
- zIndex: 100
2069
- } : {}
2065
+ // Ensure content is always above the filter layer (zIndex 1)
2066
+ zIndex: elasticity > 0 ? 100 : 2
2070
2067
  },
2071
2068
  children: children
2072
2069
  }) ]
@@ -2184,12 +2181,12 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2184
2181
  }), [internalMouseOffset, setInternalMouseOffset] = useState({
2185
2182
  x: 0,
2186
2183
  y: 0
2187
- }), [dynamicCornerRadius, setDynamicCornerRadius] = useState(CONSTANTS.DEFAULT_CORNER_RADIUS), [userPrefersReducedMotion, setUserPrefersReducedMotion] = useState(!1), [userPrefersHighContrast, setUserPrefersHighContrast] = useState(!1), [detectedOverLight, setDetectedOverLight] = useState(!1), effectiveCornerRadius = useMemo((() => void 0 !== cornerRadius ? Math.max(0, cornerRadius) : Math.max(0, dynamicCornerRadius)), [ cornerRadius, dynamicCornerRadius, debugCornerRadius ]), effectiveReducedMotion = useMemo((() => reducedMotion || userPrefersReducedMotion), [ reducedMotion, userPrefersReducedMotion ]), effectiveHighContrast = useMemo((() => highContrast || userPrefersHighContrast), [ highContrast, userPrefersHighContrast ]), effectiveDisableEffects = useMemo((() => disableEffects || effectiveReducedMotion), [ disableEffects, effectiveReducedMotion ]), globalMousePosition = useMemo((() => externalGlobalMousePosition || internalGlobalMousePosition), [ externalGlobalMousePosition, internalGlobalMousePosition ]), mouseOffset = useMemo((() => externalMouseOffset || internalMouseOffset), [ externalMouseOffset, internalMouseOffset ]);
2184
+ }), [dynamicCornerRadius, setDynamicCornerRadius] = useState(CONSTANTS.DEFAULT_CORNER_RADIUS), [userPrefersReducedMotion, setUserPrefersReducedMotion] = useState(!1), [userPrefersHighContrast, setUserPrefersHighContrast] = useState(!1), [detectedOverLight, setDetectedOverLight] = useState(!1), effectiveCornerRadius = useMemo((() => void 0 !== cornerRadius ? Math.max(0, cornerRadius) : Math.max(0, dynamicCornerRadius)), [ cornerRadius, dynamicCornerRadius ]), effectiveReducedMotion = useMemo((() => reducedMotion || userPrefersReducedMotion), [ reducedMotion, userPrefersReducedMotion ]), effectiveHighContrast = useMemo((() => highContrast || userPrefersHighContrast), [ highContrast, userPrefersHighContrast ]), effectiveDisableEffects = useMemo((() => disableEffects || effectiveReducedMotion), [ disableEffects, effectiveReducedMotion ]), globalMousePosition = useMemo((() => externalGlobalMousePosition || internalGlobalMousePosition), [ externalGlobalMousePosition, internalGlobalMousePosition ]), mouseOffset = useMemo((() => externalMouseOffset || internalMouseOffset), [ externalMouseOffset, internalMouseOffset ]);
2188
2185
  // Extract border-radius from children
2189
2186
  useEffect((() => {
2190
2187
  const extractRadius = () => {
2191
2188
  try {
2192
- let extractedRadius = null, extractionSource = "default";
2189
+ let extractedRadius = null;
2193
2190
  if (contentRef.current) {
2194
2191
  const firstChild = contentRef.current.firstElementChild;
2195
2192
  if (firstChild) {
@@ -2206,15 +2203,14 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2206
2203
  return null;
2207
2204
  }
2208
2205
  })(firstChild);
2209
- null !== domRadius && domRadius > 0 && (extractedRadius = domRadius, extractionSource = "DOM element");
2206
+ null !== domRadius && domRadius > 0 && (extractedRadius = domRadius);
2210
2207
  }
2211
2208
  }
2212
2209
  if (null === extractedRadius) {
2213
2210
  const childRadius = extractBorderRadiusFromChildren(children);
2214
- childRadius > 0 && childRadius !== CONSTANTS.DEFAULT_CORNER_RADIUS && (extractedRadius = childRadius,
2215
- extractionSource = "React children");
2211
+ childRadius > 0 && childRadius !== CONSTANTS.DEFAULT_CORNER_RADIUS && (extractedRadius = childRadius);
2216
2212
  }
2217
- null !== extractedRadius && extractedRadius > 0 ? setDynamicCornerRadius(extractedRadius) : "undefined" == typeof process || process.env;
2213
+ null !== extractedRadius && extractedRadius > 0 && setDynamicCornerRadius(extractedRadius);
2218
2214
  } catch (error) {
2219
2215
  "undefined" != typeof process && "production" === process.env?.NODE_ENV || !debugCornerRadius || console.error("[AtomixGlass] Error extracting corner radius:", error);
2220
2216
  }
@@ -2343,7 +2339,6 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2343
2339
  }
2344
2340
  if ("boolean" == typeof overLight &&
2345
2341
  // For boolean values, disable auto-detection
2346
- // Cache is automatically managed by WeakMap (no manual clearing needed)
2347
2342
  setDetectedOverLight(!1), "function" == typeof window.matchMedia) try {
2348
2343
  const mediaQueryReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)"), mediaQueryHighContrast = window.matchMedia("(prefers-contrast: high)");
2349
2344
  setUserPrefersReducedMotion(mediaQueryReducedMotion.matches), setUserPrefersHighContrast(mediaQueryHighContrast.matches);
@@ -2413,6 +2408,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2413
2408
  }), [ handleGlobalMousePosition, mouseContainer, glassRef, externalGlobalMousePosition, externalMouseOffset, effectiveDisableEffects ]);
2414
2409
  // Transform calculations
2415
2410
  const calculateDirectionalScale = useCallback((() => {
2411
+ if (!0 === overLight || "auto" === overLight && detectedOverLight || "object" == typeof overLight && null !== overLight && detectedOverLight) return "scale(1)";
2416
2412
  if (!(globalMousePosition.x && globalMousePosition.y && glassRef.current && validateGlassSize(glassSize))) return "scale(1)";
2417
2413
  const rect = glassRef.current.getBoundingClientRect(), center = calculateElementCenter(rect), deltaX = globalMousePosition.x - center.x, deltaY = globalMousePosition.y - center.y, edgeDistanceX = Math.max(0, Math.abs(deltaX) - glassSize.width / 2), edgeDistanceY = Math.max(0, Math.abs(deltaY) - glassSize.height / 2), edgeDistance = calculateDistance({
2418
2414
  x: edgeDistanceX,
@@ -2426,7 +2422,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2426
2422
  if (0 === centerDistance) return "scale(1)";
2427
2423
  const normalizedX = deltaX / centerDistance, normalizedY = deltaY / centerDistance, stretchIntensity = Math.min(centerDistance / 300, 1) * elasticity * fadeInFactor, scaleX = 1 + Math.abs(normalizedX) * stretchIntensity * .3 - Math.abs(normalizedY) * stretchIntensity * .15, scaleY = 1 + Math.abs(normalizedY) * stretchIntensity * .3 - Math.abs(normalizedX) * stretchIntensity * .15;
2428
2424
  return `scaleX(${Math.max(.8, scaleX)}) scaleY(${Math.max(.8, scaleY)})`;
2429
- }), [ globalMousePosition, elasticity, glassSize, glassRef ]), calculateFadeInFactor = useCallback((() => {
2425
+ }), [ globalMousePosition, elasticity, glassSize, glassRef, overLight, detectedOverLight ]), calculateFadeInFactor = useCallback((() => {
2430
2426
  if (!(globalMousePosition.x && globalMousePosition.y && glassRef.current && validateGlassSize(glassSize))) return 0;
2431
2427
  const rect = glassRef.current.getBoundingClientRect(), center = calculateElementCenter(rect), edgeDistanceX = Math.max(0, Math.abs(globalMousePosition.x - center.x) - glassSize.width / 2), edgeDistanceY = Math.max(0, Math.abs(globalMousePosition.y - center.y) - glassSize.height / 2), edgeDistance = calculateDistance({
2432
2428
  x: edgeDistanceX,
@@ -2511,20 +2507,21 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2511
2507
  isOverLight: isOverLight,
2512
2508
  threshold: .7,
2513
2509
  opacity: isOverLight ? Math.min(.6, Math.max(.2, .5 * hoverIntensity * activeIntensity)) : 0,
2514
- contrast: Math.min(1.8, Math.max(1, 1.4 + .3 * mouseInfluence)),
2515
- brightness: Math.min(1.2, Math.max(.7, .85 + .15 * mouseInfluence)),
2516
- saturationBoost: Math.min(2, Math.max(1, 1.3 + .4 * mouseInfluence)),
2517
- shadowIntensity: Math.min(1.5, Math.max(.5, .9 + .5 * mouseInfluence)),
2518
- borderOpacity: Math.min(1, Math.max(.3, .7 + .3 * mouseInfluence))
2510
+ contrast: Math.min(1.6, Math.max(1, 1.4 + .1 * mouseInfluence)),
2511
+ brightness: Math.min(1.1, Math.max(.8, .9 + .05 * mouseInfluence)),
2512
+ saturationBoost: 1.3,
2513
+ // Fixed value dynamic saturation amplifies perceived displacement
2514
+ shadowIntensity: Math.min(1.2, Math.max(.5, .9 + .2 * mouseInfluence)),
2515
+ borderOpacity: Math.min(1, Math.max(.3, .7 + .1 * mouseInfluence))
2519
2516
  };
2520
2517
  if ("object" == typeof overLight && null !== overLight) {
2521
2518
  const objConfig = overLight, validatedThreshold = validateConfigValue(objConfig.threshold, .1, 1, baseConfig.threshold), validatedOpacity = validateConfigValue(objConfig.opacity, .1, 1, baseConfig.opacity), validatedContrast = validateConfigValue(objConfig.contrast, .5, 2.5, baseConfig.contrast), validatedBrightness = validateConfigValue(objConfig.brightness, .5, 2, baseConfig.brightness), validatedSaturationBoost = validateConfigValue(objConfig.saturationBoost, .5, 3, baseConfig.saturationBoost), finalConfig = {
2522
2519
  ...baseConfig,
2523
2520
  threshold: validatedThreshold,
2524
2521
  opacity: validatedOpacity * hoverIntensity * activeIntensity,
2525
- contrast: validatedContrast + .3 * mouseInfluence,
2526
- brightness: validatedBrightness + .15 * mouseInfluence,
2527
- saturationBoost: validatedSaturationBoost + .4 * mouseInfluence
2522
+ contrast: Math.min(1.6, validatedContrast + .1 * mouseInfluence),
2523
+ brightness: Math.min(1.1, validatedBrightness + .05 * mouseInfluence),
2524
+ saturationBoost: validatedSaturationBoost
2528
2525
  };
2529
2526
  // Validate and apply object config values with proper clamping
2530
2527
  return "undefined" == typeof process || process.env, finalConfig;
@@ -2658,19 +2655,19 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2658
2655
  debugOverLight: debugOverLight,
2659
2656
  enablePerformanceMonitoring: enablePerformanceMonitoring,
2660
2657
  children: children
2661
- }), isOverLight = overLightConfig.isOverLight, shouldRenderOverLightLayers = enableOverLightLayers && isOverLight, baseStyle = {
2658
+ }), isOverLight = useMemo((() => overLightConfig?.isOverLight), [ overLight ]), shouldRenderOverLightLayers = enableOverLightLayers && isOverLight, baseStyle = {
2662
2659
  ...style,
2663
- ...0 !== elasticity && !effectiveDisableEffects && {
2660
+ ...!effectiveDisableEffects && {
2664
2661
  transform: transformStyle
2665
2662
  }
2666
- }, componentClassName = [ ATOMIX_GLASS.BASE_CLASS, effectiveReducedMotion && `${ATOMIX_GLASS.BASE_CLASS}--reduced-motion`, effectiveHighContrast && `${ATOMIX_GLASS.BASE_CLASS}--high-contrast`, effectiveDisableEffects && `${ATOMIX_GLASS.BASE_CLASS}--disabled-effects`, className ].filter(Boolean).join(" "), positionStyles = {
2663
+ }, componentClassName = [ ATOMIX_GLASS.BASE_CLASS, effectiveReducedMotion && `${ATOMIX_GLASS.BASE_CLASS}--reduced-motion`, effectiveHighContrast && `${ATOMIX_GLASS.BASE_CLASS}--high-contrast`, effectiveDisableEffects && `${ATOMIX_GLASS.BASE_CLASS}--disabled-effects`, className ].filter(Boolean).join(" "), positionStyles = useMemo((() => ({
2667
2664
  position: style.position || "absolute",
2668
2665
  top: style.top || 0,
2669
2666
  left: style.left || 0
2670
- }, adjustedSize = {
2667
+ })), [ style.position, style.top, style.left ]), adjustedSize = useMemo((() => ({
2671
2668
  width: "fixed" !== style.position ? "100%" : style.width ? style.width : Math.max(glassSize.width, 0),
2672
2669
  height: "fixed" !== style.position ? "100%" : style.height ? style.height : Math.max(glassSize.height, 0)
2673
- }, gradientValues = useMemo((() => {
2670
+ })), [ style.position, style.width, style.height, glassSize.width, glassSize.height ]), gradientValues = useMemo((() => {
2674
2671
  const mx = mouseOffset.x, my = mouseOffset.y, absMx = Math.abs(mx), absMy = Math.abs(my), GRADIENT = ATOMIX_GLASS.CONSTANTS.GRADIENT;
2675
2672
  return {
2676
2673
  borderGradientAngle: GRADIENT.BASE_ANGLE + mx * GRADIENT.ANGLE_MULTIPLIER,
@@ -2710,7 +2707,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2710
2707
  over: isOverLight ? 1.1 * (overLightOpacity || .4) : 0
2711
2708
  };
2712
2709
  }), [ isHovered, isActive, isOverLight, overLightConfig.opacity ]), glassVars = useMemo((() => {
2713
- const whiteColor = "255, 255, 255", {borderGradientAngle: borderGradientAngle, borderStop1: borderStop1, borderStop2: borderStop2, borderOpacities: borderOpacities, hoverPositions: hoverPositions, basePosition: basePosition, mx: mx, my: my, absMx: absMx, absMy: absMy} = gradientValues;
2710
+ const whiteColor = ATOMIX_GLASS.CONSTANTS.PALETTE.WHITE, blackColor = ATOMIX_GLASS.CONSTANTS.PALETTE.BLACK, {borderGradientAngle: borderGradientAngle, borderStop1: borderStop1, borderStop2: borderStop2, borderOpacities: borderOpacities, hoverPositions: hoverPositions, basePosition: basePosition, mx: mx, my: my, absMx: absMx, absMy: absMy} = gradientValues, configBorderOpacity = overLightConfig?.borderOpacity ?? 1;
2714
2711
  return {
2715
2712
  "--atomix-glass-radius": `${effectiveCornerRadius}px`,
2716
2713
  "--atomix-glass-transform": transformStyle || "none",
@@ -2721,20 +2718,20 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2721
2718
  "--atomix-glass-height": "fixed" !== style.position ? adjustedSize.height : `${adjustedSize.height}px`,
2722
2719
  "--atomix-glass-border-width": "var(--atomix-spacing-0-5, 0.09375rem)",
2723
2720
  "--atomix-glass-blend-mode": isOverLight ? "multiply" : "overlay",
2724
- "--atomix-glass-border-gradient-1": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${borderOpacities[0]}) ${borderStop1}%, rgba(${whiteColor}, ${borderOpacities[1]}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2725
- "--atomix-glass-border-gradient-2": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${borderOpacities[2]}) ${borderStop1}%, rgba(${whiteColor}, ${borderOpacities[3]}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2721
+ "--atomix-glass-border-gradient-1": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${(borderOpacities[0] ?? 1) * configBorderOpacity}) ${borderStop1}%, rgba(${whiteColor}, ${(borderOpacities[1] ?? 1) * configBorderOpacity}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2722
+ "--atomix-glass-border-gradient-2": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${(borderOpacities[2] ?? 1) * configBorderOpacity}) ${borderStop1}%, rgba(${whiteColor}, ${(borderOpacities[3] ?? 1) * configBorderOpacity}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2726
2723
  "--atomix-glass-hover-1-opacity": opacityValues.hover1,
2727
- "--atomix-glass-hover-1-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover1.x}% ${hoverPositions.hover1.y}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_START}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_STOP}%, rgba(0, 0, 0, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover1.x}% ${hoverPositions.hover1.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_STOP}%)`,
2724
+ "--atomix-glass-hover-1-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover1.x}% ${hoverPositions.hover1.y}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_START}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_STOP}%, rgba(${blackColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover1.x}% ${hoverPositions.hover1.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_STOP}%)`,
2728
2725
  "--atomix-glass-hover-2-opacity": opacityValues.hover2,
2729
- "--atomix-glass-hover-2-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover2.x}% ${hoverPositions.hover2.y}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_START}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_STOP}%, rgba(0, 0, 0, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover2.x}% ${hoverPositions.hover2.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_STOP}%)`,
2726
+ "--atomix-glass-hover-2-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover2.x}% ${hoverPositions.hover2.y}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_START}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_STOP}%, rgba(${blackColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover2.x}% ${hoverPositions.hover2.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_STOP}%)`,
2730
2727
  "--atomix-glass-hover-3-opacity": opacityValues.hover3,
2731
- "--atomix-glass-hover-3-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover3.x}% ${hoverPositions.hover3.y}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_START}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_STOP}%, rgba(0, 0, 0, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover3.x}% ${hoverPositions.hover3.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_STOP}%)`,
2728
+ "--atomix-glass-hover-3-gradient": isOverLight ? `radial-gradient(circle at ${hoverPositions.hover3.x}% ${hoverPositions.hover3.y}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_START}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_STOP}%, rgba(${blackColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.BLACK_END}%)` : `radial-gradient(circle at ${hoverPositions.hover3.x}% ${hoverPositions.hover3.y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_STOP}%)`,
2732
2729
  "--atomix-glass-base-opacity": opacityValues.base,
2733
- "--atomix-glass-base-gradient": isOverLight ? `linear-gradient(${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.ANGLE}deg, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_BASE + mx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_BASE + my * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_MULTIPLIER}) ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_STOP}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_BASE + absMx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.WHITE_OPACITY})`,
2730
+ "--atomix-glass-base-gradient": isOverLight ? `linear-gradient(${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.ANGLE}deg, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_BASE + mx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_BASE + my * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_MULTIPLIER}) ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_STOP}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_BASE + absMx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.WHITE_OPACITY})`,
2734
2731
  "--atomix-glass-overlay-opacity": opacityValues.over,
2735
- "--atomix-glass-overlay-gradient": isOverLight ? `radial-gradient(circle at ${basePosition.x}% ${basePosition.y}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_BASE + absMx * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_MID}) ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_MID_STOP}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_BASE + absMy * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`
2732
+ "--atomix-glass-overlay-gradient": isOverLight ? `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%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`
2736
2733
  };
2737
- }), [ gradientValues, opacityValues, effectiveCornerRadius, transformStyle, positionStyles, adjustedSize, style.position, isOverLight ]), renderBackgroundLayer = layerType => jsx("div", {
2734
+ }), [ gradientValues, opacityValues, effectiveCornerRadius, transformStyle, positionStyles, adjustedSize, style.position, isOverLight, overLightConfig.borderOpacity ]), renderBackgroundLayer = layerType => jsx("div", {
2738
2735
  className: [ ATOMIX_GLASS.BACKGROUND_LAYER_CLASS, "dark" === layerType ? ATOMIX_GLASS.BACKGROUND_LAYER_DARK_CLASS : ATOMIX_GLASS.BACKGROUND_LAYER_BLACK_CLASS, isOverLight ? ATOMIX_GLASS.BACKGROUND_LAYER_OVER_LIGHT_CLASS : ATOMIX_GLASS.BACKGROUND_LAYER_HIDDEN_CLASS ].filter(Boolean).join(" "),
2739
2736
  style: {
2740
2737
  ...positionStyles,
@@ -2760,9 +2757,9 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2760
2757
  className: className,
2761
2758
  style: baseStyle,
2762
2759
  cornerRadius: effectiveCornerRadius,
2763
- displacementScale: effectiveDisableEffects ? 0 : "shader" === mode ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_DISPLACEMENT : overLightConfig.isOverLight ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.OVER_LIGHT_DISPLACEMENT : displacementScale,
2760
+ displacementScale: effectiveDisableEffects ? 0 : "shader" === mode ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_DISPLACEMENT : isOverLight ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.OVER_LIGHT_DISPLACEMENT : displacementScale,
2764
2761
  blurAmount: effectiveDisableEffects ? 0 : blurAmount,
2765
- saturation: effectiveHighContrast ? ATOMIX_GLASS.CONSTANTS.SATURATION.HIGH_CONTRAST : overLightConfig.isOverLight ? saturation * overLightConfig.saturationBoost : saturation,
2762
+ saturation: effectiveHighContrast ? ATOMIX_GLASS.CONSTANTS.SATURATION.HIGH_CONTRAST : isOverLight ? saturation * overLightConfig.saturationBoost : saturation,
2766
2763
  aberrationIntensity: effectiveDisableEffects ? 0 : "shader" === mode ? aberrationIntensity * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_ABERRATION : aberrationIntensity,
2767
2764
  glassSize: glassSize,
2768
2765
  padding: padding,
@@ -2778,10 +2775,15 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2778
2775
  onMouseLeave: handleMouseLeave,
2779
2776
  onMouseDown: handleMouseDown,
2780
2777
  onMouseUp: handleMouseUp,
2781
- active: isActive,
2782
2778
  isHovered: isHovered,
2783
2779
  isActive: isActive,
2784
- overLight: overLightConfig.isOverLight,
2780
+ overLight: isOverLight,
2781
+ overLightConfig: {
2782
+ contrast: overLightConfig.contrast,
2783
+ brightness: overLightConfig.brightness,
2784
+ shadowIntensity: overLightConfig.shadowIntensity,
2785
+ borderOpacity: overLightConfig.borderOpacity
2786
+ },
2785
2787
  onClick: onClick,
2786
2788
  mode: mode,
2787
2789
  transform: baseStyle.transform,
@@ -3119,7 +3121,11 @@ const AtomixLogo = ({height: height = 24, width: width = 24, color: color = "cur
3119
3121
  // Add input validation
3120
3122
  "number" != typeof x || "number" != typeof y || "number" != typeof time || isNaN(x) || isNaN(y) || isNaN(time) ? .5 : .5 * (.7 * fbm(40 * x + .3 * time, 40 * y - .3 * time, 6) + .3 * fbm(80 * x, 80 * y, 4)))(ix, iy, time), microDetailX = .008 * (microSurface - .5), microDetailY = .008 * (microSurface - .5), centerDistance = calculateLength(ix, iy), dynamicRefraction = .35 * Math.pow(Math.min(centerDistance, 1), 1.8) * (1 + mouseFalloff * mouseDistance * .8), refractionX = Math.cos(refractionAngle) * dynamicRefraction, refractionY = Math.sin(refractionAngle) * dynamicRefraction, vortexAngle = Math.atan2(iy - mouseY, ix - mouseX), vortexDistance = calculateLength(ix - mouseX, iy - mouseY), vortexStrength = mouseFalloff * Math.sin(10 * vortexDistance - 3 * time) * .025, vortexX = Math.cos(vortexAngle + 2 * time) * vortexStrength, vortexY = Math.sin(vortexAngle + 2 * time) * vortexStrength, fluidX = Math.sin(10 * ix + 5 * mouseX + 2.5 * time) * Math.cos(8 * iy - 2 * time) * .018, fluidY = Math.cos(8 * ix - 2 * time) * Math.sin(10 * iy + 5 * mouseY + 2.5 * time) * .018, rippleEffect = (.012 * Math.sin(15 * Math.min(centerDistance, 10) - 4 * time) + .008 * Math.cos(20 * Math.min(centerDistance, 10) + 3 * time)) * mouseFalloff, rippleX = Math.cos(refractionAngle) * rippleEffect, rippleY = Math.sin(refractionAngle) * rippleEffect, distanceToEdge = roundedRectSDF(ix, iy, .44, .34, .39), edgeMask = smoothStep(.92, -.12, distanceToEdge), edgeSoftness = smoothStep(.85, .1, distanceToEdge), finalY = iy + (1.2 * refractionY + .8 * spectralY + 1.5 * parallaxY + .9 * scatteringY + 1 * turbulenceY + .6 * microDetailY + 1.3 * vortexY + 1.1 * fluidY + .7 * rippleY + .8 * causticDistortion) * edgeMask * edgeSoftness * .85;
3121
3123
  return createTexture(clampValue(ix + (1.2 * refractionX + .8 * spectralX + 1.5 * parallaxX + .9 * scatteringX + 1 * turbulenceX + .6 * microDetailX + 1.3 * vortexX + 1.1 * fluidX + .7 * rippleX + causticDistortion) * edgeMask * edgeSoftness * .85 + .5, 0, 1), clampValue(finalY + .5, 0, 1));
3122
- }
3124
+ },
3125
+ // Aliases for compatibility
3126
+ plasma: (uv, mousePosition) => fragmentShaders.premiumGlass(uv, mousePosition),
3127
+ waves: (uv, mousePosition) => fragmentShaders.liquidMetal(uv, mousePosition),
3128
+ noise: (uv, mousePosition) => fragmentShaders.appleFluid(uv, mousePosition)
3123
3129
  }, shaderUtils = Object.freeze( Object.defineProperty({
3124
3130
  __proto__: null,
3125
3131
  ShaderDisplacementGenerator: class {
@@ -3499,46 +3505,12 @@ const Breadcrumb = memo((({items: items, divider: divider, className: className
3499
3505
  });
3500
3506
  }));
3501
3507
 
3502
- /**
3503
- * Button state and functionality
3504
- * @param initialProps - Initial button properties
3505
- * @returns Button state and methods
3506
- */
3507
- function useButton(initialProps) {
3508
- // Default button properties
3509
- const defaultProps = {
3510
- variant: "primary",
3511
- size: "md",
3512
- disabled: !1,
3513
- rounded: !1,
3514
- loading: !1,
3515
- fullWidth: !1,
3516
- block: !1,
3517
- active: !1,
3518
- selected: !1,
3519
- ...initialProps
3520
- };
3521
- /**
3522
- * Generate button class based on properties
3523
- * @param props - Button properties
3524
- * @returns Class string
3525
- */ return {
3526
- defaultProps: defaultProps,
3527
- generateButtonClass: props => {
3528
- const {variant: variant = defaultProps.variant, size: size = defaultProps.size, disabled: disabled = defaultProps.disabled, rounded: rounded = defaultProps.rounded, iconOnly: iconOnly = !1, glass: glass = defaultProps.glass, loading: loading = defaultProps.loading, fullWidth: fullWidth = defaultProps.fullWidth, block: block = defaultProps.block, active: active = defaultProps.active, selected: selected = defaultProps.selected, className: className = ""} = props, sizeClass = "md" === size ? "" : `c-btn--${size}`, iconOnlyClass = iconOnly ? "c-btn--icon" : "", roundedClass = rounded ? "c-btn--rounded" : "", disabledClass = disabled ? "c-btn--disabled" : "", glassClass = glass ? "c-btn--glass" : "", loadingClass = loading ? BUTTON.CLASSES.LOADING : "", fullWidthClass = fullWidth ? BUTTON.CLASSES.FULL_WIDTH : "", blockClass = block ? BUTTON.CLASSES.BLOCK : "", activeClass = active ? BUTTON.CLASSES.ACTIVE : "", selectedClass = selected ? BUTTON.CLASSES.SELECTED : "";
3529
- return [ BUTTON.BASE_CLASS, `c-btn--${variant}`, sizeClass, iconOnlyClass, roundedClass, disabledClass, glassClass, loadingClass, fullWidthClass, blockClass, activeClass, selectedClass, className ].filter(Boolean).join(" ");
3530
- },
3531
- handleClick: handler => event => {
3532
- defaultProps.disabled || defaultProps.loading || !handler || handler(event);
3533
- }
3534
- };
3535
- }
3536
-
3537
3508
  /**
3538
3509
  * Spinner state and functionality
3539
3510
  * @param initialProps - Initial spinner properties
3540
3511
  * @returns Spinner state and methods
3541
- */ function useSpinner(initialProps) {
3512
+ */
3513
+ function useSpinner(initialProps) {
3542
3514
  // Default spinner properties
3543
3515
  const defaultProps = {
3544
3516
  variant: "primary",
@@ -3695,21 +3667,7 @@ const Button = React.memo( forwardRef((({label: label, children: children, onCl
3695
3667
  const isDisabled = disabled || loading, shouldRenderAsLink = Boolean(href && !isDisabled), iconElement = iconName ? jsx(Icon, {
3696
3668
  name: iconName,
3697
3669
  size: iconSize
3698
- }) : icon;
3699
- // Determine if we should render as a link
3700
- useButton({
3701
- variant: variant,
3702
- size: size,
3703
- disabled: isDisabled,
3704
- rounded: rounded,
3705
- glass: glass,
3706
- loading: loading,
3707
- fullWidth: fullWidth,
3708
- block: block,
3709
- active: active,
3710
- selected: selected
3711
- });
3712
- const buttonClass = [ BUTTON.BASE_CLASS, ThemeNaming.variantClass(THEME_NAMING.BUTTON_PREFIX, variant), "md" !== size ? ThemeNaming.sizeClass(THEME_NAMING.BUTTON_PREFIX, size) : "", iconOnly ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, THEME_NAMING.ICON_ELEMENT) : "", rounded ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "rounded") : "", isDisabled ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "disabled") : "", glass ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "glass") : "", loading ? BUTTON.CLASSES.LOADING : "", fullWidth ? BUTTON.CLASSES.FULL_WIDTH : "", block ? BUTTON.CLASSES.BLOCK : "", active ? BUTTON.CLASSES.ACTIVE : "", selected ? BUTTON.CLASSES.SELECTED : "", className ].filter(Boolean).join(" "), handleClickEvent = useCallback((event => {
3670
+ }) : icon, buttonClass = [ BUTTON.BASE_CLASS, ThemeNaming.variantClass(THEME_NAMING.BUTTON_PREFIX, variant), "md" !== size ? ThemeNaming.sizeClass(THEME_NAMING.BUTTON_PREFIX, size) : "", iconOnly ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, THEME_NAMING.ICON_ELEMENT) : "", rounded ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "rounded") : "", isDisabled ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "disabled") : "", glass ? ThemeNaming.stateClass(THEME_NAMING.BUTTON_PREFIX, "glass") : "", loading ? BUTTON.CLASSES.LOADING : "", fullWidth ? BUTTON.CLASSES.FULL_WIDTH : "", block ? BUTTON.CLASSES.BLOCK : "", active ? BUTTON.CLASSES.ACTIVE : "", selected ? BUTTON.CLASSES.SELECTED : "", className ].filter(Boolean).join(" "), handleClickEvent = useCallback((event => {
3713
3671
  isDisabled ? event.preventDefault() : onClick?.(event);
3714
3672
  }), [ isDisabled, onClick ]), handleMouseEnter = useCallback((event => {
3715
3673
  isDisabled || onHover?.(event);
@@ -3717,7 +3675,7 @@ const Button = React.memo( forwardRef((({label: label, children: children, onCl
3717
3675
  isDisabled || onFocus?.(event);
3718
3676
  }), [ isDisabled, onFocus ]), handleBlurEvent = useCallback((event => {
3719
3677
  isDisabled || onBlur?.(event);
3720
- }), [ isDisabled, onBlur ]), buttonText = loading && loadingText ? loadingText : label || children, spinnerSize = "sm" === size ? "sm" : "lg" === size ? "md" : "sm", buttonContent = jsxs(Fragment, {
3678
+ }), [ isDisabled, onBlur ]), buttonText = loading && loadingText ? loadingText : label || children, spinnerSize = "sm" === size ? "sm" : "lg" === size ? "md" : "sm", safeAriaLabel = ariaLabel || (iconOnly ? "string" == typeof label ? label : "string" == typeof children ? children : void 0 : void 0), buttonContent = jsxs(Fragment, {
3721
3679
  children: [ loading && jsx("span", {
3722
3680
  className: ThemeNaming.bemClass(THEME_NAMING.BUTTON_PREFIX, THEME_NAMING.SPINNER_ELEMENT),
3723
3681
  "aria-hidden": "true",
@@ -3734,80 +3692,77 @@ const Button = React.memo( forwardRef((({label: label, children: children, onCl
3734
3692
  children: buttonText
3735
3693
  }) ]
3736
3694
  }), buttonProps = {
3737
- ref: ref,
3738
3695
  className: buttonClass,
3739
- type: "button" !== Component || shouldRenderAsLink ? void 0 : type,
3740
3696
  onClick: handleClickEvent,
3741
3697
  onMouseEnter: onHover ? handleMouseEnter : void 0,
3742
3698
  onFocus: onFocus ? handleFocusEvent : void 0,
3743
3699
  onBlur: onBlur ? handleBlurEvent : void 0,
3744
- disabled: isDisabled && "button" === Component && !shouldRenderAsLink,
3745
3700
  "aria-disabled": isDisabled,
3746
3701
  "aria-busy": loading,
3747
- "aria-label": ariaLabel || (iconOnly ? label || children : void 0),
3702
+ "aria-label": safeAriaLabel,
3748
3703
  "aria-describedby": ariaDescribedBy,
3749
3704
  "aria-expanded": ariaExpanded,
3750
3705
  "aria-controls": ariaControls,
3751
3706
  tabIndex: void 0 !== tabIndex ? tabIndex : isDisabled ? -1 : 0,
3752
3707
  style: style,
3753
3708
  ...props
3754
- }, defaultGlassProps = {
3755
- displacementScale: 20,
3756
- blurAmount: 0,
3757
- saturation: 200,
3758
- elasticity: 0
3759
- }, glassProps = !0 === glass ? defaultGlassProps : {
3760
- ...defaultGlassProps,
3761
- ...glass
3762
3709
  };
3763
- // Handle click with loading check
3764
- // Render as anchor if href is provided
3765
- if (shouldRenderAsLink) {
3766
- const {ref: _, ...buttonPropsWithoutRef} = buttonProps, anchorButtonProps = {
3767
- ...buttonPropsWithoutRef,
3768
- type: void 0,
3769
- disabled: void 0
3770
- };
3771
- // Use custom LinkComponent if provided (e.g., Next.js Link)
3772
- if (LinkComponent) {
3773
- const LinkComp = LinkComponent, linkProps = {
3774
- ...anchorButtonProps,
3775
- ref: ref,
3776
- href: href,
3777
- target: target,
3778
- rel: "_blank" === target ? "noopener noreferrer" : void 0
3779
- }, linkElement = jsx(LinkComp, {
3780
- ...linkProps,
3781
- children: buttonContent
3782
- });
3783
- return glass ? jsx(AtomixGlass, {
3784
- ...glassProps,
3785
- children: linkElement
3786
- }) : linkElement;
3787
- }
3788
- // Fallback to regular anchor tag
3789
- const anchorElement = jsx("a", {
3790
- ...anchorButtonProps,
3710
+ // Determine if we should render as a link
3711
+ // If disabled, we still check href, but we might want to render as button or anchor with aria-disabled
3712
+ // The previous logic was Boolean(href && !isDisabled). This meant if disabled, it renders as <button>.
3713
+ // This is a safe fallback for disabled links.
3714
+ let content;
3715
+ // Render as anchor if href is provided
3716
+ if (shouldRenderAsLink)
3717
+ // Use custom LinkComponent if provided (e.g., Next.js Link)
3718
+ if (LinkComponent) {
3719
+ const LinkComp = LinkComponent, linkProps = {
3720
+ ...buttonProps,
3791
3721
  ref: ref,
3722
+ // LinkComponent usually forwards ref to anchor
3792
3723
  href: href,
3793
3724
  target: target,
3794
- rel: "_blank" === target ? "noopener noreferrer" : void 0,
3725
+ rel: "_blank" === target ? "noopener noreferrer" : void 0
3726
+ };
3727
+ content = jsx(LinkComp, {
3728
+ ...linkProps,
3795
3729
  children: buttonContent
3796
3730
  });
3797
- return glass ? jsx(AtomixGlass, {
3798
- ...glassProps,
3799
- children: anchorElement
3800
- }) : anchorElement;
3801
- }
3731
+ } else
3732
+ // Fallback to regular anchor tag
3733
+ content = jsx("a", {
3734
+ ...buttonProps,
3735
+ ref: ref,
3736
+ href: href,
3737
+ target: target,
3738
+ rel: "_blank" === target ? "noopener noreferrer" : void 0,
3739
+ children: buttonContent
3740
+ }); else
3802
3741
  // Default button rendering
3803
- const buttonElement = jsx(Component, {
3742
+ content = jsx(Component, {
3804
3743
  ...buttonProps,
3744
+ ref: ref,
3745
+ type: "button" === Component ? type : void 0,
3746
+ disabled: isDisabled,
3805
3747
  children: buttonContent
3806
3748
  });
3807
- return glass ? jsx(AtomixGlass, {
3808
- ...glassProps,
3809
- children: buttonElement
3810
- }) : buttonElement;
3749
+ if (glass) {
3750
+ // Default glass props
3751
+ const defaultGlassProps = {
3752
+ displacementScale: 20,
3753
+ blurAmount: 0,
3754
+ saturation: 200,
3755
+ elasticity: 0
3756
+ }, glassProps = !0 === glass ? defaultGlassProps : {
3757
+ ...defaultGlassProps,
3758
+ ...glass
3759
+ };
3760
+ return jsx(AtomixGlass, {
3761
+ ...glassProps,
3762
+ children: content
3763
+ });
3764
+ }
3765
+ return content;
3811
3766
  })));
3812
3767
 
3813
3768
  Button.displayName = "Button";
@@ -8845,6 +8800,22 @@ const WaterfallChart = memo( forwardRef((({waterfallData: waterfallData = [], c
8845
8800
  });
8846
8801
  })));
8847
8802
 
8803
+ /**
8804
+ * CSV Utility Functions
8805
+ */
8806
+ /**
8807
+ * Sanitize cell content to prevent CSV injection
8808
+ *
8809
+ * Replaces newlines and tabs with spaces, escapes double quotes,
8810
+ * and prefixes dangerous characters (=, +, -, @) with a single quote
8811
+ * to prevent formula injection.
8812
+ */
8813
+ function sanitizeCSVCell(cell) {
8814
+ const sanitized = String(cell ?? "").replace(/[\r\n\t]/g, " ").replace(/"/g, '""');
8815
+ // Prevent formula injection by prefixing dangerous characters
8816
+ return /^[=+\-@]/.test(sanitized) ? `'${sanitized}` : sanitized;
8817
+ }
8818
+
8848
8819
  WaterfallChart.displayName = "WaterfallChart";
8849
8820
 
8850
8821
  const SIZE_MAP = {
@@ -9046,29 +9017,38 @@ function getRowId$1(row, rowKey) {
9046
9017
  } // Reset to first page when filtering
9047
9018
  ), []), clearColumnFilters = useCallback((() => {
9048
9019
  setColumnFilterValues({}), setCurrentPage(1);
9049
- }), []), filteredData = useMemo((() => {
9050
- let result = data;
9051
- // Apply global search
9052
- if (searchQuery) {
9053
- const lowercaseQuery = searchQuery.toLowerCase();
9054
- result = result.filter((row => visibleColumns.some((column => {
9020
+ }), []), activeColumnFilters = useMemo((() => columnFilters ? Object.entries(columnFilterValues).filter((([, value]) => null != value && "" !== value)).map((([columnKey, value]) => {
9021
+ const column = columns.find((col => col.key === columnKey));
9022
+ return column && column.filterable ? {
9023
+ key: columnKey,
9024
+ value: value,
9025
+ lowercaseValue: "string" == typeof value ? value.toLowerCase() : String(value).toLowerCase(),
9026
+ column: column
9027
+ } : null;
9028
+ })).filter((f => null !== f)) : []), [ columnFilters, columnFilterValues, columns ]), filteredData = useMemo((() => {
9029
+ if (!searchQuery && 0 === activeColumnFilters.length) return data;
9030
+ const lowercaseQuery = searchQuery ? searchQuery.toLowerCase() : "";
9031
+ return data.filter((row => {
9032
+ // Apply global search
9033
+ if (searchQuery && !visibleColumns.some((column => {
9055
9034
  var _context;
9056
9035
  const value = row[column.key];
9057
9036
  return null != value && _includesInstanceProperty(_context = String(value).toLowerCase()).call(_context, lowercaseQuery);
9058
- }))));
9059
- }
9060
- // Apply column-specific filters
9061
- return columnFilters && (result = result.filter((row => Object.entries(columnFilterValues).every((([columnKey, filterValue]) => {
9062
- var _context2;
9063
- if (!filterValue) return !0;
9064
- const column = columns.find((col => col.key === columnKey));
9065
- if (!column || !column.filterable) return !0;
9066
- const cellValue = row[columnKey];
9067
- return null != cellValue && (
9068
- // Use custom filter function if provided
9069
- column.filterFunction ? column.filterFunction(cellValue, filterValue) : _includesInstanceProperty(_context2 = String(cellValue).toLowerCase()).call(_context2, filterValue.toLowerCase()));
9070
- }))))), result;
9071
- }), [ data, visibleColumns, searchQuery, columnFilterValues, columnFilters, columns ]), sortedData = useMemo((() => sortConfig && sortable ? [ ...filteredData ].sort(((a, b) => {
9037
+ }))) return !1;
9038
+ // Apply column-specific filters
9039
+ for (let i = 0; i < activeColumnFilters.length; i++) {
9040
+ const {key: key, value: value, lowercaseValue: lowercaseValue, column: column} = activeColumnFilters[i], cellValue = row[key];
9041
+ if (null == cellValue) return !1;
9042
+ // Use custom filter function if provided
9043
+ var _context2;
9044
+ // Default text filter
9045
+ if (column.filterFunction) {
9046
+ if (!column.filterFunction(cellValue, value)) return !1;
9047
+ } else if (!_includesInstanceProperty(_context2 = String(cellValue).toLowerCase()).call(_context2, lowercaseValue)) return !1;
9048
+ }
9049
+ return !0;
9050
+ }));
9051
+ }), [ data, visibleColumns, searchQuery, activeColumnFilters ]), sortedData = useMemo((() => sortConfig && sortable ? [ ...filteredData ].sort(((a, b) => {
9072
9052
  const aValue = a[sortConfig.key], bValue = b[sortConfig.key];
9073
9053
  return null == aValue ? "asc" === sortConfig.direction ? -1 : 1 : null == bValue ? "asc" === sortConfig.direction ? 1 : -1 : "string" == typeof aValue && "string" == typeof bValue ? "asc" === sortConfig.direction ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue) : "asc" === sortConfig.direction ? aValue > bValue ? 1 : -1 : aValue > bValue ? -1 : 1;
9074
9054
  })) : filteredData), [ filteredData, sortConfig, sortable ]), paginatedData = useMemo((() => {
@@ -9346,76 +9326,56 @@ const DOTS = "...", range = (start, end) => {
9346
9326
 
9347
9327
  Pagination.displayName = "Pagination", PaginationNavButton.displayName = "PaginationNavButton";
9348
9328
 
9349
- /**
9350
- * Checkbox state and functionality
9351
- * @param initialProps - Initial checkbox properties
9352
- * @returns Checkbox state and methods
9353
- */
9354
- function useCheckbox(initialProps) {
9355
- // Default checkbox properties
9356
- const defaultProps = {
9357
- disabled: !1,
9358
- invalid: !1,
9359
- valid: !1,
9360
- indeterminate: !1,
9361
- ...initialProps
9362
- }, checkboxRef = useRef(null);
9363
- // Ref for the checkbox input element
9364
- // Handle indeterminate state
9365
- return useEffect((() => {
9366
- checkboxRef.current && (checkboxRef.current.indeterminate = Boolean(defaultProps.indeterminate));
9367
- }), [ defaultProps.indeterminate ]), {
9368
- defaultProps: defaultProps,
9369
- generateCheckboxClass: props => {
9370
- const {disabled: disabled = defaultProps.disabled, invalid: invalid = defaultProps.invalid, valid: valid = defaultProps.valid, indeterminate: indeterminate = defaultProps.indeterminate, className: className = ""} = props;
9371
- let validationClass = "";
9372
- return invalid ? validationClass = "is-error" : valid && (validationClass = "is-valid"),
9373
- `c-checkbox ${validationClass} ${disabled ? "is-disabled" : ""} ${indeterminate ? "c-checkbox--mixed" : ""} ${className}`.trim();
9374
- },
9375
- checkboxRef: checkboxRef
9376
- };
9377
- }
9378
-
9379
- /**
9380
- * Checkbox - A component for checkbox inputs
9381
- */ const Checkbox = memo((({label: label, checked: checked = !1, onChange: onChange, className: className = "", style: style, disabled: disabled = !1, required: required = !1, id: id, name: name, value: value, invalid: invalid = !1, valid: valid = !1, indeterminate: indeterminate = !1, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, onClick: onClick, glass: glass}) => {
9382
- const {generateCheckboxClass: generateCheckboxClass, checkboxRef: checkboxRef} = useCheckbox({
9383
- indeterminate: indeterminate,
9384
- disabled: disabled,
9385
- invalid: invalid,
9386
- valid: valid
9387
- }), checkboxClass = generateCheckboxClass({
9388
- className: `${className} ${glass ? "c-checkbox--glass" : ""}`.trim(),
9329
+ const Checkbox = React.memo( forwardRef((({label: label, checked: checked, onChange: onChange, className: className = "", style: style, disabled: disabled = !1, required: required = !1, id: id, name: name, value: value, invalid: invalid = !1, valid: valid = !1, indeterminate: indeterminate = !1, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, onClick: onClick, glass: glass, ...props}, ref) => {
9330
+ // Local ref to handle indeterminate state
9331
+ const localRef = useRef(null);
9332
+ // Merge refs
9333
+ useImperativeHandle(ref, (() => localRef.current)),
9334
+ // Handle indeterminate
9335
+ useEffect((() => {
9336
+ localRef.current && (localRef.current.indeterminate = Boolean(indeterminate));
9337
+ }), [ indeterminate ]);
9338
+ // Generate classes
9339
+ let validationClass = "";
9340
+ invalid ? validationClass = "is-error" : valid && (validationClass = "is-valid");
9341
+ const checkboxClass = `c-checkbox ${validationClass} ${disabled ? "is-disabled" : ""} ${indeterminate ? "c-checkbox--mixed" : ""} ${glass ? "c-checkbox--glass" : ""} ${className}`.trim(), inputElement = jsx("input", {
9342
+ ref: localRef,
9343
+ type: "checkbox",
9344
+ className: "c-checkbox__input",
9345
+ checked: checked,
9346
+ onChange: onChange,
9347
+ onClick: onClick,
9389
9348
  disabled: disabled,
9390
- invalid: invalid,
9391
- valid: valid,
9392
- indeterminate: indeterminate
9393
- }), checkboxContent = jsxs("div", {
9349
+ required: required,
9350
+ id: id,
9351
+ name: name,
9352
+ value: value,
9353
+ "aria-label": label ? void 0 : ariaLabel,
9354
+ "aria-describedby": ariaDescribedBy,
9355
+ "aria-invalid": invalid,
9356
+ ...props
9357
+ });
9358
+ let content;
9359
+ if (content = id && label ? jsxs("div", {
9394
9360
  className: checkboxClass,
9395
9361
  style: style,
9396
- children: [ jsx("input", {
9397
- ref: checkboxRef,
9398
- type: "checkbox",
9399
- className: "c-checkbox__input",
9400
- checked: checked,
9401
- onChange: onChange,
9402
- onClick: onClick,
9403
- disabled: disabled,
9404
- required: required,
9405
- id: id,
9406
- name: name,
9407
- value: value,
9408
- "aria-label": label ? void 0 : ariaLabel,
9409
- "aria-describedby": ariaDescribedBy,
9410
- "aria-invalid": invalid
9411
- }), label && jsx("label", {
9362
+ children: [ inputElement, jsx("label", {
9412
9363
  className: "c-checkbox__label",
9413
9364
  htmlFor: id,
9414
9365
  children: label
9415
9366
  }) ]
9416
- });
9417
- if (glass) {
9418
- // Default glass settings for checkboxes
9367
+ }) : label ? jsxs("label", {
9368
+ className: checkboxClass,
9369
+ style: style,
9370
+ children: [ inputElement, jsx("span", {
9371
+ className: "c-checkbox__label",
9372
+ children: label
9373
+ }) ]
9374
+ }) : jsx("div", {
9375
+ className: checkboxClass,
9376
+ style: style,
9377
+ children: inputElement
9378
+ }), glass) {
9419
9379
  const defaultGlassProps = {
9420
9380
  displacementScale: 40,
9421
9381
  blurAmount: 1,
@@ -9429,11 +9389,11 @@ function useCheckbox(initialProps) {
9429
9389
  };
9430
9390
  return jsx(AtomixGlass, {
9431
9391
  ...glassProps,
9432
- children: checkboxContent
9392
+ children: content
9433
9393
  });
9434
9394
  }
9435
- return checkboxContent;
9436
- }));
9395
+ return content;
9396
+ })));
9437
9397
 
9438
9398
  Checkbox.displayName = "Checkbox";
9439
9399
 
@@ -9610,18 +9570,6 @@ const DropdownContext = createContext({
9610
9570
 
9611
9571
  /**
9612
9572
  * DropdownItem component for menu items
9613
- */
9614
- /**
9615
- * Sanitize cell content to prevent CSV injection
9616
- */
9617
- function sanitizeCSVCell(cell) {
9618
- const sanitized = String(cell ?? "").replace(/[\r\n\t]/g, " ").replace(/"/g, '""');
9619
- // Prevent formula injection by prefixing dangerous characters
9620
- return /^[=+\-@]/.test(sanitized) ? `'${sanitized}` : sanitized;
9621
- }
9622
-
9623
- /**
9624
- * Export data as CSV
9625
9573
  */ Dropdown.displayName = "Dropdown", DropdownItem.displayName = "DropdownItem",
9626
9574
  DropdownDivider.displayName = "DropdownDivider", DropdownHeader.displayName = "DropdownHeader";
9627
9575
 
@@ -9700,7 +9648,11 @@ const DataTable = memo((({data: data, columns: columns, className: className, s
9700
9648
  const defaultFilename = filename || "data-table";
9701
9649
  switch (format) {
9702
9650
  case "csv":
9703
- !function(data, columns, filename = "data-table.csv") {
9651
+ !
9652
+ /**
9653
+ * Export data as CSV
9654
+ */
9655
+ function(data, columns, filename = "data-table.csv") {
9704
9656
  if (!data.length || !columns.length) return;
9705
9657
  // Create headers
9706
9658
  const headers = columns.map((col => col.title || col.key)), rows = data.map((row => columns.map((col => {
@@ -12417,6 +12369,8 @@ function useSlider(options) {
12417
12369
  }
12418
12370
 
12419
12371
  // Button composables
12372
+ // export * from './useButton';
12373
+ // Accordion composables
12420
12374
  const composablesImport = Object.freeze( Object.defineProperty({
12421
12375
  __proto__: null,
12422
12376
  DOTS: "...",
@@ -12426,12 +12380,10 @@ const composablesImport = Object.freeze( Object.defineProperty({
12426
12380
  useBarChart: useBarChart,
12427
12381
  useBlock: useBlock,
12428
12382
  useBreadcrumb: useBreadcrumb,
12429
- useButton: useButton,
12430
12383
  useCard: useCard,
12431
12384
  useChartData: useChartData,
12432
12385
  useChartInteraction: useChartInteraction,
12433
12386
  useChartScale: useChartScale,
12434
- useCheckbox: useCheckbox,
12435
12387
  useDataTable: useDataTable,
12436
12388
  useEdgePanel: useEdgePanel,
12437
12389
  useForm: useForm,
@@ -18697,7 +18649,6 @@ const components = Object.freeze( Object.defineProperty({
18697
18649
  FOOTER: FOOTER,
18698
18650
  FORM: FORM,
18699
18651
  FORM_GROUP: FORM_GROUP,
18700
- GLASS_CONTAINER: GLASS_CONTAINER,
18701
18652
  HERO: HERO,
18702
18653
  INPUT: INPUT,
18703
18654
  LIST: LIST,
@@ -24670,5 +24621,5 @@ const atomix = {
24670
24621
  types: types
24671
24622
  };
24672
24623
 
24673
- export { ACCORDION, ATOMIX_GLASS, AVATAR, AVATAR_GROUP, Accordion, AnimatedChart, AreaChart, AtomixGlass, AtomixLogo, Avatar, AvatarGroup, BADGE, BADGE_CSS_VARS, BLOCK, BREADCRUMB, BUTTON, BUTTON_CSS_VARS, BUTTON_GROUP, Badge, BarChart, Block, Breadcrumb, BubbleChart, Button, ButtonGroup, CALLOUT, CARD, CARD_CSS_VARS, CHART, CHECKBOX_CSS_VARS, CLASS_PREFIX, CODE_SNIPPET, COMPONENT_CSS_VARS, COUNTDOWN, Callout, CandlestickChart, Card, Chart, ChartRenderer, Checkbox, ColorModeToggle, Container, Countdown, DATA_TABLE_CLASSES, DATA_TABLE_SELECTORS, DATEPICKER, DEFAULT_ATOMIX_FONTS, DOTS, DROPDOWN, DROPDOWN_CSS_VARS, DataTable, DatePicker, DesignTokensCustomizer, DonutChart, Dropdown, EDGE_PANEL, EdgePanel, ElevationCard, FOOTER, FORM, FORM_GROUP, Footer, FooterLink, FooterSection, FooterSocialLink, Form, FormGroup, FunnelChart, GLASS_CONTAINER, GaugeChart, Grid, GridCol, HERO, HeatmapChart, Hero, INPUT, INPUT_CSS_VARS, Icon, Input, LIST, LIST_GROUP, LineChart, List, ListGroup, MESSAGES, MODAL, MODAL_CSS_VARS, MasonryGrid, MasonryGridItem, MegaMenu, MegaMenuColumn, MegaMenuLink, Menu, MenuDivider, MenuItem, Messages, Modal, MultiAxisChart, NAV, NAVBAR, Nav, NavDropdown, NavItem, Navbar, PAGINATION_DEFAULTS, PHOTOVIEWER, POPOVER, PROGRESS, PROGRESS_CSS_VARS, Pagination, PhotoViewer, PieChart, Popover, ProductReview, Progress, RADIO, RADIO_CSS_VARS, RATING, RIVER, RTLManager, RadarChart, Radio, Rating, River, Row, SECTION_INTRO, SELECT, SIDE_MENU, SIZES, SLIDER, SPINNER, STEPS, ScatterChart, SectionIntro, Select, SideMenu, SideMenuItem, SideMenuList, Slider, Spinner, Steps, TAB, TABS_CSS_VARS, TESTIMONIAL, TEXTAREA, THEME_COLORS, THEME_NAMING, TODO, TOGGLE, TOOLTIP, TOOLTIP_CSS_VARS, Tabs, Testimonial, Textarea, ThemeApplicator, ThemeComparator, ThemeContext, ThemeErrorBoundary, ThemeInspector, ThemeLiveEditor, ThemePreview, ThemeProvider, ThemeValidator, Todo, Toggle, Tooltip, TreemapChart, UPLOAD, Upload, VIDEO_PLAYER, VideoPlayer, WaterfallChart, applyCSSVariables, applyCSSVarsToStyle, applyComponentTheme, applyPartStyles, applyTheme, camelToKebab, clearThemes, composables, constants, createCSSVarStyle, createDarkVariant, createDebugAttrs, createFontPreloadLink, createPartProps, createSlotComponent, createSlotProps, createTheme, createThemeRegistry, createTokens, cssVarsToStyle, deepMerge, atomix as default, defaultTokens, defineConfig, designTokensToCSSVars, exportTheme, extendTheme, extractComponentName, extractYouTubeId, generateCSSVariableName, generateCSSVariables$1 as generateCSSVariables, generateCSSVariablesForSelector, generateClassName, generateComponentCSSVars, generateFontPreloadTags, generateUUID, getAllThemes, getCSSVariable, getComponentCSSVars, getComponentThemeValue, getPartStyles, getTheme, getThemeApplicator, getThemeCount, getThemeIds, getThemeMetadata, hasCustomization, hasTheme, importTheme, injectCSS$1 as injectCSS, injectTheme, isCSSInjected, isDesignTokens, isSlot, isValidCSSVariableName, isYouTubeUrl, mapSCSSTokensToCSSVars, mergeCSSVars, mergeClassNames, mergeComponentProps, mergePartStyles, mergeSlots, mergeTheme, normalizeThemeTokens, preloadFonts, quickTheme, registerTheme, removeCSS, removeCSSVariables, removeTheme, renderSlot, sliderConstants, supportsDarkMode, theme, themePropertyToCSSVar, themeToCSS, types, unregisterTheme, useAccordion, useAtomixGlass, useBadge, useBarChart, useBlock, useBreadcrumb, useButton, useCard, useChartData, useChartInteraction, useChartScale, useCheckbox, useComponentCustomization, useComponentDefaultProps, useComponentTheme, useDataTable, useEdgePanel, useForm, useFormGroup, useGlassContainer, useHero, useHistory, useInput, useLineChart, useMergedProps, useModal$1 as useModal, useNav, useNavDropdown, useNavItem, useNavbar, usePagination, usePieChart, useRadio, useRiver, useSelect, useSideMenu, useSideMenuItem, useSlider, useSlot, useSpinner, useTextarea, useTheme, useThemeTokens, useTodo, utils, validateTheme };
24624
+ export { ACCORDION, ATOMIX_GLASS, AVATAR, AVATAR_GROUP, Accordion, AnimatedChart, AreaChart, AtomixGlass, AtomixLogo, Avatar, AvatarGroup, BADGE, BADGE_CSS_VARS, BLOCK, BREADCRUMB, BUTTON, BUTTON_CSS_VARS, BUTTON_GROUP, Badge, BarChart, Block, Breadcrumb, BubbleChart, Button, ButtonGroup, CALLOUT, CARD, CARD_CSS_VARS, CHART, CHECKBOX_CSS_VARS, CLASS_PREFIX, CODE_SNIPPET, COMPONENT_CSS_VARS, COUNTDOWN, Callout, CandlestickChart, Card, Chart, ChartRenderer, Checkbox, ColorModeToggle, Container, Countdown, DATA_TABLE_CLASSES, DATA_TABLE_SELECTORS, DATEPICKER, DEFAULT_ATOMIX_FONTS, DOTS, DROPDOWN, DROPDOWN_CSS_VARS, DataTable, DatePicker, DesignTokensCustomizer, DonutChart, Dropdown, EDGE_PANEL, EdgePanel, ElevationCard, FOOTER, FORM, FORM_GROUP, Footer, FooterLink, FooterSection, FooterSocialLink, Form, FormGroup, FunnelChart, GaugeChart, Grid, GridCol, HERO, HeatmapChart, Hero, INPUT, INPUT_CSS_VARS, Icon, Input, LIST, LIST_GROUP, LineChart, List, ListGroup, MESSAGES, MODAL, MODAL_CSS_VARS, MasonryGrid, MasonryGridItem, MegaMenu, MegaMenuColumn, MegaMenuLink, Menu, MenuDivider, MenuItem, Messages, Modal, MultiAxisChart, NAV, NAVBAR, Nav, NavDropdown, NavItem, Navbar, PAGINATION_DEFAULTS, PHOTOVIEWER, POPOVER, PROGRESS, PROGRESS_CSS_VARS, Pagination, PhotoViewer, PieChart, Popover, ProductReview, Progress, RADIO, RADIO_CSS_VARS, RATING, RIVER, RTLManager, RadarChart, Radio, Rating, River, Row, SECTION_INTRO, SELECT, SIDE_MENU, SIZES, SLIDER, SPINNER, STEPS, ScatterChart, SectionIntro, Select, SideMenu, SideMenuItem, SideMenuList, Slider, Spinner, Steps, TAB, TABS_CSS_VARS, TESTIMONIAL, TEXTAREA, THEME_COLORS, THEME_NAMING, TODO, TOGGLE, TOOLTIP, TOOLTIP_CSS_VARS, Tabs, Testimonial, Textarea, ThemeApplicator, ThemeComparator, ThemeContext, ThemeErrorBoundary, ThemeInspector, ThemeLiveEditor, ThemePreview, ThemeProvider, ThemeValidator, Todo, Toggle, Tooltip, TreemapChart, UPLOAD, Upload, VIDEO_PLAYER, VideoPlayer, WaterfallChart, applyCSSVariables, applyCSSVarsToStyle, applyComponentTheme, applyPartStyles, applyTheme, camelToKebab, clearThemes, composables, constants, createCSSVarStyle, createDarkVariant, createDebugAttrs, createFontPreloadLink, createPartProps, createSlotComponent, createSlotProps, createTheme, createThemeRegistry, createTokens, cssVarsToStyle, deepMerge, atomix as default, defaultTokens, defineConfig, designTokensToCSSVars, exportTheme, extendTheme, extractComponentName, extractYouTubeId, generateCSSVariableName, generateCSSVariables$1 as generateCSSVariables, generateCSSVariablesForSelector, generateClassName, generateComponentCSSVars, generateFontPreloadTags, generateUUID, getAllThemes, getCSSVariable, getComponentCSSVars, getComponentThemeValue, getPartStyles, getTheme, getThemeApplicator, getThemeCount, getThemeIds, getThemeMetadata, hasCustomization, hasTheme, importTheme, injectCSS$1 as injectCSS, injectTheme, isCSSInjected, isDesignTokens, isSlot, isValidCSSVariableName, isYouTubeUrl, mapSCSSTokensToCSSVars, mergeCSSVars, mergeClassNames, mergeComponentProps, mergePartStyles, mergeSlots, mergeTheme, normalizeThemeTokens, preloadFonts, quickTheme, registerTheme, removeCSS, removeCSSVariables, removeTheme, renderSlot, sliderConstants, supportsDarkMode, theme, themePropertyToCSSVar, themeToCSS, types, unregisterTheme, useAccordion, useAtomixGlass, useBadge, useBarChart, useBlock, useBreadcrumb, useCard, useChartData, useChartInteraction, useChartScale, useComponentCustomization, useComponentDefaultProps, useComponentTheme, useDataTable, useEdgePanel, useForm, useFormGroup, useGlassContainer, useHero, useHistory, useInput, useLineChart, useMergedProps, useModal$1 as useModal, useNav, useNavDropdown, useNavItem, useNavbar, usePagination, usePieChart, useRadio, useRiver, useSelect, useSideMenu, useSideMenuItem, useSlider, useSlot, useSpinner, useTextarea, useTheme, useThemeTokens, useTodo, utils, validateTheme };
24674
24625
  //# sourceMappingURL=index.esm.js.map