@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.js CHANGED
@@ -1249,29 +1249,6 @@ const THEME_COLORS = [ "primary", "secondary", "success", "info", "warning", "er
1249
1249
  SIZES: [ "xs", "sm", "md", "lg", "xl", "none" ],
1250
1250
  DEFAULT: "md"
1251
1251
  }
1252
- }, GLASS_CONTAINER = {
1253
- CLASSES: {
1254
- BASE: "c-glass-container",
1255
- GLASS: "c-glass-container__glass",
1256
- WARP: "c-glass-container__warp",
1257
- CONTENT: "c-glass-container__content",
1258
- OVERLAY: "c-glass-container__overlay",
1259
- OVERLAY_VISIBLE: "c-glass-container__overlay--visible",
1260
- OVERLAY_HIDDEN: "c-glass-container__overlay--hidden",
1261
- OVERLAY_BLEND: "c-glass-container__overlay-blend",
1262
- BORDER: "c-glass-container__border",
1263
- BORDER_OVERLAY: "c-glass-container__border-overlay",
1264
- HOVER_EFFECT: "c-glass-container__hover-effect",
1265
- ACTIVE_EFFECT: "c-glass-container__active-effect",
1266
- INTERACTION_EFFECT: "c-glass-container__interaction-effect",
1267
- ACTIVE: "c-glass-container--active",
1268
- CLICKABLE: "c-glass-container--clickable"
1269
- },
1270
- DISPLACEMENT_MAPS: {
1271
- STANDARD: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iZ3JhZGllbnQiIGN4PSI1MCUiIGN5PSI1MCUiIHI9IjUwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzgwODA4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzgwODA4MCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZGllbnQpIi8+PC9zdmc+",
1272
- POLAR: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0icG9sYXIiIGN4PSI1MCUiIGN5PSI1MCUiIHI9IjUwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQwNDA0MCIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjODA4MDgwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNDA0MDQwIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNwb2xhcikiLz48L3N2Zz4=",
1273
- PROMINENT: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjcwIiBoZWlnaHQ9IjY5IiB2aWV3Qm94PSIwIDAgMjcwIDY5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0icHJvbWluZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjNDA0MDQwIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNjMGMwYzAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0MDQwNDAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI3Byb21pbmVudCkiLz48L3N2Zz4="
1274
- }
1275
1252
  }, FOOTER = {
1276
1253
  SELECTORS: {
1277
1254
  FOOTER: ".c-footer",
@@ -1410,10 +1387,16 @@ const THEME_COLORS = [ "primary", "secondary", "success", "info", "warning", "er
1410
1387
  MIN_BLUR: .1,
1411
1388
  MOUSE_INFLUENCE_DIVISOR: 100,
1412
1389
  EDGE_FADE_PIXELS: 2,
1390
+ // Note: This default must match the SCSS variable --atomix-radius-md
1391
+ // @see src/styles/01-settings/_settings.global.scss
1413
1392
  DEFAULT_CORNER_RADIUS: 16,
1414
- // Fallback value matching design system
1415
1393
  MAX_SIZE: 4096,
1416
1394
  // Maximum width/height for glass size
1395
+ // Palette for internal calculations (matches design system base colors)
1396
+ PALETTE: {
1397
+ WHITE: "255, 255, 255",
1398
+ BLACK: "0, 0, 0"
1399
+ },
1417
1400
  // Gradient calculation constants
1418
1401
  GRADIENT: {
1419
1402
  BASE_ANGLE: 135,
@@ -1631,10 +1614,10 @@ const {CONSTANTS: CONSTANTS$1} = ATOMIX_GLASS, calculateDistance = (pos1, pos2)
1631
1614
  y: 0
1632
1615
  }, calculateMouseInfluence = mouseOffset => {
1633
1616
  if (!mouseOffset || "number" != typeof mouseOffset.x || "number" != typeof mouseOffset.y) return 0;
1634
- // More responsive calculation for overlight effects
1617
+ // Bounded calculation keeps the glass effect subtle and stable
1635
1618
  const influence = Math.sqrt(mouseOffset.x * mouseOffset.x + mouseOffset.y * mouseOffset.y) / CONSTANTS$1.MOUSE_INFLUENCE_DIVISOR;
1636
- return Math.min(1.5, influence);
1637
- // Cap influence for better control
1619
+ return Math.min(.8, influence);
1620
+ // Tighter cap to prevent blur/filter blow-out
1638
1621
  }, 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 => {
1639
1622
  if ("number" == typeof value) return Math.max(0, value);
1640
1623
  if ("string" != typeof value || !value.trim()) return CONSTANTS$1.DEFAULT_CORNER_RADIUS;
@@ -1865,7 +1848,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
1865
1848
  }, globalMousePosition: globalMousePosition = {
1866
1849
  x: 0,
1867
1850
  y: 0
1868
- }, 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 = {
1851
+ }, 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 = {
1869
1852
  width: 0,
1870
1853
  height: 0
1871
1854
  }, onClick: onClick, mode: mode = "standard", effectiveDisableEffects: effectiveDisableEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", enableLiquidBlur: enableLiquidBlur = !1, elasticity: elasticity = 0, contentRef: contentRef}, ref) => {
@@ -1980,28 +1963,29 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
1980
1963
  flowBlur: 1.2 * blurAmount
1981
1964
  };
1982
1965
  // Enhanced validation for liquid blur
1983
- if (!enableLiquidBlur || !rectCache || !globalMousePosition || "number" != typeof globalMousePosition.x || "number" != typeof globalMousePosition.y || isNaN(globalMousePosition.x) || isNaN(globalMousePosition.y)) return defaultBlur;
1966
+ if (!enableLiquidBlur || !rectCache || !mouseOffset || "number" != typeof mouseOffset.x || "number" != typeof mouseOffset.y || isNaN(mouseOffset.x) || isNaN(mouseOffset.y)) return defaultBlur;
1984
1967
  try {
1985
- // Cache center and distance calculations
1986
- 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);
1968
+ 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);
1969
+ // NOTE: hover/active multipliers intentionally omitted here
1970
+ // they belong on opacity layers, not the blur filter itself.
1987
1971
  return {
1988
- baseBlur: clampBlur(baseBlur * stateMultiplier),
1989
- edgeBlur: clampBlur(edgeBlur * stateMultiplier),
1990
- centerBlur: clampBlur(centerBlur * stateMultiplier),
1991
- flowBlur: clampBlur(flowBlur * stateMultiplier)
1972
+ baseBlur: clampBlur(baseBlur),
1973
+ edgeBlur: clampBlur(edgeBlur),
1974
+ centerBlur: clampBlur(centerBlur),
1975
+ flowBlur: clampBlur(flowBlur)
1992
1976
  };
1993
1977
  } catch (error) {
1994
1978
  return console.warn("AtomixGlassContainer: Error calculating liquid blur", error),
1995
1979
  defaultBlur;
1996
1980
  }
