maverick-wave 3.3.0 → 3.3.2

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 (77) hide show
  1. package/.claude/skills/maverick-wave/SKILL.md +208 -0
  2. package/.claude/skills/maverick-wave/examples/angular-form.md +275 -0
  3. package/.claude/skills/maverick-wave/examples/angular-list-page.md +304 -0
  4. package/.claude/skills/maverick-wave/examples/angular-services.md +348 -0
  5. package/.claude/skills/maverick-wave/examples/static-landing-page.md +362 -0
  6. package/.claude/skills/maverick-wave/references/components.md +812 -0
  7. package/.claude/skills/maverick-wave/references/forms.md +289 -0
  8. package/.claude/skills/maverick-wave/references/javascript.md +70 -0
  9. package/.claude/skills/maverick-wave/references/layout.md +300 -0
  10. package/.claude/skills/maverick-wave/references/theming.md +192 -0
  11. package/.github/workflows/ci.yml +41 -0
  12. package/CHANGELOG.md +13 -0
  13. package/README.md +115 -21
  14. package/index.html +15 -9
  15. package/maverick-wave.min.css +1 -1
  16. package/maverick-wave.min.js +1 -1
  17. package/package.json +3 -1
  18. package/scripts/verify.js +137 -0
  19. package/src/js/main.js +39 -11
  20. package/src/partials/accordions-container.html +22 -27
  21. package/src/partials/alerts-container.html +26 -0
  22. package/src/partials/avatars-container.html +22 -0
  23. package/src/partials/buttons-container.html +11 -15
  24. package/src/partials/cards-container.html +8 -8
  25. package/src/partials/colors-container.html +33 -20
  26. package/src/partials/documentation-container.html +3 -0
  27. package/src/partials/form-field-container.html +16 -12
  28. package/src/partials/get-started-container.html +93 -35
  29. package/src/partials/header-utilities-container.html +64 -6
  30. package/src/partials/input-group-container.html +5 -3
  31. package/src/partials/page-header-container.html +78 -0
  32. package/src/partials/tables-container.html +130 -0
  33. package/src/partials/tabs-container.html +20 -16
  34. package/src/partials/tags-container.html +55 -1
  35. package/src/scss/abstracts/_index.scss +4 -1
  36. package/src/scss/abstracts/_variables.scss +128 -106
  37. package/src/scss/base/_base.scss +32 -136
  38. package/src/scss/base/_reset.scss +1 -1
  39. package/src/scss/base/_typography.scss +0 -92
  40. package/src/scss/components/_accordions.scss +3 -3
  41. package/src/scss/components/_avatars.scss +28 -1
  42. package/src/scss/components/_blog-post.scss +1 -1
  43. package/src/scss/components/_button-bar.scss +6 -6
  44. package/src/scss/components/_buttons.scss +33 -10
  45. package/src/scss/components/_cards.scss +7 -7
  46. package/src/scss/components/_coming-soon.scss +4 -4
  47. package/src/scss/components/_gallery.scss +2 -2
  48. package/src/scss/components/_index.scss +1 -0
  49. package/src/scss/components/_info.scss +20 -3
  50. package/src/scss/components/_lists.scss +11 -10
  51. package/src/scss/components/_modals.scss +14 -7
  52. package/src/scss/components/_pagination.scss +3 -3
  53. package/src/scss/components/_panels.scss +4 -4
  54. package/src/scss/components/_progress.scss +1 -1
  55. package/src/scss/components/_ratings.scss +1 -1
  56. package/src/scss/components/_spinners.scss +2 -2
  57. package/src/scss/components/_stepper.scss +3 -2
  58. package/src/scss/components/_tables.scss +42 -1
  59. package/src/scss/components/_tabs.scss +5 -5
  60. package/src/scss/components/_tags.scss +43 -27
  61. package/src/scss/components/_tiles.scss +3 -3
  62. package/src/scss/components/_timelines.scss +2 -2
  63. package/src/scss/components/_toasts.scss +92 -0
  64. package/src/scss/form-elements/_form.scss +11 -3
  65. package/src/scss/form-elements/_input.scss +24 -0
  66. package/src/scss/form-elements/_toggle.scss +1 -1
  67. package/src/scss/layout/_footer.scss +4 -4
  68. package/src/scss/layout/_header.scss +219 -59
  69. package/src/scss/layout/_index.scss +1 -0
  70. package/src/scss/layout/_main.scss +1 -1
  71. package/src/scss/layout/_page-header.scss +48 -0
  72. package/src/scss/layout/_section.scss +15 -14
  73. package/src/scss/main.scss +4 -0
  74. package/src/scss/utilities/_flex.scss +4 -0
  75. package/src/scss/utilities/_index.scss +1 -0
  76. package/src/scss/utilities/_text.scss +105 -0
  77. package/.claude/commands/mw.md +0 -595
