@urbicon-ui/blocks 6.38.0 → 6.40.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/dist/components/Calendar/calendar.variants.d.ts +63 -63
- package/dist/components/Chat/A2UIView/A2UINode.svelte +703 -0
- package/dist/components/Chat/A2UIView/A2UINode.svelte.d.ts +10 -0
- package/dist/components/Chat/A2UIView/A2UIView.svelte +293 -0
- package/dist/components/Chat/A2UIView/A2UIView.svelte.d.ts +4 -0
- package/dist/components/Chat/A2UIView/a2ui-data.d.ts +65 -0
- package/dist/components/Chat/A2UIView/a2ui-data.js +283 -0
- package/dist/components/Chat/A2UIView/a2ui-prompt.d.ts +18 -0
- package/dist/components/Chat/A2UIView/a2ui-prompt.js +147 -0
- package/dist/components/Chat/A2UIView/a2ui-registry.d.ts +64 -0
- package/dist/components/Chat/A2UIView/a2ui-registry.js +390 -0
- package/dist/components/Chat/A2UIView/a2ui-render.d.ts +96 -0
- package/dist/components/Chat/A2UIView/a2ui-render.js +140 -0
- package/dist/components/Chat/A2UIView/a2ui-validate.d.ts +75 -0
- package/dist/components/Chat/A2UIView/a2ui-validate.js +773 -0
- package/dist/components/Chat/A2UIView/a2ui-view.variants.d.ts +80 -0
- package/dist/components/Chat/A2UIView/a2ui-view.variants.js +62 -0
- package/dist/components/Chat/A2UIView/a2ui.types.d.ts +119 -0
- package/dist/components/Chat/A2UIView/a2ui.types.js +85 -0
- package/dist/components/Chat/A2UIView/index.d.ts +102 -0
- package/dist/components/Chat/A2UIView/index.js +7 -0
- package/dist/components/Chat/ChatMessage/ChatMessage.svelte +4 -1
- package/dist/components/Chat/index.d.ts +2 -0
- package/dist/components/Chat/index.js +1 -0
- package/dist/components/CopyButton/copy-button.variants.d.ts +4 -4
- package/dist/i18n/index.d.ts +398 -2
- package/dist/primitives/Alert/alert.variants.d.ts +8 -8
- package/dist/primitives/JourneyTimeline/journey-timeline.variants.d.ts +22 -22
- package/dist/primitives/JourneyTimeline/journey-timeline.variants.js +3 -1
- package/dist/primitives/Spinner/spinner.variants.d.ts +16 -16
- package/dist/primitives/Stepper/stepper.variants.d.ts +11 -11
- package/dist/primitives/Toast/toast.variants.d.ts +12 -12
- package/dist/primitives/Tooltip/tooltip.variants.d.ts +3 -3
- package/dist/style/semantic.css +11 -3
- package/package.json +3 -3
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type SlotNames, type VariantProps } from '../../../utils/variants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Slot styles for the A2UI renderer. Pure semantic tokens — no `dark:`, no
|
|
4
|
+
* hardcoded colours. Enum-driven layout (justify/align/direction/fit/size) is
|
|
5
|
+
* NOT modelled as tv() variant axes: those tokens live as complete class-string
|
|
6
|
+
* lookup maps inside `A2UINode.svelte` (so Tailwind's scanner still sees them),
|
|
7
|
+
* which keeps this config a flat, dead-token-free set of slots (the tv() text-*
|
|
8
|
+
* colour-bucketing trap only bites when a size utility and a colour utility
|
|
9
|
+
* share one slot across a variant fold — here every slot is single-combination).
|
|
10
|
+
*/
|
|
11
|
+
export declare const a2uiViewVariants: ((props?: {} | undefined) => {
|
|
12
|
+
root: (props?: ({} & {
|
|
13
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
14
|
+
}) | undefined) => string;
|
|
15
|
+
surface: (props?: ({} & {
|
|
16
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
17
|
+
}) | undefined) => string;
|
|
18
|
+
errorList: (props?: ({} & {
|
|
19
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
20
|
+
}) | undefined) => string;
|
|
21
|
+
errorChip: (props?: ({} & {
|
|
22
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
23
|
+
}) | undefined) => string;
|
|
24
|
+
errorIcon: (props?: ({} & {
|
|
25
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
26
|
+
}) | undefined) => string;
|
|
27
|
+
pending: (props?: ({} & {
|
|
28
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
29
|
+
}) | undefined) => string;
|
|
30
|
+
pendingSurface: (props?: ({} & {
|
|
31
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
32
|
+
}) | undefined) => string;
|
|
33
|
+
pendingBar: (props?: ({} & {
|
|
34
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
35
|
+
}) | undefined) => string;
|
|
36
|
+
column: (props?: ({} & {
|
|
37
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
38
|
+
}) | undefined) => string;
|
|
39
|
+
row: (props?: ({} & {
|
|
40
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
41
|
+
}) | undefined) => string;
|
|
42
|
+
list: (props?: ({} & {
|
|
43
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
44
|
+
}) | undefined) => string;
|
|
45
|
+
listItem: (props?: ({} & {
|
|
46
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
47
|
+
}) | undefined) => string;
|
|
48
|
+
heading: (props?: ({} & {
|
|
49
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
50
|
+
}) | undefined) => string;
|
|
51
|
+
caption: (props?: ({} & {
|
|
52
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
53
|
+
}) | undefined) => string;
|
|
54
|
+
inlineText: (props?: ({} & {
|
|
55
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
56
|
+
}) | undefined) => string;
|
|
57
|
+
image: (props?: ({} & {
|
|
58
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
59
|
+
}) | undefined) => string;
|
|
60
|
+
blockedChip: (props?: ({} & {
|
|
61
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
62
|
+
}) | undefined) => string;
|
|
63
|
+
icon: (props?: ({} & {
|
|
64
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
65
|
+
}) | undefined) => string;
|
|
66
|
+
svgIcon: (props?: ({} & {
|
|
67
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
68
|
+
}) | undefined) => string;
|
|
69
|
+
choiceGroup: (props?: ({} & {
|
|
70
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
71
|
+
}) | undefined) => string;
|
|
72
|
+
choiceLabel: (props?: ({} & {
|
|
73
|
+
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
74
|
+
}) | undefined) => string;
|
|
75
|
+
}) & {
|
|
76
|
+
readonly config: import("../../../utils/variants.js").TVConfig;
|
|
77
|
+
};
|
|
78
|
+
export type A2UIViewVariants = VariantProps<typeof a2uiViewVariants>;
|
|
79
|
+
/** Slot names derived from the tv() config — single source of truth for slotClasses. */
|
|
80
|
+
export type A2UIViewSlots = SlotNames<typeof a2uiViewVariants>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { tv } from '../../../utils/variants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Slot styles for the A2UI renderer. Pure semantic tokens — no `dark:`, no
|
|
4
|
+
* hardcoded colours. Enum-driven layout (justify/align/direction/fit/size) is
|
|
5
|
+
* NOT modelled as tv() variant axes: those tokens live as complete class-string
|
|
6
|
+
* lookup maps inside `A2UINode.svelte` (so Tailwind's scanner still sees them),
|
|
7
|
+
* which keeps this config a flat, dead-token-free set of slots (the tv() text-*
|
|
8
|
+
* colour-bucketing trap only bites when a size utility and a colour utility
|
|
9
|
+
* share one slot across a variant fold — here every slot is single-combination).
|
|
10
|
+
*/
|
|
11
|
+
export const a2uiViewVariants = tv({
|
|
12
|
+
slots: {
|
|
13
|
+
/** Outer view container. Establishes the base text colour every node inherits. */
|
|
14
|
+
root: 'flex min-w-0 flex-col gap-3 text-text-primary',
|
|
15
|
+
/** Per-surface wrapper (one surface per createSurface). */
|
|
16
|
+
surface: 'flex min-w-0 flex-col',
|
|
17
|
+
/** Message list inside the top-level error summary Alert. */
|
|
18
|
+
errorList: 'flex flex-col gap-0.5 text-sm',
|
|
19
|
+
/** Inline fault chip standing in for an un-renderable node (unknown/unsupported/dangling). */
|
|
20
|
+
errorChip: [
|
|
21
|
+
'inline-flex max-w-full items-center gap-1.5 rounded-modify',
|
|
22
|
+
'bg-danger-subtle px-2 py-1 text-xs text-danger'
|
|
23
|
+
],
|
|
24
|
+
/** Icon inside a fault or blocked chip; size comes from the icon prop. */
|
|
25
|
+
errorIcon: 'shrink-0',
|
|
26
|
+
/** Streaming placeholder wrapper for a not-yet-defined reference. */
|
|
27
|
+
pending: 'inline-flex items-center gap-1.5',
|
|
28
|
+
/** Skeleton shown while streaming before a surface has received its root. */
|
|
29
|
+
pendingSurface: 'flex min-w-0 flex-col gap-2 rounded-contain border border-border-subtle p-4',
|
|
30
|
+
/** One shimmering placeholder bar inside the streaming skeleton. */
|
|
31
|
+
pendingBar: 'h-4 animate-pulse rounded-modify bg-neutral-subtle motion-reduce:animate-none',
|
|
32
|
+
/** Column layout container (flex-col); justify/align appended per instance. */
|
|
33
|
+
column: 'flex min-w-0 flex-col gap-2',
|
|
34
|
+
/** Row layout container (flex-row); justify/align appended per instance. */
|
|
35
|
+
row: 'flex min-w-0 flex-row gap-2',
|
|
36
|
+
/** List container (`<ul>`); flow direction appended per instance. */
|
|
37
|
+
list: 'm-0 flex min-w-0 list-none gap-1 p-0',
|
|
38
|
+
/** List item (`<li>`). */
|
|
39
|
+
listItem: 'min-w-0',
|
|
40
|
+
/** Heading element for Text variants h1–h5; the font-size step is appended per level. */
|
|
41
|
+
heading: 'min-w-0 break-words font-semibold leading-tight text-text-primary',
|
|
42
|
+
/** Caption Text variant. */
|
|
43
|
+
caption: 'min-w-0 break-words text-xs text-text-tertiary',
|
|
44
|
+
/** Plain inline text (Text inside a Button label / inline context). */
|
|
45
|
+
inlineText: 'text-sm',
|
|
46
|
+
/** Rendered image element (only when the URL passes the policy). */
|
|
47
|
+
image: 'block max-w-full rounded-contain border border-border-subtle',
|
|
48
|
+
/** Alt-text chip shown when an image URL is blocked by the policy. */
|
|
49
|
+
blockedChip: [
|
|
50
|
+
'inline-flex max-w-full items-center gap-1.5 rounded-modify',
|
|
51
|
+
'bg-neutral-subtle px-2 py-1 text-xs text-text-secondary'
|
|
52
|
+
],
|
|
53
|
+
/** Icon wrapper (mapped Icon component). */
|
|
54
|
+
icon: 'inline-flex shrink-0 text-current',
|
|
55
|
+
/** Inline `<svg>` for a guarded custom `svgPath`. */
|
|
56
|
+
svgIcon: 'inline-block shrink-0 fill-none stroke-current',
|
|
57
|
+
/** Wrapper for the multiple-selection ChoicePicker (label + checkboxes). */
|
|
58
|
+
choiceGroup: 'flex min-w-0 flex-col gap-2',
|
|
59
|
+
/** Group label for the multiple-selection ChoicePicker. */
|
|
60
|
+
choiceLabel: 'text-sm font-medium text-text-secondary'
|
|
61
|
+
}
|
|
62
|
+
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public type contracts for the A2UI engine (AI-Kit P4).
|
|
3
|
+
*
|
|
4
|
+
* A2UI is Google/A2UI-project's "Agent to UI" protocol. This engine targets the
|
|
5
|
+
* **v0.9.1 `basic` catalog**, rendering a curated 12-component subset (see
|
|
6
|
+
* `a2ui-registry.ts`). These types are the boundary between the pure-TS engine
|
|
7
|
+
* (WP-A) and the Svelte renderer (WP-B) — keep them Svelte-free.
|
|
8
|
+
*
|
|
9
|
+
* The `A2uiValidationIssue` shape is deliberately spec-compatible with the A2UI
|
|
10
|
+
* client→server `error` message (`{ code, surfaceId?, path?, message }`) so a
|
|
11
|
+
* consumer can relay error-severity issues back to the agent verbatim as a
|
|
12
|
+
* `VALIDATION_FAILED` error. `severity` is our addition, so warnings and errors
|
|
13
|
+
* travel on one channel; the consumer filters.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* A single Server→Client envelope. Structurally validated at runtime, never
|
|
17
|
+
* type-enforced — the wire payload is untrusted, so the engine treats every
|
|
18
|
+
* envelope as an opaque record and validates field-by-field.
|
|
19
|
+
*/
|
|
20
|
+
export type A2uiEnvelope = Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* A resolved user action, spec-exact for the A2UI client→server `action`
|
|
23
|
+
* message. All five fields are required; `context` bindings are resolved
|
|
24
|
+
* against the data model in the source component's scope before dispatch.
|
|
25
|
+
*/
|
|
26
|
+
export interface A2uiActionEvent {
|
|
27
|
+
name: string;
|
|
28
|
+
surfaceId: string;
|
|
29
|
+
sourceComponentId: string;
|
|
30
|
+
/** ISO 8601 timestamp (`new Date().toISOString()`). */
|
|
31
|
+
timestamp: string;
|
|
32
|
+
context: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
/** Severity of a validation issue. `error` renders a fault chip; `warning` degrades. */
|
|
35
|
+
export type A2uiIssueSeverity = 'error' | 'warning';
|
|
36
|
+
/**
|
|
37
|
+
* A validation finding. `code` is one of {@link A2UI_ISSUE_CODES} (a superset of
|
|
38
|
+
* the spec's `VALIDATION_FAILED`); `path` is a JSON Pointer into the *payload*
|
|
39
|
+
* (e.g. `/messages/3/updateComponents/components/0/text`) where determinable.
|
|
40
|
+
*/
|
|
41
|
+
export interface A2uiValidationIssue {
|
|
42
|
+
severity: A2uiIssueSeverity;
|
|
43
|
+
code: string;
|
|
44
|
+
surfaceId?: string;
|
|
45
|
+
path?: string;
|
|
46
|
+
message: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Canonical issue codes. Error-severity codes are relay-able to the agent as a
|
|
50
|
+
* `VALIDATION_FAILED` A2UI error (the consumer maps `code`→detail, keeping
|
|
51
|
+
* `message`/`path`/`surfaceId`).
|
|
52
|
+
*/
|
|
53
|
+
export declare const A2UI_ISSUE_CODES: {
|
|
54
|
+
/** Envelope is not a plain object. */
|
|
55
|
+
readonly INVALID_ENVELOPE: "INVALID_ENVELOPE";
|
|
56
|
+
/** `version` missing or not `v0.9`/`v0.9.1`. */
|
|
57
|
+
readonly INVALID_VERSION: "INVALID_VERSION";
|
|
58
|
+
/** Envelope has none, or more than one, of the four operation keys. */
|
|
59
|
+
readonly UNKNOWN_ENVELOPE_TYPE: "UNKNOWN_ENVELOPE_TYPE";
|
|
60
|
+
/** A required field is missing or has the wrong primitive type. */
|
|
61
|
+
readonly MISSING_FIELD: "MISSING_FIELD";
|
|
62
|
+
/** `updateComponents`/`updateDataModel`/`deleteSurface` before `createSurface`. */
|
|
63
|
+
readonly NO_SURFACE: "NO_SURFACE";
|
|
64
|
+
/** `createSurface` for an id that already exists. */
|
|
65
|
+
readonly DUPLICATE_SURFACE: "DUPLICATE_SURFACE";
|
|
66
|
+
/** `component` is a string but not in any catalog. */
|
|
67
|
+
readonly UNKNOWN_COMPONENT: "UNKNOWN_COMPONENT";
|
|
68
|
+
/** A real catalog component outside the rendered subset (Modal, Tabs, …). */
|
|
69
|
+
readonly UNSUPPORTED_COMPONENT: "UNSUPPORTED_COMPONENT";
|
|
70
|
+
/** A prop not declared for the component (whitelist violation). */
|
|
71
|
+
readonly UNKNOWN_PROP: "UNKNOWN_PROP";
|
|
72
|
+
/** A recognized-but-ignored prop (`checks`, `validationRegexp`). */
|
|
73
|
+
readonly IGNORED_PROP: "IGNORED_PROP";
|
|
74
|
+
/** A prop value's shape does not match its declared kind. */
|
|
75
|
+
readonly TYPE_MISMATCH: "TYPE_MISMATCH";
|
|
76
|
+
/** An enum prop value is outside the allowed set. */
|
|
77
|
+
readonly UNKNOWN_ENUM: "UNKNOWN_ENUM";
|
|
78
|
+
/** Two components share an id inside a single `updateComponents` list. */
|
|
79
|
+
readonly DUPLICATE_ID: "DUPLICATE_ID";
|
|
80
|
+
/** Two `ChoicePicker` options share a `value` — the second is dropped (values must be unique). */
|
|
81
|
+
readonly DUPLICATE_OPTION: "DUPLICATE_OPTION";
|
|
82
|
+
/** `DateTimeInput` with neither `enableDate` nor `enableTime` — rendered as a date input. */
|
|
83
|
+
readonly DATETIME_NO_MODE: "DATETIME_NO_MODE";
|
|
84
|
+
/** More surfaces than the engine renders at once — the extra `createSurface` is refused. */
|
|
85
|
+
readonly MAX_SURFACES: "MAX_SURFACES";
|
|
86
|
+
/** A single `updateComponents` exceeds the per-message component cap — the surplus is dropped. */
|
|
87
|
+
readonly MAX_COMPONENTS: "MAX_COMPONENTS";
|
|
88
|
+
/** A component object has no usable `id`. */
|
|
89
|
+
readonly MISSING_ID: "MISSING_ID";
|
|
90
|
+
/** `__proto__`/`constructor`/`prototype` as an id, prop, pointer or context key. */
|
|
91
|
+
readonly PROTOTYPE_POLLUTION: "PROTOTYPE_POLLUTION";
|
|
92
|
+
/** A JSON Pointer was malformed. */
|
|
93
|
+
readonly POINTER_ERROR: "POINTER_ERROR";
|
|
94
|
+
/** The component graph contains a cycle. */
|
|
95
|
+
readonly CYCLE: "CYCLE";
|
|
96
|
+
/** Tree depth exceeds the limit (default 32). */
|
|
97
|
+
readonly MAX_DEPTH: "MAX_DEPTH";
|
|
98
|
+
/** Rendered node count exceeds the limit (default 512). */
|
|
99
|
+
readonly MAX_NODES: "MAX_NODES";
|
|
100
|
+
/** A child id references a component that was never defined. */
|
|
101
|
+
readonly DANGLING_REF: "DANGLING_REF";
|
|
102
|
+
/** No `root` component after the stream ended. */
|
|
103
|
+
readonly MISSING_ROOT: "MISSING_ROOT";
|
|
104
|
+
/** A `children` template `path` resolved to a non-array, non-undefined value. */
|
|
105
|
+
readonly TEMPLATE_PATH_NOT_ARRAY: "TEMPLATE_PATH_NOT_ARRAY";
|
|
106
|
+
/** `weight` set on a component that is not a direct Row/Column child. */
|
|
107
|
+
readonly WEIGHT_CONTEXT: "WEIGHT_CONTEXT";
|
|
108
|
+
/** A `{ call, args }` function-call binding — unsupported, resolves to `undefined`. */
|
|
109
|
+
readonly FUNCTION_CALL_UNSUPPORTED: "FUNCTION_CALL_UNSUPPORTED";
|
|
110
|
+
/** An `Icon.name` string outside the mapped set — a fallback glyph is drawn. */
|
|
111
|
+
readonly ICON_UNMAPPED: "ICON_UNMAPPED";
|
|
112
|
+
/** An `Icon.name.svgPath` failed the path grammar guard. */
|
|
113
|
+
readonly ICON_INVALID_SVG: "ICON_INVALID_SVG";
|
|
114
|
+
/** `ChoicePicker` `displayStyle: 'chips'` / `filterable` — rendered with a fallback. */
|
|
115
|
+
readonly CHOICEPICKER_FALLBACK: "CHOICEPICKER_FALLBACK";
|
|
116
|
+
/** A `createSurface`-only prop (`theme`, `sendDataModel`) that the engine ignores. */
|
|
117
|
+
readonly SURFACE_PROP_IGNORED: "SURFACE_PROP_IGNORED";
|
|
118
|
+
};
|
|
119
|
+
export type A2uiIssueCode = (typeof A2UI_ISSUE_CODES)[keyof typeof A2UI_ISSUE_CODES];
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public type contracts for the A2UI engine (AI-Kit P4).
|
|
3
|
+
*
|
|
4
|
+
* A2UI is Google/A2UI-project's "Agent to UI" protocol. This engine targets the
|
|
5
|
+
* **v0.9.1 `basic` catalog**, rendering a curated 12-component subset (see
|
|
6
|
+
* `a2ui-registry.ts`). These types are the boundary between the pure-TS engine
|
|
7
|
+
* (WP-A) and the Svelte renderer (WP-B) — keep them Svelte-free.
|
|
8
|
+
*
|
|
9
|
+
* The `A2uiValidationIssue` shape is deliberately spec-compatible with the A2UI
|
|
10
|
+
* client→server `error` message (`{ code, surfaceId?, path?, message }`) so a
|
|
11
|
+
* consumer can relay error-severity issues back to the agent verbatim as a
|
|
12
|
+
* `VALIDATION_FAILED` error. `severity` is our addition, so warnings and errors
|
|
13
|
+
* travel on one channel; the consumer filters.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Canonical issue codes. Error-severity codes are relay-able to the agent as a
|
|
17
|
+
* `VALIDATION_FAILED` A2UI error (the consumer maps `code`→detail, keeping
|
|
18
|
+
* `message`/`path`/`surfaceId`).
|
|
19
|
+
*/
|
|
20
|
+
export const A2UI_ISSUE_CODES = {
|
|
21
|
+
/** Envelope is not a plain object. */
|
|
22
|
+
INVALID_ENVELOPE: 'INVALID_ENVELOPE',
|
|
23
|
+
/** `version` missing or not `v0.9`/`v0.9.1`. */
|
|
24
|
+
INVALID_VERSION: 'INVALID_VERSION',
|
|
25
|
+
/** Envelope has none, or more than one, of the four operation keys. */
|
|
26
|
+
UNKNOWN_ENVELOPE_TYPE: 'UNKNOWN_ENVELOPE_TYPE',
|
|
27
|
+
/** A required field is missing or has the wrong primitive type. */
|
|
28
|
+
MISSING_FIELD: 'MISSING_FIELD',
|
|
29
|
+
/** `updateComponents`/`updateDataModel`/`deleteSurface` before `createSurface`. */
|
|
30
|
+
NO_SURFACE: 'NO_SURFACE',
|
|
31
|
+
/** `createSurface` for an id that already exists. */
|
|
32
|
+
DUPLICATE_SURFACE: 'DUPLICATE_SURFACE',
|
|
33
|
+
/** `component` is a string but not in any catalog. */
|
|
34
|
+
UNKNOWN_COMPONENT: 'UNKNOWN_COMPONENT',
|
|
35
|
+
/** A real catalog component outside the rendered subset (Modal, Tabs, …). */
|
|
36
|
+
UNSUPPORTED_COMPONENT: 'UNSUPPORTED_COMPONENT',
|
|
37
|
+
/** A prop not declared for the component (whitelist violation). */
|
|
38
|
+
UNKNOWN_PROP: 'UNKNOWN_PROP',
|
|
39
|
+
/** A recognized-but-ignored prop (`checks`, `validationRegexp`). */
|
|
40
|
+
IGNORED_PROP: 'IGNORED_PROP',
|
|
41
|
+
/** A prop value's shape does not match its declared kind. */
|
|
42
|
+
TYPE_MISMATCH: 'TYPE_MISMATCH',
|
|
43
|
+
/** An enum prop value is outside the allowed set. */
|
|
44
|
+
UNKNOWN_ENUM: 'UNKNOWN_ENUM',
|
|
45
|
+
/** Two components share an id inside a single `updateComponents` list. */
|
|
46
|
+
DUPLICATE_ID: 'DUPLICATE_ID',
|
|
47
|
+
/** Two `ChoicePicker` options share a `value` — the second is dropped (values must be unique). */
|
|
48
|
+
DUPLICATE_OPTION: 'DUPLICATE_OPTION',
|
|
49
|
+
/** `DateTimeInput` with neither `enableDate` nor `enableTime` — rendered as a date input. */
|
|
50
|
+
DATETIME_NO_MODE: 'DATETIME_NO_MODE',
|
|
51
|
+
/** More surfaces than the engine renders at once — the extra `createSurface` is refused. */
|
|
52
|
+
MAX_SURFACES: 'MAX_SURFACES',
|
|
53
|
+
/** A single `updateComponents` exceeds the per-message component cap — the surplus is dropped. */
|
|
54
|
+
MAX_COMPONENTS: 'MAX_COMPONENTS',
|
|
55
|
+
/** A component object has no usable `id`. */
|
|
56
|
+
MISSING_ID: 'MISSING_ID',
|
|
57
|
+
/** `__proto__`/`constructor`/`prototype` as an id, prop, pointer or context key. */
|
|
58
|
+
PROTOTYPE_POLLUTION: 'PROTOTYPE_POLLUTION',
|
|
59
|
+
/** A JSON Pointer was malformed. */
|
|
60
|
+
POINTER_ERROR: 'POINTER_ERROR',
|
|
61
|
+
/** The component graph contains a cycle. */
|
|
62
|
+
CYCLE: 'CYCLE',
|
|
63
|
+
/** Tree depth exceeds the limit (default 32). */
|
|
64
|
+
MAX_DEPTH: 'MAX_DEPTH',
|
|
65
|
+
/** Rendered node count exceeds the limit (default 512). */
|
|
66
|
+
MAX_NODES: 'MAX_NODES',
|
|
67
|
+
/** A child id references a component that was never defined. */
|
|
68
|
+
DANGLING_REF: 'DANGLING_REF',
|
|
69
|
+
/** No `root` component after the stream ended. */
|
|
70
|
+
MISSING_ROOT: 'MISSING_ROOT',
|
|
71
|
+
/** A `children` template `path` resolved to a non-array, non-undefined value. */
|
|
72
|
+
TEMPLATE_PATH_NOT_ARRAY: 'TEMPLATE_PATH_NOT_ARRAY',
|
|
73
|
+
/** `weight` set on a component that is not a direct Row/Column child. */
|
|
74
|
+
WEIGHT_CONTEXT: 'WEIGHT_CONTEXT',
|
|
75
|
+
/** A `{ call, args }` function-call binding — unsupported, resolves to `undefined`. */
|
|
76
|
+
FUNCTION_CALL_UNSUPPORTED: 'FUNCTION_CALL_UNSUPPORTED',
|
|
77
|
+
/** An `Icon.name` string outside the mapped set — a fallback glyph is drawn. */
|
|
78
|
+
ICON_UNMAPPED: 'ICON_UNMAPPED',
|
|
79
|
+
/** An `Icon.name.svgPath` failed the path grammar guard. */
|
|
80
|
+
ICON_INVALID_SVG: 'ICON_INVALID_SVG',
|
|
81
|
+
/** `ChoicePicker` `displayStyle: 'chips'` / `filterable` — rendered with a fallback. */
|
|
82
|
+
CHOICEPICKER_FALLBACK: 'CHOICEPICKER_FALLBACK',
|
|
83
|
+
/** A `createSurface`-only prop (`theme`, `sendDataModel`) that the engine ignores. */
|
|
84
|
+
SURFACE_PROP_IGNORED: 'SURFACE_PROP_IGNORED'
|
|
85
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
2
|
+
import type { MarkdownUrlPolicy } from '../markdown/types.js';
|
|
3
|
+
import type { A2uiActionEvent, A2uiValidationIssue } from './a2ui.types.js';
|
|
4
|
+
import type { A2UIViewSlots } from './a2ui-view.variants.js';
|
|
5
|
+
/**
|
|
6
|
+
* @description Renders a trusted-catalog A2UI (Agent-to-UI, v0.9.1 `basic`
|
|
7
|
+
* subset) payload into live, interactive Urbicon components. Fail-loud and
|
|
8
|
+
* whitelist-only: only the mapped catalog components and their declared props
|
|
9
|
+
* ever reach the DOM — unknown components/props, prototype-pollution keys and
|
|
10
|
+
* function-call bindings are rejected, never rendered, and surfaced through
|
|
11
|
+
* `onValidationError` (spec-compatible issues a consumer can relay to the agent
|
|
12
|
+
* as a `VALIDATION_FAILED` error). Inputs are two-way (typing writes into the
|
|
13
|
+
* local data model; bound text updates live); actions dispatch a spec-exact
|
|
14
|
+
* `A2uiActionEvent`. Images and links are gated by the same strict-by-default
|
|
15
|
+
* `urlPolicy` as StreamingMarkdown. It is deliberately NOT a default ChatMessage
|
|
16
|
+
* renderer — wire it in per surface via `partRenderers.a2ui` to keep it out of
|
|
17
|
+
* the base bundle. Generate the agent-side prompt with the shipped
|
|
18
|
+
* `a2uiSystemPrompt()`; validate a payload without a DOM with
|
|
19
|
+
* `createA2uiProcessor()` — never hand-roll either.
|
|
20
|
+
* @tag ai
|
|
21
|
+
* @related ChatMessage
|
|
22
|
+
* @stability experimental
|
|
23
|
+
*
|
|
24
|
+
* @example Wire it in as the `a2ui` part renderer (via `partRenderers`, which
|
|
25
|
+
* ChatMessage/ChatMessageList forward to each part — a plain `a2ui` snippet on
|
|
26
|
+
* `<ChatMessage>` is NOT consumed)
|
|
27
|
+
* ```svelte
|
|
28
|
+
* {#snippet a2uiPart(part)}
|
|
29
|
+
* <A2UIView
|
|
30
|
+
* payload={part.payload}
|
|
31
|
+
* streaming={message.status === 'streaming'}
|
|
32
|
+
* {urlPolicy}
|
|
33
|
+
* onAction={(event) => sendUserTurn(`[ui-action] ${JSON.stringify(event)}`)}
|
|
34
|
+
* onValidationError={(issues) => reportToAgent(issues)}
|
|
35
|
+
* />
|
|
36
|
+
* {/snippet}
|
|
37
|
+
* <ChatMessage {message} {urlPolicy} partRenderers={{ a2ui: a2uiPart }} />
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example Standalone with an accumulated envelope array
|
|
41
|
+
* ```svelte
|
|
42
|
+
* <A2UIView payload={envelopes} onAction={(e) => console.log(e)} />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export interface A2UIViewProps extends Omit<HTMLAttributes<HTMLDivElement>, 'class'> {
|
|
46
|
+
/**
|
|
47
|
+
* The A2UI payload. Accepts an array of envelopes (the accumulated JSONL
|
|
48
|
+
* sequence — stream by extending it immutably: `[...prev, envelope]`), a
|
|
49
|
+
* single envelope object, or the golden-file `{ messages: [...] }` wrapper.
|
|
50
|
+
*/
|
|
51
|
+
payload: unknown;
|
|
52
|
+
/**
|
|
53
|
+
* While true, a reference to a not-yet-defined component renders a placeholder
|
|
54
|
+
* instead of a fault chip (mid-stream tolerance). Flip to false when the
|
|
55
|
+
* stream settles so dangling references become errors. @default false
|
|
56
|
+
*/
|
|
57
|
+
streaming?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* URL policy for `Image` sources (and Text markdown links). Strict by default:
|
|
60
|
+
* every external image is blocked unless its prefix is allowlisted. Keep the
|
|
61
|
+
* object referentially stable.
|
|
62
|
+
*/
|
|
63
|
+
urlPolicy?: MarkdownUrlPolicy;
|
|
64
|
+
/** Fired when a Button is activated, with the spec-exact resolved action event. */
|
|
65
|
+
onAction?: (event: A2uiActionEvent) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Fired whenever the validation-issue list changes (errors AND warnings, each
|
|
68
|
+
* with a `severity`). Relay error-severity issues to the agent as an A2UI
|
|
69
|
+
* `error` message.
|
|
70
|
+
*/
|
|
71
|
+
onValidationError?: (issues: A2uiValidationIssue[]) => void;
|
|
72
|
+
/** Title of the top-level error Alert for envelope-level faults. @default 'Invalid UI payload' */
|
|
73
|
+
errorTitle?: string;
|
|
74
|
+
/** Fault-chip label for an unknown/unsupported/incomplete component. @default 'Unsupported component' */
|
|
75
|
+
unsupportedLabel?: string;
|
|
76
|
+
/** Chip label shown in place of a policy-blocked image. @default 'Image blocked' */
|
|
77
|
+
blockedImageLabel?: string;
|
|
78
|
+
/** Screen-reader label of the streaming placeholder. @default 'Loading UI' */
|
|
79
|
+
pendingLabel?: string;
|
|
80
|
+
/** Extra classes merged onto the root element. */
|
|
81
|
+
class?: string;
|
|
82
|
+
/** Strip the component's default tv() classes. */
|
|
83
|
+
unstyled?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Per-slot class overrides. Slots: `root`, `surface`, `errorList`,
|
|
86
|
+
* `errorChip`, `errorIcon`, `pending`, `column`, `row`, `list`, `listItem`,
|
|
87
|
+
* `heading`, `caption`, `inlineText`, `image`, `blockedChip`, `icon`,
|
|
88
|
+
* `svgIcon`, `choiceGroup`, `choiceLabel`.
|
|
89
|
+
*/
|
|
90
|
+
slotClasses?: Partial<Record<A2UIViewSlots, string>>;
|
|
91
|
+
/**
|
|
92
|
+
* Apply a named preset registered via `<BlocksProvider presets={{ A2UIView: {...} }}>`.
|
|
93
|
+
* Prefer this over `class` overrides for reusable custom looks.
|
|
94
|
+
*/
|
|
95
|
+
preset?: string;
|
|
96
|
+
}
|
|
97
|
+
export { default as A2UIView } from './A2UIView.svelte';
|
|
98
|
+
export { A2UI_ISSUE_CODES, type A2uiActionEvent, type A2uiEnvelope, type A2uiIssueCode, type A2uiIssueSeverity, type A2uiValidationIssue } from './a2ui.types.js';
|
|
99
|
+
export { a2uiSystemPrompt } from './a2ui-prompt.js';
|
|
100
|
+
export { A2UI_CATALOG_ID, A2UI_ICON_NAMES, A2UI_REGISTRY, A2UI_SUPPORTED_VERSIONS, type A2uiComponentSpec, type A2uiPropKind, type A2uiPropSpec, UNSUPPORTED_A2UI_COMPONENTS } from './a2ui-registry.js';
|
|
101
|
+
export { type A2uiComponentInstance, type A2uiProcessor, type A2uiSurfaceState, collectGraphIssues, createA2uiProcessor, normalizeA2uiPayload } from './a2ui-validate.js';
|
|
102
|
+
export { type A2UIViewSlots, type A2UIViewVariants, a2uiViewVariants } from './a2ui-view.variants.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as A2UIView } from './A2UIView.svelte';
|
|
2
|
+
// ── Engine surface (Svelte-free; a server building the prompt has no DOM) ────
|
|
3
|
+
export { A2UI_ISSUE_CODES } from './a2ui.types.js';
|
|
4
|
+
export { a2uiSystemPrompt } from './a2ui-prompt.js';
|
|
5
|
+
export { A2UI_CATALOG_ID, A2UI_ICON_NAMES, A2UI_REGISTRY, A2UI_SUPPORTED_VERSIONS, UNSUPPORTED_A2UI_COMPONENTS } from './a2ui-registry.js';
|
|
6
|
+
export { collectGraphIssues, createA2uiProcessor, normalizeA2uiPayload } from './a2ui-validate.js';
|
|
7
|
+
export { a2uiViewVariants } from './a2ui-view.variants.js';
|
|
@@ -220,7 +220,10 @@
|
|
|
220
220
|
{@render attachmentChip(part)}
|
|
221
221
|
{/if}
|
|
222
222
|
{:else if part.type === 'a2ui'}
|
|
223
|
-
<!-- default
|
|
223
|
+
<!-- No default renderer by design: A2UIView is opt-in via
|
|
224
|
+
`partRenderers.a2ui` so it stays out of the base bundle. Wire it up
|
|
225
|
+
with `{#snippet a2ui(part)}<A2UIView payload={part.payload} … />{/snippet}`
|
|
226
|
+
(see A2UIView's JSDoc). Without the snippet, an a2ui part renders nothing. -->
|
|
224
227
|
{#if partRenderers?.a2ui}{@render partRenderers.a2ui(part)}{/if}
|
|
225
228
|
{/if}
|
|
226
229
|
<!-- part.type === 'source' is intentionally skipped: sources render in the
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Chat family barrel — AI-kit surfaces (conversation, composer, streaming
|
|
2
2
|
// markdown, code display, citations) plus the public pieces of the markdown
|
|
3
3
|
// engine underneath them.
|
|
4
|
+
export * from './A2UIView/index.js';
|
|
4
5
|
export * from './Chat/index.js';
|
|
5
6
|
export * from './ChatMessage/index.js';
|
|
6
7
|
export * from './ChatMessageList/index.js';
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { type SlotNames, type VariantProps } from '../../utils/variants.js';
|
|
2
2
|
export declare const copyButtonVariants: ((props?: {
|
|
3
3
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xs" | undefined;
|
|
4
|
-
state?: "
|
|
4
|
+
state?: "copied" | "error" | "idle" | undefined;
|
|
5
5
|
} | undefined) => {
|
|
6
6
|
base: (props?: ({
|
|
7
7
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xs" | undefined;
|
|
8
|
-
state?: "
|
|
8
|
+
state?: "copied" | "error" | "idle" | undefined;
|
|
9
9
|
} & {
|
|
10
10
|
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
11
11
|
}) | undefined) => string;
|
|
12
12
|
icon: (props?: ({
|
|
13
13
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xs" | undefined;
|
|
14
|
-
state?: "
|
|
14
|
+
state?: "copied" | "error" | "idle" | undefined;
|
|
15
15
|
} & {
|
|
16
16
|
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
17
17
|
}) | undefined) => string;
|
|
18
18
|
label: (props?: ({
|
|
19
19
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xs" | undefined;
|
|
20
|
-
state?: "
|
|
20
|
+
state?: "copied" | "error" | "idle" | undefined;
|
|
21
21
|
} & {
|
|
22
22
|
class?: string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | (string | number | false | /*elided*/ any | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined)[] | Record<string, boolean | null | undefined> | null | undefined;
|
|
23
23
|
}) | undefined) => string;
|