@shohojdhara/atomix 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +101 -199
  2. package/atomix.config.ts +241 -0
  3. package/dist/atomix.css +260 -179
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +250 -179
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/charts.js +61 -66
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.js +47 -31
  10. package/dist/core.js.map +1 -1
  11. package/dist/forms.js +47 -31
  12. package/dist/forms.js.map +1 -1
  13. package/dist/heavy.js +47 -31
  14. package/dist/heavy.js.map +1 -1
  15. package/dist/index.d.ts +1841 -1633
  16. package/dist/index.esm.js +4975 -4113
  17. package/dist/index.esm.js.map +1 -1
  18. package/dist/index.js +5151 -4290
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.min.js +1 -1
  21. package/dist/index.min.js.map +1 -1
  22. package/dist/theme.d.ts +1572 -1442
  23. package/dist/theme.js +4816 -4080
  24. package/dist/theme.js.map +1 -1
  25. package/package.json +6 -20
  26. package/src/components/Accordion/Accordion.stories.tsx +50 -17
  27. package/src/components/AtomixGlass/AtomixGlass.tsx +65 -31
  28. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +11 -4
  29. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -32
  30. package/src/components/AtomixGlass/stories/Examples.stories.tsx +2 -2
  31. package/src/components/AtomixGlass/stories/shared-components.tsx +0 -31
  32. package/src/components/Avatar/Avatar.stories.tsx +7 -0
  33. package/src/components/Badge/Badge.stories.tsx +91 -13
  34. package/src/components/Block/Block.stories.tsx +7 -23
  35. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +7 -0
  36. package/src/components/Button/Button.stories.tsx +141 -22
  37. package/src/components/Button/ButtonGroup.stories.tsx +315 -0
  38. package/src/components/Button/ButtonGroup.tsx +67 -0
  39. package/src/components/Button/index.ts +2 -0
  40. package/src/components/Callout/Callout.stories.tsx +8 -6
  41. package/src/components/Card/Card.stories.tsx +82 -28
  42. package/src/components/Chart/AnimatedChart.tsx +0 -1
  43. package/src/components/Chart/AreaChart.tsx +0 -1
  44. package/src/components/Chart/BarChart.tsx +0 -1
  45. package/src/components/Chart/BubbleChart.tsx +0 -1
  46. package/src/components/Chart/CandlestickChart.tsx +0 -1
  47. package/src/components/Chart/Chart.stories.tsx +5 -7
  48. package/src/components/Chart/Chart.tsx +0 -16
  49. package/src/components/Chart/ChartRenderer.tsx +1 -1
  50. package/src/components/Chart/DonutChart.tsx +0 -1
  51. package/src/components/Chart/FunnelChart.tsx +0 -1
  52. package/src/components/Chart/GaugeChart.tsx +0 -1
  53. package/src/components/Chart/HeatmapChart.tsx +0 -1
  54. package/src/components/Chart/LineChart.tsx +0 -1
  55. package/src/components/Chart/MultiAxisChart.tsx +0 -1
  56. package/src/components/Chart/PieChart.tsx +0 -1
  57. package/src/components/Chart/RadarChart.tsx +0 -1
  58. package/src/components/Chart/ScatterChart.tsx +0 -1
  59. package/src/components/Chart/WaterfallChart.tsx +0 -1
  60. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +7 -0
  61. package/src/components/DataTable/DataTable.stories.tsx +23 -16
  62. package/src/components/DatePicker/DatePicker.stories.tsx +27 -19
  63. package/src/components/Dropdown/Dropdown.stories.tsx +11 -19
  64. package/src/components/EdgePanel/EdgePanel.stories.tsx +1 -0
  65. package/src/components/Footer/Footer.stories.tsx +8 -6
  66. package/src/components/Footer/FooterLink.tsx +9 -2
  67. package/src/components/Form/Checkbox.stories.tsx +7 -0
  68. package/src/components/Form/Form.stories.tsx +7 -0
  69. package/src/components/Form/FormGroup.stories.tsx +9 -1
  70. package/src/components/Form/Input.stories.tsx +69 -16
  71. package/src/components/Form/Radio.stories.tsx +9 -1
  72. package/src/components/Form/Select.stories.tsx +9 -1
  73. package/src/components/Form/Textarea.stories.tsx +10 -2
  74. package/src/components/Hero/Hero.stories.tsx +7 -0
  75. package/src/components/List/List.stories.tsx +7 -0
  76. package/src/components/Messages/Messages.stories.tsx +8 -7
  77. package/src/components/Modal/Modal.stories.tsx +17 -6
  78. package/src/components/Navigation/Menu/Menu.stories.tsx +7 -0
  79. package/src/components/Navigation/Nav/Nav.stories.tsx +7 -0
  80. package/src/components/Navigation/Navbar/Navbar.stories.tsx +1 -0
  81. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +1 -1
  82. package/src/components/Pagination/Pagination.stories.tsx +188 -111
  83. package/src/components/Pagination/Pagination.tsx +83 -3
  84. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -5
  85. package/src/components/Popover/Popover.stories.tsx +191 -115
  86. package/src/components/ProductReview/ProductReview.stories.tsx +80 -58
  87. package/src/components/Progress/Progress.stories.tsx +79 -49
  88. package/src/components/Rating/Rating.stories.tsx +109 -84
  89. package/src/components/River/River.stories.tsx +194 -114
  90. package/src/components/SectionIntro/SectionIntro.stories.tsx +19 -9
  91. package/src/components/Slider/Slider.stories.tsx +7 -0
  92. package/src/components/Spinner/Spinner.stories.tsx +15 -11
  93. package/src/components/Steps/Steps.stories.tsx +132 -98
  94. package/src/components/Tabs/Tabs.stories.tsx +163 -112
  95. package/src/components/Testimonial/Testimonial.stories.tsx +114 -68
  96. package/src/components/Todo/Todo.stories.tsx +38 -12
  97. package/src/components/Toggle/Toggle.stories.tsx +61 -28
  98. package/src/components/Tooltip/Tooltip.stories.tsx +318 -200
  99. package/src/components/Upload/Upload.stories.tsx +122 -84
  100. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +7 -24
  101. package/src/components/index.ts +1 -0
  102. package/src/lib/composables/useAtomixGlass.ts +2 -3
  103. package/src/lib/composables/useNavbar.ts +0 -10
  104. package/src/lib/config/loader.ts +2 -1
  105. package/src/lib/constants/components.ts +10 -0
  106. package/src/lib/hooks/useComponentCustomization.ts +1 -1
  107. package/src/lib/theme/README.md +174 -0
  108. package/src/lib/theme/adapters/index.ts +31 -0
  109. package/src/lib/theme/adapters/themeAdapter.ts +287 -0
  110. package/src/lib/theme/config/__tests__/configLoader.test.ts +207 -0
  111. package/src/lib/theme/config/configLoader.ts +254 -0
  112. package/src/lib/theme/config/loader.ts +37 -48
  113. package/src/lib/theme/config/types.ts +2 -2
  114. package/src/lib/theme/config/validator.ts +15 -91
  115. package/src/lib/theme/{constants.ts → constants/constants.ts} +0 -18
  116. package/src/lib/theme/constants/index.ts +8 -0
  117. package/src/lib/theme/core/ThemeRegistry.ts +19 -6
  118. package/src/lib/theme/core/__tests__/createTheme.test.ts +132 -0
  119. package/src/lib/theme/core/composeTheme.ts +155 -0
  120. package/src/lib/theme/core/createTheme.ts +94 -0
  121. package/src/lib/theme/{createTheme.ts → core/createThemeObject.ts} +10 -6
  122. package/src/lib/theme/core/index.ts +5 -19
  123. package/src/lib/theme/devtools/Comparator.tsx +346 -22
  124. package/src/lib/theme/devtools/IMPROVEMENTS.md +139 -38
  125. package/src/lib/theme/devtools/Inspector.tsx +335 -51
  126. package/src/lib/theme/devtools/LiveEditor.tsx +478 -107
  127. package/src/lib/theme/devtools/Preview.tsx +471 -221
  128. package/src/lib/theme/{core → devtools}/ThemeValidator.ts +1 -1
  129. package/src/lib/theme/devtools/index.ts +14 -4
  130. package/src/lib/theme/devtools/useHistory.ts +130 -0
  131. package/src/lib/theme/errors/index.ts +12 -0
  132. package/src/lib/theme/generators/cssFile.ts +79 -0
  133. package/src/lib/theme/generators/generateCSS.ts +89 -0
  134. package/src/lib/theme/{generateCSSVariables.ts → generators/generateCSSVariables.ts} +3 -13
  135. package/src/lib/theme/generators/index.ts +19 -0
  136. package/src/lib/theme/i18n/rtl.ts +5 -6
  137. package/src/lib/theme/index.ts +120 -15
  138. package/src/lib/theme/runtime/ThemeApplicator.ts +52 -111
  139. package/src/lib/theme/{ThemeContext.tsx → runtime/ThemeContext.tsx} +1 -1
  140. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +1 -1
  141. package/src/lib/theme/runtime/ThemeProvider.tsx +456 -179
  142. package/src/lib/theme/runtime/index.ts +1 -2
  143. package/src/lib/theme/runtime/useTheme.ts +1 -2
  144. package/src/lib/theme/test/testTheme.ts +385 -0
  145. package/src/lib/theme/tokens/index.ts +12 -0
  146. package/src/lib/theme/tokens/tokens.ts +721 -0
  147. package/src/lib/theme/types.ts +6 -42
  148. package/src/lib/theme/{utils.ts → utils/domUtils.ts} +2 -2
  149. package/src/lib/theme/utils/index.ts +11 -0
  150. package/src/lib/theme/utils/injectCSS.ts +90 -0
  151. package/src/lib/theme/utils/themeHelpers.ts +78 -0
  152. package/src/lib/theme/{themeUtils.ts → utils/themeUtils.ts} +1 -1
  153. package/src/lib/theme-tools.ts +7 -8
  154. package/src/lib/types/components.ts +40 -130
  155. package/src/lib/utils/componentUtils.ts +1 -1
  156. package/src/styles/01-settings/_settings.design-tokens.scss +4 -1
  157. package/src/styles/02-tools/_tools.button.scss +66 -79
  158. package/src/styles/06-components/_components.atomix-glass.scss +13 -3
  159. package/src/styles/06-components/_components.pagination.scss +88 -0
  160. package/scripts/sync-theme-config.js +0 -309
  161. package/src/lib/theme/composeTheme.ts +0 -370
  162. package/src/lib/theme/core/ThemeCache.ts +0 -283
  163. package/src/lib/theme/core/ThemeEngine.test.ts +0 -146
  164. package/src/lib/theme/core/ThemeEngine.ts +0 -665
  165. package/src/lib/theme/createThemeFromConfig.ts +0 -132
  166. package/src/lib/theme/devtools/CLI.ts +0 -364
  167. package/src/lib/theme/runtime/ThemeManager.test.ts +0 -192
  168. package/src/lib/theme/runtime/ThemeManager.ts +0 -446
  169. package/src/styles/03-generic/_generated-root.css +0 -26
  170. package/src/themes/README.md +0 -442
  171. package/src/themes/themes.config.js +0 -68
  172. /package/src/lib/theme/{cssVariableMapper.ts → adapters/cssVariableMapper.ts} +0 -0
  173. /package/src/lib/theme/{errors.ts → errors/errors.ts} +0 -0
