maverick-wave 5.30.0 → 5.32.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 (147) hide show
  1. package/README.md +2 -2
  2. package/maverick-wave.min.css +2 -2
  3. package/package.json +8 -2
  4. package/src/scss/abstracts/_variables.scss +2 -0
  5. package/src/scss/components/_modals.scss +23 -9
  6. package/src/scss/components/_testimonial.scss +2 -0
  7. package/src/scss/layout/_home.scss +46 -0
  8. package/src/scss/layout/_main.scss +20 -0
  9. package/src/scss/layout/_parallax.scss +2 -2
  10. package/src/scss/main-lean.scss +8 -3
  11. package/.claude/settings.local.json +0 -43
  12. package/.claude/skills/mw-maverick-wave/SKILL.md +0 -532
  13. package/.claude/skills/mw-maverick-wave/examples/angular-form.md +0 -279
  14. package/.claude/skills/mw-maverick-wave/examples/angular-list-page.md +0 -309
  15. package/.claude/skills/mw-maverick-wave/examples/angular-services.md +0 -538
  16. package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +0 -530
  17. package/.claude/skills/mw-maverick-wave/references/components.md +0 -2170
  18. package/.claude/skills/mw-maverick-wave/references/forms.md +0 -358
  19. package/.claude/skills/mw-maverick-wave/references/javascript.md +0 -164
  20. package/.claude/skills/mw-maverick-wave/references/layout.md +0 -764
  21. package/.claude/skills/mw-maverick-wave/references/theming.md +0 -530
  22. package/.github/workflows/ci.yml +0 -41
  23. package/.idea/codeStyles/Project.xml +0 -59
  24. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  25. package/.idea/maverick-wave.iml +0 -12
  26. package/.idea/modules.xml +0 -8
  27. package/.idea/prettier.xml +0 -6
  28. package/.idea/vcs.xml +0 -6
  29. package/.prettierignore +0 -8
  30. package/.prettierrc.json +0 -7
  31. package/CHANGELOG.md +0 -956
  32. package/CLAUDE.md +0 -60
  33. package/gulpfile.js +0 -167
  34. package/index.html +0 -1730
  35. package/release.sh +0 -31
  36. package/scripts/verify.js +0 -252
  37. package/src/assets/favicon/apple-touch-icon.png +0 -0
  38. package/src/assets/favicon/favicon-96x96.png +0 -0
  39. package/src/assets/favicon/favicon.svg +0 -1
  40. package/src/assets/favicon/site.webmanifest +0 -37
  41. package/src/assets/favicon/web-app-manifest-192x192.png +0 -0
  42. package/src/assets/favicon/web-app-manifest-512x512.png +0 -0
  43. package/src/assets/favicon.ico +0 -0
  44. package/src/assets/header-logo.svg +0 -24
  45. package/src/assets/images/gallery-city.svg +0 -49
  46. package/src/assets/images/gallery-desert.svg +0 -25
  47. package/src/assets/images/gallery-forest.svg +0 -46
  48. package/src/assets/images/gallery-lake.svg +0 -26
  49. package/src/assets/images/gallery-mountain.svg +0 -19
  50. package/src/assets/images/gallery-ocean.svg +0 -26
  51. package/src/assets/images/gallery-oldtown.svg +0 -41
  52. package/src/assets/images/gallery-snow.svg +0 -39
  53. package/src/assets/images/photo-balloon.svg +0 -35
  54. package/src/assets/images/photo-forest-path.svg +0 -31
  55. package/src/assets/images/photo-lighthouse.svg +0 -42
  56. package/src/assets/images/photo-palm.svg +0 -27
  57. package/src/assets/images/photo-peak.svg +0 -27
  58. package/src/assets/images/photo-tower.svg +0 -34
  59. package/src/assets/images/photo-waterfall.svg +0 -32
  60. package/src/assets/images/slider-field.svg +0 -124
  61. package/src/assets/images/slider-forest.svg +0 -33
  62. package/src/assets/images/slider-lake.svg +0 -35
  63. package/src/assets/images/slider-mountains.svg +0 -29
  64. package/src/assets/images/slider-trees.svg +0 -41
  65. package/src/assets/images/story-aurora.svg +0 -36
  66. package/src/assets/images/story-beach.svg +0 -34
  67. package/src/assets/images/story-stars.svg +0 -35
  68. package/src/assets/images/tile-analytics.svg +0 -22
  69. package/src/assets/images/tile-cloud.svg +0 -19
  70. package/src/assets/images/tile-ecommerce.svg +0 -14
  71. package/src/assets/images/tile-enterprise.svg +0 -22
  72. package/src/assets/images/tile-marketing.svg +0 -16
  73. package/src/assets/media/demo-chime.wav +0 -0
  74. package/src/assets/media/story-sunrise.jpg +0 -0
  75. package/src/assets/media/story-sunrise.mp4 +0 -0
  76. package/src/partials/accordions-container.html +0 -179
  77. package/src/partials/alerts-container.html +0 -151
  78. package/src/partials/announcement-container.html +0 -67
  79. package/src/partials/avatars-container.html +0 -229
  80. package/src/partials/badges-container.html +0 -114
  81. package/src/partials/blog-posts-container.html +0 -158
  82. package/src/partials/breadcrumbs-container.html +0 -126
  83. package/src/partials/button-bar-container.html +0 -175
  84. package/src/partials/buttons-container.html +0 -272
  85. package/src/partials/calendar-container.html +0 -203
  86. package/src/partials/cards-container.html +0 -727
  87. package/src/partials/code-container.html +0 -194
  88. package/src/partials/colors-container.html +0 -263
  89. package/src/partials/coming-soon-container.html +0 -10
  90. package/src/partials/contact-container.html +0 -85
  91. package/src/partials/content-slider-container.html +0 -36
  92. package/src/partials/divider-container.html +0 -70
  93. package/src/partials/documentation-container.html +0 -204
  94. package/src/partials/dropdown-container.html +0 -119
  95. package/src/partials/empty-state-container.html +0 -79
  96. package/src/partials/feed-container.html +0 -506
  97. package/src/partials/footer-container.html +0 -113
  98. package/src/partials/form-container.html +0 -262
  99. package/src/partials/form-elements-container.html +0 -616
  100. package/src/partials/form-field-container.html +0 -166
  101. package/src/partials/gallery-container.html +0 -62
  102. package/src/partials/get-started-container.html +0 -423
  103. package/src/partials/grid-container.html +0 -191
  104. package/src/partials/header-container.html +0 -69
  105. package/src/partials/header-utilities-container.html +0 -331
  106. package/src/partials/highlights-container.html +0 -71
  107. package/src/partials/history-container.html +0 -67
  108. package/src/partials/home-container.html +0 -31
  109. package/src/partials/html-lists-container.html +0 -63
  110. package/src/partials/info-container.html +0 -104
  111. package/src/partials/input-group-container.html +0 -299
  112. package/src/partials/item-lists-container.html +0 -368
  113. package/src/partials/kanban-container.html +0 -459
  114. package/src/partials/kbd-container.html +0 -63
  115. package/src/partials/leader-row-container.html +0 -139
  116. package/src/partials/login-container.html +0 -65
  117. package/src/partials/lunch-menu-container.html +0 -341
  118. package/src/partials/media-container.html +0 -27
  119. package/src/partials/meta-info-container.html +0 -21
  120. package/src/partials/modals-container.html +0 -199
  121. package/src/partials/mosaic-container.html +0 -173
  122. package/src/partials/page-header-container.html +0 -78
  123. package/src/partials/pagination-container.html +0 -64
  124. package/src/partials/palette-container.html +0 -480
  125. package/src/partials/panels-container.html +0 -126
  126. package/src/partials/parallax-container.html +0 -147
  127. package/src/partials/portrait-gallery-container.html +0 -175
  128. package/src/partials/preview-container.html +0 -136
  129. package/src/partials/pricing-container.html +0 -523
  130. package/src/partials/progress-container.html +0 -230
  131. package/src/partials/prose-container.html +0 -43
  132. package/src/partials/ratings-container.html +0 -104
  133. package/src/partials/section-head-container.html +0 -77
  134. package/src/partials/segmented-container.html +0 -66
  135. package/src/partials/skeleton-container.html +0 -87
  136. package/src/partials/spinners-container.html +0 -96
  137. package/src/partials/stepper-container.html +0 -111
  138. package/src/partials/stories-container.html +0 -182
  139. package/src/partials/tables-container.html +0 -309
  140. package/src/partials/tabs-container.html +0 -290
  141. package/src/partials/tags-container.html +0 -242
  142. package/src/partials/techstack-bucket-container.html +0 -187
  143. package/src/partials/testimonials-container.html +0 -88
  144. package/src/partials/tiles-container.html +0 -247
  145. package/src/partials/timelines-container.html +0 -196
  146. package/src/partials/typography-container.html +0 -74
  147. package/src/partials/utilities-container.html +0 -553
