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