@shohojdhara/atomix 0.3.5 → 0.3.7
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.
- package/README.md +101 -199
- package/atomix.config.ts +241 -0
- package/dist/atomix.css +260 -179
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +250 -179
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.js +69 -166
- package/dist/charts.js.map +1 -1
- package/dist/core.js +184 -263
- package/dist/core.js.map +1 -1
- package/dist/forms.js +55 -131
- package/dist/forms.js.map +1 -1
- package/dist/heavy.js +184 -263
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +1831 -1657
- package/dist/index.esm.js +4497 -4318
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +4510 -4328
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/theme.d.ts +1431 -1472
- package/dist/theme.js +4175 -4138
- package/dist/theme.js.map +1 -1
- package/package.json +6 -20
- package/src/components/Accordion/Accordion.stories.tsx +50 -17
- package/src/components/AtomixGlass/AtomixGlass.tsx +128 -322
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +12 -5
- package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1 -32
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +2 -2
- package/src/components/AtomixGlass/stories/shared-components.tsx +0 -31
- package/src/components/Avatar/Avatar.stories.tsx +7 -0
- package/src/components/Badge/Badge.stories.tsx +91 -13
- package/src/components/Block/Block.stories.tsx +7 -23
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +7 -0
- package/src/components/Button/Button.stories.tsx +141 -22
- package/src/components/Button/Button.tsx +85 -167
- package/src/components/Button/ButtonGroup.stories.tsx +315 -0
- package/src/components/Button/ButtonGroup.tsx +67 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Callout/Callout.stories.tsx +8 -6
- package/src/components/Card/Card.stories.tsx +82 -28
- package/src/components/Chart/AnimatedChart.tsx +0 -1
- package/src/components/Chart/AreaChart.tsx +0 -1
- package/src/components/Chart/BarChart.tsx +0 -1
- package/src/components/Chart/BubbleChart.tsx +0 -1
- package/src/components/Chart/CandlestickChart.tsx +0 -1
- package/src/components/Chart/Chart.stories.tsx +5 -7
- package/src/components/Chart/Chart.tsx +0 -16
- package/src/components/Chart/ChartRenderer.tsx +1 -1
- package/src/components/Chart/DonutChart.tsx +0 -1
- package/src/components/Chart/FunnelChart.tsx +0 -1
- package/src/components/Chart/GaugeChart.tsx +0 -1
- package/src/components/Chart/HeatmapChart.tsx +0 -1
- package/src/components/Chart/LineChart.tsx +0 -1
- package/src/components/Chart/MultiAxisChart.tsx +0 -1
- package/src/components/Chart/PieChart.tsx +0 -1
- package/src/components/Chart/RadarChart.tsx +0 -1
- package/src/components/Chart/ScatterChart.tsx +0 -1
- package/src/components/Chart/WaterfallChart.tsx +0 -1
- package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +7 -0
- package/src/components/DataTable/DataTable.stories.tsx +23 -16
- package/src/components/DatePicker/DatePicker.stories.tsx +27 -19
- package/src/components/Dropdown/Dropdown.stories.tsx +11 -19
- package/src/components/EdgePanel/EdgePanel.stories.tsx +1 -0
- package/src/components/Footer/Footer.stories.tsx +8 -6
- package/src/components/Footer/FooterLink.tsx +9 -2
- package/src/components/Form/Checkbox.stories.tsx +7 -0
- package/src/components/Form/Form.stories.tsx +7 -0
- package/src/components/Form/FormGroup.stories.tsx +9 -1
- package/src/components/Form/Input.stories.tsx +69 -16
- package/src/components/Form/Radio.stories.tsx +9 -1
- package/src/components/Form/Select.stories.tsx +9 -1
- package/src/components/Form/Textarea.stories.tsx +10 -2
- package/src/components/Hero/Hero.stories.tsx +7 -0
- package/src/components/List/List.stories.tsx +7 -0
- package/src/components/Messages/Messages.stories.tsx +8 -7
- package/src/components/Modal/Modal.stories.tsx +17 -6
- package/src/components/Navigation/Menu/Menu.stories.tsx +7 -0
- package/src/components/Navigation/Nav/Nav.stories.tsx +7 -0
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +1 -0
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +188 -111
- package/src/components/Pagination/Pagination.tsx +83 -3
- package/src/components/PhotoViewer/PhotoViewer.stories.tsx +10 -5
- package/src/components/Popover/Popover.stories.tsx +191 -115
- package/src/components/ProductReview/ProductReview.stories.tsx +80 -58
- package/src/components/Progress/Progress.stories.tsx +79 -49
- package/src/components/Rating/Rating.stories.tsx +109 -84
- package/src/components/River/River.stories.tsx +194 -114
- package/src/components/SectionIntro/SectionIntro.stories.tsx +19 -9
- package/src/components/Slider/Slider.stories.tsx +7 -0
- package/src/components/Spinner/Spinner.stories.tsx +15 -11
- package/src/components/Steps/Steps.stories.tsx +132 -98
- package/src/components/Tabs/Tabs.stories.tsx +163 -112
- package/src/components/Testimonial/Testimonial.stories.tsx +114 -68
- package/src/components/Todo/Todo.stories.tsx +38 -12
- package/src/components/Toggle/Toggle.stories.tsx +61 -28
- package/src/components/Tooltip/Tooltip.stories.tsx +318 -200
- package/src/components/Upload/Upload.stories.tsx +122 -84
- package/src/components/VideoPlayer/VideoPlayer.stories.tsx +7 -24
- package/src/components/index.ts +1 -0
- package/src/lib/composables/useAtomixGlass.ts +9 -10
- package/src/lib/composables/useNavbar.ts +0 -10
- package/src/lib/config/loader.ts +4 -4
- package/src/lib/constants/components.ts +17 -0
- package/src/lib/hooks/useComponentCustomization.ts +1 -1
- package/src/lib/hooks/usePerformanceMonitor.ts +1 -1
- package/src/lib/hooks/useThemeTokens.ts +105 -0
- package/src/lib/theme/README.md +174 -0
- package/src/lib/theme/adapters/index.ts +31 -0
- package/src/lib/theme/adapters/themeAdapter.ts +287 -0
- package/src/lib/theme/config/__tests__/configLoader.test.ts +207 -0
- package/src/lib/theme/config/configLoader.ts +95 -0
- package/src/lib/theme/config/loader.ts +37 -54
- package/src/lib/theme/config/types.ts +2 -2
- package/src/lib/theme/config/validator.ts +15 -91
- package/src/lib/theme/{constants.ts → constants/constants.ts} +1 -19
- package/src/lib/theme/constants/index.ts +8 -0
- package/src/lib/theme/core/ThemeRegistry.ts +75 -266
- package/src/lib/theme/core/__tests__/createTheme.test.ts +132 -0
- package/src/lib/theme/core/composeTheme.ts +105 -0
- package/src/lib/theme/core/createTheme.ts +108 -0
- package/src/lib/theme/{createTheme.ts → core/createThemeObject.ts} +12 -8
- package/src/lib/theme/core/index.ts +19 -19
- package/src/lib/theme/devtools/Comparator.tsx +346 -22
- package/src/lib/theme/devtools/IMPROVEMENTS.md +139 -38
- package/src/lib/theme/devtools/Inspector.tsx +335 -51
- package/src/lib/theme/devtools/LiveEditor.tsx +478 -107
- package/src/lib/theme/devtools/Preview.tsx +471 -221
- package/src/lib/theme/{core → devtools}/ThemeValidator.ts +1 -1
- package/src/lib/theme/devtools/index.ts +14 -4
- package/src/lib/theme/devtools/useHistory.ts +130 -0
- package/src/lib/theme/{errors.ts → errors/errors.ts} +1 -1
- package/src/lib/theme/errors/index.ts +12 -0
- package/src/lib/theme/generators/cssFile.ts +79 -0
- package/src/lib/theme/generators/generateCSS.ts +89 -0
- package/src/lib/theme/generators/generateCSSNested.ts +130 -0
- package/src/lib/theme/{generateCSSVariables.ts → generators/generateCSSVariables.ts} +3 -13
- package/src/lib/theme/generators/index.ts +25 -0
- package/src/lib/theme/i18n/rtl.ts +5 -6
- package/src/lib/theme/index.ts +149 -19
- package/src/lib/theme/runtime/ThemeApplicator.ts +53 -112
- package/src/lib/theme/{ThemeContext.tsx → runtime/ThemeContext.tsx} +1 -1
- package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +5 -5
- package/src/lib/theme/runtime/ThemeProvider.tsx +266 -282
- package/src/lib/theme/runtime/index.ts +2 -2
- package/src/lib/theme/runtime/useTheme.ts +1 -2
- package/src/lib/theme/runtime/useThemeTokens.ts +131 -0
- package/src/lib/theme/test/testTheme.ts +385 -0
- package/src/lib/theme/tokens/index.ts +12 -0
- package/src/lib/theme/tokens/tokens.ts +721 -0
- package/src/lib/theme/types.ts +6 -42
- package/src/lib/theme/utils/componentTheming.ts +132 -0
- package/src/lib/theme/{utils.ts → utils/domUtils.ts} +2 -2
- package/src/lib/theme/utils/index.ts +11 -0
- package/src/lib/theme/utils/injectCSS.ts +90 -0
- package/src/lib/theme/utils/naming.ts +100 -0
- package/src/lib/theme/utils/themeHelpers.ts +78 -0
- package/src/lib/theme/{themeUtils.ts → utils/themeUtils.ts} +7 -7
- package/src/lib/theme-tools.ts +7 -8
- package/src/lib/types/components.ts +40 -130
- package/src/lib/utils/componentUtils.ts +2 -2
- package/src/lib/utils/memoryMonitor.ts +3 -3
- package/src/lib/utils/themeNaming.ts +135 -0
- package/src/styles/01-settings/_settings.design-tokens.scss +4 -1
- package/src/styles/02-tools/_tools.button.scss +66 -79
- package/src/styles/06-components/_components.atomix-glass.scss +13 -3
- package/src/styles/06-components/_components.pagination.scss +88 -0
- package/scripts/sync-theme-config.js +0 -309
- package/src/lib/theme/composeTheme.ts +0 -370
- package/src/lib/theme/core/ThemeCache.ts +0 -283
- package/src/lib/theme/core/ThemeEngine.test.ts +0 -146
- package/src/lib/theme/core/ThemeEngine.ts +0 -665
- package/src/lib/theme/createThemeFromConfig.ts +0 -132
- package/src/lib/theme/devtools/CLI.ts +0 -364
- package/src/lib/theme/runtime/ThemeManager.test.ts +0 -192
- package/src/lib/theme/runtime/ThemeManager.ts +0 -446
- package/src/styles/03-generic/_generated-root.css +0 -26
- package/src/themes/README.md +0 -442
- package/src/themes/themes.config.js +0 -68
- /package/src/lib/theme/{cssVariableMapper.ts → adapters/cssVariableMapper.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
|
-
//
|
|
1734
|
-
//
|
|
1735
|
-
//
|
|
1736
|
-
|
|
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 ?
|
|
@@ -1793,7 +1794,7 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
|
|
|
1793
1794
|
timestamp: Date.now()
|
|
1794
1795
|
}),
|
|
1795
1796
|
// Development mode: log cache size
|
|
1796
|
-
"production"
|
|
1797
|
+
"undefined" != typeof process && "production" === process.env?.NODE_ENV || sharedShaderCache.size;
|
|
1797
1798
|
})(cacheKey, url), setShaderMapUrl(url);
|
|
1798
1799
|
};
|
|
1799
1800
|
"undefined" != typeof requestIdleCallback ? requestIdleCallback(generate, {
|
|
@@ -2106,9 +2107,9 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2106
2107
|
childRadius > 0 && childRadius !== CONSTANTS.DEFAULT_CORNER_RADIUS && (extractedRadius = childRadius,
|
|
2107
2108
|
extractionSource = "React children");
|
|
2108
2109
|
}
|
|
2109
|
-
null !== extractedRadius && extractedRadius > 0 ? setDynamicCornerRadius(extractedRadius) : process.env
|
|
2110
|
+
null !== extractedRadius && extractedRadius > 0 ? setDynamicCornerRadius(extractedRadius) : "undefined" == typeof process || process.env;
|
|
2110
2111
|
} catch (error) {
|
|
2111
|
-
"production"
|
|
2112
|
+
"undefined" != typeof process && "production" === process.env?.NODE_ENV || !debugCornerRadius || console.error("[AtomixGlass] Error extracting corner radius:", error);
|
|
2112
2113
|
}
|
|
2113
2114
|
};
|
|
2114
2115
|
extractRadius();
|
|
@@ -2183,7 +2184,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2183
2184
|
// For image backgrounds, assume medium luminance
|
|
2184
2185
|
totalLuminance += .5, validSamples++, hasValidBackground = !0);
|
|
2185
2186
|
} catch (styleError) {
|
|
2186
|
-
process.env
|
|
2187
|
+
"undefined" == typeof process || process.env;
|
|
2187
2188
|
}
|
|
2188
2189
|
// Move to parent element for next iteration
|
|
2189
2190
|
if (!currentElement) break;
|
|
@@ -2222,7 +2223,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2222
2223
|
}
|
|
2223
2224
|
} catch (error) {
|
|
2224
2225
|
// Enhanced error logging with context
|
|
2225
|
-
"development"
|
|
2226
|
+
"undefined" != typeof process && "development" !== process.env?.NODE_ENV || console.warn("AtomixGlass: Error detecting background brightness:", error);
|
|
2226
2227
|
const result = !1;
|
|
2227
2228
|
if (element && element.parentElement) {
|
|
2228
2229
|
const threshold = "object" == typeof overLight && null !== overLight && overLight.threshold || .7;
|
|
@@ -2279,7 +2280,7 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2279
2280
|
};
|
|
2280
2281
|
// Calculate offset relative to this container
|
|
2281
2282
|
// React 18 automatically batches these updates
|
|
2282
|
-
setInternalMouseOffset(newOffset), setInternalGlobalMousePosition(globalPos), "production"
|
|
2283
|
+
setInternalMouseOffset(newOffset), setInternalGlobalMousePosition(globalPos), "undefined" != typeof process && "production" === process.env?.NODE_ENV || !enablePerformanceMonitoring || performance.now();
|
|
2283
2284
|
}), [ mouseContainer, glassRef, externalGlobalMousePosition, externalMouseOffset, effectiveDisableEffects, enablePerformanceMonitoring ]);
|
|
2284
2285
|
// Subscribe to shared mouse tracker
|
|
2285
2286
|
useEffect((() => {
|
|
@@ -2419,10 +2420,10 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2419
2420
|
saturationBoost: validatedSaturationBoost + .4 * mouseInfluence
|
|
2420
2421
|
};
|
|
2421
2422
|
// Validate and apply object config values with proper clamping
|
|
2422
|
-
return process.env
|
|
2423
|
+
return "undefined" == typeof process || process.env, finalConfig;
|
|
2423
2424
|
}
|
|
2424
2425
|
// Debug logging for non-object configs
|
|
2425
|
-
return process.env
|
|
2426
|
+
return "undefined" == typeof process || process.env, baseConfig;
|
|
2426
2427
|
}), [ overLight, getEffectiveOverLight, mouseOffset, isHovered, isActive, validateConfigValue, debugOverLight ]), handleMouseEnter = useCallback((() => setIsHovered(!0)), []), handleMouseLeave = useCallback((() => setIsHovered(!1)), []), handleMouseDown = useCallback((() => setIsActive(!0)), []), handleMouseUp = useCallback((() => setIsActive(!1)), []), handleKeyDown = useCallback((e => {
|
|
2427
2428
|
!onClick || "Enter" !== e.key && " " !== e.key || (e.preventDefault(), onClick());
|
|
2428
2429
|
}), [ onClick ]), handleMouseMove = useCallback((_e => {}), []);
|
|
@@ -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),
|
|
2537
|
+
const glassRef = useRef(null), contentRef = 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,
|
|
@@ -2550,128 +2551,51 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, cornerRadiu
|
|
|
2550
2551
|
debugOverLight: debugOverLight,
|
|
2551
2552
|
enablePerformanceMonitoring: enablePerformanceMonitoring,
|
|
2552
2553
|
children: children
|
|
2553
|
-
}), isOverLight = overLightConfig.isOverLight, shouldRenderOverLightLayers = enableOverLightLayers && isOverLight
|
|
2554
|
-
// Read CSS custom properties once on mount and cache them
|
|
2555
|
-
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
|
-
};
|
|
2568
|
-
} catch (error) {
|
|
2569
|
-
// Fallback to defaults if reading fails
|
|
2570
|
-
opacityCacheRef.current = {
|
|
2571
|
-
opacity50: .5,
|
|
2572
|
-
opacity40: .4,
|
|
2573
|
-
opacity80: .8,
|
|
2574
|
-
opacity0: 0
|
|
2575
|
-
};
|
|
2576
|
-
}
|
|
2577
|
-
}), []);
|
|
2578
|
-
// Calculate base style with transforms (only dynamic values)
|
|
2579
|
-
const baseStyle = useMemo((() => ({
|
|
2554
|
+
}), isOverLight = overLightConfig.isOverLight, shouldRenderOverLightLayers = enableOverLightLayers && isOverLight, baseStyle = {
|
|
2580
2555
|
...style,
|
|
2581
2556
|
...0 !== elasticity && !effectiveDisableEffects && {
|
|
2582
2557
|
transform: transformStyle
|
|
2583
2558
|
}
|
|
2584
|
-
}
|
|
2585
|
-
position:
|
|
2586
|
-
top:
|
|
2587
|
-
left:
|
|
2588
|
-
}
|
|
2589
|
-
width: "fixed" !==
|
|
2590
|
-
height: "fixed" !==
|
|
2591
|
-
}
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
}), [ 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
|
-
// 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
|
|
2633
|
-
return {
|
|
2634
|
-
// Standard CSS custom properties for dynamic values
|
|
2635
|
-
"--atomix-glass-radius": `${effectiveCornerRadius}px`,
|
|
2636
|
-
"--atomix-glass-transform": baseStyleTransform || "none",
|
|
2637
|
-
"--atomix-glass-position": positionStylesPosition,
|
|
2638
|
-
"--atomix-glass-top": "fixed" !== positionStylesTop ? `${positionStylesTop}px` : "0",
|
|
2639
|
-
"--atomix-glass-left": "fixed" !== positionStylesLeft ? `${positionStylesLeft}px` : "0",
|
|
2640
|
-
"--atomix-glass-width": "fixed" !== baseStylePosition ? adjustedSizeWidth : `${adjustedSizeWidth}px`,
|
|
2641
|
-
"--atomix-glass-height": "fixed" !== baseStylePosition ? adjustedSizeHeight : `${adjustedSizeHeight}px`,
|
|
2642
|
-
// Border width: Use spacing token for consistency
|
|
2643
|
-
"--atomix-glass-border-width": "var(--atomix-spacing-0-5, 0.09375rem)",
|
|
2644
|
-
"--atomix-glass-blend-mode": gradientIsOverLight ? "multiply" : "overlay",
|
|
2645
|
-
// Dynamic gradients and backgrounds
|
|
2646
|
-
// Note: RGB values use design token-aligned constants (white: 255,255,255; black: 0,0,0)
|
|
2647
|
-
"--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
|
-
"--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
|
-
"--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}%)`,
|
|
2651
|
-
"--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}%)`,
|
|
2653
|
-
"--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}%)`,
|
|
2655
|
-
"--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})`,
|
|
2657
|
-
"--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})`
|
|
2659
|
-
};
|
|
2660
|
-
}), [
|
|
2661
|
-
// Position styles - only specific properties
|
|
2662
|
-
positionStylesPosition, positionStylesTop, positionStylesLeft,
|
|
2663
|
-
// Adjusted size - only specific properties
|
|
2664
|
-
adjustedSizeWidth, adjustedSizeHeight,
|
|
2665
|
-
// Base style - only transform property
|
|
2666
|
-
baseStyleTransform, baseStylePosition,
|
|
2667
|
-
// Other values
|
|
2668
|
-
effectiveCornerRadius, effectiveReducedMotion,
|
|
2669
|
-
// Gradient calculations - extracted properties
|
|
2670
|
-
gradientIsOverLight, gradientMx, gradientMy, gradientBorderGradientAngle, gradientBorderStop1, gradientBorderStop2, gradientBorderOpacity1, gradientBorderOpacity2, gradientBorderOpacity3, gradientBorderOpacity4, gradientHover1X, gradientHover1Y, gradientHover2X, gradientHover2Y, gradientHover3X, gradientHover3Y, gradientBaseX, gradientBaseY,
|
|
2671
|
-
// Opacity values - extracted properties
|
|
2672
|
-
opacityValuesHover1, opacityValuesHover2, opacityValuesHover3, opacityValuesBase, opacityValuesOver ]);
|
|
2673
|
-
// Build className with state modifiers
|
|
2674
|
-
return jsxs("div", {
|
|
2559
|
+
}, 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 = {
|
|
2560
|
+
position: style.position || "absolute",
|
|
2561
|
+
top: style.top || 0,
|
|
2562
|
+
left: style.left || 0
|
|
2563
|
+
}, adjustedSize = {
|
|
2564
|
+
width: "fixed" !== style.position ? "100%" : style.width ? style.width : Math.max(glassSize.width, 0),
|
|
2565
|
+
height: "fixed" !== style.position ? "100%" : style.height ? style.height : Math.max(glassSize.height, 0)
|
|
2566
|
+
}, mx = mouseOffset.x, my = mouseOffset.y, GRADIENT = ATOMIX_GLASS.CONSTANTS.GRADIENT, borderGradientAngle = GRADIENT.BASE_ANGLE + mx * GRADIENT.ANGLE_MULTIPLIER, borderStop1 = Math.max(GRADIENT.BORDER_STOP_1.MIN, GRADIENT.BORDER_STOP_1.BASE + my * GRADIENT.BORDER_STOP_1.MULTIPLIER), borderStop2 = Math.min(GRADIENT.BORDER_STOP_2.MAX, GRADIENT.BORDER_STOP_2.BASE + my * GRADIENT.BORDER_STOP_2.MULTIPLIER), borderOpacity1 = GRADIENT.BORDER_OPACITY.BASE_1 + Math.abs(mx) * GRADIENT.BORDER_OPACITY.MULTIPLIER_LOW, borderOpacity2 = GRADIENT.BORDER_OPACITY.BASE_2 + Math.abs(mx) * GRADIENT.BORDER_OPACITY.MULTIPLIER_HIGH, borderOpacity3 = GRADIENT.BORDER_OPACITY.BASE_3 + Math.abs(mx) * GRADIENT.BORDER_OPACITY.MULTIPLIER_LOW, borderOpacity4 = GRADIENT.BORDER_OPACITY.BASE_4 + Math.abs(mx) * GRADIENT.BORDER_OPACITY.MULTIPLIER_HIGH, hover1X = GRADIENT.CENTER_POSITION + mx / GRADIENT.HOVER_POSITION.DIVISOR_1, hover1Y = GRADIENT.CENTER_POSITION + my / GRADIENT.HOVER_POSITION.DIVISOR_1, hover2X = GRADIENT.CENTER_POSITION + mx / GRADIENT.HOVER_POSITION.DIVISOR_2, hover2Y = GRADIENT.CENTER_POSITION + my / GRADIENT.HOVER_POSITION.DIVISOR_2, hover3X = GRADIENT.CENTER_POSITION + mx * GRADIENT.HOVER_POSITION.MULTIPLIER_3, hover3Y = GRADIENT.CENTER_POSITION + my * GRADIENT.HOVER_POSITION.MULTIPLIER_3, baseX = GRADIENT.CENTER_POSITION + mx * GRADIENT.BASE_LAYER_MULTIPLIER, baseY = GRADIENT.CENTER_POSITION + my * GRADIENT.BASE_LAYER_MULTIPLIER, overLightOpacity = overLightConfig.opacity, opacityValues = {
|
|
2567
|
+
hover1: isHovered || isActive ? .5 : 0,
|
|
2568
|
+
hover2: isActive ? .5 : 0,
|
|
2569
|
+
hover3: isHovered ? .4 : isActive ? .8 : 0,
|
|
2570
|
+
base: isOverLight ? overLightOpacity || .4 : 0,
|
|
2571
|
+
over: isOverLight ? 1.1 * (overLightOpacity || .4) : 0
|
|
2572
|
+
}, whiteColor = "255, 255, 255", glassVars = {
|
|
2573
|
+
// Standard CSS custom properties for dynamic values
|
|
2574
|
+
"--atomix-glass-radius": `${effectiveCornerRadius}px`,
|
|
2575
|
+
"--atomix-glass-transform": transformStyle || "none",
|
|
2576
|
+
"--atomix-glass-position": positionStyles.position,
|
|
2577
|
+
"--atomix-glass-top": "fixed" !== positionStyles.top ? `${positionStyles.top}px` : "0",
|
|
2578
|
+
"--atomix-glass-left": "fixed" !== positionStyles.left ? `${positionStyles.left}px` : "0",
|
|
2579
|
+
"--atomix-glass-width": "fixed" !== style.position ? adjustedSize.width : `${adjustedSize.width}px`,
|
|
2580
|
+
"--atomix-glass-height": "fixed" !== style.position ? adjustedSize.height : `${adjustedSize.height}px`,
|
|
2581
|
+
// Border width: Use spacing token for consistency
|
|
2582
|
+
"--atomix-glass-border-width": "var(--atomix-spacing-0-5, 0.09375rem)",
|
|
2583
|
+
"--atomix-glass-blend-mode": isOverLight ? "multiply" : "overlay",
|
|
2584
|
+
// Dynamic gradients and backgrounds
|
|
2585
|
+
"--atomix-glass-border-gradient-1": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${borderOpacity1}) ${borderStop1}%, rgba(${whiteColor}, ${borderOpacity2}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
|
|
2586
|
+
"--atomix-glass-border-gradient-2": `linear-gradient(${borderGradientAngle}deg, rgba(${whiteColor}, 0) 0%, rgba(${whiteColor}, ${borderOpacity3}) ${borderStop1}%, rgba(${whiteColor}, ${borderOpacity4}) ${borderStop2}%, rgba(${whiteColor}, 0) 100%)`,
|
|
2587
|
+
"--atomix-glass-hover-1-opacity": opacityValues.hover1,
|
|
2588
|
+
"--atomix-glass-hover-1-gradient": isOverLight ? `radial-gradient(circle at ${hover1X}% ${hover1Y}%, 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 ${hover1X}% ${hover1Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_1.WHITE_STOP}%)`,
|
|
2589
|
+
"--atomix-glass-hover-2-opacity": opacityValues.hover2,
|
|
2590
|
+
"--atomix-glass-hover-2-gradient": isOverLight ? `radial-gradient(circle at ${hover2X}% ${hover2Y}%, 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 ${hover2X}% ${hover2Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_2.WHITE_STOP}%)`,
|
|
2591
|
+
"--atomix-glass-hover-3-opacity": opacityValues.hover3,
|
|
2592
|
+
"--atomix-glass-hover-3-gradient": isOverLight ? `radial-gradient(circle at ${hover3X}% ${hover3Y}%, 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 ${hover3X}% ${hover3Y}%, rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_START}) 0%, rgba(${whiteColor}, 0) ${ATOMIX_GLASS.CONSTANTS.GRADIENT_OPACITY.HOVER_3.WHITE_STOP}%)`,
|
|
2593
|
+
"--atomix-glass-base-opacity": opacityValues.base,
|
|
2594
|
+
"--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 + Math.abs(mx) * ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.BASE_GRADIENT.WHITE_OPACITY})`,
|
|
2595
|
+
"--atomix-glass-overlay-opacity": opacityValues.over,
|
|
2596
|
+
"--atomix-glass-overlay-gradient": isOverLight ? `radial-gradient(circle at ${baseX}% ${baseY}%, rgba(0, 0, 0, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_START_BASE + Math.abs(mx) * 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(my) * ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.BLACK_END_MULTIPLIER}) 100%)` : `rgba(${whiteColor}, ${ATOMIX_GLASS.CONSTANTS.OVERLAY_GRADIENT.WHITE_OPACITY})`
|
|
2597
|
+
};
|
|
2598
|
+
return jsxs("div", {
|
|
2675
2599
|
className: componentClassName,
|
|
2676
2600
|
style: glassVars,
|
|
2677
2601
|
role: role || (onClick ? "button" : void 0),
|
|
@@ -3175,16 +3099,8 @@ toolbarConfig: toolbarConfig, customToolbarActions: customToolbarActions, custom
|
|
|
3175
3099
|
interactive: interactive,
|
|
3176
3100
|
panEnabled: panEnabled
|
|
3177
3101
|
});
|
|
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
3102
|
// Sync all toolbar state with component state
|
|
3187
|
-
|
|
3103
|
+
useEffect((() => {
|
|
3188
3104
|
setIsFullscreen(toolbarState.isFullscreen), setIsExporting(toolbarState.isExporting);
|
|
3189
3105
|
}), [ toolbarState.isFullscreen, toolbarState.isExporting ]);
|
|
3190
3106
|
// Render enhanced toolbar
|
|
@@ -4048,8 +3964,7 @@ const AreaChart = memo( forwardRef((({datasets: datasets = [], config: config =
|
|
|
4048
3964
|
config: config,
|
|
4049
3965
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4050
3966
|
if (!renderedDatasets.length) return null;
|
|
4051
|
-
|
|
4052
|
-
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
3967
|
+
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
4053
3968
|
return jsxs(Fragment, {
|
|
4054
3969
|
children: [ renderedDatasets.map(((dataset, datasetIndex) => {
|
|
4055
3970
|
const color = dataset.color || colors[datasetIndex], data = dataset.data || [];
|
|
@@ -4249,8 +4164,7 @@ const BarChart = memo( forwardRef((({datasets: datasets = [], config: config =
|
|
|
4249
4164
|
config: config,
|
|
4250
4165
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4251
4166
|
if (!renderedDatasets.length) return null;
|
|
4252
|
-
|
|
4253
|
-
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, barDimensions = calculateBarDimensions(renderedDatasets, scales.width, scales.height, scales.padding, horizontal);
|
|
4167
|
+
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, barDimensions = calculateBarDimensions(renderedDatasets, scales.width, scales.height, scales.padding, horizontal);
|
|
4254
4168
|
return jsxs(Fragment, {
|
|
4255
4169
|
children: [ barDimensions.map(((bar, index) => {
|
|
4256
4170
|
const dataset = renderedDatasets[bar.datasetIndex];
|
|
@@ -4309,8 +4223,7 @@ const BubbleChart = memo( forwardRef((({bubbleData: bubbleData = [], config: co
|
|
|
4309
4223
|
config: config,
|
|
4310
4224
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4311
4225
|
if (!bubbleData.length) return null;
|
|
4312
|
-
|
|
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) => {
|
|
4226
|
+
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
4227
|
// Calculate scaled size
|
|
4315
4228
|
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
4229
|
// Calculate position
|
|
@@ -4394,8 +4307,7 @@ const CandlestickChart = memo( forwardRef((({candlestickData: candlestickData =
|
|
|
4394
4307
|
config: config,
|
|
4395
4308
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4396
4309
|
if (!candlestickData.length) return null;
|
|
4397
|
-
|
|
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 = [];
|
|
4310
|
+
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
4311
|
if (showGrid) {
|
|
4400
4312
|
// Horizontal grid lines for price
|
|
4401
4313
|
for (let i = 0; i <= 5; i++) {
|
|
@@ -4572,8 +4484,7 @@ const DonutChart = memo( forwardRef((({datasets: datasets = [], config: config
|
|
|
4572
4484
|
percentage: point.value / total * 100
|
|
4573
4485
|
};
|
|
4574
4486
|
})), showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
4575
|
-
|
|
4576
|
-
return jsxs(Fragment, {
|
|
4487
|
+
return jsxs(Fragment, {
|
|
4577
4488
|
children: [ slices.map(((slice, index) => {
|
|
4578
4489
|
const isHovered = hoveredPoint?.pointIndex === index;
|
|
4579
4490
|
return jsxs("g", {
|
|
@@ -4648,8 +4559,7 @@ const FunnelChart = memo( forwardRef((({funnelData: funnelData = [], config: co
|
|
|
4648
4559
|
config: config,
|
|
4649
4560
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4650
4561
|
if (!funnelData.length) return null;
|
|
4651
|
-
|
|
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) => {
|
|
4562
|
+
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
4563
|
const percentage = item.value / maxValue * 100, conversionRate = index > 0 && funnelData[index - 1] ? item.value / funnelData[index - 1].value * 100 : 100;
|
|
4654
4564
|
return {
|
|
4655
4565
|
...item,
|
|
@@ -4767,8 +4677,7 @@ const GaugeChart = memo( forwardRef((({value: value, min: min = 0, max: max = 1
|
|
|
4767
4677
|
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
4678
|
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
4679
|
}, zones = [];
|
|
4770
|
-
|
|
4771
|
-
for (const zone of colorZones) {
|
|
4680
|
+
for (const zone of colorZones) {
|
|
4772
4681
|
const zoneStart = startAngleRad + (zone.from - min) / (max - min) * angleRange, zoneEnd = startAngleRad + (zone.to - min) / (max - min) * angleRange;
|
|
4773
4682
|
zones.push(jsx("path", {
|
|
4774
4683
|
d: createArcPath(centerX, centerY, radius, zoneStart, zoneEnd, thickness),
|
|
@@ -4942,8 +4851,7 @@ const colorSchemes = {
|
|
|
4942
4851
|
config: config,
|
|
4943
4852
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
4944
4853
|
const {matrix: matrix, xLabels: xLabels, yLabels: yLabels} = processedData, showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
4945
|
-
|
|
4946
|
-
if (!matrix.length) return null;
|
|
4854
|
+
if (!matrix.length) return null;
|
|
4947
4855
|
const cellWidth = cellConfig.width || 40, cellHeight = cellConfig.height || 40, spacing = cellConfig.spacing || 2, borderRadius = cellConfig.borderRadius || 4;
|
|
4948
4856
|
// Leave space for x-axis labels
|
|
4949
4857
|
return xLabels.length, yLabels.length, jsxs(Fragment, {
|
|
@@ -5211,8 +5119,7 @@ const LineChart = memo( forwardRef((({datasets: datasets = [], config: config =
|
|
|
5211
5119
|
config: config,
|
|
5212
5120
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
5213
5121
|
if (!renderedDatasets.length) return null;
|
|
5214
|
-
|
|
5215
|
-
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
5122
|
+
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0;
|
|
5216
5123
|
return toolbarState?.animationsEnabled ?? renderConfig?.animate ?? mergedLineOptions.smooth,
|
|
5217
5124
|
jsxs(Fragment, {
|
|
5218
5125
|
children: [ renderedDatasets.map(((dataset, datasetIndex) => {
|
|
@@ -5300,8 +5207,7 @@ const MultiAxisChart = memo( forwardRef((({datasets: datasets = [], config: con
|
|
|
5300
5207
|
config: config,
|
|
5301
5208
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
5302
5209
|
if (!datasets.length) return null;
|
|
5303
|
-
|
|
5304
|
-
const effectiveShowGrid = toolbarState?.showGrid ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, yAxisConfigs = yAxes.length ? yAxes : [ {
|
|
5210
|
+
const effectiveShowGrid = toolbarState?.showGrid ?? !0, chartWidth = scales.width - 120, chartHeight = scales.height - 120, yAxisConfigs = yAxes.length ? yAxes : [ {
|
|
5305
5211
|
id: "y-axis-1",
|
|
5306
5212
|
position: "left",
|
|
5307
5213
|
label: "Y Axis"
|
|
@@ -5599,8 +5505,7 @@ const RadarChart = memo( forwardRef((({datasets: datasets = [], config: config
|
|
|
5599
5505
|
config: config,
|
|
5600
5506
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
5601
5507
|
if (!renderedDatasets.length) return null;
|
|
5602
|
-
|
|
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];
|
|
5508
|
+
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
5509
|
if (!firstDataset) return null;
|
|
5605
5510
|
const dataPoints = firstDataset.data || [], angleStep = 2 * Math.PI / dataPoints.length;
|
|
5606
5511
|
// Calculate value bounds
|
|
@@ -5746,8 +5651,7 @@ const ScatterChart = memo( forwardRef((({datasets: datasets = [], config: confi
|
|
|
5746
5651
|
config: config,
|
|
5747
5652
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
5748
5653
|
if (!renderedDatasets.length) return null;
|
|
5749
|
-
|
|
5750
|
-
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, points = [];
|
|
5654
|
+
const showTooltips = toolbarState?.showTooltips ?? renderConfig?.showTooltips ?? !0, points = [];
|
|
5751
5655
|
return renderedDatasets.forEach(((dataset, datasetIndex) => {
|
|
5752
5656
|
const color = dataset.color || colors[datasetIndex % colors.length];
|
|
5753
5657
|
dataset.data?.forEach(((point, pointIndex) => {
|
|
@@ -6034,8 +5938,7 @@ const WaterfallChart = memo( forwardRef((({waterfallData: waterfallData = [], c
|
|
|
6034
5938
|
config: config,
|
|
6035
5939
|
renderContent: ({scales: scales, colors: colors, datasets: renderedDatasets, handlers: handlers, hoveredPoint: hoveredPoint, toolbarState: toolbarState, config: renderConfig}) => {
|
|
6036
5940
|
if (!waterfallData.length) return null;
|
|
6037
|
-
|
|
6038
|
-
const shouldAnimate = toolbarState?.animationsEnabled ?? renderConfig?.animate ?? animate, chartWidth = scales.width - 120, chartHeight = scales.height - 120;
|
|
5941
|
+
const shouldAnimate = toolbarState?.animationsEnabled ?? renderConfig?.animate ?? animate, chartWidth = scales.width - 120, chartHeight = scales.height - 120;
|
|
6039
5942
|
// Calculate cumulative values and positions
|
|
6040
5943
|
let cumulativeValue = 0;
|
|
6041
5944
|
const processedData = waterfallData.map(((item, index) => {
|