package/dist/charts.js CHANGED
@@ -1730,10 +1730,11 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
1730
1730
  width: 0,
1731
1731
  height: 0
1732
1732
  }, onClick: onClick, mode: mode = "standard", effectiveDisableEffects: effectiveDisableEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", enableLiquidBlur: enableLiquidBlur = !1, elasticity: elasticity = 0, contentRef: contentRef}, ref) => {
1733
- // Use React's useId() for SSR compatibility
1734
- // Note: In Next.js, IDs may differ between server and client
1735
- // We'll suppress hydration warnings on elements that use this ID
1736
- const filterId = useId(), [shaderMapUrl, setShaderMapUrl] = useState(""), shaderGeneratorRef = useRef(null), shaderUtilsRef = useRef(null), shaderDebounceTimeoutRef = useRef(null);
1733
+ // Generate a stable, deterministic ID for SSR compatibility
1734
+ // React's useId() should produce the same ID on server and client for the same
1735
+ // component position in the tree. We use useState to ensure the ID is only
1736
+ // generated once and remains stable across renders.
1737
+ const baseId = useId(), [filterId] = useState((() => `atomix-glass-filter-${baseId.replace(/:/g, "-").replace(/^[^a-z]/i, "atomix-")}`)), [shaderMapUrl, setShaderMapUrl] = useState(""), shaderGeneratorRef = useRef(null), shaderUtilsRef = useRef(null), shaderDebounceTimeoutRef = useRef(null);
1737
1738
  // Lazy load shader utilities only when shader mode is needed