package/package.json CHANGED
@@ -1,12 +1,18 @@
1
1
  {
2
2
  "name": "maverick-wave",
3
- "version": "5.30.0",
3
+ "version": "5.32.0",
4
4
  "config": {
5
- "version_short": "5.30"
5
+ "version_short": "5.32"
6
6
  },
7
7
  "description": "A lightweight, modern CSS framework for building responsive websites with elegance and speed.",
8
8
  "main": "src/js/main.js",
9
9
  "style": "src/scss/main.scss",
10
+ "files": [
11
+ "maverick-wave.min.css",
12
+ "maverick-wave.min.js",
13
+ "src/scss",
14
+ "src/js"
15
+ ],
10
16
  "scripts": {
11
17
  "clean": "gulp clean",
12
18
  "format": "prettier --check \"**/*.{scss,js,json,html,md}\"",
@@ -60,6 +60,8 @@ $hover-shift: 15% !default;
60
60
  // light one - and 0.58 is as low as that end goes without moving three colors.
61
61
  $ink-lightness-dark: 0.52 !default;
62
62
  $ink-lightness-light: 0.58 !default;
63
+ // On the hero photo 0.52 measured 1.2-2.7:1, 0.72 clears 3:1 and keeps the hue
64
+ $hero-ink-lightness: 0.72 !default;
63
65
  // How much primary the muted gray picks up, so it belongs to the palette. 0% is true gray.
64
66
  $muted-tint: 23% !default;
65
67
 
@@ -174,13 +174,13 @@
174
174
  display var(--mw-duration-base) allow-discrete;
175
175
 
176
176
  &[open] {
177
- // Not the flex column of the div version: iOS WebKit squeezes a scrolling
178
- // flex item inside a top-layer dialog to a sliver, so the header shows and
179
- // the body is gone. Desktop browsers and Playwright's WebKit do not show it.
180
- // The 1fr row takes what max-height leaves, so the body scrolls in it.
181
- display: grid;
182
- grid-template-rows: auto minmax(0, 1fr) auto;
183
- grid-template-columns: minmax(0, 1fr);
177
+ // A block, not the flex column of the div version and not a grid: iOS
178
+ // WebKit takes the intrinsic height of a scrolling flex or grid item in a
179
+ // top-layer dialog as zero. A dialog shorter than its cap then shows its
180
+ // header and footer and nothing between - a grid only hides it until the
181
+ // content outgrows the cap. Desktop browsers and Playwright's WebKit do not
182
+ // show it, so only a real iPhone can confirm a change here.
183
+ display: block;
184
184
  opacity: 1;
185
185
  transform: scale(1) translateY(0);
186
186
 
@@ -192,12 +192,19 @@
192
192
  }
193
193
  }
194
194
 
195
- // Without it an absolute child - screen reader text, a tooltip - anchors to
196
- // the dialog, escapes the body's scroll and makes the whole dialog scroll
195
+ // With no row to scroll in, the body gets a cap of its own: the dialog's,
196
+ // less the room its header and footer take (61px each on a phone sheet)
197
197
  .mw-modal-body {
198
+ max-height: calc(var(--mw-modal-max-height) - 8rem);
199
+ // Without it an absolute child - screen reader text, a tooltip - anchors to
200
+ // the dialog, escapes the body's scroll and makes the whole dialog scroll
198
201
  position: relative;
199
202
  }
200
203
 
204
+ &:not(:has(> .mw-modal-footer)) .mw-modal-body {
205
+ max-height: calc(var(--mw-modal-max-height) - 4rem);
206
+ }
207
+
201
208
  &::backdrop {
202
209
  background: var(--mw-overlay-background);
203
210
  backdrop-filter: blur(3px);
@@ -244,6 +251,13 @@
244
251
  }
245
252
  }
