@shohojdhara/atomix 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/atomix.config.ts +12 -0
  2. package/build-tools/webpack-loader.js +5 -4
  3. package/dist/atomix.css +138 -17
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +1 -1
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/build-tools/webpack-loader.js +5 -4
  8. package/dist/charts.d.ts +23 -23
  9. package/dist/charts.js +40 -37
  10. package/dist/charts.js.map +1 -1
  11. package/dist/config.d.ts +624 -0
  12. package/dist/config.js +59 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/core.d.ts +2 -2
  15. package/dist/core.js +111 -50
  16. package/dist/core.js.map +1 -1
  17. package/dist/forms.d.ts +3 -6
  18. package/dist/forms.js +2 -2
  19. package/dist/forms.js.map +1 -1
  20. package/dist/heavy.d.ts +1 -1
  21. package/dist/heavy.js +173 -111
  22. package/dist/heavy.js.map +1 -1
  23. package/dist/index.d.ts +98 -65
  24. package/dist/index.esm.js +427 -422
  25. package/dist/index.esm.js.map +1 -1
  26. package/dist/index.js +394 -391
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.min.js +1 -1
  29. package/dist/index.min.js.map +1 -1
  30. package/dist/layout.js +59 -60
  31. package/dist/layout.js.map +1 -1
  32. package/dist/theme.js +4 -4
  33. package/dist/theme.js.map +1 -1
  34. package/package.json +14 -9
  35. package/scripts/atomix-cli.js +15 -1
  36. package/scripts/cli/__tests__/complexity-utils.test.js +24 -0
  37. package/scripts/cli/__tests__/detector.test.js +50 -0
  38. package/scripts/cli/__tests__/template-engine.test.js +23 -0
  39. package/scripts/cli/__tests__/test-setup.js +3 -0
  40. package/scripts/cli/commands/doctor.js +15 -3
  41. package/scripts/cli/commands/generate.js +113 -51
  42. package/scripts/cli/internal/ai-engine.js +30 -10
  43. package/scripts/cli/internal/complexity-utils.js +60 -0
  44. package/scripts/cli/internal/component-validator.js +49 -16
  45. package/scripts/cli/internal/generator.js +89 -36
  46. package/scripts/cli/internal/hook-generator.js +5 -2
  47. package/scripts/cli/internal/itcss-generator.js +16 -12
  48. package/scripts/cli/templates/next-templates.js +81 -30
  49. package/scripts/cli/templates/storybook-templates.js +12 -2
  50. package/scripts/cli/utils/detector.js +45 -7
  51. package/scripts/cli/utils/diagnostics.js +78 -0
  52. package/scripts/cli/utils/telemetry.js +13 -0
  53. package/src/components/Accordion/Accordion.stories.tsx +4 -0
  54. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +1 -1
  55. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +219 -0
  56. package/src/components/AtomixGlass/glass-utils.ts +1 -1
  57. package/src/components/Button/Button.tsx +114 -57
  58. package/src/components/Callout/Callout.tsx +4 -4
  59. package/src/components/Chart/ChartRenderer.tsx +1 -1
  60. package/src/components/Chart/DonutChart.tsx +11 -8
  61. package/src/components/EdgePanel/EdgePanel.tsx +119 -115
  62. package/src/components/Form/Select.tsx +4 -4
  63. package/src/components/List/List.tsx +4 -4
  64. package/src/components/Navigation/SideMenu/SideMenu.tsx +6 -6
  65. package/src/components/PhotoViewer/PhotoViewerImage.tsx +1 -1
  66. package/src/components/ProductReview/ProductReview.tsx +4 -2
  67. package/src/components/Rating/Rating.tsx +4 -2
  68. package/src/components/SectionIntro/SectionIntro.tsx +4 -2
  69. package/src/components/Steps/Steps.tsx +1 -1
  70. package/src/components/Tabs/Tabs.tsx +5 -5
  71. package/src/components/Testimonial/Testimonial.tsx +4 -2
  72. package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
  73. package/src/layouts/CssGrid/CssGrid.stories.tsx +464 -0
  74. package/src/layouts/CssGrid/CssGrid.tsx +215 -0
  75. package/src/layouts/CssGrid/index.ts +8 -0
  76. package/src/layouts/CssGrid/scripts/CssGrid.js +284 -0
  77. package/src/layouts/CssGrid/scripts/index.js +43 -0
  78. package/src/layouts/Grid/scripts/Container.js +139 -0
  79. package/src/layouts/Grid/scripts/Grid.js +184 -0
  80. package/src/layouts/Grid/scripts/GridCol.js +273 -0
  81. package/src/layouts/Grid/scripts/Row.js +154 -0
  82. package/src/layouts/Grid/scripts/index.js +48 -0
  83. package/src/layouts/MasonryGrid/MasonryGrid.tsx +71 -59
  84. package/src/lib/composables/atomix-glass/useGlassSize.ts +1 -1
  85. package/src/lib/composables/useAccordion.ts +5 -5
  86. package/src/lib/composables/useAtomixGlass.ts +3 -3
  87. package/src/lib/composables/useBarChart.ts +2 -2
  88. package/src/lib/composables/useChart.ts +3 -2
  89. package/src/lib/composables/useChartToolbar.ts +48 -66
  90. package/src/lib/composables/useDataTable.ts +1 -1
  91. package/src/lib/composables/useDatePicker.ts +2 -2
  92. package/src/lib/composables/useEdgePanel.ts +45 -54
  93. package/src/lib/composables/useHeroBackgroundSlider.ts +5 -5
  94. package/src/lib/composables/usePhotoViewer.ts +2 -3
  95. package/src/lib/composables/usePieChart.ts +1 -1
  96. package/src/lib/composables/usePopover.ts +151 -139
  97. package/src/lib/composables/useSideMenu.ts +28 -41
  98. package/src/lib/composables/useSlider.ts +2 -6
  99. package/src/lib/composables/useTooltip.ts +2 -2
  100. package/src/lib/config/index.ts +39 -0
  101. package/src/lib/theme/devtools/Comparator.tsx +1 -1
  102. package/src/lib/theme/devtools/Inspector.tsx +1 -1
  103. package/src/lib/theme/devtools/LiveEditor.tsx +1 -1
  104. package/src/lib/theme/runtime/ThemeProvider.tsx +1 -1
  105. package/src/styles/01-settings/_index.scss +1 -0
  106. package/src/styles/01-settings/_settings.atomix-glass.scss +174 -0
  107. package/src/styles/01-settings/_settings.masonry-grid.scss +42 -6
  108. package/src/styles/02-tools/_tools.glass.scss +6 -0
  109. package/src/styles/05-objects/_objects.masonry-grid.scss +162 -24
  110. package/src/styles/06-components/_components.atomix-glass.scss +4 -4
  111. package/src/lib/composables/useBreadcrumb.ts +0 -81
  112. package/src/lib/composables/useChartInteractions.ts +0 -123
  113. package/src/lib/composables/useChartPerformance.ts +0 -347
  114. package/src/lib/composables/useDropdown.ts +0 -338
  115. package/src/lib/composables/useModal.ts +0 -110
  116. package/src/lib/hooks/usePerformanceMonitor.ts +0 -148
  117. package/src/lib/utils/displacement-generator.ts +0 -92
  118. package/src/lib/utils/memoryMonitor.ts +0 -191
  119. package/src/styles/01-settings/_settings.testtypecheck.scss +0 -53
  120. package/src/styles/01-settings/_settings.typedbutton.scss +0 -53
  121. package/src/styles/06-components/_components.testbutton.scss +0 -212
  122. package/src/styles/06-components/_components.testtypecheck.scss +0 -212
  123. package/src/styles/06-components/_components.typedbutton.scss +0 -212