1997
- }), [ enableLiquidBlur, blurAmount, globalMousePosition, mouseOffset, isHovered, isActive, rectCache, style, glassSize ]), backdropStyle = React.useMemo((() => {
1981
+ }), [ enableLiquidBlur, blurAmount, mouseOffset, rectCache ]), backdropStyle = React.useMemo((() => {
1998
1982
  try {
1999
1983
  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;
2000
1984
  // Validate blur values before using them
2001
1985
  return !enableLiquidBlur || effectiveReducedMotion || effectiveDisableEffects || area > 18e4 ? {
2002
- 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)`
1986
+ 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})`
2003
1987
  } : {
2004
- 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)`
1988
+ 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})`
2005
1989
  };
2006
1990
  // Single-pass fallback: stronger radius to match perceived blur of multi-pass
2007
1991
  } catch (error) {
@@ -2020,7 +2004,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2020
2004
  "--atomix-glass-container-padding": padding || "0 0",
2021
2005
  "--atomix-glass-container-radius": `${"number" != typeof cornerRadius || isNaN(cornerRadius) ? 0 : cornerRadius}px`,
2022
2006
  "--atomix-glass-container-backdrop": backdropStyle?.backdropFilter || "none",
2023
- "--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",
2007
+ "--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",
2024
2008
  "--atomix-glass-container-shadow-opacity": effectiveDisableEffects ? 0 : 1,
2025
2009
  // Background and shadow values use design token-aligned RGB values
2026
2010
  "--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",
@@ -2039,10 +2023,18 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2039
2023
  "--atomix-glass-container-text-shadow": "none"
2040
2024
  };
2041
2025
  }
2042
- }), [ glassSize, padding, cornerRadius, backdropStyle, mouseOffset, overLight, effectiveDisableEffects ]);
2026
+ }), [ glassSize, padding, cornerRadius, backdropStyle, mouseOffset, overLight, effectiveDisableEffects ]), setForceNoTransition = el => {
2027
+ el && (el.style.setProperty("transition-duration", "0s", "important"), el.style.setProperty("animation-duration", "0s", "important"),
2028
+ el.style.setProperty("transition-delay", "0s", "important"));
2029
+ };
2043
2030
  return jsxRuntime.jsx("div", {
2044
- ref: ref,
2045
- className: `${ATOMIX_GLASS.CONTAINER_CLASS} ${className} ${active ? ATOMIX_GLASS.CLASSES.ACTIVE : ""} ${overLight ? ATOMIX_GLASS.CLASSES.OVER_LIGHT : ""}`,
2031
+ ref: el => {
2032
+ // Apply force no-transition
2033
+ setForceNoTransition(el),
2034
+ // Handle forwarded ref
2035
+ "function" == typeof ref ? ref(el) : ref && (ref.current = el);
2036
+ },
2037
+ className: `${ATOMIX_GLASS.CONTAINER_CLASS} ${className} ${isActive ? ATOMIX_GLASS.CLASSES.ACTIVE : ""} ${overLight ? ATOMIX_GLASS.CLASSES.OVER_LIGHT : ""}`,
2046
2038
  style: {
2047
2039
  ...style,
2048
2040
  ...containerVars
@@ -2060,6 +2052,11 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2060
2052
  onMouseUp: onMouseUp,
2061
2053
  children: [ jsxRuntime.jsxs("div", {
2062
2054
  className: ATOMIX_GLASS.FILTER_CLASS,
2055
+ style: {
2056
+ zIndex: 1,
2057
+ position: "absolute",
2058
+ inset: 0
2059
+ },
2063
2060
  children: [ jsxRuntime.jsx(GlassFilter, {
2064
2061
  blurAmount: blurAmount,
2065
2062
  mode: mode,
@@ -2068,6 +2065,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2068
2065
  aberrationIntensity: "number" != typeof aberrationIntensity || isNaN(aberrationIntensity) ? 0 : aberrationIntensity,
2069
2066
  shaderMapUrl: shaderMapUrl
2070
2067
  }), jsxRuntime.jsx("div", {
2068
+ ref: setForceNoTransition,
2071
2069
  className: ATOMIX_GLASS.FILTER_OVERLAY_CLASS,
2072
2070
  style: {
2073
2071
  filter: `url(#${filterId})`,
@@ -2089,9 +2087,8 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2089
2087
  style: {
2090
2088
  position: "relative",
2091
2089
  textShadow: "var(--atomix-glass-container-text-shadow)",
2092
- ...elasticity > 0 ? {
2093
- zIndex: 100
2094
- } : {}
2090
+ // Ensure content is always above the filter layer (zIndex 1)
2091
+ zIndex: elasticity > 0 ? 100 : 2
2095
2092
  },
2096
2093
  children: children
2097
2094
  }) ]
@@ -2209,12 +2206,12 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2209
2206
  }), [internalMouseOffset, setInternalMouseOffset] = React.useState({
2210
2207
  x: 0,
2211
2208
  y: 0
2212
- }), [dynamicCornerRadius, setDynamicCornerRadius] = React.useState(CONSTANTS.DEFAULT_CORNER_RADIUS), [userPrefersReducedMotion, setUserPrefersReducedMotion] = React.useState(!1), [userPrefersHighContrast, setUserPrefersHighContrast] = React.useState(!1), [detectedOverLight, setDetectedOverLight] = React.useState(!1), effectiveCornerRadius = React.useMemo((() => void 0 !== cornerRadius ? Math.max(0, cornerRadius) : Math.max(0, dynamicCornerRadius)), [ cornerRadius, dynamicCornerRadius, debugCornerRadius ]), effectiveReducedMotion = React.useMemo((() => reducedMotion || userPrefersReducedMotion), [ reducedMotion, userPrefersReducedMotion ]), effectiveHighContrast = React.useMemo((() => highContrast || userPrefersHighContrast), [ highContrast, userPrefersHighContrast ]), effectiveDisableEffects = React.useMemo((() => disableEffects || effectiveReducedMotion), [ disableEffects, effectiveReducedMotion ]), globalMousePosition = React.useMemo((() => externalGlobalMousePosition || internalGlobalMousePosition), [ externalGlobalMousePosition, internalGlobalMousePosition ]), mouseOffset = React.useMemo((() => externalMouseOffset || internalMouseOffset), [ externalMouseOffset, internalMouseOffset ]);
2209
+ }), [dynamicCornerRadius, setDynamicCornerRadius] = React.useState(CONSTANTS.DEFAULT_CORNER_RADIUS), [userPrefersReducedMotion, setUserPrefersReducedMotion] = React.useState(!1), [userPrefersHighContrast, setUserPrefersHighContrast] = React.useState(!1), [detectedOverLight, setDetectedOverLight] = React.useState(!1), effectiveCornerRadius = React.useMemo((() => void 0 !== cornerRadius ? Math.max(0, cornerRadius) : Math.max(0, dynamicCornerRadius)), [ cornerRadius, dynamicCornerRadius ]), effectiveReducedMotion = React.useMemo((() => reducedMotion || userPrefersReducedMotion), [ reducedMotion, userPrefersReducedMotion ]), effectiveHighContrast = React.useMemo((() => highContrast || userPrefersHighContrast), [ highContrast, userPrefersHighContrast ]), effectiveDisableEffects = React.useMemo((() => disableEffects || effectiveReducedMotion), [ disableEffects, effectiveReducedMotion ]), globalMousePosition = React.useMemo((() => externalGlobalMousePosition || internalGlobalMousePosition), [ externalGlobalMousePosition, internalGlobalMousePosition ]), mouseOffset = React.useMemo((() => externalMouseOffset || internalMouseOffset), [ externalMouseOffset, internalMouseOffset ]);
2213
2210
  // Extract border-radius from children
2214
2211
  React.useEffect((() => {
2215
2212
  const extractRadius = () => {
2216
2213
  try {
2217
- let extractedRadius = null, extractionSource = "default";
2214
+ let extractedRadius = null;
2218
2215
  if (contentRef.current) {
2219
2216
  const firstChild = contentRef.current.firstElementChild;
2220
2217
  if (firstChild) {
@@ -2231,15 +2228,14 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2231
2228
  return null;
2232
2229
  }
2233
2230
  })(firstChild);
2234
- null !== domRadius && domRadius > 0 && (extractedRadius = domRadius, extractionSource = "DOM element");
2231
+ null !== domRadius && domRadius > 0 && (extractedRadius = domRadius);
2235
2232
  }
2236
2233
  }
2237
2234
  if (null === extractedRadius) {
2238
2235
  const childRadius = extractBorderRadiusFromChildren(children);
2239
- childRadius > 0 && childRadius !== CONSTANTS.DEFAULT_CORNER_RADIUS && (extractedRadius = childRadius,
2240
- extractionSource = "React children");
2236
+ childRadius > 0 && childRadius !== CONSTANTS.DEFAULT_CORNER_RADIUS && (extractedRadius = childRadius);
2241
2237
  }
2242
- null !== extractedRadius && extractedRadius > 0 ? setDynamicCornerRadius(extractedRadius) : "undefined" == typeof process || process.env;
2238
+ null !== extractedRadius && extractedRadius > 0 && setDynamicCornerRadius(extractedRadius);
2243
2239
  } catch (error) {
2244
2240
  "undefined" != typeof process && "production" === process.env?.NODE_ENV || !debugCornerRadius || console.error("[AtomixGlass] Error extracting corner radius:", error);
2245
2241
  }
@@ -2368,7 +2364,6 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2368
2364
  }
2369
2365
  if ("boolean" == typeof overLight &&
2370
2366
  // For boolean values, disable auto-detection
2371
- // Cache is automatically managed by WeakMap (no manual clearing needed)
2372
2367
  setDetectedOverLight(!1), "function" == typeof window.matchMedia) try {
2373
2368
  const mediaQueryReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)"), mediaQueryHighContrast = window.matchMedia("(prefers-contrast: high)");
2374
2369
  setUserPrefersReducedMotion(mediaQueryReducedMotion.matches), setUserPrefersHighContrast(mediaQueryHighContrast.matches);
@@ -2438,6 +2433,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2438
2433
  }), [ handleGlobalMousePosition, mouseContainer, glassRef, externalGlobalMousePosition, externalMouseOffset, effectiveDisableEffects ]);
