@shohojdhara/atomix 0.6.6 → 0.6.8

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 (38) hide show
  1. package/dist/atomix.css +3654 -902
  2. package/dist/atomix.css.map +1 -1
  3. package/dist/atomix.min.css +45 -45
  4. package/dist/atomix.min.css.map +1 -1
  5. package/package.json +21 -1
  6. package/src/layouts/Grid/Grid.stories.tsx +54 -2
  7. package/src/layouts/Grid/README.md +6 -2
  8. package/src/styles/01-settings/_settings.colors.scss +73 -73
  9. package/src/styles/01-settings/_settings.design-tokens.scss +4 -0
  10. package/src/styles/01-settings/_settings.grid.scss +53 -0
  11. package/src/styles/01-settings/_settings.motion.scss +50 -0
  12. package/src/styles/01-settings/_settings.spacing.scss +13 -1
  13. package/src/styles/01-settings/_settings.typography.scss +5 -1
  14. package/src/styles/02-tools/_tools.map-loop.scss +19 -0
  15. package/src/styles/02-tools/_tools.utility-api.scss +57 -53
  16. package/src/styles/05-objects/_objects.grid.scss +4 -1
  17. package/src/styles/99-utilities/_index.core.scss +24 -0
  18. package/src/styles/99-utilities/_index.grid.scss +3 -0
  19. package/src/styles/99-utilities/_index.interaction.scss +3 -0
  20. package/src/styles/99-utilities/_index.motion.scss +5 -0
  21. package/src/styles/99-utilities/_index.scss +5 -0
  22. package/src/styles/99-utilities/_utilities.core.scss +44 -0
  23. package/src/styles/99-utilities/_utilities.generate-grid.scss +7 -0
  24. package/src/styles/99-utilities/_utilities.generate-interaction.scss +7 -0
  25. package/src/styles/99-utilities/_utilities.generate-motion.scss +15 -0
  26. package/src/styles/99-utilities/_utilities.grid.scss +55 -0
  27. package/src/styles/99-utilities/_utilities.interaction.scss +44 -0
  28. package/src/styles/99-utilities/_utilities.link.scss +3 -3
  29. package/src/styles/99-utilities/_utilities.position.scss +15 -0
  30. package/src/styles/99-utilities/_utilities.scss +10 -0
  31. package/src/styles/99-utilities/_utilities.sizes.scss +0 -4
  32. package/src/styles/99-utilities/_utilities.spacing.scss +3 -3
  33. package/src/styles/99-utilities/_utilities.state.scss +64 -0
  34. package/src/styles/99-utilities/_utilities.text-gradient.scss +26 -37
  35. package/src/styles/99-utilities/_utilities.text.scss +0 -11
  36. package/src/styles/99-utilities/_utilities.transform.scss +15 -0
  37. package/src/styles/99-utilities/_utilities.transition.scss +20 -0
  38. package/src/styles/__tests__/utilities-compile.test.ts +37 -0
@@ -0,0 +1,24 @@
1
+ // Core utilities bundle — spacing, flex, typography, colors, sizing, and effects
2
+ @forward 'utilities.background';
3
+ @forward 'utilities.border';
4
+ @forward 'utilities.clearfix';
5
+ @forward 'utilities.display';
6
+ @forward 'utilities.flex';
7
+ @forward 'utilities.gradient';
8
+ @forward 'utilities.glass-fixes';
9
+ @forward 'utilities.link';
10
+ @forward 'utilities.object-fit';
11
+ @forward 'utilities.opacity';
12
+ @forward 'utilities.overflow';
13
+ @forward 'utilities.position';
14
+ @forward 'utilities.shadow';
15
+ @forward 'utilities.sizes';
16
+ @forward 'utilities.spacing';
17
+ @forward 'utilities.text';
18
+ @forward 'utilities.text-gradient';
19
+ @forward 'utilities.visibility';
20
+ @forward 'utilities.visually-hidden';
21
+ @forward 'utilities.z-index';
22
+ @forward 'utilities.touch-target';
23
+
24
+ @use 'utilities.core';
@@ -0,0 +1,3 @@
1
+ // Grid utilities bundle — CSS Grid template, span, and placement
2
+ @forward 'utilities.grid';
3
+ @use 'utilities.generate-grid';
@@ -0,0 +1,3 @@
1
+ // Interaction utilities bundle — cursor, pointer-events, user-select
2
+ @forward 'utilities.interaction';
3
+ @use 'utilities.generate-interaction';
@@ -0,0 +1,5 @@
1
+ // Motion utilities bundle — transitions, transforms, and state variants
2
+ @forward 'utilities.transition';
3
+ @forward 'utilities.transform';
4
+ @forward 'utilities.state';
5
+ @use 'utilities.generate-motion';
@@ -6,6 +6,8 @@
6
6
  @forward 'utilities.flex';