@@ -8,20 +8,18 @@ import { SIDE_MENU } from '../constants/components';
8
8
  * @returns SideMenu state and methods
9
9
  */
10
10
  export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
11
- // Default side menu properties
12
- const defaultProps: Partial<SideMenuProps> = {
13
- collapsible: true,
14
- collapsibleDesktop: false,
15
- defaultCollapsedDesktop: false,
16
- isOpen: false,
17
- ...initialProps,
18
- };
11
+ const {
12
+ collapsible = true,
13
+ collapsibleDesktop = false,
14
+ defaultCollapsedDesktop = false,
15
+ isOpen,
16
+ onToggle,
17
+ disabled = false,
18
+ } = initialProps || {};
19
19
 
20
20
  // Local open state for when not controlled externally
21
21
  const [isOpenState, setIsOpenState] = useState(
22
- defaultProps.defaultCollapsedDesktop !== undefined
23
- ? !defaultProps.defaultCollapsedDesktop
24
- : defaultProps.isOpen || false
22
+ defaultCollapsedDesktop !== undefined ? !defaultCollapsedDesktop : isOpen || false
25
23
  );
26
24
 
27
25
  // Refs for managing responsive behavior
@@ -31,19 +29,18 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
31
29
 
32
30
  // Update local state when external state changes