@@ -17,7 +17,7 @@
17
17
 
18
18
  th {
19
19
  font-weight: font-weight('medium');
20
- color: var(--mw-primary-text-color);
20
+ color: var(--mw-accent-text-color);
21
21
  background: var(--mw-primary-color);
22
22
  user-select: none;
23
23
  }
@@ -127,3 +127,44 @@
127
127
  background: var(--mw-primary-background-hover);
128
128
  }
129
129
  }
130
+
131
+ // Quiet header for data-heavy views
132
+ .mw-table-subtle {
133
+ th {
134
+ background: color-mix(
135
+ in srgb,
136
+ var(--mw-gray-color) 20%,
137
+ var(--mw-card-background)
138
+ );
139
+ color: var(--mw-text-color);
140
+ border-bottom: 2px solid var(--mw-border-accent);
141
+ }
142
+ }
143
+
144
+ // Header stays visible while the body scrolls
145
+ .mw-table-sticky-head {
146
+ th {
147
+ position: sticky;
148
+ top: spacing('0');
149
+ z-index: z-index('lift');
150
+ box-shadow:
151
+ inset 0 1px 0 var(--mw-border),
152
+ inset 0 -1px 0 var(--mw-border);
153
+ }
154
+ }
155
+
156
+ .mw-table-responsive-scroll {
157
+ @extend .mw-table-responsive;
158
+ --mw-table-scroll-height: 400px;
159
+ max-height: var(--mw-table-scroll-height);
160
+ overflow-y: auto;
161
+
162
+ .mw-table {
163
+ margin-top: spacing('0');
164
+ }
165
+
166
+ // Rows get shorter on small screens
167
+ @include media-down('sm') {
168
+ --mw-table-scroll-height: 260px;
169
+ }
170
+ }
@@ -7,7 +7,7 @@
7
7
 
