maverick-wave 4.3.0 → 4.4.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/skills/maverick-wave/SKILL.md +2 -1
- package/.claude/skills/maverick-wave/examples/angular-form.md +4 -0
- package/.claude/skills/maverick-wave/references/forms.md +27 -0
- package/CHANGELOG.md +10 -0
- package/CLAUDE.md +10 -10
- package/README.md +9 -9
- package/maverick-wave.min.css +1 -1
- package/package.json +2 -2
- package/scripts/verify.js +5 -5
- package/src/js/main.js +3 -3
- package/src/partials/accordions-container.html +3 -3
- package/src/partials/blog-posts-container.html +1 -1
- package/src/partials/buttons-container.html +1 -1
- package/src/partials/colors-container.html +4 -4
- package/src/partials/footer-container.html +3 -3
- package/src/partials/form-elements-container.html +98 -0
- package/src/partials/form-field-container.html +20 -4
- package/src/partials/get-started-container.html +19 -19
- package/src/partials/header-utilities-container.html +1 -1
- package/src/partials/modals-container.html +1 -1
- package/src/partials/ratings-container.html +1 -1
- package/src/partials/segmented-container.html +2 -2
- package/src/partials/tables-container.html +4 -4
- package/src/partials/tags-container.html +1 -1
- package/src/partials/timelines-container.html +5 -5
- package/src/partials/utilities-container.html +1 -1
- package/src/scss/abstracts/_variables.scss +7 -2
- package/src/scss/base/_base.scss +1 -1
- package/src/scss/components/_avatars.scss +1 -1
- package/src/scss/components/_kanban.scss +9 -9
- package/src/scss/form-elements/_checkbox.scss +1 -1
- package/src/scss/form-elements/_form.scss +2 -2
- package/src/scss/form-elements/_index.scss +1 -0
- package/src/scss/form-elements/_input-group.scss +1 -1
- package/src/scss/form-elements/_input.scss +3 -3
- package/src/scss/form-elements/_prefilled.scss +65 -0
- package/src/scss/form-elements/_select.scss +2 -2
- package/src/scss/form-elements/_slider.scss +1 -1
- package/src/scss/form-elements/_textarea.scss +2 -2
- package/src/scss/layout/_header.scss +1 -1
- package/src/scss/utilities/_flex.scss +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use '../abstracts' as *;
|
|
2
2
|
|
|
3
|
-
// Pixel-precise shape values
|
|
3
|
+
// Pixel-precise shape values - no fractional keys in the spacing map
|
|
4
4
|
$_mw-kanban-action-size: 26px;
|
|
5
5
|
$_mw-kanban-action-size-touch: 32px;
|
|
6
6
|
// Room the ribbon needs in the top right corner of a ticket
|
|
@@ -22,7 +22,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
22
22
|
// Board
|
|
23
23
|
// ---------------------------------------------------------------------------
|
|
24
24
|
.mw-kanban {
|
|
25
|
-
// Board surface
|
|
25
|
+
// Board surface - drop it with .mw-kanban-plain or override per board.
|
|
26
26
|
--mw-kanban-background: color-mix(
|
|
27
27
|
in srgb,
|
|
28
28
|
var(--mw-gray-color) 40%,
|
|
@@ -30,7 +30,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
30
30
|
);
|
|
31
31
|
--mw-kanban-lane-border: 1px dashed
|
|
32
32
|
color-mix(in srgb, var(--mw-text-muted-color) 40%, transparent);
|
|
33
|
-
// Keeps an empty lane from collapsing onto its header
|
|
33
|
+
// Keeps an empty lane from collapsing onto its header - raise it per board
|
|
34
34
|
// to give a board that starts out empty some presence
|
|
35
35
|
--mw-kanban-column-min-height: 120px;
|
|
36
36
|
|
|
@@ -55,7 +55,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
// Board without its own surface
|
|
58
|
+
// Board without its own surface - for pages that already sit on a panel
|
|
59
59
|
.mw-kanban-plain {
|
|
60
60
|
--mw-kanban-background: transparent;
|
|
61
61
|
padding: spacing('0');
|
|
@@ -108,7 +108,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
108
108
|
flex-shrink: 0;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
// Sits on .mw-btn
|
|
111
|
+
// Sits on .mw-btn - this only trims it down to the header's line height
|
|
112
112
|
.mw-kanban-add {
|
|
113
113
|
padding: spacing('1') spacing('3');
|
|
114
114
|
line-height: 1;
|
|
@@ -124,7 +124,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
124
124
|
min-height: var(--mw-kanban-column-min-height);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
// Ticket
|
|
127
|
+
// Ticket - a plain .mw-card, only smaller
|
|
128
128
|
.mw-kanban-card {
|
|
129
129
|
padding: spacing('4');
|
|
130
130
|
|
|
@@ -169,7 +169,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
169
169
|
line-height: 1.45;
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
// Footer
|
|
172
|
+
// Footer - ticket key on the left, assignee and the action buttons on the right
|
|
173
173
|
.mw-kanban-card-footer {
|
|
174
174
|
display: flex;
|
|
175
175
|
align-items: center;
|
|
@@ -247,7 +247,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
247
247
|
border-color: var(--mw-danger-color);
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
// Composer
|
|
250
|
+
// Composer - one per board, moved into whichever lane it is needed in
|
|
251
251
|
.mw-kanban-composer {
|
|
252
252
|
display: none;
|
|
253
253
|
flex-direction: column;
|
|
@@ -310,7 +310,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
310
310
|
display: none;
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
-
// Compact board
|
|
313
|
+
// Compact board - for many lanes or a board next to a sidebar
|
|
314
314
|
.mw-kanban-compact {
|
|
315
315
|
--mw-kanban-column-min-height: 90px;
|
|
316
316
|
|
|
@@ -5,7 +5,7 @@ $_size-sm: spacing('5');
|
|
|
5
5
|
$_size-default: spacing('6');
|
|
6
6
|
$_size-lg: spacing('7');
|
|
7
7
|
|
|
8
|
-
// Checkmark dimensions (not from spacing map
|
|
8
|
+
// Checkmark dimensions (not from spacing map - these are shape-drawing values)
|
|
9
9
|
$_check-sm-w: 9px;
|
|
10
10
|
$_check-sm-h: 6px;
|
|
11
11
|
$_check-default-w: 14px;
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
// ===== Form Field
|
|
87
|
+
// ===== Form Field - label + input + hint + error as a unit =====
|
|
88
88
|
// Designed e.g. for Angular reactive forms pattern:
|
|
89
89
|
// <div class="mw-field">
|
|
90
90
|
// <label class="mw-field-label mw-required">Email</label>
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
color: var(--mw-text-color);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
// Required field asterisk
|
|
106
|
+
// Required field asterisk - add class mw-required or attribute data-required
|
|
107
107
|
&-label.mw-required::after,
|
|
108
108
|
&-label[data-required='true']::after {
|
|
109
109
|
content: ' *';
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
&:read-only {
|
|
30
|
-
background: var(--mw-gray-background);
|
|
30
|
+
background-color: var(--mw-gray-background);
|
|
31
31
|
color: var(--mw-text-muted-color);
|
|
32
32
|
cursor: default;
|
|
33
33
|
box-shadow: none;
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
// Date / time inputs
|
|
69
|
+
// Date / time inputs - style the native picker indicator
|
|
70
70
|
&[type='date'],
|
|
71
71
|
&[type='time'],
|
|
72
72
|
&[type='datetime-local'] {
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
|
|
86
86
|
// disabled state
|
|
87
87
|
&:disabled {
|
|
88
|
-
background: var(--mw-gray-background);
|
|
88
|
+
background-color: var(--mw-gray-background);
|
|
89
89
|
color: var(--mw-text-muted-color);
|
|
90
90
|
cursor: not-allowed;
|
|
91
91
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
@use '../abstracts' as *;
|
|
2
|
+
|
|
3
|
+
// ===== Prefilled marker =====
|
|
4
|
+
// Marks a control whose value did not come from the user in this session -
|
|
5
|
+
// loaded from an existing record, restored from a draft, filled with a
|
|
6
|
+
// default. Add `mw-prefilled` to the control itself, not to the wrapper, so
|
|
7
|
+
// it also works outside `mw-field` (input groups, standalone selects).
|
|
8
|
+
|
|
9
|
+
$_marker-sm: 10px;
|
|
10
|
+
$_marker-base: 12px;
|
|
11
|
+
$_marker-lg: 14px;
|
|
12
|
+
|
|
13
|
+
// 135deg puts the hard edge on the anti-diagonal, which fills the top left
|
|
14
|
+
// half of the background box - a right triangle pointing into the corner.
|
|
15
|
+
$_marker-image: linear-gradient(
|
|
16
|
+
135deg,
|
|
17
|
+
var(--mw-info-color) 50%,
|
|
18
|
+
transparent 50%
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
@mixin _marker($size) {
|
|
22
|
+
background-image: $_marker-image;
|
|
23
|
+
background-repeat: no-repeat;
|
|
24
|
+
background-position: left top;
|
|
25
|
+
background-size: $size $size;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// A select already paints its arrow, so adding a layer means restating both.
|
|
29
|
+
@mixin _marker-select($size, $arrow-inset, $arrow-size) {
|
|
30
|
+
background-image: $_marker-image, $select-arrow-image;
|
|
31
|
+
background-repeat: no-repeat;
|
|
32
|
+
background-position:
|
|
33
|
+
left top,
|
|
34
|
+
right $arrow-inset center;
|
|
35
|
+
background-size:
|
|
36
|
+
$size $size,
|
|
37
|
+
$arrow-size $arrow-size;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.mw-prefilled {
|
|
41
|
+
@include _marker($_marker-base);
|
|
42
|
+
|
|
43
|
+
&.mw-input-sm,
|
|
44
|
+
&.mw-textarea-sm {
|
|
45
|
+
@include _marker($_marker-sm);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&.mw-input-lg,
|
|
49
|
+
&.mw-textarea-lg {
|
|
50
|
+
@include _marker($_marker-lg);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Selects last: each size restates the arrow layer it would otherwise lose.
|
|
54
|
+
&.mw-select {
|
|
55
|
+
@include _marker-select($_marker-base, spacing('3'), spacing('3'));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&.mw-select-sm {
|
|
59
|
+
@include _marker-select($_marker-sm, spacing('2'), spacing('2'));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&.mw-select-lg {
|
|
63
|
+
@include _marker-select($_marker-lg, spacing('4'), spacing('4'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
transition: var(--mw-transition);
|
|
12
12
|
appearance: none;
|
|
13
13
|
-webkit-appearance: none;
|
|
14
|
-
background-image:
|
|
14
|
+
background-image: $select-arrow-image;
|
|
15
15
|
background-repeat: no-repeat;
|
|
16
16
|
background-position: right spacing('3') center;
|
|
17
17
|
background-size: spacing('3') spacing('3');
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
|
|
45
45
|
// disabled state
|
|
46
46
|
&:disabled {
|
|
47
|
-
background: var(--mw-gray-background);
|
|
47
|
+
background-color: var(--mw-gray-background);
|
|
48
48
|
color: var(--mw-text-muted-color);
|
|
49
49
|
cursor: not-allowed;
|
|
50
50
|
}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
&:read-only {
|
|
33
|
-
background: var(--mw-gray-background);
|
|
33
|
+
background-color: var(--mw-gray-background);
|
|
34
34
|
color: var(--mw-text-muted-color);
|
|
35
35
|
cursor: default;
|
|
36
36
|
box-shadow: none;
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
// disabled state
|
|
60
60
|
&:disabled {
|
|
61
|
-
background: var(--mw-gray-background);
|
|
61
|
+
background-color: var(--mw-gray-background);
|
|
62
62
|
color: var(--mw-text-muted-color);
|
|
63
63
|
cursor: not-allowed;
|
|
64
64
|
}
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
&:disabled {
|
|
82
|
-
// Same treatment as every other disabled button
|
|
82
|
+
// Same treatment as every other disabled button - a theme-bound text
|
|
83
83
|
// color would go dark on this always-primary surface in light mode
|
|
84
84
|
opacity: 0.6;
|
|
85
85
|
cursor: not-allowed;
|