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,233 +1,233 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Tile container
4
- .mw-tiles {
5
- width: 80%;
6
- margin: spacing('0') auto;
7
- padding: spacing('3');
8
- display: grid;
9
- gap: spacing('6');
10
- grid-template-columns: repeat(3, 1fr); // Base 3 columns
11
-
12
- @include media-down('lg') {
13
- grid-template-columns: repeat(2, 1fr);
14
- }
15
-
16
- @include media-down('sm') {
17
- grid-template-columns: 1fr;
3
+ @layer mw.components {
4
+ .mw-tiles {
18
5
  width: 100%;
6
+ margin: spacing('0') auto;
19
7
  padding: spacing('0');
8
+ display: grid;
20
9
  gap: spacing('4');
21
- }
10
+ grid-template-columns: 1fr;
22
11
 
23
- // 4 column variant
24
- &-4col {
25
- width: 85%;
26
- grid-template-columns: repeat(4, 1fr);
12
+ @include media-up('sm') {
13
+ grid-template-columns: repeat(2, 1fr);
14
+ width: 80%;
15
+ padding: spacing('3');
16
+ gap: spacing('6');
17
+ }
27
18
 
28
- @include media-down('lg') {
19
+ @include media-up('lg') {
29
20
  grid-template-columns: repeat(3, 1fr);
30
21
  }
31
22
 
32
- @include media-down('md') {
23
+ &-4col {
24
+ width: 85%;
33
25
  grid-template-columns: repeat(2, 1fr);
34
- }
35
26
 
36
- @include media-down('sm') {
37
- grid-template-columns: 1fr;
38
- // Full width from here on - the page gutter is the container's job,
39
- // a second inset only narrows the tile
40
- width: 100%;
41
- padding: spacing('0');
42
- gap: spacing('4');
43
- }
44
- }
27
+ @include media-up('md') {
28
+ grid-template-columns: repeat(3, 1fr);
29
+ }
45
30
 
46
- // 2 column variant
47
- &-2col {
48
- width: 75%;
49
- grid-template-columns: repeat(2, 1fr);
50
-
51
- @include media-down('sm') {
52
- grid-template-columns: 1fr;
53
- // Full width from here on - the page gutter is the container's job,
54
- // a second inset only narrows the tile
55
- width: 100%;
56
- padding: spacing('0');
57
- gap: spacing('4');
58
- }
59
- }
60
- }
31
+ @include media-up('lg') {
32
+ grid-template-columns: repeat(4, 1fr);
33
+ }
61
34
 
62
- // Base tile
63
- .mw-tile {
64
- background: var(--mw-card-background);
65
- @include surface;
66
- padding: spacing('5');
67
- box-shadow: var(--mw-elevation-2);
68
- transition: var(--mw-transition);
69
- border: 1px solid var(--mw-border);
70
- overflow: hidden;
71
- display: flex;
72
- flex-direction: column;
73
- cursor: pointer;
74
-
75
- &:hover {
76
- box-shadow: var(--mw-elevation-3);
77
- border-color: var(--mw-border-accent);
78
- }
35
+ @include media-down('sm') {
36
+ grid-template-columns: 1fr;
37
+ // Full width from here on - the page gutter is the container's job,
38
+ // a second inset only narrows the tile
39
+ width: 100%;
40
+ padding: spacing('0');
41
+ gap: spacing('4');
42
+ }
43
+ }
79
44
 
80
- @include hover {
81
- transform: translateY(-2px);
82
- }
45
+ &-2col {
46
+ width: 75%;
47
+ grid-template-columns: repeat(2, 1fr);
83
48
 
84
- // A tile is tapped, so it needs a press of its own - the lift above never
85
- // runs on a finger.
86
- &:active {
87
- transform: scale(0.985);
88
- transition-duration: var(--mw-duration-instant);
49
+ @include media-down('sm') {
50
+ grid-template-columns: 1fr;
51
+ // Full width from here on - the page gutter is the container's job,
52
+ // a second inset only narrows the tile
53
+ width: 100%;
54
+ padding: spacing('0');
55
+ gap: spacing('4');
56
+ }
57
+ }
89
58
  }
90
59
 
91
- // Tile image
92
- &-img {
93
- width: 100px;
94
- height: 100px;
95
- border-radius: radius('full');
60
+ .mw-tile {
61
+ background: var(--mw-card-background);
62
+ @include surface;
63
+ padding: spacing('5');
64
+ box-shadow: var(--mw-elevation-2);
65
+ transition: var(--mw-transition);
66
+ border: 1px solid var(--mw-border);
96
67
  overflow: hidden;
97
- margin: spacing('0') auto spacing('3');
98
- flex-shrink: 0;
99
-
100
- img {
101
- width: 100%;
102
- height: 100%;
103
- object-fit: cover;
104
- transition: transform var(--mw-duration-zoom) var(--mw-ease-out);
68
+ display: flex;
69
+ flex-direction: column;
70
+ cursor: pointer;
71
+
72
+ // Same hover as a card, arc included - a tile is the larger clickable
73
+ // relative of one, and a pair that looks alike has to react alike.
74
+ &::after {
75
+ transition: var(--mw-transition);
105
76
  }
106
- }
107
77
 
108
- // Tile header
109
- &-header {
110
- font-size: font-size('2xl');
111
- font-weight: font-weight('medium');
112
- margin-bottom: spacing('4');
113
- color: var(--mw-text-color);
114
- line-height: 1.2;
115
- text-align: center;
116
-
117
- @include media-down('md') {
118
- font-size: font-size('xl');
78
+ &:hover {
79
+ box-shadow: var(--mw-elevation-3);
80
+ border-color: var(--mw-border-accent);
81
+ --mw-corner-accent: var(--mw-corner-accent-hover);
119
82
  }
120
83
 
121
- @include media-down('sm') {
122
- font-size: font-size('lg');
84
+ @include hover {
85
+ transform: translateY(-2px);
123
86
  }
124
- }
125
87
 
126
- // Tile body (2-3 lines of info)
127
- &-body {
128
- flex-grow: 1;
129
- display: flex;
130
- flex-direction: column;
131
- gap: spacing('2');
132
- margin-bottom: spacing('3');
88
+ // A tile is tapped, so it needs a press of its own - the lift above never
89
+ // runs on a finger.
90
+ &:active {
91
+ transform: scale(0.985);
92
+ transition-duration: var(--mw-duration-instant);
93
+ }
94
+
95
+ &-img {
96
+ width: 100px;
97
+ height: 100px;
98
+ border-radius: radius('full');
99
+ overflow: hidden;
100
+ margin: spacing('0') auto spacing('3');
101
+ flex-shrink: 0;
102
+
103
+ img {
104
+ width: 100%;
105
+ height: 100%;
106
+ object-fit: cover;
107
+ transition: transform var(--mw-duration-zoom) var(--mw-ease-out);
108
+ }
109
+ }
133
110
 
134
- p {
135
- margin: spacing('0');
111
+ &-header {
112
+ font-size: font-size('lg');
113
+ font-weight: font-weight('medium');
114
+ margin-bottom: spacing('4');
136
115
  color: var(--mw-text-color);
137
- font-size: font-size('sm');
138
- line-height: 1.3;
116
+ line-height: 1.2;
117
+ text-align: center;
118
+
119
+ @include media-up('sm') {
120
+ font-size: font-size('xl');
121
+ }
139
122
 
140
- &:last-child {
141
- margin-bottom: spacing('0');
123
+ @include media-up('md') {
124
+ font-size: font-size('2xl');
142
125
  }
143
126
  }
144
- }
145
127
 
146
- &-footer {
147
- margin-top: spacing('2');
148
- padding-top: spacing('2');
149
- border-top: 1px solid var(--mw-border);
150
- font-size: font-size('xs');
151
- color: var(--mw-text-muted-color);
152
- text-align: right;
153
- }
128
+ &-body {
129
+ flex-grow: 1;
130
+ display: flex;
131
+ flex-direction: column;
132
+ gap: spacing('2');
133
+ margin-bottom: spacing('3');
154
134
 
155
- // Size variants
156
- &-sm {
157
- padding: spacing('4');
135
+ p {
136
+ margin: spacing('0');
137
+ color: var(--mw-text-color);
138
+ font-size: font-size('sm');
139
+ line-height: 1.3;
140
+
141
+ &:last-child {
142
+ margin-bottom: spacing('0');
143
+ }
144
+ }
145
+ }
158
146
 
159
- .mw-tile-img {
160
- width: 80px;
161
- height: 80px;
162
- margin-bottom: spacing('2');
147
+ &-footer {
148
+ margin-top: spacing('2');
149
+ padding-top: spacing('2');
150
+ border-top: 1px solid var(--mw-border);
151
+ font-size: font-size('xs');
152
+ color: var(--mw-text-muted-color);
153
+ text-align: right;
163
154
  }
164
155
 
165
- .mw-tile-header {
166
- font-size: font-size('lg');
167
- margin-bottom: spacing('2');
156
+ &-sm {
157
+ padding: spacing('4');
168
158
 
169
- @include media-down('md') {
170
- font-size: font-size('md');
159
+ .mw-tile-img {
160
+ width: 80px;
161
+ height: 80px;
162
+ margin-bottom: spacing('2');
171
163
  }
172
- }
173
164
 
174
- .mw-tile-body {
175
- gap: spacing('1');
176
- margin-bottom: spacing('2');
165
+ .mw-tile-header {
166
+ font-size: font-size('md');
167
+ margin-bottom: spacing('2');
177
168
 
178
- p {
179
- font-size: font-size('xs');
169
+ @include media-up('md') {
170
+ font-size: font-size('lg');
171
+ }
180
172
  }
181
- }
182
- }
183
173
 
184
- &-lg {
185
- padding: spacing('6');
174
+ .mw-tile-body {
175
+ gap: spacing('1');
176
+ margin-bottom: spacing('2');
186
177
 
187
- .mw-tile-img {
188
- width: 120px;
189
- height: 120px;
190
- margin-bottom: spacing('4');
178
+ p {
179
+ font-size: font-size('xs');
180
+ }
181
+ }
191
182
  }
192
183
 
193
- .mw-tile-header {
194
- font-size: font-size('3xl');
195
- margin-bottom: spacing('4');
184
+ &-lg {
185
+ padding: spacing('6');
196
186
 
197
- @include media-down('md') {
198
- font-size: font-size('2xl');
187
+ .mw-tile-img {
188
+ width: 120px;
189
+ height: 120px;
190
+ margin-bottom: spacing('4');
199
191
  }
200
192
 
201
- @include media-down('sm') {
193
+ .mw-tile-header {
202
194
  font-size: font-size('xl');
195
+ margin-bottom: spacing('4');
196
+
197
+ @include media-up('sm') {
198
+ font-size: font-size('2xl');
199
+ }
200
+
201
+ @include media-up('md') {
202
+ font-size: font-size('3xl');
203
+ }
203
204
  }
204
- }
205
205
 
206
- .mw-tile-body {
207
- gap: spacing('3');
208
- margin-bottom: spacing('4');
206
+ .mw-tile-body {
207
+ gap: spacing('3');
208
+ margin-bottom: spacing('4');
209
209
 
210
- p {
211
- font-size: font-size('md');
210
+ p {
211
+ font-size: font-size('md');
212
+ }
212
213
  }
213
214
  }
214
215
  }
215
- }
216
-
217
- // Responsive adjustments
218
- @include media-down('sm') {
219
- .mw-tile {
220
- padding: spacing('4');
221
- text-align: left;
222
216
 
223
- &-img {
224
- width: 60px;
225
- height: 60px;
226
- margin: spacing('0') auto spacing('2');
227
- }
217
+ @include media-down('sm') {
218
+ .mw-tile {
219
+ padding: spacing('4');
220
+ text-align: left;
221
+
222
+ &-img {
223
+ width: 60px;
224
+ height: 60px;
225
+ margin: spacing('0') auto spacing('2');
226
+ }
228
227
 
229
- &-body {
230
- margin-bottom: spacing('2');
228
+ &-body {
229
+ margin-bottom: spacing('2');
230
+ }
231
231
  }
232
232
  }
233
233
  }