246
253
 
254
+ // Neither shape locks the page scroll behind it - the <dialog> only makes the
255
+ // page inert, which still lets a finger or a wheel move it
256
+ :root:has(dialog.mw-modal[open], .mw-modal-overlay.mw-modal-open) {
257
+ overflow: hidden;
258
+ scrollbar-gutter: stable; // Or the page shifts by the hidden scrollbar
259
+ }
260
+
247
261
  // Modal sections
248
262
  .mw-modal-header {
249
263
  padding: spacing('3') spacing('5');
@@ -24,6 +24,8 @@
24
24
  // surface - inside it the quote keeps only the edge and the quotation marks
25
25
  // as its sign.
26
26
  blockquote {
27
+ // Grows with the card, or a short quote's tint stops halfway down it
28
+ flex-grow: 1;
27
29
  background: color-mix(in srgb, var(--mw-secondary-color) 6%, transparent);
28
30
  border-left-color: color-mix(
29
31
  in srgb,
@@ -31,6 +31,15 @@
31
31
  width: 85%;
32
32
  position: relative;
33
33
  margin: spacing('0') auto spacing('4');
34
+
35
+ // The hero is dark in both themes, the light theme's inks sink into it
36
+ @each $name, $value in $semantic-colors {
37
+ --mw-#{$name}-text-color: #{ink-on-dark(
38
+ '#{$name}-color',
39
+ $hero-ink-lightness
40
+ )};
41
+ }
42
+
34
43
  @include media-up('sm') {
35
44
  width: min(75%, 700px);
36
45
  }
@@ -45,9 +54,46 @@
45
54
  justify-items: start;
46
55
  text-align: left;
47
56
 
57
+ // 85% of a phone leaves a ragged strip right of left-aligned text
48
58
  .mw-home-text {
59
+ width: min(100%, 42rem);
49
60
  margin-inline: 0;
50
61
  }
62
+
63
+ .mw-home-actions {
64
+ margin-inline: 0;
65
+
66
+ @include media-up('sm') {
67
+ justify-content: flex-start;
68
+ }
69
+ }
70
+ }
71
+
72
+ // Two buttons that wrap onto two lines at their own widths read as a
73
+ // staircase, so a phone stacks them at one width instead
74
+ .mw-home-actions {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: spacing('4');
78
+ width: min(100%, 20rem);
79
+ margin-inline: auto;
80
+
81
+ @include media-up('sm') {
82
+ flex-direction: row;
83
+ flex-wrap: wrap;
84
+ justify-content: center;
85
+ gap: spacing('5');
86
+ width: auto;
87
+ }
88
+ }
89
+
90
+ // The rem floor matters: a pure vh band gives the least on a flat screen
91
+ .mw-home-bottom {
92
+ padding-block: spacing('6') spacing('4');
93
+
94
+ @include media-up('md') {
95
+ padding-block: spacing('9') clamp(5.5rem, 12vh, 9rem);
96
+ }
51
97
  }