8
8
  &-nav {
9
9
  display: flex;
10
- border-bottom: 1px solid var(--mw-primary-color-hover);
10
+ border-bottom: 1px solid var(--mw-border-accent);
11
11
  margin-bottom: spacing('3');
12
12
  overflow-x: auto;
13
13
 
@@ -65,7 +65,7 @@
65
65
  .mw-tabs-nav {
66
66
  flex-direction: column;
67
67
  border-bottom: none;
68
- border-right: 1px solid var(--mw-primary-color-hover);
68
+ border-right: 1px solid var(--mw-border-accent);
69
69
  margin-bottom: spacing('0');
70
70
  margin-right: spacing('3');
71
71
  min-width: 160px;
@@ -74,7 +74,7 @@
74
74
  @include media-down('sm') {
75
75
  flex-direction: row;
76
76
  border-right: none;
77
- border-bottom: 1px solid var(--mw-primary-color-hover);
77
+ border-bottom: 1px solid var(--mw-border-accent);
78
78
  margin-right: spacing('0');
79
79
  margin-bottom: spacing('4');
80
80
  width: 100%;
@@ -126,12 +126,12 @@
126
126
  border-radius: radius('xl');
127
127
  padding: spacing('4') spacing('5');
128
128
  line-height: 0.9;
129
- border: 1px solid var(--mw-primary-color-hover);
129
+ border: 1px solid var(--mw-border-accent);
130
130
  background: var(--mw-card-background);
131
131
 
132
132
  &.active {
133
133
  background: var(--mw-primary-color);
134
- color: var(--mw-primary-text-color);
134
+ color: var(--mw-accent-text-color);
135
135
  }
136
136
  }
137
137
  }
@@ -1,13 +1,24 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
+ // Colour variants
4
+ $_mw-tag-colors: (
5
+ 'primary': '',
6
+ 'secondary': '',
7
+ 'success': 'info-',
8
+ 'warning': 'info-',
9
+ 'danger': 'info-',
10
+ 'info': 'info-',
11
+ );
12
+
13
+ // Container for tag *lists* - carries the colour for all its items
3
14
  .mw-tags {
4
15
  display: flex;
5
16
  flex-wrap: wrap;
6
17
  gap: spacing('2');
7
18
  }
8
19
 
9
- // Tag item
10
- .mw-tags-item {
20
+ // Visual base, shared by the list item and the standalone tag
21
+ %mw-tag-base {
11
22
  display: inline-flex;
12
23
  align-items: center;
13
24
  background: var(--mw-primary-background);
@@ -23,6 +34,11 @@
23
34
  &:hover {
24
35
  background: var(--mw-primary-background-hover);
25
36
  }
37
+ }
38
+
39
+ // Tag item - inside a `.mw-tags` container
40
+ .mw-tags-item {
41
+ @extend %mw-tag-base;
26
42
 
27
43
  // Removable tag styling
28
44
  &.mw-tags-removable {
@@ -30,6 +46,11 @@
30
46
  }
31
47
  }
32
48
 
49
+ // Standalone tag - carries its colour directly, no container needed
50
+ .mw-tag {
51
+ @extend %mw-tag-base;
52
+ }
53
+
33
54
  // Remove button - pure CSS
34
55
  .mw-tags-remove {
35
56
  flex-shrink: 0;
@@ -49,41 +70,36 @@
49
70
  font-size: 0.9rem;
50
71
  }
51
72
 
52
- // Color variants
53
- .mw-tags-primary .mw-tags-item {
54
- background-color: var(--mw-primary-background);
55
- border-color: var(--mw-primary-color);
56
- &:hover {
57
- background: var(--mw-primary-background-hover);
58
- }
59
- }
73
+ // Color variants - generated for the list form and the standalone form
74
+ @each $name, $infix in $_mw-tag-colors {
75
+ .mw-tags-#{$name} .mw-tags-item,
76
+ .mw-tag-#{$name} {
77
+ background-color: var(--mw-#{$name}-#{$infix}background);
78
+ border-color: var(--mw-#{$name}-color);
60
79
 
61
- .mw-tags-secondary .mw-tags-item {
62
- background-color: var(--mw-secondary-background);
63
- border-color: var(--mw-secondary-color);
64
- &:hover {
65
- background: var(--mw-secondary-background-hover);
80
+ &:hover {
81
+ background: var(--mw-#{$name}-#{$infix}background-hover);
82
+ }
66
83
  }
67
84
  }
68
85
 
69
- .mw-tags-success .mw-tags-item {
70
- background-color: var(--mw-success-info-background);
71
- border-color: var(--mw-success-color);
72
- &:hover {
73
- background: var(--mw-success-info-background-hover);
74
- }
75
- }
86
+ // Neutral variant for "draft" / "done" states.
87
+ .mw-tags-muted .mw-tags-item,
88
+ .mw-tag-muted {
89
+ background-color: var(--mw-gray-background);
90
+ border-color: var(--mw-border);
91
+ color: var(--mw-text-muted-color);
76
92
 
77
- .mw-tags-info .mw-tags-item {
78
- background-color: var(--mw-info-info-background);
79
- border-color: var(--mw-info-color);
80
93
  &:hover {
81
- background: var(--mw-info-info-background-hover);
94
+ background-color: var(--mw-gray-background);
95
+ border-color: var(--mw-text-muted-color);
96
+ color: var(--mw-text-color);
82
97
  }
83
98
  }
84
99
 
85
100
  // Size variants
86
- .mw-tags-lg .mw-tags-item {
101
+ .mw-tags-lg .mw-tags-item,
102
+ .mw-tag-lg {
87
103
  font-size: font-size('sm');
88
104
  padding: spacing('1') spacing('3');
89
105
 
@@ -67,9 +67,9 @@
67
67
  cursor: pointer;
68
68
 
69
69
  &:hover {
70
- transform: translateY(-3px);
71
- box-shadow: 0 9px 21px var(--mw-shadow);
72
- border-color: var(--mw-primary-color-hover);
70
+ transform: translateY(-2px);
71
+ box-shadow: 0 7px 15px var(--mw-shadow);
72
+ border-color: var(--mw-border-accent);
73
73
  }
74
74
 
75
75
  // Tile image
@@ -187,7 +187,7 @@ $_simple-date-width: 110px;
187
187
 
188
188
  .mw-timeline-big-date-main,
189
189
  .mw-timeline-big-date-sub {
190
- color: var(--mw-primary-text-color);
190
+ color: var(--mw-accent-text-color);
191
191
  }
192
192
  }
193
193
 
@@ -308,7 +308,7 @@ $_simple-date-width: 110px;
308
308
  // Active step
309
309
  &-step.active &-date {
310
310
  background: var(--mw-primary-color);
311
- color: var(--mw-primary-text-color);
311
+ color: var(--mw-accent-text-color);
312
312
  transform: scale(1.1);
313
313
  animation: mw-pulse-ring-simple 2s infinite;
314
314
  }
@@ -0,0 +1,92 @@
1
+ @use '../abstracts' as *;
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;
14
+
15
+ > * {
16
+ pointer-events: auto;
17
+ margin-bottom: spacing('0');
18
+ animation: mw-toast-in 0.3s ease;
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
+ }
32
+
33
+ &-top-center {
34
+ 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
+ right: spacing('5');
44
+ top: auto;
45
+ left: auto;
46
+ flex-direction: column-reverse;
47
+
48
+ > * {
49
+ animation-name: mw-toast-in-up;
50
+ }
51
+ }
52
+
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;
59
+
60
+ &-bottom-right {
61
+ top: auto;
62
+ }
63
+ }
64
+ }
65
+
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
+ }
76
+
77
+ @keyframes mw-toast-in-up {
78
+ from {
79
+ opacity: 0;
80
+ transform: translateY(12px);
81
+ }
82
+ to {
83
+ opacity: 1;
84
+ transform: translateY(0);
85
+ }
86
+ }
87
+
88
+ @media (prefers-reduced-motion: reduce) {
89
+ .mw-toast-stack > * {
90
+ animation: none;
91
+ }
92
+ }
@@ -4,7 +4,6 @@
4
4
  display: flex;
5
5
  flex-direction: column;
6
6
  gap: spacing('4');
7
- padding: spacing('1');
8
7
  width: 100%;
9
8
 
10
9
  &-inline {
@@ -16,10 +15,19 @@
16
15
  &-group {
17
16
  display: flex;
18
17
  flex-direction: column;
19
- padding: spacing('2');
20
- gap: spacing('1');
18
+ padding: spacing('4');
19
+ gap: spacing('2');
21
20
  border-radius: radius('sm');
22
21
  border: 2px solid var(--mw-border);
22
+
23
+ // Explicit hook for the heading, mirrors mw-modal-title
24
+ &-title {
25
+ font-size: font-size('md');
26
+ font-weight: font-weight('bold');
27
+ color: var(--mw-text-color);
28
+ line-height: 1.2;
29
+ margin: spacing('0') spacing('0') spacing('1') spacing('0');
30
+ }
23
31
  }
24
32
 
25
33
  label {
@@ -42,6 +42,30 @@
42
42
  font-size: font-size('sm');
43
43
  }
44
44
 
45
+ // Numeric input for money and other figures - the entry counterpart to the
46
+ // `mw-text-numeric` utility, so a value looks the same while being typed and
47
+ // once it is rendered into a table.
48
+ //
49
+ // Pair it with `type="text" inputmode="decimal"`, not `type="number"`:
50
+ // number inputs change their value on scroll, and they reject a comma as
51
+ // decimal separator in most locales, which silently empties `.value` for
52
+ // anyone typing "1234,50".
53
+ &-numeric {
54
+ text-align: right;
55
+ font-variant-numeric: tabular-nums lining-nums;
56
+ font-feature-settings: 'tnum', 'lnum';
57
+
58
+ // Suppress the native spinners if a `type="number"` slips through - their
59
+ // step of 1 is meaningless for an amount and the arrows are tiny.
60
+ appearance: textfield;
61
+
62
+ &::-webkit-outer-spin-button,
63
+ &::-webkit-inner-spin-button {
64
+ appearance: none;
65
+ margin: 0;
66
+ }
67
+ }
68
+
45
69
  // Date / time inputs — style the native picker indicator
46
70
  &[type='date'],
47
71
  &[type='time'],
@@ -69,7 +69,7 @@ $_knob-travel-lg: calc(
69
69
  left: $_knob-offset;
70
70
  width: $_knob-size;
71
71
  height: $_knob-size;
72
- background: var(--mw-white-color);
72
+ background: var(--mw-accent-text-color);
73
73
  border-radius: radius('full');
74
74
  transition: transform 0.25s ease;
75
75
  box-shadow: 0 1px 4px var(--mw-shadow);
@@ -5,7 +5,7 @@
5
5
  background: var(--mw-footer-background);
6
6
  padding: spacing('5') spacing('0');
7
7
  margin-top: spacing('6');
8
- border-top: 1px solid var(--mw-primary-color-hover);
8
+ border-top: 1px solid var(--mw-border-accent);
9
9
 
10
10
  &-top {
11
11
  display: grid;
@@ -105,14 +105,14 @@
105
105
  color: var(--mw-text-color);
106
106
  font-size: font-size('xl');
107
107
  transition: var(--mw-transition);
108
- border: 1px solid var(--mw-primary-color-hover);
108
+ border: 1px solid var(--mw-border-accent);
109
109
  box-shadow: 0 3px 10px var(--mw-shadow);
110
110
  text-decoration: none;
111
111
 
112
112
  &:hover {
113
113
  background: var(--mw-primary-color);
114
- color: var(--mw-primary-text-color);
115
- transform: translateY(-3px);
114
+ color: var(--mw-accent-text-color);
115
+ transform: translateY(-2px);
116
116
  border-color: var(--mw-primary-color);
117
117
  }
118
118
  }