maverick-wave 4.27.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 (140) hide show
  1. package/.claude/settings.local.json +29 -1
  2. package/.claude/skills/mw-maverick-wave/SKILL.md +42 -25
  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 +90 -5
  6. package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
  7. package/.claude/skills/mw-maverick-wave/references/javascript.md +18 -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 +17 -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 +266 -75
  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/header-utilities-container.html +192 -5
  40. package/src/partials/home-container.html +10 -20
  41. package/src/partials/input-group-container.html +11 -2
  42. package/src/partials/kbd-container.html +1 -1
  43. package/src/partials/login-container.html +5 -1
  44. package/src/partials/media-container.html +2 -2
  45. package/src/partials/modals-container.html +22 -32
  46. package/src/partials/pricing-container.html +9 -9
  47. package/src/partials/skeleton-container.html +6 -6
  48. package/src/partials/stepper-container.html +2 -2
  49. package/src/partials/tables-container.html +12 -12
  50. package/src/partials/tabs-container.html +17 -27
  51. package/src/partials/tags-container.html +23 -17
  52. package/src/partials/techstack-bucket-container.html +13 -0
  53. package/src/partials/tiles-container.html +26 -9
  54. package/src/partials/typography-container.html +7 -6
  55. package/src/partials/utilities-container.html +35 -15
  56. package/src/scss/_layers.scss +10 -0
  57. package/src/scss/abstracts/_index.scss +6 -0
  58. package/src/scss/abstracts/_mixins.scss +61 -153
  59. package/src/scss/abstracts/_variables.scss +123 -319
  60. package/src/scss/base/_base.scss +170 -190
  61. package/src/scss/base/_reset.scss +106 -104
  62. package/src/scss/base/_typography.scss +153 -151
  63. package/src/scss/components/_accordions.scss +97 -97
  64. package/src/scss/components/_alerts.scss +71 -70
  65. package/src/scss/components/_announcement.scss +71 -70
  66. package/src/scss/components/_avatars.scss +130 -142
  67. package/src/scss/components/_badge.scss +131 -132
  68. package/src/scss/components/_blog-post.scss +223 -220
  69. package/src/scss/components/_breadcrumbs.scss +93 -92
  70. package/src/scss/components/_button-bar.scss +102 -110
  71. package/src/scss/components/_buttons.scss +319 -324
  72. package/src/scss/components/_calendar.scss +251 -252
  73. package/src/scss/components/_cards.scss +359 -386
  74. package/src/scss/components/_code.scss +190 -194
  75. package/src/scss/components/_coming-soon.scss +77 -75
  76. package/src/scss/components/_content-slider.scss +90 -89
  77. package/src/scss/components/_divider.scss +55 -53
  78. package/src/scss/components/_dropdown.scss +179 -185
  79. package/src/scss/components/_empty-state.scss +57 -57
  80. package/src/scss/components/_flag.scss +325 -0
  81. package/src/scss/components/_gallery.scss +131 -133
  82. package/src/scss/components/_index.scss +2 -0
  83. package/src/scss/components/_info.scss +151 -167
  84. package/src/scss/components/_kanban.scss +332 -341
  85. package/src/scss/components/_kbd.scss +40 -38
  86. package/src/scss/components/_lang-switch.scss +108 -0
  87. package/src/scss/components/_links.scss +21 -28
  88. package/src/scss/components/_lists.scss +510 -514
  89. package/src/scss/components/_localhost-indicator.scss +26 -24
  90. package/src/scss/components/_media.scss +22 -20
  91. package/src/scss/components/_meta-info.scss +35 -33
  92. package/src/scss/components/_modals.scss +277 -186
  93. package/src/scss/components/_pagination.scss +81 -87
  94. package/src/scss/components/_panels.scss +99 -97
  95. package/src/scss/components/_pricing.scss +183 -241
  96. package/src/scss/components/_progress.scss +112 -89
  97. package/src/scss/components/_prose.scss +35 -33
  98. package/src/scss/components/_ratings.scss +40 -38
  99. package/src/scss/components/_segmented.scss +82 -84
  100. package/src/scss/components/_skeleton.scss +66 -72
  101. package/src/scss/components/_spinners.scss +155 -159
  102. package/src/scss/components/_stepper.scss +116 -116
  103. package/src/scss/components/_tables.scss +155 -148
  104. package/src/scss/components/_tabs.scss +232 -141
  105. package/src/scss/components/_tags.scss +109 -107
  106. package/src/scss/components/_techstack-bucket.scss +123 -122
  107. package/src/scss/components/_testimonial.scss +72 -70
  108. package/src/scss/components/_theme-toggle.scss +53 -51
  109. package/src/scss/components/_tiles.scss +174 -174
  110. package/src/scss/components/_timelines.scss +282 -280
  111. package/src/scss/components/_toasts.scss +66 -72
  112. package/src/scss/form-elements/_checkbox.scss +117 -132
  113. package/src/scss/form-elements/_form.scss +149 -115
  114. package/src/scss/form-elements/_input-group.scss +99 -103
  115. package/src/scss/form-elements/_input.scss +74 -74
  116. package/src/scss/form-elements/_login.scss +48 -48
  117. package/src/scss/form-elements/_prefilled.scss +53 -51
  118. package/src/scss/form-elements/_radio.scss +95 -107
  119. package/src/scss/form-elements/_select.scss +42 -42
  120. package/src/scss/form-elements/_slider.scss +117 -132
  121. package/src/scss/form-elements/_textarea.scss +68 -54
  122. package/src/scss/form-elements/_toggle.scss +127 -140
  123. package/src/scss/layout/_footer.scss +172 -171
  124. package/src/scss/layout/_grid.scss +268 -302
  125. package/src/scss/layout/_header.scss +426 -427
  126. package/src/scss/layout/_home.scss +28 -27
  127. package/src/scss/layout/_main.scss +275 -238
  128. package/src/scss/layout/_page-header.scss +38 -36
  129. package/src/scss/layout/_section.scss +150 -124
  130. package/src/scss/main.scss +1 -1
  131. package/src/scss/utilities/_accessibility.scss +46 -45
  132. package/src/scss/utilities/_aspect.scss +22 -20
  133. package/src/scss/utilities/_corner.scss +23 -5
  134. package/src/scss/utilities/_display.scss +76 -70
  135. package/src/scss/utilities/_elevation.scss +13 -11
  136. package/src/scss/utilities/_flex.scss +83 -85
  137. package/src/scss/utilities/_reveal.scss +40 -63
  138. package/src/scss/utilities/_spacing.scss +63 -64
  139. package/src/scss/utilities/_text.scss +139 -141
  140. 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
  }