maverick-wave 4.28.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +39 -24
  3. package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
  4. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
  5. package/.claude/skills/mw-maverick-wave/references/components.md +42 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +17 -4
  8. package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
  9. package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
  10. package/.impeccable/config.local.json +5 -0
  11. package/.impeccable/hook.cache.json +1 -0
  12. package/CHANGELOG.md +11 -0
  13. package/CLAUDE.md +5 -5
  14. package/README.md +48 -4
  15. package/index.html +19 -38
  16. package/maverick-wave.min.css +14 -12
  17. package/maverick-wave.min.js +1 -1
  18. package/package.json +2 -2
  19. package/scripts/verify.js +27 -2
  20. package/src/js/main.js +223 -83
  21. package/src/partials/accordions-container.html +6 -10
  22. package/src/partials/alerts-container.html +6 -6
  23. package/src/partials/announcement-container.html +5 -5
  24. package/src/partials/avatars-container.html +85 -17
  25. package/src/partials/badges-container.html +6 -6
  26. package/src/partials/blog-posts-container.html +11 -12
  27. package/src/partials/buttons-container.html +3 -3
  28. package/src/partials/cards-container.html +26 -9
  29. package/src/partials/code-container.html +5 -5
  30. package/src/partials/content-slider-container.html +5 -4
  31. package/src/partials/divider-container.html +7 -7
  32. package/src/partials/dropdown-container.html +2 -2
  33. package/src/partials/empty-state-container.html +5 -5
  34. package/src/partials/footer-container.html +21 -18
  35. package/src/partials/form-elements-container.html +14 -14
  36. package/src/partials/gallery-container.html +16 -8
  37. package/src/partials/get-started-container.html +4 -8
  38. package/src/partials/header-container.html +18 -7
  39. package/src/partials/home-container.html +10 -20
  40. package/src/partials/input-group-container.html +11 -2
  41. package/src/partials/kbd-container.html +1 -1
  42. package/src/partials/login-container.html +5 -1
  43. package/src/partials/media-container.html +2 -2
  44. package/src/partials/modals-container.html +22 -32
  45. package/src/partials/pricing-container.html +9 -9
  46. package/src/partials/skeleton-container.html +6 -6
  47. package/src/partials/stepper-container.html +2 -2
  48. package/src/partials/tables-container.html +12 -12
  49. package/src/partials/tabs-container.html +17 -27
  50. package/src/partials/tags-container.html +23 -17
  51. package/src/partials/techstack-bucket-container.html +13 -0
  52. package/src/partials/tiles-container.html +26 -9
  53. package/src/partials/typography-container.html +7 -6
  54. package/src/partials/utilities-container.html +35 -15
  55. package/src/scss/_layers.scss +10 -0
  56. package/src/scss/abstracts/_index.scss +6 -0
  57. package/src/scss/abstracts/_mixins.scss +61 -153
  58. package/src/scss/abstracts/_variables.scss +123 -319
  59. package/src/scss/base/_base.scss +170 -190
  60. package/src/scss/base/_reset.scss +106 -104
  61. package/src/scss/base/_typography.scss +153 -151
  62. package/src/scss/components/_accordions.scss +97 -97
  63. package/src/scss/components/_alerts.scss +71 -70
  64. package/src/scss/components/_announcement.scss +71 -70
  65. package/src/scss/components/_avatars.scss +130 -142
  66. package/src/scss/components/_badge.scss +131 -132
  67. package/src/scss/components/_blog-post.scss +223 -220
  68. package/src/scss/components/_breadcrumbs.scss +93 -92
  69. package/src/scss/components/_button-bar.scss +102 -110
  70. package/src/scss/components/_buttons.scss +319 -324
  71. package/src/scss/components/_calendar.scss +251 -252
  72. package/src/scss/components/_cards.scss +359 -386
  73. package/src/scss/components/_code.scss +190 -194
  74. package/src/scss/components/_coming-soon.scss +77 -75
  75. package/src/scss/components/_content-slider.scss +90 -89
  76. package/src/scss/components/_divider.scss +55 -53
  77. package/src/scss/components/_dropdown.scss +179 -185
  78. package/src/scss/components/_empty-state.scss +57 -57
  79. package/src/scss/components/_flag.scss +294 -278
  80. package/src/scss/components/_gallery.scss +131 -133
  81. package/src/scss/components/_info.scss +151 -167
  82. package/src/scss/components/_kanban.scss +332 -341
  83. package/src/scss/components/_kbd.scss +40 -38
  84. package/src/scss/components/_lang-switch.scss +89 -97
  85. package/src/scss/components/_links.scss +21 -28
  86. package/src/scss/components/_lists.scss +510 -514
  87. package/src/scss/components/_localhost-indicator.scss +26 -24
  88. package/src/scss/components/_media.scss +22 -20
  89. package/src/scss/components/_meta-info.scss +35 -33
  90. package/src/scss/components/_modals.scss +277 -186
  91. package/src/scss/components/_pagination.scss +81 -87
  92. package/src/scss/components/_panels.scss +99 -97
  93. package/src/scss/components/_pricing.scss +183 -241
  94. package/src/scss/components/_progress.scss +112 -89
  95. package/src/scss/components/_prose.scss +35 -33
  96. package/src/scss/components/_ratings.scss +40 -38
  97. package/src/scss/components/_segmented.scss +82 -84
  98. package/src/scss/components/_skeleton.scss +66 -72
  99. package/src/scss/components/_spinners.scss +155 -159
  100. package/src/scss/components/_stepper.scss +116 -116
  101. package/src/scss/components/_tables.scss +155 -148
  102. package/src/scss/components/_tabs.scss +232 -141
  103. package/src/scss/components/_tags.scss +109 -107
  104. package/src/scss/components/_techstack-bucket.scss +123 -122
  105. package/src/scss/components/_testimonial.scss +72 -70
  106. package/src/scss/components/_theme-toggle.scss +53 -51
  107. package/src/scss/components/_tiles.scss +174 -174
  108. package/src/scss/components/_timelines.scss +282 -280
  109. package/src/scss/components/_toasts.scss +66 -72
  110. package/src/scss/form-elements/_checkbox.scss +117 -132
  111. package/src/scss/form-elements/_form.scss +149 -115
  112. package/src/scss/form-elements/_input-group.scss +99 -103
  113. package/src/scss/form-elements/_input.scss +74 -74
  114. package/src/scss/form-elements/_login.scss +48 -48
  115. package/src/scss/form-elements/_prefilled.scss +53 -51
  116. package/src/scss/form-elements/_radio.scss +95 -107
  117. package/src/scss/form-elements/_select.scss +42 -42
  118. package/src/scss/form-elements/_slider.scss +117 -132
  119. package/src/scss/form-elements/_textarea.scss +68 -54
  120. package/src/scss/form-elements/_toggle.scss +127 -140
  121. package/src/scss/layout/_footer.scss +172 -171
  122. package/src/scss/layout/_grid.scss +268 -302
  123. package/src/scss/layout/_header.scss +426 -427
  124. package/src/scss/layout/_home.scss +28 -27
  125. package/src/scss/layout/_main.scss +275 -238
  126. package/src/scss/layout/_page-header.scss +38 -36
  127. package/src/scss/layout/_section.scss +150 -124
  128. package/src/scss/main.scss +1 -1
  129. package/src/scss/utilities/_accessibility.scss +46 -45
  130. package/src/scss/utilities/_aspect.scss +22 -20
  131. package/src/scss/utilities/_corner.scss +23 -5
  132. package/src/scss/utilities/_display.scss +76 -70
  133. package/src/scss/utilities/_elevation.scss +13 -11
  134. package/src/scss/utilities/_flex.scss +83 -85
  135. package/src/scss/utilities/_reveal.scss +40 -63
  136. package/src/scss/utilities/_spacing.scss +63 -64
  137. package/src/scss/utilities/_text.scss +139 -141
  138. package/src/scss/utilities/_touch-targets.scss +130 -147