52
98
 
53
99
  @keyframes mw-home-fade {
@@ -66,6 +66,11 @@
66
66
  z-index: z-index('card');
67
67
  }
68
68
 
69
+ // .mw-home sizes itself in % of this flex item, which must not shrink
70
+ > .mw-hero {
71
+ width: 100%;
72
+ }
73
+
69
74
  // Add `mw-parallax` here and a `.mw-parallax-media` child and the picture
70
75
  // becomes its own layer, free to drift or to stay pinned. It reads the
71
76
  // same token, so the image is still configured in one place - and a
@@ -159,6 +164,21 @@
159
164
  );
160
165
  }
161
166
  }
167
+
168
+ // Bottom text shares the lower edge with the cue below lg, phones too
169
+ &:has(.mw-home-bottom) {
170
+ align-items: flex-end;
171
+
172
+ @include media-down('lg') {
173
+ &:has(> .mw-scroll-hint) {
174
+ --mw-scroll-hint-reserve: #{spacing('10')};
175
+
176
+ padding-bottom: calc(
177
+ var(--mw-scroll-hint-offset) + var(--mw-scroll-hint-reserve)
178
+ );
179
+ }
180
+ }
181
+ }
162
182
  }
163
183
  }
164
184
 
@@ -158,8 +158,8 @@
158
158
  :is(.mw-parallax-sticky, .mw-parallax-slow) + *:not(.mw-parallax-sticky)
