@vmz/ui 0.0.4 → 0.1.1
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 +15 -2
- package/contracts/token-requirements.v0.json +45 -10
- package/package.json +18 -2
- package/presets/web-surface.v0.json +24 -10
- package/src/components/Accordion.vmz +88 -89
- package/src/components/Alert.vmz +64 -63
- package/src/components/AppShell.vmz +64 -45
- package/src/components/Autocomplete.vmz +152 -151
- package/src/components/Avatar.vmz +16 -0
- package/src/components/Badge.vmz +46 -46
- package/src/components/Breadcrumb.vmz +52 -48
- package/src/components/BulkActions.vmz +37 -37
- package/src/components/Button.vmz +91 -70
- package/src/components/Callout.vmz +61 -61
- package/src/components/Card.vmz +58 -52
- package/src/components/Checkbox.vmz +56 -53
- package/src/components/CodeBlock.vmz +51 -51
- package/src/components/Collapse.vmz +20 -0
- package/src/components/ConsoleShell.vmz +134 -99
- package/src/components/Content.vmz +11 -0
- package/src/components/DataTable.vmz +197 -196
- package/src/components/DatePicker.vmz +650 -75
- package/src/components/Dialog.vmz +365 -384
- package/src/components/Divider.vmz +19 -0
- package/src/components/Drawer.vmz +361 -378
- package/src/components/Dropdown.vmz +22 -0
- package/src/components/Empty.vmz +36 -36
- package/src/components/Field.vmz +69 -40
- package/src/components/FilterBar.vmz +15 -15
- package/src/components/Flex.vmz +12 -0
- package/src/components/Footer.vmz +11 -0
- package/src/components/Form.vmz +56 -58
- package/src/components/FormItem.vmz +59 -59
- package/src/components/Grid.vmz +12 -0
- package/src/components/Header.vmz +11 -0
- package/src/components/Icon.vmz +86 -0
- package/src/components/Layout.vmz +11 -0
- package/src/components/Link.vmz +33 -33
- package/src/components/List.vmz +96 -96
- package/src/components/Menu.vmz +229 -240
- package/src/components/Notification.vmz +62 -62
- package/src/components/Pagination.vmz +63 -65
- package/src/components/Popover.vmz +202 -219
- package/src/components/Progress.vmz +18 -0
- package/src/components/Prose.vmz +61 -61
- package/src/components/QueryForm.vmz +26 -27
- package/src/components/RadioGroup.vmz +116 -113
- package/src/components/Result.vmz +63 -63
- package/src/components/Segmented.vmz +29 -0
- package/src/components/Select.vmz +462 -286
- package/src/components/Sider.vmz +6 -0
- package/src/components/Skeleton.vmz +58 -58
- package/src/components/Space.vmz +15 -0
- package/src/components/Spinner.vmz +29 -29
- package/src/components/Steps.vmz +86 -86
- package/src/components/Switch.vmz +86 -88
- package/src/components/Table.vmz +116 -114
- package/src/components/Tabs.vmz +113 -112
- package/src/components/Tag.vmz +8 -0
- package/src/components/TextArea.vmz +76 -49
- package/src/components/Timeline.vmz +55 -50
- package/src/components/Toc.vmz +64 -60
- package/src/components/Tooltip.vmz +51 -51
- package/src/components/Tree.vmz +184 -190
- package/src/components/Typography.vmz +9 -0
- package/src/components/Upload.vmz +1192 -82
package/src/components/Card.vmz
CHANGED
|
@@ -1,81 +1,87 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section class="vmz-ui-card" data-vmz-ui="card">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
<section class="vmz-ui-card" data-vmz-ui="card" data-size={size} data-bordered={bordered ? 'true' : 'false'} data-hoverable={hoverable ? 'true' : 'false'}>
|
|
3
|
+
<header if={title} class="vmz-ui-card__header">
|
|
4
|
+
<h2 class="vmz-ui-card__title">{title}</h2>
|
|
5
|
+
<p if={description} class="vmz-ui-card__description">{description}</p>
|
|
6
|
+
</header>
|
|
7
|
+
<div class="vmz-ui-card__body">
|
|
8
|
+
<slot />
|
|
9
|
+
</div>
|
|
10
|
+
</section>
|
|
11
11
|
</template>
|
|
12
12
|
|
|
13
13
|
<style>
|
|
14
14
|
.vmz-ui-card {
|
|
15
15
|
display: flex;
|
|
16
16
|
flex-direction: column;
|
|
17
|
-
gap:
|
|
18
|
-
padding:
|
|
19
|
-
|
|
20
|
-
border:
|
|
21
|
-
border-radius: 2px;
|
|
17
|
+
gap: 0.75rem;
|
|
18
|
+
padding: 1rem 1.25rem;
|
|
19
|
+
border: 1px solid var(--vmz-line-subtle, var(--vmz-line-default));
|
|
20
|
+
border-radius: var(--vmz-radius-lg, 8px);
|
|
22
21
|
background: var(--vmz-surface-paper);
|
|
23
22
|
color: var(--vmz-text-ink);
|
|
24
|
-
box-shadow:
|
|
23
|
+
box-shadow: var(--vmz-shadow-card, none);
|
|
25
24
|
}
|
|
25
|
+
.vmz-ui-card[data-bordered='false'] { border-color: transparent; }
|
|
26
|
+
.vmz-ui-card[data-hoverable='true'] { transition: border-color var(--vmz-motion-control-duration, .16s), box-shadow var(--vmz-motion-control-duration, .16s); }
|
|
27
|
+
.vmz-ui-card[data-hoverable='true']:hover { box-shadow: var(--vmz-shadow-card-hover, 0 1px 2px -2px rgba(0,0,0,.08), 0 3px 6px 0 rgba(0,0,0,.06)); }
|
|
28
|
+
.vmz-ui-card[data-size='small'] { gap: .5rem; padding: .75rem 1rem; }
|
|
26
29
|
|
|
27
|
-
:where([data-density='compact']) .vmz-ui-card {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
30
|
+
:where([data-density='compact']) .vmz-ui-card {
|
|
31
|
+
gap: var(--vmz-density-compact-gap);
|
|
32
|
+
padding: var(--vmz-density-compact-padding-y) var(--vmz-density-compact-padding-x);
|
|
33
|
+
}
|
|
31
34
|
|
|
32
|
-
:where([data-density='dense']) .vmz-ui-card {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
35
|
+
:where([data-density='dense']) .vmz-ui-card {
|
|
36
|
+
gap: var(--vmz-density-dense-gap);
|
|
37
|
+
padding: var(--vmz-density-dense-padding-y) var(--vmz-density-dense-padding-x);
|
|
38
|
+
}
|
|
36
39
|
|
|
37
|
-
.vmz-ui-card__header {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
40
|
+
.vmz-ui-card__header {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: 0.35rem;
|
|
44
|
+
}
|
|
42
45
|
|
|
43
46
|
.vmz-ui-card__title {
|
|
44
47
|
margin: 0;
|
|
45
|
-
font-family: var(--vmz-font-
|
|
46
|
-
font-size:
|
|
47
|
-
font-weight:
|
|
48
|
+
font-family: var(--vmz-font-sans, inherit);
|
|
49
|
+
font-size: 1rem;
|
|
50
|
+
font-weight: 600;
|
|
48
51
|
color: var(--vmz-text-ink);
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
.vmz-ui-card__description {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
54
|
+
.vmz-ui-card__description {
|
|
55
|
+
margin: 0;
|
|
56
|
+
color: var(--vmz-text-steel);
|
|
57
|
+
line-height: 1.45;
|
|
58
|
+
}
|
|
56
59
|
|
|
57
|
-
.vmz-ui-card__body {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
60
|
+
.vmz-ui-card__body {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
gap: var(--vmz-density-control-gap);
|
|
64
|
+
}
|
|
62
65
|
|
|
63
|
-
:where([data-density='compact']) .vmz-ui-card__body {
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
+
:where([data-density='compact']) .vmz-ui-card__body {
|
|
67
|
+
gap: var(--vmz-density-compact-gap);
|
|
68
|
+
}
|
|
66
69
|
|
|
67
|
-
:where([data-density='dense']) .vmz-ui-card__body {
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
+
:where([data-density='dense']) .vmz-ui-card__body {
|
|
71
|
+
gap: var(--vmz-density-dense-gap);
|
|
72
|
+
}
|
|
70
73
|
</style>
|
|
71
74
|
|
|
72
75
|
<script client>
|
|
73
76
|
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
* VMZ UI — Card (Commercial Surface).
|
|
78
|
+
* Surface container; spacing from density.*; chrome from surface/line/text.
|
|
79
|
+
*/
|
|
77
80
|
export default class Card {
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
public title: string = "";
|
|
82
|
+
public description: string = "";
|
|
83
|
+
public size: string = "middle";
|
|
84
|
+
public bordered: boolean = true;
|
|
85
|
+
public hoverable: boolean = false;
|
|
80
86
|
}
|
|
81
87
|
</script>
|
|
@@ -1,69 +1,72 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<label class="vmz-ui-checkbox" data-vmz-ui="checkbox" for={controlId}>
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
<input
|
|
4
|
+
id={controlId}
|
|
5
|
+
class="vmz-ui-checkbox__input"
|
|
6
|
+
type="checkbox"
|
|
7
|
+
checked={checked}
|
|
8
|
+
disabled={disabled}
|
|
9
|
+
aria-describedby={describedBy}
|
|
10
|
+
onClick={onToggle}
|
|
11
|
+
/>
|
|
12
|
+
<span class="vmz-ui-checkbox__label">{label}</span>
|
|
13
|
+
</label>
|
|
14
14
|
</template>
|
|
15
15
|
|
|
16
16
|
<style>
|
|
17
|
-
.vmz-ui-checkbox {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
17
|
+
.vmz-ui-checkbox {
|
|
18
|
+
display: inline-flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: 0.45rem;
|
|
21
|
+
font: inherit;
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
}
|
|
24
24
|
|
|
25
|
-
.vmz-ui-checkbox__input {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
25
|
+
.vmz-ui-checkbox__input {
|
|
26
|
+
width: 1rem;
|
|
27
|
+
height: 1rem;
|
|
28
|
+
accent-color: var(--vmz-action-primary-background);
|
|
29
|
+
outline: none;
|
|
30
|
+
}
|
|
31
31
|
|
|
32
|
-
.vmz-ui-checkbox__input:focus-visible {
|
|
33
|
-
|
|
34
|
-
}
|
|
32
|
+
.vmz-ui-checkbox__input:focus-visible {
|
|
33
|
+
box-shadow: 0 0 0 2px var(--vmz-focus-ring);
|
|
34
|
+
}
|
|
35
35
|
|
|
36
|
-
.vmz-ui-checkbox__input:disabled {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
36
|
+
.vmz-ui-checkbox__input:disabled {
|
|
37
|
+
opacity: 0.55;
|
|
38
|
+
cursor: not-allowed;
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
.vmz-ui-checkbox__label {
|
|
42
|
-
|
|
43
|
-
}
|
|
41
|
+
.vmz-ui-checkbox__label {
|
|
42
|
+
font-weight: 600;
|
|
43
|
+
}
|
|
44
44
|
</style>
|
|
45
45
|
|
|
46
46
|
<script client>
|
|
47
47
|
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
* VMZ UI — Checkbox (UI2).
|
|
49
|
+
* Label association via wrapping label + for/id; parent owns checked (no parallel form store).
|
|
50
|
+
* Toggle goes through onChange so live `checked` prop stays authoritative.
|
|
51
|
+
*/
|
|
52
52
|
export default class Checkbox {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
public label: string = "";
|
|
54
|
+
public checked: boolean = false;
|
|
55
|
+
public disabled: boolean = false;
|
|
56
|
+
public controlId: string = "vmz-checkbox";
|
|
57
|
+
public describedBy: string = "";
|
|
58
|
+
public onChange: ((e: {
|
|
59
|
+
target: {
|
|
60
|
+
checked: boolean;
|
|
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
|
+
if (typeof this.onChange === "function") {
|
|
68
|
+
this.onChange({ target: { checked: next } });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
68
71
|
}
|
|
69
72
|
</script>
|
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<figure class="vmz-ui-code-block" data-vmz-ui="code-block">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
<div class="vmz-ui-code-block__bar">
|
|
4
|
+
<figcaption if={caption} class="vmz-ui-code-block__caption">{caption}</figcaption>
|
|
5
|
+
<Button type="button" variant="ghost" onClick={onCopy}>{copyLabel}</Button>
|
|
6
|
+
</div>
|
|
7
|
+
<pre class="vmz-ui-code-block__pre"><code class="vmz-ui-code-block__code">{code}</code></pre>
|
|
8
|
+
</figure>
|
|
9
9
|
</template>
|
|
10
10
|
|
|
11
11
|
<style>
|
|
12
|
-
.vmz-ui-code-block {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
12
|
+
.vmz-ui-code-block {
|
|
13
|
+
margin: 0;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: 0.45rem;
|
|
17
|
+
border: 1px solid var(--vmz-line-default);
|
|
18
|
+
border-radius: var(--vmz-radius-md, 6px);
|
|
19
|
+
background: var(--vmz-surface-mist);
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
.vmz-ui-code-block__bar {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
23
|
+
.vmz-ui-code-block__bar {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-wrap: wrap;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: space-between;
|
|
28
|
+
gap: 0.45rem;
|
|
29
|
+
padding: 0.35rem 0.55rem;
|
|
30
|
+
border-bottom: 1px solid var(--vmz-line-default);
|
|
31
|
+
background: var(--vmz-surface-paper);
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
.vmz-ui-code-block__caption {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
34
|
+
.vmz-ui-code-block__caption {
|
|
35
|
+
margin: 0;
|
|
36
|
+
font-family: var(--vmz-font-mono);
|
|
37
|
+
font-size: 0.8rem;
|
|
38
|
+
color: var(--vmz-text-steel);
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
.vmz-ui-code-block__pre {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
41
|
+
.vmz-ui-code-block__pre {
|
|
42
|
+
margin: 0;
|
|
43
|
+
padding: 0.85rem 1rem;
|
|
44
|
+
overflow-x: auto;
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
.vmz-ui-code-block__code {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
47
|
+
.vmz-ui-code-block__code {
|
|
48
|
+
font-family: var(--vmz-font-mono);
|
|
49
|
+
font-size: 0.88rem;
|
|
50
|
+
line-height: 1.5;
|
|
51
|
+
color: var(--vmz-text-ink);
|
|
52
|
+
white-space: pre;
|
|
53
|
+
}
|
|
54
54
|
</style>
|
|
55
55
|
|
|
56
56
|
<script client>
|
|
57
57
|
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
* VMZ UI — CodeBlock (Document/Product composition).
|
|
59
|
+
* Source is readable in SSR HTML; copy is progressive enhancement via onCopy.
|
|
60
|
+
*/
|
|
61
61
|
export default class CodeBlock {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
public code: string = "";
|
|
63
|
+
public caption: string = "";
|
|
64
|
+
public copyLabel: string = "Copy";
|
|
65
|
+
public onCopy: ((e: Event) => void) | null = null;
|
|
66
66
|
}
|
|
67
67
|
</script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="vmz-ui-collapse" data-vmz-ui="collapse">
|
|
3
|
+
<details each={items} as="item" key={item.id}>
|
|
4
|
+
<summary>{item.title}</summary>
|
|
5
|
+
<div class="vmz-ui-collapse__body">{item.body}</div>
|
|
6
|
+
</details>
|
|
7
|
+
</div>
|
|
8
|
+
</template>
|
|
9
|
+
<style>
|
|
10
|
+
.vmz-ui-collapse{border:1px solid var(--vmz-line-default);border-radius:var(--vmz-radius-lg,8px);background:var(--vmz-surface-paper);overflow:hidden}
|
|
11
|
+
.vmz-ui-collapse details+details{border-top:1px solid var(--vmz-line-default)}
|
|
12
|
+
.vmz-ui-collapse summary{padding:.85rem 1rem;font-weight:600;cursor:pointer;background:var(--vmz-surface-paper)}
|
|
13
|
+
.vmz-ui-collapse summary:hover{background:var(--vmz-surface-mist)}
|
|
14
|
+
.vmz-ui-collapse__body{padding:0 1rem 1rem;color:var(--vmz-text-steel);line-height:1.6}
|
|
15
|
+
</style>
|
|
16
|
+
<script client>
|
|
17
|
+
export default class Collapse {
|
|
18
|
+
public items: Array<{ id: string; title: string; body: string }> = [];
|
|
19
|
+
}
|
|
20
|
+
</script>
|