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.
- package/.claude/settings.local.json +29 -1
- package/.claude/skills/mw-maverick-wave/SKILL.md +39 -24
- package/.claude/skills/mw-maverick-wave/examples/angular-services.md +16 -4
- package/.claude/skills/mw-maverick-wave/examples/static-landing-page.md +13 -4
- package/.claude/skills/mw-maverick-wave/references/components.md +42 -5
- package/.claude/skills/mw-maverick-wave/references/forms.md +14 -2
- package/.claude/skills/mw-maverick-wave/references/javascript.md +17 -4
- package/.claude/skills/mw-maverick-wave/references/layout.md +53 -19
- package/.claude/skills/mw-maverick-wave/references/theming.md +38 -1
- package/.impeccable/config.local.json +5 -0
- package/.impeccable/hook.cache.json +1 -0
- package/CHANGELOG.md +11 -0
- package/CLAUDE.md +5 -5
- package/README.md +48 -4
- package/index.html +19 -38
- package/maverick-wave.min.css +14 -12
- package/maverick-wave.min.js +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +27 -2
- package/src/js/main.js +223 -83
- package/src/partials/accordions-container.html +6 -10
- package/src/partials/alerts-container.html +6 -6
- package/src/partials/announcement-container.html +5 -5
- package/src/partials/avatars-container.html +85 -17
- package/src/partials/badges-container.html +6 -6
- package/src/partials/blog-posts-container.html +11 -12
- package/src/partials/buttons-container.html +3 -3
- package/src/partials/cards-container.html +26 -9
- package/src/partials/code-container.html +5 -5
- package/src/partials/content-slider-container.html +5 -4
- package/src/partials/divider-container.html +7 -7
- package/src/partials/dropdown-container.html +2 -2
- package/src/partials/empty-state-container.html +5 -5
- package/src/partials/footer-container.html +21 -18
- package/src/partials/form-elements-container.html +14 -14
- package/src/partials/gallery-container.html +16 -8
- package/src/partials/get-started-container.html +4 -8
- package/src/partials/header-container.html +18 -7
- package/src/partials/home-container.html +10 -20
- package/src/partials/input-group-container.html +11 -2
- package/src/partials/kbd-container.html +1 -1
- package/src/partials/login-container.html +5 -1
- package/src/partials/media-container.html +2 -2
- package/src/partials/modals-container.html +22 -32
- package/src/partials/pricing-container.html +9 -9
- package/src/partials/skeleton-container.html +6 -6
- package/src/partials/stepper-container.html +2 -2
- package/src/partials/tables-container.html +12 -12
- package/src/partials/tabs-container.html +17 -27
- package/src/partials/tags-container.html +23 -17
- package/src/partials/techstack-bucket-container.html +13 -0
- package/src/partials/tiles-container.html +26 -9
- package/src/partials/typography-container.html +7 -6
- package/src/partials/utilities-container.html +35 -15
- package/src/scss/_layers.scss +10 -0
- package/src/scss/abstracts/_index.scss +6 -0
- package/src/scss/abstracts/_mixins.scss +61 -153
- package/src/scss/abstracts/_variables.scss +123 -319
- package/src/scss/base/_base.scss +170 -190
- package/src/scss/base/_reset.scss +106 -104
- package/src/scss/base/_typography.scss +153 -151
- package/src/scss/components/_accordions.scss +97 -97
- package/src/scss/components/_alerts.scss +71 -70
- package/src/scss/components/_announcement.scss +71 -70
- package/src/scss/components/_avatars.scss +130 -142
- package/src/scss/components/_badge.scss +131 -132
- package/src/scss/components/_blog-post.scss +223 -220
- package/src/scss/components/_breadcrumbs.scss +93 -92
- package/src/scss/components/_button-bar.scss +102 -110
- package/src/scss/components/_buttons.scss +319 -324
- package/src/scss/components/_calendar.scss +251 -252
- package/src/scss/components/_cards.scss +359 -386
- package/src/scss/components/_code.scss +190 -194
- package/src/scss/components/_coming-soon.scss +77 -75
- package/src/scss/components/_content-slider.scss +90 -89
- package/src/scss/components/_divider.scss +55 -53
- package/src/scss/components/_dropdown.scss +179 -185
- package/src/scss/components/_empty-state.scss +57 -57
- package/src/scss/components/_flag.scss +294 -278
- package/src/scss/components/_gallery.scss +131 -133
- package/src/scss/components/_info.scss +151 -167
- package/src/scss/components/_kanban.scss +332 -341
- package/src/scss/components/_kbd.scss +40 -38
- package/src/scss/components/_lang-switch.scss +89 -97
- package/src/scss/components/_links.scss +21 -28
- package/src/scss/components/_lists.scss +510 -514
- package/src/scss/components/_localhost-indicator.scss +26 -24
- package/src/scss/components/_media.scss +22 -20
- package/src/scss/components/_meta-info.scss +35 -33
- package/src/scss/components/_modals.scss +277 -186
- package/src/scss/components/_pagination.scss +81 -87
- package/src/scss/components/_panels.scss +99 -97
- package/src/scss/components/_pricing.scss +183 -241
- package/src/scss/components/_progress.scss +112 -89
- package/src/scss/components/_prose.scss +35 -33
- package/src/scss/components/_ratings.scss +40 -38
- package/src/scss/components/_segmented.scss +82 -84
- package/src/scss/components/_skeleton.scss +66 -72
- package/src/scss/components/_spinners.scss +155 -159
- package/src/scss/components/_stepper.scss +116 -116
- package/src/scss/components/_tables.scss +155 -148
- package/src/scss/components/_tabs.scss +232 -141
- package/src/scss/components/_tags.scss +109 -107
- package/src/scss/components/_techstack-bucket.scss +123 -122
- package/src/scss/components/_testimonial.scss +72 -70
- package/src/scss/components/_theme-toggle.scss +53 -51
- package/src/scss/components/_tiles.scss +174 -174
- package/src/scss/components/_timelines.scss +282 -280
- package/src/scss/components/_toasts.scss +66 -72
- package/src/scss/form-elements/_checkbox.scss +117 -132
- package/src/scss/form-elements/_form.scss +149 -115
- package/src/scss/form-elements/_input-group.scss +99 -103
- package/src/scss/form-elements/_input.scss +74 -74
- package/src/scss/form-elements/_login.scss +48 -48
- package/src/scss/form-elements/_prefilled.scss +53 -51
- package/src/scss/form-elements/_radio.scss +95 -107
- package/src/scss/form-elements/_select.scss +42 -42
- package/src/scss/form-elements/_slider.scss +117 -132
- package/src/scss/form-elements/_textarea.scss +68 -54
- package/src/scss/form-elements/_toggle.scss +127 -140
- package/src/scss/layout/_footer.scss +172 -171
- package/src/scss/layout/_grid.scss +268 -302
- package/src/scss/layout/_header.scss +426 -427
- package/src/scss/layout/_home.scss +28 -27
- package/src/scss/layout/_main.scss +275 -238
- package/src/scss/layout/_page-header.scss +38 -36
- package/src/scss/layout/_section.scss +150 -124
- package/src/scss/main.scss +1 -1
- package/src/scss/utilities/_accessibility.scss +46 -45
- package/src/scss/utilities/_aspect.scss +22 -20
- package/src/scss/utilities/_corner.scss +23 -5
- package/src/scss/utilities/_display.scss +76 -70
- package/src/scss/utilities/_elevation.scss +13 -11
- package/src/scss/utilities/_flex.scss +83 -85
- package/src/scss/utilities/_reveal.scss +40 -63
- package/src/scss/utilities/_spacing.scss +63 -64
- package/src/scss/utilities/_text.scss +139 -141
- package/src/scss/utilities/_touch-targets.scss +130 -147
|
@@ -1,147 +1,147 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
2
|
@use '../abstracts' as *;
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
.mw-stepper {
|
|
6
|
-
display: flex;
|
|
7
|
-
align-items: flex-start;
|
|
8
|
-
width: 100%;
|
|
9
|
-
|
|
10
|
-
&-step {
|
|
4
|
+
@layer mw.components {
|
|
5
|
+
.mw-stepper {
|
|
11
6
|
display: flex;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
height: 2px;
|
|
23
|
-
background: var(--mw-border);
|
|
24
|
-
margin-top: spacing('4');
|
|
25
|
-
transition: background var(--mw-duration-base) var(--mw-ease-out);
|
|
26
|
-
|
|
27
|
-
&.mw-done {
|
|
28
|
-
background: var(--mw-primary-color);
|
|
7
|
+
align-items: flex-start;
|
|
8
|
+
width: 100%;
|
|
9
|
+
|
|
10
|
+
&-step {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: spacing('2');
|
|
15
|
+
flex: 1;
|
|
16
|
+
min-width: 0;
|
|
29
17
|
}
|
|
30
|
-
}
|
|
31
18
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
background: var(--mw-card-background);
|
|
39
|
-
color: var(--mw-text-muted-color);
|
|
40
|
-
display: flex;
|
|
41
|
-
align-items: center;
|
|
42
|
-
justify-content: center;
|
|
43
|
-
font-size: font-size('sm');
|
|
44
|
-
font-weight: font-weight('bold');
|
|
45
|
-
transition: var(--mw-transition);
|
|
46
|
-
flex-shrink: 0;
|
|
47
|
-
user-select: none;
|
|
48
|
-
|
|
49
|
-
&.mw-active {
|
|
50
|
-
border-color: var(--mw-primary-color);
|
|
51
|
-
background: var(--mw-primary-color);
|
|
52
|
-
color: var(--mw-primary-accent-text-color);
|
|
53
|
-
}
|
|
19
|
+
&-connector {
|
|
20
|
+
flex: 1;
|
|
21
|
+
height: 2px;
|
|
22
|
+
background: var(--mw-border);
|
|
23
|
+
margin-top: spacing('4');
|
|
24
|
+
transition: background var(--mw-duration-base) var(--mw-ease-out);
|
|
54
25
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
color: var(--mw-success-accent-text-color);
|
|
26
|
+
&.mw-done {
|
|
27
|
+
background: var(--mw-primary-color);
|
|
28
|
+
}
|
|
59
29
|
}
|
|
60
|
-
}
|
|
61
30
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
font-
|
|
73
|
-
|
|
31
|
+
&-indicator {
|
|
32
|
+
width: 28px;
|
|
33
|
+
height: 28px;
|
|
34
|
+
border-radius: radius('full');
|
|
35
|
+
border: 2px solid var(--mw-border);
|
|
36
|
+
background: var(--mw-card-background);
|
|
37
|
+
color: var(--mw-text-muted-color);
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
font-size: font-size('sm');
|
|
42
|
+
font-weight: font-weight('bold');
|
|
43
|
+
transition: var(--mw-transition);
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
user-select: none;
|
|
46
|
+
|
|
47
|
+
// The halo is what says "you are here". Without it the current step is a
|
|
48
|
+
// filled circle and so is every finished one, which leaves the hue as the
|
|
49
|
+
// only thing telling them apart - and a stepper is read at a glance, by
|
|
50
|
+
// people who do not all see blue against green.
|
|
51
|
+
&.mw-active {
|
|
52
|
+
border-color: var(--mw-primary-color);
|
|
53
|
+
background: var(--mw-primary-color);
|
|
54
|
+
color: var(--mw-primary-accent-text-color);
|
|
55
|
+
@include focus-halo;
|
|
56
|
+
}
|
|
74
57
|
|
|
75
|
-
|
|
76
|
-
|
|
58
|
+
&.mw-done {
|
|
59
|
+
border-color: var(--mw-success-color);
|
|
60
|
+
background: var(--mw-success-color);
|
|
61
|
+
color: var(--mw-success-accent-text-color);
|
|
62
|
+
}
|
|
77
63
|
}
|
|
78
|
-
}
|
|
79
64
|
|
|
80
|
-
@include media-down('sm') {
|
|
81
65
|
&-label {
|
|
82
66
|
font-size: font-size('2xs');
|
|
67
|
+
color: var(--mw-text-muted-color);
|
|
68
|
+
text-align: center;
|
|
69
|
+
line-height: 1.2;
|
|
70
|
+
transition: color var(--mw-duration-base) var(--mw-ease-out);
|
|
71
|
+
|
|
72
|
+
&.mw-active {
|
|
73
|
+
color: var(--mw-primary-text-color);
|
|
74
|
+
font-weight: font-weight('medium');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&.mw-done {
|
|
78
|
+
color: var(--mw-success-text-color);
|
|
79
|
+
}
|
|
83
80
|
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
81
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
@include media-up('sm') {
|
|
83
|
+
&-label {
|
|
84
|
+
font-size: font-size('xs');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
91
88
|
|
|
92
|
-
.mw-stepper-
|
|
89
|
+
.mw-stepper-vertical {
|
|
93
90
|
display: flex;
|
|
94
|
-
flex-direction:
|
|
95
|
-
align-items: flex-start;
|
|
96
|
-
gap: spacing('3');
|
|
97
|
-
position: relative;
|
|
98
|
-
padding-bottom: spacing('5');
|
|
91
|
+
flex-direction: column;
|
|
99
92
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
93
|
+
.mw-stepper-step {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: row;
|
|
96
|
+
align-items: flex-start;
|
|
97
|
+
gap: spacing('3');
|
|
98
|
+
position: relative;
|
|
99
|
+
padding-bottom: spacing('5');
|
|
103
100
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
101
|
+
&:last-child {
|
|
102
|
+
padding-bottom: spacing('0');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
&:not(:last-child)::after {
|
|
106
|
+
content: '';
|
|
107
|
+
position: absolute;
|
|
108
|
+
left: calc(#{spacing('7')} / 2 - 1px);
|
|
109
|
+
top: spacing('7');
|
|
110
|
+
bottom: 0;
|
|
111
|
+
width: 2px;
|
|
112
|
+
background: var(--mw-border);
|
|
113
|
+
transition: background var(--mw-duration-base) var(--mw-ease-out);
|
|
114
|
+
}
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
&.mw-done:not(:last-child)::after {
|
|
117
|
+
background: var(--mw-primary-text-color);
|
|
118
|
+
}
|
|
118
119
|
}
|
|
119
|
-
}
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
.mw-stepper-indicator {
|
|
122
|
+
flex-shrink: 0;
|
|
123
|
+
}
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
margin-left: spacing('1');
|
|
125
|
+
.mw-stepper-content {
|
|
126
|
+
flex: 1;
|
|
127
|
+
margin-left: spacing('1');
|
|
129
128
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
&-title {
|
|
130
|
+
font-size: font-size('base');
|
|
131
|
+
font-weight: font-weight('medium');
|
|
132
|
+
color: var(--mw-text-color);
|
|
133
|
+
margin-bottom: spacing('1');
|
|
135
134
|
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
.mw-stepper-step.mw-active & {
|
|
136
|
+
color: var(--mw-primary-text-color);
|
|
137
|
+
}
|
|
138
138
|
}
|
|
139
|
-
}
|
|
140
139
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
140
|
+
&-desc {
|
|
141
|
+
font-size: font-size('sm');
|
|
142
|
+
color: var(--mw-text-muted-color);
|
|
143
|
+
line-height: 1.5;
|
|
144
|
+
}
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
}
|
|
@@ -1,186 +1,193 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
th,
|
|
11
|
-
td {
|
|
12
|
-
padding: spacing('3') spacing('4');
|
|
13
|
-
text-align: left;
|
|
14
|
-
border: 1px solid var(--mw-border);
|
|
15
|
-
color: var(--mw-text-muted-color);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
th {
|
|
19
|
-
font-weight: font-weight('medium');
|
|
20
|
-
color: var(--mw-primary-accent-text-color);
|
|
21
|
-
background: var(--mw-primary-color);
|
|
22
|
-
user-select: none;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Zebra striping
|
|
26
|
-
tr:nth-child(even) {
|
|
27
|
-
background: var(--mw-gray-background);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
tr:hover {
|
|
31
|
-
td {
|
|
32
|
-
background: var(--mw-primary-background-hover);
|
|
33
|
-
color: var(--mw-text-color);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
3
|
+
@layer mw.components {
|
|
4
|
+
// Base table styles
|
|
5
|
+
.mw-table {
|
|
6
|
+
width: 100%;
|
|
7
|
+
margin: spacing('1') spacing('0');
|
|
8
|
+
border-collapse: collapse;
|
|
9
|
+
background: var(--mw-card-background);
|
|
36
10
|
|
|
37
|
-
@include media-down('sm') {
|
|
38
11
|
th,
|
|
39
12
|
td {
|
|
40
|
-
padding: spacing('
|
|
41
|
-
|
|
13
|
+
padding: spacing('3') spacing('4');
|
|
14
|
+
text-align: left;
|
|
15
|
+
border: 1px solid var(--mw-border);
|
|
16
|
+
color: var(--mw-text-muted-color);
|
|
42
17
|
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Responsive table container
|
|
47
|
-
.mw-table-responsive {
|
|
48
|
-
display: block;
|
|
49
|
-
width: 100%;
|
|
50
|
-
overflow-x: auto;
|
|
51
|
-
-webkit-overflow-scrolling: touch;
|
|
52
|
-
margin: spacing('1');
|
|
53
18
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// Scroll hint for a table that is known to be wider than its frame.
|
|
60
|
-
//
|
|
61
|
-
// Opt-in, unlike the one on the tab bar, and by a different mechanism. A table
|
|
62
|
-
// paints its own opaque surface, so the gradient trick used on `.mw-tabs-nav`
|
|
63
|
-
// would sit behind the rows and never show. A mask sits in front of the
|
|
64
|
-
// content and works - but masks have no `local` attachment, so it cannot
|
|
65
|
-
// disappear once the last column is reached. Hence the extra class: only put
|
|
66
|
-
// it on a table that really does overflow.
|
|
67
|
-
.mw-table-responsive-hint {
|
|
68
|
-
mask-image: linear-gradient(
|
|
69
|
-
to right,
|
|
70
|
-
#000 calc(100% - 2.5rem),
|
|
71
|
-
transparent 100%
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Card view for mobile - clean and simple approach
|
|
76
|
-
.mw-table-cards {
|
|
77
|
-
@include media-down('md') {
|
|
78
|
-
// Hide table header on mobile
|
|
79
|
-
thead {
|
|
80
|
-
display: none;
|
|
19
|
+
th {
|
|
20
|
+
font-weight: font-weight('medium');
|
|
21
|
+
color: var(--mw-primary-accent-text-color);
|
|
22
|
+
background: var(--mw-primary-color);
|
|
23
|
+
user-select: none;
|
|
81
24
|
}
|
|
82
25
|
|
|
83
|
-
//
|
|
84
|
-
tr {
|
|
85
|
-
|
|
86
|
-
margin-bottom: spacing('3');
|
|
87
|
-
box-shadow: var(--mw-elevation-2);
|
|
88
|
-
background: var(--mw-card-background);
|
|
89
|
-
cursor: text;
|
|
26
|
+
// Zebra striping
|
|
27
|
+
tr:nth-child(even) {
|
|
28
|
+
background: var(--mw-gray-background);
|
|
90
29
|
}
|
|
91
30
|
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
&::before {
|
|
101
|
-
content: attr(data-label);
|
|
102
|
-
font-weight: font-weight('medium');
|
|
31
|
+
// The tinted surface at rest, not the hovered one. A row starts out
|
|
32
|
+
// transparent, so it takes the whole step in one go - and at the hover tone
|
|
33
|
+
// it lands close enough to the solid header above it to read as selected
|
|
34
|
+
// rather than as pointed at. A badge or a tag is already sitting on the
|
|
35
|
+
// resting tint, which is why the louder one is right there and not here.
|
|
36
|
+
tr:hover {
|
|
37
|
+
td {
|
|
38
|
+
background: var(--mw-primary-background);
|
|
103
39
|
color: var(--mw-text-color);
|
|
104
|
-
flex: 1;
|
|
105
|
-
text-align: left;
|
|
106
40
|
}
|
|
41
|
+
}
|
|
107
42
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
text-align: right;
|
|
43
|
+
@include media-down('sm') {
|
|
44
|
+
th,
|
|
45
|
+
td {
|
|
46
|
+
padding: spacing('2') spacing('3');
|
|
47
|
+
font-size: font-size('xs');
|
|
114
48
|
}
|
|
115
49
|
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Responsive table container
|
|
53
|
+
.mw-table-responsive {
|
|
54
|
+
display: block;
|
|
55
|
+
width: 100%;
|
|
56
|
+
overflow-x: auto;
|
|
57
|
+
-webkit-overflow-scrolling: touch;
|
|
58
|
+
margin: spacing('1');
|
|
116
59
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
margin-bottom: spacing('4');
|
|
60
|
+
.mw-table {
|
|
61
|
+
margin-bottom: spacing('0');
|
|
120
62
|
}
|
|
121
63
|
}
|
|
122
|
-
}
|
|
123
64
|
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
65
|
+
// Scroll hint for a table that is known to be wider than its frame.
|
|
66
|
+
//
|
|
67
|
+
// Opt-in, unlike the one on the tab bar, and by a different mechanism. A table
|
|
68
|
+
// paints its own opaque surface, so the gradient trick used on `.mw-tabs-nav`
|
|
69
|
+
// would sit behind the rows and never show. A mask sits in front of the
|
|
70
|
+
// content and works - but masks have no `local` attachment, so it cannot
|
|
71
|
+
// disappear once the last column is reached. Hence the extra class: only put
|
|
72
|
+
// it on a table that really does overflow.
|
|
73
|
+
.mw-table-responsive-hint {
|
|
74
|
+
mask-image: linear-gradient(
|
|
75
|
+
to right,
|
|
76
|
+
#000 calc(100% - 2.5rem),
|
|
77
|
+
transparent 100%
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Card view for mobile - clean and simple approach
|
|
82
|
+
.mw-table-cards {
|
|
83
|
+
@include media-down('md') {
|
|
84
|
+
// Hide table header on mobile
|
|
85
|
+
thead {
|
|
86
|
+
display: none;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Make each row a card
|
|
90
|
+
tr {
|
|
91
|
+
display: block;
|
|
92
|
+
margin-bottom: spacing('3');
|
|
93
|
+
box-shadow: var(--mw-elevation-2);
|
|
94
|
+
background: var(--mw-card-background);
|
|
95
|
+
cursor: text;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Style each cell as a row in the card
|
|
99
|
+
td {
|
|
100
|
+
display: flex;
|
|
101
|
+
justify-content: space-between;
|
|
102
|
+
align-items: center;
|
|
103
|
+
padding: spacing('1') spacing('4');
|
|
104
|
+
|
|
105
|
+
// Add the column header as a label
|
|
106
|
+
&::before {
|
|
107
|
+
content: attr(data-label);
|
|
108
|
+
font-weight: font-weight('medium');
|
|
109
|
+
color: var(--mw-text-color);
|
|
110
|
+
flex: 1;
|
|
111
|
+
text-align: left;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// The cell value
|
|
115
|
+
span,
|
|
116
|
+
a,
|
|
117
|
+
div {
|
|
118
|
+
flex: 2;
|
|
119
|
+
text-align: right;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Add some visual separation between cards
|
|
124
|
+
tr:not(:last-child) {
|
|
125
|
+
margin-bottom: spacing('4');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
130
128
|
}
|
|
131
129
|
|
|
132
|
-
|
|
130
|
+
// Compact table
|
|
131
|
+
.mw-table-compact {
|
|
133
132
|
th,
|
|
134
133
|
td {
|
|
134
|
+
padding: spacing('1') spacing('2');
|
|
135
135
|
font-size: font-size('2xs');
|
|
136
136
|
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
137
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
@include media-up('sm') {
|
|
139
|
+
th,
|
|
140
|
+
td {
|
|
141
|
+
font-size: font-size('sm');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
144
|
}
|
|
145
|
-
}
|
|
146
145
|
|
|
147
|
-
//
|
|
148
|
-
.mw-table-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
var(--mw-gray-color) 20%,
|
|
153
|
-
var(--mw-card-background)
|
|
154
|
-
);
|
|
155
|
-
color: var(--mw-text-color);
|
|
156
|
-
border-bottom: 2px solid var(--mw-border-accent);
|
|
146
|
+
// Hoverable rows
|
|
147
|
+
.mw-table-hover {
|
|
148
|
+
tbody tr:hover {
|
|
149
|
+
background: var(--mw-primary-background);
|
|
150
|
+
}
|
|
157
151
|
}
|
|
158
|
-
}
|
|
159
152
|
|
|
160
|
-
//
|
|
161
|
-
.mw-table-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
153
|
+
// Quiet header for data-heavy views
|
|
154
|
+
.mw-table-subtle {
|
|
155
|
+
th {
|
|
156
|
+
background: color-mix(
|
|
157
|
+
in srgb,
|
|
158
|
+
var(--mw-gray-color) 20%,
|
|
159
|
+
var(--mw-card-background)
|
|
160
|
+
);
|
|
161
|
+
color: var(--mw-text-color);
|
|
162
|
+
border-bottom: 2px solid var(--mw-border-accent);
|
|
163
|
+
}
|
|
169
164
|
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.mw-table-responsive-scroll {
|
|
173
|
-
@extend .mw-table-responsive;
|
|
174
|
-
--mw-table-scroll-height: 400px;
|
|
175
|
-
max-height: var(--mw-table-scroll-height);
|
|
176
|
-
overflow-y: auto;
|
|
177
165
|
|
|
178
|
-
|
|
179
|
-
|
|
166
|
+
// Header stays visible while the body scrolls
|
|
167
|
+
.mw-table-sticky-head {
|
|
168
|
+
th {
|
|
169
|
+
position: sticky;
|
|
170
|
+
top: spacing('0');
|
|
171
|
+
z-index: z-index('lift');
|
|
172
|
+
box-shadow:
|
|
173
|
+
inset 0 1px 0 var(--mw-border),
|
|
174
|
+
inset 0 -1px 0 var(--mw-border);
|
|
175
|
+
}
|
|
180
176
|
}
|
|
181
177
|
|
|
182
|
-
|
|
183
|
-
|
|
178
|
+
.mw-table-responsive-scroll {
|
|
179
|
+
@extend .mw-table-responsive;
|
|
184
180
|
--mw-table-scroll-height: 260px;
|
|
181
|
+
max-height: var(--mw-table-scroll-height);
|
|
182
|
+
overflow-y: auto;
|
|
183
|
+
|
|
184
|
+
.mw-table {
|
|
185
|
+
margin-top: spacing('0');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Rows get shorter on small screens
|
|
189
|
+
@include media-up('sm') {
|
|
190
|
+
--mw-table-scroll-height: 400px;
|
|
191
|
+
}
|
|
185
192
|
}
|
|
186
193
|
}
|