@@ -1,97 +1,103 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Display utilities
4
- .mw-d {
5
- &-flex {
6
- display: flex;
7
- }
3
+ @layer mw.utilities {
4
+ .mw-d {
5
+ &-flex {
6
+ display: flex;
7
+ }
8
8
 
9
- &-inline-flex {
10
- display: inline-flex;
11
- }
9
+ &-inline-flex {
10
+ display: inline-flex;
11
+ }
12
12
 
13
- &-block {
14
- display: block;
15
- }
13
+ &-block {
14
+ display: block;
15
+ }
16
16
 
17
- &-inline {
18
- display: inline;
19
- }
17
+ &-inline {
18
+ display: inline;
19
+ }
20
20
 
21
- &-inline-block {
22
- display: inline-block;
23
- }
21
+ &-inline-block {
22
+ display: inline-block;
23
+ }
24
24
 
25
- &-grid {
26
- display: grid;
27
- }
25
+ &-grid {
26
+ display: grid;
27
+ }
28
28
 
29
- &-none {
30
- display: none;
31
- }
29
+ &-none {
30
+ display: none;
31
+ }
32
32
 
33
- // For a wrapper that must not become a flex/grid item itself - the element
34
- // generates no box, so its children take over the item role
35
- &-contents {
36
- display: contents;
33
+ // For a wrapper that must not become a flex/grid item itself - the element
34
+ // generates no box, so its children take over the item role
35
+ &-contents {
36
+ display: contents;
37
+ }
37
38
  }
38
- }
39
39
 
40
- // Border radius
41
- @each $key, $value in $radius {
42
- .mw-radius-#{$key} {
43
- border-radius: $value;
40
+ @each $key, $value in $radius {
41
+ .mw-radius-#{$key} {
42
+ border-radius: $value;
43
+ }
44
44
  }
45
- }
46
45
 
47
- // Responsive display
48
- $_mw-responsive-displays: (none, block, flex, inline-flex, grid, inline-block);
49
-
50
- @each $bp in ('sm', 'md', 'lg', 'xl') {
51
- @include media-up($bp) {
52
- @each $value in $_mw-responsive-displays {
53
- .mw-d-#{$bp}-#{$value} {
54
- display: #{$value};
46
+ $_mw-responsive-displays: (
47
+ none,
48
+ block,
49
+ flex,
50
+ inline-flex,
51
+ grid,
52
+ inline-block
53
+ );
54
+
55
+ @each $bp in ('sm', 'md', 'lg', 'xl') {
56
+ @include media-up($bp) {
57
+ @each $value in $_mw-responsive-displays {
58
+ .mw-d-#{$bp}-#{$value} {
59
+ display: #{$value};
60
+ }
55
61
  }
56
62
  }
57
63
  }
58
- }
59
64
 
60
- // The two everyone actually reaches for, spelled out. `md` is the divide: below
61
- // it a phone, at it and above a tablet with room for a second column.
62
- .mw-hide-mobile {
63
- @include media-down('md') {
64
- display: none !important;
65
+ // The two everyone actually reaches for, spelled out. `md` is the divide: below
66
+ // it a phone, at it and above a tablet with room for a second column.
67
+ .mw-hide-mobile {
68
+ @include media-down('md') {
69
+ display: none;
70
+ }
65
71
  }
66
- }
67
72
 
68
- .mw-hide-desktop {
69
- @include media-up('md') {
70
- display: none !important;
73
+ .mw-hide-desktop {
74
+ @include media-up('md') {
75
+ display: none;
76
+ }
71
77
  }
72
- }
73
78
 
74
- // Overflow, for the wrappers that hold something wider than the phone they are
75
- // being read on
76
- .mw-overflow-auto {
77
- overflow: auto;
78
- }
79
+ // Overflow, for the wrappers that hold something wider than the phone they are
80
+ // being read on
81
+ .mw-overflow-auto {
82
+ overflow: auto;
83
+ }
79
84
 
80
- .mw-overflow-x-auto {
81
- overflow-x: auto;
82
- overscroll-behavior-x: contain;
83
- }
85
+ .mw-overflow-x-auto {
86
+ overflow-x: auto;
87
+ overscroll-behavior-x: contain;
88
+ }
84
89
 
85
- .mw-overflow-hidden {
86
- overflow: hidden;
87
- }
90
+ .mw-overflow-hidden {
91
+ overflow: hidden;
92
+ }
88
93
 
89
- // Snap a horizontal strip so it comes to rest on an item instead of halfway
90
- // between two - a row of cards swiped through on a phone
91
- .mw-snap-x {
92
- scroll-snap-type: x mandatory;
94
+ // Snap a horizontal strip so it comes to rest on an item instead of halfway
95
+ // between two - a row of cards swiped through on a phone
96
+ .mw-snap-x {
97
+ scroll-snap-type: x mandatory;
93
98
 
94
- > * {
95
- scroll-snap-align: start;
99
+ > * {
100
+ scroll-snap-align: start;
101
+ }
96
102
  }
97
103
  }
@@ -1,16 +1,18 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // The elevation ramp as classes, for a surface a project draws itself. Same
4
- // five steps every component uses - see the elevation() function.
5
- //
6
- // 0 is not "no shadow it forgot to set", it is "explicitly flat": for taking a
7
- // component off the page it normally floats above.
8
- .mw-elevation-0 {
9
- box-shadow: none;
10
- }
3
+ @layer mw.utilities {
4
+ // The elevation ramp as classes, for a surface a project draws itself. Same
5
+ // five steps every component uses - see the elevation() function.
6
+ //
7
+ // 0 is not "no shadow it forgot to set", it is "explicitly flat": for taking a
8
+ // component off the page it normally floats above.
9
+ .mw-elevation-0 {
10
+ box-shadow: none;
11
+ }
11
12
 
12
- @for $level from 1 through 5 {
13
- .mw-elevation-#{$level} {
14
- box-shadow: var(--mw-elevation-#{$level});
13
+ @for $level from 1 through 5 {
14
+ .mw-elevation-#{$level} {
15
+ box-shadow: var(--mw-elevation-#{$level});
16
+ }
15
17
  }
16
18
  }
@@ -1,114 +1,112 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Flex utilities
4
- .mw-flex {
5
- &-row {
6
- flex-direction: row;
7
- }
3
+ @layer mw.utilities {
4
+ .mw-flex {
5
+ &-row {
6
+ flex-direction: row;
7
+ }
8
8
 
9
- &-column {
10
- flex-direction: column;
11
- }
9
+ &-column {
10
+ flex-direction: column;
11
+ }
12
12
 
13
- &-wrap {
14
- flex-wrap: wrap;
15
- }
13
+ &-wrap {
14
+ flex-wrap: wrap;
15
+ }
16
16
 
17
- &-nowrap {
18
- flex-wrap: nowrap;
19
- }
17
+ &-nowrap {
18
+ flex-wrap: nowrap;
19
+ }
20
20
 
21
- &-1 {
22
- flex: 1;
23
- }
21
+ &-1 {
22
+ flex: 1;
23
+ }
24
24
 
25
- &-grow-1 {
26
- flex-grow: 1;
27
- }
25
+ &-grow-1 {
26
+ flex-grow: 1;
27
+ }
28
28
 
29
- &-shrink-0 {
30
- flex-shrink: 0;
29
+ &-shrink-0 {
30
+ flex-shrink: 0;
31
+ }
31
32
  }
32
- }
33
33
 
34
- // Justify content
35
- .mw-justify {
36
- &-start {
37
- justify-content: flex-start;
38
- }
34
+ .mw-justify {
35
+ &-start {
36
+ justify-content: flex-start;
37
+ }
39
38
 
40
- &-end {
41
- justify-content: flex-end;
42
- }
39
+ &-end {
40
+ justify-content: flex-end;
41
+ }
43
42
 
44
- &-center {
45
- justify-content: center;
46
- }
43
+ &-center {
44
+ justify-content: center;
45
+ }
47
46
 
48
- &-between {
49
- justify-content: space-between;
50
- }
47
+ &-between {
48
+ justify-content: space-between;
49
+ }
51
50
 
52
- &-around {
53
- justify-content: space-around;
54
- }
51
+ &-around {
52
+ justify-content: space-around;
53
+ }
55
54
 
56
- &-evenly {
57
- justify-content: space-evenly;
55
+ &-evenly {
56
+ justify-content: space-evenly;
57
+ }
58
58
  }
59
- }
60
59
 
61
- // Align items
62
- .mw-items {
63
- &-start {
64
- align-items: flex-start;
65
- }
60
+ .mw-items {
61
+ &-start {
62
+ align-items: flex-start;
63
+ }
66
64
 
67
- &-end {
68
- align-items: flex-end;
69
- }
65
+ &-end {
66
+ align-items: flex-end;
67
+ }
70
68
 
71
- &-center {
72
- align-items: center;
73
- }
69
+ &-center {
70
+ align-items: center;
71
+ }
74
72
 
75
- &-stretch {
76
- align-items: stretch;
73
+ &-stretch {
74
+ align-items: stretch;
75
+ }
77
76
  }
78
- }
79
77
 
80
- // Align self - the per-item counterpart to .mw-items-*
81
- .mw-self {
82
- &-start {
83
- align-self: flex-start;
84
- }
78
+ .mw-self {
79
+ &-start {
80
+ align-self: flex-start;
81
+ }
85
82
 
86
- &-end {
87
- align-self: flex-end;
88
- }
83
+ &-end {
84
+ align-self: flex-end;
85
+ }
89
86
 
90
- &-center {
91
- align-self: center;
92
- }
87
+ &-center {
88
+ align-self: center;
89
+ }
93
90
 
94
- &-stretch {
95
- align-self: stretch;
91
+ &-stretch {
92
+ align-self: stretch;
93
+ }
96
94
  }
97
- }
98
95
 
99
- // The most common row in any app: what it is on the left, the value or the
100
- // action on the right, and on a narrow screen the right half drops below.
101
- // The `flex-wrap` is the part everyone forgets.
102
- .mw-row-split {
103
- display: flex;
104
- flex-wrap: wrap;
105
- align-items: baseline;
106
- justify-content: space-between;
107
- gap: spacing('2') spacing('5');
108
- }
96
+ // The most common row in any app: what it is on the left, the value or the
97
+ // action on the right, and on a narrow screen the right half drops below.
98
+ // The `flex-wrap` is the part everyone forgets.
99
+ .mw-row-split {
100
+ display: flex;
101
+ flex-wrap: wrap;
102
+ align-items: baseline;
103
+ justify-content: space-between;
104
+ gap: spacing('2') spacing('5');
105
+ }
109
106
 
110
- // Same row for content of unequal height - an icon beside text, a button
111
- // beside a heading. Baseline alignment would hang those off the text.
112
- .mw-row-split-center {
113
- align-items: center;
107
+ // Same row for content of unequal height - an icon beside text, a button
108
+ // beside a heading. Baseline alignment would hang those off the text.
109
+ .mw-row-split-center {
110
+ align-items: center;
111
+ }
114
112
  }
@@ -1,73 +1,50 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Scroll entrance: a block rises briefly as it scrolls into view. Driven by
4
- // the browser's scroll timeline - no JavaScript, no IntersectionObserver
5
- // recalculating on every scroll step.
6
- //
7
- // Both guards matter. `prefers-reduced-motion` is the obvious one. The
8
- // @supports guard is the safety net: a browser without scroll timelines would
9
- // otherwise apply the backwards fill on an animation that never runs and
10
- // leave the block invisible forever - guarded, it simply renders in place.
11
- //
12
- // The zone it plays in is the `reveal-range` mixin in abstracts/_mixins.scss:
13
- // from 8dvh above the bottom edge to 34dvh, measured in viewport lengths so
14
- // every block rises through the same region of the screen. Eased out rather
15
- // than linear against the scroll: the block covers most of its way at once
16
- // and settles, which reads as arriving instead of being dragged.
17
- //
18
- // `backwards`, not `both`: the fill only has to hide the block before its
19
- // entrance - the last frame is the block's own resting state anyway. A
20
- // forwards fill would keep that frame applied for good, and an animated
21
- // `transform` beats every author rule: a card would lose its hover lift, and
22
- // as a transformed box it stays a stacking context, so a dropdown opened
23
- // inside it paints under the next card in the row. Without the forwards fill
24
- // the animation lets go once the entrance is done.
25
- //
26
- // Longhands on purpose, never the animation shorthand: esbuild's CSS minifier
27
- // (Vite's default, so every SCSS consumer) collapses a shorthand plus
28
- // animation-timeline into one `animation:` declaration - which cannot carry a
29
- // timeline, so browsers drop the whole thing and the reveal silently dies.
30
- // Three longhands next to the timeline give it nothing to merge.
31
- @supports (animation-timeline: view()) {
32
- @media (prefers-reduced-motion: no-preference) {
33
- .mw-reveal,
34
- .mw-reveal-stagger > * {
35
- animation-name: mw-reveal;
36
- animation-timing-function: var(--mw-ease-out);
37
- animation-fill-mode: backwards;
38
- animation-timeline: view();
39
- @include reveal-range(1);
40
- }
3
+ @layer mw.utilities {
4
+ // Scroll entrance on the browser's own timeline - no observer. The zone is the
5
+ // `reveal-range` mixin. Without scroll timelines the backwards fill would hide
6
+ // the block forever, which is what the @supports guard is for.
7
+ //
8
+ // `backwards`, not `both`: a forwards fill keeps the transform applied, and that
9
+ // beats every author rule - the card loses its hover lift and stays a stacking
10
+ // context. Longhands and never the shorthand, which esbuild collapses into one
11
+ // `animation:` that cannot carry a timeline.
12
+ @supports (animation-timeline: view()) {
13
+ @media (prefers-reduced-motion: no-preference) {
14
+ .mw-reveal,
15
+ .mw-reveal-stagger > * {
16
+ animation-name: mw-reveal;
17
+ animation-timing-function: var(--mw-ease-out);
18
+ animation-fill-mode: backwards;
19
+ animation-timeline: view();
20
+ @include reveal-range(1);
21
+ }
41
22
 
42
- // A row of cards crosses the viewport edge on the same scroll step, so
43
- // mw-reveal on each of them rises as one slab. The stagger container
44
- // shifts the range of the second and third child of every three - a wave
45
- // across the row instead of a lift. One class on the grid, because the
46
- // grid decides the columns per breakpoint and the markup cannot.
47
- //
48
- // Cycles of three are only the fallback for a container that is not one of
49
- // the fixed grids - mw-columns-*, a project's own layout. mw-grid-2 to -5
50
- // and their -lg variants restate the cycle to their own column count at
51
- // every breakpoint (layout/_grid.scss), so the fourth card of a four-column
52
- // row is a beat behind the third, not level with the first.
53
- .mw-reveal-stagger > :nth-child(3n + 2) {
54
- @include reveal-range(2);
55
- }
23
+ // A row crosses the viewport edge on one scroll step, so mw-reveal on each
24
+ // card rises as one slab. This shifts every second and third child instead -
25
+ // a wave. On the grid and not the cards, because the grid knows the columns.
26
+ //
27
+ // Cycles of three are the fallback for anything that is not one of the fixed
28
+ // grids; mw-grid-2 to -5 restate the cycle to their own count in _grid.scss.
29
+ .mw-reveal-stagger > :nth-child(3n + 2) {
30
+ @include reveal-range(2);
31
+ }
56
32
 
57
- .mw-reveal-stagger > :nth-child(3n + 3) {
58
- @include reveal-range(3);
33
+ .mw-reveal-stagger > :nth-child(3n + 3) {
34
+ @include reveal-range(3);
35
+ }
59
36
  }
60
37
  }
61
- }
62
38
 
63
- @keyframes mw-reveal {
64
- from {
65
- opacity: 0;
66
- transform: translateY(40px);
67
- }
39
+ @keyframes mw-reveal {
40
+ from {
41
+ opacity: 0;
42
+ transform: translateY(40px);
43
+ }
68
44
 
69
- to {
70
- opacity: 1;
71
- transform: translateY(0);
45
+ to {
46
+ opacity: 1;
47
+ transform: translateY(0);
48
+ }
72
49
  }
73
50
  }
@@ -1,86 +1,85 @@
1
1
  @use 'sass:map';
2
2
  @use '../abstracts' as *;
3
3
 
4
- $_margin-values: map.merge(
5
- $spacing,
6
- (
7
- 'auto': auto,
8
- )
9
- );
10
-
11
- // Margin utilities
12
- @each $key, $value in $_margin-values {
13
- .mw-m-#{$key} {
14
- margin: $value;
15
- }
16
-
17
- .mw-mt-#{$key} {
18
- margin-top: $value;
19
- }
20
-
21
- .mw-mb-#{$key} {
22
- margin-bottom: $value;
23
- }
24
-
25
- .mw-ml-#{$key} {
26
- margin-left: $value;
27
- }
28
-
29
- .mw-mr-#{$key} {
30
- margin-right: $value;
31
- }
32
-
33
- .mw-mx-#{$key} {
34
- margin-left: $value;
35
- margin-right: $value;
36
- }
37
-
38
- .mw-my-#{$key} {
39
- margin-top: $value;
40
- margin-bottom: $value;
41
- }
42
- }
4
+ @layer mw.utilities {
5
+ $_margin-values: map.merge(
6
+ $spacing,
7
+ (
8
+ 'auto': auto,
9
+ )
10
+ );
11
+
12
+ @each $key, $value in $_margin-values {
13
+ .mw-m-#{$key} {
14
+ margin: $value;
15
+ }
43
16
 
44
- // Padding utilities
45
- @each $key, $value in $spacing {
46
- @if $value >= 0 {
47
- .mw-p-#{$key} {
48
- padding: $value;
17
+ .mw-mt-#{$key} {
18
+ margin-top: $value;
49
19
  }
50
20
 
51
- .mw-pt-#{$key} {
52
- padding-top: $value;
21
+ .mw-mb-#{$key} {
22
+ margin-bottom: $value;
53
23
  }
54
24
 
55
- .mw-pb-#{$key} {
56
- padding-bottom: $value;
25
+ .mw-ml-#{$key} {
26
+ margin-left: $value;
57
27
  }
58
28
 
59
- .mw-pl-#{$key} {
60
- padding-left: $value;
29
+ .mw-mr-#{$key} {
30
+ margin-right: $value;
61
31
  }
62
32
 
63
- .mw-pr-#{$key} {
64
- padding-right: $value;
33
+ .mw-mx-#{$key} {
34
+ margin-left: $value;
35
+ margin-right: $value;
65
36
  }
66
37
 
67
- .mw-px-#{$key} {
68
- padding-left: $value;
69
- padding-right: $value;
38
+ .mw-my-#{$key} {
39
+ margin-top: $value;
40
+ margin-bottom: $value;
70
41
  }
42
+ }
71
43
 
72
- .mw-py-#{$key} {
73
- padding-top: $value;
74
- padding-bottom: $value;
44
+ @each $key, $value in $spacing {
45
+ @if $value >= 0 {
46
+ .mw-p-#{$key} {
47
+ padding: $value;
48
+ }
49
+
50
+ .mw-pt-#{$key} {
51
+ padding-top: $value;
52
+ }
53
+
54
+ .mw-pb-#{$key} {
55
+ padding-bottom: $value;
56
+ }
57
+
58
+ .mw-pl-#{$key} {
59
+ padding-left: $value;
60
+ }
61
+
62
+ .mw-pr-#{$key} {
63
+ padding-right: $value;
64
+ }
65
+
66
+ .mw-px-#{$key} {
67
+ padding-left: $value;
68
+ padding-right: $value;
69
+ }
70
+
71
+ .mw-py-#{$key} {
72
+ padding-top: $value;
73
+ padding-bottom: $value;
74
+ }
75
75
  }
76
76
  }
77
- }
78
77
 
79
- // Gap utilities
80
- @each $key, $value in $spacing {
81
- @if $value >= 0 {
82
- .mw-gap-#{$key} {
83
- gap: $value;
78
+ @each $key, $value in $spacing {
79
+ @if $value >= 0 {
80
+ .mw-gap-#{$key} {
81
+ gap: $value;
82
+ }
84
83
  }
85
84
  }
86
85
  }