@inchurch/matcha-core 20.0.3

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.
package/core.scss ADDED
@@ -0,0 +1,1508 @@
1
+ // -------------------------------------------------------------------------------------------------------------------
2
+ // @ Breakpoints generator
3
+ //
4
+ // Examples:
5
+ // @include media-breakpoint("xs") {
6
+ // Show styles in small devices ( Phones and Gadget, 0px and up < 600px )
7
+ // }
8
+ // @include media-breakpoint("gt-xs") {
9
+ // Show styles in medium devices (landscapes and tablets, 600px and up < 1024px )
10
+ // }
11
+ // @include media-breakpoint("gt-sm") {
12
+ // Show styles in large devices (tablets and small monitors, 1024px and up < 1440px)
13
+ // }
14
+ // @include media-breakpoint("gt-md") {
15
+ // Show styles in X-Large devices (big desktops, 1440px and up < 1920)
16
+ // }
17
+ // @include media-breakpoint("gt-lg") {
18
+ // Show styles in XX-Large devices (larger desktops, 1920px and up)
19
+ // }
20
+ // -------------------------------------------------------------------------------------------------------------------
21
+
22
+ // Media step breakpoint mixin based on Angular Material lib
23
+ $breakpoints: (
24
+ xs: 'screen and (max-width: 599px)',
25
+ sm: 'screen and (min-width: 600px) and (max-width: 1023px)',
26
+ md: 'screen and (min-width: 1024px) and (max-width: 1439px)',
27
+ lg: 'screen and (min-width: 1440px) and (max-width: 1919px)',
28
+ xl: 'screen and (min-width: 1920px) and (max-width: 5000px)',
29
+ lt-sm: 'screen and (max-width: 599px)',
30
+ lt-md: 'screen and (max-width: 1023px)',
31
+ lt-lg: 'screen and (max-width: 1439px)',
32
+ lt-xl: 'screen and (max-width: 1919px)',
33
+ gt-xs: 'screen and (min-width: 600px)',
34
+ gt-sm: 'screen and (min-width: 1024px)',
35
+ gt-md: 'screen and (min-width: 1440px)',
36
+ gt-lg: 'screen and (min-width: 1920px)'
37
+ ) !default;
38
+
39
+ // Re-map the breakpoints for the helper classes
40
+ $helper-breakpoints: (
41
+ initial: null,
42
+ xs: 'xs',
43
+ sm: 'gt-xs',
44
+ md: 'gt-sm',
45
+ lg: 'gt-md',
46
+ xl: 'gt-lg'
47
+ );
48
+
49
+ @mixin media-breakpoint($breakpointName) {
50
+ $mediaQuery: map-get($breakpoints, $breakpointName);
51
+ @if ($mediaQuery == null) {
52
+ @content;
53
+ } @else {
54
+ @media #{$mediaQuery} {
55
+ @content;
56
+ }
57
+ }
58
+ }
59
+
60
+ // Define the variable for the base size (usually 16 pixels = 1 rem).
61
+ $base-font-size: 16px;
62
+
63
+ // Function to convert pixels to rem.
64
+ @function px-to-rem($value-in-px) {
65
+ @if $value-in-px != 0 {
66
+ @return calc($value-in-px / $base-font-size) * 1rem;
67
+ } @else {
68
+ @return $value-in-px;
69
+ }
70
+ }
71
+
72
+ // =====================================================================================================
73
+ // DS Token maps — connect legacy utility classes to Design System CSS custom properties.
74
+ // When a utility class (.px-16, .gap-8) resolves to a value with a corresponding DS token,
75
+ // we emit var(--matcha-*) so Figma changes propagate. Values without direct tokens fall back to px.
76
+ // =====================================================================================================
77
+ $space-token-map: (
78
+ 0: var(--matcha-space-0, 0),
79
+ 2: var(--matcha-space-025, 2px),
80
+ 4: var(--matcha-space-050, 4px),
81
+ 6: var(--matcha-space-075, 6px),
82
+ 8: var(--matcha-space-100, 8px),
83
+ 12: var(--matcha-space-150, 12px),
84
+ 16: var(--matcha-space-200, 16px),
85
+ 20: var(--matcha-space-250, 20px),
86
+ 24: var(--matcha-space-300, 24px),
87
+ 32: var(--matcha-space-400, 32px),
88
+ 40: var(--matcha-space-500, 40px),
89
+ 48: var(--matcha-space-600, 48px),
90
+ 64: var(--matcha-space-800, 64px),
91
+ 80: var(--matcha-space-1000, 80px),
92
+ 96: var(--matcha-space-1200, 96px),
93
+ );
94
+
95
+ $radius-token-map: (
96
+ 0: var(--matcha-radius-none, 0),
97
+ 2: var(--matcha-radius-sm, 2px),
98
+ 4: var(--matcha-radius-md, 4px),
99
+ 8: var(--matcha-radius-lg, 8px),
100
+ 16: var(--matcha-radius-xl, 16px),
101
+ 24: var(--matcha-radius-2xl, 24px),
102
+ 9999: var(--matcha-radius-pill, 9999px),
103
+ );
104
+
105
+ $font-size-token-map: (
106
+ 10: var(--matcha-font-size-2xs, 10px),
107
+ 12: var(--matcha-font-size-xs, 12px),
108
+ 14: var(--matcha-font-size-sm, 14px),
109
+ 16: var(--matcha-font-size-md, 16px),
110
+ 18: var(--matcha-font-size-lg, 18px),
111
+ 20: var(--matcha-font-size-xl, 20px),
112
+ 24: var(--matcha-font-size-2xl, 24px),
113
+ 32: var(--matcha-font-size-3xl, 32px),
114
+ );
115
+
116
+ $font-weight-token-map: (
117
+ 400: var(--matcha-weight-regular, 400),
118
+ 500: var(--matcha-weight-medium, 500),
119
+ 600: var(--matcha-weight-semibold, 600),
120
+ 700: var(--matcha-weight-bold, 700),
121
+ 800: 800, // Figma não tem weight/extrabold; literal 800
122
+ 900: var(--matcha-weight-black, 900),
123
+ );
124
+
125
+ @function ds-space($size) {
126
+ $abs-size: if($size < 0, -$size, $size);
127
+ $token: map-get($space-token-map, $abs-size);
128
+ @if $token != null {
129
+ @if $size < 0 {
130
+ @return calc(-1 * #{$token});
131
+ }
132
+ @return $token;
133
+ }
134
+ @return #{$size}px;
135
+ }
136
+
137
+ @function ds-radius($size) {
138
+ $token: map-get($radius-token-map, $size);
139
+ @if $token != null {
140
+ @return $token;
141
+ }
142
+ @return #{$size}px;
143
+ }
144
+
145
+ @function ds-font-size($size) {
146
+ $token: map-get($font-size-token-map, $size);
147
+ @if $token != null {
148
+ @return $token;
149
+ }
150
+ @return #{$size}px;
151
+ }
152
+
153
+ @function ds-font-weight($weight) {
154
+ $token: map-get($font-weight-token-map, $weight);
155
+ @if $token != null {
156
+ @return $token;
157
+ }
158
+ @return $weight;
159
+ }
160
+
161
+ // -----------------------------------------------------------------------------------------------------
162
+ // @ Size classes | Width and Height
163
+ // -----------------------------------------------------------------------------------------------------
164
+ @mixin _size-classes($prop, $abbrev, $length, $size, $infix: "") {
165
+ .#{$abbrev}#{$infix}-#{$size} {
166
+ #{$prop}: $length;
167
+ }
168
+
169
+ .#{$abbrev}#{$infix}-#{$size}--force {
170
+ #{$prop}: $length !important;
171
+ }
172
+
173
+ .max-#{$abbrev}#{$infix}-#{$size} {
174
+ max-#{$prop}: $length;
175
+ }
176
+
177
+ .max-#{$abbrev}#{$infix}-#{$size}--force {
178
+ max-#{$prop}: $length !important;
179
+ }
180
+
181
+ .min-#{$abbrev}#{$infix}-#{$size} {
182
+ min-#{$prop}: $length;
183
+ }
184
+
185
+ .min-#{$abbrev}#{$infix}-#{$size}--force {
186
+ min-#{$prop}: $length !important;
187
+ }
188
+ }
189
+ @mixin generate-size-classes($helper-breakpoints) {
190
+ @each $breakpoint, $media-size in $helper-breakpoints {
191
+ @include media-breakpoint($media-size) {
192
+ $infix: if($media-size == null, "", "-#{$breakpoint}");
193
+
194
+ @each $prop, $abbrev in (height: h, width: w) {
195
+ // Pixels
196
+ @for $index from 0 through 64 {
197
+ $size: $index * 4;
198
+ $length: #{$size}px;
199
+
200
+ @include _size-classes($prop, $abbrev, $length, $size, $infix);
201
+ }
202
+
203
+ // Percentages
204
+ @for $i from 0 through 20 {
205
+ $i-p: 5 * $i;
206
+ $size-p: 5% * $i;
207
+
208
+ @include _size-classes($prop, $abbrev, $size-p, "#{$i-p}-p", $infix);
209
+ }
210
+
211
+ // Big sizes
212
+ @for $i from 3 through 20 {
213
+ $size: $i * 100;
214
+ $length: #{$size}px;
215
+
216
+ @include _size-classes($prop, $abbrev, $length, $size, $infix);
217
+ }
218
+
219
+ // Auto
220
+ .#{$abbrev}#{$infix}-auto {
221
+ #{$prop}: auto;
222
+ }
223
+
224
+ .#{$abbrev}#{$infix}-auto--force {
225
+ #{$prop}: auto !important;
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ @include generate-size-classes($helper-breakpoints);
232
+
233
+ // -----------------------------------------------------------------------------------------------------
234
+ // @ Spacing classes - Margin and Padding
235
+ // Generate spacing values from -64 to 64 jumping from 4 to 4
236
+ // -----------------------------------------------------------------------------------------------------
237
+ @mixin _spacing-classes($prop, $abbrev, $length, $size, $infix: "") {
238
+ .#{$abbrev}#{$infix}-#{$size} {
239
+ #{$prop}: $length;
240
+ }
241
+
242
+ .#{$abbrev}#{$infix}-#{$size}--force {
243
+ #{$prop}: $length !important;
244
+ }
245
+
246
+ .#{$abbrev}x#{$infix}-#{$size} {
247
+ #{$prop}-right: $length;
248
+ #{$prop}-left: $length;
249
+ }
250
+
251
+ .#{$abbrev}x#{$infix}-#{$size}--force {
252
+ #{$prop}-right: $length !important;
253
+ #{$prop}-left: $length !important;
254
+ }
255
+
256
+ .#{$abbrev}y#{$infix}-#{$size} {
257
+ #{$prop}-top: $length;
258
+ #{$prop}-bottom: $length;
259
+ }
260
+
261
+ .#{$abbrev}y#{$infix}-#{$size}--force {
262
+ #{$prop}-top: $length !important;
263
+ #{$prop}-bottom: $length !important;
264
+ }
265
+
266
+ .#{$abbrev}t#{$infix}-#{$size} {
267
+ #{$prop}-top: $length;
268
+ }
269
+
270
+ .#{$abbrev}t#{$infix}-#{$size}--force {
271
+ #{$prop}-top: $length !important;
272
+ }
273
+
274
+ .#{$abbrev}r#{$infix}-#{$size} {
275
+ #{$prop}-right: $length;
276
+ }
277
+
278
+ .#{$abbrev}r#{$infix}-#{$size}--force {
279
+ #{$prop}-right: $length !important;
280
+ }
281
+
282
+ .#{$abbrev}b#{$infix}-#{$size} {
283
+ #{$prop}-bottom: $length;
284
+ }
285
+
286
+ .#{$abbrev}b#{$infix}-#{$size}--force {
287
+ #{$prop}-bottom: $length !important;
288
+ }
289
+
290
+ .#{$abbrev}l#{$infix}-#{$size} {
291
+ #{$prop}-left: $length;
292
+ }
293
+
294
+ .#{$abbrev}l#{$infix}-#{$size}--force {
295
+ #{$prop}-left: $length !important;
296
+ }
297
+ }
298
+ @mixin generate-spacing-classes($helper-breakpoints) {
299
+ @each $breakpoint, $media-size in $helper-breakpoints {
300
+ @include media-breakpoint($media-size) {
301
+ $infix: if($media-size == null, "", "-#{$breakpoint}");
302
+
303
+ @each $prop, $abbrev in (margin: m, padding: p) {
304
+ // For margins, include negative values
305
+ @for $index from -16 through 16 {
306
+ $size: $index * 4;
307
+ $length: ds-space($size); // uses --matcha-space-* tokens when available
308
+
309
+ @include _spacing-classes($prop, $abbrev, $length, $size, $infix);
310
+ }
311
+
312
+ // For paddings, only positive values
313
+ @if ($prop == padding) {
314
+ @for $index from 0 through 24 {
315
+ $size: $index * 4;
316
+ $length: ds-space($size); // uses --matcha-space-* tokens when available
317
+
318
+ @include _spacing-classes($prop, $abbrev, $length, $size, $infix);
319
+ }
320
+ }
321
+
322
+ // Special auto classes for margin
323
+ @if ($prop == margin) {
324
+ .m#{$infix}-auto {
325
+ margin: auto;
326
+ }
327
+
328
+ .m#{$infix}-auto--force {
329
+ margin: auto !important;
330
+ }
331
+
332
+ .mt#{$infix}-auto {
333
+ margin-top: auto;
334
+ }
335
+
336
+ .mt#{$infix}-auto--force {
337
+ margin-top: auto !important;
338
+ }
339
+
340
+ .mr#{$infix}-auto {
341
+ margin-right: auto;
342
+ }
343
+
344
+ .mr#{$infix}-auto--force {
345
+ margin-right: auto !important;
346
+ }
347
+
348
+ .mb#{$infix}-auto {
349
+ margin-bottom: auto;
350
+ }
351
+
352
+ .mb#{$infix}-auto--force {
353
+ margin-bottom: auto !important;
354
+ }
355
+
356
+ .ml#{$infix}-auto {
357
+ margin-left: auto;
358
+ }
359
+
360
+ .ml#{$infix}-auto--force {
361
+ margin-left: auto !important;
362
+ }
363
+
364
+ .mx#{$infix}-auto {
365
+ margin-right: auto;
366
+ margin-left: auto;
367
+ }
368
+
369
+ .mx#{$infix}-auto--force {
370
+ margin-right: auto !important;
371
+ margin-left: auto !important;
372
+ }
373
+
374
+ .my#{$infix}-auto {
375
+ margin-top: auto;
376
+ margin-bottom: auto;
377
+ }
378
+
379
+ .my#{$infix}-auto--force {
380
+ margin-top: auto !important;
381
+ margin-bottom: auto !important;
382
+ }
383
+ }
384
+ }
385
+ }
386
+ }
387
+ }
388
+ @include generate-spacing-classes($helper-breakpoints);
389
+
390
+ // -------------------------------------------------------------------------------------------------------------------
391
+ // @ Display classes | Flex and Grid
392
+ // -------------------------------------------------------------------------------------------------------------------
393
+ @mixin _grid-prop($i) {
394
+ display: grid;
395
+ grid-template-columns: repeat($i, minmax(0, 1fr));
396
+ }
397
+ @mixin generate-layout-grid($helper-breakpoints) {
398
+ $grid-length: 12;
399
+ $grid-prefix: "col";
400
+
401
+ [class^="grid-"] {
402
+ display: grid;
403
+ grid-template-columns: minmax(0, 1fr);
404
+ }
405
+
406
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
407
+ @include media-breakpoint($materialBreakpoint) {
408
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
409
+
410
+ @for $i from 1 through $grid-length {
411
+ .grid#{$infix}-#{$i} {
412
+ @include _grid-prop($i);
413
+ }
414
+
415
+ .span#{$infix}-#{$i}c,
416
+ .colspan#{$infix}-#{$i} {
417
+ grid-column-end: span #{$i};
418
+ }
419
+
420
+ .span#{$infix}-#{$i}r,
421
+ .rowspan#{$infix}-#{$i} {
422
+ grid-row-end: span #{$i};
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+ @mixin generate-layout-flex($helper-breakpoints) {
429
+ $grid-length: 12;
430
+ $grid-prefix: "col";
431
+ .row {
432
+ display: flex;
433
+ flex-wrap: wrap;
434
+
435
+ > div[class*="#{$grid-prefix}-"] {
436
+ box-sizing: border-box;
437
+ }
438
+
439
+ > div:not([class*="#{$grid-prefix}-"]) {
440
+ flex: 1;
441
+ }
442
+
443
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
444
+ @include media-breakpoint($materialBreakpoint) {
445
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
446
+
447
+ @for $i from 1 through $grid-length {
448
+ .#{$grid-prefix}#{$infix}-#{$i} {
449
+ flex-basis: percentage($i / $grid-length);
450
+ }
451
+
452
+ .#{$grid-prefix}-offset#{$infix}-#{$i} {
453
+ margin-left: percentage($i / $grid-length);
454
+ }
455
+ }
456
+ @each $classLabel, $cssValue in (align-start flex-start, align-center center, align-end flex-end) {
457
+ > div[class*="#{$grid-prefix}-"].#{$classLabel} {
458
+ align-self: $cssValue;
459
+ }
460
+ }
461
+
462
+ @each $classLabel, $cssValue in (align-start flex-start, align-center center, align-end flex-end, space-around space-around, space-between space-between) {
463
+ &.#{$classLabel} {
464
+ justify-content: $cssValue;
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ @include generate-layout-grid($helper-breakpoints);
472
+ @include generate-layout-flex($helper-breakpoints);
473
+
474
+ // -------------------------------------------------------------------------------------------------------------------
475
+ // @Gaps classes
476
+ // -------------------------------------------------------------------------------------------------------------------
477
+ @mixin generate-gap-classes($helper-breakpoints) {
478
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
479
+ @include media-breakpoint($materialBreakpoint) {
480
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
481
+
482
+ @for $i from 0 through 12 {
483
+ $size: $i * 4;
484
+ $gap-value: ds-space($size);
485
+ .gap#{$infix}-#{$size} {
486
+ column-gap: $gap-value;
487
+ row-gap: $gap-value;
488
+ }
489
+ }
490
+ }
491
+ }
492
+ // Dynamic gaps
493
+ .gap-inside {
494
+ -moz-column-gap: var(--matcha-space-200, 16px);
495
+ column-gap: var(--matcha-space-200, 16px);
496
+ row-gap: var(--matcha-space-200, 16px);
497
+ }
498
+ .gap-outside {
499
+ -moz-column-gap: var(--matcha-space-200, 16px);
500
+ column-gap: var(--matcha-space-200, 16px);
501
+ row-gap: var(--matcha-space-200, 16px);
502
+ }
503
+ @media screen and (min-width: 600px) {
504
+ .gap-outside {
505
+ -moz-column-gap: var(--matcha-space-300, 24px);
506
+ column-gap: var(--matcha-space-300, 24px);
507
+ row-gap: var(--matcha-space-300, 24px);
508
+ }
509
+ }
510
+ }
511
+ @include generate-gap-classes($helper-breakpoints);
512
+
513
+ // -----------------------------------------------------------------------------------------------------
514
+ // @ Z-index classes
515
+ // -----------------------------------------------------------------------------------------------------
516
+ @mixin generate-z-index-classes($helper-breakpoints) {
517
+ @each $breakpoint, $breakpointName in $helper-breakpoints {
518
+ @include media-breakpoint($breakpointName) {
519
+ $infix: if($breakpointName == null, "", "-#{$breakpoint}");
520
+
521
+ @for $i from -1 through 24 {
522
+ .z-index#{$infix}-#{$i} {
523
+ z-index: #{$i};
524
+ }
525
+
526
+ .z-index#{$infix}-#{$i}--force {
527
+ z-index: #{$i} !important;
528
+ }
529
+ }
530
+ }
531
+ }
532
+ }
533
+ @include generate-z-index-classes($helper-breakpoints);
534
+
535
+ // -----------------------------------------------------------------------------------------------------
536
+ // @ Order classes
537
+ // -----------------------------------------------------------------------------------------------------
538
+ @mixin generate-order-classes($helper-breakpoints) {
539
+ @each $breakpoint, $breakpointName in $helper-breakpoints {
540
+ @include media-breakpoint($breakpointName) {
541
+ $infix: if($breakpointName == null, "", "-#{$breakpoint}");
542
+
543
+ /* <integer> values */
544
+ @for $i from -12 through 12 {
545
+ .order#{$infix}-#{$i} {
546
+ order: #{$i};
547
+ }
548
+
549
+ .order#{$infix}-#{$i}--force {
550
+ order: #{$i} !important;
551
+ }
552
+ }
553
+
554
+ /* Global values */
555
+ @each $value in (inherit, initial) {
556
+ .order#{$infix}-#{$value} {
557
+ order: #{$value};
558
+ }
559
+
560
+ .order#{$infix}-#{$value}--force {
561
+ order: #{$value} !important;
562
+ }
563
+ }
564
+ }
565
+ }
566
+ }
567
+ @include generate-order-classes($helper-breakpoints);
568
+
569
+ // -----------------------------------------------------------------------------------------------------
570
+ // @ Absolute position alignment classes
571
+ // -----------------------------------------------------------------------------------------------------
572
+ @mixin generate-position-classes($helper-breakpoints) {
573
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
574
+ @include media-breakpoint($materialBreakpoint) {
575
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
576
+
577
+ @each $position in (top, right, bottom, left) {
578
+ .place#{$infix}-#{$position} {
579
+ #{$position}: 0;
580
+ }
581
+
582
+ .place#{$infix}-#{$position}--force {
583
+ #{$position}: 0 !important;
584
+ }
585
+ }
586
+ }
587
+ }
588
+ }
589
+ @include generate-position-classes($helper-breakpoints);
590
+
591
+ // -----------------------------------------------------------------------------------------------------
592
+ // @ Position classes
593
+ // -----------------------------------------------------------------------------------------------------
594
+ @mixin generate-position-classes($helper-breakpoints) {
595
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
596
+ @include media-breakpoint($materialBreakpoint) {
597
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
598
+
599
+ @each $pos in (relative, absolute, static, fixed) {
600
+ .position#{$infix}-#{$pos} {
601
+ position: #{$pos};
602
+ }
603
+
604
+ .position#{$infix}-#{$pos}--force {
605
+ position: #{$pos} !important;
606
+ }
607
+ }
608
+ }
609
+ }
610
+ }
611
+ @include generate-position-classes($helper-breakpoints);
612
+
613
+ // -----------------------------------------------------------------------------------------------------
614
+ // @ Display classes
615
+ // -----------------------------------------------------------------------------------------------------
616
+ @mixin generate-display-classes($helper-breakpoints) {
617
+ @each $breakpoint, $media-size in $helper-breakpoints {
618
+ @include media-breakpoint($media-size) {
619
+ $infix: if($media-size == null, "", "-#{$breakpoint}");
620
+
621
+ @each $class-suffix, $value in (
622
+ none: none,
623
+ inline: inline,
624
+ inline-block: inline-block,
625
+ block: block,
626
+ grid: grid,
627
+ table: table,
628
+ table-cell: table-cell,
629
+ table-row: table-row,
630
+ inline-flex: inline-flex,
631
+ flex: flex
632
+ ) {
633
+ .d#{$infix}-#{$class-suffix} {
634
+ display: $value;
635
+ }
636
+
637
+ .d#{$infix}-#{$class-suffix}--force {
638
+ display: $value !important;
639
+ }
640
+ }
641
+ }
642
+ }
643
+ }
644
+ @include generate-display-classes($helper-breakpoints);
645
+
646
+ // -----------------------------------------------------------------------------------------------------
647
+ // @ Flex classes
648
+ // -----------------------------------------------------------------------------------------------------
649
+ @mixin generate-flex-classes($helper-breakpoints) {
650
+ @each $breakpoint, $media-size in $helper-breakpoints {
651
+ @include media-breakpoint($media-size) {
652
+ $infix: if($media-size == null, "", "-#{$breakpoint}");
653
+
654
+ @each $class-suffix, $value in (
655
+ row: (display:flex, flex-direction: row),
656
+ row-reverse: (display:flex, flex-direction: row-reverse),
657
+ column: (display:flex, flex-direction: column),
658
+ column-reverse: (display:flex, flex-direction: column-reverse),
659
+
660
+ nowrap: (flex-wrap: nowrap),
661
+ wrap: (flex-wrap: wrap),
662
+
663
+ align-center: (display:flex, align-items: center),
664
+ align-start: (display:flex, align-items: flex-start),
665
+ align-end: (display:flex, align-items: flex-end),
666
+ align-inherit: (display:flex, align-items: inherit),
667
+ align-initial: (display:flex, align-items: initial),
668
+
669
+ align-self-end: (display:flex, align-self: flex-end),
670
+ align-self-start: (display:flex, align-self: flex-start),
671
+ align-self-inherit: (display:flex, align-self: inherit),
672
+ align-self-initial: (display:flex, align-self: initial),
673
+
674
+ center-center: (display:flex, justify-content: center, align-items: center),
675
+
676
+ justify-center: (display:flex, justify-content: center),
677
+ center: (display:flex, justify-content: center),
678
+
679
+ justify-end: (display:flex, justify-content: flex-end),
680
+ end: (display:flex, justify-content: flex-end),
681
+
682
+ justify-start: (display:flex, justify-content: flex-start),
683
+ start: (display:flex, justify-content: flex-start),
684
+
685
+ justify-inherit: (display:flex, justify-content: inherit),
686
+ inherit: (display:flex, justify-content: inherit),
687
+
688
+ justify-initial: (display:flex, justify-content: initial),
689
+ initial: (display:flex, justify-content: initial),
690
+
691
+ left: (display:flex, justify-content: left),
692
+ right: (display:flex, justify-content: right),
693
+ normal: (display:flex, justify-content: normal),
694
+ revert: (display:flex, justify-content: revert),
695
+
696
+ space-around: (display:flex, justify-content: space-around),
697
+ around: (display:flex, justify-content: space-around),
698
+
699
+ space-between: (display:flex, justify-content: space-between),
700
+ between: (display:flex, justify-content: space-between),
701
+
702
+ space-evenly: (display:flex, justify-content: space-evenly),
703
+ evenly: (display:flex, justify-content: space-evenly),
704
+
705
+ stretch: (display:flex, justify-content: stretch),
706
+ unset: (display:flex, justify-content: unset)
707
+
708
+ ) {
709
+ $class-name: ".flex#{$infix}-#{$class-suffix}";
710
+ $class-name-force: ".flex#{$infix}-#{$class-suffix}--force";
711
+
712
+ #{$class-name} {
713
+ @each $property, $prop-value in $value {
714
+ #{$property}: #{$prop-value};
715
+ }
716
+ }
717
+
718
+ #{$class-name-force} {
719
+ @each $property, $prop-value in $value {
720
+ #{$property}: #{$prop-value} !important;
721
+ }
722
+ }
723
+ }
724
+ // For margins, include negative values
725
+ @for $index from 0 through 3 {
726
+ .flex#{$infix}-grow-#{$index} {
727
+ flex-grow: $index;
728
+ }
729
+ .flex#{$infix}-shrink-#{$index} {
730
+ flex-shrink: $index;
731
+ }
732
+ }
733
+ .flex#{$infix}-full {
734
+ flex-grow: 1;
735
+ flex-shrink: 1;
736
+ flex-basis: 100%;
737
+ ;
738
+ }
739
+ .flex#{$infix}-basis-1 {
740
+ flex-basis: 100%;
741
+ }
742
+ }
743
+ }
744
+ }
745
+ @include generate-flex-classes($helper-breakpoints);
746
+
747
+ // -----------------------------------------------------------------------------------------------------
748
+ // @ Font Weight classes
749
+ // -----------------------------------------------------------------------------------------------------
750
+ @mixin generate-font-weight-classes($helper-breakpoints) {
751
+ @each $breakpoint, $media-size in $helper-breakpoints {
752
+ @include media-breakpoint($media-size) {
753
+ $infix: if($media-size == null, "", "-#{$breakpoint}");
754
+
755
+ @for $index from 1 through 9 {
756
+ $weight: $index * 100;
757
+ $weight-value: ds-font-weight($weight);
758
+
759
+ .fw#{$infix}-#{$weight} {
760
+ font-weight: $weight-value;
761
+ }
762
+
763
+ .fw#{$infix}-#{$weight}--force {
764
+ font-weight: $weight-value !important;
765
+ }
766
+ }
767
+ }
768
+ }
769
+ }
770
+ @include generate-font-weight-classes($helper-breakpoints);
771
+
772
+ // -----------------------------------------------------------------------------------------------------
773
+ // @ Font Size classes
774
+ // -----------------------------------------------------------------------------------------------------
775
+ @mixin generate-font-size-classes($helper-breakpoints) {
776
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
777
+ @include media-breakpoint($materialBreakpoint) {
778
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
779
+ $index: 0;
780
+ @while $index <= 96 {
781
+ $size: $index;
782
+ $fs-value: ds-font-size($size);
783
+ .fs#{$infix}-#{$size} {
784
+ font-size: $fs-value;
785
+ }
786
+ .fs#{$infix}-#{$size}--force {
787
+ font-size: $fs-value !important;
788
+ }
789
+ $index: $index + 1;
790
+ }
791
+ }
792
+ }
793
+ }
794
+ @include generate-font-size-classes($helper-breakpoints);
795
+
796
+ // -----------------------------------------------------------------------------------------------------
797
+ // @ Letter Spacing classes
798
+ // -----------------------------------------------------------------------------------------------------
799
+ @mixin generate-letter-spacing-classes($helper-breakpoints) {
800
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
801
+ @include media-breakpoint($materialBreakpoint) {
802
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
803
+ $index: 0;
804
+ @while $index <= 18 {
805
+ $spacing: $index * 0.1;
806
+ .ls#{$infix}-#{$index} {
807
+ letter-spacing: #{$spacing}em;
808
+ }
809
+ .ls#{$infix}-#{$index}--force {
810
+ letter-spacing: #{$spacing}em !important;
811
+ }
812
+ $index: $index + 1;
813
+ }
814
+
815
+ }
816
+ }
817
+ }
818
+ @include generate-letter-spacing-classes($helper-breakpoints);
819
+
820
+ // -----------------------------------------------------------------------------------------------------
821
+ // @ Line Height classes
822
+ // -----------------------------------------------------------------------------------------------------
823
+ @mixin generate-line-height-classes($helper-breakpoints) {
824
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
825
+ @include media-breakpoint($materialBreakpoint) {
826
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
827
+
828
+ $index: 0;
829
+ @while $index <= 100 {
830
+ $height: $index * 1;
831
+
832
+ .lh#{$infix}-#{$height} {
833
+ line-height: #{$height}px;
834
+ }
835
+
836
+ .lh#{$infix}-#{$height}--force {
837
+ line-height: #{$height}px !important;
838
+ }
839
+
840
+ $index: $index + 1;
841
+ }
842
+ }
843
+ }
844
+ }
845
+ @include generate-line-height-classes($helper-breakpoints);
846
+
847
+ // -----------------------------------------------------------------------------------------------------
848
+ // @ Aspect Ratio classes
849
+ // -----------------------------------------------------------------------------------------------------
850
+ @mixin generate-aspect-ratio-classes($helper-breakpoints) {
851
+ // Aspect ratios definition
852
+ $aspect-ratios: (
853
+ 'auto': 'auto',
854
+ '1x1': '1/1',
855
+ '1x2': '1/2',
856
+ '2x1': '2/1',
857
+ '3x4': '3/4',
858
+ '4x3': '4/3',
859
+ '9x16': '9/16',
860
+ '16x9': '16/9',
861
+ 'half': '0.5',
862
+ 'inherit': 'inherit',
863
+ 'initial': 'initial',
864
+ 'unset': 'unset'
865
+ );
866
+
867
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
868
+ @include media-breakpoint($materialBreakpoint) {
869
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
870
+
871
+ @each $ratio, $value in $aspect-ratios {
872
+ $class-name: ".aspect-ratio#{$infix}-#{$ratio}";
873
+
874
+ #{$class-name} {
875
+ aspect-ratio: #{$value};
876
+ }
877
+
878
+ #{$class-name}--force {
879
+ aspect-ratio: #{$value} !important;
880
+ }
881
+ }
882
+ }
883
+ }
884
+ }
885
+ @include generate-aspect-ratio-classes($helper-breakpoints);
886
+
887
+ // -----------------------------------------------------------------------------------------------------
888
+ // @ Cursor classes
889
+ // -----------------------------------------------------------------------------------------------------
890
+ @mixin generate-cursor-classes($helper-breakpoints) {
891
+ $cursor-types: (
892
+ pointer,
893
+ default,
894
+ grab,
895
+ grabbing,
896
+ move,
897
+ help,
898
+ wait
899
+ );
900
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
901
+ @include media-breakpoint($materialBreakpoint) {
902
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
903
+
904
+ @for $i from 1 through length($cursor-types) {
905
+ $cursor-type: nth($cursor-types, $i);
906
+
907
+ .cursor-#{$cursor-type}#{$infix} {
908
+ cursor: #{$cursor-type};
909
+ }
910
+
911
+ .cursor-#{$cursor-type}#{$infix}--force {
912
+ cursor: #{$cursor-type} !important;
913
+ }
914
+ }
915
+ }
916
+ }
917
+ }
918
+ @include generate-cursor-classes($helper-breakpoints);
919
+
920
+ // -----------------------------------------------------------------------------------------------------
921
+ // @ Pointer Events classes
922
+ // -----------------------------------------------------------------------------------------------------
923
+ @mixin generate-pointer-events-classes($helper-breakpoints) {
924
+ $pointer-events: (
925
+ auto,
926
+ none,
927
+ all,
928
+ visible,
929
+ visiblePainted,
930
+ visibleFill,
931
+ visibleStroke,
932
+ painted,
933
+ fill,
934
+ stroke
935
+ );
936
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
937
+ @include media-breakpoint($materialBreakpoint) {
938
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
939
+
940
+ @for $i from 1 through length($pointer-events) {
941
+ $pointer-event: nth($pointer-events, $i);
942
+
943
+ .pointer-events-#{$pointer-event}#{$infix} {
944
+ pointer-events: #{$pointer-event};
945
+ }
946
+
947
+ .pointer-events-#{$pointer-event}#{$infix}--force {
948
+ pointer-events: #{$pointer-event} !important;
949
+ }
950
+ }
951
+ }
952
+ }
953
+ }
954
+ @include generate-pointer-events-classes($helper-breakpoints);
955
+
956
+
957
+ // -----------------------------------------------------------------------------------------------------
958
+ // @ Opacity
959
+ // -----------------------------------------------------------------------------------------------------
960
+ @mixin generate-opacity-classes($helper-breakpoints) {
961
+ // Definindo os valores de opacidade e seus nomes de classe
962
+ $opacity-values: (
963
+ '0': 0,
964
+ '01': 0.1,
965
+ '02': 0.2,
966
+ '03': 0.3,
967
+ '04': 0.4,
968
+ '05': 0.5,
969
+ '06': 0.6,
970
+ '07': 0.7,
971
+ '08': 0.8,
972
+ '09': 0.9,
973
+ '10': 1.0,
974
+ '1':1
975
+ );
976
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
977
+ @include media-breakpoint($materialBreakpoint) {
978
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
979
+ @each $step, $opacity in $opacity-values {
980
+ .opacity#{$infix}-#{$step} {
981
+ opacity: $opacity;
982
+ }
983
+ .opacity#{$infix}-#{$step}--force {
984
+ opacity: $opacity !important;
985
+ }
986
+ }
987
+ }
988
+ }
989
+ }
990
+ @include generate-opacity-classes($helper-breakpoints);
991
+
992
+ // -----------------------------------------------------------------------------------------------------
993
+ // @ Float & List Style
994
+ // -----------------------------------------------------------------------------------------------------
995
+ @mixin generate-float-list-classes {
996
+ .clearfix::after {
997
+ content: "";
998
+ clear: both;
999
+ display: table;
1000
+ }
1001
+
1002
+ .float-left {
1003
+ float: left;
1004
+ }
1005
+
1006
+ .float-right {
1007
+ float: right;
1008
+ }
1009
+
1010
+ .list-style-none {
1011
+ list-style: none;
1012
+ }
1013
+
1014
+ .list-style-disc {
1015
+ list-style: disc;
1016
+ }
1017
+
1018
+ .list-style-dot {
1019
+ list-style: dot;
1020
+ }
1021
+ }
1022
+ @include generate-float-list-classes;
1023
+
1024
+ // -----------------------------------------------------------------------------------------------------
1025
+ // @ Text Decoration Helpers
1026
+ // -----------------------------------------------------------------------------------------------------
1027
+ @mixin generate-text-decoration-classes($helper-breakpoints){
1028
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1029
+ @include media-breakpoint($materialBreakpoint) {
1030
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1031
+
1032
+ .text#{$infix}-decoration-strike,
1033
+ .text#{$infix}-strike,
1034
+ .text#{$infix}-line-through {
1035
+ text-decoration: line-through;
1036
+ }
1037
+
1038
+ .text#{$infix}-decoration-strike--force,
1039
+ .text#{$infix}-strike--force,
1040
+ .text#{$infix}-line-through--force {
1041
+ text-decoration: line-through !important;
1042
+ }
1043
+
1044
+ .text#{$infix}-decoration-none,
1045
+ .text#{$infix}-none {
1046
+ text-decoration: none;
1047
+ }
1048
+
1049
+ .text#{$infix}-decoration-none--force,
1050
+ .text#{$infix}-none--force {
1051
+ text-decoration: none !important;
1052
+ }
1053
+
1054
+ .text#{$infix}-super {
1055
+ vertical-align: super;
1056
+ }
1057
+
1058
+ .text#{$infix}-super--force {
1059
+ vertical-align: super !important;
1060
+ }
1061
+
1062
+ .text#{$infix}-sub {
1063
+ vertical-align: sub;
1064
+ }
1065
+
1066
+ .text#{$infix}-sub--force {
1067
+ vertical-align: sub !important;
1068
+ }
1069
+ }
1070
+ }
1071
+ }
1072
+ @include generate-text-decoration-classes($helper-breakpoints);
1073
+
1074
+ // -----------------------------------------------------------------------------------------------------
1075
+ // @ Text Alignment and Transform Helpers
1076
+ // -----------------------------------------------------------------------------------------------------
1077
+ @mixin generate-text-alignment-classes($helper-breakpoints){
1078
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1079
+ @include media-breakpoint($materialBreakpoint) {
1080
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1081
+
1082
+ .text#{$infix}-capitalize {
1083
+ text-transform: capitalize;
1084
+ }
1085
+
1086
+ .text#{$infix}-capitalize--force {
1087
+ text-transform: capitalize !important;
1088
+ }
1089
+
1090
+ .text#{$infix}-lowercase {
1091
+ text-transform: lowercase;
1092
+ }
1093
+
1094
+ .text#{$infix}-lowercase--force {
1095
+ text-transform: lowercase !important;
1096
+ }
1097
+
1098
+ .text#{$infix}-uppercase {
1099
+ text-transform: uppercase;
1100
+ }
1101
+
1102
+ .text#{$infix}-uppercase--force {
1103
+ text-transform: uppercase !important;
1104
+ }
1105
+
1106
+ .text#{$infix}-nowrap {
1107
+ white-space: nowrap;
1108
+ }
1109
+
1110
+ .text#{$infix}-left {
1111
+ text-align: left;
1112
+ }
1113
+
1114
+ .text#{$infix}-left--force {
1115
+ text-align: left !important;
1116
+ }
1117
+
1118
+ .text#{$infix}-center {
1119
+ text-align: center;
1120
+ }
1121
+
1122
+ .text#{$infix}-center--force {
1123
+ text-align: center !important;
1124
+ }
1125
+
1126
+ .text#{$infix}-right {
1127
+ text-align: right;
1128
+ }
1129
+
1130
+ .text#{$infix}-right--force {
1131
+ text-align: right !important;
1132
+ }
1133
+ }
1134
+ }
1135
+ }
1136
+ @include generate-text-alignment-classes($helper-breakpoints);
1137
+
1138
+ // -----------------------------------------------------------------------------------------------------
1139
+ // @ Text Spacing and Truncation Helpers
1140
+ // -----------------------------------------------------------------------------------------------------
1141
+ @mixin generate-text-spacing-classes($helper-breakpoints){
1142
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1143
+ @include media-breakpoint($materialBreakpoint) {
1144
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1145
+
1146
+ .text#{$infix}-boxed {
1147
+ border-radius: 2px;
1148
+ padding: 4px 8px;
1149
+ margin: 0 8px;
1150
+ font-size: 11px;
1151
+ font-weight: 600;
1152
+ white-space: nowrap;
1153
+ }
1154
+
1155
+ .text#{$infix}-truncate,
1156
+ .text#{$infix}-ellipsis {
1157
+ display: block;
1158
+ overflow: hidden;
1159
+ text-overflow: ellipsis;
1160
+ white-space: nowrap;
1161
+ }
1162
+ }
1163
+ }
1164
+ }
1165
+ @include generate-text-spacing-classes($helper-breakpoints);
1166
+
1167
+ // -----------------------------------------------------------------------------------------------------
1168
+ // @ Overflow Helpers
1169
+ // -----------------------------------------------------------------------------------------------------
1170
+ @mixin generate-overflow-classes($helper-breakpoints){
1171
+ $overflow-classes: (
1172
+ auto: auto,
1173
+ scroll: scroll,
1174
+ hidden: hidden,
1175
+ overlay: overlay
1176
+ );
1177
+
1178
+ $overflow-directions: (
1179
+ x: (auto: auto, scroll: scroll, hidden: hidden, overlay: overlay),
1180
+ y: (auto: auto, scroll: scroll, hidden: hidden, overlay: overlay)
1181
+ );
1182
+
1183
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1184
+ @include media-breakpoint($materialBreakpoint) {
1185
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1186
+
1187
+ // Classes para overflow geral
1188
+ @each $class, $value in $overflow-classes {
1189
+ .overflow#{$infix}-#{$class} {
1190
+ overflow: $value;
1191
+ }
1192
+ .overflow#{$infix}-#{$class}--force {
1193
+ overflow: $value !important;
1194
+ }
1195
+ }
1196
+
1197
+ // Classes para overflow no eixo x
1198
+ @each $class, $value in map-get($overflow-directions, x) {
1199
+ .overflow-x#{$infix}-#{$class} {
1200
+ overflow-x: $value;
1201
+ }
1202
+ .overflow-x#{$infix}-#{$class}--force {
1203
+ overflow-x: $value !important;
1204
+ }
1205
+ }
1206
+
1207
+ // Classes para overflow no eixo y
1208
+ @each $class, $value in map-get($overflow-directions, y) {
1209
+ .overflow-y#{$infix}-#{$class} {
1210
+ overflow-y: $value;
1211
+ }
1212
+ .overflow-y#{$infix}-#{$class}--force {
1213
+ overflow-y: $value !important;
1214
+ }
1215
+ }
1216
+ }
1217
+ }
1218
+ }
1219
+ @include generate-overflow-classes($helper-breakpoints);
1220
+
1221
+ // -----------------------------------------------------------------------------------------------------
1222
+ // @ Border Size Helpers
1223
+ // -----------------------------------------------------------------------------------------------------
1224
+ @mixin generate-border-size-classes($helper-breakpoints){
1225
+ $border-directions: (bottom: bb, top: bt, left: bl, right: br);
1226
+
1227
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1228
+ @include media-breakpoint($materialBreakpoint) {
1229
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1230
+
1231
+ @for $i from 0 through 4 {
1232
+ $border-value: $i * 2;
1233
+ $border-suffix: "-#{$border-value}";
1234
+
1235
+ // Classes para borda geral
1236
+ .border#{$infix}#{$border-suffix},
1237
+ .b#{$infix}#{$border-suffix} {
1238
+ border: #{$border-value}px solid;
1239
+ }
1240
+
1241
+ // Classes para bordas individuais
1242
+ @each $direction, $abbrev in $border-directions {
1243
+ .border-#{$direction}#{$infix}#{$border-suffix},
1244
+ .#{$abbrev}#{$infix}#{$border-suffix} {
1245
+ border-#{$direction}: #{$border-value}px solid;
1246
+ }
1247
+ .border-#{$direction}#{$infix}#{$border-suffix}--force,
1248
+ .#{$abbrev}#{$infix}#{$border-suffix}--force {
1249
+ border-#{$direction}: #{$border-value}px solid !important;
1250
+ }
1251
+ }
1252
+ }
1253
+ // Classe para borda nula
1254
+ .b#{$infix}-none,
1255
+ .border#{$infix}-none {
1256
+ border: none;
1257
+ }
1258
+ .b#{$infix}-none--force,
1259
+ .border#{$infix}-none--force {
1260
+ border: none !important;
1261
+ }
1262
+ }
1263
+ }
1264
+
1265
+
1266
+ }
1267
+ @include generate-border-size-classes($helper-breakpoints);
1268
+
1269
+ // -----------------------------------------------------------------------------------------------------
1270
+ // @ Border Style
1271
+ // -----------------------------------------------------------------------------------------------------
1272
+ @mixin generate-border-style-classes($helper-breakpoints){
1273
+ $border-styles: (
1274
+ solid: solid,
1275
+ dashed: dashed,
1276
+ dotted: dotted,
1277
+ double: double,
1278
+ groove: groove,
1279
+ ridge: ridge,
1280
+ inset: inset,
1281
+ outset: outset,
1282
+ none: none
1283
+ );
1284
+
1285
+ $border-directions: (
1286
+ bottom: (solid: solid, dashed: dashed, dotted: dotted, double: double, groove: groove, ridge: ridge, inset: inset, outset: outset, none: none),
1287
+ top: (solid: solid, dashed: dashed, dotted: dotted, double: double, groove: groove, ridge: ridge, inset: inset, outset: outset, none: none),
1288
+ left: (solid: solid, dashed: dashed, dotted: dotted, double: double, groove: groove, ridge: ridge, inset: inset, outset: outset, none: none),
1289
+ right: (solid: solid, dashed: dashed, dotted: dotted, double: double, groove: groove, ridge: ridge, inset: inset, outset: outset, none: none)
1290
+ );
1291
+
1292
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1293
+ @include media-breakpoint($materialBreakpoint) {
1294
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1295
+
1296
+ // Classes para estilo de borda geral
1297
+ @each $class, $value in $border-styles {
1298
+ .border-style#{$infix}-#{$class} {
1299
+ border-style: $value;
1300
+ }
1301
+ .border-style#{$infix}-#{$class}--force {
1302
+ border-style: $value !important;
1303
+ }
1304
+ }
1305
+ }
1306
+ }
1307
+ }
1308
+ @include generate-border-style-classes($helper-breakpoints);
1309
+
1310
+ // -----------------------------------------------------------------------------------------------------
1311
+ // @ Border Radius Helpers
1312
+ // -----------------------------------------------------------------------------------------------------
1313
+ @mixin generate-radius-classes($helper-breakpoints){
1314
+ $radius-directions: (bottom: b, top: t, left: l, right: r);
1315
+
1316
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1317
+ @include media-breakpoint($materialBreakpoint) {
1318
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1319
+
1320
+ @for $i from 0 through 12 {
1321
+ $radius-value: $i * 2;
1322
+ $radius-suffix: "-#{$radius-value}";
1323
+ $r: ds-radius($radius-value);
1324
+
1325
+ // Classes para borda geral
1326
+ .radius#{$infix}#{$radius-suffix} {
1327
+ border-radius: $r; // Sem !important
1328
+ }
1329
+
1330
+ // Classes para bordas individuais
1331
+ @each $direction, $abbrev in $radius-directions {
1332
+ @if $direction == bottom {
1333
+ .radius-#{$direction}#{$infix}#{$radius-suffix} {
1334
+ border-radius: 0 0 #{$r} #{$r}; // Sem !important
1335
+ }
1336
+
1337
+ .radius-#{$direction}#{$infix}#{$radius-suffix}--force {
1338
+ border-radius: 0 0 #{$r} #{$r} !important; // Com !important
1339
+ }
1340
+ } @else if $direction == top {
1341
+ .radius-#{$direction}#{$infix}#{$radius-suffix} {
1342
+ border-radius: #{$r} #{$r} 0 0; // Sem !important
1343
+ }
1344
+
1345
+ .radius-#{$direction}#{$infix}#{$radius-suffix}--force {
1346
+ border-radius: #{$r} #{$r} 0 0 !important; // Com !important
1347
+ }
1348
+ } @else if $direction == left {
1349
+ .radius-#{$direction}#{$infix}#{$radius-suffix} {
1350
+ border-radius: #{$r} 0 0 #{$r}; // Sem !important
1351
+ }
1352
+
1353
+ .radius-#{$direction}#{$infix}#{$radius-suffix}--force {
1354
+ border-radius: #{$r} 0 0 #{$r} !important; // Com !important
1355
+ }
1356
+ } @else if $direction == right {
1357
+ .radius-#{$direction}#{$infix}#{$radius-suffix} {
1358
+ border-radius: 0 #{$r} #{$r} 0; // Sem !important
1359
+ }
1360
+
1361
+ .radius-#{$direction}#{$infix}#{$radius-suffix}--force {
1362
+ border-radius: 0 #{$r} #{$r} 0 !important; // Com !important
1363
+ }
1364
+ }
1365
+ }
1366
+ }
1367
+ .radius#{$infix}-full {
1368
+ border-radius: 9999px;
1369
+ }
1370
+ .radius#{$infix}-full--force {
1371
+ border-radius: 9999px !important;
1372
+ }
1373
+ .radius#{$infix}-none {
1374
+ border-radius: 0;
1375
+ }
1376
+ .radius#{$infix}-none--force {
1377
+ border-radius: 0 !important;
1378
+ }
1379
+ }
1380
+ }
1381
+ // Classe para borda nula
1382
+ .border-none {
1383
+ border: none !important;
1384
+ }
1385
+ }
1386
+ @include generate-radius-classes($helper-breakpoints);
1387
+
1388
+ // -----------------------------------------------------------------------------------------------------
1389
+ // @ Hover - Show/Hide
1390
+ // -----------------------------------------------------------------------------------------------------
1391
+ @mixin generate-hover-show-hide-classes {
1392
+ .on-hover-show:hover {
1393
+ opacity: 1;
1394
+ }
1395
+ .on-hover-hide:hover {
1396
+ opacity: 0;
1397
+ }
1398
+ }
1399
+ @include generate-hover-show-hide-classes;
1400
+
1401
+ // -----------------------------------------------------------------------------------------------------
1402
+ // @ Transition
1403
+ // -----------------------------------------------------------------------------------------------------
1404
+ @mixin generate-transition-classes() {
1405
+ $durations: (100, 300);
1406
+ $easing: ('linear', 'ease-in', 'ease-out', 'ease-in-out');
1407
+ @each $duration in $durations {
1408
+ @each $ease in $easing {
1409
+ $class-suffix: if($ease == 'linear', 'l', if($ease == 'ease-in', 'ei', if($ease == 'ease-out', 'eo', 'eio')));
1410
+ .ts-#{$duration}-#{$class-suffix} {
1411
+ transition: all #{$duration}ms #{$ease};
1412
+ }
1413
+ }
1414
+ }
1415
+ }
1416
+ @include generate-transition-classes();
1417
+
1418
+ // -----------------------------------------------------------------------------------------------------
1419
+ // @ Rotate Animation
1420
+ // -----------------------------------------------------------------------------------------------------
1421
+ @mixin generate-rotate-animation-classes() {
1422
+ // Define as durações desejadas para a animação de rotação
1423
+ $durations: (1, 2, 3);
1424
+ @each $duration in $durations {
1425
+ .rotate-infinity-#{$duration}s {
1426
+ animation: spin #{$duration}s infinite;
1427
+ }
1428
+ }
1429
+ }
1430
+ // Define a keyframes para a animação de rotação
1431
+ @keyframes spin {
1432
+ 0% {
1433
+ transform: rotate(0deg);
1434
+ }
1435
+
1436
+ 100% {
1437
+ transform: rotate(360deg);
1438
+ }
1439
+ }
1440
+ @include generate-rotate-animation-classes();
1441
+
1442
+ // -----------------------------------------------------------------------------------------------------
1443
+ // @ Border Size Helpers
1444
+ // -----------------------------------------------------------------------------------------------------
1445
+ @mixin generate-line-clamp-classes($helper-breakpoints){
1446
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1447
+ @include media-breakpoint($materialBreakpoint) {
1448
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1449
+ @for $i from 0 through 6 {
1450
+ // Classes para borda geral
1451
+ .line-clamp#{$infix}-#{$i}{
1452
+ overflow: hidden;
1453
+ display: -webkit-box;
1454
+ -webkit-box-orient: vertical;
1455
+ -webkit-line-clamp: $i;
1456
+ line-clamp: $i;
1457
+ text-overflow: ellipsis;
1458
+ word-break: break-word;
1459
+ white-space: initial;
1460
+ -webkit-box-orient: vertical;
1461
+ }
1462
+ }
1463
+ .line-clamp#{$infix}-none{
1464
+ overflow: visible;
1465
+ display: block;
1466
+ -webkit-box-orient: horizontal;
1467
+ -webkit-line-clamp: none;
1468
+ line-clamp: none;
1469
+ }
1470
+ }
1471
+ }
1472
+ }
1473
+ @include generate-line-clamp-classes($helper-breakpoints);
1474
+
1475
+ // -----------------------------------------------------------------------------------------------------
1476
+ // @ Masonry
1477
+ // -----------------------------------------------------------------------------------------------------
1478
+ @mixin generate-masonry-classes($helper-breakpoints){
1479
+ @each $breakpoint, $materialBreakpoint in $helper-breakpoints {
1480
+ @include media-breakpoint($materialBreakpoint) {
1481
+ $infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
1482
+ @for $i from 1 through 12 {
1483
+ // Classes para borda geral
1484
+ .masonry#{$infix}-#{$i}{
1485
+ column-count: $i;
1486
+ > *{
1487
+ break-inside: avoid;
1488
+ display: inline-block;
1489
+ width: 100%;
1490
+ }
1491
+ }
1492
+ }
1493
+ @for $i from 0 through 12 {
1494
+ $size: $i * 4;
1495
+ // Classes para borda geral
1496
+ .masonry-gap#{$infix}-#{$size}{
1497
+ column-gap: #{$size}px;
1498
+ > *{
1499
+ margin-bottom: #{$size}px;
1500
+ }
1501
+ }
1502
+ }
1503
+ }
1504
+ }
1505
+ }
1506
+ @include generate-masonry-classes($helper-breakpoints);
1507
+
1508
+