@inc2734/unitone-css 1.3.0 → 1.4.0

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 (50) hide show
  1. package/dist/app.css +1 -1
  2. package/dist/layout-primitives/both-sides/react.js +1 -1
  3. package/dist/layout-primitives/center/react.js +1 -1
  4. package/dist/layout-primitives/cluster/react.js +1 -1
  5. package/dist/layout-primitives/container/react.js +1 -1
  6. package/dist/layout-primitives/decorator/react.js +1 -1
  7. package/dist/layout-primitives/frame/react.js +1 -1
  8. package/dist/layout-primitives/gutters/react.js +1 -1
  9. package/dist/layout-primitives/layers/react.js +1 -1
  10. package/dist/layout-primitives/marquee/react.js +1 -1
  11. package/dist/layout-primitives/reel/react.js +1 -1
  12. package/dist/layout-primitives/responsive-grid/react.js +1 -1
  13. package/dist/layout-primitives/stack/react.js +1 -1
  14. package/dist/layout-primitives/switcher/react.js +1 -1
  15. package/dist/layout-primitives/text/react.js +1 -1
  16. package/dist/layout-primitives/texture/react.js +1 -1
  17. package/dist/layout-primitives/vertical-ends/react.js +1 -1
  18. package/dist/layout-primitives/vertical-writing/react.js +1 -1
  19. package/package.json +1 -1
  20. package/src/behaviors/_fluid-reference.scss +8 -21
  21. package/src/behaviors/_index.scss +3 -1
  22. package/src/behaviors/_responsive-context.scss +96 -0
  23. package/src/layout-primitives/both-sides/index.jsx +1 -12
  24. package/src/layout-primitives/center/index.jsx +1 -11
  25. package/src/layout-primitives/cluster/index.jsx +0 -4
  26. package/src/layout-primitives/container/_index.scss +2 -0
  27. package/src/layout-primitives/container/index.jsx +3 -1
  28. package/src/layout-primitives/decorator/index.jsx +3 -1
  29. package/src/layout-primitives/frame/_index.scss +4 -10
  30. package/src/layout-primitives/frame/index.jsx +1 -1
  31. package/src/layout-primitives/gutters/index.jsx +2 -7
  32. package/src/layout-primitives/layers/_index.scss +7 -12
  33. package/src/layout-primitives/layers/index.jsx +4 -2
  34. package/src/layout-primitives/marquee/index.jsx +1 -13
  35. package/src/layout-primitives/reel/index.jsx +1 -12
  36. package/src/layout-primitives/responsive-grid/_index.scss +2 -0
  37. package/src/layout-primitives/responsive-grid/index.jsx +3 -1
  38. package/src/layout-primitives/stack/_index.scss +2 -0
  39. package/src/layout-primitives/stack/index.jsx +3 -1
  40. package/src/layout-primitives/switcher/_index.scss +2 -0
  41. package/src/layout-primitives/switcher/index.jsx +3 -1
  42. package/src/layout-primitives/text/_index.scss +2 -0
  43. package/src/layout-primitives/text/index.jsx +3 -1
  44. package/src/layout-primitives/texture/index.jsx +1 -8
  45. package/src/layout-primitives/vertical-ends/_index.scss +2 -0
  46. package/src/layout-primitives/vertical-ends/index.jsx +3 -1
  47. package/src/layout-primitives/vertical-writing/_index.scss +9 -21
  48. package/src/layout-primitives/vertical-writing/index.jsx +2 -2
  49. package/src/settings/_root.scss +4 -0
  50. package/src/variables/_index.scss +128 -75
