@shohojdhara/atomix 0.6.5 → 0.6.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/dist/atomix.css +660 -658
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +45 -45
- package/dist/atomix.min.css.map +1 -1
- package/dist/atomix.umd.js +1 -1
- package/dist/atomix.umd.js.map +1 -1
- package/dist/atomix.umd.min.js +1 -1
- package/dist/charts.js +65 -255
- package/dist/charts.js.map +1 -1
- package/dist/core.js +65 -255
- package/dist/core.js.map +1 -1
- package/dist/forms.js +65 -255
- package/dist/forms.js.map +1 -1
- package/dist/heavy.js +65 -255
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +6 -37
- package/dist/index.esm.js +66 -300
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +66 -300
- 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 +1 -1
- package/src/components/AtomixGlass/AtomixGlass.tsx +0 -9
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +0 -2
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +1 -1
- package/src/components/AtomixGlass/glass-utils.ts +82 -53
- package/src/components/AtomixGlass/shader-utils.ts +19 -77
- package/src/components/Form/Select.test.tsx +6 -6
- package/src/components/Form/Textarea.stories.tsx +5 -5
- package/src/layouts/Grid/Grid.stories.tsx +54 -2
- package/src/layouts/Grid/README.md +6 -2
- package/src/lib/composables/useAtomixGlass.ts +2 -134
- package/src/lib/composables/useAtomixGlassStyles.ts +3 -3
- package/src/lib/composables/usePerformanceMonitor.ts +0 -66
- package/src/lib/constants/components.ts +6 -1
- package/src/styles/01-settings/_settings.atomix-glass.scss +2 -2
- package/src/styles/01-settings/_settings.colors.scss +73 -73
- package/src/styles/02-tools/_tools.button.scss +51 -42
- package/src/styles/05-objects/_objects.grid.scss +4 -1
- package/src/styles/06-components/_components.atomix-glass.scss +2 -2
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +0 -171
- package/src/components/AtomixGlass/animation-system.ts +0 -578
|
@@ -10,13 +10,11 @@ import { ATOMIX_GLASS } from '../constants/components';
|
|
|
10
10
|
import { globalMouseTracker } from './shared-mouse-tracker';
|
|
11
11
|
import {
|
|
12
12
|
calculateElementCenter,
|
|
13
|
-
calculateMouseInfluence,
|
|
14
13
|
extractBorderRadiusFromChildren,
|
|
15
14
|
extractBorderRadiusFromDOMElement,
|
|
16
|
-
|
|
15
|
+
getInteractionIntensity,
|
|
17
16
|
lerp,
|
|
18
17
|
calculateSpring,
|
|
19
|
-
calculateVelocity,
|
|
20
18
|
smoothstep,
|
|
21
19
|
} from '../../components/AtomixGlass/glass-utils';
|
|
22
20
|
import {
|
|
@@ -24,13 +22,6 @@ import {
|
|
|
24
22
|
type ResolvedGlassBorderConfig,
|
|
25
23
|
} from '../../components/AtomixGlass/glass-border-styles';
|
|
26
24
|
import { updateAtomixGlassStyles } from './useAtomixGlassStyles';
|
|
27
|
-
// Phase 1: Time-Based Animation System
|
|
28
|
-
import {
|
|
29
|
-
createAnimationLoop,
|
|
30
|
-
createFBMEngine,
|
|
31
|
-
getFBMConfigForQuality,
|
|
32
|
-
liquidGlassWithTime,
|
|
33
|
-
} from '../../components/AtomixGlass/animation-system';
|
|
34
25
|
|
|
35
26
|
const { CONSTANTS } = ATOMIX_GLASS;
|
|
36
27
|
|
|
@@ -157,13 +148,7 @@ interface UseAtomixGlassOptions extends Omit<AtomixGlassProps, 'children'> {
|
|
|
157
148
|
children?: React.ReactNode;
|
|
158
149
|
isFixedOrSticky?: boolean;
|
|
159
150
|
priority?: number; // Priority for z-index ordering
|
|
160
|
-
// Phase 1: Time-Based Animation System
|
|
161
151
|
withLiquidBlur?: boolean;
|
|
162
|
-
animationQuality?: 'low' | 'medium' | 'high';
|
|
163
|
-
timeSpeed?: number;
|
|
164
|
-
noiseAmplitude?: number;
|
|
165
|
-
noiseFrequency?: number;
|
|
166
|
-
displacementStrength?: number;
|
|
167
152
|
}
|
|
168
153
|
|
|
169
154
|
interface UseAtomixGlassReturn {
|
|
@@ -198,10 +183,6 @@ interface UseAtomixGlassReturn {
|
|
|
198
183
|
/** Resolved liquid glass rim configuration */
|
|
199
184
|
resolvedBorder: ResolvedGlassBorderConfig;
|
|
200
185
|
|
|
201
|
-
// Phase 1: Animation System - Shader time control
|
|
202
|
-
getShaderTime: () => number;
|
|
203
|
-
applyTimeBasedDistortion: (uv: { x: number; y: number }) => { x: number; y: number };
|
|
204
|
-
|
|
205
186
|
// Event handlers
|
|
206
187
|
handleMouseEnter: () => void;
|
|
207
188
|
handleMouseLeave: () => void;
|
|
@@ -241,14 +222,6 @@ export function useAtomixGlass({
|
|
|
241
222
|
withLiquidBlur,
|
|
242
223
|
isFixedOrSticky = false,
|
|
243
224
|
priority = 1, // Default priority
|
|
244
|
-
// Phase 1: Animation System Props
|
|
245
|
-
withTimeAnimation = ATOMIX_GLASS.DEFAULTS.WITH_TIME_ANIMATION,
|
|
246
|
-
animationSpeed = ATOMIX_GLASS.DEFAULTS.ANIMATION_SPEED,
|
|
247
|
-
withMultiLayerDistortion = ATOMIX_GLASS.DEFAULTS.WITH_MULTI_LAYER_DISTORTION,
|
|
248
|
-
distortionOctaves = ATOMIX_GLASS.DEFAULTS.DISTORTION_OCTAVES,
|
|
249
|
-
distortionLacunarity = ATOMIX_GLASS.DEFAULTS.DISTORTION_LACUNARITY,
|
|
250
|
-
distortionGain = ATOMIX_GLASS.DEFAULTS.DISTORTION_GAIN,
|
|
251
|
-
distortionQuality = ATOMIX_GLASS.DEFAULTS.DISTORTION_QUALITY,
|
|
252
225
|
}: UseAtomixGlassOptions): UseAtomixGlassReturn {
|
|
253
226
|
// State
|
|
254
227
|
const [isHovered, setIsHovered] = useState(false);
|
|
@@ -281,46 +254,12 @@ export function useAtomixGlass({
|
|
|
281
254
|
const elasticVelocityRef = useRef<MousePosition>({ x: 0, y: 0 });
|
|
282
255
|
const directionalScaleRef = useRef<{ x: number; y: number }>({ x: 1, y: 1 });
|
|
283
256
|
const scaleVelocityRef = useRef<{ x: number; y: number }>({ x: 0, y: 0 });
|
|
284
|
-
const lastMouseTimeRef = useRef<number>(0);
|
|
285
257
|
const mouseVelocityRef = useRef<MousePosition>({ x: 0, y: 0 });
|
|
286
258
|
|
|
287
259
|
const [userPrefersReducedMotion, setUserPrefersReducedMotion] = useState(false);
|
|
288
260
|
const [userPrefersHighContrast, setUserPrefersHighContrast] = useState(false);
|
|
289
261
|
const [detectedOverLight, setDetectedOverLight] = useState(false);
|
|
290
262
|
|
|
291
|
-
// ============================================================================
|
|
292
|
-
// Phase 1: Time-Based Animation System (Feature 1.1)
|
|
293
|
-
// ============================================================================
|
|
294
|
-
|
|
295
|
-
// Animation state refs
|
|
296
|
-
const animationFrameIdRef = useRef<number | null>(null);
|
|
297
|
-
const animationStartTimeRef = useRef<number>(0);
|
|
298
|
-
const elapsedTimeRef = useRef<number>(0);
|
|
299
|
-
const shaderTimeRef = useRef<number>(0);
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Get FBM configuration based on quality preset or custom values
|
|
303
|
-
*/
|
|
304
|
-
const fbmConfig = useMemo(() => {
|
|
305
|
-
// If quality preset is provided, use it as base
|
|
306
|
-
const preset = getFBMConfigForQuality(distortionQuality);
|
|
307
|
-
|
|
308
|
-
// Override with custom values if provided
|
|
309
|
-
return {
|
|
310
|
-
octaves: distortionOctaves ?? preset.octaves,
|
|
311
|
-
lacunarity: distortionLacunarity ?? preset.lacunarity,
|
|
312
|
-
gain: distortionGain ?? preset.gain,
|
|
313
|
-
};
|
|
314
|
-
}, [distortionQuality, distortionOctaves, distortionLacunarity, distortionGain]);
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Create FBM engine for multi-layer distortion
|
|
318
|
-
*/
|
|
319
|
-
const fbmEngine = useMemo(() => {
|
|
320
|
-
if (!withMultiLayerDistortion) return null;
|
|
321
|
-
return createFBMEngine(fbmConfig);
|
|
322
|
-
}, [withMultiLayerDistortion, fbmConfig]);
|
|
323
|
-
|
|
324
263
|
/**
|
|
325
264
|
* Determine effective animation settings
|
|
326
265
|
*/
|
|
@@ -329,74 +268,6 @@ export function useAtomixGlass({
|
|
|
329
268
|
[reducedMotion, userPrefersReducedMotion]
|
|
330
269
|
);
|
|
331
270
|
|
|
332
|
-
const effectiveWithTimeAnimation = useMemo(() => {
|
|
333
|
-
return withTimeAnimation && !effectiveReducedMotion;
|
|
334
|
-
}, [withTimeAnimation, effectiveReducedMotion]);
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Animation loop for time-based effects
|
|
338
|
-
*/
|
|
339
|
-
useEffect(() => {
|
|
340
|
-
if (!effectiveWithTimeAnimation || typeof window === 'undefined') {
|
|
341
|
-
return undefined;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
let lastFrameTime = performance.now();
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Animation frame handler
|
|
348
|
-
*/
|
|
349
|
-
const animate = (currentTime: number) => {
|
|
350
|
-
// Calculate delta time
|
|
351
|
-
const deltaTime = currentTime - lastFrameTime;
|
|
352
|
-
lastFrameTime = currentTime;
|
|
353
|
-
|
|
354
|
-
// Apply animation speed multiplier
|
|
355
|
-
const scaledDelta = deltaTime * animationSpeed;
|
|
356
|
-
elapsedTimeRef.current += scaledDelta;
|
|
357
|
-
shaderTimeRef.current = elapsedTimeRef.current;
|
|
358
|
-
|
|
359
|
-
// Continue animation loop
|
|
360
|
-
animationFrameIdRef.current = requestAnimationFrame(animate);
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
// Start animation
|
|
364
|
-
animationStartTimeRef.current = performance.now();
|
|
365
|
-
animationFrameIdRef.current = requestAnimationFrame(animate);
|
|
366
|
-
|
|
367
|
-
// Cleanup
|
|
368
|
-
return () => {
|
|
369
|
-
if (animationFrameIdRef.current !== null) {
|
|
370
|
-
cancelAnimationFrame(animationFrameIdRef.current);
|
|
371
|
-
animationFrameIdRef.current = null;
|
|
372
|
-
}
|
|
373
|
-
};
|
|
374
|
-
}, [effectiveWithTimeAnimation, animationSpeed]);
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Get current shader time for animations
|
|
378
|
-
*/
|
|
379
|
-
const getShaderTime = useCallback(() => {
|
|
380
|
-
return shaderTimeRef.current;
|
|
381
|
-
}, []);
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Apply time-based distortion to UV coordinates
|
|
385
|
-
*/
|
|
386
|
-
const applyTimeBasedDistortion = useCallback(
|
|
387
|
-
(uv: { x: number; y: number }): { x: number; y: number } => {
|
|
388
|
-
if (!effectiveWithTimeAnimation || !fbmEngine) {
|
|
389
|
-
return uv;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
const time = shaderTimeRef.current;
|
|
393
|
-
|
|
394
|
-
// Apply liquid glass distortion with time
|
|
395
|
-
return liquidGlassWithTime(uv, time, fbmConfig);
|
|
396
|
-
},
|
|
397
|
-
[effectiveWithTimeAnimation, fbmEngine, fbmConfig]
|
|
398
|
-
);
|
|
399
|
-
|
|
400
271
|
// Memoized derived values
|
|
401
272
|
const effectiveBorderRadius = useMemo(() => {
|
|
402
273
|
if (borderRadius !== undefined) {
|
|
@@ -680,8 +551,7 @@ export function useAtomixGlass({
|
|
|
680
551
|
|
|
681
552
|
const overLightConfig = useMemo(() => {
|
|
682
553
|
const isOverLight = getEffectiveOverLight();
|
|
683
|
-
const hoverIntensity = isHovered
|
|
684
|
-
const activeIntensity = isActive ? 1.6 : 1;
|
|
554
|
+
const { hoverIntensity, activeIntensity } = getInteractionIntensity(isHovered, isActive);
|
|
685
555
|
|
|
686
556
|
// More robust overlight configuration with better defaults and clamping
|
|
687
557
|
const baseOpacity = isOverLight
|
|
@@ -1223,8 +1093,6 @@ export function useAtomixGlass({
|
|
|
1223
1093
|
overLightConfig,
|
|
1224
1094
|
resolvedBorder,
|
|
1225
1095
|
transformStyle,
|
|
1226
|
-
getShaderTime,
|
|
1227
|
-
applyTimeBasedDistortion,
|
|
1228
1096
|
handleMouseEnter,
|
|
1229
1097
|
handleMouseLeave,
|
|
1230
1098
|
handleMouseDown,
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
} from '../../components/AtomixGlass/glass-border-styles';
|
|
6
6
|
import {
|
|
7
7
|
calculateMouseInfluence,
|
|
8
|
+
getInteractionIntensity,
|
|
8
9
|
validateGlassSize,
|
|
9
10
|
clampBlur,
|
|
10
11
|
smoothstep,
|
|
@@ -84,8 +85,7 @@ export const updateAtomixGlassStyles = (
|
|
|
84
85
|
|
|
85
86
|
// Calculate mouse influence
|
|
86
87
|
const mouseInfluence = calculateMouseInfluence(mouseOffset);
|
|
87
|
-
const hoverIntensity = isHovered
|
|
88
|
-
const activeIntensity = isActive ? 1.6 : 1;
|
|
88
|
+
const { hoverIntensity, activeIntensity } = getInteractionIntensity(isHovered, isActive);
|
|
89
89
|
|
|
90
90
|
// Calculate dynamic OverLight config
|
|
91
91
|
const overLightConfig = {
|
|
@@ -360,7 +360,7 @@ export const updateAtomixGlassStyles = (
|
|
|
360
360
|
'--atomix-glass-container-box-shadow',
|
|
361
361
|
isOverLight
|
|
362
362
|
? '0px 16px 70px rgba(0, 0, 0, 0.75)'
|
|
363
|
-
: '0
|
|
363
|
+
: '0 4px 16px rgba(0, 0, 0, 0.14), 0 1px 4px rgba(0, 0, 0, 0.10)'
|
|
364
364
|
);
|
|
365
365
|
}
|
|
366
366
|
};
|
|
@@ -385,69 +385,3 @@ export function usePerformanceMonitor(
|
|
|
385
385
|
toggleMonitoring,
|
|
386
386
|
};
|
|
387
387
|
}
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* Debug Overlay Component (Optional)
|
|
391
|
-
*
|
|
392
|
-
* Shows real-time performance metrics on screen.
|
|
393
|
-
* Only rendered when showOverlay is enabled.
|
|
394
|
-
*/
|
|
395
|
-
export function PerformanceOverlay({ metrics }: { metrics: PerformanceMetrics }) {
|
|
396
|
-
if (typeof window === 'undefined') return null;
|
|
397
|
-
|
|
398
|
-
const overlayStyle: React.CSSProperties = {
|
|
399
|
-
position: 'fixed',
|
|
400
|
-
top: '10px',
|
|
401
|
-
right: '10px',
|
|
402
|
-
padding: '10px',
|
|
403
|
-
backgroundColor: 'rgba(0, 0, 0, 0.8)',
|
|
404
|
-
color: '#fff',
|
|
405
|
-
fontFamily: 'monospace',
|
|
406
|
-
fontSize: '12px',
|
|
407
|
-
borderRadius: '4px',
|
|
408
|
-
zIndex: 9999,
|
|
409
|
-
pointerEvents: 'none',
|
|
410
|
-
minWidth: '150px',
|
|
411
|
-
};
|
|
412
|
-
|
|
413
|
-
const getFpsColor = (fps: number) => {
|
|
414
|
-
if (fps >= 58) return '#4ade80'; // Green
|
|
415
|
-
if (fps >= 45) return '#fbbf24'; // Yellow
|
|
416
|
-
return '#ef4444'; // Red
|
|
417
|
-
};
|
|
418
|
-
|
|
419
|
-
// Performance overlay removed - will be implemented as separate component
|
|
420
|
-
return null;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Utility to get quality multipliers for glass parameters
|
|
425
|
-
*/
|
|
426
|
-
export function getQualityMultipliers(quality: 'low' | 'medium' | 'high') {
|
|
427
|
-
switch (quality) {
|
|
428
|
-
case 'low':
|
|
429
|
-
return {
|
|
430
|
-
distortionOctaves: 2,
|
|
431
|
-
displacementScale: 0.6,
|
|
432
|
-
blurAmount: 0.7,
|
|
433
|
-
animationSpeed: 0.8,
|
|
434
|
-
chromaticIntensity: 0.5,
|
|
435
|
-
};
|
|
436
|
-
case 'medium':
|
|
437
|
-
return {
|
|
438
|
-
distortionOctaves: 4,
|
|
439
|
-
displacementScale: 0.85,
|
|
440
|
-
blurAmount: 0.9,
|
|
441
|
-
animationSpeed: 0.95,
|
|
442
|
-
chromaticIntensity: 0.75,
|
|
443
|
-
};
|
|
444
|
-
case 'high':
|
|
445
|
-
return {
|
|
446
|
-
distortionOctaves: 5,
|
|
447
|
-
displacementScale: 1.0,
|
|
448
|
-
blurAmount: 1.0,
|
|
449
|
-
animationSpeed: 1.0,
|
|
450
|
-
chromaticIntensity: 1.0,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
}
|
|
@@ -2015,6 +2015,11 @@ export const ATOMIX_GLASS = {
|
|
|
2015
2015
|
MIN_BLUR: 0.1,
|
|
2016
2016
|
MOUSE_INFLUENCE_DIVISOR: 100,
|
|
2017
2017
|
EDGE_FADE_PIXELS: 2,
|
|
2018
|
+
// Interaction intensity multipliers shared by the hook and the imperative style updater
|
|
2019
|
+
INTERACTION: {
|
|
2020
|
+
HOVER_INTENSITY: 1.4,
|
|
2021
|
+
ACTIVE_INTENSITY: 1.6,
|
|
2022
|
+
},
|
|
2018
2023
|
// Elasticity physics constants — Apple-tuned: soft springs, fast settling, minimal stretch
|
|
2019
2024
|
ELASTICITY_TRANSLATION_FACTOR: 0.06, // Subtler elastic shift (was 0.1)
|
|
2020
2025
|
ELASTICITY_DISTANCE_THRESHOLD: 200,
|
|
@@ -2131,7 +2136,7 @@ export const ATOMIX_GLASS = {
|
|
|
2131
2136
|
// Container shadows — hairline inner catch + soft floating lift (Apple player bar)
|
|
2132
2137
|
CONTAINER_SHADOW: {
|
|
2133
2138
|
LIGHT:
|
|
2134
|
-
'inset 0 0.5px 0 rgba(255, 255, 255, 0.32), inset 0 1px 2px rgba(255, 255, 255, 0.06), 0
|
|
2139
|
+
'inset 0 0.5px 0 rgba(255, 255, 255, 0.32), inset 0 1px 2px rgba(255, 255, 255, 0.06), 0 4px 16px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.08)',
|
|
2135
2140
|
},
|
|
2136
2141
|
|
|
2137
2142
|
// Phase 1: Animation System Constants
|
|
@@ -29,8 +29,8 @@ $glass-border-1-opacity: 0.08 !default;
|
|
|
29
29
|
|
|
30
30
|
// Rim shadow tokens (inset hairline + inner catch + outer lift)
|
|
31
31
|
$glass-border-color: rgba(255, 255, 255, 0.28) !default;
|
|
32
|
-
$glass-inner-shadow-color: rgba(255, 255, 255, 0.
|
|
33
|
-
$glass-outer-shadow-color: rgba(0, 0, 0, 0.
|
|
32
|
+
$glass-inner-shadow-color: rgba(255, 255, 255, 0.20) !default;
|
|
33
|
+
$glass-outer-shadow-color: rgba(0, 0, 0, 0.08) !default;
|
|
34
34
|
|
|
35
35
|
// Border-only backdrop (ring sampling)
|
|
36
36
|
$glass-border-backdrop-blur: 40px !default;
|
|
@@ -11,81 +11,81 @@ $black: #000000 !default;
|
|
|
11
11
|
$color-contrast-dark: #000000 !default;
|
|
12
12
|
$color-contrast-light: #ffffff !default;
|
|
13
13
|
|
|
14
|
-
// Primitives Primary Colors (
|
|
15
|
-
$primary-1: #
|
|
16
|
-
$primary-2: #
|
|
17
|
-
$primary-3: #
|
|
18
|
-
$primary-4: #
|
|
19
|
-
$primary-5: #
|
|
20
|
-
$primary-6: #
|
|
21
|
-
$primary-7: #
|
|
22
|
-
$primary-8: #
|
|
23
|
-
$primary-9: #
|
|
24
|
-
$primary-10: #
|
|
25
|
-
|
|
26
|
-
// Primitives Red Colors
|
|
27
|
-
$red-1: #
|
|
28
|
-
$red-2: #
|
|
29
|
-
$red-3: #
|
|
30
|
-
$red-4: #
|
|
31
|
-
$red-5: #
|
|
32
|
-
$red-6: #
|
|
33
|
-
$red-7: #
|
|
34
|
-
$red-8: #
|
|
35
|
-
$red-9: #
|
|
36
|
-
$red-10: #
|
|
37
|
-
|
|
38
|
-
// Primitives Green Colors
|
|
39
|
-
$green-1: #
|
|
40
|
-
$green-2: #
|
|
41
|
-
$green-3: #
|
|
42
|
-
$green-4: #
|
|
43
|
-
$green-5: #
|
|
44
|
-
$green-6: #
|
|
45
|
-
$green-7: #
|
|
46
|
-
$green-8: #
|
|
47
|
-
$green-9: #
|
|
48
|
-
$green-10: #
|
|
49
|
-
|
|
50
|
-
// Primitives Yellow Colors
|
|
51
|
-
$yellow-1: #
|
|
52
|
-
$yellow-2: #
|
|
53
|
-
$yellow-3: #
|
|
54
|
-
$yellow-4: #
|
|
55
|
-
$yellow-5: #
|
|
56
|
-
$yellow-6: #
|
|
57
|
-
$yellow-7: #
|
|
58
|
-
$yellow-8: #
|
|
59
|
-
$yellow-9: #
|
|
60
|
-
$yellow-10: #
|
|
61
|
-
|
|
62
|
-
// Primitives Blue Colors
|
|
63
|
-
$blue-1: #
|
|
64
|
-
$blue-2: #
|
|
65
|
-
$blue-3: #
|
|
66
|
-
$blue-4: #
|
|
67
|
-
$blue-5: #
|
|
68
|
-
$blue-6: #
|
|
69
|
-
$blue-7: #
|
|
70
|
-
$blue-8: #
|
|
71
|
-
$blue-9: #
|
|
72
|
-
$blue-10: #
|
|
73
|
-
|
|
74
|
-
// Primitives Gray Colors
|
|
75
|
-
$gray-1: #
|
|
76
|
-
$gray-2: #
|
|
77
|
-
$gray-3: #
|
|
78
|
-
$gray-4: #
|
|
79
|
-
$gray-5: #
|
|
80
|
-
$gray-6: #
|
|
81
|
-
$gray-7: #
|
|
82
|
-
$gray-8: #
|
|
83
|
-
$gray-9: #
|
|
84
|
-
$gray-10: #
|
|
14
|
+
// Primitives Primary Colors (Premium Violet Scale)
|
|
15
|
+
$primary-1: #f6f4ff !default;
|
|
16
|
+
$primary-2: #ece7ff !default;
|
|
17
|
+
$primary-3: #dccfff !default;
|
|
18
|
+
$primary-4: #c1aafd !default;
|
|
19
|
+
$primary-5: #a07ff9 !default;
|
|
20
|
+
$primary-6: #7c4dff !default; // Premium brand violet - rich, refined main brand color
|
|
21
|
+
$primary-7: #6b3ae8 !default;
|
|
22
|
+
$primary-8: #5a2bc9 !default;
|
|
23
|
+
$primary-9: #47209f !default;
|
|
24
|
+
$primary-10: #341776 !default;
|
|
25
|
+
|
|
26
|
+
// Primitives Red Colors (Premium Rose Scale)
|
|
27
|
+
$red-1: #fff1f2 !default;
|
|
28
|
+
$red-2: #ffe4e6 !default;
|
|
29
|
+
$red-3: #fecdd3 !default;
|
|
30
|
+
$red-4: #fda4af !default;
|
|
31
|
+
$red-5: #fb7185 !default;
|
|
32
|
+
$red-6: #f43f5e !default; // Refined, accessible rose-red
|
|
33
|
+
$red-7: #e11d48 !default;
|
|
34
|
+
$red-8: #be123c !default;
|
|
35
|
+
$red-9: #9f1239 !default;
|
|
36
|
+
$red-10: #881337 !default;
|
|
37
|
+
|
|
38
|
+
// Primitives Green Colors (Premium Emerald Scale)
|
|
39
|
+
$green-1: #ecfdf5 !default;
|
|
40
|
+
$green-2: #d1fae5 !default;
|
|
41
|
+
$green-3: #a7f3d0 !default;
|
|
42
|
+
$green-4: #6ee7b7 !default;
|
|
43
|
+
$green-5: #34d399 !default;
|
|
44
|
+
$green-6: #10b981 !default; // Refined, accessible emerald
|
|
45
|
+
$green-7: #059669 !default;
|
|
46
|
+
$green-8: #047857 !default;
|
|
47
|
+
$green-9: #065f46 !default;
|
|
48
|
+
$green-10: #064e3b !default;
|
|
49
|
+
|
|
50
|
+
// Primitives Yellow Colors (Premium Amber Scale)
|
|
51
|
+
$yellow-1: #fffbeb !default;
|
|
52
|
+
$yellow-2: #fef3c7 !default;
|
|
53
|
+
$yellow-3: #fde68a !default;
|
|
54
|
+
$yellow-4: #fcd34d !default;
|
|
55
|
+
$yellow-5: #fbbf24 !default;
|
|
56
|
+
$yellow-6: #f59e0b !default; // Warm, accessible amber
|
|
57
|
+
$yellow-7: #d97706 !default;
|
|
58
|
+
$yellow-8: #b45309 !default;
|
|
59
|
+
$yellow-9: #92400e !default;
|
|
60
|
+
$yellow-10: #78350f !default;
|
|
61
|
+
|
|
62
|
+
// Primitives Blue Colors (Premium Azure Scale)
|
|
63
|
+
$blue-1: #eff8ff !default;
|
|
64
|
+
$blue-2: #d8edff !default;
|
|
65
|
+
$blue-3: #b6ddff !default;
|
|
66
|
+
$blue-4: #84c5ff !default;
|
|
67
|
+
$blue-5: #52a6fa !default;
|
|
68
|
+
$blue-6: #2f80ed !default; // Refined, accessible azure blue
|
|
69
|
+
$blue-7: #1f66d4 !default;
|
|
70
|
+
$blue-8: #1a4fad !default;
|
|
71
|
+
$blue-9: #1a428a !default;
|
|
72
|
+
$blue-10: #173770 !default;
|
|
73
|
+
|
|
74
|
+
// Primitives Gray Colors (Premium Cool Slate Scale)
|
|
75
|
+
$gray-1: #f8fafc !default;
|
|
76
|
+
$gray-2: #f1f5f9 !default;
|
|
77
|
+
$gray-3: #e2e8f0 !default;
|
|
78
|
+
$gray-4: #cbd5e1 !default;
|
|
79
|
+
$gray-5: #94a3b8 !default;
|
|
80
|
+
$gray-6: #64748b !default;
|
|
81
|
+
$gray-7: #475569 !default;
|
|
82
|
+
$gray-8: #334155 !default;
|
|
83
|
+
$gray-9: #1e293b !default;
|
|
84
|
+
$gray-10: #0f172a !default;
|
|
85
85
|
|
|
86
86
|
// Primitives Overlay
|
|
87
|
-
$overlay-1: rgba(
|
|
88
|
-
$overlay-2: rgba($gray-
|
|
87
|
+
$overlay-1: rgba($gray-10, 0.32) !default;
|
|
88
|
+
$overlay-2: rgba($gray-9, 0.6) !default;
|
|
89
89
|
|
|
90
90
|
//Text colors emphasis
|
|
91
91
|
$primary-text: $gray-10 !default;
|
|
@@ -65,54 +65,63 @@
|
|
|
65
65
|
$active-border: null
|
|
66
66
|
) {
|
|
67
67
|
$btn-color: var(--#{config.$prefix}#{$color}, #{map.get(tokens.$theme-colors, $color)});
|
|
68
|
-
$btn-hover-color:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
$btn-hover-color: var(--#{config.$prefix}white, #{colors.$white});
|
|
69
|
+
$btn-hover-bg: var(
|
|
70
|
+
--#{config.$prefix}#{$color}-hover,
|
|
71
|
+
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -15%)}
|
|
72
72
|
);
|
|
73
|
-
$btn-hover-
|
|
74
|
-
$hover
|
|
75
|
-
|
|
76
|
-
--#{config.$prefix}#{$hover-background},
|
|
77
|
-
#{map.get(tokens.$theme-colors, $hover-background)}
|
|
78
|
-
),
|
|
79
|
-
var(
|
|
80
|
-
--#{config.$prefix}#{$color}-hover,
|
|
81
|
-
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -15%)}
|
|
82
|
-
)
|
|
73
|
+
$btn-hover-border: var(
|
|
74
|
+
--#{config.$prefix}#{$color}-hover,
|
|
75
|
+
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -10%)}
|
|
83
76
|
);
|
|
84
|
-
$btn-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
--#{config.$prefix}#{$color}-hover,
|
|
89
|
-
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -10%)}
|
|
90
|
-
)
|
|
77
|
+
$btn-active-color: var(--#{config.$prefix}white, #{colors.$white});
|
|
78
|
+
$btn-active-bg: var(
|
|
79
|
+
--#{config.$prefix}#{$color}-hover,
|
|
80
|
+
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -20%)}
|
|
91
81
|
);
|
|
92
|
-
$btn-active-
|
|
93
|
-
$color-hover,
|
|
94
|
-
|
|
95
|
-
var(--#{config.$prefix}white, #{colors.$white})
|
|
82
|
+
$btn-active-border: var(
|
|
83
|
+
--#{config.$prefix}#{$color}-hover,
|
|
84
|
+
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -25%)}
|
|
96
85
|
);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
var(
|
|
86
|
+
|
|
87
|
+
@if $color-hover {
|
|
88
|
+
$btn-hover-color: var(
|
|
89
|
+
--#{config.$prefix}#{$color-hover},
|
|
90
|
+
#{map.get(tokens.$theme-colors, $color-hover)}
|
|
91
|
+
);
|
|
92
|
+
$btn-active-color: var(
|
|
93
|
+
--#{config.$prefix}#{$color-hover},
|
|
94
|
+
#{map.get(tokens.$theme-colors, $color-hover)}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@if $hover-background {
|
|
99
|
+
$btn-hover-bg: var(
|
|
100
|
+
--#{config.$prefix}#{$hover-background},
|
|
101
|
+
#{map.get(tokens.$theme-colors, $hover-background)}
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@if $hover-border {
|
|
106
|
+
$btn-hover-border: var(
|
|
107
|
+
--#{config.$prefix}#{$hover-border},
|
|
108
|
+
#{map.get(tokens.$theme-colors, $hover-border)}
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@if $active-background {
|
|
113
|
+
$btn-active-bg: var(
|
|
100
114
|
--#{config.$prefix}#{$active-background},
|
|
101
115
|
#{map.get(tokens.$theme-colors, $active-background)}
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var(
|
|
112
|
-
--#{config.$prefix}#{$color}-hover,
|
|
113
|
-
#{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -25%)}
|
|
114
|
-
)
|
|
115
|
-
);
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@if $active-border {
|
|
120
|
+
$btn-active-border: var(
|
|
121
|
+
--#{config.$prefix}#{$active-border},
|
|
122
|
+
#{map.get(tokens.$theme-colors, $active-border)}
|
|
123
|
+
);
|
|
124
|
+
}
|
|
116
125
|
|
|
117
126
|
--#{config.$prefix}btn-color: #{$btn-color};
|
|
118
127
|
--#{config.$prefix}btn-bg: transparent;
|
|
@@ -2,16 +2,19 @@
|
|
|
2
2
|
@use '../01-settings/settings.grid' as grid;
|
|
3
3
|
@use '../02-tools/tools.grid' as *;
|
|
4
4
|
@use '../02-tools/tools.breakpoints' as *;
|
|
5
|
+
@use '../02-tools/tools.rem' as *;
|
|
5
6
|
|
|
6
7
|
.o-grid {
|
|
7
|
-
--#{config.$prefix}gutter-y: #{grid.$grid-gutter-width};
|
|
8
|
+
--#{config.$prefix}gutter-y: #{rem(grid.$grid-gutter-width)};
|
|
8
9
|
@include make-row();
|
|
10
|
+
row-gap: var(--#{config.$prefix}gutter-y);
|
|
9
11
|
|
|
10
12
|
&__col {
|
|
11
13
|
@include make-col-ready();
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
&--no-gutters {
|
|
17
|
+
--#{config.$prefix}gutter-y: 0;
|
|
15
18
|
margin-right: 0;
|
|
16
19
|
margin-left: 0;
|
|
17
20
|
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
|
|
77
77
|
--atomix-glass-border-shadow:
|
|
78
78
|
0 0 0 0.5px var(--atomix-glass-border-color, #{$glass-border-color}) inset,
|
|
79
|
-
0 1px
|
|
80
|
-
0
|
|
79
|
+
0 1px 1px var(--atomix-glass-inner-shadow-color, #{$glass-inner-shadow-color}) inset,
|
|
80
|
+
0 1px 3px var(--atomix-glass-outer-shadow-color, #{$glass-outer-shadow-color});
|
|
81
81
|
|
|
82
82
|
// ── Over-light decorative layers (base, overlay) ─────────────────────────
|
|
83
83
|
// These use var-based positioning so they correctly follow the container in
|