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