@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/README.md
CHANGED
|
@@ -21,18 +21,31 @@ Headline surface for this cut:
|
|
|
21
21
|
|
|
22
22
|
- Commercial / Console / Document-Product composition dogfood (homepage)
|
|
23
23
|
- Form depth, Structure, Overlay stacking, DataTable (ordinary HTML table — not `@vmz/ui-data-grid`)
|
|
24
|
+
- DatePicker owned calendar overlay (not native `input[type=date]` popup)
|
|
25
|
+
- Upload multipart binary (parent-owned FormData → `#server` File/Blob; progress/cancel)
|
|
24
26
|
- Density / RTL / preset materialize
|
|
25
27
|
- Motion continuity + interrupt/cancel
|
|
26
28
|
- Motion compiler IR thin gate (`pnpm verify -- motion-ir`)
|
|
27
29
|
- UI7 conformance pack (`@vmz/ui/conformance` + `pnpm verify -- ui7`)
|
|
30
|
+
- `@vmz/ui-data-grid` thin gate (virtualization + pinned column — not tree/group/pivot/edit)
|
|
28
31
|
|
|
29
32
|
Verify:
|
|
30
33
|
|
|
31
34
|
```bash
|
|
32
35
|
pnpm verify -- ui-automation
|
|
33
36
|
pnpm verify -- ui7
|
|
37
|
+
pnpm verify -- ui-data-grid
|
|
34
38
|
pnpm verify -- official-dogfood
|
|
35
39
|
```
|
|
36
40
|
|
|
37
|
-
Still open relative to Browser Production Profile v1: `browser-production` aggregate core gaps,
|
|
38
|
-
|
|
41
|
+
Still open relative to Browser Production Profile v1: `browser-production` aggregate core gaps,
|
|
42
|
+
`@vmz/ui-data-grid` deep capabilities, Upload cross-page session / multi-file parallel chunks,
|
|
43
|
+
`@vmz/test` Browser Host U0–U1, sibling `vmz-panel` product app.
|
|
44
|
+
|
|
45
|
+
## Commercial default surface
|
|
46
|
+
|
|
47
|
+
Default web surface targets modern commercial console density: flat 32px-class controls,
|
|
48
|
+
quiet borders, restrained radii, layered page/paper surfaces without Bootstrap-era inset
|
|
49
|
+
fields, accent bars, or card lift. Applications replace every semantic value through `/designs`.
|
|
50
|
+
Additional general-purpose components include layout primitives, typography, segmented controls,
|
|
51
|
+
tags, avatars, dropdowns, collapse panels and progress indicators.
|
|
@@ -116,17 +116,56 @@
|
|
|
116
116
|
"status.danger.foreground",
|
|
117
117
|
"focus.ring",
|
|
118
118
|
"density.control.padding-y",
|
|
119
|
-
"density.control.padding-x"
|
|
119
|
+
"density.control.padding-x",
|
|
120
|
+
"surface.paper"
|
|
120
121
|
],
|
|
121
122
|
"surfaces": ["WebSurface"],
|
|
122
|
-
"contracts": [
|
|
123
|
+
"contracts": [
|
|
124
|
+
"label",
|
|
125
|
+
"description",
|
|
126
|
+
"error",
|
|
127
|
+
"calendar-overlay",
|
|
128
|
+
"no-native-date-popup",
|
|
129
|
+
"parent-owned-value",
|
|
130
|
+
"overlay-escape-outside"
|
|
131
|
+
]
|
|
123
132
|
},
|
|
124
133
|
"Upload": {
|
|
125
134
|
"source": "src/components/Upload.vmz",
|
|
126
135
|
"stableHint": "ui.Upload",
|
|
127
|
-
"tokens": [
|
|
136
|
+
"tokens": [
|
|
137
|
+
"status.danger.foreground",
|
|
138
|
+
"status.success.foreground",
|
|
139
|
+
"action.primary.background",
|
|
140
|
+
"surface.paper",
|
|
141
|
+
"line.default",
|
|
142
|
+
"text.ink",
|
|
143
|
+
"text.steel",
|
|
144
|
+
"font.mono",
|
|
145
|
+
"focus.ring",
|
|
146
|
+
"density.control.padding-y",
|
|
147
|
+
"density.compact.padding-y",
|
|
148
|
+
"density.compact.padding-x",
|
|
149
|
+
"motion.control.duration",
|
|
150
|
+
"motion.control.easing"
|
|
151
|
+
],
|
|
128
152
|
"surfaces": ["WebSurface"],
|
|
129
|
-
"contracts": [
|
|
153
|
+
"contracts": [
|
|
154
|
+
"label",
|
|
155
|
+
"description",
|
|
156
|
+
"error",
|
|
157
|
+
"drop-zone",
|
|
158
|
+
"selection-constraints",
|
|
159
|
+
"queue",
|
|
160
|
+
"progress",
|
|
161
|
+
"cancel",
|
|
162
|
+
"destination-client",
|
|
163
|
+
"destination-server",
|
|
164
|
+
"destination-object",
|
|
165
|
+
"all-in-one-transport",
|
|
166
|
+
"parent-owned-result-value",
|
|
167
|
+
"no-useUpload"
|
|
168
|
+
]
|
|
130
169
|
},
|
|
131
170
|
"Field": {
|
|
132
171
|
"source": "src/components/Field.vmz",
|
|
@@ -202,8 +241,6 @@
|
|
|
202
241
|
"stableHint": "ui.Dialog",
|
|
203
242
|
"tokens": [
|
|
204
243
|
"action.primary.background",
|
|
205
|
-
"action.primary.foreground",
|
|
206
|
-
"action.primary.active",
|
|
207
244
|
"focus.ring",
|
|
208
245
|
"motion.overlay.duration",
|
|
209
246
|
"motion.overlay.easing"
|
|
@@ -247,14 +284,14 @@
|
|
|
247
284
|
"Tabs": {
|
|
248
285
|
"source": "src/components/Tabs.vmz",
|
|
249
286
|
"stableHint": "ui.Tabs",
|
|
250
|
-
"tokens": ["action.primary.background", "
|
|
287
|
+
"tokens": ["action.primary.background", "focus.ring"],
|
|
251
288
|
"surfaces": ["WebSurface"],
|
|
252
289
|
"contracts": ["tablist", "keyboard-roving", "live-selected-prop"]
|
|
253
290
|
},
|
|
254
291
|
"Menu": {
|
|
255
292
|
"source": "src/components/Menu.vmz",
|
|
256
293
|
"stableHint": "ui.Menu",
|
|
257
|
-
"tokens": ["action.primary.background", "
|
|
294
|
+
"tokens": ["action.primary.background", "focus.ring"],
|
|
258
295
|
"surfaces": ["WebSurface"],
|
|
259
296
|
"contracts": ["overlay-ownership", "escape-dismiss", "focus-restore", "outside-dismiss", "live-open-prop"]
|
|
260
297
|
},
|
|
@@ -263,8 +300,6 @@
|
|
|
263
300
|
"stableHint": "ui.Drawer",
|
|
264
301
|
"tokens": [
|
|
265
302
|
"action.primary.background",
|
|
266
|
-
"action.primary.foreground",
|
|
267
|
-
"action.primary.active",
|
|
268
303
|
"focus.ring",
|
|
269
304
|
"motion.overlay.duration",
|
|
270
305
|
"motion.overlay.easing"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vmz/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "VMZ UI — official UI framework (component contracts + semantic token requirements). Not a theme. Not a plugin.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,7 +52,23 @@
|
|
|
52
52
|
"./Accordion": "./src/components/Accordion.vmz",
|
|
53
53
|
"./Steps": "./src/components/Steps.vmz",
|
|
54
54
|
"./List": "./src/components/List.vmz",
|
|
55
|
-
"./Tree": "./src/components/Tree.vmz"
|
|
55
|
+
"./Tree": "./src/components/Tree.vmz",
|
|
56
|
+
"./Typography": "./src/components/Typography.vmz",
|
|
57
|
+
"./Space": "./src/components/Space.vmz",
|
|
58
|
+
"./Flex": "./src/components/Flex.vmz",
|
|
59
|
+
"./Grid": "./src/components/Grid.vmz",
|
|
60
|
+
"./Divider": "./src/components/Divider.vmz",
|
|
61
|
+
"./Tag": "./src/components/Tag.vmz",
|
|
62
|
+
"./Avatar": "./src/components/Avatar.vmz",
|
|
63
|
+
"./Dropdown": "./src/components/Dropdown.vmz",
|
|
64
|
+
"./Collapse": "./src/components/Collapse.vmz",
|
|
65
|
+
"./Progress": "./src/components/Progress.vmz",
|
|
66
|
+
"./Segmented": "./src/components/Segmented.vmz",
|
|
67
|
+
"./Layout": "./src/components/Layout.vmz",
|
|
68
|
+
"./Header": "./src/components/Header.vmz",
|
|
69
|
+
"./Sider": "./src/components/Sider.vmz",
|
|
70
|
+
"./Content": "./src/components/Content.vmz",
|
|
71
|
+
"./Footer": "./src/components/Footer.vmz"
|
|
56
72
|
},
|
|
57
73
|
"files": [
|
|
58
74
|
"src",
|
|
@@ -3,21 +3,34 @@
|
|
|
3
3
|
"id": "web-surface",
|
|
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
|
+
"foundation": {
|
|
7
|
+
"radius": { "sm": "2px", "md": "6px", "lg": "8px" },
|
|
8
|
+
"controlHeight": { "sm": "1.5rem", "middle": "2rem", "lg": "2.5rem" },
|
|
9
|
+
"layoutMaxWidth": "75rem",
|
|
10
|
+
"surfacePage": "#F5F5F5",
|
|
11
|
+
"surfaceFill": "#FAFAFA",
|
|
12
|
+
"textTertiary": "#8C8C8C",
|
|
13
|
+
"lineDefault": "#D9D9D9",
|
|
14
|
+
"lineSubtle": "#F0F0F0",
|
|
15
|
+
"shadowCard": "none",
|
|
16
|
+
"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)"
|
|
18
|
+
},
|
|
6
19
|
"density": {
|
|
7
20
|
"control": {
|
|
8
|
-
"padding-y": "0.
|
|
9
|
-
"padding-x": "0.
|
|
10
|
-
"gap": "0.
|
|
21
|
+
"padding-y": "0.25rem",
|
|
22
|
+
"padding-x": "0.75rem",
|
|
23
|
+
"gap": "0.5rem"
|
|
11
24
|
},
|
|
12
25
|
"compact": {
|
|
13
|
-
"padding-y": "0.
|
|
14
|
-
"padding-x": "0.
|
|
15
|
-
"gap": "0.
|
|
26
|
+
"padding-y": "0.125rem",
|
|
27
|
+
"padding-x": "0.5rem",
|
|
28
|
+
"gap": "0.35rem"
|
|
16
29
|
},
|
|
17
30
|
"dense": {
|
|
18
|
-
"padding-y": "0
|
|
19
|
-
"padding-x": "0.
|
|
20
|
-
"gap": "0.
|
|
31
|
+
"padding-y": "0",
|
|
32
|
+
"padding-x": "0.35rem",
|
|
33
|
+
"gap": "0.25rem"
|
|
21
34
|
}
|
|
22
35
|
},
|
|
23
36
|
"activation": {
|
|
@@ -30,5 +43,6 @@
|
|
|
30
43
|
"default": "application tokens base",
|
|
31
44
|
"dark": "themes/dark.json overlay",
|
|
32
45
|
"high-contrast": "themes/high-contrast.json overlay — stronger ink/line/focus"
|
|
33
|
-
}
|
|
46
|
+
},
|
|
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."
|
|
34
48
|
}
|
|
@@ -1,112 +1,111 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="vmz-ui-accordion" data-vmz-ui="accordion" aria-label={label}>
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
<div each={items} as="item" key={item.id} class="vmz-ui-accordion__item" data-vmz-accordion={item.id}>
|
|
4
|
+
<h3 class="vmz-ui-accordion__heading">
|
|
5
|
+
<button
|
|
6
|
+
type="button"
|
|
7
|
+
class="vmz-ui-accordion__trigger"
|
|
8
|
+
id={item.triggerId}
|
|
9
|
+
data-vmz-accordion-trigger={item.id}
|
|
10
|
+
aria-expanded={openId === item.id ? 'true' : 'false'}
|
|
11
|
+
aria-controls={item.panelId}
|
|
12
|
+
onClick={() => this.toggle(item.id)}
|
|
13
|
+
>
|
|
14
|
+
{item.title}
|
|
15
|
+
</button>
|
|
16
|
+
</h3>
|
|
17
|
+
<div
|
|
18
|
+
if={openId === item.id}
|
|
19
|
+
id={item.panelId}
|
|
20
|
+
class="vmz-ui-accordion__panel"
|
|
21
|
+
role="region"
|
|
22
|
+
data-vmz-accordion-panel={item.id}
|
|
23
|
+
aria-labelledby={item.triggerId}
|
|
13
24
|
>
|
|
14
|
-
{item.
|
|
15
|
-
</
|
|
16
|
-
</h3>
|
|
17
|
-
<div
|
|
18
|
-
if={openId === item.id}
|
|
19
|
-
id={item.panelId}
|
|
20
|
-
class="vmz-ui-accordion__panel"
|
|
21
|
-
role="region"
|
|
22
|
-
data-vmz-accordion-panel={item.id}
|
|
23
|
-
aria-labelledby={item.triggerId}
|
|
24
|
-
>
|
|
25
|
-
{item.body}
|
|
25
|
+
{item.body}
|
|
26
|
+
</div>
|
|
26
27
|
</div>
|
|
27
28
|
</div>
|
|
28
|
-
</div>
|
|
29
29
|
</template>
|
|
30
30
|
|
|
31
31
|
<style>
|
|
32
|
-
.vmz-ui-accordion {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
32
|
+
.vmz-ui-accordion {
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
gap: 0.35rem;
|
|
36
|
+
max-width: 36rem;
|
|
37
|
+
border: 1px solid var(--vmz-line-default);
|
|
38
|
+
border-radius: var(--vmz-radius-md, 6px);
|
|
39
|
+
background: var(--vmz-surface-paper);
|
|
40
|
+
color: var(--vmz-text-ink);
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
.vmz-ui-accordion__item {
|
|
44
|
-
|
|
45
|
-
}
|
|
43
|
+
.vmz-ui-accordion__item {
|
|
44
|
+
border-bottom: 1px solid var(--vmz-line-default);
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
.vmz-ui-accordion__item:last-child {
|
|
48
|
-
|
|
49
|
-
}
|
|
47
|
+
.vmz-ui-accordion__item:last-child {
|
|
48
|
+
border-bottom: none;
|
|
49
|
+
}
|
|
50
50
|
|
|
51
|
-
.vmz-ui-accordion__heading {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
51
|
+
.vmz-ui-accordion__heading {
|
|
52
|
+
margin: 0;
|
|
53
|
+
font: inherit;
|
|
54
|
+
}
|
|
55
55
|
|
|
56
|
-
.vmz-ui-accordion__trigger {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
56
|
+
.vmz-ui-accordion__trigger {
|
|
57
|
+
display: block;
|
|
58
|
+
width: 100%;
|
|
59
|
+
text-align: start;
|
|
60
|
+
font: inherit;
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
|
|
63
|
+
border: 0;
|
|
64
|
+
background: transparent;
|
|
65
|
+
color: inherit;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
outline: none;
|
|
68
|
+
}
|
|
69
69
|
|
|
70
|
-
.vmz-ui-accordion__trigger:hover {
|
|
71
|
-
|
|
72
|
-
}
|
|
70
|
+
.vmz-ui-accordion__trigger:hover {
|
|
71
|
+
background: color-mix(in srgb, var(--vmz-surface-mist) 85%, transparent);
|
|
72
|
+
}
|
|
73
73
|
|
|
74
|
-
.vmz-ui-accordion__trigger:focus-visible {
|
|
75
|
-
|
|
76
|
-
}
|
|
74
|
+
.vmz-ui-accordion__trigger:focus-visible {
|
|
75
|
+
box-shadow: inset 0 0 0 2px var(--vmz-focus-ring);
|
|
76
|
+
}
|
|
77
77
|
|
|
78
|
-
.vmz-ui-accordion__trigger[aria-expanded='true'] {
|
|
79
|
-
|
|
80
|
-
}
|
|
78
|
+
.vmz-ui-accordion__trigger[aria-expanded='true'] {
|
|
79
|
+
color: var(--vmz-action-primary-active);
|
|
80
|
+
}
|
|
81
81
|
|
|
82
|
-
.vmz-ui-accordion__panel {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
82
|
+
.vmz-ui-accordion__panel {
|
|
83
|
+
padding: 0 var(--vmz-density-control-padding-x) var(--vmz-density-control-padding-y);
|
|
84
|
+
color: var(--vmz-text-steel);
|
|
85
|
+
line-height: 1.5;
|
|
86
|
+
}
|
|
87
87
|
</style>
|
|
88
88
|
|
|
89
89
|
<script client>
|
|
90
90
|
/**
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
* VMZ UI — Accordion.
|
|
92
|
+
* Exclusive open: parent owns `openId`. Toggle same id closes.
|
|
93
|
+
* Panel body lives on items (no per-panel slot runtime).
|
|
94
|
+
*/
|
|
95
95
|
export default class Accordion {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
96
|
+
public label: string = "Accordion";
|
|
97
|
+
public openId: string = "";
|
|
98
|
+
/** @type {{ id: string, title: string, body: string, triggerId: string, panelId: string }[]} */
|
|
99
|
+
public items: {
|
|
100
|
+
id: string;
|
|
101
|
+
title: string;
|
|
102
|
+
body: string;
|
|
103
|
+
triggerId: string;
|
|
104
|
+
panelId: string;
|
|
105
|
+
}[] = [];
|
|
106
|
+
public onToggle: ((id: string) => void) | null = null;
|
|
107
|
+
toggle(id) {
|
|
108
|
+
if (typeof this.onToggle === "function") this.onToggle(id);
|
|
109
|
+
}
|
|
111
110
|
}
|
|
112
111
|
</script>
|
package/src/components/Alert.vmz
CHANGED
|
@@ -1,84 +1,85 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
class="vmz-ui-alert"
|
|
4
|
+
data-vmz-ui="alert"
|
|
5
|
+
data-tone={tone}
|
|
6
|
+
role={roleName}
|
|
7
|
+
>
|
|
8
|
+
<p if={title} class="vmz-ui-alert__title">{title}</p>
|
|
9
|
+
<p if={description} class="vmz-ui-alert__description">{description}</p>
|
|
10
|
+
<div class="vmz-ui-alert__actions">
|
|
11
|
+
<slot />
|
|
12
|
+
</div>
|
|
12
13
|
</div>
|
|
13
|
-
</div>
|
|
14
14
|
</template>
|
|
15
15
|
|
|
16
16
|
<style>
|
|
17
|
-
.vmz-ui-alert {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
17
|
+
.vmz-ui-alert {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: var(--vmz-density-control-gap);
|
|
21
|
+
padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
|
|
22
|
+
border: 1px solid var(--vmz-status-info-accent);
|
|
23
|
+
border-left-width: 1px;
|
|
24
|
+
border-radius: var(--vmz-radius-md, 6px);
|
|
25
|
+
background: color-mix(in srgb, var(--vmz-status-info-accent) 12%, transparent);
|
|
26
|
+
color: var(--vmz-status-info-foreground);
|
|
27
|
+
}
|
|
28
28
|
|
|
29
|
-
.vmz-ui-alert[data-tone='info'] {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
29
|
+
.vmz-ui-alert[data-tone='info'] {
|
|
30
|
+
border-color: var(--vmz-status-info-accent);
|
|
31
|
+
background: color-mix(in srgb, var(--vmz-status-info-accent) 12%, transparent);
|
|
32
|
+
color: var(--vmz-status-info-foreground);
|
|
33
|
+
}
|
|
34
34
|
|
|
35
|
-
.vmz-ui-alert[data-tone='success'] {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
35
|
+
.vmz-ui-alert[data-tone='success'] {
|
|
36
|
+
border-color: var(--vmz-status-success-accent);
|
|
37
|
+
background: color-mix(in srgb, var(--vmz-status-success-accent) 12%, transparent);
|
|
38
|
+
color: var(--vmz-status-success-foreground);
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
.vmz-ui-alert[data-tone='warning'] {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
41
|
+
.vmz-ui-alert[data-tone='warning'] {
|
|
42
|
+
border-color: var(--vmz-status-warning-accent);
|
|
43
|
+
background: color-mix(in srgb, var(--vmz-status-warning-accent) 12%, transparent);
|
|
44
|
+
color: var(--vmz-status-warning-foreground);
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
.vmz-ui-alert[data-tone='danger'] {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
47
|
+
.vmz-ui-alert[data-tone='danger'] {
|
|
48
|
+
border-color: var(--vmz-status-danger-accent);
|
|
49
|
+
background: color-mix(in srgb, var(--vmz-status-danger-accent) 12%, transparent);
|
|
50
|
+
color: var(--vmz-status-danger-foreground);
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
:where([data-density='compact']) .vmz-ui-alert {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
53
|
+
:where([data-density='compact']) .vmz-ui-alert {
|
|
54
|
+
gap: var(--vmz-density-compact-gap);
|
|
55
|
+
padding: var(--vmz-density-compact-padding-y) var(--vmz-density-compact-padding-x);
|
|
56
|
+
}
|
|
57
57
|
|
|
58
|
-
.vmz-ui-alert__title {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
.vmz-ui-alert__title {
|
|
59
|
+
margin: 0;
|
|
60
|
+
font-size: 0.875rem;
|
|
61
|
+
font-weight: 600;
|
|
62
|
+
}
|
|
62
63
|
|
|
63
|
-
.vmz-ui-alert__description {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
64
|
+
.vmz-ui-alert__description {
|
|
65
|
+
margin: 0;
|
|
66
|
+
opacity: 0.9;
|
|
67
|
+
}
|
|
67
68
|
|
|
68
|
-
.vmz-ui-alert__actions:empty {
|
|
69
|
-
|
|
70
|
-
}
|
|
69
|
+
.vmz-ui-alert__actions:empty {
|
|
70
|
+
display: none;
|
|
71
|
+
}
|
|
71
72
|
</style>
|
|
72
73
|
|
|
73
74
|
<script client>
|
|
74
75
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
* VMZ UI — Alert (UI4 status tone matrix).
|
|
77
|
+
* tone → status.{info|success|warning|danger}.* tokens from Style Theme.
|
|
78
|
+
*/
|
|
78
79
|
export default class Alert {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
public title: string = "";
|
|
81
|
+
public description: string = "";
|
|
82
|
+
public tone: string = "info";
|
|
83
|
+
public roleName: string = "status";
|
|
83
84
|
}
|
|
84
85
|
</script>
|