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,116 +1,117 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- .mw-breadcrumbs {
4
- display: flex;
5
- align-items: center;
6
- justify-content: flex-start;
7
- margin: spacing('1');
8
- padding: spacing('0') spacing('2');
9
-
10
- &-list {
3
+ @layer mw.components {
4
+ .mw-breadcrumbs {
11
5
  display: flex;
12
6
  align-items: center;
13
- margin: spacing('0');
14
- padding: spacing('0');
15
- list-style: none;
16
- }
17
-
18
- &-item {
19
- margin-left: -2px;
7
+ justify-content: flex-start;
8
+ margin: spacing('1');
9
+ padding: spacing('0') spacing('2');
20
10
 
21
- &:first-child {
22
- margin-left: 0;
23
- a {
24
- border-radius: radius('md') 0 0 radius('md');
25
- }
11
+ &-list {
12
+ display: flex;
13
+ align-items: center;
14
+ margin: spacing('0');
15
+ padding: spacing('0');
16
+ list-style: none;
26
17
  }
27
18
 
28
- &:last-child {
29
- a {
30
- border-radius: 0 radius('md') radius('md') 0;
31
- }
32
- }
19
+ &-item {
20
+ margin-left: -2px;
33
21
 
34
- a {
35
- background: var(--mw-card-background);
36
- color: var(--mw-text-muted-color);
37
- display: inline-flex;
38
- justify-content: center;
39
- align-items: center;
40
- text-decoration: none;
41
- font-size: font-size('md');
42
- border: 2px solid var(--mw-border);
43
- height: spacing('8');
44
- padding: spacing('2') spacing('5');
45
- border-radius: 0;
46
- transform: skew(-30deg);
47
- position: relative;
48
- transition: var(--mw-transition);
49
-
50
- @include tappable;
51
-
52
- &:hover,
53
- &.mw-breadcrumbs-active {
54
- color: var(--mw-primary-text-color);
55
- border-color: var(--mw-primary-text-color);
56
- z-index: z-index('lift');
22
+ &:first-child {
23
+ margin-left: 0;
24
+ a {
25
+ border-radius: radius('md') 0 0 radius('md');
26
+ }
57
27
  }
58
28
 
59
- &:active {
60
- color: var(--mw-primary-text-color);
61
- transition-duration: var(--mw-duration-instant);
29
+ &:last-child {
30
+ a {
31
+ border-radius: 0 radius('md') radius('md') 0;
32
+ }
62
33
  }
63
34
 
64
- @include focus-ring-inset(-4px) {
65
- z-index: z-index('lift');
35
+ a {
36
+ background: var(--mw-card-background);
37
+ color: var(--mw-text-muted-color);
38
+ display: inline-flex;
39
+ justify-content: center;
40
+ align-items: center;
41
+ text-decoration: none;
42
+ font-size: font-size('md');
43
+ border: 2px solid var(--mw-border);
44
+ height: spacing('8');
45
+ padding: spacing('2') spacing('5');
46
+ border-radius: 0;
47
+ transform: skew(-30deg);
48
+ position: relative;
49
+ transition: var(--mw-transition);
50
+
51
+ @include tappable;
52
+
53
+ &:hover,
54
+ &.mw-breadcrumbs-active {
55
+ color: var(--mw-primary-text-color);
56
+ border-color: var(--mw-primary-text-color);
57
+ z-index: z-index('lift');
58
+ }
59
+
60
+ &:active {
61
+ color: var(--mw-primary-text-color);
62
+ transition-duration: var(--mw-duration-instant);
63
+ }
64
+
65
+ @include focus-ring-inset(-4px) {
66
+ z-index: z-index('lift');
67
+ }
68
+
69
+ // Counter-skew the content
70
+ & > * {
71
+ transform: skew(30deg);
72
+ }
66
73
  }
67
74
 
68
- // Counter-skew the content
69
- & > * {
70
- transform: skew(30deg);
75
+ // Current page styling
76
+ &.mw-breadcrumbs-current a,
77
+ &:last-child a {
78
+ color: var(--mw-text-color);
79
+ border-color: var(--mw-primary-text-color);
80
+ cursor: default;
81
+ pointer-events: none;
71
82
  }
72
83
  }
73
84
 
74
- // Current page styling
75
- &.mw-breadcrumbs-current a,
76
- &:last-child a {
77
- color: var(--mw-text-color);
78
- border-color: var(--mw-primary-text-color);
79
- cursor: default;
80
- pointer-events: none;
81
- }
82
- }
83
-
84
- // Size variants
85
- &-sm {
86
- .mw-breadcrumbs-item a {
87
- font-size: font-size('sm');
88
- height: spacing('6');
89
- padding: spacing('0') spacing('4');
90
- }
91
- }
92
-
93
- // Responsive behavior
94
- @include media-down('md') {
95
- .mw-breadcrumbs-item a {
96
- font-size: font-size('xs');
97
- height: spacing('6');
98
- padding: spacing('0') spacing('3');
85
+ &-sm {
86
+ .mw-breadcrumbs-item a {
87
+ font-size: font-size('sm');
88
+ height: spacing('6');
89
+ padding: spacing('0') spacing('4');
90
+ }
99
91
  }
100
- }
101
92
 
102
- @include media-down('lg') {
103
- // Collapse middle items on small screens
104
- &.mw-breadcrumbs-collapse {
105
- .mw-breadcrumbs-item:not(:first-child):not(:last-child):not(
106
- :nth-last-child(2)
107
- ) {
108
- display: none;
93
+ // Responsive behavior
94
+ @include media-down('md') {
95
+ .mw-breadcrumbs-item a {
96
+ font-size: font-size('xs');
97
+ height: spacing('6');
98
+ padding: spacing('0') spacing('3');
109
99
  }
100
+ }
110
101
 
111
- .mw-breadcrumbs-item:nth-last-child(2) a::before {
112
- content: '...';
113
- margin-right: spacing('1');
102
+ @include media-down('lg') {
103
+ // Collapse middle items on small screens
104
+ &.mw-breadcrumbs-collapse {
105
+ .mw-breadcrumbs-item:not(:first-child):not(:last-child):not(
106
+ :nth-last-child(2)
107
+ ) {
108
+ display: none;
109
+ }
110
+
111
+ .mw-breadcrumbs-item:nth-last-child(2) a::before {
112
+ content: '...';
113
+ margin-right: spacing('1');
114
+ }
114
115
  }
115
116
  }
116
117
  }
@@ -1,152 +1,144 @@
1
1
  @use '../abstracts' as *;
2
2
 
3
- // Base button bar
4
- .mw-button-bar {
5
- display: flex;
6
- gap: spacing('3');
7
- align-items: center;
8
- justify-content: center;
9
- flex-wrap: wrap;
10
- border: 1px solid var(--mw-border);
11
- border-radius: radius('md');
12
- padding: spacing('2');
13
-
14
- &:hover {
15
- border-color: var(--mw-border-accent);
16
- }
3
+ @layer mw.components {
4
+ .mw-button-bar {
5
+ display: flex;
6
+ gap: spacing('3');
7
+ align-items: center;
8
+ justify-content: center;
9
+ flex-wrap: wrap;
10
+ border: 1px solid var(--mw-border);
11
+ border-radius: radius('md');
12
+ padding: spacing('2');
17
13
 
18
- @include media-down('sm') {
19
- flex-direction: column;
20
- gap: spacing('2');
14
+ &:hover {
15
+ border-color: var(--mw-border-accent);
16
+ }
21
17
 
22
- .mw-btn {
23
- width: 100%;
24
- min-width: 0;
18
+ @include media-down('sm') {
19
+ flex-direction: column;
20
+ gap: spacing('2');
21
+
22
+ .mw-btn {
23
+ width: 100%;
24
+ min-width: 0;
25
+ }
25
26
  }
26
27
  }
27
- }
28
-
29
- // Alignment variants
30
- .mw-button-bar-left {
31
- justify-content: flex-start;
32
- }
33
28
 
34
- .mw-button-bar-right {
35
- justify-content: flex-end;
36
- }
29
+ .mw-button-bar-left {
30
+ justify-content: flex-start;
31
+ }
37
32
 
38
- // Explicit counterpart to the three above - it matches the default, but nobody
39
- // should have to look that up to find out
40
- .mw-button-bar-center {
41
- justify-content: center;
42
- }
33
+ .mw-button-bar-right {
34
+ justify-content: flex-end;
35
+ }
43
36
 
44
- .mw-button-bar-between {
45
- justify-content: space-between;
37
+ // Explicit counterpart to the three above - it matches the default, but nobody
38
+ // should have to look that up to find out
39
+ .mw-button-bar-center {
40
+ justify-content: center;
41
+ }
46
42
 
47
- @include media-down('sm') {
43
+ .mw-button-bar-between {
48
44
  justify-content: center;
45
+
46
+ @include media-up('sm') {
47
+ justify-content: space-between;
48
+ }
49
49
  }
50
- }
51
50
 
52
- // Primary button bar (applies primary styling to all buttons)
53
- .mw-button-bar-primary {
54
- .mw-btn:not([class*='mw-btn-secondary']):not([class*='mw-btn-outline']):not(
55
- [class*='mw-btn-link']
56
- ) {
57
- background: var(--mw-primary-color);
58
- color: var(--mw-primary-accent-text-color);
51
+ .mw-button-bar-primary {
52
+ .mw-btn:not([class*='mw-btn-secondary']):not([class*='mw-btn-outline']):not(
53
+ [class*='mw-btn-link']
54
+ ) {
55
+ background: var(--mw-primary-color);
56
+ color: var(--mw-primary-accent-text-color);
59
57
 
60
- @include btn-solid;
58
+ @include btn-solid;
61
59
 
62
- &:hover:not(:disabled) {
63
- background: var(--mw-primary-color-hover);
60
+ &:hover:not(:disabled) {
61
+ background: var(--mw-primary-color-hover);
62
+ }
64
63
  }
65
64
  }
66
- }
67
65
 
68
- // Secondary button bar (applies secondary styling to all buttons)
69
- .mw-button-bar-secondary {
70
- .mw-btn:not([class*='mw-btn-primary']):not([class*='mw-btn-outline']):not(
71
- [class*='mw-btn-link']
72
- ) {
73
- background: var(--mw-secondary-color);
74
- color: var(--mw-secondary-accent-text-color);
66
+ .mw-button-bar-secondary {
67
+ .mw-btn:not([class*='mw-btn-primary']):not([class*='mw-btn-outline']):not(
68
+ [class*='mw-btn-link']
69
+ ) {
70
+ background: var(--mw-secondary-color);
71
+ color: var(--mw-secondary-accent-text-color);
75
72
 
76
- @include btn-solid;
73
+ @include btn-solid;
77
74
 
78
- &:hover:not(:disabled) {
79
- background: var(--mw-secondary-color-hover);
75
+ &:hover:not(:disabled) {
76
+ background: var(--mw-secondary-color-hover);
77
+ }
80
78
  }
81
79
  }
82
- }
83
-
84
- // Outline button bar
85
- .mw-button-bar-outline {
86
- .mw-btn:not([class*='mw-btn-primary']):not([class*='mw-btn-secondary']):not(
87
- [class*='mw-btn-link']
88
- ) {
89
- background: transparent;
90
- border-color: var(--mw-primary-text-color);
91
- color: var(--mw-primary-text-color);
92
80
 
93
- &:hover:not(:disabled) {
94
- background: var(--mw-primary-color);
95
- color: var(--mw-primary-accent-text-color);
81
+ .mw-button-bar-outline {
82
+ .mw-btn:not([class*='mw-btn-primary']):not([class*='mw-btn-secondary']):not(
83
+ [class*='mw-btn-link']
84
+ ) {
85
+ background: transparent;
86
+ border-color: var(--mw-primary-text-color);
87
+ color: var(--mw-primary-text-color);
88
+
89
+ &:hover:not(:disabled) {
90
+ background: var(--mw-primary-color);
91
+ color: var(--mw-primary-accent-text-color);
92
+ }
96
93
  }
97
94
  }
98
- }
99
95
 
100
- // Mixed button bar for navigation (common pattern)
101
- .mw-button-bar-nav {
102
- justify-content: space-between;
96
+ .mw-button-bar-nav {
97
+ justify-content: space-between;
103
98
 
104
- // First and last buttons get outline style
105
- .mw-btn:first-child:not([class*='mw-btn-']),
106
- .mw-btn:last-child:not([class*='mw-btn-']) {
107
- background: transparent;
108
- border-color: var(--mw-primary-text-color);
109
- color: var(--mw-primary-text-color);
99
+ .mw-btn:first-child:not([class*='mw-btn-']),
100
+ .mw-btn:last-child:not([class*='mw-btn-']) {
101
+ background: transparent;
102
+ border-color: var(--mw-primary-text-color);
103
+ color: var(--mw-primary-text-color);
110
104
 
111
- &:hover:not(:disabled) {
112
- background: var(--mw-primary-color);
113
- color: var(--mw-primary-accent-text-color);
105
+ &:hover:not(:disabled) {
106
+ background: var(--mw-primary-color);
107
+ color: var(--mw-primary-accent-text-color);
108
+ }
114
109
  }
115
- }
116
110
 
117
- // Middle button(s) get primary style
118
- .mw-btn:not(:first-child):not(:last-child):not([class*='mw-btn-']) {
119
- background: var(--mw-primary-color);
120
- color: var(--mw-primary-accent-text-color);
111
+ .mw-btn:not(:first-child):not(:last-child):not([class*='mw-btn-']) {
112
+ background: var(--mw-primary-color);
113
+ color: var(--mw-primary-accent-text-color);
121
114
 
122
- @include btn-solid;
115
+ @include btn-solid;
123
116
 
124
- &:hover:not(:disabled) {
125
- background: var(--mw-primary-color-hover);
117
+ &:hover:not(:disabled) {
118
+ background: var(--mw-primary-color-hover);
119
+ }
126
120
  }
127
121
  }
128
- }
129
122
 
130
- // Compact variant with smaller spacing
131
- .mw-button-bar-sm {
132
- gap: spacing('2');
133
-
134
- @include media-down('sm') {
123
+ .mw-button-bar-sm {
135
124
  gap: spacing('1');
136
- }
137
- }
138
125
 
139
- // Large variant with bigger spacing and larger buttons
140
- .mw-button-bar-lg {
141
- gap: spacing('4');
142
-
143
- .mw-btn {
144
- padding: spacing('3') spacing('5');
145
- font-size: font-size('md');
146
- min-height: var(--mw-control-height-lg);
126
+ @include media-up('sm') {
127
+ gap: spacing('2');
128
+ }
147
129
  }
148
130
 
149
- @include media-down('sm') {
131
+ .mw-button-bar-lg {
150
132
  gap: spacing('3');
133
+
134
+ .mw-btn {
135
+ padding: spacing('3') spacing('5');
136
+ font-size: font-size('md');
137
+ min-height: var(--mw-control-height-lg);
138
+ }
139
+
140
+ @include media-up('sm') {
141
+ gap: spacing('4');
142
+ }
151
143
  }
152
144
  }