33
31
  useEffect(() => {
34
- if (typeof defaultProps.isOpen !== 'undefined') {
35
- setIsOpenState(defaultProps.isOpen);
36
- } else if (defaultProps.defaultCollapsedDesktop !== undefined) {
37
- setIsOpenState(!defaultProps.defaultCollapsedDesktop);
32
+ if (typeof isOpen !== 'undefined') {
33
+ setIsOpenState(isOpen);
34
+ } else if (defaultCollapsedDesktop !== undefined) {
35
+ setIsOpenState(!defaultCollapsedDesktop);
38
36
  }
39
- }, [defaultProps.isOpen, defaultProps.defaultCollapsedDesktop]);
37
+ }, [isOpen, defaultCollapsedDesktop]);
40
38
 
41
39
  // Set initial height on mount
42
40
  useEffect(() => {
43
41
  const isMobile = window.innerWidth < 768;
44
- const shouldCollapse = isMobile ? defaultProps.collapsible : defaultProps.collapsibleDesktop;
45
- const currentOpen =
46
- typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
42
+ const shouldCollapse = isMobile ? collapsible : collapsibleDesktop;
43
+ const currentOpen = typeof isOpen !== 'undefined' ? isOpen : isOpenState;
47
44
 
48
45
  if (shouldCollapse && wrapperRef.current && innerRef.current) {
49
46
  // Use setTimeout to ensure DOM is fully rendered
@@ -62,13 +59,13 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
62
59
  wrapperRef.current.style.height = 'auto';
63
60
  }
64
61
  return undefined;
65
- }, []); // Only run on mount
62
+ }, [collapsible, collapsibleDesktop, isOpen, isOpenState]);
66
63
 
67
64
  // Handle responsive behavior - vertical collapse for both mobile and desktop
68
65
  useEffect(() => {
69
66
  const handleResize = () => {
70
67
  const isMobile = window.innerWidth < 768; // MD breakpoint
71
- const shouldCollapse = isMobile ? defaultProps.collapsible : defaultProps.collapsibleDesktop;
68
+ const shouldCollapse = isMobile ? collapsible : collapsibleDesktop;
72
69
 
73
70
  if (!shouldCollapse) {
74
71
  // Not collapsible - always show content
@@ -77,8 +74,7 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
77
74
  }
78
75
  } else if (wrapperRef.current && innerRef.current) {
79
76
  // Set proper height for vertical animation (both mobile and desktop)
80
- const currentOpen =
81
- typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
77
+ const currentOpen = typeof isOpen !== 'undefined' ? isOpen : isOpenState;
82
78
 
83
79
  // Use requestAnimationFrame to ensure DOM is ready
84
80
  requestAnimationFrame(() => {
@@ -101,22 +97,15 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
101
97
  clearTimeout(timeoutId);
102
98
  window.removeEventListener('resize', handleResize);
103
99
  };
104
- }, [
105
- defaultProps.collapsible,
106
- defaultProps.collapsibleDesktop,
107
- defaultProps.isOpen,
108
- defaultProps.onToggle,
109
- isOpenState,
110
- ]);
100
+ }, [collapsible, collapsibleDesktop, isOpen, onToggle, isOpenState]);
111
101
 
112
102
  // Update wrapper height when open state changes (both mobile and desktop)
