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,43 +1,45 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Keyboard key
4
- kbd,
5
- .mw-kbd {
6
- display: inline-flex;
7
- align-items: center;
8
- justify-content: center;
9
- min-width: 1.6em;
10
- padding: 0.15em 0.45em;
11
- border: 1px solid var(--mw-border);
12
- border-bottom-width: 3px;
13
- border-radius: radius('xs');
14
- background: var(--mw-surface-muted);
15
- color: var(--mw-text-color);
16
- font-family: var(--mw-font-family-mono);
17
- font-size: 0.85em;
18
- line-height: 1.4;
19
- font-weight: font-weight('medium');
20
- white-space: nowrap;
21
- vertical-align: middle;
22
- position: relative;
23
- top: -1px;
24
- }
3
+ @layer mw.components {
4
+ // Keyboard key
5
+ kbd,
6
+ .mw-kbd {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ min-width: 1.6em;
11
+ padding: 0.15em 0.45em;
12
+ border: 1px solid var(--mw-border);
13
+ border-bottom-width: 3px;
14
+ border-radius: radius('xs');
15
+ background: var(--mw-surface-muted);
16
+ color: var(--mw-text-color);
17
+ font-family: var(--mw-font-family-mono);
18
+ font-size: 0.85em;
19
+ line-height: 1.4;
20
+ font-weight: font-weight('medium');
21
+ white-space: nowrap;
22
+ vertical-align: middle;
23
+ position: relative;
24
+ top: -1px;
25
+ }
25
26
 
26
- // A combination - Ctrl + Shift + P - as one unit, so the pluses between the
27
- // keys are spaced and do not wrap away from what they join
28
- .mw-kbd-group {
29
- display: inline-flex;
30
- align-items: center;
31
- gap: spacing('1');
32
- white-space: nowrap;
33
- color: var(--mw-text-muted-color);
34
- font-size: font-size('sm');
35
- }
27
+ // A combination - Ctrl + Shift + P - as one unit, so the pluses between the
28
+ // keys are spaced and do not wrap away from what they join
29
+ .mw-kbd-group {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ gap: spacing('1');
33
+ white-space: nowrap;
34
+ color: var(--mw-text-muted-color);
35
+ font-size: font-size('sm');
36
+ }
36
37
 
37
- // A key shown mid-press, for a hint that demonstrates rather than lists
38
- .mw-kbd-pressed {
39
- border-bottom-width: 1px;
40
- top: 1px;
41
- background: var(--mw-primary-background);
42
- border-color: var(--mw-primary-color);
38
+ // A key shown mid-press, for a hint that demonstrates rather than lists
39
+ .mw-kbd-pressed {
40
+ border-bottom-width: 1px;
41
+ top: 1px;
42
+ background: var(--mw-primary-background);
43
+ border-color: var(--mw-primary-color);
44
+ }
43
45
  }
@@ -0,0 +1,108 @@
1
+ @use '../abstracts' as *;
2
+
3
+ @layer mw.components {
4
+ // A .mw-dropdown underneath, so the keyboard contract is inherited rather than
5
+ // rebuilt. This adds the trigger, deliberately not a button shape - the bar
6
+ // reads as logo, links and two quiet controls, not a row of buttons.
7
+ //
8
+ // The two-letter code says which language is on, not the flag: a flag is a
9
+ // country, and neither English nor the German a Swiss visitor reads has one.
10
+
11
+ .mw-lang-switch {
12
+ > summary {
13
+ display: inline-flex;
14
+ align-items: center;
15
+ gap: spacing('3');
16
+ height: 36px;
17
+ padding: spacing('0') spacing('3');
18
+ border: 1px solid transparent;
19
+ border-radius: radius('2xl');
20
+ background: transparent;
21
+ color: var(--mw-text-color);
22
+ transition: var(--mw-transition);
23
+ @include tappable;
24
+ @include focus-ring;
25
+ }
26
+
27
+ // Open looks the same as hovered - the menu below is what says it is open
28
+ > summary:hover,
29
+ &[open] > summary {
30
+ background: var(--mw-surface-muted);
31
+ border-color: var(--mw-border);
32
+ }
33
+ }
34
+
35
+ // The code carries the state, so it is the one part that gets full ink
36
+ .mw-lang-switch-code {
37
+ font-size: font-size('xs');
38
+ font-weight: font-weight('bold');
39
+ letter-spacing: 0.08em;
40
+ text-transform: uppercase;
41
+ line-height: 1;
42
+ }
43
+
44
+ .mw-lang-switch .mw-dropdown-caret {
45
+ font-size: font-size('3xs');
46
+ opacity: 0.6;
47
+ }
48
+
49
+ // A language list is short and its labels are one word - the 200px default
50
+ // menu leaves half of it empty. The one place it must not be narrowed is under
51
+ // a thumb, where the dropdown widens every menu on purpose.
52
+ .mw-lang-switch .mw-dropdown-menu {
53
+ min-width: 170px;
54
+
55
+ @media (pointer: coarse), (max-width: #{breakpoint('sm')}) {
56
+ min-width: max(100%, 240px);
57
+ }
58
+ }
59
+
60
+ .mw-lang-switch-name {
61
+ flex: 1;
62
+ min-width: 0;
63
+ @include truncate;
64
+ }
65
+
66
+ // The tick is the only mark of the current choice inside the menu - it has to
67
+ // stay out of the muted icon column the dropdown gives every other icon.
68
+ // Kept in the layout while hidden, so the labels do not shift by a tick's width
69
+ // when the choice moves to another row.
70
+ .mw-lang-switch .mw-dropdown-item .mw-lang-switch-check {
71
+ margin-left: auto;
72
+ color: var(--mw-primary-text-color);
73
+ visibility: hidden;
74
+ }
75
+
76
+ .mw-lang-switch .mw-dropdown-item.mw-active .mw-lang-switch-check,
77
+ .mw-lang-switch .mw-dropdown-item.active .mw-lang-switch-check {
78
+ visibility: visible;
79
+ }
80
+
81
+ // In the bar the control sits on the header's own dark surface, which stays
82
+ // dark in the light theme too - so it cannot use the page's text and surface
83
+ // tokens the way it does anywhere else. The modifier is for the same surface
84
+ // reached another way: a project that builds its own bar instead of using
85
+ // `.mw-header`, or a dark footer.
86
+ .mw-header .mw-lang-switch,
87
+ .mw-lang-switch-inverted {
88
+ > summary {
89
+ color: var(--mw-header-text-color);
90
+ }
91
+
92
+ > summary:hover,
93
+ &[open] > summary {
94
+ background: var(--mw-header-border);
95
+ border-color: var(--mw-header-border);
96
+ }
97
+ }
98
+
99
+ // 36px is a comfortable target for a mouse and a miss for a finger. The caret
100
+ // stays - without it the control reads as a label rather than as something to
101
+ // press.
102
+ @include media-down('sm') {
103
+ .mw-lang-switch > summary {
104
+ height: 40px;
105
+ gap: spacing('2');
106
+ }
107
+ }
108
+ }
@@ -1,35 +1,28 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // A link inside a sentence. Same look as `mw-btn-link`, but none of the button:
4
- // no `inline-flex`, no control height. That difference is the whole point -
5
- // `mw-btn` lifts its line to 2.25rem, which is barely visible in a heading and
6
- // glaring in a footer disclaimer, where the line around it is half that.
7
- //
8
- // So: `mw-link` in running text, `mw-btn mw-btn-link` where the link really is
9
- // one of several buttons and has to line up with them.
10
- //
11
- // `font` and the focus ring are spelled out because this also has to work on a
12
- // `<button>` - a "show more" in the middle of a paragraph is a button, and the
13
- // reset hands it the family but not the size. The shorthand carries the line
14
- // height along, which is what makes the button box come out exactly as tall as
15
- // the line it sits in. It stays one unbreakable box either way, since no
16
- // browser lets a `<button>` wrap - use an `<a>` where the label is long enough
17
- // to need it.
18
- .mw-link,
19
- .mw-link-muted {
20
- font: inherit;
3
+ @layer mw.components {
4
+ // mw-link in running text, mw-btn mw-btn-link where it is one of several
5
+ // buttons: mw-btn lifts its line to 2.25rem, which is glaring in a disclaimer.
6
+ //
7
+ // `font` and the focus ring are spelled out because this also has to work on a
8
+ // <button>, which the reset hands the family but not the size. A button never
9
+ // wraps, so use an <a> where the label is long enough to need it.
10
+ .mw-link,
11
+ .mw-link-muted {
12
+ font: inherit;
21
13
 
22
- @include link-look;
23
- @include focus-ring;
24
- }
25
-
26
- .mw-link {
27
- color: var(--mw-primary-text-color);
28
- }
14
+ @include link-look;
15
+ @include focus-ring;
16
+ }
29
17
 
30
- .mw-link-muted {
31
- color: var(--mw-text-muted-color);
32
- &:hover {
18
+ .mw-link {
33
19
  color: var(--mw-primary-text-color);
34
20
  }
21
+
22
+ .mw-link-muted {
23
+ color: var(--mw-text-muted-color);
24
+ &:hover {
25
+ color: var(--mw-primary-text-color);
26
+ }
27
+ }
35
28
  }