159
159
  ) {
160
160
  box-shadow:
161
- 0 -6px 12px rgb(0 0 0 / 45%),
162
- 0 -20px 44px rgb(0 0 0 / 26%);
161
+ 0 -8px 18px rgb(0 0 0 / 55%),
162
+ 0 -28px 60px rgb(0 0 0 / 38%);
163
163
  }
164
164
 
165
165
  // Ink on a photograph, the same pair the hero uses: the picture goes down, the
@@ -1,6 +1,7 @@
1
- // The same framework without the 48 components: tokens, reset, typography,
2
- // grid, container, section, header, footer and every utility. Add the
3
- // components the page actually uses next to it, each one its own file:
1
+ // The same framework without the components, bar the two at the end: tokens,
2
+ // reset, typography, grid, container, section, header, footer and every
3
+ // utility. Add the components the page actually uses next to it, each one its
4
+ // own file:
4
5
  //
5
6
  // @use 'maverick-wave/src/scss/main-lean' with ($primary-color: #1b1b1d);
6
7
  // @use 'maverick-wave/src/scss/components/buttons';
@@ -14,3 +15,7 @@
14
15
  @use 'base';
15
16
  @use 'layout';
16
17
  @use 'utilities';
18
+
19
+ // The layout uses these two: data-tooltip in the footer, the badge in the hero
20
+ @use 'components/tooltip';
21
+ @use 'components/hero-badge';
@@ -1,43 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(grep -rn '$_mw\\\\|$_size\\\\|$_border' src/scss '--include=*.scss')",
5
- "Bash(npm run:*)",
6
- "Bash(node:*)",
7
- "Bash(git ls-tree:*)",
8
- "Bash(git ls-remote:*)",
9
- "Bash(npm outdated:*)",
10
- "Bash(npm update:*)",
11
- "Bash(npm audit:*)",
12
- "Bash(npx prettier *)"
13
- ]
14
- },
15
- "hooks": {
16
- "PostToolUse": [
17
- {
18
- "matcher": "Edit|Write",
19
- "hooks": [
20
- {
21
- "type": "command",
22
- "command": "[ ! -f '/Users/m1well/.claude/skills/impeccable/scripts/impeccable' ] || '/Users/m1well/.claude/skills/impeccable/scripts/impeccable' hook",
23
- "timeout": 5,
24
- "statusMessage": "Checking UI changes"
25
- }
26
- ]
27
- }
28
- ],
29
- "Stop": [
30
- {
31
- "hooks": [
32
- {
33
- "type": "command",
34
- "command": "[ ! -f '/Users/m1well/.claude/skills/impeccable/scripts/impeccable' ] || '/Users/m1well/.claude/skills/impeccable/scripts/impeccable' hook",
35
- "timeout": 30,
36
- "statusMessage": "Design deep pass"
37
- }
38
- ]
39
- }
40
- ]
41
- },
42
- "description": "Impeccable design detector: immediate-tier checks after Edit/Write on UI files, full-rule deep pass on Stop."
43
- }