113
103
  useEffect(() => {
114
104
  const isMobile = window.innerWidth < 768;
115
- const shouldCollapse = isMobile ? defaultProps.collapsible : defaultProps.collapsibleDesktop;
105
+ const shouldCollapse = isMobile ? collapsible : collapsibleDesktop;
116
106
 
117
107
  if (shouldCollapse && wrapperRef.current && innerRef.current) {
118
- const currentOpen =
119
- typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
108
+ const currentOpen = typeof isOpen !== 'undefined' ? isOpen : isOpenState;
120
109
 
121
110
  // Use requestAnimationFrame to ensure DOM is ready
122
111
  requestAnimationFrame(() => {
@@ -132,7 +121,7 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
132
121
  // Not collapsible - always show content
133
122
  wrapperRef.current.style.height = 'auto';
134
123
  }
135
- }, [defaultProps.isOpen, isOpenState, defaultProps.collapsible, defaultProps.collapsibleDesktop]);
124
+ }, [isOpen, isOpenState, collapsible, collapsibleDesktop]);
136
125
 
137
126
  /**
138
127
  * Generate side menu class based on properties
@@ -159,14 +148,13 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
159
148
  * Handle toggle click (mobile)
160
149
  */
161
150
  const handleToggle = () => {
162
- if (defaultProps.disabled) return;
151
+ if (disabled) return;
163
152
 
164
- const newState =
165
- typeof defaultProps.isOpen !== 'undefined' ? !defaultProps.isOpen : !isOpenState;
153
+ const newState = typeof isOpen !== 'undefined' ? !isOpen : !isOpenState;
166
154
 
167
- if (typeof defaultProps.onToggle === 'function') {
155
+ if (typeof onToggle === 'function') {
168
156
  // Controlled component
169
- defaultProps.onToggle(newState);
157
+ onToggle(newState);
170
158
  } else {
171
159
  // Uncontrolled component
172
160
  setIsOpenState(newState);
@@ -185,11 +173,10 @@ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
185
173
  * @returns Current open state
186
174
  */
187
175
  const getCurrentOpenState = (): boolean => {
188
- return typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
176
+ return typeof isOpen !== 'undefined' ? isOpen : isOpenState;
189
177
  };
190
178
 
191
179
  return {
192
- defaultProps,
193
180
  isOpenState: getCurrentOpenState(),
194
181
  wrapperRef,
195
182
  innerRef,
@@ -39,7 +39,7 @@ export function useSlider(options: UseSliderOptions): UseSliderReturn {
39
39
  onSlideChange,
40
40
  } = options;
41
41
 
42
- const slides = Array.isArray(rawSlides) ? rawSlides : [];
42
+ const slides = useMemo(() => (Array.isArray(rawSlides) ? rawSlides : []), [rawSlides]);
43
43
 
44
44
  const containerRef = useRef<HTMLDivElement | null>(null);
45
45
  const wrapperRef = useRef<HTMLDivElement | null>(null);
@@ -364,8 +364,6 @@ export function useSlider(options: UseSliderOptions): UseSliderReturn {
364
364
  isTransitioning,
365
365
  speed,
366
366
  onSlideChange,
367
- allSlides.length,
368
- loopedSlides,
369
367
  autoplay,
370
368
  ]);
371
369
 
@@ -426,8 +424,6 @@ export function useSlider(options: UseSliderOptions): UseSliderReturn {
426
424
  isTransitioning,
427
425
  speed,
428
426
  onSlideChange,
429
- allSlides.length,
430
- loopedSlides,
431
427
  autoplay,
432
428
  ]);
433
429
 
@@ -458,7 +454,7 @@ export function useSlider(options: UseSliderOptions): UseSliderReturn {
458
454
  onSlideChange?.(index);
459
455
  }, speed);
460
456
  },
461
- [realIndex, isTransitioning, speed, onSlideChange, loop, loopedSlides, autoplay]
457
+ [realIndex, isTransitioning, speed, onSlideChange, loop, slides.length, autoplay]
462
458
  );
463
459
 
