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,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
  }