@threadplane/a2ui 0.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +25 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +4 -0
- package/src/lib/guards.d.ts +13 -0
- package/src/lib/guards.d.ts.map +1 -0
- package/src/lib/guards.js +14 -0
- package/src/lib/parser.d.ts +6 -0
- package/src/lib/parser.d.ts.map +1 -0
- package/src/lib/parser.js +37 -0
- package/src/lib/pointer.d.ts +4 -0
- package/src/lib/pointer.d.ts.map +1 -0
- package/src/lib/pointer.js +50 -0
- package/src/lib/resolve.d.ts +6 -0
- package/src/lib/resolve.d.ts.map +1 -0
- package/src/lib/resolve.js +45 -0
- package/src/lib/types.d.ts +262 -0
- package/src/lib/types.d.ts.map +1 -0
- package/src/lib/types.js +2 -0
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@threadplane/a2ui",
|
|
3
|
+
"version": "0.0.46",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/cacheplane/angular-agent-framework.git",
|
|
8
|
+
"directory": "libs/a2ui"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/cacheplane/angular-agent-framework#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/cacheplane/angular-agent-framework/issues"
|
|
13
|
+
},
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"types": "./src/index.d.ts",
|
|
16
|
+
"module": "./src/index.js",
|
|
17
|
+
"type": "module",
|
|
18
|
+
"main": "./src/index.js",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@threadplane/telemetry": "*"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"postinstall": "threadplane-telemetry-postinstall || true"
|
|
24
|
+
}
|
|
25
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { A2uiTheme, DynamicString, DynamicNumber, DynamicBoolean, DynamicStringList, A2uiChildren, A2uiActionContextEntry, A2uiAction, A2uiComponent, A2uiComponentDef, A2uiText, A2uiImage, A2uiIcon, A2uiVideo, A2uiAudioPlayer, A2uiRow, A2uiColumn, A2uiList, A2uiCard, A2uiTabs, A2uiTabItem, A2uiDivider, A2uiModal, A2uiButton, A2uiCheckBox, A2uiTextField, A2uiDateTimeInput, A2uiMultipleChoice, A2uiSlider, A2uiSurfaceUpdate, A2uiDataModelEntry, A2uiDataModelUpdate, A2uiBeginRendering, A2uiDeleteSurface, A2uiMessage, A2uiSurface, A2uiClientDataModel, A2uiActionMessage, } from './lib/types.js';
|
|
2
|
+
export { getByPointer, setByPointer, deleteByPointer } from './lib/pointer.js';
|
|
3
|
+
export { createA2uiMessageParser } from './lib/parser.js';
|
|
4
|
+
export type { A2uiMessageParser } from './lib/parser.js';
|
|
5
|
+
export { resolveDynamic } from './lib/resolve.js';
|
|
6
|
+
export type { A2uiScope } from './lib/resolve.js';
|
|
7
|
+
export { isLiteralString, isLiteralNumber, isLiteralBoolean, isPathRef } from './lib/guards.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/a2ui/src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAC/D,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAChD,aAAa,EAAE,gBAAgB,EAC/B,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EACzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EACtF,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAC1F,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EACjG,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,iBAAiB,GACvC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { getByPointer, setByPointer, deleteByPointer } from './lib/pointer.js';
|
|
2
|
+
export { createA2uiMessageParser } from './lib/parser.js';
|
|
3
|
+
export { resolveDynamic } from './lib/resolve.js';
|
|
4
|
+
export { isLiteralString, isLiteralNumber, isLiteralBoolean, isPathRef } from './lib/guards.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function isPathRef(value: unknown): value is {
|
|
2
|
+
path: string;
|
|
3
|
+
};
|
|
4
|
+
export declare function isLiteralString(value: unknown): value is {
|
|
5
|
+
literalString: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function isLiteralNumber(value: unknown): value is {
|
|
8
|
+
literalNumber: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function isLiteralBoolean(value: unknown): value is {
|
|
11
|
+
literalBoolean: boolean;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/guards.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAGnE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAErF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
export function isPathRef(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null
|
|
4
|
+
&& 'path' in value && typeof value.path === 'string';
|
|
5
|
+
}
|
|
6
|
+
export function isLiteralString(value) {
|
|
7
|
+
return typeof value === 'object' && value !== null && 'literalString' in value;
|
|
8
|
+
}
|
|
9
|
+
export function isLiteralNumber(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null && 'literalNumber' in value;
|
|
11
|
+
}
|
|
12
|
+
export function isLiteralBoolean(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null && 'literalBoolean' in value;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACpC;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAsC3D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const ENVELOPE_KEYS = ['surfaceUpdate', 'dataModelUpdate', 'beginRendering', 'deleteSurface'];
|
|
2
|
+
export function createA2uiMessageParser() {
|
|
3
|
+
let buffer = '';
|
|
4
|
+
function parseEnvelope(json) {
|
|
5
|
+
for (const key of ENVELOPE_KEYS) {
|
|
6
|
+
if (key in json && typeof json[key] === 'object' && json[key] !== null) {
|
|
7
|
+
// A2uiMessage is a discriminated union of single-key envelope objects.
|
|
8
|
+
return { [key]: json[key] };
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
function push(chunk) {
|
|
14
|
+
buffer += chunk;
|
|
15
|
+
const messages = [];
|
|
16
|
+
let newlineIndex;
|
|
17
|
+
while ((newlineIndex = buffer.indexOf('\n')) !== -1) {
|
|
18
|
+
const line = buffer.slice(0, newlineIndex).trim();
|
|
19
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
20
|
+
if (!line)
|
|
21
|
+
continue;
|
|
22
|
+
try {
|
|
23
|
+
const json = JSON.parse(line);
|
|
24
|
+
if (json && typeof json === 'object' && !Array.isArray(json)) {
|
|
25
|
+
const msg = parseEnvelope(json);
|
|
26
|
+
if (msg)
|
|
27
|
+
messages.push(msg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Skip malformed lines silently — partial JSONL is normal mid-stream.
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return messages;
|
|
35
|
+
}
|
|
36
|
+
return { push };
|
|
37
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function getByPointer(model: Record<string, unknown>, pointer: string): unknown;
|
|
2
|
+
export declare function setByPointer(model: Record<string, unknown>, pointer: string, value: unknown): Record<string, unknown>;
|
|
3
|
+
export declare function deleteByPointer(model: Record<string, unknown>, pointer: string): Record<string, unknown>;
|
|
4
|
+
//# sourceMappingURL=pointer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/pointer.ts"],"names":[],"mappings":"AAOA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrF;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
function parsePointer(pointer) {
|
|
3
|
+
if (!pointer || pointer === '/')
|
|
4
|
+
return [];
|
|
5
|
+
return pointer.split('/').filter(Boolean);
|
|
6
|
+
}
|
|
7
|
+
export function getByPointer(model, pointer) {
|
|
8
|
+
const segments = parsePointer(pointer);
|
|
9
|
+
let current = model;
|
|
10
|
+
for (const seg of segments) {
|
|
11
|
+
if (current == null || typeof current !== 'object')
|
|
12
|
+
return undefined;
|
|
13
|
+
current = current[seg];
|
|
14
|
+
}
|
|
15
|
+
return current;
|
|
16
|
+
}
|
|
17
|
+
export function setByPointer(model, pointer, value) {
|
|
18
|
+
const segments = parsePointer(pointer);
|
|
19
|
+
if (segments.length === 0)
|
|
20
|
+
return value;
|
|
21
|
+
function clone(obj, segs, val) {
|
|
22
|
+
if (segs.length === 0)
|
|
23
|
+
return val;
|
|
24
|
+
const [head, ...rest] = segs;
|
|
25
|
+
const base = (obj != null && typeof obj === 'object') ? obj : {};
|
|
26
|
+
const isArray = Array.isArray(base);
|
|
27
|
+
const copy = isArray ? [...base] : { ...base };
|
|
28
|
+
copy[head] = clone(base[head], rest, val);
|
|
29
|
+
return copy;
|
|
30
|
+
}
|
|
31
|
+
return clone(model, segments, value);
|
|
32
|
+
}
|
|
33
|
+
export function deleteByPointer(model, pointer) {
|
|
34
|
+
const segments = parsePointer(pointer);
|
|
35
|
+
if (segments.length === 0)
|
|
36
|
+
return {};
|
|
37
|
+
const parentPath = segments.slice(0, -1);
|
|
38
|
+
const key = segments[segments.length - 1];
|
|
39
|
+
if (parentPath.length === 0) {
|
|
40
|
+
const copy = { ...model };
|
|
41
|
+
delete copy[key];
|
|
42
|
+
return copy;
|
|
43
|
+
}
|
|
44
|
+
const parent = getByPointer(model, '/' + parentPath.join('/'));
|
|
45
|
+
if (parent == null || typeof parent !== 'object')
|
|
46
|
+
return model;
|
|
47
|
+
const parentCopy = { ...parent };
|
|
48
|
+
delete parentCopy[key];
|
|
49
|
+
return setByPointer(model, '/' + parentPath.join('/'), parentCopy);
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/resolve.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AA+BD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAeT"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
import { getByPointer } from './pointer.js';
|
|
3
|
+
function isPathRef(v) {
|
|
4
|
+
return typeof v === 'object' && v !== null && 'path' in v && typeof v.path === 'string';
|
|
5
|
+
}
|
|
6
|
+
function isLiteralString(v) {
|
|
7
|
+
return typeof v === 'object' && v !== null && 'literalString' in v;
|
|
8
|
+
}
|
|
9
|
+
function isLiteralNumber(v) {
|
|
10
|
+
return typeof v === 'object' && v !== null && 'literalNumber' in v;
|
|
11
|
+
}
|
|
12
|
+
function isLiteralBoolean(v) {
|
|
13
|
+
return typeof v === 'object' && v !== null && 'literalBoolean' in v;
|
|
14
|
+
}
|
|
15
|
+
function isLiteralArray(v) {
|
|
16
|
+
return typeof v === 'object' && v !== null && 'literalArray' in v;
|
|
17
|
+
}
|
|
18
|
+
function resolvePathRef(ref, model, scope) {
|
|
19
|
+
const path = ref.path;
|
|
20
|
+
if (path.startsWith('/'))
|
|
21
|
+
return getByPointer(model, path);
|
|
22
|
+
if (scope)
|
|
23
|
+
return getByPointer(model, `${scope.basePath}/${path}`);
|
|
24
|
+
return getByPointer(model, '/' + path);
|
|
25
|
+
}
|
|
26
|
+
export function resolveDynamic(value, model, scope) {
|
|
27
|
+
if (value == null)
|
|
28
|
+
return value;
|
|
29
|
+
if (Array.isArray(value))
|
|
30
|
+
return value.map(item => resolveDynamic(item, model, scope));
|
|
31
|
+
// Literal wrappers — unwrap. Order matters less than mutual exclusivity.
|
|
32
|
+
if (isLiteralString(value))
|
|
33
|
+
return value.literalString;
|
|
34
|
+
if (isLiteralNumber(value))
|
|
35
|
+
return value.literalNumber;
|
|
36
|
+
if (isLiteralBoolean(value))
|
|
37
|
+
return value.literalBoolean;
|
|
38
|
+
if (isLiteralArray(value))
|
|
39
|
+
return value.literalArray;
|
|
40
|
+
// Path reference
|
|
41
|
+
if (isPathRef(value))
|
|
42
|
+
return resolvePathRef(value, model, scope);
|
|
43
|
+
// Plain literal passthrough (string, number, boolean, plain object without wrappers)
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
export interface A2uiTheme {
|
|
2
|
+
primaryColor?: string;
|
|
3
|
+
iconUrl?: string;
|
|
4
|
+
agentDisplayName?: string;
|
|
5
|
+
}
|
|
6
|
+
export type DynamicString = {
|
|
7
|
+
literalString: string;
|
|
8
|
+
} | {
|
|
9
|
+
path: string;
|
|
10
|
+
};
|
|
11
|
+
export type DynamicNumber = {
|
|
12
|
+
literalNumber: number;
|
|
13
|
+
} | {
|
|
14
|
+
path: string;
|
|
15
|
+
};
|
|
16
|
+
export type DynamicBoolean = {
|
|
17
|
+
literalBoolean: boolean;
|
|
18
|
+
} | {
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
export type DynamicStringList = {
|
|
22
|
+
literalArray: string[];
|
|
23
|
+
} | {
|
|
24
|
+
path: string;
|
|
25
|
+
};
|
|
26
|
+
export type A2uiChildren = {
|
|
27
|
+
explicitList: string[];
|
|
28
|
+
} | {
|
|
29
|
+
template: {
|
|
30
|
+
componentId: string;
|
|
31
|
+
dataBinding: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export interface A2uiActionContextEntry {
|
|
35
|
+
key: string;
|
|
36
|
+
value: DynamicString | DynamicNumber | DynamicBoolean;
|
|
37
|
+
}
|
|
38
|
+
export interface A2uiAction {
|
|
39
|
+
name: string;
|
|
40
|
+
context?: A2uiActionContextEntry[];
|
|
41
|
+
}
|
|
42
|
+
export interface A2uiText {
|
|
43
|
+
text: DynamicString;
|
|
44
|
+
usageHint?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'caption' | 'body';
|
|
45
|
+
}
|
|
46
|
+
export interface A2uiImage {
|
|
47
|
+
url: DynamicString;
|
|
48
|
+
alt?: DynamicString;
|
|
49
|
+
width?: number;
|
|
50
|
+
height?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface A2uiIcon {
|
|
53
|
+
icon: DynamicString;
|
|
54
|
+
size?: number;
|
|
55
|
+
}
|
|
56
|
+
export interface A2uiVideo {
|
|
57
|
+
url: DynamicString;
|
|
58
|
+
autoPlay?: boolean;
|
|
59
|
+
controls?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface A2uiAudioPlayer {
|
|
62
|
+
url: DynamicString;
|
|
63
|
+
autoPlay?: boolean;
|
|
64
|
+
controls?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface A2uiRow {
|
|
67
|
+
children: A2uiChildren;
|
|
68
|
+
gap?: number;
|
|
69
|
+
alignment?: 'start' | 'center' | 'end' | 'stretch';
|
|
70
|
+
distribution?: 'start' | 'center' | 'end' | 'space-between' | 'space-around';
|
|
71
|
+
}
|
|
72
|
+
export interface A2uiColumn {
|
|
73
|
+
children: A2uiChildren;
|
|
74
|
+
gap?: number;
|
|
75
|
+
alignment?: 'start' | 'center' | 'end' | 'stretch';
|
|
76
|
+
}
|
|
77
|
+
export interface A2uiList {
|
|
78
|
+
children: A2uiChildren;
|
|
79
|
+
direction?: 'vertical' | 'horizontal';
|
|
80
|
+
}
|
|
81
|
+
export interface A2uiCard {
|
|
82
|
+
child: string;
|
|
83
|
+
}
|
|
84
|
+
export interface A2uiTabItem {
|
|
85
|
+
title: DynamicString;
|
|
86
|
+
child: string;
|
|
87
|
+
}
|
|
88
|
+
export interface A2uiTabs {
|
|
89
|
+
tabItems: A2uiTabItem[];
|
|
90
|
+
}
|
|
91
|
+
export interface A2uiDivider {
|
|
92
|
+
direction?: 'horizontal' | 'vertical';
|
|
93
|
+
}
|
|
94
|
+
export interface A2uiModal {
|
|
95
|
+
entryPointChild: string;
|
|
96
|
+
contentChild: string;
|
|
97
|
+
title?: DynamicString;
|
|
98
|
+
}
|
|
99
|
+
export interface A2uiButton {
|
|
100
|
+
child: string;
|
|
101
|
+
primary?: boolean;
|
|
102
|
+
action: A2uiAction;
|
|
103
|
+
}
|
|
104
|
+
export interface A2uiCheckBox {
|
|
105
|
+
label: DynamicString;
|
|
106
|
+
checked: DynamicBoolean;
|
|
107
|
+
action?: A2uiAction;
|
|
108
|
+
}
|
|
109
|
+
export interface A2uiTextField {
|
|
110
|
+
label: DynamicString;
|
|
111
|
+
text?: DynamicString;
|
|
112
|
+
textFieldType?: 'date' | 'longText' | 'number' | 'shortText' | 'obscured';
|
|
113
|
+
validationRegexp?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface A2uiDateTimeInput {
|
|
116
|
+
label: DynamicString;
|
|
117
|
+
value?: DynamicString;
|
|
118
|
+
enableDate?: boolean;
|
|
119
|
+
enableTime?: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface A2uiMultipleChoice {
|
|
122
|
+
selections: DynamicStringList;
|
|
123
|
+
options: {
|
|
124
|
+
label: DynamicString;
|
|
125
|
+
value: string;
|
|
126
|
+
}[];
|
|
127
|
+
maxAllowedSelections?: number;
|
|
128
|
+
label?: DynamicString;
|
|
129
|
+
}
|
|
130
|
+
export interface A2uiSlider {
|
|
131
|
+
value: DynamicNumber;
|
|
132
|
+
minValue?: number;
|
|
133
|
+
maxValue?: number;
|
|
134
|
+
step?: number;
|
|
135
|
+
label?: DynamicString;
|
|
136
|
+
}
|
|
137
|
+
export type A2uiComponentDef = {
|
|
138
|
+
Text: A2uiText;
|
|
139
|
+
} | {
|
|
140
|
+
Image: A2uiImage;
|
|
141
|
+
} | {
|
|
142
|
+
Icon: A2uiIcon;
|
|
143
|
+
} | {
|
|
144
|
+
Video: A2uiVideo;
|
|
145
|
+
} | {
|
|
146
|
+
AudioPlayer: A2uiAudioPlayer;
|
|
147
|
+
} | {
|
|
148
|
+
Row: A2uiRow;
|
|
149
|
+
} | {
|
|
150
|
+
Column: A2uiColumn;
|
|
151
|
+
} | {
|
|
152
|
+
List: A2uiList;
|
|
153
|
+
} | {
|
|
154
|
+
Card: A2uiCard;
|
|
155
|
+
} | {
|
|
156
|
+
Tabs: A2uiTabs;
|
|
157
|
+
} | {
|
|
158
|
+
Divider: A2uiDivider;
|
|
159
|
+
} | {
|
|
160
|
+
Modal: A2uiModal;
|
|
161
|
+
} | {
|
|
162
|
+
Button: A2uiButton;
|
|
163
|
+
} | {
|
|
164
|
+
CheckBox: A2uiCheckBox;
|
|
165
|
+
} | {
|
|
166
|
+
TextField: A2uiTextField;
|
|
167
|
+
} | {
|
|
168
|
+
DateTimeInput: A2uiDateTimeInput;
|
|
169
|
+
} | {
|
|
170
|
+
MultipleChoice: A2uiMultipleChoice;
|
|
171
|
+
} | {
|
|
172
|
+
Slider: A2uiSlider;
|
|
173
|
+
};
|
|
174
|
+
export interface A2uiComponent {
|
|
175
|
+
id: string;
|
|
176
|
+
weight?: number;
|
|
177
|
+
component: A2uiComponentDef;
|
|
178
|
+
}
|
|
179
|
+
export interface A2uiSurfaceUpdate {
|
|
180
|
+
surfaceId: string;
|
|
181
|
+
components: A2uiComponent[];
|
|
182
|
+
}
|
|
183
|
+
export interface A2uiDataModelEntry {
|
|
184
|
+
key: string;
|
|
185
|
+
valueString?: string;
|
|
186
|
+
valueNumber?: number;
|
|
187
|
+
valueBoolean?: boolean;
|
|
188
|
+
valueMap?: A2uiDataModelEntry[];
|
|
189
|
+
}
|
|
190
|
+
export interface A2uiDataModelUpdate {
|
|
191
|
+
surfaceId: string;
|
|
192
|
+
path?: string;
|
|
193
|
+
contents: A2uiDataModelEntry[];
|
|
194
|
+
}
|
|
195
|
+
export interface A2uiBeginRendering {
|
|
196
|
+
surfaceId: string;
|
|
197
|
+
root: string;
|
|
198
|
+
styles?: {
|
|
199
|
+
font?: string;
|
|
200
|
+
primaryColor?: string;
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export interface A2uiDeleteSurface {
|
|
204
|
+
surfaceId: string;
|
|
205
|
+
}
|
|
206
|
+
export type A2uiMessage = {
|
|
207
|
+
surfaceUpdate: A2uiSurfaceUpdate;
|
|
208
|
+
} | {
|
|
209
|
+
dataModelUpdate: A2uiDataModelUpdate;
|
|
210
|
+
} | {
|
|
211
|
+
beginRendering: A2uiBeginRendering;
|
|
212
|
+
} | {
|
|
213
|
+
deleteSurface: A2uiDeleteSurface;
|
|
214
|
+
};
|
|
215
|
+
export interface A2uiSurface {
|
|
216
|
+
surfaceId: string;
|
|
217
|
+
catalogId: string;
|
|
218
|
+
theme?: A2uiTheme;
|
|
219
|
+
sendDataModel?: boolean;
|
|
220
|
+
components: Map<string, A2uiComponent>;
|
|
221
|
+
dataModel: Record<string, unknown>;
|
|
222
|
+
/** Styles set by the agent via `beginRendering.styles`. The
|
|
223
|
+
* canonical v1 spec defines exactly two fields: `font` (primary
|
|
224
|
+
* font for the UI) and `primaryColor` (hex `#RRGGBB`). The renderer
|
|
225
|
+
* applies these as CSS custom properties on the surface root,
|
|
226
|
+
* overriding any consumer-set defaults for the duration of the
|
|
227
|
+
* surface's life. Anything richer (typography scale, spacing,
|
|
228
|
+
* elevation, etc.) is the renderer's private vocabulary and not
|
|
229
|
+
* communicated through this field. */
|
|
230
|
+
styles?: {
|
|
231
|
+
font?: string;
|
|
232
|
+
primaryColor?: string;
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
export interface A2uiClientDataModel {
|
|
236
|
+
version: 'v1';
|
|
237
|
+
surfaces: Record<string, Record<string, unknown>>;
|
|
238
|
+
}
|
|
239
|
+
export interface A2uiActionMessage {
|
|
240
|
+
version: 'v1';
|
|
241
|
+
action: {
|
|
242
|
+
name: string;
|
|
243
|
+
surfaceId: string;
|
|
244
|
+
sourceComponentId: string;
|
|
245
|
+
timestamp: string;
|
|
246
|
+
context: Record<string, unknown>;
|
|
247
|
+
/**
|
|
248
|
+
* Optional human-friendly label for the action — typically derived
|
|
249
|
+
* from the source component's authored text (e.g. a Button's child
|
|
250
|
+
* Text literalString). Set by `buildA2uiActionMessage` when the
|
|
251
|
+
* source is a Button-with-Text-child; left undefined otherwise.
|
|
252
|
+
* Used by the chat-lib's transcript renderer to label the user
|
|
253
|
+
* bubble; backends may ignore. See spec
|
|
254
|
+
* 2026-05-19-llm-generated-labels-design.md.
|
|
255
|
+
*/
|
|
256
|
+
label?: string;
|
|
257
|
+
};
|
|
258
|
+
metadata?: {
|
|
259
|
+
a2uiClientDataModel: A2uiClientDataModel;
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,MAAM,aAAa,GACrB;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,cAAc,GACtB;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,iBAAiB,GACzB;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAIrB,MAAM,MAAM,YAAY,GACpB;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1B;IAAE,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAI/D,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;CACvD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;CACnE;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACnD,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,GAAG,cAAc,CAAC;CAC9E;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;CACvC;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,WAAW,EAAE,eAAe,CAAA;CAAE,GAChC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAChB;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,GACxB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC1B;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAC5B;IAAE,aAAa,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,cAAc,EAAE,kBAAkB,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,aAAa,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,eAAe,EAAE,mBAAmB,CAAA;CAAE,GACxC;IAAE,cAAc,EAAE,kBAAkB,CAAA;CAAE,GACtC;IAAE,aAAa,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAIzC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;;;;;0CAOsC;IACtC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAID,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC;;;;;;;;WAQG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,mBAAmB,CAAC;KAC1C,CAAC;CACH"}
|
package/src/lib/types.js
ADDED