464
460
  const handleTouchStart = useCallback(
@@ -28,8 +28,8 @@ interface UseTooltipResult {
28
28
  isVisible: boolean;
29
29
  isPositioned: boolean;
30
30
  tooltipId: string;
31
- triggerRef: RefObject<HTMLDivElement>;
32
- tooltipRef: RefObject<HTMLDivElement>;
31
+ triggerRef: RefObject<HTMLDivElement | null>;
32
+ tooltipRef: RefObject<HTMLDivElement | null>;
33
33
  tooltipStyle: React.CSSProperties;
34
34
  arrowStyle: React.CSSProperties;
35
35
  showTooltip: () => void;
@@ -206,6 +206,29 @@ export interface TokenEngineConfig {
206
206
  };
207
207
  }
208
208
 
209
+ /**
210
+ * CLI component generator defaults (merged before CLI flags; flags win).
211
+ */
212
+ export interface GeneratorConfig {
213
+ /** Default output directory for generated components */
214
+ outputPath?: string;
215
+ /** Override detected framework */
216
+ framework?: 'react' | 'next' | 'vanilla';
217
+ /** Per-feature defaults (CLI --no-* flags override) */
218
+ features?: {
219
+ storybook?: boolean;
220
+ hook?: boolean;
221
+ styles?: boolean;
222
+ tests?: boolean;
223
+ };
224
+ /** Composable hooks directory relative to project root */
225
+ hookOutputDir?: string;
226
+ /** Story file: side-effect import for global Atomix styles */
227
+ storybookCssImport?: string;
228
+ /** Barrel file strategy for new components */
229
+ barrel?: 'index' | 'none';
230
+ }
231
+
209
232
  /**
210
233
  * Atomix Configuration Interface
211
234
  *
@@ -241,6 +264,17 @@ export interface AtomixConfig {
241
264
  model?: string;
242
265
  /** API key for the provider */
243
266
  apiKey?: string;
267
+ /** Temperature for AI creativity (0.0-1.0, default: 0.7) */
268
+ temperature?: number;
269
+ /** Maximum tokens per AI response (default: 4000) */
270
+ maxTokens?: number;
271
+ /** Rate limiting configuration */
272
+ rateLimit?: {
273
+ /** Maximum requests allowed */
274
+ requests: number;
275
+ /** Time window in milliseconds */
276
+ windowMs: number;
277
+ };
244
278
  };
245
279
 
