@vmz/ui 0.3.7 → 0.3.9
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/README.md +2 -0
- package/contracts/token-requirements.v0.json +58 -1
- package/package.json +5 -2
- package/presets/web-surface.v0.json +14 -12
- package/src/components/Accordion.vmz +49 -16
- package/src/components/Alert.vmz +125 -28
- package/src/components/AppShell.vmz +121 -56
- package/src/components/Autocomplete.vmz +136 -29
- package/src/components/Avatar.vmz +20 -12
- package/src/components/Badge.vmz +18 -26
- package/src/components/Breadcrumb.vmz +28 -14
- package/src/components/BulkActions.vmz +13 -8
- package/src/components/Button.vmz +68 -44
- package/src/components/Callout.vmz +128 -27
- package/src/components/Card.vmz +67 -46
- package/src/components/Checkbox.vmz +81 -5
- package/src/components/CodeBlock.vmz +59 -27
- package/src/components/Collapse.vmz +64 -11
- package/src/components/ConsoleShell.vmz +249 -69
- package/src/components/Content.vmz +15 -1
- package/src/components/DataTable.vmz +123 -23
- package/src/components/DatePicker.vmz +171 -79
- package/src/components/Descriptions.vmz +90 -0
- package/src/components/Dialog.vmz +133 -50
- package/src/components/Divider.vmz +8 -1
- package/src/components/Drawer.vmz +131 -40
- package/src/components/Dropdown.vmz +147 -49
- package/src/components/Empty.vmz +56 -14
- package/src/components/Field.vmz +78 -23
- package/src/components/FilterBar.vmz +34 -4
- package/src/components/Flex.vmz +3 -1
- package/src/components/Footer.vmz +6 -3
- package/src/components/Form.vmz +41 -0
- package/src/components/FormItem.vmz +2 -3
- package/src/components/Grid.vmz +6 -3
- package/src/components/Header.vmz +193 -6
- package/src/components/Layout.vmz +3 -1
- package/src/components/Link.vmz +20 -9
- package/src/components/List.vmz +35 -13
- package/src/components/Menu.vmz +198 -25
- package/src/components/Message.vmz +167 -0
- package/src/components/Notification.vmz +132 -37
- package/src/components/Pagination.vmz +186 -20
- package/src/components/Popconfirm.vmz +287 -0
- package/src/components/Popover.vmz +152 -34
- package/src/components/Progress.vmz +16 -5
- package/src/components/Prose.vmz +131 -32
- package/src/components/QueryForm.vmz +31 -9
- package/src/components/RadioGroup.vmz +91 -11
- package/src/components/Result.vmz +60 -27
- package/src/components/Segmented.vmz +46 -11
- package/src/components/Select.vmz +174 -87
- package/src/components/Sider.vmz +120 -7
- package/src/components/Skeleton.vmz +9 -7
- package/src/components/Space.vmz +9 -3
- package/src/components/Spinner.vmz +5 -4
- package/src/components/Steps.vmz +40 -25
- package/src/components/Switch.vmz +48 -15
- package/src/components/Table.vmz +130 -25
- package/src/components/Tabs.vmz +28 -13
- package/src/components/Tag.vmz +29 -12
- package/src/components/TextArea.vmz +32 -25
- package/src/components/Timeline.vmz +65 -30
- package/src/components/Toc.vmz +45 -29
- package/src/components/Tooltip.vmz +70 -21
- package/src/components/Tree.vmz +48 -25
- package/src/components/Typography.vmz +23 -8
- package/src/components/Upload.vmz +191 -96
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div data-vmz-ui="app-shell" class="vmz-ui-app-shell">
|
|
3
|
-
<header data-vmz-shell="header" class="vmz-ui-app-shell__header">
|
|
3
|
+
<header data-vmz-shell="header" :onKeyDown="onHeaderKeyDown" class="vmz-ui-app-shell__header">
|
|
4
4
|
<div class="vmz-ui-app-shell__header-inner">
|
|
5
|
-
<a :href="homeHref" class="vmz-ui-app-shell__brand">
|
|
5
|
+
<a v-if="brand" :href="homeHref" class="vmz-ui-app-shell__brand">
|
|
6
6
|
{{ brand }}
|
|
7
7
|
</a>
|
|
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" :data-active="item.id === activeId ? 'true' : 'false'" :aria-current="item.id === activeId ? 'page' : null" class="vmz-ui-app-shell__nav-item">
|
|
8
|
+
<nav :id="navId" :aria-label="navLabel" :data-open="menuOpen ? 'true' : null" class="vmz-ui-app-shell__nav">
|
|
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" @click="closeMenu" class="vmz-ui-app-shell__nav-item">
|
|
10
10
|
{{ item.title }}
|
|
11
11
|
</a>
|
|
12
12
|
</nav>
|
|
13
13
|
<div class="vmz-ui-app-shell__actions">
|
|
14
14
|
<slot name="actions" />
|
|
15
15
|
</div>
|
|
16
|
+
<button type="button" :aria-label="menuLabel ? menuLabel : navLabel" :aria-expanded="menuOpen ? 'true' : 'false'" :aria-controls="navId" @click="toggleMenu" class="vmz-ui-app-shell__menu">
|
|
17
|
+
<Icon :name="menuOpen ? 'action.close' : 'action.menu'" size="md" decorative />
|
|
18
|
+
</button>
|
|
16
19
|
</div>
|
|
17
20
|
</header>
|
|
18
21
|
<main data-vmz-shell="main" class="vmz-ui-app-shell__main">
|
|
19
22
|
<slot />
|
|
20
23
|
</main>
|
|
24
|
+
<footer v-if="footer" data-vmz-shell="footer" class="vmz-ui-app-shell__footer">
|
|
25
|
+
{{ footer }}
|
|
26
|
+
</footer>
|
|
21
27
|
</div>
|
|
22
28
|
</template>
|
|
23
29
|
<style>
|
|
@@ -26,26 +32,25 @@
|
|
|
26
32
|
flex-direction: column;
|
|
27
33
|
min-height: 100%;
|
|
28
34
|
color: var(--vmz-text-ink);
|
|
29
|
-
background:
|
|
35
|
+
background: var(--vmz-surface-page);
|
|
36
|
+
font-family: var(--vmz-font-sans);
|
|
30
37
|
}
|
|
31
38
|
|
|
32
39
|
.vmz-ui-app-shell__header {
|
|
33
40
|
position: sticky;
|
|
34
41
|
top: 0;
|
|
35
42
|
z-index: 30;
|
|
36
|
-
border-bottom: 1px solid var(--vmz-line-subtle
|
|
37
|
-
background:
|
|
38
|
-
backdrop-filter: saturate(180%) blur(0.5rem);
|
|
39
|
-
-webkit-backdrop-filter: saturate(180%) blur(0.5rem);
|
|
43
|
+
border-bottom: 1px solid var(--vmz-line-subtle);
|
|
44
|
+
background: var(--vmz-surface-paper);
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
.vmz-ui-app-shell__header-inner {
|
|
43
|
-
width: min(var(--vmz-layout-max-width, 75rem), calc(100% -
|
|
44
|
-
|
|
48
|
+
width: min(var(--vmz-layout-max-width, 75rem), calc(100% - (var(--vmz-layout-gutter, 1rem) * 2)));
|
|
49
|
+
height: var(--vmz-layout-header-height, 4rem);
|
|
45
50
|
margin: 0 auto;
|
|
46
51
|
display: flex;
|
|
47
52
|
align-items: center;
|
|
48
|
-
gap:
|
|
53
|
+
gap: var(--vmz-space-6, 2rem);
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
.vmz-ui-app-shell__brand {
|
|
@@ -53,7 +58,8 @@
|
|
|
53
58
|
color: var(--vmz-text-ink);
|
|
54
59
|
font-family: var(--vmz-font-sans);
|
|
55
60
|
font-size: 1.0625rem;
|
|
56
|
-
font-weight:
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
line-height: 1.25;
|
|
57
63
|
letter-spacing: -0.01em;
|
|
58
64
|
text-decoration: none;
|
|
59
65
|
border-radius: var(--vmz-radius-sm, 4px);
|
|
@@ -70,91 +76,133 @@
|
|
|
70
76
|
}
|
|
71
77
|
|
|
72
78
|
.vmz-ui-app-shell__nav {
|
|
73
|
-
|
|
74
|
-
flex: 1 1 auto;
|
|
75
|
-
flex-wrap: wrap;
|
|
76
|
-
gap: 0.125rem;
|
|
79
|
+
flex: 0 1 auto;
|
|
77
80
|
min-width: 0;
|
|
81
|
+
height: 100%;
|
|
82
|
+
display: flex;
|
|
83
|
+
align-items: center;
|
|
84
|
+
gap: var(--vmz-space-5, 1.5rem);
|
|
78
85
|
}
|
|
79
86
|
|
|
80
87
|
.vmz-ui-app-shell__nav-item {
|
|
81
88
|
position: relative;
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
display: inline-flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
height: 100%;
|
|
92
|
+
box-sizing: border-box;
|
|
93
|
+
border-bottom: 2px solid transparent;
|
|
84
94
|
color: var(--vmz-text-steel);
|
|
85
|
-
font: inherit;
|
|
86
95
|
font-size: 0.875rem;
|
|
87
96
|
font-weight: 500;
|
|
88
|
-
line-height: 1
|
|
97
|
+
line-height: 1;
|
|
89
98
|
text-decoration: none;
|
|
90
99
|
white-space: nowrap;
|
|
91
100
|
outline: none;
|
|
92
101
|
transition:
|
|
93
102
|
color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1)),
|
|
94
|
-
|
|
103
|
+
border-color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
.vmz-ui-app-shell__nav-item:hover {
|
|
98
|
-
color: var(--vmz-
|
|
99
|
-
background: var(--vmz-surface-mist, #fafafa);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.vmz-ui-app-shell__nav-item:focus-visible {
|
|
103
|
-
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
107
|
+
color: var(--vmz-action-primary-background);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
|
-
/* Current section: ink emphasis plus a hairline marker, no brand fill. */
|
|
107
110
|
.vmz-ui-app-shell__nav-item[data-active="true"] {
|
|
108
|
-
color: var(--vmz-
|
|
109
|
-
|
|
111
|
+
color: var(--vmz-action-primary-background);
|
|
112
|
+
border-bottom-color: var(--vmz-action-primary-background);
|
|
110
113
|
}
|
|
111
114
|
|
|
112
|
-
.vmz-ui-app-shell__nav-item
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
inset: auto 0.75rem 0;
|
|
116
|
-
height: 2px;
|
|
117
|
-
border-radius: var(--vmz-radius-pill, 999px);
|
|
118
|
-
background: var(--vmz-action-primary-background);
|
|
115
|
+
.vmz-ui-app-shell__nav-item:focus-visible {
|
|
116
|
+
border-radius: var(--vmz-radius-sm, 4px);
|
|
117
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
119
118
|
}
|
|
120
119
|
|
|
121
120
|
.vmz-ui-app-shell__actions {
|
|
122
121
|
flex: none;
|
|
123
122
|
display: flex;
|
|
124
123
|
align-items: center;
|
|
125
|
-
gap: 0.5rem;
|
|
124
|
+
gap: var(--vmz-space-2, 0.5rem);
|
|
126
125
|
margin-left: auto;
|
|
127
126
|
}
|
|
128
127
|
|
|
128
|
+
.vmz-ui-app-shell__menu {
|
|
129
|
+
display: none;
|
|
130
|
+
}
|
|
131
|
+
|
|
129
132
|
.vmz-ui-app-shell__main {
|
|
130
133
|
flex: 1;
|
|
131
|
-
|
|
134
|
+
box-sizing: border-box;
|
|
135
|
+
width: min(var(--vmz-layout-max-width, 75rem), calc(100% - (var(--vmz-layout-gutter, 1rem) * 2)));
|
|
132
136
|
margin: 0 auto;
|
|
133
|
-
padding:
|
|
137
|
+
padding: var(--vmz-space-6, 2rem) 0 var(--vmz-space-8, 4rem);
|
|
134
138
|
display: flex;
|
|
135
139
|
flex-direction: column;
|
|
136
|
-
gap:
|
|
140
|
+
gap: var(--vmz-space-6, 2rem);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.vmz-ui-app-shell__footer {
|
|
144
|
+
border-top: 1px solid var(--vmz-line-subtle);
|
|
145
|
+
background: var(--vmz-surface-paper);
|
|
146
|
+
padding: var(--vmz-space-6, 2rem) var(--vmz-space-5, 1.5rem);
|
|
147
|
+
color: var(--vmz-text-tertiary);
|
|
148
|
+
font-size: 0.8125rem;
|
|
149
|
+
line-height: 1.5;
|
|
150
|
+
text-align: center;
|
|
137
151
|
}
|
|
138
152
|
|
|
139
153
|
@media (max-width: 720px) {
|
|
140
154
|
.vmz-ui-app-shell__header-inner {
|
|
141
|
-
|
|
142
|
-
gap:
|
|
143
|
-
padding: 0.625rem 0;
|
|
155
|
+
height: var(--vmz-layout-header-height-compact, 3.5rem);
|
|
156
|
+
gap: var(--vmz-space-3, 0.75rem);
|
|
144
157
|
}
|
|
145
158
|
.vmz-ui-app-shell__nav {
|
|
146
|
-
order: 3;
|
|
147
|
-
flex-basis: 100%;
|
|
148
|
-
overflow-x: auto;
|
|
149
|
-
flex-wrap: nowrap;
|
|
150
|
-
padding-bottom: 0.125rem;
|
|
151
|
-
scrollbar-width: none;
|
|
152
|
-
}
|
|
153
|
-
.vmz-ui-app-shell__nav::-webkit-scrollbar {
|
|
154
159
|
display: none;
|
|
160
|
+
position: absolute;
|
|
161
|
+
top: 100%;
|
|
162
|
+
left: 0;
|
|
163
|
+
right: 0;
|
|
164
|
+
height: auto;
|
|
165
|
+
flex-direction: column;
|
|
166
|
+
align-items: stretch;
|
|
167
|
+
gap: 0;
|
|
168
|
+
padding: var(--vmz-space-2, 0.5rem) var(--vmz-layout-gutter, 1rem) var(--vmz-space-4, 1rem);
|
|
169
|
+
border-bottom: 1px solid var(--vmz-line-subtle);
|
|
170
|
+
background: var(--vmz-surface-paper);
|
|
171
|
+
box-shadow: var(--vmz-shadow-popup);
|
|
172
|
+
}
|
|
173
|
+
.vmz-ui-app-shell__nav[data-open="true"] {
|
|
174
|
+
display: flex;
|
|
175
|
+
}
|
|
176
|
+
.vmz-ui-app-shell__nav-item {
|
|
177
|
+
height: 2.5rem;
|
|
178
|
+
padding: 0 var(--vmz-space-1, 0.25rem);
|
|
179
|
+
border-bottom: 0;
|
|
180
|
+
}
|
|
181
|
+
.vmz-ui-app-shell__menu {
|
|
182
|
+
flex: none;
|
|
183
|
+
display: inline-flex;
|
|
184
|
+
align-items: center;
|
|
185
|
+
justify-content: center;
|
|
186
|
+
width: 2.5rem;
|
|
187
|
+
height: 2.5rem;
|
|
188
|
+
padding: 0;
|
|
189
|
+
border: 0;
|
|
190
|
+
border-radius: var(--vmz-radius-md, 6px);
|
|
191
|
+
background: transparent;
|
|
192
|
+
color: var(--vmz-text-ink);
|
|
193
|
+
cursor: pointer;
|
|
194
|
+
outline: none;
|
|
195
|
+
transition: background-color var(--vmz-motion-control-duration, 150ms) var(--vmz-motion-control-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
196
|
+
}
|
|
197
|
+
.vmz-ui-app-shell__menu:hover {
|
|
198
|
+
background: var(--vmz-surface-mist);
|
|
199
|
+
}
|
|
200
|
+
.vmz-ui-app-shell__menu:focus-visible {
|
|
201
|
+
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
155
202
|
}
|
|
156
203
|
.vmz-ui-app-shell__main {
|
|
157
|
-
padding
|
|
204
|
+
padding: var(--vmz-space-5, 1.5rem) 0 var(--vmz-space-7, 3rem);
|
|
205
|
+
gap: var(--vmz-space-5, 1.5rem);
|
|
158
206
|
}
|
|
159
207
|
}
|
|
160
208
|
</style>
|
|
@@ -165,16 +213,33 @@
|
|
|
165
213
|
* go into the named `actions` slot. Parent supplies copy; no private theme.
|
|
166
214
|
*/
|
|
167
215
|
export default class AppShell {
|
|
168
|
-
public brand: string = "
|
|
216
|
+
public brand: string = "";
|
|
169
217
|
public homeHref: string = "/";
|
|
170
|
-
public navLabel: string = "
|
|
218
|
+
public navLabel: string = "";
|
|
219
|
+
public menuLabel: string = "";
|
|
171
220
|
/** Id of the nav item representing the current page, for `aria-current` + marker. */
|
|
172
221
|
public activeId: string = "";
|
|
222
|
+
public navId: string = "vmz-ui-app-shell-nav";
|
|
223
|
+
/** Optional footer copy; the footer band only renders when supplied. */
|
|
224
|
+
public footer: string = "";
|
|
173
225
|
/** @type {{ id: string, title: string, href: string }[]} */
|
|
174
226
|
public nav: {
|
|
175
227
|
id: string;
|
|
176
228
|
title: string;
|
|
177
229
|
href: string;
|
|
178
230
|
}[] = [];
|
|
231
|
+
menuOpen = false;
|
|
232
|
+
|
|
233
|
+
toggleMenu() {
|
|
234
|
+
this.menuOpen = !this.menuOpen;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
closeMenu() {
|
|
238
|
+
if (this.menuOpen) this.menuOpen = false;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
onHeaderKeyDown(e) {
|
|
242
|
+
if (e && e.key === "Escape") this.closeMenu();
|
|
243
|
+
}
|
|
179
244
|
}
|
|
180
245
|
</script>
|
|
@@ -3,15 +3,25 @@
|
|
|
3
3
|
<label v-if="label" :for="controlId" class="vmz-ui-autocomplete__label">
|
|
4
4
|
{{ label }}
|
|
5
5
|
</label>
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
<div class="vmz-ui-autocomplete__field">
|
|
7
|
+
<div class="vmz-ui-autocomplete__control-wrap">
|
|
8
|
+
<Icon name="action.search" size="md" decorative class="vmz-ui-autocomplete__search-icon" />
|
|
9
|
+
<input :id="controlId" type="text" role="combobox" autocomplete="off" aria-autocomplete="list" :aria-expanded="openAttr" :aria-controls="listId" :aria-invalid="error ? 'true' : 'false'" :aria-describedby="describedBy" :value="value" :placeholder="placeholder" :disabled="disabled" @input="onDomInput" :onKeyDown="onKeyDown" class="vmz-ui-autocomplete__control" />
|
|
10
|
+
</div>
|
|
11
|
+
<div v-if="listOpen || (showEmpty && emptyText)" class="vmz-ui-autocomplete__panel">
|
|
12
|
+
<ul v-if="listOpen" :id="listId" role="listbox" data-vmz-autocomplete="list" @click="onListClick" class="vmz-ui-autocomplete__list">
|
|
13
|
+
<li v-for="opt in options" :key="opt.value" role="option" :data-vmz-option="opt.value" :aria-selected="opt.value === value ? 'true' : 'false'" tabindex="-1" :class='"vmz-ui-autocomplete__option" + (opt.value === value ? " is-on" : "")'>
|
|
14
|
+
<span class="vmz-ui-autocomplete__option-label">
|
|
15
|
+
{{ opt.label }}
|
|
16
|
+
</span>
|
|
17
|
+
<Icon v-if="opt.value === value" name="action.check" size="md" decorative class="vmz-ui-autocomplete__option-check" />
|
|
18
|
+
</li>
|
|
19
|
+
</ul>
|
|
20
|
+
<p v-if="showEmpty && emptyText" data-vmz-autocomplete="empty" class="vmz-ui-autocomplete__empty">
|
|
21
|
+
{{ emptyText }}
|
|
22
|
+
</p>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
15
25
|
<p v-if="description" :id="descriptionId" class="vmz-ui-autocomplete__description">
|
|
16
26
|
{{ description }}
|
|
17
27
|
</p>
|
|
@@ -25,55 +35,142 @@
|
|
|
25
35
|
position: relative;
|
|
26
36
|
display: flex;
|
|
27
37
|
flex-direction: column;
|
|
28
|
-
gap:
|
|
38
|
+
gap: var(--vmz-space-2);
|
|
39
|
+
width: 100%;
|
|
29
40
|
max-width: 28rem;
|
|
30
41
|
}
|
|
31
42
|
|
|
43
|
+
.vmz-ui-autocomplete__field {
|
|
44
|
+
position: relative;
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
width: 100%;
|
|
48
|
+
}
|
|
49
|
+
|
|
32
50
|
.vmz-ui-autocomplete__label {
|
|
33
51
|
font: inherit;
|
|
34
|
-
font-weight:
|
|
52
|
+
font-weight: 500;
|
|
53
|
+
font-size: 0.875rem;
|
|
54
|
+
line-height: 1.5715;
|
|
55
|
+
color: var(--vmz-text-ink);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.vmz-ui-autocomplete__control-wrap {
|
|
59
|
+
position: relative;
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
width: 100%;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.vmz-ui-autocomplete__search-icon {
|
|
66
|
+
position: absolute;
|
|
67
|
+
left: var(--vmz-density-control-padding-x);
|
|
68
|
+
z-index: 1;
|
|
69
|
+
color: var(--vmz-text-tertiary);
|
|
70
|
+
pointer-events: none;
|
|
35
71
|
}
|
|
36
72
|
|
|
37
73
|
.vmz-ui-autocomplete__control {
|
|
38
|
-
|
|
74
|
+
box-sizing: border-box;
|
|
75
|
+
width: 100%;
|
|
76
|
+
min-height: var(--vmz-control-height);
|
|
77
|
+
font-family: inherit;
|
|
78
|
+
font-size: 0.875rem;
|
|
79
|
+
line-height: 1.5715;
|
|
39
80
|
padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
|
|
81
|
+
padding-left: calc(
|
|
82
|
+
var(--vmz-density-control-padding-x) + var(--vmz-space-4) + var(--vmz-space-1)
|
|
83
|
+
);
|
|
40
84
|
border: 1px solid var(--vmz-line-default);
|
|
41
|
-
border-radius: var(--vmz-radius-
|
|
42
|
-
background:
|
|
43
|
-
color:
|
|
85
|
+
border-radius: var(--vmz-radius-lg);
|
|
86
|
+
background: var(--vmz-surface-paper);
|
|
87
|
+
color: var(--vmz-text-ink);
|
|
44
88
|
outline: none;
|
|
89
|
+
transition:
|
|
90
|
+
border-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
|
|
91
|
+
box-shadow var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
|
|
92
|
+
background-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.vmz-ui-autocomplete__control::placeholder {
|
|
96
|
+
color: var(--vmz-text-tertiary);
|
|
97
|
+
opacity: 1;
|
|
45
98
|
}
|
|
46
99
|
|
|
47
100
|
.vmz-ui-autocomplete[data-invalid="true"] .vmz-ui-autocomplete__control {
|
|
48
101
|
border-color: var(--vmz-status-danger-accent);
|
|
49
102
|
}
|
|
50
103
|
|
|
104
|
+
.vmz-ui-autocomplete[data-invalid="true"] .vmz-ui-autocomplete__control:hover:not(:disabled),
|
|
105
|
+
.vmz-ui-autocomplete[data-invalid="true"] .vmz-ui-autocomplete__control:focus-visible {
|
|
106
|
+
border-color: var(--vmz-status-danger-foreground);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.vmz-ui-autocomplete__control:hover:not(:disabled):not(:focus-visible) {
|
|
110
|
+
border-color: var(--vmz-action-primary-hover);
|
|
111
|
+
}
|
|
112
|
+
|
|
51
113
|
.vmz-ui-autocomplete__control:focus-visible {
|
|
114
|
+
border-color: var(--vmz-action-primary-background);
|
|
52
115
|
box-shadow: 0 0 0 3px var(--vmz-focus-ring);
|
|
53
116
|
}
|
|
54
117
|
|
|
55
118
|
.vmz-ui-autocomplete__control:disabled {
|
|
56
|
-
opacity: 0.
|
|
119
|
+
opacity: 0.6;
|
|
120
|
+
color: var(--vmz-text-muted);
|
|
57
121
|
cursor: not-allowed;
|
|
122
|
+
background: var(--vmz-surface-mist);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.vmz-ui-autocomplete__panel {
|
|
126
|
+
position: absolute;
|
|
127
|
+
z-index: 40;
|
|
128
|
+
top: calc(100% + var(--vmz-space-1));
|
|
129
|
+
left: 0;
|
|
130
|
+
right: 0;
|
|
131
|
+
padding: var(--vmz-space-1);
|
|
132
|
+
border: 1px solid var(--vmz-line-default);
|
|
133
|
+
border-radius: var(--vmz-radius-lg);
|
|
134
|
+
background: var(--vmz-surface-paper);
|
|
135
|
+
box-shadow: var(--vmz-shadow-popup);
|
|
58
136
|
}
|
|
59
137
|
|
|
60
138
|
.vmz-ui-autocomplete__list {
|
|
61
139
|
list-style: none;
|
|
62
140
|
margin: 0;
|
|
63
|
-
padding: 0
|
|
64
|
-
border: 1px solid var(--vmz-line-default);
|
|
65
|
-
border-radius: var(--vmz-radius-md, 6px);
|
|
66
|
-
background: var(--vmz-surface-paper);
|
|
141
|
+
padding: 0;
|
|
67
142
|
max-height: 12rem;
|
|
68
143
|
overflow: auto;
|
|
69
144
|
}
|
|
70
145
|
|
|
71
146
|
.vmz-ui-autocomplete__option {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: space-between;
|
|
150
|
+
gap: var(--vmz-space-2);
|
|
151
|
+
box-sizing: border-box;
|
|
152
|
+
min-height: var(--vmz-control-height);
|
|
72
153
|
margin: 0;
|
|
73
|
-
padding: 0
|
|
74
|
-
|
|
75
|
-
font-weight: 600;
|
|
154
|
+
padding: 0 var(--vmz-density-control-padding-x);
|
|
155
|
+
border-radius: var(--vmz-radius-md);
|
|
76
156
|
color: var(--vmz-text-ink);
|
|
157
|
+
font-size: 0.875rem;
|
|
158
|
+
line-height: 1.5715;
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
outline: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.vmz-ui-autocomplete__option-label {
|
|
164
|
+
flex: 1 1 auto;
|
|
165
|
+
min-width: 0;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
text-overflow: ellipsis;
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.vmz-ui-autocomplete__option-check {
|
|
172
|
+
flex: 0 0 auto;
|
|
173
|
+
color: var(--vmz-action-primary-background);
|
|
77
174
|
}
|
|
78
175
|
|
|
79
176
|
.vmz-ui-autocomplete__option:hover,
|
|
@@ -82,22 +179,31 @@
|
|
|
82
179
|
outline: none;
|
|
83
180
|
}
|
|
84
181
|
|
|
182
|
+
.vmz-ui-autocomplete__option.is-on {
|
|
183
|
+
background: var(--vmz-action-primary-soft);
|
|
184
|
+
color: var(--vmz-action-primary-active);
|
|
185
|
+
}
|
|
186
|
+
|
|
85
187
|
.vmz-ui-autocomplete__empty {
|
|
86
188
|
margin: 0;
|
|
87
|
-
|
|
88
|
-
|
|
189
|
+
padding: var(--vmz-space-2) var(--vmz-density-control-padding-x);
|
|
190
|
+
color: var(--vmz-text-tertiary);
|
|
191
|
+
font-size: 0.875rem;
|
|
192
|
+
line-height: 1.5715;
|
|
89
193
|
}
|
|
90
194
|
|
|
91
195
|
.vmz-ui-autocomplete__description {
|
|
92
196
|
margin: 0;
|
|
93
|
-
|
|
94
|
-
font-size: 0.
|
|
197
|
+
color: var(--vmz-text-steel);
|
|
198
|
+
font-size: 0.875rem;
|
|
199
|
+
line-height: 1.5715;
|
|
95
200
|
}
|
|
96
201
|
|
|
97
202
|
.vmz-ui-autocomplete__error {
|
|
98
203
|
margin: 0;
|
|
99
204
|
color: var(--vmz-status-danger-foreground);
|
|
100
|
-
font-size: 0.
|
|
205
|
+
font-size: 0.875rem;
|
|
206
|
+
line-height: 1.5715;
|
|
101
207
|
}
|
|
102
208
|
</style>
|
|
103
209
|
<script client>
|
|
@@ -111,6 +217,7 @@ export default class Autocomplete {
|
|
|
111
217
|
public description: string = "";
|
|
112
218
|
public error: string = "";
|
|
113
219
|
public value: string = "";
|
|
220
|
+
public placeholder: string = "";
|
|
114
221
|
public options: Array<{
|
|
115
222
|
value: string;
|
|
116
223
|
label: string;
|
|
@@ -118,7 +225,7 @@ export default class Autocomplete {
|
|
|
118
225
|
public listOpen: boolean = false;
|
|
119
226
|
public openAttr: string = "false";
|
|
120
227
|
public showEmpty: boolean = false;
|
|
121
|
-
public emptyText: string = "
|
|
228
|
+
public emptyText: string = "";
|
|
122
229
|
public disabled: boolean = false;
|
|
123
230
|
public invalidAttr: string = "false";
|
|
124
231
|
public controlId: string = "vmz-autocomplete";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<span data-vmz-ui="avatar" :data-size="size" :aria-label="label" class="vmz-ui-avatar">
|
|
3
|
-
<img v-if="src" :src="src" alt />
|
|
3
|
+
<img v-if="src" :src="src" :alt="label" />
|
|
4
4
|
<span v-if="!src">
|
|
5
5
|
{{ text }}
|
|
6
6
|
</span>
|
|
@@ -9,26 +9,34 @@
|
|
|
9
9
|
<style>
|
|
10
10
|
.vmz-ui-avatar {
|
|
11
11
|
display: inline-flex;
|
|
12
|
+
flex: 0 0 auto;
|
|
12
13
|
align-items: center;
|
|
13
14
|
justify-content: center;
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
width: var(--vmz-control-height);
|
|
17
|
+
height: var(--vmz-control-height);
|
|
16
18
|
overflow: hidden;
|
|
17
|
-
border-radius:
|
|
18
|
-
background:
|
|
19
|
-
color: var(--vmz-action-primary-active
|
|
20
|
-
font-
|
|
19
|
+
border-radius: var(--vmz-radius-pill);
|
|
20
|
+
background: var(--vmz-action-primary-soft);
|
|
21
|
+
color: var(--vmz-action-primary-active);
|
|
22
|
+
font-size: 0.875rem;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
line-height: 1;
|
|
25
|
+
user-select: none;
|
|
21
26
|
}
|
|
27
|
+
|
|
22
28
|
.vmz-ui-avatar[data-size="small"] {
|
|
23
|
-
width:
|
|
24
|
-
height:
|
|
29
|
+
width: var(--vmz-control-height-sm);
|
|
30
|
+
height: var(--vmz-control-height-sm);
|
|
25
31
|
font-size: 0.75rem;
|
|
26
32
|
}
|
|
33
|
+
|
|
27
34
|
.vmz-ui-avatar[data-size="large"] {
|
|
28
|
-
width:
|
|
29
|
-
height:
|
|
30
|
-
font-size:
|
|
35
|
+
width: var(--vmz-control-height-lg);
|
|
36
|
+
height: var(--vmz-control-height-lg);
|
|
37
|
+
font-size: 1rem;
|
|
31
38
|
}
|
|
39
|
+
|
|
32
40
|
.vmz-ui-avatar img {
|
|
33
41
|
width: 100%;
|
|
34
42
|
height: 100%;
|
package/src/components/Badge.vmz
CHANGED
|
@@ -7,54 +7,46 @@
|
|
|
7
7
|
.vmz-ui-badge {
|
|
8
8
|
display: inline-flex;
|
|
9
9
|
align-items: center;
|
|
10
|
-
gap:
|
|
11
|
-
|
|
10
|
+
gap: var(--vmz-space-1);
|
|
11
|
+
max-width: 100%;
|
|
12
|
+
padding: 0 var(--vmz-space-2);
|
|
12
13
|
border: 1px solid var(--vmz-line-default);
|
|
13
|
-
border-radius: var(--vmz-radius-
|
|
14
|
+
border-radius: var(--vmz-radius-sm);
|
|
14
15
|
font-size: 0.75rem;
|
|
15
|
-
font-weight:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
line-height: 1.2;
|
|
16
|
+
font-weight: 500;
|
|
17
|
+
line-height: 1.6667;
|
|
18
|
+
white-space: nowrap;
|
|
19
19
|
background: var(--vmz-surface-mist);
|
|
20
|
-
color: var(--vmz-text-
|
|
20
|
+
color: var(--vmz-text-steel);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
.vmz-ui-badge[data-tone="brand"] {
|
|
24
|
-
border-color:
|
|
25
|
-
|
|
26
|
-
var(--vmz-action-primary-background) 35%,
|
|
27
|
-
var(--vmz-line-default)
|
|
28
|
-
);
|
|
29
|
-
background: color-mix(
|
|
30
|
-
in srgb,
|
|
31
|
-
var(--vmz-action-primary-background) 12%,
|
|
32
|
-
var(--vmz-surface-paper)
|
|
33
|
-
);
|
|
24
|
+
border-color: var(--vmz-action-primary-hover);
|
|
25
|
+
background: var(--vmz-action-primary-soft);
|
|
34
26
|
color: var(--vmz-action-primary-active);
|
|
35
27
|
}
|
|
36
28
|
|
|
37
29
|
.vmz-ui-badge[data-tone="info"] {
|
|
38
|
-
border-color: var(--vmz-status-info-
|
|
39
|
-
background:
|
|
30
|
+
border-color: var(--vmz-status-info-border);
|
|
31
|
+
background: var(--vmz-status-info-background);
|
|
40
32
|
color: var(--vmz-status-info-foreground);
|
|
41
33
|
}
|
|
42
34
|
|
|
43
35
|
.vmz-ui-badge[data-tone="success"] {
|
|
44
|
-
border-color: var(--vmz-status-success-
|
|
45
|
-
background:
|
|
36
|
+
border-color: var(--vmz-status-success-border);
|
|
37
|
+
background: var(--vmz-status-success-background);
|
|
46
38
|
color: var(--vmz-status-success-foreground);
|
|
47
39
|
}
|
|
48
40
|
|
|
49
41
|
.vmz-ui-badge[data-tone="warning"] {
|
|
50
|
-
border-color: var(--vmz-status-warning-
|
|
51
|
-
background:
|
|
42
|
+
border-color: var(--vmz-status-warning-border);
|
|
43
|
+
background: var(--vmz-status-warning-background);
|
|
52
44
|
color: var(--vmz-status-warning-foreground);
|
|
53
45
|
}
|
|
54
46
|
|
|
55
47
|
.vmz-ui-badge[data-tone="danger"] {
|
|
56
|
-
border-color: var(--vmz-status-danger-
|
|
57
|
-
background:
|
|
48
|
+
border-color: var(--vmz-status-danger-border);
|
|
49
|
+
background: var(--vmz-status-danger-background);
|
|
58
50
|
color: var(--vmz-status-danger-foreground);
|
|
59
51
|
}
|
|
60
52
|
</style>
|