1738
1739
  useEffect((() => {
1739
1740
  "shader" === mode ?
@@ -2533,7 +2534,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2533
2534
  * <div>Content with debug logging enabled</div>
2534
2535
  * </AtomixGlass>
2535
2536
  */ function AtomixGlass({children: children, displacementScale: displacementScale = ATOMIX_GLASS.DEFAULTS.DISPLACEMENT_SCALE, blurAmount: blurAmount = ATOMIX_GLASS.DEFAULTS.BLUR_AMOUNT, saturation: saturation = ATOMIX_GLASS.DEFAULTS.SATURATION, aberrationIntensity: aberrationIntensity = ATOMIX_GLASS.DEFAULTS.ABERRATION_INTENSITY, elasticity: elasticity = ATOMIX_GLASS.DEFAULTS.ELASTICITY, cornerRadius: cornerRadius, globalMousePosition: externalGlobalMousePosition, mouseOffset: externalMouseOffset, mouseContainer: mouseContainer = null, className: className = "", padding: padding = ATOMIX_GLASS.DEFAULTS.PADDING, overLight: overLight = ATOMIX_GLASS.DEFAULTS.OVER_LIGHT, style: style = {}, mode: mode = ATOMIX_GLASS.DEFAULTS.MODE, onClick: onClick, shaderVariant: shaderVariant = "liquidGlass", "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, reducedMotion: reducedMotion = !1, highContrast: highContrast = !1, disableEffects: disableEffects = !1, enableLiquidBlur: enableLiquidBlur = !1, enableBorderEffect: enableBorderEffect = !0, enableOverLightLayers: enableOverLightLayers = ATOMIX_GLASS.DEFAULTS.ENABLE_OVER_LIGHT_LAYERS, enablePerformanceMonitoring: enablePerformanceMonitoring = !1, debugCornerRadius: debugCornerRadius = !1, debugOverLight: debugOverLight = !1}) {
2536
- const glassRef = useRef(null), contentRef = useRef(null), opacityCacheRef = useRef(null), {isHovered: isHovered, isActive: isActive, glassSize: glassSize, effectiveCornerRadius: effectiveCornerRadius, effectiveReducedMotion: effectiveReducedMotion, effectiveHighContrast: effectiveHighContrast, effectiveDisableEffects: effectiveDisableEffects, overLightConfig: overLightConfig, globalMousePosition: globalMousePosition, mouseOffset: mouseOffset, transformStyle: transformStyle, handleMouseEnter: handleMouseEnter, handleMouseLeave: handleMouseLeave, handleMouseDown: handleMouseDown, handleMouseUp: handleMouseUp, handleKeyDown: handleKeyDown} = useAtomixGlass({
2537
+ const glassRef = useRef(null), contentRef = useRef(null), opacityCacheRef = useRef(null), rgbCacheRef = useRef(null), {isHovered: isHovered, isActive: isActive, glassSize: glassSize, effectiveCornerRadius: effectiveCornerRadius, effectiveReducedMotion: effectiveReducedMotion, effectiveHighContrast: effectiveHighContrast, effectiveDisableEffects: effectiveDisableEffects, overLightConfig: overLightConfig, globalMousePosition: globalMousePosition, mouseOffset: mouseOffset, transformStyle: transformStyle, handleMouseEnter: handleMouseEnter, handleMouseLeave: handleMouseLeave, handleMouseDown: handleMouseDown, handleMouseUp: handleMouseUp, handleKeyDown: handleKeyDown} = useAtomixGlass({
2537
2538
  glassRef: glassRef,
2538
2539
  contentRef: contentRef,
2539
2540
  cornerRadius: cornerRadius,
@@ -2553,26 +2554,43 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2553
2554
  }), isOverLight = overLightConfig.isOverLight, shouldRenderOverLightLayers = enableOverLightLayers && isOverLight;
2554
2555
  // Read CSS custom properties once on mount and cache them
2555
2556
  useEffect((() => {
2556
- if ("undefined" != typeof window && glassRef.current && !opacityCacheRef.current) try {
2557
- const computedStyle = window.getComputedStyle(glassRef.current), opacity50Value = computedStyle.getPropertyValue("--atomix-opacity-50").trim(), opacity40Value = computedStyle.getPropertyValue("--atomix-opacity-40").trim(), opacity80Value = computedStyle.getPropertyValue("--atomix-opacity-80").trim(), opacity0Value = computedStyle.getPropertyValue("--atomix-opacity-0").trim(), parseOpacity = (value, defaultValue) => {
2558
- if (!value) return defaultValue;
2559
- const parsed = parseFloat(value);
2560
- return isNaN(parsed) ? defaultValue : parsed;
2561
- };
2562
- opacityCacheRef.current = {
2563
- opacity50: parseOpacity(opacity50Value, .5),
2564
- opacity40: parseOpacity(opacity40Value, .4),
2565
- opacity80: parseOpacity(opacity80Value, .8),
2566
- opacity0: parseOpacity(opacity0Value, 0)
2567
- };
2557
+ if ("undefined" != typeof window && glassRef.current) try {
2558
+ const computedStyle = window.getComputedStyle(glassRef.current);
2559
+ // Cache opacity values
2560
+ if (!opacityCacheRef.current) {
2561
+ const opacity50Value = computedStyle.getPropertyValue("--atomix-opacity-50").trim(), opacity40Value = computedStyle.getPropertyValue("--atomix-opacity-40").trim(), opacity80Value = computedStyle.getPropertyValue("--atomix-opacity-80").trim(), opacity0Value = computedStyle.getPropertyValue("--atomix-opacity-0").trim(), parseOpacity = (value, defaultValue) => {
2562
+ if (!value) return defaultValue;
2563
+ const parsed = parseFloat(value);
2564
+ return isNaN(parsed) ? defaultValue : parsed;
2565
+ };
2566
+ opacityCacheRef.current = {
2567
+ opacity50: parseOpacity(opacity50Value, .5),
2568
+ opacity40: parseOpacity(opacity40Value, .4),
2569
+ opacity80: parseOpacity(opacity80Value, .8),
2570
+ opacity0: parseOpacity(opacity0Value, 0)
2571
+ };
2572
+ }
2573
+ // Cache RGB color values from design tokens
2574
+ if (!rgbCacheRef.current) {
2575
+ // Try to read from design tokens, fallback to defaults
2576
+ const whiteRgbValue = computedStyle.getPropertyValue("--atomix-light-rgb").trim() || computedStyle.getPropertyValue("--atomix-white-rgb").trim() || "", blackRgbValue = computedStyle.getPropertyValue("--atomix-dark-rgb").trim() || computedStyle.getPropertyValue("--atomix-black-rgb").trim() || "";
2577
+ rgbCacheRef.current = {
2578
+ whiteRgb: whiteRgbValue || "255, 255, 255",
2579
+ // Fallback to white RGB
2580
+ blackRgb: blackRgbValue || "0, 0, 0"
2581
+ };
2582
+ }
2568
2583
  } catch (error) {
2569
2584
  // Fallback to defaults if reading fails
2570
- opacityCacheRef.current = {
2585
+ opacityCacheRef.current || (opacityCacheRef.current = {
2571
2586
  opacity50: .5,
2572
2587
  opacity40: .4,
2573
2588
  opacity80: .8,
2574
2589
  opacity0: 0
2575
- };
2590
+ }), rgbCacheRef.current || (rgbCacheRef.current = {
2591
+ whiteRgb: "255, 255, 255",
2592
+ blackRgb: "0, 0, 0"
2593
+ });
2576
2594
  }
2577
2595
  }), []);
2578
2596
  // Calculate base style with transforms (only dynamic values)
@@ -2623,13 +2641,11 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2623
2641
  };
2624
2642
  }), [ isHovered, isActive, isOverLight, overLightOpacity ]), gradientIsOverLight = gradientCalculations.isOverLight, gradientMx = gradientCalculations.mx, gradientMy = gradientCalculations.my, gradientBorderGradientAngle = gradientCalculations.borderGradientAngle, gradientBorderStop1 = gradientCalculations.borderStop1, gradientBorderStop2 = gradientCalculations.borderStop2, gradientBorderOpacity1 = gradientCalculations.borderOpacity1, gradientBorderOpacity2 = gradientCalculations.borderOpacity2, gradientBorderOpacity3 = gradientCalculations.borderOpacity3, gradientBorderOpacity4 = gradientCalculations.borderOpacity4, gradientHover1X = gradientCalculations.hover1X, gradientHover1Y = gradientCalculations.hover1Y, gradientHover2X = gradientCalculations.hover2X, gradientHover2Y = gradientCalculations.hover2Y, gradientHover3X = gradientCalculations.hover3X, gradientHover3Y = gradientCalculations.hover3Y, gradientBaseX = gradientCalculations.baseX, gradientBaseY = gradientCalculations.baseY, positionStylesPosition = positionStyles.position, positionStylesTop = positionStyles.top, positionStylesLeft = positionStyles.left, adjustedSizeWidth = adjustedSize.width, adjustedSizeHeight = adjustedSize.height, baseStyleTransform = baseStyle.transform, opacityValuesHover1 = opacityValues.hover1, opacityValuesHover2 = opacityValues.hover2, opacityValuesHover3 = opacityValues.hover3, opacityValuesBase = opacityValues.base, opacityValuesOver = opacityValues.over, glassVars = useMemo((() => {
2625
2643
  // RGB color values for rgba() functions
2626
- // Note: CSS doesn't support rgba(var(--rgb), opacity) syntax, so we use direct values
2627
- // These values align with design tokens: --atomix-white-rgb and --atomix-black-rgb
2628
- // The actual RGB values are defined in SCSS and should match these fallbacks
2629
- // TODO: Consider reading from CSS custom properties if browser support improves
2630
- const whiteColor = "255, 255, 255";
2631
- // Matches --atomix-white-rgb design token
2632
- // Matches --atomix-black-rgb design token
2644
+ // Note: CSS doesn't support rgba(var(--rgb), opacity) syntax - this is a CSS specification
2645
+ // limitation, not a browser support issue. We read RGB values from design tokens at mount
2646
+ // and cache them for performance. Falls back to defaults if tokens are not available.
2647
+ // Uses design tokens: --atomix-light-rgb / --atomix-white-rgb and --atomix-dark-rgb / --atomix-black-rgb
2648
+ const whiteColor = rgbCacheRef.current?.whiteRgb || "255, 255, 255", blackColor = rgbCacheRef.current?.blackRgb || "0, 0, 0";
2633
2649
  return {
2634
2650
  // Standard CSS custom properties for dynamic values
2635
2651
  "--atomix-glass-radius": `${effectiveCornerRadius}px`,
@@ -2647,15 +2663,15 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
2647
2663
  "--atomix-glass-border-gradient-1": `linear-gradient(${gradientBorderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${gradientBorderOpacity1}) ${gradientBorderStop1}%, rgba(${whiteColor}, ${gradientBorderOpacity2}) ${gradientBorderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2648
2664
  "--atomix-glass-border-gradient-2": `linear-gradient(${gradientBorderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${gradientBorderOpacity3}) ${gradientBorderStop1}%, rgba(${whiteColor}, ${gradientBorderOpacity4}) ${gradientBorderStop2}%, rgba(${whiteColor}, 0) 100%)`,
2649
2665
  "--atomix-glass-hover-1-opacity": opacityValuesHover1,
2650
- "--atomix-glass-hover-1-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover1X}% ${gradientHover1Y}%, 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 ${gradientHover1X}% ${gradientHover1Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_STOP}%)`,
2666
+ "--atomix-glass-hover-1-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover1X}% ${gradientHover1Y}%, 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 ${gradientHover1X}% ${gradientHover1Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_STOP}%)`,
2651
2667
  "--atomix-glass-hover-2-opacity": opacityValuesHover2,
2652
- "--atomix-glass-hover-2-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover2X}% ${gradientHover2Y}%, 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 ${gradientHover2X}% ${gradientHover2Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_STOP}%)`,
2668
+ "--atomix-glass-hover-2-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover2X}% ${gradientHover2Y}%, 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 ${gradientHover2X}% ${gradientHover2Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_STOP}%)`,
2653
2669
  "--atomix-glass-hover-3-opacity": opacityValuesHover3,
2654
- "--atomix-glass-hover-3-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover3X}% ${gradientHover3Y}%, 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 ${gradientHover3X}% ${gradientHover3Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_STOP}%)`,
2670
+ "--atomix-glass-hover-3-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientHover3X}% ${gradientHover3Y}%, 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 ${gradientHover3X}% ${gradientHover3Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_STOP}%)`,
2655
2671
  "--atomix-glass-base-opacity": opacityValuesBase,
2656
- "--atomix-glass-base-gradient": gradientIsOverLight ? `linear-gradient(${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.ANGLE}deg, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_BASE + gradientMx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_BASE + gradientMy * 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 + Math.abs(gradientMx) * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.WHITE_OPACITY})`,
2672
+ "--atomix-glass-base-gradient": gradientIsOverLight ? `linear-gradient(${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.ANGLE}deg, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_BASE + gradientMx * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_START_MULTIPLIER}) 0%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_MID_BASE + gradientMy * 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 + Math.abs(gradientMx) * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.WHITE_OPACITY})`,
2657
2673
  "--atomix-glass-overlay-opacity": opacityValuesOver,
2658
- "--atomix-glass-overlay-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientBaseX}% ${gradientBaseY}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_BASE + Math.abs(gradientMx) * 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 + Math.abs(gradientMy) * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`
2674
+ "--atomix-glass-overlay-gradient": gradientIsOverLight ? `radial-gradient(circle at ${gradientBaseX}% ${gradientBaseY}%, rgba(${blackColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_BASE + Math.abs(gradientMx) * 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 + Math.abs(gradientMy) * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`
2659
2675
  };
2660
2676
  }), [
2661
2677
  // Position styles - only specific properties
@@ -3175,16 +3191,8 @@ toolbarConfig: toolbarConfig, customToolbarActions: customToolbarActions, custom
3175
3191
  interactive: interactive,
3176
3192
  panEnabled: panEnabled
3177
3193
  });
3178
- // Legacy handlers for backward compatibility
3179
- useCallback((() => {
3180
- toolbarHandlers.onFullscreen(!toolbarState.isFullscreen);
3181
- }), [ toolbarHandlers, toolbarState.isFullscreen ]), useCallback((async format => {
3182
- await toolbarHandlers.onExport(format);
3183
- }), [ toolbarHandlers ]), useCallback((() => {
3184
- toolbarHandlers.onRefresh();
3185
- }), [ toolbarHandlers ]),
3186
3194
  // Sync all toolbar state with component state
3187
- useEffect((() => {
3195
+ useEffect((() => {
3188
3196
  setIsFullscreen(toolbarState.isFullscreen), setIsExporting(toolbarState.isExporting);
3189
3197
  }), [ toolbarState.isFullscreen, toolbarState.isExporting ]);
3190
3198
  // Render enhanced toolbar
@@ -4048,8 +4056,7 @@ const AreaChart = memo( forwardRef((({datasets: datasets = [], config: config =
4048
4056
  config: config,
4049
4057
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4050
4058
  if (!renderedDatasets.length) return null;
4051
- // Use toolbar state if available, fallback to config for backward compatibility
4052
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
4059
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
4053
4060
  return jsxs(Fragment, {
4054
4061
  children: [ renderedDatasets.map(((dataset, datasetIndex) => {
4055
4062
  const color = dataset.color || colors[datasetIndex], data = dataset.data || [];
@@ -4249,8 +4256,7 @@ const BarChart = memo( forwardRef((({datasets: datasets = [], config: config =
4249
4256
  config: config,
4250
4257
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4251
4258
  if (!renderedDatasets.length) return null;
4252
- // Use toolbar state if available, fallback to config for backward compatibility
4253
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, barDimensions = calculateBarDimensions(renderedDatasets, scales.width, scales.height, scales.padding, horizontal);
4259
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, barDimensions = calculateBarDimensions(renderedDatasets, scales.width, scales.height, scales.padding, horizontal);
4254
4260
  return jsxs(Fragment, {
4255
4261
  children: [ barDimensions.map(((bar, index) => {
4256
4262
  const dataset = renderedDatasets[bar.datasetIndex];
@@ -4309,8 +4315,7 @@ const BubbleChart = memo( forwardRef((({bubbleData: bubbleData = [], config: co
4309
4315
  config: config,
4310
4316
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4311
4317
  if (!bubbleData.length) return null;
4312
- // Use toolbar state if available, fallback to config for backward compatibility
4313
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, sizeValues = bubbleData.map((b => b.size)), minSize = Math.min(...sizeValues), sizeRange = Math.max(...sizeValues) - minSize || 1, bubbles = bubbleData.map(((bubble, index) => {
4318
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, sizeValues = bubbleData.map((b => b.size)), minSize = Math.min(...sizeValues), sizeRange = Math.max(...sizeValues) - minSize || 1, bubbles = bubbleData.map(((bubble, index) => {
4314
4319
  // Calculate scaled size
4315
4320
  const scaledSize = minBubbleSize + (bubble.size - minSize) / sizeRange * (maxBubbleSize - minBubbleSize), x = scales.padding.left + bubble.x / 100 * scales.innerWidth, y = scales.padding.top + scales.innerHeight - bubble.y / 100 * scales.innerHeight;
4316
4321
  // Calculate position
@@ -4394,8 +4399,7 @@ const CandlestickChart = memo( forwardRef((({candlestickData: candlestickData =
4394
4399
  config: config,
4395
4400
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4396
4401
  if (!candlestickData.length) return null;
4397
- // Use toolbar state if available, fallback to config for backward compatibility
4398
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? candlestickOptions.showTooltips ?? !0, chartWidth = scales.width - 80, chartHeight = scales.height - 80, volumeHeight = showVolume ? chartHeight * volumeHeightRatio : 0, priceHeight = chartHeight - volumeHeight, allHighs = candlestickData.map((d => d.high)), allLows = candlestickData.map((d => d.low)), priceMin = Math.min(...allLows), priceMax = Math.max(...allHighs), priceRange = priceMax - priceMin || 1, volumes = candlestickData.map((d => d.volume || 0)), volumeRange = Math.max(...volumes) || 1, gridLines = [];
4402
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? candlestickOptions.showTooltips ?? !0, chartWidth = scales.width - 80, chartHeight = scales.height - 80, volumeHeight = showVolume ? chartHeight * volumeHeightRatio : 0, priceHeight = chartHeight - volumeHeight, allHighs = candlestickData.map((d => d.high)), allLows = candlestickData.map((d => d.low)), priceMin = Math.min(...allLows), priceMax = Math.max(...allHighs), priceRange = priceMax - priceMin || 1, volumes = candlestickData.map((d => d.volume || 0)), volumeRange = Math.max(...volumes) || 1, gridLines = [];
4399
4403
  if (showGrid) {
4400
4404
  // Horizontal grid lines for price
4401
4405
  for (let i = 0; i <= 5; i++) {
@@ -4572,8 +4576,7 @@ const DonutChart = memo( forwardRef((({datasets: datasets = [], config: config
4572
4576
  percentage: point.value / total * 100
4573
4577
  };
4574
4578
  })), showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
4575
- // Use toolbar state if available, fallback to config for backward compatibility
4576
- return jsxs(Fragment, {
4579
+ return jsxs(Fragment, {
4577
4580
  children: [ slices.map(((slice, index) => {
4578
4581
  const isHovered = hoveredPoint?.pointIndex === index;
4579
4582
  return jsxs("g", {
@@ -4648,8 +4651,7 @@ const FunnelChart = memo( forwardRef((({funnelData: funnelData = [], config: co
4648
4651
  config: config,
4649
4652
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4650
4653
  if (!funnelData.length) return null;
4651
- // Use toolbar state if available, fallback to config for backward compatibility
4652
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, maxValue = Math.max(...funnelData.map((d => d.value))), processedData = funnelData.map(((item, index) => {
4654
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, maxValue = Math.max(...funnelData.map((d => d.value))), processedData = funnelData.map(((item, index) => {
4653
4655
  const percentage = item.value / maxValue * 100, conversionRate = index > 0 && funnelData[index - 1] ? item.value / funnelData[index - 1].value * 100 : 100;
4654
4656
  return {
4655
4657
  ...item,
@@ -4767,8 +4769,7 @@ const GaugeChart = memo( forwardRef((({value: value, min: min = 0, max: max = 1
4767
4769
  const innerRadius = radius * (1 - thickness), x1 = centerX + radius * Math.cos(startAngle), y1 = centerY + radius * Math.sin(startAngle), x2 = centerX + radius * Math.cos(endAngle), y2 = centerY + radius * Math.sin(endAngle), x3 = centerX + innerRadius * Math.cos(endAngle), y3 = centerY + innerRadius * Math.sin(endAngle), x4 = centerX + innerRadius * Math.cos(startAngle), y4 = centerY + innerRadius * Math.sin(startAngle), largeArcFlag = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0, sweepFlag = endAngle > startAngle ? 1 : 0;
4768
4770
  return `M ${x1} ${y1} \n A ${radius} ${radius} 0 ${largeArcFlag} ${sweepFlag} ${x2} ${y2}\n L ${x3} ${y3}\n A ${innerRadius} ${innerRadius} 0 ${largeArcFlag} ${1 - sweepFlag} ${x4} ${y4}\n Z`;
4769
4771
  }, zones = [];
4770
- // Use toolbar state if available, fallback to config for backward compatibility
4771
- for (const zone of colorZones) {
4772
+ for (const zone of colorZones) {
4772
4773
  const zoneStart = startAngleRad + (zone.from - min) / (max - min) * angleRange, zoneEnd = startAngleRad + (zone.to - min) / (max - min) * angleRange;
4773
4774
  zones.push(jsx("path", {
4774
4775
  d: createArcPath(centerX, centerY, radius, zoneStart, zoneEnd, thickness),
@@ -4942,8 +4943,7 @@ const colorSchemes = {
4942
4943
  config: config,
4943
4944
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
4944
4945
  const {matrix: matrix, xLabels: xLabels, yLabels: yLabels} = processedData, showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
4945
- // Use toolbar state if available, fallback to config for backward compatibility
4946
- if (!matrix.length) return null;
4946
+ if (!matrix.length) return null;
4947
4947
  const cellWidth = cellConfig.width || 40, cellHeight = cellConfig.height || 40, spacing = cellConfig.spacing || 2, borderRadius = cellConfig.borderRadius || 4;
4948
4948
  // Leave space for x-axis labels
4949
4949
  return xLabels.length, yLabels.length, jsxs(Fragment, {
@@ -5211,8 +5211,7 @@ const LineChart = memo( forwardRef((({datasets: datasets = [], config: config =
5211
5211
  config: config,
5212
5212
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
5213
5213
  if (!renderedDatasets.length) return null;
5214
- // Use toolbar state if available, fallback to config for backward compatibility
5215
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
5214
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
5216
5215
  return toolbarState?.animationsEnabled ?? renderConfig?.animate ?? mergedLineOptions.smooth,
5217
5216
  jsxs(Fragment, {
5218
5217
  children: [ renderedDatasets.map(((dataset, datasetIndex) => {
@@ -5300,8 +5299,7 @@ const MultiAxisChart = memo( forwardRef((({datasets: datasets = [], config: con
5300
5299
  config: config,
5301
5300
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
5302
5301
  if (!datasets.length) return null;
5303
- // Use toolbar state if available, fallback to config for backward compatibility
5304
- const effectiveShowGrid = toolbarState?.showGrid ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, yAxisConfigs = yAxes.length ? yAxes : [ {
5302
+ const effectiveShowGrid = toolbarState?.showGrid ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, yAxisConfigs = yAxes.length ? yAxes : [ {
5305
5303
  id: "y-axis-1",
5306
5304
  position: "left",
5307
5305
  label: "Y Axis"
@@ -5599,8 +5597,7 @@ const RadarChart = memo( forwardRef((({datasets: datasets = [], config: config
5599
5597
  config: config,
5600
5598
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
5601
5599
  if (!renderedDatasets.length) return null;
5602
- // Use toolbar state if available, fallback to config for backward compatibility
5603
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, centerX = scales.width / 2, centerY = scales.height / 2, radius = .8 * Math.min(centerX, centerY), firstDataset = renderedDatasets[0];
5600
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, centerX = scales.width / 2, centerY = scales.height / 2, radius = .8 * Math.min(centerX, centerY), firstDataset = renderedDatasets[0];
5604
5601
  if (!firstDataset) return null;
5605
5602
  const dataPoints = firstDataset.data || [], angleStep = 2 * Math.PI / dataPoints.length;
5606
5603
  // Calculate value bounds
@@ -5746,8 +5743,7 @@ const ScatterChart = memo( forwardRef((({datasets: datasets = [], config: confi
5746
5743
  config: config,
5747
5744
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
5748
5745
  if (!renderedDatasets.length) return null;
5749
- // Use toolbar state if available, fallback to config for backward compatibility
5750
- const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, points = [];
5746
+ const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, points = [];
5751
5747
  return renderedDatasets.forEach(((dataset, datasetIndex) => {
5752
5748
  const color = dataset.color || colors[datasetIndex % colors.length];
5753
5749
  dataset.data?.forEach(((point, pointIndex) => {
@@ -6034,8 +6030,7 @@ const WaterfallChart = memo( forwardRef((({waterfallData: waterfallData = [], c
6034
6030
  config: config,
6035
6031
  renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
6036
6032
  if (!waterfallData.length) return null;
6037
- // Use toolbar state if available, fallback to config for backward compatibility
6038
- const shouldAnimate = toolbarState?.animationsEnabled ?? renderConfig?.animate ?? animate, chartWidth = scales.width - 120, chartHeight = scales.height - 120;
6033
+ const shouldAnimate = toolbarState?.animationsEnabled ?? renderConfig?.animate ?? animate, chartWidth = scales.width - 120, chartHeight = scales.height - 120;
6039
6034
  // Calculate cumulative values and positions
6040
6035
  let cumulativeValue = 0;
6041
6036
  const processedData = waterfallData.map(((item, index) => {