@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.
Files changed (66) hide show
  1. package/README.md +15 -2
  2. package/contracts/token-requirements.v0.json +45 -10
  3. package/package.json +18 -2
  4. package/presets/web-surface.v0.json +24 -10
  5. package/src/components/Accordion.vmz +88 -89
  6. package/src/components/Alert.vmz +64 -63
  7. package/src/components/AppShell.vmz +64 -45
  8. package/src/components/Autocomplete.vmz +152 -151
  9. package/src/components/Avatar.vmz +16 -0
  10. package/src/components/Badge.vmz +46 -46
  11. package/src/components/Breadcrumb.vmz +52 -48
  12. package/src/components/BulkActions.vmz +37 -37
  13. package/src/components/Button.vmz +91 -70
  14. package/src/components/Callout.vmz +61 -61
  15. package/src/components/Card.vmz +58 -52
  16. package/src/components/Checkbox.vmz +56 -53
  17. package/src/components/CodeBlock.vmz +51 -51
  18. package/src/components/Collapse.vmz +20 -0
  19. package/src/components/ConsoleShell.vmz +134 -99
  20. package/src/components/Content.vmz +11 -0
  21. package/src/components/DataTable.vmz +197 -196
  22. package/src/components/DatePicker.vmz +650 -75
  23. package/src/components/Dialog.vmz +365 -384
  24. package/src/components/Divider.vmz +19 -0
  25. package/src/components/Drawer.vmz +361 -378
  26. package/src/components/Dropdown.vmz +22 -0
  27. package/src/components/Empty.vmz +36 -36
  28. package/src/components/Field.vmz +69 -40
  29. package/src/components/FilterBar.vmz +15 -15
  30. package/src/components/Flex.vmz +12 -0
  31. package/src/components/Footer.vmz +11 -0
  32. package/src/components/Form.vmz +56 -58
  33. package/src/components/FormItem.vmz +59 -59
  34. package/src/components/Grid.vmz +12 -0
  35. package/src/components/Header.vmz +11 -0
  36. package/src/components/Icon.vmz +86 -0
  37. package/src/components/Layout.vmz +11 -0
  38. package/src/components/Link.vmz +33 -33
  39. package/src/components/List.vmz +96 -96
  40. package/src/components/Menu.vmz +229 -240
  41. package/src/components/Notification.vmz +62 -62
  42. package/src/components/Pagination.vmz +63 -65
  43. package/src/components/Popover.vmz +202 -219
  44. package/src/components/Progress.vmz +18 -0
  45. package/src/components/Prose.vmz +61 -61
  46. package/src/components/QueryForm.vmz +26 -27
  47. package/src/components/RadioGroup.vmz +116 -113
  48. package/src/components/Result.vmz +63 -63
  49. package/src/components/Segmented.vmz +29 -0
  50. package/src/components/Select.vmz +462 -286
  51. package/src/components/Sider.vmz +6 -0
  52. package/src/components/Skeleton.vmz +58 -58
  53. package/src/components/Space.vmz +15 -0
  54. package/src/components/Spinner.vmz +29 -29
  55. package/src/components/Steps.vmz +86 -86
  56. package/src/components/Switch.vmz +86 -88
  57. package/src/components/Table.vmz +116 -114
  58. package/src/components/Tabs.vmz +113 -112
  59. package/src/components/Tag.vmz +8 -0
  60. package/src/components/TextArea.vmz +76 -49
  61. package/src/components/Timeline.vmz +55 -50
  62. package/src/components/Toc.vmz +64 -60
  63. package/src/components/Tooltip.vmz +51 -51
  64. package/src/components/Tree.vmz +184 -190
  65. package/src/components/Typography.vmz +9 -0
  66. package/src/components/Upload.vmz +1192 -82
@@ -1,66 +1,70 @@
1
1
  <template>
2
2
  <nav class="vmz-ui-breadcrumb" data-vmz-ui="breadcrumb" aria-label={label}>
