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,92 +1,86 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Fixed, stacked container for `mw-alert`
4
- .mw-toast-stack {
5
- position: fixed;
6
- z-index: z-index('alert');
7
- display: flex;
8
- flex-direction: column;
9
- gap: spacing('3');
10
- width: min(380px, calc(100vw - #{2 * spacing('5')}));
11
- max-height: calc(100vh - #{2 * spacing('5')});
12
- overflow-y: auto;
13
- pointer-events: none;
3
+ @layer mw.components {
4
+ // Fixed, stacked container for `mw-alert`
5
+ .mw-toast-stack {
6
+ position: fixed;
7
+ z-index: z-index('alert');
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: spacing('3');
11
+ width: min(380px, calc(100vw - #{2 * spacing('5')}));
12
+ max-height: calc(100vh - #{2 * spacing('5')});
13
+ overflow-y: auto;
14
+ pointer-events: none;
14
15
 
15
- > * {
16
- pointer-events: auto;
17
- margin-bottom: spacing('0');
18
- animation: mw-toast-in var(--mw-duration-base) var(--mw-ease-spring);
19
- }
20
-
21
- // Default position
22
- top: spacing('5');
23
- right: spacing('5');
24
-
25
- // Positions
26
- &-top-right {
27
- top: spacing('5');
28
- right: spacing('5');
29
- bottom: auto;
30
- left: auto;
31
- }
16
+ > * {
17
+ pointer-events: auto;
18
+ margin-bottom: spacing('0');
19
+ animation: mw-toast-in var(--mw-duration-base) var(--mw-ease-spring);
20
+ }
32
21
 
33
- &-top-center {
34
22
  top: spacing('5');
35
- left: 50%;
36
- right: auto;
37
- bottom: auto;
38
- transform: translateX(-50%);
39
- }
40
-
41
- &-bottom-right {
42
- bottom: spacing('5');
43
23
  right: spacing('5');
44
- top: auto;
45
- left: auto;
46
- flex-direction: column-reverse;
47
24
 
48
- > * {
49
- animation-name: mw-toast-in-up;
25
+ &-top-right {
26
+ top: spacing('5');
27
+ right: spacing('5');
28
+ bottom: auto;
29
+ left: auto;
50
30
  }
51
- }
52
31
 
53
- // On phones the stack spans the full width at the top
54
- @include media-down('sm') {
55
- left: spacing('5');
56
- right: spacing('5');
57
- width: auto;
58
- transform: none;
32
+ &-top-center {
33
+ top: spacing('5');
34
+ left: 50%;
35
+ right: auto;
36
+ bottom: auto;
37
+ transform: translateX(-50%);
38
+ }
59
39
 
60
40
  &-bottom-right {
41
+ bottom: spacing('5');
42
+ right: spacing('5');
61
43
  top: auto;
44
+ left: auto;
45
+ flex-direction: column-reverse;
46
+
47
+ > * {
48
+ animation-name: mw-toast-in-up;
49
+ }
62
50
  }
63
- }
64
- }
65
51
 
66
- @keyframes mw-toast-in {
67
- from {
68
- opacity: 0;
69
- transform: translateY(-12px);
70
- }
71
- to {
72
- opacity: 1;
73
- transform: translateY(0);
74
- }
75
- }
52
+ // On phones the stack spans the full width at the top
53
+ @include media-down('sm') {
54
+ left: spacing('5');
55
+ right: spacing('5');
56
+ width: auto;
57
+ transform: none;
76
58
 
77
- @keyframes mw-toast-in-up {
78
- from {
79
- opacity: 0;
80
- transform: translateY(12px);
59
+ &-bottom-right {
60
+ top: auto;
61
+ }
62
+ }
81
63
  }
82
- to {
83
- opacity: 1;
84
- transform: translateY(0);
64
+
65
+ @keyframes mw-toast-in {
66
+ from {
67
+ opacity: 0;
68
+ transform: translateY(-12px);
69
+ }
70
+ to {
71
+ opacity: 1;
72
+ transform: translateY(0);
73
+ }
85
74
  }
86
- }
87
75
 
88
- @media (prefers-reduced-motion: reduce) {
89
- .mw-toast-stack > * {
90
- animation: none;
76
+ @keyframes mw-toast-in-up {
77
+ from {
78
+ opacity: 0;
79
+ transform: translateY(12px);
80
+ }
81
+ to {
82
+ opacity: 1;
83
+ transform: translateY(0);
84
+ }
91
85
  }
92
86
  }
@@ -1,160 +1,145 @@
1
- // _checkbox.scss
2
1
  @use '../abstracts' as *;
3
2
 
4
- $_size-sm: spacing('5');
5
- $_size-default: spacing('6');
6
- $_size-lg: spacing('7');
7
-
8
- // Checkmark dimensions (not from spacing map - these are shape-drawing values)
9
- $_check-sm-w: 9px;
10
- $_check-sm-h: 6px;
11
- $_check-default-w: 14px;
12
- $_check-default-h: 8px;
13
- $_check-lg-w: 19px;
14
- $_check-lg-h: 10px;
15
-
16
- // 1) color map for checked state border & checkmark
17
- $_mw-checkbox-colors: (
18
- primary: var(--mw-primary-color),
19
- secondary: var(--mw-secondary-color),
20
- info: var(--mw-info-color),
21
- success: var(--mw-success-color),
22
- warning: var(--mw-warning-color),
23
- danger: var(--mw-danger-color),
24
- );
25
-
26
- .mw-checkbox-group {
27
- display: flex;
28
- flex-direction: column;
29
- gap: spacing('3');
30
-
31
- &-inline {
32
- flex-direction: row;
33
- flex-wrap: wrap;
34
- align-items: center;
35
- gap: spacing('2') spacing('6');
36
- @include media-down('sm') {
3
+ @layer mw.forms {
4
+ $_size-sm: spacing('5');
5
+ $_size-default: spacing('6');
6
+ $_size-lg: spacing('7');
7
+
8
+ // Checkmark dimensions (not from spacing map - these are shape-drawing values)
9
+ $_check-sm-w: 9px;
10
+ $_check-sm-h: 6px;
11
+ $_check-default-w: 14px;
12
+ $_check-default-h: 8px;
13
+ $_check-lg-w: 19px;
14
+ $_check-lg-h: 10px;
15
+
16
+ .mw-checkbox-group {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: spacing('3');
20
+
21
+ &-inline {
22
+ flex-direction: row;
23
+ flex-wrap: wrap;
24
+ align-items: center;
37
25
  gap: spacing('2') spacing('4');
26
+ @include media-up('sm') {
27
+ gap: spacing('2') spacing('6');
28
+ }
38
29
  }
39
30
  }
40
- }
41
31
 
42
- .mw-checkbox {
43
- display: inline-flex;
44
- align-items: center;
45
- gap: spacing('2');
46
- min-height: 1.5rem;
47
- cursor: pointer;
48
- user-select: none;
49
- position: relative;
50
-
51
- // hide native checkbox
52
- input[type='checkbox'] {
53
- position: absolute;
54
- opacity: 0;
55
- width: 0;
56
- height: 0;
57
- margin: spacing('0');
58
- }
59
-
60
- .mw-checkbox-box {
32
+ .mw-checkbox {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: spacing('2');
36
+ min-height: 1.5rem;
37
+ cursor: pointer;
38
+ user-select: none;
61
39
  position: relative;
62
- flex-shrink: 0;
63
- width: $_size-default;
64
- height: $_size-default;
65
- border: 2px solid var(--mw-border);
66
- border-radius: radius('sm');
67
- background: var(--mw-form-elements-background);
68
- transition: var(--mw-transition);
69
40
 
70
- &::after {
71
- content: '';
41
+ input[type='checkbox'] {
72
42
  position: absolute;
73
- top: 50%;
74
- left: 50%;
75
- width: $_check-default-w;
76
- height: $_check-default-h;
77
- border-left: 2px solid var(--mw-primary-color);
78
- border-bottom: 2px solid var(--mw-primary-color);
79
- transform: translate(-50%, -60%) rotate(-45deg) scale(0);
80
- transform-origin: center;
81
- transition: var(--mw-transition);
43
+ opacity: 0;
44
+ width: 0;
45
+ height: 0;
46
+ margin: spacing('0');
82
47
  }
83
- }
84
-
85
- // focus-visible state
86
- input[type='checkbox']:focus-visible + .mw-checkbox-box {
87
- @include focus-halo;
88
- border-color: var(--mw-primary-color);
89
- }
90
-
91
- // checked state
92
- input[type='checkbox']:checked + .mw-checkbox-box {
93
- border-color: var(--mw-primary-color);
94
- }
95
- input[type='checkbox']:checked + .mw-checkbox-box::after {
96
- transform: translate(-50%, -60%) rotate(-45deg) scale(1);
97
- }
98
48
 
99
- .mw-checkbox-label {
100
- font-size: font-size('base');
101
- color: var(--mw-text-color);
102
- }
103
-
104
- // size variants
105
- &-sm {
106
49
  .mw-checkbox-box {
107
- width: $_size-sm;
108
- height: $_size-sm;
109
- }
110
- .mw-checkbox-box::after {
111
- width: $_check-sm-w;
112
- height: $_check-sm-h;
113
- border-width: 1.5px;
50
+ position: relative;
51
+ flex-shrink: 0;
52
+ width: $_size-default;
53
+ height: $_size-default;
54
+ border: 2px solid var(--mw-border);
55
+ border-radius: radius('sm');
56
+ background: var(--mw-form-elements-background);
57
+ transition: var(--mw-transition);
58
+
59
+ &::after {
60
+ content: '';
61
+ position: absolute;
62
+ top: 50%;
63
+ left: 50%;
64
+ width: $_check-default-w;
65
+ height: $_check-default-h;
66
+ border-left: 2px solid var(--mw-primary-color);
67
+ border-bottom: 2px solid var(--mw-primary-color);
68
+ transform: translate(-50%, -60%) rotate(-45deg) scale(0);
69
+ transform-origin: center;
70
+ transition: var(--mw-transition);
71
+ }
114
72
  }
115
- .mw-checkbox-label {
116
- font-size: font-size('xs');
73
+
74
+ input[type='checkbox']:focus-visible + .mw-checkbox-box {
75
+ @include focus-halo;
76
+ border-color: var(--mw-primary-color);
117
77
  }
118
- }
119
- &-lg {
120
- .mw-checkbox-box {
121
- width: $_size-lg;
122
- height: $_size-lg;
78
+
79
+ input[type='checkbox']:checked + .mw-checkbox-box {
80
+ border-color: var(--mw-primary-color);
123
81
  }
124
- .mw-checkbox-box::after {
125
- width: $_check-lg-w;
126
- height: $_check-lg-h;
127
- border-width: 2px;
82
+ input[type='checkbox']:checked + .mw-checkbox-box::after {
83
+ transform: translate(-50%, -60%) rotate(-45deg) scale(1);
128
84
  }
85
+
129
86
  .mw-checkbox-label {
130
- font-size: font-size('md');
87
+ font-size: font-size('base');
88
+ color: var(--mw-text-color);
131
89
  }
132
- }
133
90
 
134
- // color variants
135
- @each $name, $col in $_mw-checkbox-colors {
136
- &-#{$name} {
137
- input[type='checkbox']:checked + .mw-checkbox-box {
138
- border-color: #{$col};
91
+ &-sm {
92
+ .mw-checkbox-box {
93
+ width: $_size-sm;
94
+ height: $_size-sm;
95
+ }
96
+ .mw-checkbox-box::after {
97
+ width: $_check-sm-w;
98
+ height: $_check-sm-h;
99
+ border-width: 1.5px;
139
100
  }
140
- input[type='checkbox']:checked + .mw-checkbox-box::after {
141
- border-color: #{$col};
101
+ .mw-checkbox-label {
102
+ font-size: font-size('xs');
103
+ }
104
+ }
105
+ &-lg {
106
+ .mw-checkbox-box {
107
+ width: $_size-lg;
108
+ height: $_size-lg;
109
+ }
110
+ .mw-checkbox-box::after {
111
+ width: $_check-lg-w;
112
+ height: $_check-lg-h;
113
+ border-width: 2px;
114
+ }
115
+ .mw-checkbox-label {
116
+ font-size: font-size('md');
142
117
  }
143
118
  }
144
- }
145
119
 
146
- // disabled state
147
- &-disabled {
148
- cursor: not-allowed;
120
+ @each $name, $col in $semantic-colors {
121
+ &-#{$name} {
122
+ input[type='checkbox']:checked + .mw-checkbox-box {
123
+ border-color: #{$col};
124
+ }
125
+ input[type='checkbox']:checked + .mw-checkbox-box::after {
126
+ border-color: #{$col};
127
+ }
128
+ }
129
+ }
149
130
 
150
- input[type='checkbox'] {
131
+ &-disabled {
151
132
  cursor: not-allowed;
152
- }
153
- .mw-checkbox-box {
154
- background: var(--mw-gray-background);
155
- }
156
- .mw-checkbox-label {
157
- color: var(--mw-text-muted-color);
133
+
134
+ input[type='checkbox'] {
135
+ cursor: not-allowed;
136
+ }
137
+ .mw-checkbox-box {
138
+ background: var(--mw-gray-background);
139
+ }
140
+ .mw-checkbox-label {
141
+ color: var(--mw-text-muted-color);
142
+ }
158
143
  }
159
144
  }
160
145
  }