@@ -11,7 +11,8 @@ export const Switcher = ({
11
11
  stairs,
12
12
  stairsUp,
13
13
  containerType,
14
- fluidReference,
14
+ responsiveContext,
15
+ fluidReference, // @deprecated Kept for backward compatibility. Use responsiveContext on an ancestor instead.
15
16
  style,
16
17
  ...props
17
18
  }) => {
@@ -32,6 +33,7 @@ export const Switcher = ({
32
33
  '' !== (stairs ?? '') ? `-stairs:${stairs}` : undefined,
33
34
  '' !== (stairsUp ?? '') ? `-stairs-up:${stairsUp}` : undefined,
34
35
  '' !== (containerType ?? '') ? `-container-type:${containerType}` : undefined,
36
+ 'container' === responsiveContext ? '-responsive-context:container' : undefined,
35
37
  '' !== (fluidReference ?? '') ? `-fluid-reference:${fluidReference}` : undefined,
36
38
  ]
37
39
  .filter(Boolean)
@@ -2,7 +2,9 @@
2
2
  --unitone--gutters: 0px;
3
3
  --unitone--max-width: var(--unitone--measure);
4
4
  --unitone--text-gap: var(--unitone--global--text-gap);
5
+ --unitone--container-type: initial;
5
6
 
7
+ container-type: var(--unitone--container-type);
6
8
  box-sizing: content-box;
7
9
  padding-right: var(--unitone--gutters);
8
10
  padding-left: var(--unitone--gutters);
@@ -9,7 +9,8 @@ export const Text = ({
9
9
  maxWidth,
10
10
  columnWidth,
11
11
  containerType,
12
- fluidReference,
12
+ responsiveContext,
13
+ fluidReference, // @deprecated Kept for backward compatibility. Use responsiveContext on an ancestor instead.
13
14
  style,
14
15
  ...props
15
16
  }) => {
@@ -29,6 +30,7 @@ export const Text = ({
29
30
  '' !== (gap ?? '') ? `-gap:${gap}` : undefined,
30
31
  '' !== (gutters ?? '') ? `-gutters:${gutters}` : undefined,
31
32
  '' !== (containerType ?? '') ? `-container-type:${containerType}` : undefined,
33
+ 'container' === responsiveContext ? '-responsive-context:container' : undefined,
32
34
  '' !== (fluidReference ?? '') ? `-fluid-reference:${fluidReference}` : undefined,
33
35
  ]
34
36
  .filter(Boolean)
@@ -16,8 +16,6 @@ export const Texture = ({
16
16
  textureBorderBottomRightRadius,
17
17
  textureBandTopSize,
18
18
  textureBandBottomSize,
19
- containerType,
20
- fluidReference,
21
19
  style,
22
20
  ...props
23
21
  }) => {
@@ -47,12 +45,7 @@ export const Texture = ({
47
45
 
48
46
  return (
49
47
  <div
50
- data-unitone-layout={[
51
- 'texture',
52
- '' !== (texture ?? '') ? `-texture:${texture}` : undefined,
53
- '' !== (containerType ?? '') ? `-container-type:${containerType}` : undefined,
54
- '' !== (fluidReference ?? '') ? `-fluid-reference:${fluidReference}` : undefined,
55
- ]
48
+ data-unitone-layout={['texture', '' !== (texture ?? '') ? `-texture:${texture}` : undefined]
56
49
  .filter(Boolean)
57
50
  .join(' ')}
58
51
  style={style}
@@ -1,7 +1,9 @@
1
1
  @mixin abstract-vertical-ends() {
2
2
  --unitone--gap: var(--unitone--global--text-gap);
3
3
  --unitone--align-items: stretch;
4
+ --unitone--container-type: initial;
4
5
 
6
+ container-type: var(--unitone--container-type);
5
7
  display: flex;
6
8
  gap: var(--unitone--gap);
7
9
  flex-direction: column;
@@ -4,7 +4,8 @@ export const VerticalEnds = ({
4
4
  gap,
5
5
  alignItems,
6
6
  containerType,
7
- fluidReference,
7
+ responsiveContext,
8
+ fluidReference, // @deprecated Kept for backward compatibility. Use responsiveContext on an ancestor instead.
8
9
  style,
9
10
  ...props
10
11
  }) => {
@@ -19,6 +20,7 @@ export const VerticalEnds = ({
19
20
  '' !== (gap ?? '') ? `-gap:${gap}` : undefined,
20
21
  '' !== (alignItems ?? '') ? `-align-items:${alignItems}` : undefined,
21
22
  '' !== (containerType ?? '') ? `-container-type:${containerType}` : undefined,
23
+ 'container' === responsiveContext ? '-responsive-context:container' : undefined,
22
24
  '' !== (fluidReference ?? '') ? `-fluid-reference:${fluidReference}` : undefined,
23
25
  ]
24
26
  .filter(Boolean)
@@ -1,3 +1,5 @@
1
+ @use '../../behaviors/responsive-context';
2
+
1
3
  @mixin abstract-vertical-writing() {
2
4
  --unitone--gap: var(--unitone--global--text-gap);
3
5
  --unitone--column-gap: var(--unitone--global--gap);
@@ -41,33 +43,19 @@
41
43
  writing-mode: horizontal-tb;
42
44
 
43
45
  > * {
44
- box-sizing: border-box;
45
46
  max-inline-size: none;
47
+ box-sizing: border-box;
46
48
  }
47
49
  }
48
50
 
49
51
  &[data-unitone-layout~="-switch"] {
50
- &:where(:not([data-unitone-layout~="@container"])) {
51
- @media (orientation: portrait) and (width < 600px) {
52
- column-count: auto;
53
- writing-mode: horizontal-tb;
54
-
55
- > * {
56
- box-sizing: border-box;
57
- max-inline-size: none;
58
- }
59
- }
60
- }
61
-
62
- &:where([data-unitone-layout~="@container"]) {
63
- @container (width < 600px) {
64
- column-count: auto;
65
- writing-mode: horizontal-tb;
52
+ @include responsive-context.responsive-query('(width < 600px)') {
53
+ column-count: auto;
54
+ writing-mode: horizontal-tb;
66
55
 
67
- > * {
68
- box-sizing: border-box;
69
- max-inline-size: none;
70
- }
56
+ > * {
57
+ max-inline-size: none;
58
+ box-sizing: border-box;
71
59
  }
72
60
  }
73
61
  }
@@ -6,8 +6,8 @@ export const VerticalWriting = ({
6
6
  maxHeight,
7
7
  switchWritingMode,
8
8
  threshold,
9
- style,
10
9
  queryContext,
10
+ style,
11
11
  ...props
12
12
  }) => {
13
13
  style = {
@@ -24,7 +24,7 @@ export const VerticalWriting = ({
24
24
  '' !== (textOrientation ?? '') ? `-text-orientation:${textOrientation}` : undefined,
25
25
  '' !== (gap ?? '') ? `-gap:${gap}` : undefined,
26
26
  switchWritingMode ? '-switch' : undefined,
27
- queryContext ? `@${queryContext}` : undefined,
27
+ 'container' === queryContext ? '@container' : undefined,
28
28
  ]
29
29
  .filter(Boolean)
30
30
  .join(' ')}
@@ -58,6 +58,10 @@
58
58
 
59
59
  /**
60
60
  * em unitless px real value
61
+ *
62
+ * Firefox may invalidate font-size: var(...) when this registered custom
63
+ * property depends on 1em. It is reset to 0 in the Firefox fallback in
64
+ * variables.line-height().
61
65
  */
62
66
  --unitone--result--1em-px: calc(tan(atan2(var(--unitone--property--1em), 1px)));
63
67
 
@@ -21,54 +21,58 @@ $font-sizes: (
21
21
  7: 6xl,
22
22
  );
23
23
 
24
- @function generate-global-gutters($context: 'viewport') {
25
- $width: var(--unitone--property--100vw);
26
- @if $context == 'container' {
27
- $width: var(--unitone--property--100cqw);
24
+ @function generate-global-gutters($context: 'viewport', $width: null) {
25
+ @if $width == null {
26
+ $width: var(--unitone--property--100vw);
27
+ @if $context == 'container' {
28
+ $width: var(--unitone--property--100cqw);
29
+ }
28
30
  }
29
31
 
30
- @return max(min(#{ $width } * .06, var(--unitone--rem2)), env(safe-area-inset-right), env(safe-area-inset-left));
32
+ @return max(min($width * .06, var(--unitone--rem2)), env(safe-area-inset-right), env(safe-area-inset-left));
31
33
  }
32
34
 
33
- @function generate-fluid-spacing($min, $max, $context: 'viewport') {
34
- $width: var(--unitone--result--100vw-px);
35
- @if $context == 'container' {
36
- $width: var(--unitone--result--100cqw-px);
35
+ @function generate-fluid-spacing($min, $max, $context: 'viewport', $width: null) {
36
+ @if $width == null {
37
+ $width: var(--unitone--result--100vw-px);
38
+ @if $context == 'container' {
39
+ $width: var(--unitone--result--100cqw-px);
40
+ }
37
41
  }
38
42
 
39
43
  @return clamp(
40
- #{ $min },
41
- #{ $min } + ((#{ $max } - #{ $min }) / (#{ $max-breakpoint - $min-breakpoint } * var(--unitone--result--1rem-px)) * (#{ $width } - (#{ $min-breakpoint } * var(--unitone--result--1rem-px)))),
42
- #{ $max }
44
+ $min,
45
+ $min + (($max - $min) / (($max-breakpoint - $min-breakpoint) * var(--unitone--result--1rem-px)) * ($width - ($min-breakpoint * var(--unitone--result--1rem-px)))),
46
+ $max
43
47
  );
44
48
  }
45
49
 
46
- @function generate-spacing($max, $context: 'viewport') {
50
+ @function generate-spacing($max, $context: 'viewport', $width: null) {
47
51
  $quotient: math.div($min-breakpoint, $max-breakpoint);
48
- $min: calc(var(--unitone--em1) + #{ $max } * #{ $quotient });
49
- @return generate-fluid-spacing(#{ $min }, #{ $max }, $context);
52
+ $min: calc(var(--unitone--em1) + $max * $quotient);
53
+ @return generate-fluid-spacing($min, $max, $context, $width);
50
54
  }
51
55
 
52
- @function generate-padding($max, $context: 'viewport') {
56
+ @function generate-padding($max, $context: 'viewport', $width: null) {
53
57
  $quotient: math.div($min-breakpoint, $max-breakpoint);
54
- $min: calc(var(--unitone--em1) + #{ $max } * #{ $quotient } * .2);
55
- @return generate-fluid-spacing(#{ $min }, #{ $max }, $context);
58
+ $min: calc(var(--unitone--em1) + $max * $quotient * .2);
59
+ @return generate-fluid-spacing($min, $max, $context, $width);
56
60
  }
57
61
 
58
62
  @function _max-font-size($level) {
59
- @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--max-harmonic-sequence-base) - (#{ $level })));
63
+ @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--max-harmonic-sequence-base) - ($level)));
60
64
  }
61
65
 
62
66
  @function _min-font-size($level) {
63
- @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--min-harmonic-sequence-base) - (#{ $level })) + 1 - (var(--unitone--harmonic-sequence-base) / var(--unitone--min-harmonic-sequence-base)));
67
+ @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--min-harmonic-sequence-base) - ($level)) + 1 - (var(--unitone--harmonic-sequence-base) / var(--unitone--min-harmonic-sequence-base)));
64
68
  }
65
69
 
66
70
  @function _font-size-scale($level) {
67
- @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--harmonic-sequence-base) - (#{ $level })));
71
+ @return calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--harmonic-sequence-base) - ($level)));
68
72
  }
69
73
 
70
74
  @function font-size-rem($level) {
71
- @return calc(#{ _font-size-scale($level) } * 1rem);
75
+ @return calc(_font-size-scale($level) * 1rem);
72
76
  }
73
77
 
74
78
  @function font-size-fluid($level, $context: 'viewport') {
@@ -79,11 +83,20 @@ $font-sizes: (
79
83
 
80
84
  $max-font-size: _max-font-size($level);
81
85
  $min-font-size: _min-font-size($level);
82
- $slope: calc((#{ $max-font-size } - #{ $min-font-size }) / (#{ $max-breakpoint - $min-breakpoint }));
83
- $intercept: calc(#{-1 * $min-breakpoint } * #{ $slope } + #{ $min-font-size });
84
- $preferred-font-size: calc((#{ $intercept } * 1rem) + (#{ $slope } * #{ $width }));
86
+ $slope: _font-size-slope($min-font-size, $max-font-size);
87
+
88
+ @return _fluid-font-size($min-font-size, $max-font-size, $slope, $width);
89
+ }
85
90
 
86
- @return clamp(var(--unitone--fluid-typography-min-length, calc(1rem * #{ $min-font-size })), #{ $preferred-font-size }, var(--unitone--fluid-typography-max-length, calc(1rem * #{ $max-font-size })));
91
+ @function _font-size-slope($min-font-size, $max-font-size) {
92
+ @return calc(($max-font-size - $min-font-size) / ($max-breakpoint - $min-breakpoint));
93
+ }
94
+
95
+ @function _fluid-font-size($min-font-size, $max-font-size, $slope, $width) {
96
+ $intercept: calc((-1 * $min-breakpoint) * $slope + $min-font-size);
97
+ $preferred-font-size: calc(($intercept * 1rem) + ($slope * $width));
98
+
99
+ @return clamp(var(--unitone--fluid-typography-min-length, calc(1rem * $min-font-size)), $preferred-font-size, var(--unitone--fluid-typography-max-length, calc(1rem * $max-font-size)));
87
100
  }
88
101
 
89
102
  /**
@@ -108,10 +121,10 @@ $font-sizes: (
108
121
  * font size the line-height stays close to max (and is clamped there).
109
122
  */
110
123
  $_min-line-height: calc(var(--unitone--min-line-height) - 0.1);
111
- $_line-height-amplitude: calc((var(--unitone--max-line-height) - #{ $_min-line-height }) * (var(--unitone--result--1rem-px) + var(--unitone--line-height-curvature)));
124
+ $_line-height-amplitude: calc((var(--unitone--max-line-height) - $_min-line-height) * (var(--unitone--result--1rem-px) + var(--unitone--line-height-curvature)));
112
125
  $_line-height: clamp(
113
126
  var(--unitone--min-line-height),
114
- (#{ $_min-line-height } + #{ $_line-height-amplitude } / (var(--unitone--result--1em-px) + var(--unitone--line-height-curvature))),
127
+ ($_min-line-height + $_line-height-amplitude / (var(--unitone--result--1em-px) + var(--unitone--line-height-curvature))),
115
128
  var(--unitone--max-line-height)
116
129
  );
117
130
 
@@ -125,6 +138,9 @@ $_line-height: clamp(
125
138
  // @todo In Firefox, using tan(atan2()) for line-height is considered invalid.
126
139
  // Therefore, a fallback line-height is applied.
127
140
  @supports (-moz-appearance: none) {
141
+ // Break the registered 1em dependency; otherwise Firefox may invalidate font-size: var(...).
142
+ --unitone--result--1em-px: 0;
143
+
128
144
  line-height: clamp(
129
145
  calc(var(--unitone--min-line-height) * 1em),
130
146
  calc((var(--unitone--min-line-height) - 0.1) * 1em + (var(--unitone--max-line-height) - (var(--unitone--min-line-height) - 0.1)) * 1rem),
@@ -137,53 +153,69 @@ $container-max-width: $max-breakpoint * 16px; // = 1280px
137
153
  $grid-columns: 12;
138
154
  $grid-rows: 7;
139
155
 
140
- @mixin spacing-tokens($context: 'viewport') {
141
- @if $context == 'viewport' {
142
- --unitone--s-3: var(--unitone--em-3);
143
- --unitone--s-2: var(--unitone--em-2);
144
- --unitone--s-1: var(--unitone--em-1);
145
- --unitone--s0: var(--unitone--em0);
146
- --unitone--s1: var(--unitone--em1);
156
+ @mixin static-spacing-tokens() {
157
+ --unitone--s-3: var(--unitone--em-3);
158
+ --unitone--s-2: var(--unitone--em-2);
159
+ --unitone--s-1: var(--unitone--em-1);
160
+ --unitone--s0: var(--unitone--em0);
161
+ --unitone--s1: var(--unitone--em1);
162
+ }
163
+
164
+ @mixin spacing-tokens(
165
+ $context: 'viewport',
166
+ $width: null,
167
+ $include-static: $context == 'viewport'
168
+ ) {
169
+ @if $include-static {
170
+ @include static-spacing-tokens();
147
171
  }
148
172
 
149
- --unitone--s2: #{ generate-spacing(var(--unitone--em2), $context) };
150
- --unitone--s3: #{ generate-spacing(var(--unitone--em3), $context) };
151
- --unitone--s4: #{ generate-spacing(var(--unitone--em4), $context) };
152
- --unitone--s5: #{ generate-spacing(var(--unitone--em5), $context) };
153
- --unitone--s6: #{ generate-spacing(var(--unitone--em6), $context) };
154
- --unitone--s7: #{ generate-spacing(var(--unitone--em7), $context) };
155
-
156
- --unitone--s1s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em1), $context) };
157
- --unitone--s2s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em2), $context) };
158
- --unitone--s3s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em3), $context) };
159
- --unitone--s4s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em4), $context) };
160
- --unitone--s5s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em5), $context) };
161
- --unitone--s6s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em6), $context) };
162
- --unitone--s7s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em7), $context) };
163
-
164
- --unitone--s2m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em2), $context) };
165
- --unitone--s3m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em3), $context) };
166
- --unitone--s4m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em4), $context) };
167
- --unitone--s5m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em5), $context) };
168
- --unitone--s6m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em6), $context) };
169
- --unitone--s7m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em7), $context) };
170
- }
171
-
172
- @mixin padding-tokens($context: 'viewport') {
173
- @if $context == 'viewport' {
174
- --unitone--p-3: var(--unitone--em-3);
175
- --unitone--p-2: var(--unitone--em-2);
176
- --unitone--p-1: var(--unitone--em-1);
177
- --unitone--p0: var(--unitone--em0);
178
- --unitone--p1: var(--unitone--em1);
173
+ --unitone--s2: #{ generate-spacing(var(--unitone--em2), $context, $width) };
174
+ --unitone--s3: #{ generate-spacing(var(--unitone--em3), $context, $width) };
175
+ --unitone--s4: #{ generate-spacing(var(--unitone--em4), $context, $width) };
176
+ --unitone--s5: #{ generate-spacing(var(--unitone--em5), $context, $width) };
177
+ --unitone--s6: #{ generate-spacing(var(--unitone--em6), $context, $width) };
178
+ --unitone--s7: #{ generate-spacing(var(--unitone--em7), $context, $width) };
179
+
180
+ --unitone--s1s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em1), $context, $width) };
181
+ --unitone--s2s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em2), $context, $width) };
182
+ --unitone--s3s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em3), $context, $width) };
183
+ --unitone--s4s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em4), $context, $width) };
184
+ --unitone--s5s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em5), $context, $width) };
185
+ --unitone--s6s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em6), $context, $width) };
186
+ --unitone--s7s: #{ generate-fluid-spacing(var(--unitone--em-1), var(--unitone--em7), $context, $width) };
187
+
188
+ --unitone--s2m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em2), $context, $width) };
189
+ --unitone--s3m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em3), $context, $width) };
190
+ --unitone--s4m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em4), $context, $width) };
191
+ --unitone--s5m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em5), $context, $width) };
192
+ --unitone--s6m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em6), $context, $width) };
193
+ --unitone--s7m: #{ generate-fluid-spacing(var(--unitone--em1), var(--unitone--em7), $context, $width) };
194
+ }
195
+
196
+ @mixin static-padding-tokens() {
197
+ --unitone--p-3: var(--unitone--em-3);
198
+ --unitone--p-2: var(--unitone--em-2);
199
+ --unitone--p-1: var(--unitone--em-1);
200
+ --unitone--p0: var(--unitone--em0);
201
+ --unitone--p1: var(--unitone--em1);
202
+ }
203
+
204
+ @mixin padding-tokens(
205
+ $context: 'viewport',
206
+ $width: null,
207
+ $include-static: $context == 'viewport'
208
+ ) {
209
+ @if $include-static {
210
+ @include static-padding-tokens();
179
211
  }
180
212
 
181
- --unitone--p2: #{ generate-padding(var(--unitone--em2), $context) };
182
- --unitone--p3: #{ generate-padding(var(--unitone--em3), $context) };
183
- --unitone--p4: #{ generate-padding(var(--unitone--em4), $context) };
184
- --unitone--p5: #{ generate-padding(var(--unitone--em5), $context) };
185
- --unitone--p6: #{ generate-padding(var(--unitone--em6), $context) };
186
- --unitone--p7: #{ generate-padding(var(--unitone--em7), $context) };
213
+ --unitone--p2: #{ generate-padding(var(--unitone--em2), $context, $width) };
214
+ --unitone--p3: #{ generate-padding(var(--unitone--em3), $context, $width) };
215
+ --unitone--p4: #{ generate-padding(var(--unitone--em4), $context, $width) };
216
+ --unitone--p5: #{ generate-padding(var(--unitone--em5), $context, $width) };
217
+ --unitone--p6: #{ generate-padding(var(--unitone--em6), $context, $width) };
218
+ --unitone--p7: #{ generate-padding(var(--unitone--em7), $context, $width) };
187
219
 
188
220
  --unitone--p1s: var(--unitone--s1s);
189
221
  --unitone--p2s: var(--unitone--s2s);
@@ -201,12 +233,33 @@ $grid-rows: 7;
201
233
  --unitone--p7m: var(--unitone--s7m);
202
234
  }