2439
2434
  // Transform calculations
2440
2435
  const calculateDirectionalScale = React.useCallback((() => {
2436
+ if (!0 === overLight || "auto" === overLight && detectedOverLight || "object" == typeof overLight && null !== overLight && detectedOverLight) return "scale(1)";
2441
2437
  if (!(globalMousePosition.x && globalMousePosition.y && glassRef.current && validateGlassSize(glassSize))) return "scale(1)";
2442
2438
  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({
2443
2439
  x: edgeDistanceX,
@@ -2451,7 +2447,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2451
2447
  if (0 === centerDistance) return "scale(1)";
2452
2448
  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;
2453
2449
  return `scaleX(${Math.max(.8, scaleX)}) scaleY(${Math.max(.8, scaleY)})`;
2454
- }), [ globalMousePosition, elasticity, glassSize, glassRef ]), calculateFadeInFactor = React.useCallback((() => {
2450
+ }), [ globalMousePosition, elasticity, glassSize, glassRef, overLight, detectedOverLight ]), calculateFadeInFactor = React.useCallback((() => {
2455
2451
  if (!(globalMousePosition.x && globalMousePosition.y && glassRef.current && validateGlassSize(glassSize))) return 0;
2456
2452
  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({
2457
2453
  x: edgeDistanceX,
@@ -2536,20 +2532,21 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2536
2532
  isOverLight: isOverLight,
2537
2533
  threshold: .7,
2538
2534
  opacity: isOverLight ? Math.min(.6, Math.max(.2, .5 * hoverIntensity * activeIntensity)) : 0,
2539
- contrast: Math.min(1.8, Math.max(1, 1.4 + .3 * mouseInfluence)),
2540
- brightness: Math.min(1.2, Math.max(.7, .85 + .15 * mouseInfluence)),
2541
- saturationBoost: Math.min(2, Math.max(1, 1.3 + .4 * mouseInfluence)),
2542
- shadowIntensity: Math.min(1.5, Math.max(.5, .9 + .5 * mouseInfluence)),
2543
- borderOpacity: Math.min(1, Math.max(.3, .7 + .3 * mouseInfluence))
2535
+ contrast: Math.min(1.6, Math.max(1, 1.4 + .1 * mouseInfluence)),
2536
+ brightness: Math.min(1.1, Math.max(.8, .9 + .05 * mouseInfluence)),
2537
+ saturationBoost: 1.3,
2538
+ // Fixed value dynamic saturation amplifies perceived displacement
2539
+ shadowIntensity: Math.min(1.2, Math.max(.5, .9 + .2 * mouseInfluence)),
2540
+ borderOpacity: Math.min(1, Math.max(.3, .7 + .1 * mouseInfluence))
2544
2541
  };
2545
2542
  if ("object" == typeof overLight && null !== overLight) {
2546
2543
  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 = {
2547
2544
  ...baseConfig,
2548
2545
  threshold: validatedThreshold,
2549
2546
  opacity: validatedOpacity * hoverIntensity * activeIntensity,
2550
- contrast: validatedContrast + .3 * mouseInfluence,
2551
- brightness: validatedBrightness + .15 * mouseInfluence,
2552
- saturationBoost: validatedSaturationBoost + .4 * mouseInfluence
2547
+ contrast: Math.min(1.6, validatedContrast + .1 * mouseInfluence),
2548
+ brightness: Math.min(1.1, validatedBrightness + .05 * mouseInfluence),
2549
+ saturationBoost: validatedSaturationBoost
2553
2550
  };
2554
2551
  // Validate and apply object config values with proper clamping
2555
2552
  return "undefined" == typeof process || process.env, finalConfig;
@@ -2683,19 +2680,19 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2683
2680
  debugOverLight: debugOverLight,
2684
2681
  enablePerformanceMonitoring: enablePerformanceMonitoring,
2685
2682
  children: children
2686
- }), isOverLight = overLightConfig.isOverLight, shouldRenderOverLightLayers = enableOverLightLayers && isOverLight, baseStyle = {
2683
+ }), isOverLight = React.useMemo((() => overLightConfig?.isOverLight), [ overLight ]), shouldRenderOverLightLayers = enableOverLightLayers && isOverLight, baseStyle = {
2687
2684
  ...style,
2688
- ...0 !== elasticity && !effectiveDisableEffects && {
2685
+ ...!effectiveDisableEffects && {
2689
2686
  transform: transformStyle
2690
2687
  }
2691
- }, 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 = {
2688
+ }, 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 = React.useMemo((() => ({
2692
2689
  position: style.position || "absolute",
2693
2690
  top: style.top || 0,
2694
2691
  left: style.left || 0
2695
- }, adjustedSize = {
2692
+ })), [ style.position, style.top, style.left ]), adjustedSize = React.useMemo((() => ({
2696
2693
  width: "fixed" !== style.position ? "100%" : style.width ? style.width : Math.max(glassSize.width, 0),
2697
2694
  height: "fixed" !== style.position ? "100%" : style.height ? style.height : Math.max(glassSize.height, 0)
2698
- }, gradientValues = React.useMemo((() => {
2695
+ })), [ style.position, style.width, style.height, glassSize.width, glassSize.height ]), gradientValues = React.useMemo((() => {
2699
2696
  const mx = mouseOffset.x, my = mouseOffset.y, absMx = Math.abs(mx), absMy = Math.abs(my), GRADIENT = ATOMIX_GLASS.CONSTANTS.GRADIENT;
2700
2697
  return {
2701
2698
  borderGradientAngle: GRADIENT.BASE_ANGLE + mx * GRADIENT.ANGLE_MULTIPLIER,
@@ -2735,7 +2732,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2735
2732
  over: isOverLight ? 1.1 * (overLightOpacity || .4) : 0
2736
2733
  };
2737
2734
  }), [ isHovered, isActive, isOverLight, overLightConfig.opacity ]), glassVars = React.useMemo((() => {
2738
- 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;
2735
+ 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;
2739
2736
  return {
2740
2737
  "--atomix-glass-radius": `${effectiveCornerRadius}px`,
2741
2738
  "--atomix-glass-transform": transformStyle || "none",
@@ -2746,20 +2743,20 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2746
2743
  "--atomix-glass-height": "fixed" !== style.position ? adjustedSize.height : `${adjustedSize.height}px`,
2747
2744
  "--atomix-glass-border-width": "var(--atomix-spacing-0-5, 0.09375rem)",
2748
2745
  "--atomix-glass-blend-mode": isOverLight ? "multiply" : "overlay",
2749
- "--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%)`,
2750
- "--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%)`,
2746
+ "--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%)`,
2747
+ "--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%)`,
2751
2748
  "--atomix-glass-hover-1-opacity": opacityValues.hover1,
2752
- "--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}%)`,
2749
+ "--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}%)`,
2753
2750
  "--atomix-glass-hover-2-opacity": opacityValues.hover2,
2754
- "--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}%)`,
2751
+ "--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}%)`,
2755
2752
  "--atomix-glass-hover-3-opacity": opacityValues.hover3,
2756
- "--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}%)`,
2753
+ "--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}%)`,
2757
2754
  "--atomix-glass-base-opacity": opacityValues.base,
2758
- "--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})`,
2755
+ "--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})`,
2759
2756
  "--atomix-glass-overlay-opacity": opacityValues.over,
2760
- "--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})`
2757
+ "--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})`
2761
2758
  };
2762
- }), [ gradientValues, opacityValues, effectiveCornerRadius, transformStyle, positionStyles, adjustedSize, style.position, isOverLight ]), renderBackgroundLayer = layerType => jsxRuntime.jsx("div", {
2759
+ }), [ gradientValues, opacityValues, effectiveCornerRadius, transformStyle, positionStyles, adjustedSize, style.position, isOverLight, overLightConfig.borderOpacity ]), renderBackgroundLayer = layerType => jsxRuntime.jsx("div", {
2763
2760
  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(" "),
2764
2761
  style: {
2765
2762
  ...positionStyles,
@@ -2785,9 +2782,9 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2785
2782
  className: className,
2786
2783
  style: baseStyle,
2787
2784
  cornerRadius: effectiveCornerRadius,
2788
- displacementScale: effectiveDisableEffects ? 0 : "shader" === mode ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_DISPLACEMENT : overLightConfig.isOverLight ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.OVER_LIGHT_DISPLACEMENT : displacementScale,
2785
+ displacementScale: effectiveDisableEffects ? 0 : "shader" === mode ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_DISPLACEMENT : isOverLight ? displacementScale * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.OVER_LIGHT_DISPLACEMENT : displacementScale,
2789
2786
  blurAmount: effectiveDisableEffects ? 0 : blurAmount,
2790
- saturation: effectiveHighContrast ? ATOMIX_GLASS.CONSTANTS.SATURATION.HIGH_CONTRAST : overLightConfig.isOverLight ? saturation * overLightConfig.saturationBoost : saturation,
2787
+ saturation: effectiveHighContrast ? ATOMIX_GLASS.CONSTANTS.SATURATION.HIGH_CONTRAST : isOverLight ? saturation * overLightConfig.saturationBoost : saturation,
2791
2788
  aberrationIntensity: effectiveDisableEffects ? 0 : "shader" === mode ? aberrationIntensity * ATOMIX_GLASS.CONSTANTS.MULTIPLIERS.SHADER_ABERRATION : aberrationIntensity,
2792
2789
  glassSize: glassSize,
2793
2790
  padding: padding,
@@ -2803,10 +2800,15 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2803
2800
  onMouseLeave: handleMouseLeave,
2804
2801
  onMouseDown: handleMouseDown,
2805
2802
  onMouseUp: handleMouseUp,
2806
- active: isActive,
2807
2803
  isHovered: isHovered,
2808
2804
  isActive: isActive,
2809
- overLight: overLightConfig.isOverLight,
2805
+ overLight: isOverLight,
2806
+ overLightConfig: {
2807
+ contrast: overLightConfig.contrast,
2808
+ brightness: overLightConfig.brightness,
2809
+ shadowIntensity: overLightConfig.shadowIntensity,
2810
+ borderOpacity: overLightConfig.borderOpacity
2811
+ },
2810
2812
  onClick: onClick,
2811
2813
  mode: mode,
2812
2814
  transform: baseStyle.transform,
@@ -3144,7 +3146,11 @@ const AtomixLogo = ({height: height = 24, width: width = 24, color: color = "cur
3144
3146
  // Add input validation
3145
3147
  "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;
3146
3148
  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));
3147
- }
3149
+ },
3150
+ // Aliases for compatibility
3151
+ plasma: (uv, mousePosition) => fragmentShaders.premiumGlass(uv, mousePosition),
3152
+ waves: (uv, mousePosition) => fragmentShaders.liquidMetal(uv, mousePosition),
3153
+ noise: (uv, mousePosition) => fragmentShaders.appleFluid(uv, mousePosition)
3148
3154
  };
3149
3155
 
3150
3156
  // Adapted from https://github.com/shuding/liquid-glass
@@ -3538,46 +3544,12 @@ const Breadcrumb = React.memo((({items: items, divider: divider, className: cla
3538
3544
  });
3539
3545
  }));
3540
3546
 
3541
- /**
3542
- * Button state and functionality
3543
- * @param initialProps - Initial button properties
3544
- * @returns Button state and methods
3545
- */
3546
- function useButton(initialProps) {
3547
- // Default button properties
3548
- const defaultProps = {
3549
- variant: "primary",
3550
- size: "md",
3551
- disabled: !1,
3552
- rounded: !1,
3553
- loading: !1,
3554
- fullWidth: !1,
3555
- block: !1,
3556
- active: !1,
3557
- selected: !1,
3558
- ...initialProps
3559
- };
3560
- /**
3561
- * Generate button class based on properties
3562
- * @param props - Button properties
3563
- * @returns Class string
3564
- */ return {
3565
- defaultProps: defaultProps,
3566
- generateButtonClass: props => {
3567
- 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 : "";
3568
- return [ BUTTON.BASE_CLASS, `c-btn--${variant}`, sizeClass, iconOnlyClass, roundedClass, disabledClass, glassClass, loadingClass, fullWidthClass, blockClass, activeClass, selectedClass, className ].filter(Boolean).join(" ");
3569
- },
3570
- handleClick: handler => event => {
3571
- defaultProps.disabled || defaultProps.loading || !handler || handler(event);
3572
- }
3573
- };
3574
- }
3575
-
3576
3547
  /**
3577
3548
  * Spinner state and functionality
3578
3549
  * @param initialProps - Initial spinner properties
3579
3550
  * @returns Spinner state and methods
3580
- */ function useSpinner(initialProps) {
3551
+ */
3552
+ function useSpinner(initialProps) {
3581
3553
  // Default spinner properties
3582
3554
  const defaultProps = {
3583
3555
  variant: "primary",
@@ -3734,21 +3706,7 @@ const Button = React__default.default.memo( React.forwardRef((({label: label, c
3734
3706
  const isDisabled = disabled || loading, shouldRenderAsLink = Boolean(href && !isDisabled), iconElement = iconName ? jsxRuntime.jsx(Icon, {
3735
3707
  name: iconName,
3736
3708
  size: iconSize
3737
- }) : icon;
3738
- // Determine if we should render as a link
3739
- useButton({
3740
- variant: variant,
3741
- size: size,
3742
- disabled: isDisabled,
3743
- rounded: rounded,
3744
- glass: glass,
3745
- loading: loading,
3746
- fullWidth: fullWidth,
3747
- block: block,
3748
- active: active,
3749
- selected: selected
3750
- });
3751
- 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 = React.useCallback((event => {
3709
+ }) : 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 = React.useCallback((event => {
3752
3710
  isDisabled ? event.preventDefault() : onClick?.(event);
3753
3711
  }), [ isDisabled, onClick ]), handleMouseEnter = React.useCallback((event => {
3754
3712
  isDisabled || onHover?.(event);
@@ -3756,7 +3714,7 @@ const Button = React__default.default.memo( React.forwardRef((({label: label, c
3756
3714
  isDisabled || onFocus?.(event);
3757
3715
  }), [ isDisabled, onFocus ]), handleBlurEvent = React.useCallback((event => {
3758
3716
  isDisabled || onBlur?.(event);
3759
- }), [ isDisabled, onBlur ]), buttonText = loading && loadingText ? loadingText : label || children, spinnerSize = "sm" === size ? "sm" : "lg" === size ? "md" : "sm", buttonContent = jsxRuntime.jsxs(jsxRuntime.Fragment, {
3717
+ }), [ 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 = jsxRuntime.jsxs(jsxRuntime.Fragment, {
3760
3718
  children: [ loading && jsxRuntime.jsx("span", {
3761
3719
  className: ThemeNaming.bemClass(THEME_NAMING.BUTTON_PREFIX, THEME_NAMING.SPINNER_ELEMENT),
3762
3720
  "aria-hidden": "true",
@@ -3773,80 +3731,77 @@ const Button = React__default.default.memo( React.forwardRef((({label: label, c
3773
3731
  children: buttonText
3774
3732
  }) ]
3775
3733
  }), buttonProps = {
3776
- ref: ref,
3777
3734
  className: buttonClass,
3778
- type: "button" !== Component || shouldRenderAsLink ? void 0 : type,
3779
3735
  onClick: handleClickEvent,
3780
3736
  onMouseEnter: onHover ? handleMouseEnter : void 0,
3781
3737
  onFocus: onFocus ? handleFocusEvent : void 0,
3782
3738
  onBlur: onBlur ? handleBlurEvent : void 0,
3783
- disabled: isDisabled && "button" === Component && !shouldRenderAsLink,
3784
3739
  "aria-disabled": isDisabled,
3785
3740
  "aria-busy": loading,
3786
- "aria-label": ariaLabel || (iconOnly ? label || children : void 0),
3741
+ "aria-label": safeAriaLabel,
3787
3742
  "aria-describedby": ariaDescribedBy,
3788
3743
  "aria-expanded": ariaExpanded,
3789
3744
  "aria-controls": ariaControls,
3790
3745
  tabIndex: void 0 !== tabIndex ? tabIndex : isDisabled ? -1 : 0,
3791
3746
  style: style,
3792
3747
  ...props
3793
- }, defaultGlassProps = {
3794
- displacementScale: 20,
3795
- blurAmount: 0,
3796
- saturation: 200,
3797
- elasticity: 0
3798
- }, glassProps = !0 === glass ? defaultGlassProps : {
3799
- ...defaultGlassProps,
3800
- ...glass
3801
3748
  };
3802
- // Handle click with loading check
3803
- // Render as anchor if href is provided
3804
- if (shouldRenderAsLink) {
3805
- const {ref: _, ...buttonPropsWithoutRef} = buttonProps, anchorButtonProps = {
3806
- ...buttonPropsWithoutRef,
3807
- type: void 0,
3808
- disabled: void 0
3809
- };
3810
- // Use custom LinkComponent if provided (e.g., Next.js Link)
3811
- if (LinkComponent) {
3812
- const LinkComp = LinkComponent, linkProps = {
3813
- ...anchorButtonProps,
3814
- ref: ref,
3815
- href: href,
3816
- target: target,
3817
- rel: "_blank" === target ? "noopener noreferrer" : void 0
3818
- }, linkElement = jsxRuntime.jsx(LinkComp, {
3819
- ...linkProps,
3820
- children: buttonContent
3821
- });
3822
- return glass ? jsxRuntime.jsx(AtomixGlass, {
3823
- ...glassProps,
3824
- children: linkElement
3825
- }) : linkElement;
3826
- }
3827
- // Fallback to regular anchor tag
3828
- const anchorElement = jsxRuntime.jsx("a", {
3829
- ...anchorButtonProps,
3749
+ // Determine if we should render as a link
3750
+ // If disabled, we still check href, but we might want to render as button or anchor with aria-disabled
3751
+ // The previous logic was Boolean(href && !isDisabled). This meant if disabled, it renders as <button>.
3752
+ // This is a safe fallback for disabled links.
3753
+ let content;
3754
+ // Render as anchor if href is provided
3755
+ if (shouldRenderAsLink)
3756
+ // Use custom LinkComponent if provided (e.g., Next.js Link)
3757
+ if (LinkComponent) {
3758
+ const LinkComp = LinkComponent, linkProps = {
3759
+ ...buttonProps,
3830
3760
  ref: ref,
3761
+ // LinkComponent usually forwards ref to anchor
3831
3762
  href: href,
3832
3763
  target: target,
3833
- rel: "_blank" === target ? "noopener noreferrer" : void 0,
3764
+ rel: "_blank" === target ? "noopener noreferrer" : void 0
3765
+ };
3766
+ content = jsxRuntime.jsx(LinkComp, {
3767
+ ...linkProps,
3834
3768
  children: buttonContent
3835
3769
  });
3836
- return glass ? jsxRuntime.jsx(AtomixGlass, {
3837
- ...glassProps,
3838
- children: anchorElement
3839
- }) : anchorElement;
3840
- }
3770
+ } else
3771
+ // Fallback to regular anchor tag
3772
+ content = jsxRuntime.jsx("a", {
3773
+ ...buttonProps,
3774
+ ref: ref,
3775
+ href: href,
3776
+ target: target,
3777
+ rel: "_blank" === target ? "noopener noreferrer" : void 0,
3778
+ children: buttonContent
3779
+ }); else
3841
3780
  // Default button rendering
3842
- const buttonElement = jsxRuntime.jsx(Component, {
3781
+ content = jsxRuntime.jsx(Component, {
3843
3782
  ...buttonProps,
3783
+ ref: ref,
3784
+ type: "button" === Component ? type : void 0,
3785
+ disabled: isDisabled,
3844
3786
  children: buttonContent
3845
3787
  });
3846
- return glass ? jsxRuntime.jsx(AtomixGlass, {
3847
- ...glassProps,
3848
- children: buttonElement
3849
- }) : buttonElement;
3788
+ if (glass) {
3789
+ // Default glass props
3790
+ const defaultGlassProps = {
3791
+ displacementScale: 20,
3792
+ blurAmount: 0,
3793
+ saturation: 200,
3794
+ elasticity: 0
3795
+ }, glassProps = !0 === glass ? defaultGlassProps : {
3796
+ ...defaultGlassProps,
3797
+ ...glass
3798
+ };
3799
+ return jsxRuntime.jsx(AtomixGlass, {
3800
+ ...glassProps,
3801
+ children: content
3802
+ });
3803
+ }
3804
+ return content;
3850
3805
  })));
3851
3806
 
3852
3807
  Button.displayName = "Button";
@@ -8895,6 +8850,22 @@ const WaterfallChart = React.memo( React.forwardRef((({waterfallData: waterfall
8895
8850
  });
8896
8851
  })));
8897
8852
 
8853
+ /**
8854
+ * CSV Utility Functions
8855
+ */
8856
+ /**
8857
+ * Sanitize cell content to prevent CSV injection
8858
+ *
8859
+ * Replaces newlines and tabs with spaces, escapes double quotes,
8860
+ * and prefixes dangerous characters (=, +, -, @) with a single quote
8861
+ * to prevent formula injection.
8862
+ */
8863
+ function sanitizeCSVCell(cell) {
8864
+ const sanitized = String(cell ?? "").replace(/[\r\n\t]/g, " ").replace(/"/g, '""');
8865
+ // Prevent formula injection by prefixing dangerous characters
8866
+ return /^[=+\-@]/.test(sanitized) ? `'${sanitized}` : sanitized;
8867
+ }
8868
+
8898
8869
  WaterfallChart.displayName = "WaterfallChart";
8899
8870
 
8900
8871
  const SIZE_MAP = {
@@ -9096,29 +9067,38 @@ function getRowId$1(row, rowKey) {
9096
9067
  } // Reset to first page when filtering
9097
9068
  ), []), clearColumnFilters = React.useCallback((() => {
9098
9069
  setColumnFilterValues({}), setCurrentPage(1);
9099
- }), []), filteredData = React.useMemo((() => {
9100
- let result = data;
9101
- // Apply global search
9102
- if (searchQuery) {
9103
- const lowercaseQuery = searchQuery.toLowerCase();
9104
- result = result.filter((row => visibleColumns.some((column => {
9070
+ }), []), activeColumnFilters = React.useMemo((() => columnFilters ? Object.entries(columnFilterValues).filter((([, value]) => null != value && "" !== value)).map((([columnKey, value]) => {
9071
+ const column = columns.find((col => col.key === columnKey));
9072
+ return column && column.filterable ? {
9073
+ key: columnKey,
9074
+ value: value,
9075
+ lowercaseValue: "string" == typeof value ? value.toLowerCase() : String(value).toLowerCase(),
9076
+ column: column
9077
+ } : null;
9078
+ })).filter((f => null !== f)) : []), [ columnFilters, columnFilterValues, columns ]), filteredData = React.useMemo((() => {
9079
+ if (!searchQuery && 0 === activeColumnFilters.length) return data;
9080
+ const lowercaseQuery = searchQuery ? searchQuery.toLowerCase() : "";
9081
+ return data.filter((row => {
9082
+ // Apply global search
9083
+ if (searchQuery && !visibleColumns.some((column => {
9105
9084
  var _context;
9106
9085
  const value = row[column.key];
9107
9086
  return null != value && _includesInstanceProperty(_context = String(value).toLowerCase()).call(_context, lowercaseQuery);
9108
- }))));
9109
- }
9110
- // Apply column-specific filters
9111
- return columnFilters && (result = result.filter((row => Object.entries(columnFilterValues).every((([columnKey, filterValue]) => {
9112
- var _context2;
9113
- if (!filterValue) return !0;
9114
- const column = columns.find((col => col.key === columnKey));
9115
- if (!column || !column.filterable) return !0;
9116
- const cellValue = row[columnKey];
9117
- return null != cellValue && (
9118
- // Use custom filter function if provided
9119
- column.filterFunction ? column.filterFunction(cellValue, filterValue) : _includesInstanceProperty(_context2 = String(cellValue).toLowerCase()).call(_context2, filterValue.toLowerCase()));
9120
- }))))), result;
9121
- }), [ data, visibleColumns, searchQuery, columnFilterValues, columnFilters, columns ]), sortedData = React.useMemo((() => sortConfig && sortable ? [ ...filteredData ].sort(((a, b) => {
9087
+ }))) return !1;
9088
+ // Apply column-specific filters
9089
+ for (let i = 0; i < activeColumnFilters.length; i++) {
9090
+ const {key: key, value: value, lowercaseValue: lowercaseValue, column: column} = activeColumnFilters[i], cellValue = row[key];
9091
+ if (null == cellValue) return !1;
9092
+ // Use custom filter function if provided
9093
+ var _context2;
9094
+ // Default text filter
9095
+ if (column.filterFunction) {
9096
+ if (!column.filterFunction(cellValue, value)) return !1;
9097
+ } else if (!_includesInstanceProperty(_context2 = String(cellValue).toLowerCase()).call(_context2, lowercaseValue)) return !1;
9098
+ }
9099
+ return !0;
9100
+ }));
9101
+ }), [ data, visibleColumns, searchQuery, activeColumnFilters ]), sortedData = React.useMemo((() => sortConfig && sortable ? [ ...filteredData ].sort(((a, b) => {
9122
9102
  const aValue = a[sortConfig.key], bValue = b[sortConfig.key];
9123
9103
  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;
9124
9104
  })) : filteredData), [ filteredData, sortConfig, sortable ]), paginatedData = React.useMemo((() => {
@@ -9396,76 +9376,56 @@ const range = (start, end) => {
9396
9376
 
9397
9377
  Pagination.displayName = "Pagination", PaginationNavButton.displayName = "PaginationNavButton";
9398
9378
 
9399
- /**
9400
- * Checkbox state and functionality
9401
- * @param initialProps - Initial checkbox properties
9402
- * @returns Checkbox state and methods
9403
- */
9404
- function useCheckbox(initialProps) {
9405
- // Default checkbox properties
9406
- const defaultProps = {
9407
- disabled: !1,
9408
- invalid: !1,
9409
- valid: !1,
9410
- indeterminate: !1,
9411
- ...initialProps
9412
- }, checkboxRef = React.useRef(null);
9413
- // Ref for the checkbox input element
9414
- // Handle indeterminate state
9415
- return React.useEffect((() => {
9416
- checkboxRef.current && (checkboxRef.current.indeterminate = Boolean(defaultProps.indeterminate));
9417
- }), [ defaultProps.indeterminate ]), {
9418
- defaultProps: defaultProps,
9419
- generateCheckboxClass: props => {
9420
- const {disabled: disabled = defaultProps.disabled, invalid: invalid = defaultProps.invalid, valid: valid = defaultProps.valid, indeterminate: indeterminate = defaultProps.indeterminate, className: className = ""} = props;
9421
- let validationClass = "";
9422
- return invalid ? validationClass = "is-error" : valid && (validationClass = "is-valid"),
9423
- `c-checkbox ${validationClass} ${disabled ? "is-disabled" : ""} ${indeterminate ? "c-checkbox--mixed" : ""} ${className}`.trim();
9424
- },
9425
- checkboxRef: checkboxRef
9426
- };
9427
- }
9428
-
9429
- /**
9430
- * Checkbox - A component for checkbox inputs
9431
- */ const Checkbox = React.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}) => {
9432
- const {generateCheckboxClass: generateCheckboxClass, checkboxRef: checkboxRef} = useCheckbox({
9433
- indeterminate: indeterminate,
9434
- disabled: disabled,
9435
- invalid: invalid,
9436
- valid: valid
9437
- }), checkboxClass = generateCheckboxClass({
9438
- className: `${className} ${glass ? "c-checkbox--glass" : ""}`.trim(),
9379
+ const Checkbox = React__default.default.memo( React.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) => {
9380
+ // Local ref to handle indeterminate state
9381
+ const localRef = React.useRef(null);
9382
+ // Merge refs
9383
+ React.useImperativeHandle(ref, (() => localRef.current)),
9384
+ // Handle indeterminate
9385
+ React.useEffect((() => {
9386
+ localRef.current && (localRef.current.indeterminate = Boolean(indeterminate));
9387
+ }), [ indeterminate ]);
9388
+ // Generate classes
9389
+ let validationClass = "";
9390
+ invalid ? validationClass = "is-error" : valid && (validationClass = "is-valid");
9391
+ const checkboxClass = `c-checkbox ${validationClass} ${disabled ? "is-disabled" : ""} ${indeterminate ? "c-checkbox--mixed" : ""} ${glass ? "c-checkbox--glass" : ""} ${className}`.trim(), inputElement = jsxRuntime.jsx("input", {
9392
+ ref: localRef,
9393
+ type: "checkbox",
9394
+ className: "c-checkbox__input",
9395
+ checked: checked,
9396
+ onChange: onChange,
9397
+ onClick: onClick,
9439
9398
  disabled: disabled,
9440
- invalid: invalid,
9441
- valid: valid,
9442
- indeterminate: indeterminate
9443
- }), checkboxContent = jsxRuntime.jsxs("div", {
9399
+ required: required,
9400
+ id: id,
9401
+ name: name,
9402
+ value: value,
9403
+ "aria-label": label ? void 0 : ariaLabel,
9404
+ "aria-describedby": ariaDescribedBy,
9405
+ "aria-invalid": invalid,
9406
+ ...props
9407
+ });
9408
+ let content;
9409
+ if (content = id && label ? jsxRuntime.jsxs("div", {
9444
9410
  className: checkboxClass,
9445
9411
  style: style,
9446
- children: [ jsxRuntime.jsx("input", {
9447
- ref: checkboxRef,
9448
- type: "checkbox",
9449
- className: "c-checkbox__input",
9450
- checked: checked,
9451
- onChange: onChange,
9452
- onClick: onClick,
9453
- disabled: disabled,
9454
- required: required,
9455
- id: id,
9456
- name: name,
9457
- value: value,
9458
- "aria-label": label ? void 0 : ariaLabel,
9459
- "aria-describedby": ariaDescribedBy,
9460
- "aria-invalid": invalid
9461
- }), label && jsxRuntime.jsx("label", {
9412
+ children: [ inputElement, jsxRuntime.jsx("label", {
9462
9413
  className: "c-checkbox__label",
9463
9414
  htmlFor: id,
9464
9415
  children: label
9465
9416
  }) ]
9466
- });
9467
- if (glass) {
9468
- // Default glass settings for checkboxes
9417
+ }) : label ? jsxRuntime.jsxs("label", {
9418
+ className: checkboxClass,
9419
+ style: style,
9420
+ children: [ inputElement, jsxRuntime.jsx("span", {
9421
+ className: "c-checkbox__label",
9422
+ children: label
9423
+ }) ]
9424
+ }) : jsxRuntime.jsx("div", {
9425
+ className: checkboxClass,
9426
+ style: style,
9427
+ children: inputElement
9428
+ }), glass) {
9469
9429
  const defaultGlassProps = {
9470
9430
  displacementScale: 40,
9471
9431
  blurAmount: 1,
@@ -9479,11 +9439,11 @@ function useCheckbox(initialProps) {
9479
9439
  };
9480
9440
  return jsxRuntime.jsx(AtomixGlass, {
9481
9441
  ...glassProps,
9482
- children: checkboxContent
9442
+ children: content
9483
9443
  });
9484
9444
  }
9485
- return checkboxContent;
9486
- }));
9445
+ return content;
9446
+ })));
9487
9447
 
9488
9448
  Checkbox.displayName = "Checkbox";
9489
9449
 
@@ -9669,18 +9629,6 @@ const DropdownContext = React.createContext({
9669
9629
 
9670
9630
  /**
9671
9631
  * DropdownItem component for menu items
9672
- */
9673
- /**
9674
- * Sanitize cell content to prevent CSV injection
9675
- */
9676
- function sanitizeCSVCell(cell) {
9677
- const sanitized = String(cell ?? "").replace(/[\r\n\t]/g, " ").replace(/"/g, '""');
9678
- // Prevent formula injection by prefixing dangerous characters
9679
- return /^[=+\-@]/.test(sanitized) ? `'${sanitized}` : sanitized;
9680
- }
9681
-
9682
- /**
9683
- * Export data as CSV
9684
9632
  */ Dropdown.displayName = "Dropdown", DropdownItem.displayName = "DropdownItem",
9685
9633
  DropdownDivider.displayName = "DropdownDivider", DropdownHeader.displayName = "DropdownHeader";
9686
9634
 
@@ -9759,7 +9707,11 @@ const DataTable = React.memo((({data: data, columns: columns, className: classN
9759
9707
  const defaultFilename = filename || "data-table";
9760
9708
  switch (format) {
9761
9709
  case "csv":
9762
- !function(data, columns, filename = "data-table.csv") {
9710
+ !
9711
+ /**
9712
+ * Export data as CSV
9713
+ */
9714
+ function(data, columns, filename = "data-table.csv") {
9763
9715
  if (!data.length || !columns.length) return;
9764
9716
  // Create headers
9765
9717
  const headers = columns.map((col => col.title || col.key)), rows = data.map((row => columns.map((col => {
@@ -12474,6 +12426,8 @@ function useSlider(options) {
12474
12426
  }
12475
12427
 
12476
12428
  // Button composables
12429
+ // export * from './useButton';
12430
+ // Accordion composables
12477
12431
  var composablesImport = Object.freeze({
12478
12432
  __proto__: null,
12479
12433
  DOTS: "...",
@@ -12483,12 +12437,10 @@ var composablesImport = Object.freeze({
12483
12437
  useBarChart: useBarChart,
12484
12438
  useBlock: useBlock,
12485
12439
  useBreadcrumb: useBreadcrumb,
12486
- useButton: useButton,
12487
12440
  useCard: useCard,
12488
12441
  useChartData: useChartData,
12489
12442
  useChartInteraction: useChartInteraction,
12490
12443
  useChartScale: useChartScale,
12491
- useCheckbox: useCheckbox,
12492
12444
  useDataTable: useDataTable,
12493
12445
  useEdgePanel: useEdgePanel,
12494
12446
  useForm: useForm,
@@ -18768,7 +18720,6 @@ var components = Object.freeze({
18768
18720
  FOOTER: FOOTER,
18769
18721
  FORM: FORM,
18770
18722
  FORM_GROUP: FORM_GROUP,
18771
- GLASS_CONTAINER: GLASS_CONTAINER,
18772
18723
  HERO: HERO,
18773
18724
  INPUT: INPUT,
18774
18725
  LIST: LIST,
@@ -24465,17 +24416,17 @@ exports.ElevationCard = ElevationCard, exports.FOOTER = FOOTER, exports.FORM = F
24465
24416
  exports.FORM_GROUP = FORM_GROUP, exports.Footer = Footer, exports.FooterLink = FooterLink,
24466
24417
  exports.FooterSection = FooterSection, exports.FooterSocialLink = FooterSocialLink,
24467
24418
  exports.Form = Form, exports.FormGroup = FormGroup, exports.FunnelChart = FunnelChart,
24468
- exports.GLASS_CONTAINER = GLASS_CONTAINER, exports.GaugeChart = GaugeChart, exports.Grid = Grid,
24469
- exports.GridCol = GridCol, exports.HERO = HERO, exports.HeatmapChart = HeatmapChart,
24470
- exports.Hero = Hero, exports.INPUT = INPUT, exports.INPUT_CSS_VARS = INPUT_CSS_VARS,
24471
- exports.Icon = Icon, exports.Input = Input, exports.LIST = LIST, exports.LIST_GROUP = LIST_GROUP,
24472
- exports.LineChart = LineChart, exports.List = List, exports.ListGroup = ListGroup,
24473
- exports.MESSAGES = MESSAGES, exports.MODAL = MODAL, exports.MODAL_CSS_VARS = MODAL_CSS_VARS,
24474
- exports.MasonryGrid = MasonryGrid, exports.MasonryGridItem = MasonryGridItem, exports.MegaMenu = MegaMenu,
24475
- exports.MegaMenuColumn = MegaMenuColumn, exports.MegaMenuLink = MegaMenuLink, exports.Menu = Menu,
24476
- exports.MenuDivider = MenuDivider, exports.MenuItem = MenuItem, exports.Messages = Messages,
24477
- exports.Modal = Modal, exports.MultiAxisChart = MultiAxisChart, exports.NAV = NAV,
24478
- exports.NAVBAR = NAVBAR, exports.Nav = Nav, exports.NavDropdown = NavDropdown, exports.NavItem = NavItem,
24419
+ exports.GaugeChart = GaugeChart, exports.Grid = Grid, exports.GridCol = GridCol,
24420
+ exports.HERO = HERO, exports.HeatmapChart = HeatmapChart, exports.Hero = Hero, exports.INPUT = INPUT,
24421
+ exports.INPUT_CSS_VARS = INPUT_CSS_VARS, exports.Icon = Icon, exports.Input = Input,
24422
+ exports.LIST = LIST, exports.LIST_GROUP = LIST_GROUP, exports.LineChart = LineChart,
24423
+ exports.List = List, exports.ListGroup = ListGroup, exports.MESSAGES = MESSAGES,
24424
+ exports.MODAL = MODAL, exports.MODAL_CSS_VARS = MODAL_CSS_VARS, exports.MasonryGrid = MasonryGrid,
24425
+ exports.MasonryGridItem = MasonryGridItem, exports.MegaMenu = MegaMenu, exports.MegaMenuColumn = MegaMenuColumn,
24426
+ exports.MegaMenuLink = MegaMenuLink, exports.Menu = Menu, exports.MenuDivider = MenuDivider,
24427
+ exports.MenuItem = MenuItem, exports.Messages = Messages, exports.Modal = Modal,
24428
+ exports.MultiAxisChart = MultiAxisChart, exports.NAV = NAV, exports.NAVBAR = NAVBAR,
24429
+ exports.Nav = Nav, exports.NavDropdown = NavDropdown, exports.NavItem = NavItem,
24479
24430
  exports.Navbar = Navbar, exports.PAGINATION_DEFAULTS = PAGINATION_DEFAULTS, exports.PHOTOVIEWER = PHOTOVIEWER,
24480
24431
  exports.POPOVER = POPOVER, exports.PROGRESS = PROGRESS, exports.PROGRESS_CSS_VARS = PROGRESS_CSS_VARS,
24481
24432
  exports.Pagination = Pagination, exports.PhotoViewer = PhotoViewer, exports.PieChart = PieChart,
@@ -24766,9 +24717,9 @@ function(theme, selector = ":root") {
24766
24717
  });
24767
24718
  }, exports.types = types, exports.unregisterTheme = unregisterTheme, exports.useAccordion = useAccordion,
24768
24719
  exports.useAtomixGlass = useAtomixGlass, exports.useBadge = useBadge, exports.useBarChart = useBarChart,
24769
- exports.useBlock = useBlock, exports.useBreadcrumb = useBreadcrumb, exports.useButton = useButton,
24770
- exports.useCard = useCard, exports.useChartData = useChartData, exports.useChartInteraction = useChartInteraction,
24771
- exports.useChartScale = useChartScale, exports.useCheckbox = useCheckbox, exports.useComponentCustomization =
24720
+ exports.useBlock = useBlock, exports.useBreadcrumb = useBreadcrumb, exports.useCard = useCard,
24721
+ exports.useChartData = useChartData, exports.useChartInteraction = useChartInteraction,
24722
+ exports.useChartScale = useChartScale, exports.useComponentCustomization =
24772
24723
  /**
24773
24724
  * Hook to merge theme overrides with component props
24774
24725
  *