beathers 5.4.0 → 5.4.1

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.
@@ -1,319 +1,319 @@
1
- @use 'sass:meta';
2
- @use 'sass:string';
3
- @use 'sass:map';
4
- @use 'sass:list';
5
- @use '../variables' as vars;
6
- @use '../functions/validations' as val;
7
- @use '../functions/typographic' as typo;
8
- @use '../settings/configs' as configs;
9
- @use '../functions/mediaQueries' as mQ;
10
- @use '../settings/index' as settings;
11
- @use '../settings/defaults' as defs;
12
-
13
- // Definitions
14
- $useFontFamilies: if(vars.$useFontFamilies != null, vars.$useFontFamilies, settings.$useFontFamilies);
15
- $fonts: if(vars.$fonts != (), vars.$fonts, defs.$fonts);
16
- $fontWeights: if(vars.$fontWeights != (), vars.$fontWeights, defs.$fontWeights);
17
- $fontStyles: if(vars.$fontStyles != (), vars.$fontStyles, defs.$fontStyles);
18
- $fontFormat: if(vars.$fontFormat != (), vars.$fontFormat, defs.$fontFormat);
19
- $defaultFontFamilies: if(vars.$defaultFontFamilies != null, vars.$defaultFontFamilies, defs.$defaultFontFamilies);
20
- $useFontSizes: if(vars.$useFontSizes != null, vars.$useFontSizes, settings.$useFontSizes);
21
- $fontSizes: if(vars.$fontSizes != (), vars.$fontSizes, defs.$fontSizes);
22
- $useFontShapes: if(vars.$useFontShapes != null, vars.$useFontShapes, settings.$useFontShapes);
23
- $useTextAligns: if(vars.$useTextAligns != null, vars.$useTextAligns, settings.$useTextAligns);
24
- $useTextTruncate: if(vars.$useTextTruncate != null, vars.$useTextTruncate, settings.$useTextTruncate);
25
- $textTruncate: if(vars.$textTruncate != (), vars.$textTruncate, defs.$textTruncate);
26
-
27
- // Typographic Utilities
28
- // --------------------------------------
29
- // This file generates various typographic utility classes and @font-face rules
30
- // based on the settings and variables defined in the project.
31
- // Each section can be enabled or disabled via the `$use...` variables.
32
-
33
- // Font Families & @font-face ----- ----- ----- -----
34
- //
35
- // @description
36
- // Generates @font-face rules based on the `vars.$fonts` map and
37
- // corresponding utility classes for applying font families, weights, and styles.
38
- // The generation of these rules and classes is controlled by the
39
- // `$useFontFamilies` boolean variable.
40
- //
41
- // @see $useFontFamilies
42
- // @see vars.$fonts
43
- // @see vars.$fontWeights
44
- // @see vars.$fontStyles
45
- // @see configs.$fontWeightsValues (for mapping weight names to numerical values)
46
- // @see $defaultFontFamilies (for fallback fonts)
47
- // @see typo.font (mixin used for @font-face generation)
48
- // @see mQ.multiSizes (mixin used for responsive class generation)
49
- //
50
- // @generatedClasses
51
- // - @font-face rules for each font variant.
52
- // - Font family/weight classes:
53
- // - e.g., `.regular`, `.bold`, `.italic`
54
- // - e.g., `.fontName-0`, `.fontName-1` (if multiple fonts with same weight names, indexed by $fI)
55
- // - Responsive font family/weight classes (if `mQ.multiSizes` is configured):
56
- // - e.g., `md:regular`, `lg:bold`
57
- // - Font style classes (applied as modifiers):
58
- // - e.g., `.regular.italic`
59
- //
60
- // @example scss - Configuration in vars.$fonts (simplified)
61
- // vars.$fonts: (
62
- // sans: (
63
- // weights: (regular, bold),
64
- // styles: (normal, italic),
65
- // variants: (
66
- // latin: (title: "OpenSans") // `title` here is used for font-family in @font-face
67
- // )
68
- // )
69
- // );
70
- //
71
- // @example css - Generated CSS (simplified, assuming $fI is 0 for the first font)
72
- // @font-face { font-family: "OpenSans-0"; src: local("OpenSans Regular"); font-weight: 400; font-style: normal; }
73
- // .regular { font-family: "OpenSans-0", "Fallback Font"; font-weight: 400; }
74
- // .regular.italic { font-style: italic; }
75
- // .bold { font-family: "OpenSans-0", "Fallback Font"; font-weight: 700; }
76
- // // ... responsive versions if applicable ...
77
- //
78
-
79
- @if $useFontFamilies {
80
- // Font families ----- -----
81
- $fI: 0;
82
- @each $fontKey, $font in $fonts {
83
- // Validate parameters
84
- $checkedFontKey: val.string($fontKey, 'Typographic.fonts.title');
85
- $checkedFont: val.map($font, 'Typographic.fonts');
86
-
87
- $weights: map.get($font, 'weights');
88
- $weights: if($weights != null, map.get($font, 'weights'), $fontWeights);
89
- $styles: map.get($font, 'styles');
90
- $styles: if($styles != null, map.get($font, 'styles'), $fontStyles);
91
- $variants: map.get($font, 'variants');
92
-
93
- // Validate parameters
94
- $checkedWeights: val.list($weights, 'Typographic.fontFace.weights');
95
- $checkedStyles: val.list($styles, 'Typographic.fontFace.styles');
96
- $checkedVariants: val.map($variants, 'Typographic.fontFace.variants');
97
-
98
- @each $weight in $weights {
99
- @each $style in $styles {
100
- @each $lang, $fontFace in $variants {
101
- $title: map.get($fontFace, 'title');
102
- $unicode: if(map.has-key($fontFace, 'unicode'), map.get($fontFace, 'unicode'), null);
103
- $format: if(map.has-key($fontFace, 'format'), map.get($fontFace, 'format'), $fontFormat);
104
- $isLocal: if(map.has-key($fontFace, 'local'), map.get($fontFace, 'isLocal'), true);
105
- $externalUrl: if(map.has-key($fontFace, 'url'), map.get($fontFace, 'url'), null);
106
-
107
- // Validate parameters
108
- $checkedIsLocal: val.boolean($isLocal, 'Typographic.fontFace.local');
109
- $checkedTitle: val.string($title, 'Typographic.fontFace.title');
110
- $checkedFormat: val.string($format, 'Typographic.fontFace.format');
111
- @if $unicode {
112
- $checkedUnicode: val.string($unicode, 'Typographic.fontFace.unicode');
113
- }
114
-
115
- @include typo.font($title, $weight, $format, $style, $fI, $unicode, $isLocal, $externalUrl);
116
- }
117
- }
118
- }
119
-
120
- @include mQ.multiSizes() using ($size, $divider) {
121
- @each $weight in $weights {
122
- @each $style in $styles {
123
- // Font weights
124
- // Validate parameters
125
- $styleClass: if($fI == 0, $weight, '#{$weight}-#{$fI}');
126
- $weightValue: map.get(configs.$fontWeightsValues, $weight);
127
-
128
- $mainClass: if($size, #{$size}#{$divider}#{$styleClass}, $styleClass);
129
-
130
- .#{$mainClass} {
131
- font-family:
132
- '#{$styleClass}',
133
- $defaultFontFamilies if($size, !important, null);
134
- font-weight: if($size, $weightValue !important, $weightValue);
135
- @if meta.type-of($styles) == 'list' and list.length($styles) > 0 {
136
- &.#{$style} {
137
- font-style: $style;
138
- }
139
- }
140
- }
141
- }
142
- }
143
- }
144
-
145
- $fI: $fI + 1;
146
- }
147
- }
148
-
149
- // Font Sizes ----- ----- ----- -----
150
- //
151
- // @description
152
- // Generates utility classes for applying predefined font sizes.
153
- // The generation of these classes is controlled by the
154
- // `$useFontSizes` boolean variable.
155
- // Font sizes are defined in `$fontSizes`.
156
- // Responsive variants are generated using the `mQ.multiSizes` mixin.
157
- //
158
- // @see $useFontSizes
159
- // @see $fontSizes
160
- // @see mQ.multiSizes
161
- //
162
- // @generatedClasses
163
- // - Font size classes:
164
- // - e.g., `.text-sm`, `.text-base`, `.text-lg` (based on keys in `$fontSizes`)
165
- // - Responsive font size classes:
166
- // - e.g., `md:text-sm`, `lg:text-base`
167
- //
168
- // @example scss - Configuration in $fontSizes
169
- // $fontSizes: (
170
- // sm: 0.875rem,
171
- // base: 1rem
172
- // );
173
- //
174
- // @example css - Generated CSS (simplified)
175
- // .text-sm { font-size: 0.875rem; }
176
- // .text-base { font-size: 1rem; }
177
- // // ... responsive versions if applicable ...
178
- //
179
- @if $useFontSizes {
180
- @include mQ.multiSizes() using ($size, $divider) {
181
- @each $fontSize, $value in $fontSizes {
182
- $mainClass: if($size, #{$size}#{$divider}#{$fontSize}, $fontSize);
183
-
184
- .#{$mainClass} {
185
- font-size: $value if($size, !important, null);
186
- }
187
- }
188
- }
189
- }
190
-
191
- // Font Shapes (Text Transformation) ----- ----- ----- -----
192
- //
193
- // @description
194
- // Generates utility classes for text transformations (e.g., uppercase, lowercase)
195
- // and other font-related shape properties like `font-variant`.
196
- // The generation of these classes is controlled by the
197
- // `$useFontShapes` boolean variable.
198
- // Shapes are defined in `configs.$fontShapes` and applied using the `typo.fontShapes` mixin.
199
- // Responsive variants are generated using the `mQ.multiSizes` mixin.
200
- //
201
- // @see $useFontShapes
202
- // @see configs.$fontShapes
203
- // @see typo.fontShapes
204
- // @see mQ.multiSizes
205
- //
206
- // @generatedClasses
207
- // - Text transformation/shape classes:
208
- // - e.g., `.uppercase`, `.lowercase`, `.small-caps` (based on `configs.$fontShapes`)
209
- // - Responsive text transformation/shape classes:
210
- // - e.g., `md:uppercase`, `lg:small-caps`
211
- //
212
- // @example scss - Configuration in configs.$fontShapes
213
- // configs.$fontShapes: (
214
- // text-transform: (uppercase, lowercase, capitalize),
215
- // font-variant: (small-caps)
216
- // );
217
- //
218
- // @example css - Generated CSS (simplified)
219
- // .uppercase { text-transform: uppercase; }
220
- // .small-caps { font-variant: small-caps; }
221
- // // ... responsive versions if applicable ...
222
- //
223
- @if $useFontShapes {
224
- @include mQ.multiSizes() using ($size, $divider) {
225
- @each $type, $values in configs.$fontShapes {
226
- @each $value in $values {
227
- @include typo.fontShapes(if($size, '#{$size}#{$divider}#{$value}', $value), $type, $value);
228
- }
229
- }
230
- }
231
- }
232
-
233
- // Text Alignment ----- ----- ----- -----
234
- //
235
- // @description
236
- // Generates utility classes for text alignment (e.g., left, center, right).
237
- // The generation of these classes is controlled by the
238
- // `$useTextAligns` boolean variable.
239
- // Alignments are defined in `configs.$aligns`.
240
- // Responsive variants are generated using the `mQ.multiSizes` mixin.
241
- //
242
- // @see $useTextAligns
243
- // @see configs.$aligns
244
- // @see mQ.multiSizes
245
- //
246
- // @generatedClasses
247
- // - Text alignment classes:
248
- // - e.g., `.text-left`, `.text-center`, `.text-right`
249
- // - Responsive text alignment classes:
250
- // - e.g., `md:text-left`, `lg:text-center`
251
- //
252
- // @example scss - Configuration in configs.$aligns
253
- // configs.$aligns: (left, center, right, justify);
254
- //
255
- // @example css - Generated CSS (simplified)
256
- // .text-left { text-align: left; }
257
- // // ... responsive versions if applicable ...
258
- //
259
- @if $useTextAligns {
260
- @include mQ.multiSizes() using ($size, $divider) {
261
- @each $dir in configs.$aligns {
262
- // Validate parameters
263
- $checkedDir: val.listItem(configs.$aligns, $dir, 'Typographic.fonts.aligns');
264
-
265
- $mainClass: if($size, '#{$size}#{$divider}text-#{$dir}', 'text-#{$dir}');
266
- .#{$mainClass} {
267
- text-align: if($size, $dir !important, $dir);
268
- }
269
- }
270
- }
271
- }
272
-
273
- // Text Truncation ----- ----- ----- -----
274
- //
275
- // @description
276
- // Generates utility classes for multi-line text truncation (ellipsis).
277
- // The generation of these classes is controlled by the
278
- // `$useTextTruncate` boolean variable.
279
- // The maximum number of lines is controlled by `$textTruncate`.
280
- // Responsive variants are generated using the `mQ.multiSizes` mixin.
281
- //
282
- // @see $useTextTruncate
283
- // @see $textTruncate
284
- // @see mQ.multiSizes
285
- //
286
- // @generatedClasses
287
- // - Text truncation classes:
288
- // - e.g., `.text-lines:1`, `.text-lines:2`, ... up to `$textTruncate`
289
- // - Responsive text truncation classes:
290
- // - e.g., `md:text-lines:1`, `lg:text-lines:2`
291
- //
292
- // @example scss - Configuration in $textTruncate
293
- // $textTruncate: 3;
294
- //
295
- // @example css - Generated CSS (simplified for .text-lines:2)
296
- // .text-lines\:2 { /* Note: CSS escapes the colon */
297
- // display: -webkit-box;
298
- // -webkit-line-clamp: 2;
299
- // line-clamp: 2;
300
- // -webkit-box-orient: vertical;
301
- // overflow: hidden;
302
- // }
303
- // // ... responsive versions if applicable ...
304
- //
305
- @if $useTextTruncate {
306
- @include mQ.multiSizes() using ($size, $divider) {
307
- @each $i in $textTruncate {
308
- $mainClass: if($size, '#{$size}#{$divider}text-lines#{\:}#{$i}', 'text-lines#{\:}#{$i}');
309
-
310
- .#{$mainClass} {
311
- display: -webkit-box;
312
- -webkit-line-clamp: #{$i};
313
- line-clamp: #{$i};
314
- -webkit-box-orient: vertical;
315
- overflow: hidden;
316
- }
317
- }
318
- }
319
- }
1
+ @use 'sass:meta';
2
+ @use 'sass:string';
3
+ @use 'sass:map';
4
+ @use 'sass:list';
5
+ @use '../variables' as vars;
6
+ @use '../functions/validations' as val;
7
+ @use '../functions/typographic' as typo;
8
+ @use '../settings/configs' as configs;
9
+ @use '../functions/mediaQueries' as mQ;
10
+ @use '../settings/index' as settings;
11
+ @use '../settings/defaults' as defs;
12
+
13
+ // Definitions
14
+ $useFontFamilies: if(vars.$useFontFamilies != null, vars.$useFontFamilies, settings.$useFontFamilies);
15
+ $fonts: if(vars.$fonts != (), vars.$fonts, defs.$fonts);
16
+ $fontWeights: if(vars.$fontWeights != (), vars.$fontWeights, defs.$fontWeights);
17
+ $fontStyles: if(vars.$fontStyles != (), vars.$fontStyles, defs.$fontStyles);
18
+ $fontFormat: if(vars.$fontFormat != (), vars.$fontFormat, defs.$fontFormat);
19
+ $defaultFontFamilies: if(vars.$defaultFontFamilies != null, vars.$defaultFontFamilies, defs.$defaultFontFamilies);
20
+ $useFontSizes: if(vars.$useFontSizes != null, vars.$useFontSizes, settings.$useFontSizes);
21
+ $fontSizes: if(vars.$fontSizes != (), vars.$fontSizes, defs.$fontSizes);
22
+ $useFontShapes: if(vars.$useFontShapes != null, vars.$useFontShapes, settings.$useFontShapes);
23
+ $useTextAligns: if(vars.$useTextAligns != null, vars.$useTextAligns, settings.$useTextAligns);
24
+ $useTextTruncate: if(vars.$useTextTruncate != null, vars.$useTextTruncate, settings.$useTextTruncate);
25
+ $textTruncate: if(vars.$textTruncate != (), vars.$textTruncate, defs.$textTruncate);
26
+
27
+ // Typographic Utilities
28
+ // --------------------------------------
29
+ // This file generates various typographic utility classes and @font-face rules
30
+ // based on the settings and variables defined in the project.
31
+ // Each section can be enabled or disabled via the `$use...` variables.
32
+
33
+ // Font Families & @font-face ----- ----- ----- -----
34
+ //
35
+ // @description
36
+ // Generates @font-face rules based on the `vars.$fonts` map and
37
+ // corresponding utility classes for applying font families, weights, and styles.
38
+ // The generation of these rules and classes is controlled by the
39
+ // `$useFontFamilies` boolean variable.
40
+ //
41
+ // @see $useFontFamilies
42
+ // @see vars.$fonts
43
+ // @see vars.$fontWeights
44
+ // @see vars.$fontStyles
45
+ // @see configs.$fontWeightsValues (for mapping weight names to numerical values)
46
+ // @see $defaultFontFamilies (for fallback fonts)
47
+ // @see typo.font (mixin used for @font-face generation)
48
+ // @see mQ.multiSizes (mixin used for responsive class generation)
49
+ //
50
+ // @generatedClasses
51
+ // - @font-face rules for each font variant.
52
+ // - Font family/weight classes:
53
+ // - e.g., `.regular`, `.bold`, `.italic`
54
+ // - e.g., `.fontName-0`, `.fontName-1` (if multiple fonts with same weight names, indexed by $fI)
55
+ // - Responsive font family/weight classes (if `mQ.multiSizes` is configured):
56
+ // - e.g., `md:regular`, `lg:bold`
57
+ // - Font style classes (applied as modifiers):
58
+ // - e.g., `.regular.italic`
59
+ //
60
+ // @example scss - Configuration in vars.$fonts (simplified)
61
+ // vars.$fonts: (
62
+ // sans: (
63
+ // weights: (regular, bold),
64
+ // styles: (normal, italic),
65
+ // variants: (
66
+ // latin: (title: "OpenSans") // `title` here is used for font-family in @font-face
67
+ // )
68
+ // )
69
+ // );
70
+ //
71
+ // @example css - Generated CSS (simplified, assuming $fI is 0 for the first font)
72
+ // @font-face { font-family: "OpenSans-0"; src: local("OpenSans Regular"); font-weight: 400; font-style: normal; }
73
+ // .regular { font-family: "OpenSans-0", "Fallback Font"; font-weight: 400; }
74
+ // .regular.italic { font-style: italic; }
75
+ // .bold { font-family: "OpenSans-0", "Fallback Font"; font-weight: 700; }
76
+ // // ... responsive versions if applicable ...
77
+ //
78
+
79
+ @if $useFontFamilies {
80
+ // Font families ----- -----
81
+ $fI: 0;
82
+ @each $fontKey, $font in $fonts {
83
+ // Validate parameters
84
+ $checkedFontKey: val.string($fontKey, 'Typographic.fonts.title');
85
+ $checkedFont: val.map($font, 'Typographic.fonts');
86
+
87
+ $weights: map.get($font, 'weights');
88
+ $weights: if($weights != null, map.get($font, 'weights'), $fontWeights);
89
+ $styles: map.get($font, 'styles');
90
+ $styles: if($styles != null, map.get($font, 'styles'), $fontStyles);
91
+ $variants: map.get($font, 'variants');
92
+
93
+ // Validate parameters
94
+ $checkedWeights: val.list($weights, 'Typographic.fontFace.weights');
95
+ $checkedStyles: val.list($styles, 'Typographic.fontFace.styles');
96
+ $checkedVariants: val.map($variants, 'Typographic.fontFace.variants');
97
+
98
+ @each $weight in $weights {
99
+ @each $style in $styles {
100
+ @each $lang, $fontFace in $variants {
101
+ $title: map.get($fontFace, 'title');
102
+ $unicode: if(map.has-key($fontFace, 'unicode'), map.get($fontFace, 'unicode'), null);
103
+ $format: if(map.has-key($fontFace, 'format'), map.get($fontFace, 'format'), $fontFormat);
104
+ $isLocal: if(map.has-key($fontFace, 'local'), map.get($fontFace, 'isLocal'), true);
105
+ $externalUrl: if(map.has-key($fontFace, 'url'), map.get($fontFace, 'url'), null);
106
+
107
+ // Validate parameters
108
+ $checkedIsLocal: val.boolean($isLocal, 'Typographic.fontFace.local');
109
+ $checkedTitle: val.string($title, 'Typographic.fontFace.title');
110
+ $checkedFormat: val.string($format, 'Typographic.fontFace.format');
111
+ @if $unicode {
112
+ $checkedUnicode: val.string($unicode, 'Typographic.fontFace.unicode');
113
+ }
114
+
115
+ @include typo.font($title, $weight, $format, $style, $fI, $unicode, $isLocal, $externalUrl);
116
+ }
117
+ }
118
+ }
119
+
120
+ @include mQ.multiSizes() using ($size, $divider) {
121
+ @each $weight in $weights {
122
+ @each $style in $styles {
123
+ // Font weights
124
+ // Validate parameters
125
+ $styleClass: if($fI == 0, $weight, '#{$weight}-#{$fI}');
126
+ $weightValue: map.get(configs.$fontWeightsValues, $weight);
127
+
128
+ $mainClass: if($size, #{$size}#{$divider}#{$styleClass}, $styleClass);
129
+
130
+ .#{$mainClass} {
131
+ font-family:
132
+ '#{$styleClass}',
133
+ $defaultFontFamilies if($size, !important, null);
134
+ font-weight: if($size, $weightValue !important, $weightValue);
135
+ @if meta.type-of($styles) == 'list' and list.length($styles) > 0 {
136
+ &.#{$style} {
137
+ font-style: $style;
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ $fI: $fI + 1;
146
+ }
147
+ }
148
+
149
+ // Font Sizes ----- ----- ----- -----
150
+ //
151
+ // @description
152
+ // Generates utility classes for applying predefined font sizes.
153
+ // The generation of these classes is controlled by the
154
+ // `$useFontSizes` boolean variable.
155
+ // Font sizes are defined in `$fontSizes`.
156
+ // Responsive variants are generated using the `mQ.multiSizes` mixin.
157
+ //
158
+ // @see $useFontSizes
159
+ // @see $fontSizes
160
+ // @see mQ.multiSizes
161
+ //
162
+ // @generatedClasses
163
+ // - Font size classes:
164
+ // - e.g., `.text-sm`, `.text-base`, `.text-lg` (based on keys in `$fontSizes`)
165
+ // - Responsive font size classes:
166
+ // - e.g., `md:text-sm`, `lg:text-base`
167
+ //
168
+ // @example scss - Configuration in $fontSizes
169
+ // $fontSizes: (
170
+ // sm: 0.875rem,
171
+ // base: 1rem
172
+ // );
173
+ //
174
+ // @example css - Generated CSS (simplified)
175
+ // .text-sm { font-size: 0.875rem; }
176
+ // .text-base { font-size: 1rem; }
177
+ // // ... responsive versions if applicable ...
178
+ //
179
+ @if $useFontSizes {
180
+ @include mQ.multiSizes() using ($size, $divider) {
181
+ @each $fontSize, $value in $fontSizes {
182
+ $mainClass: if($size, #{$size}#{$divider}#{$fontSize}, $fontSize);
183
+
184
+ .#{$mainClass} {
185
+ font-size: $value if($size, !important, null);
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ // Font Shapes (Text Transformation) ----- ----- ----- -----
192
+ //
193
+ // @description
194
+ // Generates utility classes for text transformations (e.g., uppercase, lowercase)
195
+ // and other font-related shape properties like `font-variant`.
196
+ // The generation of these classes is controlled by the
197
+ // `$useFontShapes` boolean variable.
198
+ // Shapes are defined in `configs.$fontShapes` and applied using the `typo.fontShapes` mixin.
199
+ // Responsive variants are generated using the `mQ.multiSizes` mixin.
200
+ //
201
+ // @see $useFontShapes
202
+ // @see configs.$fontShapes
203
+ // @see typo.fontShapes
204
+ // @see mQ.multiSizes
205
+ //
206
+ // @generatedClasses
207
+ // - Text transformation/shape classes:
208
+ // - e.g., `.uppercase`, `.lowercase`, `.small-caps` (based on `configs.$fontShapes`)
209
+ // - Responsive text transformation/shape classes:
210
+ // - e.g., `md:uppercase`, `lg:small-caps`
211
+ //
212
+ // @example scss - Configuration in configs.$fontShapes
213
+ // configs.$fontShapes: (
214
+ // text-transform: (uppercase, lowercase, capitalize),
215
+ // font-variant: (small-caps)
216
+ // );
217
+ //
218
+ // @example css - Generated CSS (simplified)
219
+ // .uppercase { text-transform: uppercase; }
220
+ // .small-caps { font-variant: small-caps; }
221
+ // // ... responsive versions if applicable ...
222
+ //
223
+ @if $useFontShapes {
224
+ @include mQ.multiSizes() using ($size, $divider) {
225
+ @each $type, $values in configs.$fontShapes {
226
+ @each $value in $values {
227
+ @include typo.fontShapes(if($size, '#{$size}#{$divider}#{$value}', $value), $type, $value);
228
+ }
229
+ }
230
+ }
231
+ }
232
+
233
+ // Text Alignment ----- ----- ----- -----
234
+ //
235
+ // @description
236
+ // Generates utility classes for text alignment (e.g., left, center, right).
237
+ // The generation of these classes is controlled by the
238
+ // `$useTextAligns` boolean variable.
239
+ // Alignments are defined in `configs.$aligns`.
240
+ // Responsive variants are generated using the `mQ.multiSizes` mixin.
241
+ //
242
+ // @see $useTextAligns
243
+ // @see configs.$aligns
244
+ // @see mQ.multiSizes
245
+ //
246
+ // @generatedClasses
247
+ // - Text alignment classes:
248
+ // - e.g., `.text-left`, `.text-center`, `.text-right`
249
+ // - Responsive text alignment classes:
250
+ // - e.g., `md:text-left`, `lg:text-center`
251
+ //
252
+ // @example scss - Configuration in configs.$aligns
253
+ // configs.$aligns: (left, center, right, justify);
254
+ //
255
+ // @example css - Generated CSS (simplified)
256
+ // .text-left { text-align: left; }
257
+ // // ... responsive versions if applicable ...
258
+ //
259
+ @if $useTextAligns {
260
+ @include mQ.multiSizes() using ($size, $divider) {
261
+ @each $dir in configs.$aligns {
262
+ // Validate parameters
263
+ $checkedDir: val.listItem(configs.$aligns, $dir, 'Typographic.fonts.aligns');
264
+
265
+ $mainClass: if($size, '#{$size}#{$divider}text-#{$dir}', 'text-#{$dir}');
266
+ .#{$mainClass} {
267
+ text-align: if($size, $dir !important, $dir);
268
+ }
269
+ }
270
+ }
271
+ }
272
+
273
+ // Text Truncation ----- ----- ----- -----
274
+ //
275
+ // @description
276
+ // Generates utility classes for multi-line text truncation (ellipsis).
277
+ // The generation of these classes is controlled by the
278
+ // `$useTextTruncate` boolean variable.
279
+ // The maximum number of lines is controlled by `$textTruncate`.
280
+ // Responsive variants are generated using the `mQ.multiSizes` mixin.
281
+ //
282
+ // @see $useTextTruncate
283
+ // @see $textTruncate
284
+ // @see mQ.multiSizes
285
+ //
286
+ // @generatedClasses
287
+ // - Text truncation classes:
288
+ // - e.g., `.text-lines:1`, `.text-lines:2`, ... up to `$textTruncate`
289
+ // - Responsive text truncation classes:
290
+ // - e.g., `md:text-lines:1`, `lg:text-lines:2`
291
+ //
292
+ // @example scss - Configuration in $textTruncate
293
+ // $textTruncate: 3;
294
+ //
295
+ // @example css - Generated CSS (simplified for .text-lines:2)
296
+ // .text-lines\:2 { /* Note: CSS escapes the colon */
297
+ // display: -webkit-box;
298
+ // -webkit-line-clamp: 2;
299
+ // line-clamp: 2;
300
+ // -webkit-box-orient: vertical;
301
+ // overflow: hidden;
302
+ // }
303
+ // // ... responsive versions if applicable ...
304
+ //
305
+ @if $useTextTruncate {
306
+ @include mQ.multiSizes() using ($size, $divider) {
307
+ @each $i in $textTruncate {
308
+ $mainClass: if($size, '#{$size}#{$divider}text-lines#{\:}#{$i}', 'text-lines#{\:}#{$i}');
309
+
310
+ .#{$mainClass} {
311
+ display: -webkit-box;
312
+ -webkit-line-clamp: #{$i};
313
+ line-clamp: #{$i};
314
+ -webkit-box-orient: vertical;
315
+ overflow: hidden;
316
+ }
317
+ }
318
+ }
319
+ }