7
7
  @forward 'utilities.glass-fixes';
8
8
  @forward 'utilities.gradient';
9
+ @forward 'utilities.grid';
10
+ @forward 'utilities.interaction';
9
11
  @forward 'utilities.link';
10
12
  @forward 'utilities.object-fit';
11
13
  @forward 'utilities.opacity';
@@ -14,8 +16,11 @@
14
16
  @forward 'utilities.shadow';
15
17
  @forward 'utilities.sizes';
16
18
  @forward 'utilities.spacing';
19
+ @forward 'utilities.state';
17
20
  @forward 'utilities.text';
18
21
  @forward 'utilities.text-gradient';
22
+ @forward 'utilities.transition';
23
+ @forward 'utilities.transform';
19
24
  @forward 'utilities.visibility';
20
25
  @forward 'utilities.visually-hidden';
21
26
  @forward 'utilities.z-index';
@@ -0,0 +1,44 @@
1
+ // Core utility generator (spacing, layout, typography, colors, sizing, effects)
2
+ // Import via @shohojdhara/atomix/scss/utilities/core
3
+
4
+ @use 'sass:map';
5
+ @use '../02-tools/_tools.utility-api' as util-api;
6
+ @use '../01-settings/settings.breakpoints' as breakpoints;
7
+ @use 'utilities.background' as bg;
8
+ @use 'utilities.border' as border;
9
+ @use 'utilities.display' as display;
10
+ @use 'utilities.flex' as flex;
11
+ @use 'utilities.gradient' as gradient;
12
+ @use 'utilities.link' as link;
13
+ @use 'utilities.object-fit' as obj-fit;
14
+ @use 'utilities.opacity' as opacity;
15
+ @use 'utilities.overflow' as overflow;
16
+ @use 'utilities.position' as position;
17
+ @use 'utilities.shadow' as shadow;
18
+ @use 'utilities.sizes' as sizes;
19
+ @use 'utilities.spacing' as spacing;
20
+ @use 'utilities.text' as text;
21
+ @use 'utilities.text-gradient' as textGradient;
22
+ @use 'utilities.visibility' as visibility;
23
+ @use 'utilities.z-index' as z-index;
24
+
25
+ $utilities-core: ();
26
+ $utilities-core: map.merge($utilities-core, bg.$utilities-bg);
27
+ $utilities-core: map.merge($utilities-core, border.$utilities-border);
28
+ $utilities-core: map.merge($utilities-core, display.$utilities-display);
29
+ $utilities-core: map.merge($utilities-core, flex.$utilities-flex);
30
+ $utilities-core: map.merge($utilities-core, gradient.$utilities-gradient);
31
+ $utilities-core: map.merge($utilities-core, link.$utilities-link);
32
+ $utilities-core: map.merge($utilities-core, obj-fit.$utilities-object-fit);
33
+ $utilities-core: map.merge($utilities-core, opacity.$utilities-opacity);
34
+ $utilities-core: map.merge($utilities-core, overflow.$utilities-overflow);
35
+ $utilities-core: map.merge($utilities-core, position.$utilities-position);
36
+ $utilities-core: map.merge($utilities-core, shadow.$utilities-shadow);
37
+ $utilities-core: map.merge($utilities-core, sizes.$utilities-sizes);
38
+ $utilities-core: map.merge($utilities-core, spacing.$utilities-spacing);
39
+ $utilities-core: map.merge($utilities-core, text.$utilities-text);
40
+ $utilities-core: map.merge($utilities-core, visibility.$utilities-visibility);
41
+ $utilities-core: map.merge($utilities-core, z-index.$utilities-z-index);
42
+ $utilities-core: map.merge($utilities-core, textGradient.$utilities-text-gradient);
43
+
44
+ @include util-api.generate-utilities($utilities-core, breakpoints.$grid-breakpoints);
@@ -0,0 +1,7 @@
1
+ // Grid utility generator — opt-in via @shohojdhara/atomix/scss/utilities/grid
2
+
3
+ @use '../02-tools/_tools.utility-api' as util-api;
4
+ @use '../01-settings/settings.breakpoints' as breakpoints;
5
+ @use 'utilities.grid' as grid;
6
+
7
+ @include util-api.generate-utilities(grid.$utilities-grid, breakpoints.$grid-breakpoints);
@@ -0,0 +1,7 @@
1
+ // Interaction utility generator — opt-in via @shohojdhara/atomix/scss/utilities/interaction
2
+
3
+ @use '../02-tools/_tools.utility-api' as util-api;
4
+ @use '../01-settings/settings.breakpoints' as breakpoints;
5
+ @use 'utilities.interaction' as interaction;
6
+
7
+ @include util-api.generate-utilities(interaction.$utilities-interaction, breakpoints.$grid-breakpoints);
@@ -0,0 +1,15 @@
1
+ // Motion utility generator — opt-in via @shohojdhara/atomix/scss/utilities/motion
2
+
3
+ @use 'sass:map';
4
+ @use '../02-tools/_tools.utility-api' as util-api;
5
+ @use '../01-settings/settings.breakpoints' as breakpoints;
6
+ @use 'utilities.transition' as transition;
7
+ @use 'utilities.transform' as transform;
8
+ @use 'utilities.state' as state;
9
+
10
+ $utilities-motion: ();
11
+ $utilities-motion: map.merge($utilities-motion, transition.$utilities-transition);
12
+ $utilities-motion: map.merge($utilities-motion, transform.$utilities-transform);
13
+ $utilities-motion: map.merge($utilities-motion, state.$utilities-state);
14
+
15
+ @include util-api.generate-utilities($utilities-motion, breakpoints.$grid-breakpoints);
@@ -0,0 +1,55 @@
1
+ @use '../01-settings/settings.grid' as grid;
2
+
3
+ // Define utilities for CSS Grid layout
4
+ $utilities-grid: (
5
+ 'grid-template-columns': (
6
+ responsive: true,
7
+ property: grid-template-columns,
8
+ class: u-grid-cols,
9
+ values: grid.$utility-grid-template-columns,
10
+ ),
11
+ 'grid-template-rows': (
12
+ responsive: true,
13
+ property: grid-template-rows,
14
+ class: u-grid-rows,
15
+ values: grid.$utility-grid-template-rows,
16
+ ),
17
+ 'grid-column': (
18
+ responsive: true,
19
+ property: grid-column,
20
+ class: u-col-span,
21
+ values: grid.$utility-grid-column-spans,
22
+ ),
23
+ 'grid-row': (
24
+ responsive: true,
25
+ property: grid-row,
26
+ class: u-row-span,
27
+ values: grid.$utility-grid-row-spans,
28
+ ),
29
+ 'place-items': (
30
+ responsive: true,
31
+ property: place-items,
32
+ class: u-place-items,
33
+ values: (
34
+ start: start,
35
+ end: end,
36
+ center: center,
37
+ baseline: baseline,
38
+ stretch: stretch,
39
+ ),
40
+ ),
41
+ 'place-content': (
42
+ responsive: true,
43
+ property: place-content,
44
+ class: u-place-content,
45
+ values: (
46
+ start: start,
47
+ end: end,
48
+ center: center,
49
+ between: space-between,
50
+ around: space-around,
51
+ evenly: space-evenly,
52
+ stretch: stretch,
53
+ ),
54
+ ),
55
+ );
@@ -0,0 +1,44 @@
1
+ // Define utilities for pointer, cursor, and selection interaction
2
+ $utilities-interaction: (
3
+ 'cursor': (
4
+ property: cursor,
5
+ class: u-cursor,
6
+ values: (
7
+ auto: auto,
8
+ default: default,
9
+ pointer: pointer,
10
+ wait: wait,
11
+ text: text,
12
+ move: move,
13
+ help: help,
14
+ 'not-allowed': not-allowed,
15
+ ),
16
+ ),
17
+ 'pointer-events': (
18
+ property: pointer-events,
19
+ class: u-pointer-events,
20
+ values: (
21
+ none: none,
22
+ auto: auto,
23
+ ),
24
+ ),
25
+ 'user-select': (
26
+ property: user-select,
27
+ class: u-select,
28
+ values: (
29
+ none: none,
30
+ text: text,
31
+ all: all,
32
+ auto: auto,
33
+ ),
34
+ ),
35
+ 'touch-action': (
36
+ property: touch-action,
37
+ class: u-touch-action,
38
+ values: (
39
+ auto: auto,
40
+ none: none,
41
+ manipulation: manipulation,
42
+ ),
43
+ ),
44
+ );
@@ -10,7 +10,7 @@ $utilities-link: (
10
10
  'link-opacity': (
11
11
  css-var: true,
12
12
  class: u-link-opacity,
13
- state: hover,
13
+ pseudo: hover,
14
14
  values: (
15
15
  10: 0.1,
16
16
  25: 0.25,
@@ -22,7 +22,7 @@ $utilities-link: (
22
22
  'link-offset': (
23
23
  property: text-underline-offset,
24
24
  class: u-link-offset,
25
- state: hover,
25
+ pseudo: hover,
26
26
  values: (
27
27
  1: 0.125em,
28
28
  2: 0.25em,
@@ -48,7 +48,7 @@ $utilities-link: (
48
48
  'link-underline-opacity': (
49
49
  css-var: true,
50
50
  class: u-link-underline-opacity,
51
- state: hover,
51
+ pseudo: hover,
52
52
  values: (
53
53
  0: 0,
54
54
  10: 0.1,
@@ -28,6 +28,21 @@ $utilities-position: (
28
28
  class: u-end,
29
29
  values: $position-values,
30
30
  ),
31
+ 'inset': (
32
+ property: inset,
33
+ class: u-inset,
34
+ values: $position-values,
35
+ ),
36
+ 'inset-x': (
37
+ property: inset-inline,
38
+ class: u-inset-x,
39
+ values: $position-values,
40
+ ),
41
+ 'inset-y': (
42
+ property: inset-block,
43
+ class: u-inset-y,
44
+ values: $position-values,
45
+ ),
31
46
  'translate-middle': (
32
47
  property: transform,
33
48
  class: u-translate-middle,
@@ -22,6 +22,11 @@
22
22
  @use 'utilities.text-gradient' as textGradient;
23
23
  @use 'utilities.visibility' as visibility;
24
24
  @use 'utilities.z-index' as z-index;
25
+ @use 'utilities.grid' as grid;
26
+ @use 'utilities.interaction' as interaction;
27
+ @use 'utilities.transition' as transition;
28
+ @use 'utilities.transform' as transform;
29
+ @use 'utilities.state' as state;
25
30
 
26
31
  // Merge all utility maps
27
32
  $utilities: ();
@@ -42,6 +47,11 @@ $utilities: map.merge($utilities, text.$utilities-text);
42
47
  $utilities: map.merge($utilities, visibility.$utilities-visibility);
43
48
  $utilities: map.merge($utilities, z-index.$utilities-z-index);
44
49
  $utilities: map.merge($utilities, textGradient.$utilities-text-gradient);
50
+ $utilities: map.merge($utilities, grid.$utilities-grid);
51
+ $utilities: map.merge($utilities, interaction.$utilities-interaction);
52
+ $utilities: map.merge($utilities, transition.$utilities-transition);
53
+ $utilities: map.merge($utilities, transform.$utilities-transform);
54
+ $utilities: map.merge($utilities, state.$utilities-state);
45
55
 
46
56
  // Generate all utility classes
47
57
  @include util-api.generate-utilities($utilities, breakpoints.$grid-breakpoints);
@@ -10,8 +10,6 @@ $utilities-sizes: (
10
10
  values: map.merge(
11
11
  $spacing-sizes,
12
12
  (
13
- 5: 5%,
14
- 10: 10%,
15
13
  25: 25%,
16
14
  50: 50%,
17
15
  75: 75%,
@@ -63,8 +61,6 @@ $utilities-sizes: (
63
61
  values: map.merge(
64
62
  $spacing-sizes,
65
63
  (
66
- 5: 5%,
67
- 10: 10%,
68
64
  25: 25%,
69
65
  50: 50%,
70
66
  75: 75%,
@@ -178,18 +178,18 @@ $utilities-spacing: (
178
178
  responsive: true,
179
179
  property: gap,
180
180
  class: u-gap,
181
- values: $spacing-sizes,
181
+ values: map.merge($spacing-sizes, $semantic-gap-sizes),
182
182
  ),
183
183
  'row-gap': (
184
184
  responsive: true,
185
185
  property: row-gap,
186
186
  class: u-row-gap,
187
- values: $spacing-sizes,
187
+ values: map.merge($spacing-sizes, $semantic-gap-sizes),
188
188
  ),
189
189
  'column-gap': (
190
190
  responsive: true,
191
191
  property: column-gap,
192
192
  class: u-column-gap,
193
- values: $spacing-sizes,
193
+ values: map.merge($spacing-sizes, $semantic-gap-sizes),
194
194
  ),
195
195
  );
@@ -0,0 +1,64 @@
1
+ @use 'sass:map';
2
+ @use '../01-settings/settings.design-tokens' as color-maps;
3
+ @use '../01-settings/settings.box-shadow' as shadows;
4
+
5
+ // State-variant utilities (hover, focus, active) using pseudo-class wrapping
6
+ $utilities-state: (
7
+ 'hover-background-color': (
8
+ property: background-color,
9
+ class: u-hover-bg,
10
+ pseudo: hover,
11
+ responsive: false,
12
+ values: color-maps.$utilities-bg-colors,
13
+ ),
14
+ 'hover-color': (
15
+ property: color,
16
+ class: u-hover-text,
17
+ pseudo: hover,
18
+ responsive: false,
19
+ values: color-maps.$utilities-text-colors,
20
+ ),
21
+ 'hover-box-shadow': (
22
+ property: box-shadow,
23
+ class: u-hover-shadow,
24
+ pseudo: hover,
25
+ responsive: false,
26
+ values: (
27
+ sm: shadows.$box-shadow-sm,
28
+ md: shadows.$box-shadow-md,
29
+ lg: shadows.$box-shadow-lg,
30
+ xl: shadows.$box-shadow-xl,
31
+ ),
32
+ ),
33
+ 'hover-transform-scale': (
34
+ property: transform,
35
+ class: u-hover-scale,
36
+ pseudo: hover,
37
+ responsive: false,
38
+ values: (
39
+ 95: scale(0.95),
40
+ 100: scale(1),
41
+ 105: scale(1.05),
42
+ 110: scale(1.1),
43
+ ),
44
+ ),
45
+ 'active-transform-scale': (
46
+ property: transform,
47
+ class: u-active-scale,
48
+ pseudo: active,
49
+ responsive: false,
50
+ values: (
51
+ 95: scale(0.95),
52
+ 100: scale(1),
53
+ ),
54
+ ),
55
+ 'focus-outline': (
56
+ property: outline,
57
+ class: u-focus-outline,
58
+ pseudo: focus-visible,
59
+ responsive: false,
60
+ values: (
61
+ none: none,
62
+ ),
63
+ ),
64
+ );
@@ -1,45 +1,34 @@
1
1
  // Text gradient utilities - requires special CSS properties
2
2
  // These utilities apply gradient colors to text using background-clip technique
3
- // Using utility generator system with advanced best practices
4
3
 
5
- @use 'sass:map';
6
4
  @use '../01-settings/settings.design-tokens' as *;
7
5
 
8
- // Define utilities for text gradients
9
- $utilities-text-gradient: (
10
- // Base text gradient utility - applies the core text gradient properties
11
- 'text-gradient': (
12
- property: null,
13
- // No specific CSS property, we're only using local-vars
14
- class: u-text-gradient,
15
- values: (
16
- null: null,
17
- ),
18
- local-vars: (
19
- 'background-clip': text,
20
- '-webkit-background-clip': text,
21
- '-webkit-text-fill-color': transparent,
22
- ),
23
- ),
6
+ // Base clip properties shared by all text-gradient variants
7
+ .u-text-gradient {
8
+ background-clip: text;
9
+ -webkit-background-clip: text;
10
+ -webkit-text-fill-color: transparent;
11
+ }
24
12
 
25
- // Text gradient color variations using existing CSS gradient tokens
13
+ // Define utilities for text gradient color variants
14
+ $utilities-text-gradient: (
26
15
  'text-gradient-colors': (
27
- property: background-image,
28
- class: u-text-gradient,
29
- values: (
30
- primary: var(--atomix-primary-gradient),
31
- secondary: var(--atomix-secondary-gradient),
32
- success: var(--atomix-success-gradient),
33
- warning: var(--atomix-warning-gradient),
34
- error: var(--atomix-error-gradient),
35
- info: var(--atomix-info-gradient),
36
- light: var(--atomix-light-gradient),
37
- dark: var(--atomix-dark-gradient),
38
- ),
39
- local-vars: (
40
- 'background-clip': text,
41
- '-webkit-background-clip': text,
42
- '-webkit-text-fill-color': transparent,
43
- ),
44
- )
16
+ property: background-image,
17
+ class: u-text-gradient,
18
+ values: (
19
+ primary: var(--atomix-primary-gradient),
20
+ secondary: var(--atomix-secondary-gradient),
21
+ success: var(--atomix-success-gradient),
22
+ warning: var(--atomix-warning-gradient),
23
+ error: var(--atomix-error-gradient),
24
+ info: var(--atomix-info-gradient),
25
+ light: var(--atomix-light-gradient),
26
+ dark: var(--atomix-dark-gradient),
27
+ ),
28
+ local-vars: (
29
+ 'background-clip': text,
30
+ '-webkit-background-clip': text,
31
+ '-webkit-text-fill-color': transparent,
32
+ ),
33
+ ),
45
34
  );
@@ -7,22 +7,11 @@
7
7
  // Define utilities for text
8
8
  $utilities-text: (
9
9
  'font-size': (
10
- rfs: true,
11
10
  property: font-size,
12
11
  class: u-text,
13
12
  values: map.merge(
14
13
  color-maps.$font-sizes-extended,
15
14
  (
16
- xs: map.get(color-maps.$font-sizes-extended, 'xs'),
17
- sm: map.get(color-maps.$font-sizes-extended, 'sm'),
18
- base: map.get(color-maps.$font-sizes-extended, 'base'),
19
- lg: map.get(color-maps.$font-sizes-extended, 'lg'),
20
- xl: map.get(color-maps.$font-sizes-extended, 'xl'),
21
- '2xl': map.get(color-maps.$font-sizes-extended, '2xl'),
22
- '3xl': map.get(color-maps.$font-sizes-extended, '3xl'),
23
- '4xl': map.get(color-maps.$font-sizes-extended, '4xl'),
24
- '5xl': map.get(color-maps.$font-sizes-extended, '5xl'),
25
- '6xl': map.get(color-maps.$font-sizes-extended, '6xl'),
26
15
  1: map.get(color-maps.$font-sizes-extended, 'h1'),
27
16
  2: map.get(color-maps.$font-sizes-extended, 'h2'),
28
17
  3: map.get(color-maps.$font-sizes-extended, 'h3'),
@@ -0,0 +1,15 @@
1
+ @use '../01-settings/settings.motion' as motion;
2
+
3
+ // Define utilities for CSS transforms
4
+ $utilities-transform: (
5
+ 'transform': (
6
+ property: transform,
7
+ class: u-scale,
8
+ values: motion.$utility-transform-scales,
9
+ ),
10
+ 'transform-rotate': (
11
+ property: transform,
12
+ class: u-rotate,
13
+ values: motion.$utility-transform-rotates,
14
+ ),
15
+ );
@@ -0,0 +1,20 @@
1
+ @use '../01-settings/settings.motion' as motion;
2
+
3
+ // Define utilities for CSS transitions
4
+ $utilities-transition: (
5
+ 'transition-property': (
6
+ property: transition-property,
7
+ class: u-transition,
8
+ values: motion.$utility-transition-properties,
9
+ ),
10
+ 'transition-duration': (
11
+ property: transition-duration,
12
+ class: u-duration,
13
+ values: motion.$utility-transition-durations,
14
+ ),
15
+ 'transition-timing-function': (
16
+ property: transition-timing-function,
17
+ class: u-ease,
18
+ values: motion.$utility-transition-timing-functions,
19
+ ),
20
+ );
@@ -0,0 +1,37 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { mkdtempSync, rmSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { dirname, join, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { describe, expect, it } from 'vitest';
7
+
8
+ const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../..');
9
+
10
+ const utilityBundles = [
11
+ 'src/styles/99-utilities/_index.scss',
12
+ 'src/styles/99-utilities/_index.core.scss',
13
+ 'src/styles/99-utilities/_index.grid.scss',
14
+ 'src/styles/99-utilities/_index.interaction.scss',
15
+ 'src/styles/99-utilities/_index.motion.scss',
16
+ ] as const;
17
+
18
+ function compileUtilityBundle(entry: string): void {
19
+ const tempDir = mkdtempSync(join(tmpdir(), 'atomix-utilities-'));
20
+ const outputFile = join(tempDir, 'out.css');
21
+
22
+ try {
23
+ execSync(`npx sass "${entry}" "${outputFile}"`, {
24
+ cwd: projectRoot,
25
+ stdio: 'pipe',
26
+ encoding: 'utf8',
27
+ });
28
+ } finally {
29
+ rmSync(tempDir, { recursive: true, force: true });
30
+ }
31
+ }
32
+
33
+ describe('utility SCSS bundles', () => {
34
+ it.each(utilityBundles)('compiles %s without errors', (entry) => {
35
+ expect(() => compileUtilityBundle(entry)).not.toThrow();
36
+ });
37
+ });