3
- <ol class="vmz-ui-breadcrumb__list">
4
- <li each={items} as="item" key={item.id} class="vmz-ui-breadcrumb__item" data-vmz-crumb={item.id}>
5
- <a if={item.href} class="vmz-ui-breadcrumb__link" href={item.href}>{item.title}</a>
6
- <span if={!item.href} class="vmz-ui-breadcrumb__current" aria-current="page">{item.title}</span>
7
- </li>
8
- </ol>
9
- </nav>
3
+ <ol class="vmz-ui-breadcrumb__list">
4
+ <li each={items} as="item" key={item.id} class="vmz-ui-breadcrumb__item" data-vmz-crumb={item.id}>
5
+ <a if={item.href} class="vmz-ui-breadcrumb__link" href={item.href}>{item.title}</a>
6
+ <span if={!item.href} class="vmz-ui-breadcrumb__current" aria-current="page">{item.title}</span>
7
+ </li>
8
+ </ol>
9
+ </nav>
10
10
  </template>
11
11
 
12
12
  <style>
13
- .vmz-ui-breadcrumb {
14
- font: inherit;
15
- }
13
+ .vmz-ui-breadcrumb {
14
+ font: inherit;
15
+ }
16
16
 
17
- .vmz-ui-breadcrumb__list {
18
- display: flex;
19
- flex-wrap: wrap;
20
- gap: 0.35rem 0.55rem;
21
- margin: 0;
22
- padding: 0;
23
- list-style: none;
24
- align-items: center;
25
- }
17
+ .vmz-ui-breadcrumb__list {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: 0.35rem 0.55rem;
21
+ margin: 0;
22
+ padding: 0;
23
+ list-style: none;
24
+ align-items: center;
25
+ }
26
26
 
27
- .vmz-ui-breadcrumb__item {
28
- display: inline-flex;
29
- align-items: center;
30
- gap: 0.55rem;
31
- font-weight: 600;
32
- }
27
+ .vmz-ui-breadcrumb__item {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: 0.55rem;
31
+ font-weight: 600;
32
+ }
33
33
 
34
- .vmz-ui-breadcrumb__item:not(:last-child)::after {
35
- content: '/';
36
- color: var(--vmz-action-primary-active);
37
- opacity: 0.55;
38
- font-weight: 400;
39
- }
34
+ .vmz-ui-breadcrumb__item:not(:last-child)::after {
35
+ content: '/';
36
+ color: var(--vmz-action-primary-active);
37
+ opacity: 0.55;
38
+ font-weight: 400;
39
+ }
40
40
 
41
- .vmz-ui-breadcrumb__link {
42
- color: var(--vmz-action-primary-background);
43
- text-decoration: none;
44
- }
41
+ .vmz-ui-breadcrumb__link {
42
+ color: var(--vmz-action-primary-background);
43
+ text-decoration: none;
44
+ }
45
45
 
46
- .vmz-ui-breadcrumb__link:focus-visible {
47
- outline: none;
48
- box-shadow: 0 0 0 2px var(--vmz-focus-ring);
49
- }
46
+ .vmz-ui-breadcrumb__link:focus-visible {
47
+ outline: none;
48
+ box-shadow: 0 0 0 2px var(--vmz-focus-ring);
49
+ }
50
50
 
51
- .vmz-ui-breadcrumb__current {
52
- color: var(--vmz-action-primary-active);
53
- }
51
+ .vmz-ui-breadcrumb__current {
52
+ color: var(--vmz-action-primary-active);
53
+ }
54
54
  </style>
55
55
 
56
56
  <script client>
