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,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
  }