@vmz/ui 0.3.5 → 0.3.7
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/package.json +2 -2
- package/presets/web-surface.v0.json +19 -7
- package/src/components/Accordion.vmz +2 -2
- package/src/components/AppShell.vmz +79 -32
- package/src/components/Autocomplete.vmz +3 -3
- package/src/components/Badge.vmz +1 -1
- package/src/components/Breadcrumb.vmz +3 -3
- package/src/components/BulkActions.vmz +2 -2
- package/src/components/Button.vmz +38 -17
- package/src/components/Callout.vmz +1 -1
- package/src/components/Card.vmz +19 -5
- package/src/components/Checkbox.vmz +2 -2
- package/src/components/CodeBlock.vmz +93 -19
- package/src/components/ConsoleShell.vmz +21 -21
- package/src/components/DataTable.vmz +4 -4
- package/src/components/DatePicker.vmz +9 -9
- package/src/components/Dialog.vmz +26 -7
- package/src/components/Drawer.vmz +3 -3
- package/src/components/Dropdown.vmz +181 -16
- package/src/components/Empty.vmz +1 -1
- package/src/components/Field.vmz +4 -4
- package/src/components/FormItem.vmz +1 -1
- package/src/components/Link.vmz +38 -4
- package/src/components/List.vmz +2 -2
- package/src/components/Menu.vmz +4 -4
- package/src/components/Pagination.vmz +7 -5
- package/src/components/Popover.vmz +3 -3
- package/src/components/Prose.vmz +1 -1
- package/src/components/RadioGroup.vmz +4 -4
- package/src/components/Segmented.vmz +1 -1
- package/src/components/Select.vmz +12 -12
- package/src/components/Steps.vmz +1 -1
- package/src/components/Switch.vmz +2 -2
- package/src/components/Table.vmz +45 -13
- package/src/components/Tabs.vmz +3 -3
- package/src/components/Tag.vmz +5 -2
- package/src/components/TextArea.vmz +4 -4
- package/src/components/Timeline.vmz +2 -2
- package/src/components/Toc.vmz +3 -3
- package/src/components/Tooltip.vmz +4 -4
- package/src/components/Tree.vmz +4 -4
- package/src/components/Upload.vmz +23 -13
package/package.json
CHANGED
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"license": "MIT",
|
|
83
83
|
"name": "@vmz/ui",
|
|
84
84
|
"peerDependencies": {
|
|
85
|
-
"@vmz/ui-icons": "0.3.
|
|
85
|
+
"@vmz/ui-icons": "0.3.7"
|
|
86
86
|
},
|
|
87
87
|
"peerDependenciesMeta": {
|
|
88
88
|
"@vmz/ui-icons": {
|
|
@@ -98,5 +98,5 @@
|
|
|
98
98
|
"url": "git+https://github.com/doki-land/vmz-framework.git"
|
|
99
99
|
},
|
|
100
100
|
"type": "module",
|
|
101
|
-
"version": "0.3.
|
|
101
|
+
"version": "0.3.7"
|
|
102
102
|
}
|
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
"package": "@vmz/ui",
|
|
5
5
|
"materialize": "Copy or resolve into application /designs Style Theme (tokens/*.json + themes/*.json). Preset is not a second runtime theme.",
|
|
6
6
|
"foundation": {
|
|
7
|
-
"radius": {
|
|
7
|
+
"radius": {
|
|
8
|
+
"xs": "2px",
|
|
9
|
+
"sm": "4px",
|
|
10
|
+
"md": "6px",
|
|
11
|
+
"lg": "8px",
|
|
12
|
+
"pill": "999px"
|
|
13
|
+
},
|
|
8
14
|
"controlHeight": { "sm": "1.5rem", "middle": "2rem", "lg": "2.5rem" },
|
|
9
15
|
"layoutMaxWidth": "75rem",
|
|
10
16
|
"surfacePage": "#F5F5F5",
|
|
@@ -14,22 +20,28 @@
|
|
|
14
20
|
"lineSubtle": "#F0F0F0",
|
|
15
21
|
"shadowCard": "none",
|
|
16
22
|
"shadowCardHover": "0 1px 2px -2px rgba(0,0,0,.08), 0 3px 6px 0 rgba(0,0,0,.06), 0 5px 12px 4px rgba(0,0,0,.04)",
|
|
17
|
-
"shadowPopup": "0 6px 16px 0 rgba(0,0,0,.08), 0 3px 6px -4px rgba(0,0,0,.12), 0 9px 28px 8px rgba(0,0,0,.05)"
|
|
23
|
+
"shadowPopup": "0 6px 16px 0 rgba(0,0,0,.08), 0 3px 6px -4px rgba(0,0,0,.12), 0 9px 28px 8px rgba(0,0,0,.05)",
|
|
24
|
+
"elevation": {
|
|
25
|
+
"note": "Floating layers only. Cards stay flat per visualIntent; interactive surfaces lift on hover, never at rest.",
|
|
26
|
+
"float-sm": "0 1px 2px 0 rgba(0,0,0,.03), 0 1px 6px -1px rgba(0,0,0,.02), 0 2px 4px 0 rgba(0,0,0,.02)",
|
|
27
|
+
"float-md": "0 6px 16px 0 rgba(0,0,0,.08), 0 3px 6px -4px rgba(0,0,0,.12), 0 9px 28px 8px rgba(0,0,0,.05)",
|
|
28
|
+
"float-lg": "0 6px 16px 0 rgba(0,0,0,.08), 0 3px 6px -4px rgba(0,0,0,.12), 0 9px 28px 8px rgba(0,0,0,.05), 0 12px 48px 16px rgba(0,0,0,.03)"
|
|
29
|
+
}
|
|
18
30
|
},
|
|
19
31
|
"density": {
|
|
20
32
|
"control": {
|
|
21
33
|
"padding-y": "0.25rem",
|
|
22
|
-
"padding-x": "0.
|
|
34
|
+
"padding-x": "0.9375rem",
|
|
23
35
|
"gap": "0.5rem"
|
|
24
36
|
},
|
|
25
37
|
"compact": {
|
|
26
38
|
"padding-y": "0.125rem",
|
|
27
|
-
"padding-x": "0.
|
|
28
|
-
"gap": "0.
|
|
39
|
+
"padding-x": "0.625rem",
|
|
40
|
+
"gap": "0.375rem"
|
|
29
41
|
},
|
|
30
42
|
"dense": {
|
|
31
43
|
"padding-y": "0",
|
|
32
|
-
"padding-x": "0.
|
|
44
|
+
"padding-x": "0.4375rem",
|
|
33
45
|
"gap": "0.25rem"
|
|
34
46
|
}
|
|
35
47
|
},
|
|
@@ -44,5 +56,5 @@
|
|
|
44
56
|
"dark": "themes/dark.json overlay",
|
|
45
57
|
"high-contrast": "themes/high-contrast.json overlay — stronger ink/line/focus"
|
|
46
58
|
},
|
|
47
|
-
"visualIntent": "Modern commercial product chrome: neutral structure borders (never brand outline on every box), flat cards, soft focus rings, quiet page fill. Brand color is for actions/selection — not scaffolding."
|
|
59
|
+
"visualIntent": "Modern commercial product chrome: neutral structure borders (never brand outline on every box), flat cards, soft focus rings, quiet page fill. Brand color is for actions/selection — not scaffolding. Elevation is reserved for floating layers and hover lift; nothing casts a resting shadow. Motion eases, never jumps: control transitions use a decelerate curve, overlays use a fast-in curve, and reduced-motion is honored."
|
|
48
60
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
.vmz-ui-accordion {
|
|
17
17
|
display: flex;
|
|
18
18
|
flex-direction: column;
|
|
19
|
-
gap: 0.
|
|
19
|
+
gap: 0.375rem;
|
|
20
20
|
max-width: 36rem;
|
|
21
21
|
border: 1px solid var(--vmz-line-default);
|
|
22
22
|
border-radius: var(--vmz-radius-md, 6px);
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
.vmz-ui-accordion__trigger:focus-visible {
|
|
59
|
-
box-shadow: inset 0 0 0
|
|
59
|
+
box-shadow: inset 0 0 0 3px var(--vmz-focus-ring);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.vmz-ui-accordion__trigger[aria-expanded="true"] {
|
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
{{ brand }}
|
|
7
7
|
</a>
|
|
8
8
|
<nav :aria-label="navLabel" class="vmz-ui-app-shell__nav">
|
|
9
|
-
<a v-for="item in nav" :key="item.id" :href="item.href" :data-vmz-nav="item.id">
|
|
9
|
+
<a v-for="item in nav" :key="item.id" :href="item.href" :data-vmz-nav="item.id" :data-active="item.id === activeId ? 'true' : 'false'" :aria-current="item.id === activeId ? 'page' : null" class="vmz-ui-app-shell__nav-item">
|
|
10
10
|
{{ item.title }}
|
|
11
11
|
</a>
|
|
12
12
|
</nav>
|
|
13
|
+
<div class="vmz-ui-app-shell__actions">
|
|
14
|
+
<slot name="actions" />
|
|
15
|
+
</div>
|
|
13
16
|
</div>
|
|
14
17
|
</header>
|
|
15
18
|
<main data-vmz-shell="main" class="vmz-ui-app-shell__main">
|
|
@@ -31,83 +34,124 @@
|
|
|
31
34
|
top: 0;
|
|
32
35
|
z-index: 30;
|
|
33
36
|
border-bottom: 1px solid var(--vmz-line-subtle, var(--vmz-line-default));
|
|
34
|
-
background: var(--vmz-surface-paper);
|
|
37
|
+
background: color-mix(in srgb, var(--vmz-surface-paper) 88%, transparent);
|
|
38
|
+
backdrop-filter: saturate(180%) blur(0.5rem);
|
|
39
|
+
-webkit-backdrop-filter: saturate(180%) blur(0.5rem);
|
|
35
40
|
}
|
|
41
|
+
|
|
36
42
|
.vmz-ui-app-shell__header-inner {
|
|
37
43
|
width: min(var(--vmz-layout-max-width, 75rem), calc(100% - 2rem));
|
|
38
|
-
min-height:
|
|
44
|
+
min-height: 3.5rem;
|
|
39
45
|
margin: 0 auto;
|
|
40
46
|
display: flex;
|
|
41
47
|
align-items: center;
|
|
42
|
-
justify-content: space-between;
|
|
43
48
|
gap: 1.5rem;
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
.vmz-ui-app-shell__brand {
|
|
52
|
+
flex: none;
|
|
53
|
+
color: var(--vmz-text-ink);
|
|
47
54
|
font-family: var(--vmz-font-sans);
|
|
48
|
-
font-
|
|
49
|
-
font-
|
|
50
|
-
letter-spacing: 0;
|
|
55
|
+
font-size: 1.0625rem;
|
|
56
|
+
font-weight: 650;
|
|
57
|
+
letter-spacing: -0.01em;
|
|
51
58
|
text-decoration: none;
|
|
52
|
-
|
|
59
|
+
border-radius: var(--vmz-radius-sm, 4px);
|
|
60
|
+
outline: none;
|
|
61
|
+
transition: color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.vmz-ui-app-shell__brand:hover {
|
|
65
|
+
color: var(--vmz-action-primary-background);
|
|
53
66
|
}
|
|
54
67
|
|
|
55
68
|
.vmz-ui-app-shell__brand:focus-visible {
|
|
56
|
-
|
|
57
|
-
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
69
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
58
70
|
}
|
|
59
71
|
|
|
60
72
|
.vmz-ui-app-shell__nav {
|
|
61
73
|
display: flex;
|
|
74
|
+
flex: 1 1 auto;
|
|
62
75
|
flex-wrap: wrap;
|
|
63
|
-
gap: 0.
|
|
76
|
+
gap: 0.125rem;
|
|
77
|
+
min-width: 0;
|
|
64
78
|
}
|
|
65
79
|
|
|
66
|
-
.vmz-ui-app-shell__nav
|
|
80
|
+
.vmz-ui-app-shell__nav-item {
|
|
81
|
+
position: relative;
|
|
82
|
+
padding: 0.375rem 0.75rem;
|
|
83
|
+
border-radius: var(--vmz-radius-sm, 4px);
|
|
84
|
+
color: var(--vmz-text-steel);
|
|
67
85
|
font: inherit;
|
|
68
86
|
font-size: 0.875rem;
|
|
69
|
-
font-weight:
|
|
87
|
+
font-weight: 500;
|
|
88
|
+
line-height: 1.4286;
|
|
70
89
|
text-decoration: none;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
90
|
+
white-space: nowrap;
|
|
91
|
+
outline: none;
|
|
92
|
+
transition:
|
|
93
|
+
color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1)),
|
|
94
|
+
background-color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
74
95
|
}
|
|
75
96
|
|
|
76
|
-
.vmz-ui-app-shell__nav
|
|
77
|
-
color: var(--vmz-
|
|
97
|
+
.vmz-ui-app-shell__nav-item:hover {
|
|
98
|
+
color: var(--vmz-text-ink);
|
|
78
99
|
background: var(--vmz-surface-mist, #fafafa);
|
|
79
100
|
}
|
|
80
101
|
|
|
81
|
-
.vmz-ui-app-shell__nav
|
|
82
|
-
|
|
83
|
-
|
|
102
|
+
.vmz-ui-app-shell__nav-item:focus-visible {
|
|
103
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Current section: ink emphasis plus a hairline marker, no brand fill. */
|
|
107
|
+
.vmz-ui-app-shell__nav-item[data-active="true"] {
|
|
108
|
+
color: var(--vmz-text-ink);
|
|
109
|
+
font-weight: 600;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.vmz-ui-app-shell__nav-item[data-active="true"]::after {
|
|
113
|
+
content: "";
|
|
114
|
+
position: absolute;
|
|
115
|
+
inset: auto 0.75rem 0;
|
|
116
|
+
height: 2px;
|
|
117
|
+
border-radius: var(--vmz-radius-pill, 999px);
|
|
118
|
+
background: var(--vmz-action-primary-background);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.vmz-ui-app-shell__actions {
|
|
122
|
+
flex: none;
|
|
123
|
+
display: flex;
|
|
124
|
+
align-items: center;
|
|
125
|
+
gap: 0.5rem;
|
|
126
|
+
margin-left: auto;
|
|
84
127
|
}
|
|
85
128
|
|
|
86
129
|
.vmz-ui-app-shell__main {
|
|
87
130
|
flex: 1;
|
|
88
131
|
width: min(var(--vmz-layout-max-width, 75rem), calc(100% - 2rem));
|
|
89
132
|
margin: 0 auto;
|
|
90
|
-
padding: 1.
|
|
133
|
+
padding: 1.75rem 0 3rem;
|
|
91
134
|
display: flex;
|
|
92
135
|
flex-direction: column;
|
|
93
136
|
gap: 1rem;
|
|
94
137
|
}
|
|
138
|
+
|
|
95
139
|
@media (max-width: 720px) {
|
|
96
140
|
.vmz-ui-app-shell__header-inner {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
gap: 0.35rem;
|
|
101
|
-
padding: 0.7rem 0;
|
|
141
|
+
flex-wrap: wrap;
|
|
142
|
+
gap: 0.5rem 0.75rem;
|
|
143
|
+
padding: 0.625rem 0;
|
|
102
144
|
}
|
|
103
145
|
.vmz-ui-app-shell__nav {
|
|
104
|
-
|
|
146
|
+
order: 3;
|
|
147
|
+
flex-basis: 100%;
|
|
105
148
|
overflow-x: auto;
|
|
106
149
|
flex-wrap: nowrap;
|
|
107
|
-
padding-bottom: 0.
|
|
150
|
+
padding-bottom: 0.125rem;
|
|
151
|
+
scrollbar-width: none;
|
|
108
152
|
}
|
|
109
|
-
.vmz-ui-app-shell__nav
|
|
110
|
-
|
|
153
|
+
.vmz-ui-app-shell__nav::-webkit-scrollbar {
|
|
154
|
+
display: none;
|
|
111
155
|
}
|
|
112
156
|
.vmz-ui-app-shell__main {
|
|
113
157
|
padding-top: 1.25rem;
|
|
@@ -117,12 +161,15 @@
|
|
|
117
161
|
<script client>
|
|
118
162
|
/**
|
|
119
163
|
* VMZ UI — AppShell (Commercial composition).
|
|
120
|
-
* Landmark header/nav + main slot.
|
|
164
|
+
* Landmark header/nav + main slot. `nav` stays flat link-only; non-nav controls
|
|
165
|
+
* go into the named `actions` slot. Parent supplies copy; no private theme.
|
|
121
166
|
*/
|
|
122
167
|
export default class AppShell {
|
|
123
168
|
public brand: string = "VMZ";
|
|
124
169
|
public homeHref: string = "/";
|
|
125
170
|
public navLabel: string = "Primary";
|
|
171
|
+
/** Id of the nav item representing the current page, for `aria-current` + marker. */
|
|
172
|
+
public activeId: string = "";
|
|
126
173
|
/** @type {{ id: string, title: string, href: string }[]} */
|
|
127
174
|
public nav: {
|
|
128
175
|
id: string;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
position: relative;
|
|
26
26
|
display: flex;
|
|
27
27
|
flex-direction: column;
|
|
28
|
-
gap: 0.
|
|
28
|
+
gap: 0.375rem;
|
|
29
29
|
max-width: 28rem;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.vmz-ui-autocomplete__control:focus-visible {
|
|
52
|
-
box-shadow: 0 0 0
|
|
52
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.vmz-ui-autocomplete__control:disabled {
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
|
|
71
71
|
.vmz-ui-autocomplete__option {
|
|
72
72
|
margin: 0;
|
|
73
|
-
padding: 0.
|
|
73
|
+
padding: 0.5rem 0.75rem;
|
|
74
74
|
cursor: pointer;
|
|
75
75
|
font-weight: 600;
|
|
76
76
|
color: var(--vmz-text-ink);
|
package/src/components/Badge.vmz
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
.vmz-ui-breadcrumb__list {
|
|
21
21
|
display: flex;
|
|
22
22
|
flex-wrap: wrap;
|
|
23
|
-
gap: 0.
|
|
23
|
+
gap: 0.375rem 0.5rem;
|
|
24
24
|
margin: 0;
|
|
25
25
|
padding: 0;
|
|
26
26
|
list-style: none;
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
.vmz-ui-breadcrumb__item {
|
|
31
31
|
display: inline-flex;
|
|
32
32
|
align-items: center;
|
|
33
|
-
gap: 0.
|
|
33
|
+
gap: 0.5rem;
|
|
34
34
|
font-weight: 600;
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
.vmz-ui-breadcrumb__link:focus-visible {
|
|
50
50
|
outline: none;
|
|
51
|
-
box-shadow: 0 0 0
|
|
51
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
.vmz-ui-breadcrumb__current {
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
flex-wrap: wrap;
|
|
15
15
|
align-items: center;
|
|
16
16
|
justify-content: space-between;
|
|
17
|
-
gap: 0.
|
|
18
|
-
padding: 0.
|
|
17
|
+
gap: 0.625rem 1rem;
|
|
18
|
+
padding: 0.625rem 0.85rem;
|
|
19
19
|
border: 1px solid var(--vmz-line-default);
|
|
20
20
|
border-radius: var(--vmz-radius-md, 6px);
|
|
21
21
|
background: transparent;
|
|
@@ -13,34 +13,38 @@
|
|
|
13
13
|
display: inline-flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
justify-content: center;
|
|
16
|
-
gap: 0.
|
|
16
|
+
gap: 0.375rem;
|
|
17
|
+
/* Inline control: never stretch when the parent is a flex column (shells, card bodies). */
|
|
18
|
+
width: fit-content;
|
|
17
19
|
min-height: var(--vmz-control-height, 2rem);
|
|
18
20
|
padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
|
|
19
21
|
border: 1px solid transparent;
|
|
20
22
|
border-radius: var(--vmz-radius-md, 6px);
|
|
21
23
|
font: inherit;
|
|
22
24
|
font-size: 0.875rem;
|
|
23
|
-
font-weight:
|
|
25
|
+
font-weight: 500;
|
|
24
26
|
line-height: 1.5715;
|
|
27
|
+
white-space: nowrap;
|
|
25
28
|
cursor: pointer;
|
|
26
29
|
background: var(--vmz-action-primary-background);
|
|
27
30
|
color: var(--vmz-action-primary-foreground);
|
|
28
31
|
outline: none;
|
|
29
|
-
box-shadow:
|
|
32
|
+
box-shadow: 0 2px 0 color-mix(in srgb, var(--vmz-action-primary-background) 12%, transparent);
|
|
30
33
|
transition:
|
|
31
|
-
background-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
|
|
32
|
-
border-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
|
|
33
|
-
color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing)
|
|
34
|
+
background-color var(--vmz-motion-control-duration, 120ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1)),
|
|
35
|
+
border-color var(--vmz-motion-control-duration, 120ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1)),
|
|
36
|
+
color var(--vmz-motion-control-duration, 120ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1)),
|
|
37
|
+
box-shadow var(--vmz-motion-control-duration, 120ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
.vmz-ui-btn[data-size="small"] {
|
|
37
41
|
min-height: var(--vmz-control-height-sm, 1.5rem);
|
|
38
|
-
padding: 0 0.
|
|
39
|
-
font-size: 0.
|
|
42
|
+
padding: 0 0.625rem;
|
|
43
|
+
font-size: 0.8125rem;
|
|
40
44
|
}
|
|
41
45
|
.vmz-ui-btn[data-size="large"] {
|
|
42
46
|
min-height: var(--vmz-control-height-lg, 2.5rem);
|
|
43
|
-
padding: 0.
|
|
47
|
+
padding: 0.4375rem 1.125rem;
|
|
44
48
|
font-size: 1rem;
|
|
45
49
|
}
|
|
46
50
|
.vmz-ui-btn[data-block="true"] {
|
|
@@ -52,9 +56,10 @@
|
|
|
52
56
|
.vmz-ui-btn__spinner {
|
|
53
57
|
width: 1em;
|
|
54
58
|
height: 1em;
|
|
55
|
-
border:
|
|
59
|
+
border: 1.5px solid currentColor;
|
|
56
60
|
border-right-color: transparent;
|
|
57
61
|
border-radius: 50%;
|
|
62
|
+
opacity: 0.8;
|
|
58
63
|
animation: vmz-btn-spin 0.7s linear infinite;
|
|
59
64
|
}
|
|
60
65
|
@keyframes vmz-btn-spin {
|
|
@@ -69,35 +74,37 @@
|
|
|
69
74
|
|
|
70
75
|
.vmz-ui-btn:active:not(:disabled) {
|
|
71
76
|
background: var(--vmz-action-primary-active);
|
|
77
|
+
transform: translateY(0.5px);
|
|
72
78
|
}
|
|
73
79
|
|
|
74
80
|
.vmz-ui-btn[data-variant="secondary"] {
|
|
75
81
|
background: var(--vmz-action-secondary-background);
|
|
76
82
|
color: var(--vmz-action-secondary-foreground);
|
|
77
83
|
border-color: var(--vmz-action-secondary-border);
|
|
84
|
+
box-shadow: none;
|
|
78
85
|
}
|
|
79
86
|
.vmz-ui-btn[data-variant="default"] {
|
|
80
|
-
background:
|
|
87
|
+
background: var(--vmz-surface-paper);
|
|
81
88
|
color: var(--vmz-text-ink);
|
|
82
89
|
border-color: var(--vmz-line-default);
|
|
83
90
|
box-shadow: none;
|
|
84
91
|
}
|
|
85
92
|
.vmz-ui-btn[data-variant="default"]:hover:not(:disabled) {
|
|
86
|
-
color: var(--vmz-action-primary-
|
|
87
|
-
border-color: var(--vmz-action-primary-
|
|
88
|
-
background:
|
|
93
|
+
color: var(--vmz-action-primary-hover);
|
|
94
|
+
border-color: var(--vmz-action-primary-hover);
|
|
95
|
+
background: var(--vmz-surface-paper);
|
|
89
96
|
}
|
|
90
97
|
.vmz-ui-btn[data-variant="text"],
|
|
91
98
|
.vmz-ui-btn[data-variant="link"] {
|
|
92
99
|
min-height: auto;
|
|
93
|
-
padding: 0.25rem 0.
|
|
100
|
+
padding: 0.25rem 0.5rem;
|
|
94
101
|
border-color: transparent;
|
|
95
102
|
background: transparent;
|
|
96
103
|
color: var(--vmz-action-primary-background);
|
|
97
104
|
box-shadow: none;
|
|
98
105
|
}
|
|
99
106
|
.vmz-ui-btn[data-variant="dashed"] {
|
|
100
|
-
background:
|
|
107
|
+
background: var(--vmz-surface-paper);
|
|
101
108
|
color: var(--vmz-text-ink);
|
|
102
109
|
border: 1px dashed var(--vmz-line-default);
|
|
103
110
|
box-shadow: none;
|
|
@@ -141,12 +148,23 @@
|
|
|
141
148
|
}
|
|
142
149
|
|
|
143
150
|
.vmz-ui-btn:focus-visible {
|
|
144
|
-
box-shadow: 0 0 0
|
|
151
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.vmz-ui-btn[data-variant="default"]:focus-visible,
|
|
155
|
+
.vmz-ui-btn[data-variant="dashed"]:focus-visible,
|
|
156
|
+
.vmz-ui-btn[data-variant="secondary"]:focus-visible,
|
|
157
|
+
.vmz-ui-btn[data-variant="ghost"]:focus-visible,
|
|
158
|
+
.vmz-ui-btn[data-variant="text"]:focus-visible,
|
|
159
|
+
.vmz-ui-btn[data-variant="link"]:focus-visible {
|
|
160
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
145
161
|
}
|
|
146
162
|
|
|
147
163
|
.vmz-ui-btn:disabled {
|
|
148
164
|
opacity: 0.55;
|
|
149
165
|
cursor: not-allowed;
|
|
166
|
+
box-shadow: none;
|
|
167
|
+
transform: none;
|
|
150
168
|
}
|
|
151
169
|
|
|
152
170
|
:where([data-density="compact"]) .vmz-ui-btn {
|
|
@@ -161,6 +179,9 @@
|
|
|
161
179
|
.vmz-ui-btn {
|
|
162
180
|
transition: none;
|
|
163
181
|
}
|
|
182
|
+
.vmz-ui-btn:active:not(:disabled) {
|
|
183
|
+
transform: none;
|
|
184
|
+
}
|
|
164
185
|
}
|
|
165
186
|
</style>
|
|
166
187
|
<script client>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
.vmz-ui-callout {
|
|
16
16
|
display: flex;
|
|
17
17
|
flex-direction: column;
|
|
18
|
-
gap: 0.
|
|
18
|
+
gap: 0.5rem;
|
|
19
19
|
padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
|
|
20
20
|
border: 1px solid var(--vmz-status-info-accent);
|
|
21
21
|
border-left-width: 1px;
|
package/src/components/Card.vmz
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
display: flex;
|
|
19
19
|
flex-direction: column;
|
|
20
20
|
gap: 0.75rem;
|
|
21
|
-
padding:
|
|
21
|
+
padding: 1.25rem 1.5rem;
|
|
22
22
|
border: 1px solid var(--vmz-line-subtle, var(--vmz-line-default));
|
|
23
23
|
border-radius: var(--vmz-radius-lg, 8px);
|
|
24
24
|
background: var(--vmz-surface-paper);
|
|
@@ -30,19 +30,33 @@
|
|
|
30
30
|
}
|
|
31
31
|
.vmz-ui-card[data-hoverable="true"] {
|
|
32
32
|
transition:
|
|
33
|
-
border-color var(--vmz-motion-
|
|
34
|
-
box-shadow var(--vmz-motion-
|
|
33
|
+
border-color var(--vmz-motion-emphasis-duration, 240ms) var(--vmz-motion-emphasis-easing, cubic-bezier(0.16, 1, 0.3, 1)),
|
|
34
|
+
box-shadow var(--vmz-motion-emphasis-duration, 240ms) var(--vmz-motion-emphasis-easing, cubic-bezier(0.16, 1, 0.3, 1)),
|
|
35
|
+
transform var(--vmz-motion-emphasis-duration, 240ms) var(--vmz-motion-emphasis-easing, cubic-bezier(0.16, 1, 0.3, 1));
|
|
35
36
|
}
|
|
36
37
|
.vmz-ui-card[data-hoverable="true"]:hover {
|
|
38
|
+
border-color: var(--vmz-line-default);
|
|
37
39
|
box-shadow: var(
|
|
38
40
|
--vmz-shadow-card-hover,
|
|
39
41
|
0 1px 2px -2px rgba(0, 0, 0, 0.08),
|
|
40
42
|
0 3px 6px 0 rgba(0, 0, 0, 0.06)
|
|
41
43
|
);
|
|
44
|
+
transform: translateY(-1px);
|
|
45
|
+
}
|
|
46
|
+
.vmz-ui-card[data-hoverable="true"]:focus-within {
|
|
47
|
+
border-color: var(--vmz-action-primary-background);
|
|
48
|
+
}
|
|
49
|
+
@media (prefers-reduced-motion: reduce) {
|
|
50
|
+
.vmz-ui-card[data-hoverable="true"] {
|
|
51
|
+
transition: none;
|
|
52
|
+
}
|
|
53
|
+
.vmz-ui-card[data-hoverable="true"]:hover {
|
|
54
|
+
transform: none;
|
|
55
|
+
}
|
|
42
56
|
}
|
|
43
57
|
.vmz-ui-card[data-size="small"] {
|
|
44
58
|
gap: 0.5rem;
|
|
45
|
-
padding: 0.
|
|
59
|
+
padding: 0.875rem 1rem;
|
|
46
60
|
}
|
|
47
61
|
|
|
48
62
|
:where([data-density="compact"]) .vmz-ui-card {
|
|
@@ -58,7 +72,7 @@
|
|
|
58
72
|
.vmz-ui-card__header {
|
|
59
73
|
display: flex;
|
|
60
74
|
flex-direction: column;
|
|
61
|
-
gap: 0.
|
|
75
|
+
gap: 0.375rem;
|
|
62
76
|
}
|
|
63
77
|
|
|
64
78
|
.vmz-ui-card__title {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
.vmz-ui-checkbox {
|
|
11
11
|
display: inline-flex;
|
|
12
12
|
align-items: center;
|
|
13
|
-
gap: 0.
|
|
13
|
+
gap: 0.5rem;
|
|
14
14
|
font: inherit;
|
|
15
15
|
cursor: pointer;
|
|
16
16
|
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.vmz-ui-checkbox__input:focus-visible {
|
|
26
|
-
box-shadow: 0 0 0
|
|
26
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.vmz-ui-checkbox__input:disabled {
|