203
235
 
204
- @mixin font-size-tokens($context: 'viewport') {
236
+ @mixin static-font-size-tokens() {
205
237
  @each $level, $name in $font-sizes {
206
- @if $context == 'viewport' {
207
- --unitone--font-size-#{ $name }: #{ font-size-rem($level) };
238
+ --unitone--font-size-#{ $name }: #{ font-size-rem($level) };
239
+ }
240
+ }
241
+
242
+ @mixin font-size-tokens(
243
+ $context: 'viewport',
244
+ $width: null,
245
+ $include-static: $context == 'viewport'
246
+ ) {
247
+ @if $width == null {
248
+ $width: 100vw;
249
+ @if $context == 'container' {
250
+ $width: var(--unitone--property--100cqw);
208
251
  }
252
+ }
253
+
254
+ @if $include-static {
255
+ @include static-font-size-tokens();
256
+ }
257
+
258
+ @each $level, $name in $font-sizes {
259
+ $min: _min-font-size($level);
260
+ $max: _max-font-size($level);
261
+ $slope: _font-size-slope($min, $max);
209
262
 
210
- --unitone--font-size-#{ $name }-fluid: #{ font-size-fluid($level, $context) };
263
+ --unitone--font-size-#{ $name }-fluid: #{ _fluid-font-size($min, $max, $slope, $width) };
211
264
  }
212
265
  }