57
57
  /**
58
- * VMZ UI — Breadcrumb (UI5 Console Surface).
59
- * Parent owns items; last crumb typically has no href (current page).
60
- */
58
+ * VMZ UI — Breadcrumb (UI5 Console Surface).
59
+ * Parent owns items; last crumb typically has no href (current page).
60
+ */
61
61
  export default class Breadcrumb {
62
- public label: string = 'Breadcrumb';
63
- /** @type {{ id: string, title: string, href?: string }[]} */
64
- public items: { id: string; title: string; href?: string }[] = [];
62
+ public label: string = "Breadcrumb";
63
+ /** @type {{ id: string, title: string, href?: string }[]} */
64
+ public items: {
65
+ id: string;
66
+ title: string;
67
+ href?: string;
68
+ }[] = [];
65
69
  }
66
70
  </script>
@@ -1,52 +1,52 @@
1
1
  <template>
2
2
  <div
3
- if={selectedCount}
4
- class="vmz-ui-bulk-actions"
5
- data-vmz-ui="bulk-actions"
6
- role="region"
7
- aria-label={label}
8
- >
9
- <p class="vmz-ui-bulk-actions__count" data-dogfood="bulk-count">{countLabel}</p>
10
- <div class="vmz-ui-bulk-actions__actions">
11
- <slot />
3
+ if={selectedCount}
4
+ class="vmz-ui-bulk-actions"
5
+ data-vmz-ui="bulk-actions"
6
+ role="region"
7
+ aria-label={label}
8
+ >
9
+ <p class="vmz-ui-bulk-actions__count" data-dogfood="bulk-count">{countLabel}</p>
10
+ <div class="vmz-ui-bulk-actions__actions">
11
+ <slot />
12
+ </div>
12
13
  </div>
13
- </div>
14
14
  </template>
15
15
 
16
16
  <style>
17
- .vmz-ui-bulk-actions {
18
- display: flex;
19
- flex-wrap: wrap;
20
- align-items: center;
21
- justify-content: space-between;
22
- gap: 0.65rem 1rem;
23
- padding: 0.65rem 0.85rem;
24
- border: 1px solid var(--vmz-action-primary-background);
25
- border-radius: 2px;
26
- background: transparent;
27
- }
17
+ .vmz-ui-bulk-actions {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ gap: 0.65rem 1rem;
23
+ padding: 0.65rem 0.85rem;
24
+ border: 1px solid var(--vmz-line-default);
25
+ border-radius: var(--vmz-radius-md, 6px);
26
+ background: transparent;
27
+ }
28
28
 
29
- .vmz-ui-bulk-actions__count {
30
- margin: 0;
31
- font-weight: 700;
32
- color: var(--vmz-action-primary-active);
33
- }
29
+ .vmz-ui-bulk-actions__count {
30
+ margin: 0;
31
+ font-weight: 700;
32
+ color: var(--vmz-action-primary-active);
33
+ }
34
34
 
35
- .vmz-ui-bulk-actions__actions {
36
- display: flex;
37
- flex-wrap: wrap;
38
- gap: 0.5rem;
39
- }
35
+ .vmz-ui-bulk-actions__actions {
36
+ display: flex;
37
+ flex-wrap: wrap;
38
+ gap: 0.5rem;
39
+ }
40
40
  </style>
41
41
 
42
42
  <script client>
43
43
  /**
44
- * VMZ UI — BulkActions (Console composition).
45
- * Renders when selectedCount is truthy; parent owns selection count + label.
46
- */
44
+ * VMZ UI — BulkActions (Console composition).
45
+ * Renders when selectedCount is truthy; parent owns selection count + label.
46
+ */
47
47
  export default class BulkActions {
48
- public label: string = 'Bulk actions';
49
- public selectedCount: number = 0;
50
- public countLabel: string = '';
48
+ public label: string = "Bulk actions";
49
+ public selectedCount: number = 0;
50
+ public countLabel: string = "";
51
51
  }
52
52
  </script>
@@ -1,16 +1,21 @@
1
1
  <template>
2
2
  <button
