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,286 +1,289 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- .mw-blog-post {
4
- position: relative;
5
- margin: spacing('2');
6
- padding: spacing('4') spacing('7');
7
- // One-shot entrance, not a loop, so it belongs on the scale. It ran for
8
- // 1.6s before - long enough that the reader is into the second paragraph
9
- // while the page is still arriving.
10
- animation: pageReveal var(--mw-duration-slower) var(--mw-ease-out) forwards;
11
- border-radius: radius('sm') radius('2xl') radius('sm') radius('2xl');
12
- box-shadow:
13
- var(--mw-border) 0 30px 60px -18px inset,
14
- var(--mw-border) 0 18px 36px -18px inset;
15
-
16
- @keyframes pageReveal {
17
- 0% {
18
- opacity: 0;
19
- transform: translateY(-30px) rotateX(10deg);
20
- transform-origin: top;
21
- }
22
- 100% {
23
- opacity: 1;
24
- transform: translateY(0) rotateX(0);
25
- transform-origin: top;
26
- }
27
- }
28
-
29
- @include media-down('sm') {
3
+ @layer mw.components {
4
+ .mw-blog-post {
5
+ position: relative;
30
6
  margin: spacing('1');
31
7
  padding: spacing('4') spacing('5');
32
- }
33
-
34
- // Book-like left border
35
- &::before {
36
- content: '';
37
- position: absolute;
38
- left: 1px;
39
- top: 1px;
40
- bottom: 1px;
41
- width: 7px;
42
- background: linear-gradient(
43
- to bottom,
44
- var(--mw-primary-color),
45
- var(--mw-secondary-color)
46
- );
47
- border-radius: radius('sm');
48
- }
8
+ // One-shot entrance, not a loop, so it belongs on the scale. It ran for
9
+ // 1.6s before - long enough that the reader is into the second paragraph
10
+ // while the page is still arriving.
11
+ animation: pageReveal var(--mw-duration-slower) var(--mw-ease-out) forwards;
12
+ border-radius: radius('sm') radius('2xl') radius('sm') radius('2xl');
13
+ box-shadow:
14
+ var(--mw-border) 0 30px 60px -18px inset,
15
+ var(--mw-border) 0 18px 36px -18px inset;
16
+
17
+ @keyframes pageReveal {
18
+ 0% {
19
+ opacity: 0;
20
+ transform: translateY(-30px) rotateX(10deg);
21
+ transform-origin: top;
22
+ }
23
+ 100% {
24
+ opacity: 1;
25
+ transform: translateY(0) rotateX(0);
26
+ transform-origin: top;
27
+ }
28
+ }
49
29
 
50
- &-title {
51
- margin-bottom: spacing('6');
52
- text-align: start;
53
- position: relative;
30
+ @include media-up('sm') {
31
+ margin: spacing('2');
32
+ padding: spacing('4') spacing('7');
33
+ }
54
34
 
55
- &::after {
35
+ // Book-like left border
36
+ &::before {
56
37
  content: '';
57
38
  position: absolute;
58
- bottom: spacing('-2');
59
- left: spacing('0');
60
- // Never wider than the title it underlines
61
- width: min(200px, 100%);
62
- height: 5px;
63
- background: var(--mw-primary-text-color);
39
+ left: 1px;
40
+ top: 1px;
41
+ bottom: 1px;
42
+ width: 7px;
43
+ background: linear-gradient(
44
+ to bottom,
45
+ var(--mw-primary-color),
46
+ var(--mw-secondary-color)
47
+ );
48
+ border-radius: radius('sm');
64
49
  }
65
- }
66
50
 
67
- &-header {
68
- margin-bottom: spacing('5');
69
- position: relative;
51
+ &-title {
52
+ margin-bottom: spacing('6');
53
+ text-align: start;
54
+ position: relative;
70
55
 
71
- &-icon {
72
- width: 60px;
73
- height: 60px;
74
- border-radius: radius('full');
75
- background: var(--mw-primary-color);
76
- color: var(--mw-primary-accent-text-color);
77
- display: flex;
78
- align-items: center;
79
- justify-content: center;
80
- margin-bottom: spacing('4');
81
- font-size: font-size('xl');
82
- box-shadow: var(--mw-elevation-2);
83
- animation: iconFlip var(--mw-duration-slower) var(--mw-ease-out) forwards;
84
-
85
- @keyframes iconFlip {
86
- 0% {
87
- transform: rotateY(90deg);
88
- }
89
- 100% {
90
- transform: rotateY(0);
91
- }
56
+ &::after {
57
+ content: '';
58
+ position: absolute;
59
+ bottom: spacing('-2');
60
+ left: spacing('0');
61
+ // Never wider than the title it underlines
62
+ width: min(200px, 100%);
63
+ height: 5px;
64
+ background: var(--mw-primary-text-color);
92
65
  }
93
66
  }
94
- }
95
67
 
96
- &-meta {
97
- display: flex;
98
- flex-wrap: wrap;
99
- align-items: center;
100
- margin-bottom: spacing('6');
101
- font-size: font-size('sm');
102
- color: var(--mw-text-muted-color);
103
- row-gap: spacing('1');
104
-
105
- @include media-down('sm') {
106
- flex-direction: column;
107
- gap: spacing('2');
108
- margin-top: spacing('5');
109
- align-items: start;
68
+ &-header {
69
+ margin-bottom: spacing('5');
70
+ position: relative;
71
+
72
+ &-icon {
73
+ width: 60px;
74
+ height: 60px;
75
+ border-radius: radius('full');
76
+ background: var(--mw-primary-color);
77
+ color: var(--mw-primary-accent-text-color);
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ margin-bottom: spacing('4');
82
+ font-size: font-size('xl');
83
+ box-shadow: var(--mw-elevation-2);
84
+ animation: iconFlip var(--mw-duration-slower) var(--mw-ease-out)
85
+ forwards;
86
+
87
+ @keyframes iconFlip {
88
+ 0% {
89
+ transform: rotateY(90deg);
90
+ }
91
+ 100% {
92
+ transform: rotateY(0);
93
+ }
94
+ }
95
+ }
110
96
  }
111
97
 
112
- &-item {
113
- display: inline-flex;
98
+ &-meta {
99
+ display: flex;
100
+ flex-wrap: wrap;
114
101
  align-items: center;
102
+ margin-bottom: spacing('6');
103
+ font-size: font-size('sm');
104
+ color: var(--mw-text-muted-color);
115
105
  row-gap: spacing('1');
116
- gap: spacing('2');
117
- &:not(:first-child) {
118
- margin-left: spacing('7');
119
- @include media-down('sm') {
106
+
107
+ @include media-down('sm') {
108
+ flex-direction: column;
109
+ gap: spacing('2');
110
+ margin-top: spacing('5');
111
+ align-items: start;
112
+ }
113
+
114
+ &-item {
115
+ display: inline-flex;
116
+ align-items: center;
117
+ row-gap: spacing('1');
118
+ gap: spacing('2');
119
+ &:not(:first-child) {
120
120
  margin-left: spacing('0');
121
+ @include media-up('sm') {
122
+ margin-left: spacing('7');
123
+ }
121
124
  }
122
- }
123
125
 
124
- i {
125
- color: var(--mw-primary-text-color);
126
- flex-shrink: 0;
126
+ i {
127
+ color: var(--mw-primary-text-color);
128
+ flex-shrink: 0;
129
+ }
127
130
  }
128
131
  }
129
- }
130
132
 
131
- &-featured-image {
132
- width: 100%;
133
- max-height: 400px;
134
- object-fit: contain;
135
- border-radius: radius('sm');
136
- margin-bottom: spacing('5');
137
- box-shadow: var(--mw-elevation-3);
138
- }
139
-
140
- // Content section
141
- &-content {
142
- line-height: 1.6;
133
+ &-featured-image {
134
+ width: 100%;
135
+ max-height: 400px;
136
+ object-fit: contain;
137
+ border-radius: radius('sm');
138
+ margin-bottom: spacing('5');
139
+ box-shadow: var(--mw-elevation-3);
140
+ }
143
141
 
144
- h2 {
145
- font-size: font-size('3xl');
146
- margin: spacing('6') 0 spacing('4');
142
+ // Content section
143
+ &-content {
144
+ line-height: 1.6;
147
145
 
148
- @include media-down('md') {
146
+ h2 {
149
147
  font-size: font-size('2xl');
150
- }
151
- }
148
+ margin: spacing('6') 0 spacing('4');
152
149
 
153
- h3 {
154
- font-size: font-size('2xl');
155
- margin: spacing('5') 0 spacing('3');
150
+ @include media-up('md') {
151
+ font-size: font-size('3xl');
152
+ }
153
+ }
156
154
 
157
- @include media-down('md') {
155
+ h3 {
158
156
  font-size: font-size('xl');
159
- }
160
- }
157
+ margin: spacing('5') 0 spacing('3');
161
158
 
162
- h4 {
163
- font-size: font-size('xl');
164
- margin: spacing('4') 0 spacing('2');
159
+ @include media-up('md') {
160
+ font-size: font-size('2xl');
161
+ }
162
+ }
165
163
 
166
- @include media-down('md') {
164
+ h4 {
167
165
  font-size: font-size('lg');
168
- }
169
- }
166
+ margin: spacing('4') 0 spacing('2');
170
167
 
171
- h5 {
172
- font-size: font-size('lg');
173
- margin: spacing('4') spacing('1') spacing('2');
168
+ @include media-up('md') {
169
+ font-size: font-size('xl');
170
+ }
171
+ }
174
172
 
175
- @include media-down('md') {
173
+ h5 {
176
174
  font-size: font-size('md');
175
+ margin: spacing('4') spacing('1') spacing('2');
176
+
177
+ @include media-up('md') {
178
+ font-size: font-size('lg');
179
+ }
177
180
  }
178
181
  }
179
- }
180
182
 
181
- &-content-markdown {
182
- @extend .mw-blog-post-content;
183
+ &-content-markdown {
184
+ @extend .mw-blog-post-content;
183
185
 
184
- a {
185
- display: inline-block;
186
- position: relative;
187
- color: var(--mw-text-muted-color);
188
- text-decoration: none;
189
- padding-bottom: 2px;
186
+ a {
187
+ display: inline-block;
188
+ position: relative;
189
+ color: var(--mw-text-muted-color);
190
+ text-decoration: none;
191
+ padding-bottom: 2px;
190
192
 
191
- // subtle default underline via box‐shadow
192
- &::after {
193
- content: '';
194
- position: absolute;
195
- left: 0;
196
- bottom: 1px;
197
- width: 100%;
198
- height: 1px;
199
- background: currentColor;
200
- opacity: 0.4;
201
- transform: scaleX(1);
202
- transform-origin: left;
203
- transition:
204
- transform var(--mw-duration-fast) var(--mw-ease-out),
205
- opacity var(--mw-duration-fast) var(--mw-ease-out);
206
- }
207
-
208
- &:hover {
209
- color: var(--mw-primary-text-color);
193
+ // subtle default underline via box‐shadow
210
194
  &::after {
211
- opacity: 1;
212
- height: 2px;
213
- transform: scaleX(1.1);
195
+ content: '';
196
+ position: absolute;
197
+ left: 0;
198
+ bottom: 1px;
199
+ width: 100%;
200
+ height: 1px;
201
+ background: currentColor;
202
+ opacity: 0.4;
203
+ transform: scaleX(1);
204
+ transform-origin: left;
205
+ transition:
206
+ transform var(--mw-duration-fast) var(--mw-ease-out),
207
+ opacity var(--mw-duration-fast) var(--mw-ease-out);
208
+ }
209
+
210
+ &:hover {
211
+ color: var(--mw-primary-text-color);
212
+ &::after {
213
+ opacity: 1;
214
+ height: 2px;
215
+ transform: scaleX(1.1);
216
+ }
214
217
  }
215
218
  }
216
- }
217
219
 
218
- ul,
219
- ol {
220
- margin: spacing('3') 0;
221
- padding-left: spacing('6');
222
- }
220
+ ul,
221
+ ol {
222
+ margin: spacing('3') 0;
223
+ padding-left: spacing('6');
224
+ }
223
225
 
224
- ul {
225
- list-style: disc;
226
226
  ul {
227
- list-style: circle;
227
+ list-style: disc;
228
228
  ul {
229
- list-style: square;
229
+ list-style: circle;
230
+ ul {
231
+ list-style: square;
232
+ }
230
233
  }
231
234
  }
232
- }
233
235
 
234
- ol {
235
- list-style: decimal;
236
236
  ol {
237
- list-style: lower-alpha;
237
+ list-style: decimal;
238
+ ol {
239
+ list-style: lower-alpha;
240
+ }
238
241
  }
239
- }
240
242
 
241
- li {
242
- margin-bottom: spacing('2');
243
- }
244
-
245
- pre {
246
- border: 1px solid var(--mw-border);
247
- background: var(--mw-card-background);
248
- }
243
+ li {
244
+ margin-bottom: spacing('2');
245
+ }
249
246
 
250
- img {
251
- max-width: 100%;
252
- border-radius: radius('md');
253
- margin: spacing('5') spacing('0');
254
- }
255
- }
247
+ pre {
248
+ border: 1px solid var(--mw-border);
249
+ background: var(--mw-card-background);
250
+ }
256
251
 
257
- // Footer section
258
- &-footer {
259
- margin-top: spacing('6');
260
- padding-top: spacing('4');
261
- border-top: 1px solid var(--mw-secondary-text-color);
262
- display: flex;
263
- justify-content: space-between;
264
- align-items: center;
265
-
266
- @include media-down('sm') {
267
- flex-direction: column;
268
- gap: spacing('2');
252
+ img {
253
+ max-width: 100%;
254
+ border-radius: radius('md');
255
+ margin: spacing('5') spacing('0');
256
+ }
269
257
  }
270
258
 
271
- &-button {
272
- transition: var(--mw-transition);
273
- color: var(--mw-primary-text-color);
259
+ // Footer section
260
+ &-footer {
261
+ margin-top: spacing('6');
262
+ padding-top: spacing('4');
263
+ border-top: 1px solid var(--mw-secondary-text-color);
264
+ display: flex;
265
+ justify-content: space-between;
266
+ align-items: center;
274
267
 
275
- &:hover {
276
- transform: translateX(-7px);
268
+ @include media-down('sm') {
269
+ flex-direction: column;
270
+ gap: spacing('2');
277
271
  }
278
272
 
279
- &.next {
280
- flex-direction: row-reverse;
273
+ &-button {
274
+ transition: var(--mw-transition);
275
+ color: var(--mw-primary-text-color);
281
276
 
282
277
  &:hover {
283
- transform: translateX(7px);
278
+ transform: translateX(-7px);
279
+ }
280
+
281
+ &.next {
282
+ flex-direction: row-reverse;
283
+
284
+ &:hover {
285
+ transform: translateX(7px);
286
+ }
284
287
  }
285
288
  }
286
289
  }