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,105 +1,99 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Same shape as a calendar: a header with an arrow on each side of the title,
4
- // content below. Both are "one page of something, with a way to the next one",
5
- // so they get the same frame - only the body differs.
6
- .mw-pagination {
7
- padding: spacing('5');
8
- background: var(--mw-card-background);
9
- border: 1px solid var(--mw-border);
10
- @include surface;
11
- box-shadow: var(--mw-elevation-2);
12
- }
13
-
14
- // The calendar gets its separation from the weekday row - here there is
15
- // nothing between the title and the body, so it needs a rule of its own
16
- .mw-pagination-header {
17
- display: flex;
18
- align-items: center;
19
- gap: spacing('3');
20
- margin-bottom: spacing('5');
21
- padding-bottom: spacing('4');
22
- border-bottom: 1px solid var(--mw-border);
23
- }
24
-
25
- // Takes the space between the two arrows so the label stays optically centred
26
- // no matter how long it is
27
- .mw-pagination-title {
28
- flex: 1;
29
- min-width: 0;
30
- margin: spacing('0');
31
- text-align: center;
32
- font-size: font-size('md');
33
- font-weight: font-weight('medium');
34
- color: var(--mw-text-color);
35
- white-space: nowrap;
36
- overflow: hidden;
37
- text-overflow: ellipsis;
38
- }
39
-
40
- // Sits on .mw-btn - this only squares it off around the chevron
41
- .mw-pagination-nav {
42
- padding: spacing('2') spacing('4');
43
- line-height: 1;
44
- flex-shrink: 0;
45
- }
46
-
47
- .mw-pagination-content {
48
- min-height: 200px;
49
- transition: var(--mw-transition);
50
- }
3
+ @layer mw.components {
4
+ // Same shape as a calendar: a header with an arrow on each side of the title,
5
+ // content below. Both are "one page of something, with a way to the next one",
6
+ // so they get the same frame - only the body differs.
7
+ .mw-pagination {
8
+ padding: spacing('4') spacing('3');
9
+ background: var(--mw-card-background);
10
+ border: 1px solid var(--mw-border);
11
+ @include surface;
12
+ box-shadow: var(--mw-elevation-2);
13
+ }
51
14
 
52
- // Dims the body while the next page is on its way
53
- .mw-pagination-content.mw-pagination-loading {
54
- opacity: 0.6;
55
- pointer-events: none;
56
- }
15
+ // The calendar gets its separation from the weekday row - here there is
16
+ // nothing between the title and the body, so it needs a rule of its own
17
+ .mw-pagination-header {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: spacing('3');
21
+ margin-bottom: spacing('5');
22
+ padding-bottom: spacing('4');
23
+ border-bottom: 1px solid var(--mw-border);
24
+ }
57
25
 
58
- // Optional directional transitions for the swap
59
- .mw-pagination-slide-left {
60
- animation: mw-pagination-slide-left var(--mw-duration-base) var(--mw-ease-out);
61
- }
26
+ // Takes the space between the two arrows so the label stays optically centred
27
+ // no matter how long it is
28
+ .mw-pagination-title {
29
+ flex: 1;
30
+ min-width: 0;
31
+ margin: spacing('0');
32
+ text-align: center;
33
+ font-size: font-size('base');
34
+ font-weight: font-weight('medium');
35
+ color: var(--mw-text-color);
36
+ @include truncate;
37
+ }
62
38
 
63
- .mw-pagination-slide-right {
64
- animation: mw-pagination-slide-right var(--mw-duration-base)
65
- var(--mw-ease-out);
66
- }
39
+ // Sits on .mw-btn - this only squares it off around the chevron
40
+ .mw-pagination-nav {
41
+ padding: spacing('2') spacing('4');
42
+ line-height: 1;
43
+ flex-shrink: 0;
44
+ }
67
45
 
68
- @keyframes mw-pagination-slide-left {
69
- from {
70
- transform: translateX(20px);
71
- opacity: 0;
46
+ .mw-pagination-content {
47
+ min-height: 200px;
48
+ transition: var(--mw-transition);
72
49
  }
73
- to {
74
- transform: translateX(0);
75
- opacity: 1;
50
+
51
+ // Dims the body while the next page is on its way
52
+ .mw-pagination-content.mw-pagination-loading {
53
+ opacity: 0.6;
54
+ pointer-events: none;
76
55
  }
77
- }
78
56
 
79
- @keyframes mw-pagination-slide-right {
80
- from {
81
- transform: translateX(-20px);
82
- opacity: 0;
57
+ // Optional directional transitions for the swap
58
+ .mw-pagination-slide-left {
59
+ animation: mw-pagination-slide-left var(--mw-duration-base)
60
+ var(--mw-ease-out);
83
61
  }
84
- to {
85
- transform: translateX(0);
86
- opacity: 1;
62
+
63
+ .mw-pagination-slide-right {
64
+ animation: mw-pagination-slide-right var(--mw-duration-base)
65
+ var(--mw-ease-out);
87
66
  }
88
- }
89
67
 
90
- @include media-down('sm') {
91
- .mw-pagination {
92
- padding: spacing('4') spacing('3');
68
+ @keyframes mw-pagination-slide-left {
69
+ from {
70
+ transform: translateX(20px);
71
+ opacity: 0;
72
+ }
73
+ to {
74
+ transform: translateX(0);
75
+ opacity: 1;
76
+ }
93
77
  }
94
78
 
95
- .mw-pagination-title {
96
- font-size: font-size('base');
79
+ @keyframes mw-pagination-slide-right {
80
+ from {
81
+ transform: translateX(-20px);
82
+ opacity: 0;
83
+ }
84
+ to {
85
+ transform: translateX(0);
86
+ opacity: 1;
87
+ }
97
88
  }
98
- }
99
89
 
100
- @media (prefers-reduced-motion: reduce) {
101
- .mw-pagination-slide-left,
102
- .mw-pagination-slide-right {
103
- animation: none;
90
+ @include media-up('sm') {
91
+ .mw-pagination {
92
+ padding: spacing('5');
93
+ }
94
+
95
+ .mw-pagination-title {
96
+ font-size: font-size('md');
97
+ }
104
98
  }
105
99
  }
@@ -1,125 +1,127 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- .mw-panel {
4
- background: var(--mw-card-background);
5
- @include surface(2px);
6
- border: 2px solid var(--mw-border);
7
- overflow: hidden;
8
- display: flex;
9
- flex-direction: column;
10
- min-height: 100%;
11
- margin: spacing('1');
12
-
13
- &-header {
14
- padding: spacing('4') spacing('5');
15
- border-bottom: 1px solid var(--mw-border-accent);
3
+ @layer mw.components {
4
+ .mw-panel {
5
+ background: var(--mw-card-background);
6
+ @include surface(2px);
7
+ border: 2px solid var(--mw-border);
8
+ overflow: hidden;
16
9
  display: flex;
17
- justify-content: space-between;
18
- align-items: center;
19
- margin: spacing('0');
20
- border-radius: (radius('sm') - 2px) (radius('xl') - 2px) 0 0;
21
- }
22
-
23
- &-body {
24
- padding: spacing('4') spacing('5');
25
- flex: 1;
26
- overflow-y: auto;
27
- @include scrollbar;
28
- }
29
-
30
- // A dropdown, a tooltip, a date picker - anything a child opens *outside*
31
- // itself - is cut off by the two clips above. Lifting them only while such a
32
- // menu is open costs nothing the rest of the time, and the alternative is a
33
- // menu that shows its first row and nothing else.
34
- //
35
- // This is the same escape hatch a project needs on its own containers: one
36
- // `:has(.mw-dropdown[open]) { overflow: visible }` on whatever is clipping.
37
- &:has(.mw-dropdown[open]),
38
- &-body:has(.mw-dropdown[open]) {
39
- overflow: visible;
40
- }
41
-
42
- &-footer {
43
- padding: spacing('4') spacing('5');
44
- border-top: 1px solid var(--mw-border-accent);
45
- display: flex;
46
- justify-content: flex-end;
47
- gap: spacing('3');
48
- }
10
+ flex-direction: column;
11
+ min-height: 100%;
12
+ margin: spacing('1');
49
13
 
50
- // Panel variants
51
- &-primary {
52
- .mw-panel-header {
53
- background: var(--mw-primary-color);
54
- color: var(--mw-primary-accent-text-color);
14
+ &-header {
15
+ padding: spacing('4') spacing('5');
16
+ border-bottom: 1px solid var(--mw-border-accent);
17
+ display: flex;
18
+ justify-content: space-between;
19
+ align-items: center;
20
+ margin: spacing('0');
21
+ border-radius: (radius('sm') - 2px) (radius('xl') - 2px) 0 0;
55
22
  }
56
- }
57
23
 
58
- &-secondary {
59
- .mw-panel-header {
60
- background: var(--mw-secondary-color);
61
- color: var(--mw-secondary-accent-text-color);
24
+ &-body {
25
+ padding: spacing('4') spacing('5');
26
+ flex: 1;
27
+ overflow-y: auto;
28
+ @include scrollbar;
62
29
  }
63
- }
64
30
 
65
- // The coloured header already owns the top-right corner. An arc drawn over it
66
- // either disappears into the primary fill or fights the secondary one - a
67
- // blue bow on an orange header reads as a rendering fault, not as a mark. The
68
- // bottom corner carries it alone on these two.
69
- &-primary::after,
70
- &-secondary::after {
71
- @include corner-accent(2px, 'bottom');
72
- }
31
+ // A dropdown, a tooltip, a date picker - anything a child opens *outside*
32
+ // itself - is cut off by the two clips above. Lifting them only while such a
33
+ // menu is open costs nothing the rest of the time, and the alternative is a
34
+ // menu that shows its first row and nothing else.
35
+ //
36
+ // This is the same escape hatch a project needs on its own containers: one
37
+ // `:has(.mw-dropdown[open]) { overflow: visible }` on whatever is clipping.
38
+ &:has(.mw-dropdown[open]),
39
+ &-body:has(.mw-dropdown[open]) {
40
+ overflow: visible;
41
+ }
73
42
 
74
- // Scrollable variant for fixed height
75
- &-scrollable {
76
- max-height: 500px;
43
+ &-footer {
44
+ padding: spacing('4') spacing('5');
45
+ border-top: 1px solid var(--mw-border-accent);
46
+ display: flex;
47
+ justify-content: flex-end;
48
+ gap: spacing('3');
49
+ }
77
50
 
78
- .mw-panel-body {
79
- overflow-y: auto;
80
- max-height: calc(500px - #{2 * spacing('4')} - 2px);
51
+ // Panel variants
52
+ &-primary {
53
+ .mw-panel-header {
54
+ background: var(--mw-primary-color);
55
+ color: var(--mw-primary-accent-text-color);
56
+ }
81
57
  }
82
- }
83
58
 
84
- // Scrollable variants for max height
85
- &-max-height {
86
- &-sm {
87
- max-height: 300px;
88
- min-height: 0;
89
- align-self: start;
90
- .mw-panel-body {
91
- max-height: calc(300px - #{2 * spacing('4')} - 2px);
92
- overflow-y: auto;
59
+ &-secondary {
60
+ .mw-panel-header {
61
+ background: var(--mw-secondary-color);
62
+ color: var(--mw-secondary-accent-text-color);
93
63
  }
94
64
  }
95
65
 
96
- &-md {
66
+ // The coloured header already owns the top-right corner. An arc drawn over it
67
+ // either disappears into the primary fill or fights the secondary one - a
68
+ // blue bow on an orange header reads as a rendering fault, not as a mark. The
69
+ // bottom corner carries it alone on these two.
70
+ &-primary::after,
71
+ &-secondary::after {
72
+ @include corner-accent(2px, 'bottom');
73
+ }
74
+
75
+ // Scrollable variant for fixed height
76
+ &-scrollable {
97
77
  max-height: 500px;
98
- min-height: 0;
99
- align-self: start;
78
+
100
79
  .mw-panel-body {
101
- max-height: calc(500px - #{2 * spacing('4')} - 2px);
102
80
  overflow-y: auto;
81
+ max-height: calc(500px - #{2 * spacing('4')} - 2px);
103
82
  }
104
83
  }
105
84
 
106
- &-lg {
107
- max-height: 700px;
108
- min-height: 0;
109
- align-self: start;
110
- .mw-panel-body {
111
- max-height: calc(700px - #{2 * spacing('4')} - 2px);
112
- overflow-y: auto;
85
+ // Scrollable variants for max height
86
+ &-max-height {
87
+ &-sm {
88
+ max-height: 300px;
89
+ min-height: 0;
90
+ align-self: start;
91
+ .mw-panel-body {
92
+ max-height: calc(300px - #{2 * spacing('4')} - 2px);
93
+ overflow-y: auto;
94
+ }
95
+ }
96
+
97
+ &-md {
98
+ max-height: 500px;
99
+ min-height: 0;
100
+ align-self: start;
101
+ .mw-panel-body {
102
+ max-height: calc(500px - #{2 * spacing('4')} - 2px);
103
+ overflow-y: auto;
104
+ }
105
+ }
106
+
107
+ &-lg {
108
+ max-height: 700px;
109
+ min-height: 0;
110
+ align-self: start;
111
+ .mw-panel-body {
112
+ max-height: calc(700px - #{2 * spacing('4')} - 2px);
113
+ overflow-y: auto;
114
+ }
113
115
  }
114
116
  }
115
- }
116
117
 
117
- @include media-down('sm') {
118
- font-size: font-size('sm');
118
+ @include media-down('sm') {
119
+ font-size: font-size('sm');
119
120
 
120
- &-header {
121
- h3 {
122
- font-size: font-size('sm');
121
+ &-header {
122
+ h3 {
123
+ font-size: font-size('sm');
124
+ }
123
125
  }
124
126
  }
125
127
  }