3
- type={type}
4
- class="vmz-ui-btn"
5
- data-vmz-ui="button"
6
- data-vmz-motion="control"
7
- data-vmz-motion-token="motion.control"
8
- data-variant={variant}
9
- disabled={disabled}
10
- onClick={onClick}
11
- >
12
- <slot />
13
- </button>
3
+ type={type}
4
+ class="vmz-ui-btn"
5
+ data-vmz-ui="button"
6
+ data-vmz-motion="control"
7
+ data-vmz-motion-token="motion.control"
8
+ data-variant={variant}
9
+ data-size={size}
10
+ data-block={block ? 'true' : 'false'}
11
+ data-loading={loading ? 'true' : 'false'}
12
+ disabled={disabled}
13
+ aria-busy={loading ? 'true' : 'false'}
14
+ onClick={onClick}
15
+ >
16
+ <span if={loading} class="vmz-ui-btn__spinner" aria-hidden="true"></span>
17
+ <slot />
18
+ </button>
14
19
  </template>
15
20
 
16
21
  <style>
@@ -19,23 +24,32 @@
19
24
  align-items: center;
20
25
  justify-content: center;
21
26
  gap: 0.35rem;
27
+ min-height: var(--vmz-control-height, 2rem);
22
28
  padding: var(--vmz-density-control-padding-y) var(--vmz-density-control-padding-x);
23
29
  border: 1px solid transparent;
24
- border-radius: 2px;
30
+ border-radius: var(--vmz-radius-md, 6px);
25
31
  font: inherit;
26
- font-weight: 600;
27
- line-height: 1.2;
32
+ font-size: 0.875rem;
33
+ font-weight: 400;
34
+ line-height: 1.5715;
28
35
  cursor: pointer;
29
36
  background: var(--vmz-action-primary-background);
30
37
  color: var(--vmz-action-primary-foreground);
31
38
  outline: none;
39
+ box-shadow: none;
32
40
  transition:
33
41
  background-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
34
42
  border-color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
35
- color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing),
36
- box-shadow var(--vmz-motion-control-duration) var(--vmz-motion-control-easing);
43
+ color var(--vmz-motion-control-duration) var(--vmz-motion-control-easing);
37
44
  }
38
45
 
46
+ .vmz-ui-btn[data-size='small'] { min-height: var(--vmz-control-height-sm, 1.5rem); padding: 0 0.5rem; font-size: 0.875rem; }
47
+ .vmz-ui-btn[data-size='large'] { min-height: var(--vmz-control-height-lg, 2.5rem); padding: 0.4rem 1rem; font-size: 1rem; }
48
+ .vmz-ui-btn[data-block='true'] { width: 100%; }
49
+ .vmz-ui-btn[data-loading='true'] { cursor: wait; }
50
+ .vmz-ui-btn__spinner { width: 1em; height: 1em; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: vmz-btn-spin .7s linear infinite; }
51
+ @keyframes vmz-btn-spin { to { transform: rotate(360deg); } }
52
+
39
53
  .vmz-ui-btn:hover:not(:disabled) {
40
54
  background: var(--vmz-action-primary-hover);
41
55
  }
@@ -49,78 +63,85 @@
49
63
  color: var(--vmz-action-secondary-foreground);
50
64
  border-color: var(--vmz-action-secondary-border);
51
65
  }