246
280
  /**
@@ -255,6 +289,11 @@ export interface AtomixConfig {
255
289
  anonymize?: boolean;
256
290
  };
257
291
 
292
+ /**
293
+ * `atomix generate` defaults (CLI overrides these)
294
+ */
295
+ generator?: GeneratorConfig;
296
+
258
297
  /**
259
298
  * Theme customization (Tailwind-like)
260
299
  *
@@ -48,7 +48,7 @@ export const ThemeComparator: React.FC<ThemeComparatorProps> = ({
48
48
  const [debouncedSearchQuery, setDebouncedSearchQuery] = useState<string>('');
49
49
  const [filterType, setFilterType] = useState<'all' | 'added' | 'removed' | 'changed'>('all');
50
50
  const [filterCategory, setFilterCategory] = useState<string>('all');
51
- const searchTimeoutRef = useRef<NodeJS.Timeout>();
51
+ const searchTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);
52
52
 
53
53
  // Debounce search query
54
54
  useEffect(() => {
@@ -57,7 +57,7 @@ export const ThemeInspector: React.FC<ThemeInspectorProps> = ({
57
57
  const [searchQuery, setSearchQuery] = useState<string>('');
58
58
  const [debouncedSearchQuery, setDebouncedSearchQuery] = useState<string>('');
59
59
  const [copiedPath, setCopiedPath] = useState<string | null>(null);
60
- const searchTimeoutRef = useRef<NodeJS.Timeout>();
60
+ const searchTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);
61
61
 
62
62
  // Debounce search query
63
63
  useEffect(() => {
@@ -200,7 +200,7 @@ export const ThemeLiveEditor: React.FC<ThemeLiveEditorProps> = ({
200
200
  );
201
201
 
202
202
  // Debounced JSON update to history
203
- const jsonUpdateTimeoutRef = useRef<NodeJS.Timeout>();
203
+ const jsonUpdateTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);
204
204
  useEffect(() => {
205
205
  if (error) return;
206
206
 
@@ -91,7 +91,7 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = ({
91
91
 
92
92
  // Default fallback
93
93
  return 'default';
94
- }, [defaultTheme, enablePersistence, storageKey]);
94
+ }, [defaultTheme, enablePersistence, storageKey, storageAdapter]);
95
95
 
96
96
  // Initialize state - handle both string and DesignTokens for defaultTheme
97
97
  const [currentTheme, setCurrentTheme] = useState<string>(() => {
@@ -13,6 +13,7 @@
13
13
  // Component settings
14
14
  @forward './settings.accordion';
15
15
  @forward './settings.animations';
16
+ @forward './settings.atomix-glass';
16
17
  @forward './settings.avatar-group';
17
18
  @forward './settings.avatar';
18
19
  @forward './settings.badge';
@@ -0,0 +1,174 @@
1
+ // AtomixGlass Settings
2
+ // =============================================================================
3
+ // Default values for glass component styling
4
+ // These can be overridden at any level via CSS custom properties
5
+
6
+ @use 'sass:map';
7
+ @use 'settings.spacing' as *;
8
+ @use 'settings.config' as config;
9
+ @use 'settings.border-radius' as *;
10
+
11
+ // ============================================================================
12
+ // Border Radius
13
+ // ============================================================================
14
+ $glass-radius: var(#{config.$prefix}radius-md, 0.75rem) !default;
15
+
16
+ // ============================================================================
17
+ // Position
18
+ // ============================================================================
19
+ $glass-position: absolute !default;
20
+
21
+ // ============================================================================
22
+ // Border Width
23
+ // ============================================================================
24
+ $glass-border-width: var(#{config.$prefix}spacing-0-5, 0.125rem) !default;
25
+
26
+ // ============================================================================
27
+ // Z-Index Layers
28
+ // ============================================================================
29
+ $glass-base-z-index: 0 !default;
30
+ $glass-z-index-background: 0 !default;
31
+ $glass-z-index-overlay: 1 !default;
32
+ $glass-z-index-content: 2 !default;
33
+
34
+ // ============================================================================
35
+ // Opacity Values
36
+ // ============================================================================
37
+ $glass-hover-1-opacity: 0 !default;
38
+ $glass-hover-2-opacity: 0 !default;
39
+ $glass-hover-3-opacity: 0 !default;
40
+ $glass-base-opacity: 0.6 !default;
41
+ $glass-overlay-opacity: 0.35 !default;
42
+ $glass-overlay-highlight-opacity: 0.25 !default;
43
+
44
+ // ============================================================================
45
+ // Border Opacity
46
+ // ============================================================================
47
+ $glass-border-1-opacity: 0.18 !default;
48
+
49
+ // ============================================================================
50
+ // Over-Light Mode Opacity
51
+ // ============================================================================
52
+ $glass-over-light-dark-opacity: 0.5 !default;
53
+ $glass-over-light-black-opacity: 0.25 !default;
54
+
55
+ // ============================================================================
56
+ // Gradient Colors - Hover 1 (White mode)
57
+ // ============================================================================
58
+ $glass-hover-1-start-color: rgba(255, 255, 255, 0.18) !default;
59
+ $glass-hover-1-end-color: rgba(255, 255, 255, 0) !default;
60
+
61
+ // ============================================================================
62
+ // Gradient Colors - Hover 1 (Dark/Over-light mode)
63
+ // ============================================================================
64
+ $glass-hover-1-black-start: 0.12 !default;
65
+ $glass-hover-1-black-mid: 0.06 !default;
66
+ $glass-hover-1-black-stop: 60% !default;
67
+ $glass-hover-1-black-end: 100% !default;
68
+
69
+ // ============================================================================
70
+ // Gradient Colors - Hover 2 (White mode)
71
+ // ============================================================================
72
+ $glass-hover-2-start-color: rgba(0, 0, 0, 0.12) !default;
73
+ $glass-hover-2-end-color: rgba(0, 0, 0, 0) !default;
74
+
75
+ // ============================================================================
76
+ // Gradient Colors - Hover 2 (Dark/Over-light mode)
77
+ // ============================================================================
78
+ $glass-hover-2-black-start: 0.08 !default;
79
+ $glass-hover-2-black-mid: 0.04 !default;
80
+ $glass-hover-2-black-stop: 60% !default;
81
+ $glass-hover-2-black-end: 100% !default;
82
+
83
+ // ============================================================================
84
+ // Gradient Colors - Hover 3 (White mode)
85
+ // ============================================================================
86
+ $glass-hover-3-start-color: rgba(255, 255, 255, 0.06) !default;
87
+ $glass-hover-3-end-color: rgba(255, 255, 255, 0) !default;
88
+
89
+ // ============================================================================
90
+ // Gradient Colors - Hover 3 (Dark/Over-light mode)
91
+ // ============================================================================
92
+ $glass-hover-3-black-start: 0.06 !default;
93
+ $glass-hover-3-black-mid: 0.03 !default;
94
+ $glass-hover-3-black-stop: 60% !default;
95
+ $glass-hover-3-black-end: 100% !default;
96
+
97
+ // ============================================================================
98
+ // Base Layer (White mode)
99
+ // ============================================================================
100
+ $glass-base-start-color: rgba(255, 255, 255, 0.08) !default;
101
+ $glass-base-end-color: rgba(255, 255, 255, 0.02) !default;
102
+ $glass-base-white-opacity: 0.08 !default;
103
+
104
+ // ============================================================================
105
+ // Base Layer (Dark/Over-light mode)
106
+ // ============================================================================
107
+ $glass-base-black-start: 0.08 !default;
108
+ $glass-base-black-mid: 0.06 !default;
109
+ $glass-base-black-end: 0.02 !default;
110
+
111
+ // ============================================================================
112
+ // Overlay Layer (White mode)
113
+ // ============================================================================
114
+ $glass-overlay-start-color: rgba(255, 255, 255, 0.12) !default;
115
+ $glass-overlay-end-color: rgba(255, 255, 255, 0) !default;
116
+ $glass-overlay-white-opacity: 0.12 !default;
117
+
118
+ // ============================================================================
119
+ // Overlay Layer (Dark/Over-light mode)
120
+ // ============================================================================
121
+ $glass-overlay-black-start: 0.1 !default;
122
+ $glass-overlay-black-mid: 0.05 !default;
123
+ $glass-overlay-black-stop: 40% !default;
124
+ $glass-overlay-black-end: 0 !default;
125
+
126
+ // ============================================================================
127
+ // Overlay Highlight
128
+ // ============================================================================
129
+ $glass-highlight-start-color: rgba(255, 255, 255, 0.24) !default;
130
+ $glass-highlight-end-color: rgba(255, 255, 255, 0) !default;
131
+ $glass-highlight-opacity-multiplier: 1.1 !default;
132
+
133
+ // ============================================================================
134
+ // Border Shadow
135
+ // ============================================================================
136
+ $glass-border-color: rgba(255, 255, 255, 0.45) !default;
137
+ $glass-inner-shadow-color: rgba(255, 255, 255, 0.18) !default;
138
+ $glass-outer-shadow-color: rgba(0, 0, 0, 0.28) !default;
139
+
140
+ // ============================================================================
141
+ // Backdrop Filter
142
+ // ============================================================================
143
+ $glass-backdrop-filter: blur(30px) saturate(140%) brightness(110%) !default;
144
+
145
+ // ============================================================================
146
+ // Transition
147
+ // ============================================================================
148
+ $glass-transition: var(#{config.$prefix}transition-base) !default;
149
+ $glass-transition-duration: 0.3s !default;
150
+ $glass-easing: cubic-bezier(0.23, 1, 0.32, 1) !default;
151
+
152
+ // ============================================================================
153
+ // Blend Modes
154
+ // ============================================================================
155
+ $glass-hover-blend-mode: overlay !default;
156
+ $glass-base-blend-mode: soft-light !default;
157
+ $glass-overlay-blend-mode: overlay !default;
158
+ $glass-overlay-highlight-blend-mode: screen !default;
159
+ $glass-border-backdrop-blend-mode: overlay !default;
160
+ $glass-border-1-blend-mode: screen !default;
161
+ $glass-border-2-blend-mode: overlay !default;
162
+
163
+ // ============================================================================
164
+ // Background Layer Colors
165
+ // ============================================================================
166
+ $glass-background-dark-color: var(#{config.$prefix}gray-9, #1f2937) !default;
167
+ $glass-background-black-color: var(#{config.$prefix}black, #000000) !default;
168
+
169
+ // ============================================================================
170
+ // Border Backdrop
171
+ // ============================================================================
172
+ $glass-border-backdrop-blur: 30px !default;
173
+ $glass-border-backdrop-saturate: 140% !default;
174
+ $glass-border-backdrop-brightness: 110% !default;
@@ -1,17 +1,53 @@
1
1
  @use 'settings.config' as config;
2
2
  @use 'settings.breakpoints' as breakpoints;
3
+ @use 'settings.design-tokens' as tokens;
4
+ @use 'settings.colors' as colors;
3
5
 
4
- // Define all masonry grid variables with !default flag for overriding
5
- $masonry-grid-gap: 16px !default;
6
- $masonry-grid-gap-sm: 8px !default;
7
- $masonry-grid-gap-lg: 24px !default;
6
+ // === MASONRY GRID DESIGN TOKENS ===
7
+ // Integrated with Atomix design system using CSS custom properties
8
+
9
+ // Core spacing and layout tokens
10
+ $masonry-grid-gap: var(--#{config.$prefix}spacing-16) !default;
11
+ $masonry-grid-gap-sm: var(--#{config.$prefix}spacing-8) !default;
12
+ $masonry-grid-gap-lg: var(--#{config.$prefix}spacing-24) !default;
13
+ $masonry-grid-gap-xl: var(--#{config.$prefix}spacing-32) !default;
14
+
15
+ // Responsive column configuration using design system breakpoints
8
16
  $masonry-grid-columns-xs: 1 !default;
9
17
  $masonry-grid-columns-sm: 2 !default;
10
18
  $masonry-grid-columns-md: 3 !default;
11
19
  $masonry-grid-columns-lg: 4 !default;
12
20
  $masonry-grid-columns-xl: 4 !default;
13
21
  $masonry-grid-columns-xxl: 5 !default;
14
- $masonry-grid-item-transition: all 0.3s ease-in-out !default;
15
22
 
16
- // Define dark mode variables if needed
23
+ // Animation and transition tokens
24
+ $masonry-grid-item-transition:
25
+ opacity var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base),
26
+ top var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base),
27
+ left var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base) !default;
28
+
29
+ $masonry-grid-item-animation-duration: var(--#{config.$prefix}transition-duration-base) !default;
30
+ $masonry-grid-item-animation-timing: var(--#{config.$prefix}transition-timing-base) !default;
31
+
32
+ // Loading state tokens
33
+ $masonry-grid-loading-indicator-size: var(--#{config.$prefix}spacing-24) !default;
34
+ $masonry-grid-loading-indicator-border-width: var(--#{config.$prefix}border-width-2) !default;
35
+ $masonry-grid-loading-indicator-color: var(--#{config.$prefix}brand-border-subtle) !default;
36
+
37
+ // Dark mode specific tokens (will automatically switch with design system)
17
38
  $masonry-grid-item-bg-dark: var(--#{config.$prefix}gray-9) !default;
39
+ $masonry-grid-loading-overlay-dark: var(--#{config.$prefix}gray-20) !default;
40
+
41
+ // Accessibility and focus management
42
+ $masonry-grid-focus-ring-width: var(--#{config.$prefix}focus-ring-width) !default;
43
+ $masonry-grid-focus-ring-color: var(--#{config.$prefix}focus-ring-color) !default;
44
+ $masonry-grid-focus-ring-offset: var(--#{config.$prefix}focus-ring-offset) !default;
45
+
46
+ // Mobile-first responsive design tokens
47
+ $masonry-grid-min-height-mobile: var(--#{config.$prefix}spacing-200) !default;
48
+ $masonry-grid-min-height-desktop: var(--#{config.$prefix}spacing-100) !default;
49
+
50
+ // Z-index layering
51
+ $masonry-grid-z-index-base: var(--#{config.$prefix}z-index-1) !default;
52
+ $masonry-grid-z-index-loading: var(--#{config.$prefix}z-index-10) !default;
53
+ $masonry-grid-z-index-focus: var(--#{config.$prefix}z-index-5) !default;
@@ -0,0 +1,6 @@
1
+ // AtomixGlass Tools
2
+ // =============================================================================
3
+ // Glass-specific mixins and utilities
4
+ // Note: Focus ring and other general mixins are available in tools.component
5
+
6
+ @use 'tools.component' as *;