@vmz/ui 0.2.3 → 0.2.5
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 +1 -1
- package/src/components/Accordion.vmz +46 -63
- package/src/components/Alert.vmz +35 -38
- package/src/components/AppShell.vmz +92 -75
- package/src/components/Autocomplete.vmz +91 -119
- package/src/components/Avatar.vmz +37 -8
- package/src/components/Badge.vmz +29 -23
- package/src/components/Breadcrumb.vmz +36 -34
- package/src/components/BulkActions.vmz +22 -28
- package/src/components/Button.vmz +139 -121
- package/src/components/Callout.vmz +33 -36
- package/src/components/Card.vmz +68 -51
- package/src/components/Checkbox.vmz +28 -47
- package/src/components/CodeBlock.vmz +31 -25
- package/src/components/Collapse.vmz +34 -16
- package/src/components/ConsoleShell.vmz +107 -110
- package/src/components/Content.vmz +8 -4
- package/src/components/DataTable.vmz +124 -150
- package/src/components/DatePicker.vmz +526 -521
- package/src/components/Dialog.vmz +408 -327
- package/src/components/Divider.vmz +38 -11
- package/src/components/Drawer.vmz +325 -318
- package/src/components/Dropdown.vmz +53 -19
- package/src/components/Empty.vmz +23 -21
- package/src/components/Field.vmz +77 -83
- package/src/components/FilterBar.vmz +8 -10
- package/src/components/Flex.vmz +21 -6
- package/src/components/Footer.vmz +9 -4
- package/src/components/Form.vmz +35 -46
- package/src/components/FormItem.vmz +44 -43
- package/src/components/Grid.vmz +22 -6
- package/src/components/Header.vmz +11 -4
- package/src/components/Icon.vmz +43 -44
- package/src/components/Layout.vmz +9 -4
- package/src/components/Link.vmz +17 -25
- package/src/components/List.vmz +62 -75
- package/src/components/Menu.vmz +182 -197
- package/src/components/Notification.vmz +35 -38
- package/src/components/Pagination.vmz +37 -47
- package/src/components/Popover.vmz +157 -171
- package/src/components/Progress.vmz +36 -10
- package/src/components/Prose.vmz +29 -31
- package/src/components/QueryForm.vmz +14 -22
- package/src/components/RadioGroup.vmz +70 -84
- package/src/components/Result.vmz +36 -38
- package/src/components/Segmented.vmz +43 -22
- package/src/components/Select.vmz +404 -411
- package/src/components/Sider.vmz +21 -4
- package/src/components/Skeleton.vmz +34 -42
- package/src/components/Space.vmz +24 -9
- package/src/components/Spinner.vmz +17 -23
- package/src/components/Steps.vmz +48 -51
- package/src/components/Switch.vmz +50 -60
- package/src/components/Table.vmz +81 -84
- package/src/components/Tabs.vmz +66 -88
- package/src/components/Tag.vmz +36 -11
- package/src/components/TextArea.vmz +73 -77
- package/src/components/Timeline.vmz +36 -32
- package/src/components/Toc.vmz +31 -37
- package/src/components/Tooltip.vmz +25 -35
- package/src/components/Tree.vmz +127 -144
- package/src/components/Typography.vmz +33 -7
- package/src/components/Upload.vmz +1135 -1057
|
@@ -1,74 +1,55 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
:checked="checked"
|
|
8
|
-
:disabled="disabled"
|
|
9
|
-
:aria-describedby="describedBy"
|
|
10
|
-
@click="onToggle"
|
|
11
|
-
/>
|
|
12
|
-
<span class="vmz-ui-checkbox__label">{{ label }}</span>
|
|
2
|
+
<label data-vmz-ui="checkbox" :for="controlId" class="vmz-ui-checkbox">
|
|
3
|
+
<input :id="controlId" type="checkbox" :checked="checked" :disabled="disabled" :aria-describedby="describedBy" @change="onToggle" class="vmz-ui-checkbox__input" />
|
|
4
|
+
<span class="vmz-ui-checkbox__label">
|
|
5
|
+
{{ label }}
|
|
6
|
+
</span>
|
|
13
7
|
</label>
|
|
14
8
|
</template>
|
|
15
|
-
|
|
16
9
|
<style>
|
|
17
|
-
|
|
10
|
+
.vmz-ui-checkbox {
|
|
18
11
|
display: inline-flex;
|
|
19
12
|
align-items: center;
|
|
20
13
|
gap: 0.45rem;
|
|
21
14
|
font: inherit;
|
|
22
15
|
cursor: pointer;
|
|
23
|
-
|
|
16
|
+
}
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
.vmz-ui-checkbox__input {
|
|
26
19
|
width: 1rem;
|
|
27
20
|
height: 1rem;
|
|
28
21
|
accent-color: var(--vmz-action-primary-background);
|
|
29
22
|
outline: none;
|
|
30
|
-
|
|
23
|
+
}
|
|
31
24
|
|
|
32
|
-
|
|
25
|
+
.vmz-ui-checkbox__input:focus-visible {
|
|
33
26
|
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
34
|
-
|
|
27
|
+
}
|
|
35
28
|
|
|
36
|
-
|
|
29
|
+
.vmz-ui-checkbox__input:disabled {
|
|
37
30
|
opacity: 0.55;
|
|
38
31
|
cursor: not-allowed;
|
|
39
|
-
|
|
32
|
+
}
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
.vmz-ui-checkbox__label {
|
|
42
35
|
font-weight: 600;
|
|
43
|
-
|
|
36
|
+
}
|
|
44
37
|
</style>
|
|
45
|
-
|
|
46
38
|
<script client>
|
|
47
39
|
/**
|
|
48
|
-
* VMZ UI — Checkbox (UI2).
|
|
49
|
-
* Label association via wrapping label + for/id; parent owns checked (no parallel form store).
|
|
50
|
-
*
|
|
51
|
-
*/
|
|
40
|
+
* VMZ UI — Checkbox (UI2).
|
|
41
|
+
* Label association via wrapping label + for/id; parent owns checked (no parallel form store).
|
|
42
|
+
* Native change reports the committed checked state to the parent.
|
|
43
|
+
*/
|
|
52
44
|
export default class Checkbox {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}) => void) | null = null;
|
|
63
|
-
onToggle(ev) {
|
|
64
|
-
if (this.disabled) return;
|
|
65
|
-
if (ev && typeof ev.preventDefault === "function") ev.preventDefault();
|
|
66
|
-
const next = !this.checked;
|
|
67
|
-
const payload = { target: { checked: next } };
|
|
68
|
-
this.emit("change", payload);
|
|
69
|
-
if (typeof this.onChange === "function") {
|
|
70
|
-
this.onChange(payload);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
45
|
+
public label: string = "";
|
|
46
|
+
public checked: boolean = false;
|
|
47
|
+
public disabled: boolean = false;
|
|
48
|
+
public controlId: string = "vmz-checkbox";
|
|
49
|
+
public describedBy: string = "";
|
|
50
|
+
onToggle(ev) {
|
|
51
|
+
if (this.disabled) return;
|
|
52
|
+
this.emit("change", !!ev?.target?.checked);
|
|
53
|
+
}
|
|
73
54
|
}
|
|
74
55
|
</script>
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
<figure data-vmz-ui="code-block" class="vmz-ui-code-block">
|
|
3
|
+
<div class="vmz-ui-code-block__bar">
|
|
4
|
+
<figcaption v-if="caption" class="vmz-ui-code-block__caption">
|
|
5
|
+
{{ caption }}
|
|
6
|
+
</figcaption>
|
|
7
|
+
<Button type="button" variant="ghost" @click="onCopy">
|
|
8
|
+
{{ copyLabel }}
|
|
9
|
+
</Button>
|
|
10
|
+
</div>
|
|
11
|
+
<pre class="vmz-ui-code-block__pre">
|
|
12
|
+
<code class="vmz-ui-code-block__code">
|
|
13
|
+
{{ code }}
|
|
14
|
+
</code>
|
|
15
|
+
</pre>
|
|
8
16
|
</figure>
|
|
9
17
|
</template>
|
|
10
|
-
|
|
11
18
|
<style>
|
|
12
|
-
|
|
19
|
+
.vmz-ui-code-block {
|
|
13
20
|
margin: 0;
|
|
14
21
|
display: flex;
|
|
15
22
|
flex-direction: column;
|
|
@@ -18,9 +25,9 @@
|
|
|
18
25
|
border-radius: var(--vmz-radius-md, 6px);
|
|
19
26
|
background: var(--vmz-surface-mist);
|
|
20
27
|
overflow: hidden;
|
|
21
|
-
|
|
28
|
+
}
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
.vmz-ui-code-block__bar {
|
|
24
31
|
display: flex;
|
|
25
32
|
flex-wrap: wrap;
|
|
26
33
|
align-items: center;
|
|
@@ -29,39 +36,38 @@
|
|
|
29
36
|
padding: 0.35rem 0.55rem;
|
|
30
37
|
border-bottom: 1px solid var(--vmz-line-default);
|
|
31
38
|
background: var(--vmz-surface-paper);
|
|
32
|
-
|
|
39
|
+
}
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
.vmz-ui-code-block__caption {
|
|
35
42
|
margin: 0;
|
|
36
43
|
font-family: var(--vmz-font-mono);
|
|
37
44
|
font-size: 0.8rem;
|
|
38
45
|
color: var(--vmz-text-steel);
|
|
39
|
-
|
|
46
|
+
}
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
.vmz-ui-code-block__pre {
|
|
42
49
|
margin: 0;
|
|
43
50
|
padding: 0.85rem 1rem;
|
|
44
51
|
overflow-x: auto;
|
|
45
|
-
|
|
52
|
+
}
|
|
46
53
|
|
|
47
|
-
|
|
54
|
+
.vmz-ui-code-block__code {
|
|
48
55
|
font-family: var(--vmz-font-mono);
|
|
49
56
|
font-size: 0.88rem;
|
|
50
57
|
line-height: 1.5;
|
|
51
58
|
color: var(--vmz-text-ink);
|
|
52
59
|
white-space: pre;
|
|
53
|
-
|
|
60
|
+
}
|
|
54
61
|
</style>
|
|
55
|
-
|
|
56
62
|
<script client>
|
|
57
63
|
/**
|
|
58
|
-
* VMZ UI — CodeBlock (Document/Product composition).
|
|
59
|
-
* Source is readable in SSR HTML; copy is progressive enhancement via onCopy.
|
|
60
|
-
*/
|
|
64
|
+
* VMZ UI — CodeBlock (Document/Product composition).
|
|
65
|
+
* Source is readable in SSR HTML; copy is progressive enhancement via onCopy.
|
|
66
|
+
*/
|
|
61
67
|
export default class CodeBlock {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
public code: string = "";
|
|
69
|
+
public caption: string = "";
|
|
70
|
+
public copyLabel: string = "Copy";
|
|
71
|
+
public onCopy: ((e: Event) => void) | null = null;
|
|
66
72
|
}
|
|
67
73
|
</script>
|
|
@@ -1,24 +1,42 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
<div data-vmz-ui="collapse" class="vmz-ui-collapse">
|
|
3
|
+
<details v-for="item in items" :key="item.id" :data-vmz-collapse-item="item.id">
|
|
4
|
+
<summary :data-vmz-collapse-trigger="item.id">
|
|
5
|
+
{{ item.title }}
|
|
6
|
+
</summary>
|
|
7
|
+
<div :data-vmz-collapse-body="item.id" class="vmz-ui-collapse__body">
|
|
8
|
+
{{ item.body }}
|
|
9
|
+
</div>
|
|
10
|
+
</details>
|
|
11
|
+
</div>
|
|
12
12
|
</template>
|
|
13
13
|
<style>
|
|
14
|
-
.vmz-ui-collapse{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
.vmz-ui-collapse {
|
|
15
|
+
border: 1px solid var(--vmz-line-default);
|
|
16
|
+
border-radius: var(--vmz-radius-lg, 8px);
|
|
17
|
+
background: var(--vmz-surface-paper);
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
.vmz-ui-collapse details + details {
|
|
21
|
+
border-top: 1px solid var(--vmz-line-default);
|
|
22
|
+
}
|
|
23
|
+
.vmz-ui-collapse summary {
|
|
24
|
+
padding: 0.85rem 1rem;
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
background: var(--vmz-surface-paper);
|
|
28
|
+
}
|
|
29
|
+
.vmz-ui-collapse summary:hover {
|
|
30
|
+
background: var(--vmz-surface-mist);
|
|
31
|
+
}
|
|
32
|
+
.vmz-ui-collapse__body {
|
|
33
|
+
padding: 0 1rem 1rem;
|
|
34
|
+
color: var(--vmz-text-steel);
|
|
35
|
+
line-height: 1.6;
|
|
36
|
+
}
|
|
19
37
|
</style>
|
|
20
38
|
<script client>
|
|
21
39
|
export default class Collapse {
|
|
22
|
-
|
|
40
|
+
public items: Array<{ id: string; title: string; body: string }> = [];
|
|
23
41
|
}
|
|
24
42
|
</script>
|
|
@@ -1,45 +1,43 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
</
|
|
37
|
-
</div>
|
|
2
|
+
<div data-vmz-ui="console-shell" class="vmz-ui-console-shell">
|
|
3
|
+
<aside data-vmz-shell="sidebar" :aria-label="navLabel" class="vmz-ui-console-shell__sidebar">
|
|
4
|
+
<a :href="homeHref" class="vmz-ui-console-shell__brand">
|
|
5
|
+
{{ brand }}
|
|
6
|
+
</a>
|
|
7
|
+
<nav class="vmz-ui-console-shell__nav">
|
|
8
|
+
<a v-for="item in nav" :key="item.id" :href="item.href" :data-vmz-nav="item.id" :data-active='item.id === activeNavId ? "true" : null' :aria-current='item.id === activeNavId ? "page" : null'>
|
|
9
|
+
{{ item.title }}
|
|
10
|
+
</a>
|
|
11
|
+
</nav>
|
|
12
|
+
</aside>
|
|
13
|
+
<div class="vmz-ui-console-shell__body">
|
|
14
|
+
<header data-vmz-shell="header" class="vmz-ui-console-shell__header">
|
|
15
|
+
<div class="vmz-ui-console-shell__header-copy">
|
|
16
|
+
<p v-if="breadcrumbLabel" data-vmz-shell="breadcrumb" class="vmz-ui-console-shell__breadcrumb">
|
|
17
|
+
{{ breadcrumbLabel }}
|
|
18
|
+
</p>
|
|
19
|
+
<h1 class="vmz-ui-console-shell__title">
|
|
20
|
+
{{ title }}
|
|
21
|
+
</h1>
|
|
22
|
+
<p v-if="subtitle" class="vmz-ui-console-shell__subtitle">
|
|
23
|
+
{{ subtitle }}
|
|
24
|
+
</p>
|
|
25
|
+
</div>
|
|
26
|
+
<a v-if="primaryActionLabel && primaryActionHref" :href="primaryActionHref" class="vmz-ui-console-shell__action">
|
|
27
|
+
{{ primaryActionLabel }}
|
|
28
|
+
</a>
|
|
29
|
+
</header>
|
|
30
|
+
<main data-vmz-shell="main" class="vmz-ui-console-shell__main">
|
|
31
|
+
<slot />
|
|
32
|
+
</main>
|
|
33
|
+
<footer v-if="footer" data-vmz-shell="footer" class="vmz-ui-console-shell__footer">
|
|
34
|
+
{{ footer }}
|
|
35
|
+
</footer>
|
|
36
|
+
</div>
|
|
38
37
|
</div>
|
|
39
38
|
</template>
|
|
40
|
-
|
|
41
39
|
<style>
|
|
42
|
-
|
|
40
|
+
.vmz-ui-console-shell {
|
|
43
41
|
display: grid;
|
|
44
42
|
grid-template-columns: 13rem minmax(0, 1fr);
|
|
45
43
|
grid-template-rows: minmax(100%, 100%);
|
|
@@ -48,9 +46,9 @@
|
|
|
48
46
|
height: 100dvh;
|
|
49
47
|
color: inherit;
|
|
50
48
|
background: var(--vmz-surface-page, #f5f6f8);
|
|
51
|
-
|
|
49
|
+
}
|
|
52
50
|
|
|
53
|
-
|
|
51
|
+
.vmz-ui-console-shell__sidebar {
|
|
54
52
|
display: flex;
|
|
55
53
|
flex-direction: column;
|
|
56
54
|
gap: 1rem;
|
|
@@ -59,30 +57,30 @@
|
|
|
59
57
|
min-height: 100%;
|
|
60
58
|
align-self: stretch;
|
|
61
59
|
background: #fff;
|
|
62
|
-
|
|
60
|
+
}
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
.vmz-ui-console-shell__brand {
|
|
65
63
|
font: inherit;
|
|
66
64
|
font-weight: 600;
|
|
67
65
|
font-size: 1rem;
|
|
68
66
|
letter-spacing: 0;
|
|
69
67
|
text-decoration: none;
|
|
70
68
|
color: #1f2329;
|
|
71
|
-
|
|
69
|
+
}
|
|
72
70
|
|
|
73
|
-
|
|
71
|
+
.vmz-ui-console-shell__brand:focus-visible {
|
|
74
72
|
outline: none;
|
|
75
73
|
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
76
|
-
|
|
74
|
+
}
|
|
77
75
|
|
|
78
|
-
|
|
76
|
+
.vmz-ui-console-shell__nav {
|
|
79
77
|
display: flex;
|
|
80
78
|
flex-direction: column;
|
|
81
79
|
gap: 0.25rem;
|
|
82
80
|
flex: 1;
|
|
83
|
-
|
|
81
|
+
}
|
|
84
82
|
|
|
85
|
-
|
|
83
|
+
.vmz-ui-console-shell__nav a {
|
|
86
84
|
font: inherit;
|
|
87
85
|
font-weight: 400;
|
|
88
86
|
font-size: 0.875rem;
|
|
@@ -91,29 +89,29 @@
|
|
|
91
89
|
color: #51565d;
|
|
92
90
|
padding: 0.45rem 0.55rem;
|
|
93
91
|
border-radius: 6px;
|
|
94
|
-
|
|
92
|
+
}
|
|
95
93
|
|
|
96
|
-
|
|
94
|
+
.vmz-ui-console-shell__nav a[data-active="true"] {
|
|
97
95
|
color: #0958d9;
|
|
98
96
|
font-weight: 500;
|
|
99
97
|
background: #e6f4ff;
|
|
100
|
-
|
|
98
|
+
}
|
|
101
99
|
|
|
102
|
-
|
|
100
|
+
.vmz-ui-console-shell__nav a:focus-visible {
|
|
103
101
|
outline: none;
|
|
104
102
|
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
105
|
-
|
|
103
|
+
}
|
|
106
104
|
|
|
107
|
-
|
|
105
|
+
.vmz-ui-console-shell__body {
|
|
108
106
|
display: flex;
|
|
109
107
|
flex-direction: column;
|
|
110
108
|
min-width: 0;
|
|
111
109
|
min-height: 0;
|
|
112
110
|
height: 100%;
|
|
113
111
|
overflow: auto;
|
|
114
|
-
|
|
112
|
+
}
|
|
115
113
|
|
|
116
|
-
|
|
114
|
+
.vmz-ui-console-shell__header {
|
|
117
115
|
position: sticky;
|
|
118
116
|
top: 0;
|
|
119
117
|
z-index: 20;
|
|
@@ -125,37 +123,37 @@
|
|
|
125
123
|
padding: 0.75rem 1.5rem;
|
|
126
124
|
border-bottom: 1px solid var(--vmz-line-subtle, #e5e6eb);
|
|
127
125
|
background: #fff;
|
|
128
|
-
|
|
126
|
+
}
|
|
129
127
|
|
|
130
|
-
|
|
128
|
+
.vmz-ui-console-shell__header-copy {
|
|
131
129
|
display: grid;
|
|
132
130
|
gap: 0.15rem;
|
|
133
131
|
min-width: 0;
|
|
134
|
-
|
|
132
|
+
}
|
|
135
133
|
|
|
136
|
-
|
|
134
|
+
.vmz-ui-console-shell__breadcrumb {
|
|
137
135
|
margin: 0;
|
|
138
136
|
color: #646a73;
|
|
139
137
|
font-size: 0.8125rem;
|
|
140
138
|
line-height: 1.25rem;
|
|
141
|
-
|
|
139
|
+
}
|
|
142
140
|
|
|
143
|
-
|
|
141
|
+
.vmz-ui-console-shell__title {
|
|
144
142
|
margin: 0;
|
|
145
143
|
font-size: 1.5rem;
|
|
146
144
|
line-height: 2rem;
|
|
147
145
|
font-weight: 600;
|
|
148
146
|
color: #1f2329;
|
|
149
|
-
|
|
147
|
+
}
|
|
150
148
|
|
|
151
|
-
|
|
149
|
+
.vmz-ui-console-shell__subtitle {
|
|
152
150
|
margin: 0;
|
|
153
151
|
color: #51565d;
|
|
154
152
|
font-size: 0.875rem;
|
|
155
153
|
line-height: 1.375rem;
|
|
156
|
-
|
|
154
|
+
}
|
|
157
155
|
|
|
158
|
-
|
|
156
|
+
.vmz-ui-console-shell__action {
|
|
159
157
|
display: inline-flex;
|
|
160
158
|
align-items: center;
|
|
161
159
|
justify-content: center;
|
|
@@ -168,87 +166,86 @@
|
|
|
168
166
|
font-weight: 500;
|
|
169
167
|
text-decoration: none;
|
|
170
168
|
white-space: nowrap;
|
|
171
|
-
|
|
169
|
+
}
|
|
172
170
|
|
|
173
|
-
|
|
171
|
+
.vmz-ui-console-shell__action:hover {
|
|
174
172
|
color: #fff;
|
|
175
173
|
background: #0958d9;
|
|
176
|
-
|
|
174
|
+
}
|
|
177
175
|
|
|
178
|
-
|
|
176
|
+
.vmz-ui-console-shell__action:focus-visible {
|
|
179
177
|
outline: none;
|
|
180
178
|
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
181
|
-
|
|
179
|
+
}
|
|
182
180
|
|
|
183
|
-
|
|
181
|
+
.vmz-ui-console-shell__main {
|
|
184
182
|
flex: 1 1 auto;
|
|
185
183
|
padding: 1.5rem;
|
|
186
184
|
display: flex;
|
|
187
185
|
flex-direction: column;
|
|
188
186
|
gap: 1rem;
|
|
189
|
-
|
|
187
|
+
}
|
|
190
188
|
|
|
191
|
-
|
|
189
|
+
.vmz-ui-console-shell__footer {
|
|
192
190
|
margin-top: auto;
|
|
193
191
|
padding: 0.85rem 1.5rem 1.1rem;
|
|
194
192
|
border-top: 1px solid var(--vmz-line-subtle, #e5e6eb);
|
|
195
193
|
color: var(--vmz-text-steel, #646a73);
|
|
196
194
|
font-size: 0.82rem;
|
|
197
195
|
background: #fff;
|
|
198
|
-
|
|
196
|
+
}
|
|
199
197
|
|
|
200
|
-
|
|
198
|
+
@media (max-width: 40rem) {
|
|
201
199
|
.vmz-ui-console-shell {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
200
|
+
grid-template-columns: 1fr;
|
|
201
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
202
|
+
height: auto;
|
|
203
|
+
min-height: 100dvh;
|
|
206
204
|
}
|
|
207
205
|
|
|
208
206
|
.vmz-ui-console-shell__sidebar {
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
border-right: 0;
|
|
208
|
+
border-bottom: 1px solid var(--vmz-line-subtle, #e5e6eb);
|
|
211
209
|
}
|
|
212
210
|
|
|
213
211
|
.vmz-ui-console-shell__nav {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
212
|
+
flex-direction: row;
|
|
213
|
+
flex-wrap: wrap;
|
|
214
|
+
flex: 0;
|
|
217
215
|
}
|
|
218
216
|
|
|
219
217
|
.vmz-ui-console-shell__header {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
218
|
+
flex-direction: column;
|
|
219
|
+
align-items: flex-start;
|
|
220
|
+
padding-inline: 1rem;
|
|
223
221
|
}
|
|
224
222
|
|
|
225
223
|
.vmz-ui-console-shell__main {
|
|
226
|
-
|
|
224
|
+
padding: 1rem;
|
|
227
225
|
}
|
|
228
|
-
|
|
226
|
+
}
|
|
229
227
|
</style>
|
|
230
|
-
|
|
231
228
|
<script client>
|
|
232
229
|
/**
|
|
233
|
-
* VMZ UI — ConsoleShell (Console composition).
|
|
234
|
-
* Sidebar + sticky header + main slot + optional footer. Parent supplies nav.
|
|
235
|
-
*/
|
|
230
|
+
* VMZ UI — ConsoleShell (Console composition).
|
|
231
|
+
* Sidebar + sticky header + main slot + optional footer. Parent supplies nav.
|
|
232
|
+
*/
|
|
236
233
|
export default class ConsoleShell {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
234
|
+
public brand: string = "VMZ";
|
|
235
|
+
public homeHref: string = "/";
|
|
236
|
+
public title: string = "Console";
|
|
237
|
+
public subtitle: string = "";
|
|
238
|
+
public breadcrumbLabel: string = "";
|
|
239
|
+
public primaryActionLabel: string = "";
|
|
240
|
+
public primaryActionHref: string = "";
|
|
241
|
+
public activeNavId: string = "";
|
|
242
|
+
public navLabel: string = "Console";
|
|
243
|
+
public footer: string = "";
|
|
244
|
+
/** @type {{ id: string, title: string, href: string }[]} */
|
|
245
|
+
public nav: {
|
|
246
|
+
id: string;
|
|
247
|
+
title: string;
|
|
248
|
+
href: string;
|
|
249
|
+
}[] = [];
|
|
253
250
|
}
|
|
254
251
|
</script>
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
2
|
+
<main data-vmz-ui="content" class="vmz-ui-content">
|
|
3
|
+
<slot />
|
|
4
|
+
</main>
|
|
3
5
|
</template>
|
|
4
|
-
|
|
5
6
|
<style>
|
|
6
|
-
|
|
7
|
+
.vmz-ui-content {
|
|
8
|
+
flex: 1;
|
|
9
|
+
min-width: 0;
|
|
10
|
+
padding: 1.5rem;
|
|
11
|
+
}
|
|
7
12
|
</style>
|
|
8
|
-
|
|
9
13
|
<script client>
|
|
10
14
|
export default class Content {}
|
|
11
15
|
</script>
|