66
+ .vmz-ui-btn[data-variant='default'] { background:#fff; color:var(--vmz-text-ink); border-color:var(--vmz-line-default); box-shadow:none; }
67
+ .vmz-ui-btn[data-variant='default']:hover:not(:disabled) { color:var(--vmz-action-primary-background); border-color:var(--vmz-action-primary-background); background:#fff; }
68
+ .vmz-ui-btn[data-variant='text'], .vmz-ui-btn[data-variant='link'] { min-height:auto; padding:.25rem .35rem; border-color:transparent; background:transparent; color:var(--vmz-action-primary-background); box-shadow:none; }
69
+ .vmz-ui-btn[data-variant='dashed'] { background:#fff; color:var(--vmz-text-ink); border:1px dashed var(--vmz-line-default); box-shadow:none; }
52
70
 
53
- .vmz-ui-btn[data-variant='secondary']:hover:not(:disabled) {
54
- background: var(--vmz-action-secondary-hover);
55
- }
71
+ .vmz-ui-btn[data-variant='secondary']:hover:not(:disabled) {
72
+ background: var(--vmz-action-secondary-hover);
73
+ }
56
74
 
57
- .vmz-ui-btn[data-variant='secondary']:active:not(:disabled) {
58
- background: var(--vmz-action-secondary-hover);
59
- border-color: var(--vmz-action-primary-active);
60
- }
75
+ .vmz-ui-btn[data-variant='secondary']:active:not(:disabled) {
76
+ background: var(--vmz-action-secondary-hover);
77
+ border-color: var(--vmz-action-primary-active);
78
+ }
61
79
 
62
- .vmz-ui-btn[data-variant='ghost'] {
63
- background: transparent;
64
- color: var(--vmz-text-ink);
65
- border-color: transparent;
66
- }
80
+ .vmz-ui-btn[data-variant='ghost'] {
81
+ background: transparent;
82
+ color: var(--vmz-text-ink);
83
+ border-color: transparent;
84
+ }
67
85
 
68
- .vmz-ui-btn[data-variant='ghost']:hover:not(:disabled) {
69
- background: color-mix(in srgb, var(--vmz-surface-mist) 85%, transparent);
70
- }
86
+ .vmz-ui-btn[data-variant='ghost']:hover:not(:disabled) {
87
+ background: color-mix(in srgb, var(--vmz-surface-mist) 85%, transparent);
88
+ }
71
89
 
72
- .vmz-ui-btn[data-variant='ghost']:active:not(:disabled) {
73
- background: var(--vmz-surface-mist);
74
- }
90
+ .vmz-ui-btn[data-variant='ghost']:active:not(:disabled) {
91
+ background: var(--vmz-surface-mist);
92
+ }
75
93
 
76
- .vmz-ui-btn[data-variant='danger'] {
77
- background: var(--vmz-status-danger-accent);
78
- color: var(--vmz-action-primary-foreground);
79
- border-color: transparent;
80
- }
94
+ .vmz-ui-btn[data-variant='danger'] {
95
+ background: var(--vmz-status-danger-accent);
96
+ color: var(--vmz-action-primary-foreground);
97
+ border-color: transparent;
98
+ }
81
99
 
82
- .vmz-ui-btn[data-variant='danger']:hover:not(:disabled) {
83
- background: color-mix(in srgb, var(--vmz-status-danger-accent) 82%, var(--vmz-text-ink));
84
- }
100
+ .vmz-ui-btn[data-variant='danger']:hover:not(:disabled) {
101
+ background: color-mix(in srgb, var(--vmz-status-danger-accent) 82%, var(--vmz-text-ink));
102
+ }
85
103
 
86
- .vmz-ui-btn[data-variant='danger']:active:not(:disabled) {
87
- background: var(--vmz-status-danger-foreground);
88
- }
104
+ .vmz-ui-btn[data-variant='danger']:active:not(:disabled) {
105
+ background: var(--vmz-status-danger-foreground);
106
+ }
89
107
 
90
- .vmz-ui-btn:focus-visible {
91
- box-shadow: 0 0 0 2px var(--vmz-focus-ring);
92
- }
108
+ .vmz-ui-btn:focus-visible {
109
+ box-shadow: 0 0 0 2px var(--vmz-focus-ring);
110
+ }
93
111
 
94
- .vmz-ui-btn:disabled {
95
- opacity: 0.55;
96
- cursor: not-allowed;
97
- }
112
+ .vmz-ui-btn:disabled {
113
+ opacity: 0.55;
114
+ cursor: not-allowed;
115
+ }
98
116
 
99
- :where([data-density='compact']) .vmz-ui-btn {
100
- padding: var(--vmz-density-compact-padding-y) var(--vmz-density-compact-padding-x);
101
- }
117
+ :where([data-density='compact']) .vmz-ui-btn {
118
+ padding: var(--vmz-density-compact-padding-y) var(--vmz-density-compact-padding-x);
119
+ }
102
120
 
103
- :where([data-density='dense']) .vmz-ui-btn {
104
- padding: var(--vmz-density-dense-padding-y) var(--vmz-density-dense-padding-x);
105
- }
121
+ :where([data-density='dense']) .vmz-ui-btn {
122
+ padding: var(--vmz-density-dense-padding-y) var(--vmz-density-dense-padding-x);
123
+ }
106
124
 
107
- @media (prefers-reduced-motion: reduce) {
108
- .vmz-ui-btn {
109
- transition: none;
125
+ @media (prefers-reduced-motion: reduce) {
126
+ .vmz-ui-btn {
127
+ transition: none;
128
+ }
110
129
  }
111
- }
112
130
  </style>
113
131
 
114
132
  <script client>
115
133
  /**
116
- * VMZ UI — Button (variants + motion control feedback).
117
- * Colors / motion come only from Style Theme semantic tokens — never brand hex.
118
- * Variants: primary | secondary | ghost | danger
119
- */
134
+ * VMZ UI — Button (variants + motion control feedback).
135
+ * Colors / motion come only from Style Theme semantic tokens — never brand hex.
136
+ * Variants: primary | secondary | ghost | danger
137
+ */
120
138
  export default class Button {
121
- public type: string = 'button';
122
- public variant: string = 'primary';
123
- public disabled: boolean = false;
124
- public onClick: ((e: Event) => void) | null = null;
139
+ public type: string = "button";
140
+ public variant: string = "primary";
141
+ public disabled: boolean = false;
142
+ public loading: boolean = false;
143
+ public block: boolean = false;
144
+ public size: string = "middle";
145
+ public onClick: ((e: Event) => void) | null = null;
125
146
  }
126
147
  </script>
@@ -1,80 +1,80 @@
1
1
  <template>
2
2
  <aside
3
- class="vmz-ui-callout"
4
- data-vmz-ui="callout"
5
- data-tone={tone}
6
- role={roleName}
7
- >
8
- <p if={title} class="vmz-ui-callout__title">{title}</p>
9
- <p if={description} class="vmz-ui-callout__description">{description}</p>
10
- <div class="vmz-ui-callout__body">
11
- <slot />
12
- </div>
13
- </aside>
3
+ class="vmz-ui-callout"
4
+ data-vmz-ui="callout"
5
+ data-tone={tone}
6
+ role={roleName}
7
+ >
8
+ <p if={title} class="vmz-ui-callout__title">{title}</p>
9
+ <p if={description} class="vmz-ui-callout__description">{description}</p>
10
+ <div class="vmz-ui-callout__body">
11
+ <slot />
12
+ </div>
13
+ </aside>
14
14
  </template>
15
15
 
16
16
  <style>
17
- .vmz-ui-callout {
18
- display: flex;
19
- flex-direction: column;
20
- gap: 0.45rem;
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: 4px;
24
- border-radius: 2px;
25
- background: color-mix(in srgb, var(--vmz-status-info-accent) 10%, var(--vmz-surface-paper));
26
- color: var(--vmz-status-info-foreground);
27
- }
17
+ .vmz-ui-callout {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: 0.45rem;
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) 10%, var(--vmz-surface-paper));
26
+ color: var(--vmz-status-info-foreground);
27
+ }
28
28
 
29
- .vmz-ui-callout[data-tone='info'] {
30
- border-color: var(--vmz-status-info-accent);
31
- background: color-mix(in srgb, var(--vmz-status-info-accent) 10%, var(--vmz-surface-paper));
32
- color: var(--vmz-status-info-foreground);
33
- }
29
+ .vmz-ui-callout[data-tone='info'] {
30
+ border-color: var(--vmz-status-info-accent);
31
+ background: color-mix(in srgb, var(--vmz-status-info-accent) 10%, var(--vmz-surface-paper));
32
+ color: var(--vmz-status-info-foreground);
33
+ }
34
34
 
35
- .vmz-ui-callout[data-tone='success'] {
36
- border-color: var(--vmz-status-success-accent);
37
- background: color-mix(in srgb, var(--vmz-status-success-accent) 10%, var(--vmz-surface-paper));
38
- color: var(--vmz-status-success-foreground);
39
- }
35
+ .vmz-ui-callout[data-tone='success'] {
36
+ border-color: var(--vmz-status-success-accent);
37
+ background: color-mix(in srgb, var(--vmz-status-success-accent) 10%, var(--vmz-surface-paper));
38
+ color: var(--vmz-status-success-foreground);
39
+ }
40
40
 
41
- .vmz-ui-callout[data-tone='warning'] {
42
- border-color: var(--vmz-status-warning-accent);
43
- background: color-mix(in srgb, var(--vmz-status-warning-accent) 10%, var(--vmz-surface-paper));
44
- color: var(--vmz-status-warning-foreground);
45
- }
41
+ .vmz-ui-callout[data-tone='warning'] {
42
+ border-color: var(--vmz-status-warning-accent);
43
+ background: color-mix(in srgb, var(--vmz-status-warning-accent) 10%, var(--vmz-surface-paper));
44
+ color: var(--vmz-status-warning-foreground);
45
+ }
46
46
 
47
- .vmz-ui-callout[data-tone='danger'] {
48
- border-color: var(--vmz-status-danger-accent);
49
- background: color-mix(in srgb, var(--vmz-status-danger-accent) 10%, var(--vmz-surface-paper));
50
- color: var(--vmz-status-danger-foreground);
51
- }
47
+ .vmz-ui-callout[data-tone='danger'] {
48
+ border-color: var(--vmz-status-danger-accent);
49
+ background: color-mix(in srgb, var(--vmz-status-danger-accent) 10%, var(--vmz-surface-paper));
50
+ color: var(--vmz-status-danger-foreground);
51
+ }
52
52
 
53
- .vmz-ui-callout__title {
54
- margin: 0;
55
- font-family: var(--vmz-font-display);
56
- font-weight: 700;
57
- }
53
+ .vmz-ui-callout__title {
54
+ margin: 0;
55
+ font-family: var(--vmz-font-display);
56
+ font-weight: 700;
57
+ }
58
58
 
59
- .vmz-ui-callout__description {
60
- margin: 0;
61
- line-height: 1.5;
62
- }
59
+ .vmz-ui-callout__description {
60
+ margin: 0;
61
+ line-height: 1.5;
62
+ }
63
63
 
64
- .vmz-ui-callout__body:empty {
65
- display: none;
66
- }
64
+ .vmz-ui-callout__body:empty {
65
+ display: none;
66
+ }
67
67
  </style>
68
68
 
69
69
  <script client>
70
70
  /**
71
- * VMZ UI — Callout (Document/Product composition).
72
- * Inline guidance block for prose; shares status.* tones with Alert.
73
- */
71
+ * VMZ UI — Callout (Document/Product composition).
72
+ * Inline guidance block for prose; shares status.* tones with Alert.
73
+ */
74
74
  export default class Callout {
75
- public title: string = '';
76
- public description: string = '';
77
- public tone: string = 'info';
78
- public roleName: string = 'note';
75
+ public title: string = "";
76
+ public description: string = "";
77
+ public tone: string = "info";
78
+ public roleName: string = "note";
79
79
  }
80
80
  </script>