@assistant-ui/react-generative-ui 0.0.19 → 0.0.21
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/JSONGenerativeUI.client.d.ts +14 -15
- package/dist/JSONGenerativeUI.client.d.ts.map +1 -1
- package/dist/JSONGenerativeUI.client.js +28 -8
- package/dist/JSONGenerativeUI.client.js.map +1 -1
- package/dist/JSONGenerativeUI.server.d.ts +5 -7
- package/dist/JSONGenerativeUI.server.d.ts.map +1 -1
- package/dist/JSONGenerativeUI.shared.d.ts +35 -36
- package/dist/JSONGenerativeUI.shared.d.ts.map +1 -1
- package/dist/a2ui/convert.d.ts +7 -7
- package/dist/a2ui/convert.d.ts.map +1 -1
- package/dist/a2ui/convert.js +148 -28
- package/dist/a2ui/convert.js.map +1 -1
- package/dist/a2ui/reducer.d.ts +1 -3
- package/dist/a2ui/reducer.d.ts.map +1 -1
- package/dist/a2ui/reducer.js +8 -0
- package/dist/a2ui/reducer.js.map +1 -1
- package/dist/a2ui/snapshot.d.ts +3 -0
- package/dist/a2ui/snapshot.d.ts.map +1 -0
- package/dist/a2ui/snapshot.js +33 -0
- package/dist/a2ui/snapshot.js.map +1 -0
- package/dist/a2ui/types.d.ts +50 -40
- package/dist/a2ui/types.d.ts.map +1 -1
- package/dist/a2ui/types.js.map +1 -1
- package/dist/a2ui.d.ts +5 -4
- package/dist/a2ui.d.ts.map +1 -0
- package/dist/a2ui.js +2 -1
- package/dist/actionRegistry.d.ts +12 -14
- package/dist/actionRegistry.d.ts.map +1 -1
- package/dist/actionRegistry.js.map +1 -1
- package/dist/buildPresentParameters.d.ts +2 -4
- package/dist/buildPresentParameters.d.ts.map +1 -1
- package/dist/buildPresentParameters.js +16 -4
- package/dist/buildPresentParameters.js.map +1 -1
- package/dist/constants.d.ts +0 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/convert/boundSpec.d.ts +0 -2
- package/dist/convert/boundSpec.d.ts.map +1 -1
- package/dist/convert/copyBounded.d.ts +2 -4
- package/dist/convert/copyBounded.d.ts.map +1 -1
- package/dist/convert/isElement.d.ts +1 -3
- package/dist/convert/isElement.d.ts.map +1 -1
- package/dist/convert/takeRun.d.ts +3 -5
- package/dist/convert/takeRun.d.ts.map +1 -1
- package/dist/defineGenerativeComponents.d.ts +1 -3
- package/dist/defineGenerativeComponents.d.ts.map +1 -1
- package/dist/generativeUIToJSX.d.ts +4 -6
- package/dist/generativeUIToJSX.d.ts.map +1 -1
- package/dist/index.d.ts +3 -13
- package/dist/index.d.ts.map +1 -0
- package/dist/index.server.d.ts +3 -13
- package/dist/index.server.d.ts.map +1 -0
- package/dist/index.shared.d.ts +15 -11
- package/dist/index.shared.d.ts.map +1 -0
- package/dist/ir.d.ts +17 -19
- package/dist/ir.d.ts.map +1 -1
- package/dist/renderGenerativeUI.d.ts +2 -4
- package/dist/renderGenerativeUI.d.ts.map +1 -1
- package/dist/scopeSchema.d.ts +6 -0
- package/dist/scopeSchema.d.ts.map +1 -0
- package/dist/scopeSchema.js +56 -0
- package/dist/scopeSchema.js.map +1 -0
- package/dist/slack/constants.d.ts +8 -9
- package/dist/slack/constants.d.ts.map +1 -1
- package/dist/slack/decodeBlockAction.d.ts +1 -3
- package/dist/slack/decodeBlockAction.d.ts.map +1 -1
- package/dist/slack/fromSlackBlocks.d.ts +1 -3
- package/dist/slack/fromSlackBlocks.d.ts.map +1 -1
- package/dist/slack/toSlackBlocks.d.ts +1 -3
- package/dist/slack/toSlackBlocks.d.ts.map +1 -1
- package/dist/slack/toSlackBlocks.js +1 -1
- package/dist/slack/types.d.ts +78 -80
- package/dist/slack/types.d.ts.map +1 -1
- package/dist/slack.d.ts +5 -5
- package/dist/slack.d.ts.map +1 -0
- package/dist/teams/constants.d.ts +1 -3
- package/dist/teams/constants.d.ts.map +1 -1
- package/dist/teams/decodeSubmitData.d.ts +1 -3
- package/dist/teams/decodeSubmitData.d.ts.map +1 -1
- package/dist/teams/toAdaptiveCard.d.ts +4 -6
- package/dist/teams/toAdaptiveCard.d.ts.map +1 -1
- package/dist/teams/toTeamsAttachments.d.ts +1 -3
- package/dist/teams/toTeamsAttachments.d.ts.map +1 -1
- package/dist/teams/types.d.ts +108 -109
- package/dist/teams/types.d.ts.map +1 -1
- package/dist/teams.d.ts +5 -5
- package/dist/teams.d.ts.map +1 -0
- package/dist/types.d.ts +36 -37
- package/dist/types.d.ts.map +1 -1
- package/dist/vocabulary/alert.d.ts +21 -23
- package/dist/vocabulary/alert.d.ts.map +1 -1
- package/dist/vocabulary/collectFormValues.d.ts +8 -10
- package/dist/vocabulary/collectFormValues.d.ts.map +1 -1
- package/dist/vocabulary/data.d.ts +45 -47
- package/dist/vocabulary/data.d.ts.map +1 -1
- package/dist/vocabulary/dispatch.d.ts +2 -4
- package/dist/vocabulary/dispatch.d.ts.map +1 -1
- package/dist/vocabulary/fact.d.ts +8 -10
- package/dist/vocabulary/fact.d.ts.map +1 -1
- package/dist/vocabulary/form.d.ts +7 -9
- package/dist/vocabulary/form.d.ts.map +1 -1
- package/dist/vocabulary/icon.d.ts +37 -39
- package/dist/vocabulary/icon.d.ts.map +1 -1
- package/dist/vocabulary/index.d.ts +1 -3
- package/dist/vocabulary/index.d.ts.map +1 -1
- package/dist/vocabulary/interactive.d.ts +87 -86
- package/dist/vocabulary/interactive.d.ts.map +1 -1
- package/dist/vocabulary/interactive.js +4 -4
- package/dist/vocabulary/interactive.js.map +1 -1
- package/dist/vocabulary/layout.d.ts +75 -77
- package/dist/vocabulary/layout.d.ts.map +1 -1
- package/dist/vocabulary/list.d.ts +10 -12
- package/dist/vocabulary/list.d.ts.map +1 -1
- package/dist/vocabulary/media.d.ts +21 -23
- package/dist/vocabulary/media.d.ts.map +1 -1
- package/dist/vocabulary/text.d.ts +53 -55
- package/dist/vocabulary/text.d.ts.map +1 -1
- package/dist/vocabulary/toTextContent.d.ts +0 -2
- package/dist/vocabulary/toTextContent.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/JSONGenerativeUI.client.tsx +57 -15
- package/src/JSONGenerativeUI.test.tsx +298 -4
- package/src/a2ui/convert.test.ts +717 -0
- package/src/a2ui/convert.ts +229 -41
- package/src/a2ui/reducer.test.ts +18 -0
- package/src/a2ui/reducer.ts +16 -0
- package/src/a2ui/snapshot.test.ts +52 -0
- package/src/a2ui/snapshot.ts +52 -0
- package/src/a2ui/types.ts +16 -0
- package/src/a2ui.ts +2 -0
- package/src/actionRegistry.ts +5 -5
- package/src/buildPresentParameters.test.ts +246 -0
- package/src/buildPresentParameters.ts +18 -3
- package/src/scopeSchema.test.ts +72 -0
- package/src/scopeSchema.ts +71 -0
- package/src/vocabulary/interactive.dispatch.test.tsx +17 -3
- package/src/vocabulary/interactive.test.tsx +19 -0
- package/src/vocabulary/interactive.tsx +4 -1
|
@@ -1,51 +1,49 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/vocabulary/data.d.ts
|
|
3
2
|
export declare const dataVocabulary: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
3
|
+
Table: {
|
|
4
|
+
description: string;
|
|
5
|
+
properties: z.ZodObject<{
|
|
6
|
+
columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
7
|
+
label: z.ZodString;
|
|
8
|
+
}, z.core.$strip>>>;
|
|
9
|
+
rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
render: ({ columns, rows, children }: any) => import("react").JSX.Element;
|
|
12
|
+
};
|
|
13
|
+
Markdown: {
|
|
14
|
+
description: string;
|
|
15
|
+
properties: z.ZodObject<{
|
|
16
|
+
value: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
streamProperties: true;
|
|
19
|
+
render: ({ value, children }: any) => import("react").JSX.Element;
|
|
20
|
+
};
|
|
21
|
+
Chart: {
|
|
22
|
+
description: string;
|
|
23
|
+
properties: z.ZodObject<{
|
|
24
|
+
variant: z.ZodEnum<{
|
|
25
|
+
bar: "bar";
|
|
26
|
+
line: "line";
|
|
27
|
+
sparkline: "sparkline";
|
|
28
|
+
area: "area";
|
|
29
|
+
}>;
|
|
30
|
+
data: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
31
|
+
label: z.ZodOptional<z.ZodString>;
|
|
32
|
+
value: z.ZodNumber;
|
|
33
|
+
}, z.core.$strip>>>;
|
|
34
|
+
series: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
35
|
+
label: z.ZodOptional<z.ZodString>;
|
|
36
|
+
data: z.ZodArray<z.ZodObject<{
|
|
37
|
+
label: z.ZodOptional<z.ZodString>;
|
|
38
|
+
value: z.ZodNumber;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
}, z.core.$strip>>>;
|
|
41
|
+
stacked: z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
showAxis: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
showLegend: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
color: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
render: ({ variant, data, series, stacked, showAxis, showLegend, color, }: any) => import("react").JSX.Element;
|
|
47
|
+
};
|
|
49
48
|
};
|
|
50
|
-
//#endregion
|
|
51
49
|
//# sourceMappingURL=data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/vocabulary/data.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmSxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqOI,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { Action } from "../ir.js";
|
|
2
|
-
import { GenerativeUIDispatch } from "../types.js";
|
|
3
|
-
//#region src/vocabulary/dispatch.d.ts
|
|
1
|
+
import type { Action } from "../ir.js";
|
|
2
|
+
import type { GenerativeUIDispatch } from "../types.js";
|
|
4
3
|
export declare const actionAttr: (a: Action | undefined) => string | undefined;
|
|
5
4
|
/**
|
|
6
5
|
* Fires `$action` through `$dispatch` when both are present, merging a runtime value into the payload under the reserved `$input` key (not `value`) so the user's input never clobbers a model-supplied `value` field. No-op when no registry is wired. The returned promise from an async handler is caught and re-thrown on a microtask so rejections surface rather than going unhandled.
|
|
7
6
|
*/
|
|
8
7
|
export declare const fire: ($action: Action | undefined, $dispatch: GenerativeUIDispatch | undefined, input?: unknown) => void;
|
|
9
|
-
//#endregion
|
|
10
8
|
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/vocabulary/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAc;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAiB;AAErD,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SACzB,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,GAAG,SAAS,EAC3B,WAAW,oBAAoB,GAAG,SAAS,EAC3C,QAAQ,OAAO,SAShB,CAAC"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/vocabulary/fact.d.ts
|
|
3
2
|
export declare const factVocabulary: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
Fact: {
|
|
4
|
+
description: string;
|
|
5
|
+
properties: z.ZodObject<{
|
|
6
|
+
label: z.ZodString;
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
render: ({ label, value, children }: any) => import("react").JSX.Element;
|
|
10
|
+
};
|
|
12
11
|
};
|
|
13
|
-
//#endregion
|
|
14
12
|
//# sourceMappingURL=fact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact.d.ts","
|
|
1
|
+
{"version":3,"file":"fact.d.ts","sourceRoot":"","sources":["../../src/vocabulary/fact.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;CAkBI,CAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/vocabulary/form.d.ts
|
|
3
2
|
export declare const formVocabulary: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
Form: {
|
|
4
|
+
description: string;
|
|
5
|
+
properties: z.ZodObject<{
|
|
6
|
+
gap: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
render: ({ gap, $action, $dispatch, children }: any) => import("react").JSX.Element;
|
|
9
|
+
};
|
|
11
10
|
};
|
|
12
|
-
//#endregion
|
|
13
11
|
//# sourceMappingURL=form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/vocabulary/form.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;CA4BI,CAAC"}
|
|
@@ -1,43 +1,41 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/vocabulary/icon.d.ts
|
|
3
2
|
export declare const iconVocabulary: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
3
|
+
Icon: {
|
|
4
|
+
description: string;
|
|
5
|
+
properties: z.ZodObject<{
|
|
6
|
+
name: z.ZodEnum<{
|
|
7
|
+
sun: "sun";
|
|
8
|
+
moon: "moon";
|
|
9
|
+
cloud: "cloud";
|
|
10
|
+
rain: "rain";
|
|
11
|
+
snow: "snow";
|
|
12
|
+
wind: "wind";
|
|
13
|
+
play: "play";
|
|
14
|
+
pause: "pause";
|
|
15
|
+
check: "check";
|
|
16
|
+
x: "x";
|
|
17
|
+
star: "star";
|
|
18
|
+
heart: "heart";
|
|
19
|
+
"arrow-right": "arrow-right";
|
|
20
|
+
"arrow-up-right": "arrow-up-right";
|
|
21
|
+
"chevron-right": "chevron-right";
|
|
22
|
+
calendar: "calendar";
|
|
23
|
+
clock: "clock";
|
|
24
|
+
"map-pin": "map-pin";
|
|
25
|
+
plane: "plane";
|
|
26
|
+
truck: "truck";
|
|
27
|
+
"credit-card": "credit-card";
|
|
28
|
+
user: "user";
|
|
29
|
+
search: "search";
|
|
30
|
+
bell: "bell";
|
|
31
|
+
}>;
|
|
32
|
+
size: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
sm: "sm";
|
|
34
|
+
md: "md";
|
|
35
|
+
lg: "lg";
|
|
36
|
+
}>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
render: ({ name, size }: any) => import("react").JSX.Element | null;
|
|
39
|
+
};
|
|
41
40
|
};
|
|
42
|
-
//#endregion
|
|
43
41
|
//# sourceMappingURL=icon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.d.ts","
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../src/vocabulary/icon.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwIxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCI,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { GenerativeUILibrary } from "../types.js";
|
|
2
|
-
//#region src/vocabulary/index.d.ts
|
|
1
|
+
import type { GenerativeUILibrary } from "../types.js";
|
|
3
2
|
/**
|
|
4
3
|
* The closed generative-ui vocabulary the factory ships: a fixed set of
|
|
5
4
|
* intrinsic components the model may render, each a zod `properties` schema
|
|
@@ -10,5 +9,4 @@ import { GenerativeUILibrary } from "../types.js";
|
|
|
10
9
|
* or extend entries with their own `defineGenerativeComponents`.
|
|
11
10
|
*/
|
|
12
11
|
export declare const defaultGenerativeUILibrary: GenerativeUILibrary;
|
|
13
|
-
//#endregion
|
|
14
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vocabulary/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAiB;AAYpD;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,mBAWxC,CAAC"}
|
|
@@ -1,94 +1,95 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GenerativeUIDispatch, GenerativeUIStatus } from "../types.js";
|
|
1
|
+
import { type ReactNode } from "react";
|
|
3
2
|
import { z } from "zod";
|
|
4
|
-
|
|
3
|
+
import type { Action } from "../ir.js";
|
|
4
|
+
import type { GenerativeUIDispatch, GenerativeUIStatus } from "../types.js";
|
|
5
5
|
type Option = {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
label: string;
|
|
7
|
+
value: string;
|
|
8
8
|
};
|
|
9
9
|
type RadioGroupRenderProps = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
options: Option[];
|
|
11
|
+
name?: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
defaultValue?: string;
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
$status: GenerativeUIStatus;
|
|
16
|
+
$action?: Action;
|
|
17
|
+
$dispatch?: GenerativeUIDispatch;
|
|
17
18
|
};
|
|
18
|
-
declare function RadioGroupRender({ options, name, label, defaultValue, $action, $dispatch }: RadioGroupRenderProps): import("react").JSX.Element;
|
|
19
|
+
declare function RadioGroupRender({ options, name, label, defaultValue, children, $action, $dispatch, }: RadioGroupRenderProps): import("react").JSX.Element;
|
|
19
20
|
export declare const interactiveVocabulary: {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
21
|
+
Button: {
|
|
22
|
+
description: string;
|
|
23
|
+
properties: z.ZodObject<{
|
|
24
|
+
label: z.ZodString;
|
|
25
|
+
buttonStyle: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
secondary: "secondary";
|
|
27
|
+
primary: "primary";
|
|
28
|
+
outline: "outline";
|
|
29
|
+
ghost: "ghost";
|
|
30
|
+
danger: "danger";
|
|
31
|
+
}>>;
|
|
32
|
+
block: z.ZodOptional<z.ZodBoolean>;
|
|
33
|
+
submit: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
render: ({ label, buttonStyle, block, submit, $action, $dispatch, children, }: any) => import("react").JSX.Element;
|
|
36
|
+
};
|
|
37
|
+
Select: {
|
|
38
|
+
description: string;
|
|
39
|
+
properties: z.ZodObject<{
|
|
40
|
+
options: z.ZodArray<z.ZodObject<{
|
|
41
|
+
label: z.ZodString;
|
|
42
|
+
value: z.ZodString;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
45
|
+
label: z.ZodOptional<z.ZodString>;
|
|
46
|
+
name: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
render: ({ options, placeholder, label, name, $action, $dispatch, children, }: any) => import("react").JSX.Element;
|
|
49
|
+
};
|
|
50
|
+
Input: {
|
|
51
|
+
description: string;
|
|
52
|
+
properties: z.ZodObject<{
|
|
53
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
54
|
+
multiline: z.ZodOptional<z.ZodBoolean>;
|
|
55
|
+
label: z.ZodOptional<z.ZodString>;
|
|
56
|
+
name: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
render: ({ placeholder, multiline, label, name, $action, $dispatch }: any) => import("react").JSX.Element;
|
|
59
|
+
};
|
|
60
|
+
DatePicker: {
|
|
61
|
+
description: string;
|
|
62
|
+
properties: z.ZodObject<{
|
|
63
|
+
value: z.ZodOptional<z.ZodString>;
|
|
64
|
+
min: z.ZodOptional<z.ZodString>;
|
|
65
|
+
max: z.ZodOptional<z.ZodString>;
|
|
66
|
+
label: z.ZodOptional<z.ZodString>;
|
|
67
|
+
name: z.ZodOptional<z.ZodString>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
render: ({ value, min, max, label, name, $action, $dispatch }: any) => import("react").JSX.Element;
|
|
70
|
+
};
|
|
71
|
+
Checkbox: {
|
|
72
|
+
description: string;
|
|
73
|
+
properties: z.ZodObject<{
|
|
74
|
+
label: z.ZodString;
|
|
75
|
+
name: z.ZodOptional<z.ZodString>;
|
|
76
|
+
defaultChecked: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
render: ({ label, name, defaultChecked, $action, $dispatch }: any) => import("react").JSX.Element;
|
|
79
|
+
};
|
|
80
|
+
RadioGroup: {
|
|
81
|
+
description: string;
|
|
82
|
+
properties: z.ZodObject<{
|
|
83
|
+
options: z.ZodArray<z.ZodObject<{
|
|
84
|
+
label: z.ZodString;
|
|
85
|
+
value: z.ZodString;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
name: z.ZodOptional<z.ZodString>;
|
|
88
|
+
label: z.ZodOptional<z.ZodString>;
|
|
89
|
+
defaultValue: z.ZodOptional<z.ZodString>;
|
|
90
|
+
}, z.core.$strip>;
|
|
91
|
+
render: typeof RadioGroupRender;
|
|
92
|
+
};
|
|
92
93
|
};
|
|
93
|
-
|
|
94
|
+
export {};
|
|
94
95
|
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/vocabulary/interactive.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAc;AAEpC,OAAO,KAAK,EACV,oBAAoB,EAEpB,kBAAkB,EACnB,oBAAiB;AASlB,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAU/C,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC,CAAC;AAEF,iBAAS,gBAAgB,CAAC,EACxB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE,qBAAqB,+BA4BvB;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuNH,CAAC"}
|
|
@@ -11,15 +11,15 @@ const optionSchema = z.object({
|
|
|
11
11
|
value: z.string()
|
|
12
12
|
});
|
|
13
13
|
const isOption = (option) => option !== null && typeof option === "object" && "label" in option && typeof option.label === "string" && "value" in option && typeof option.value === "string";
|
|
14
|
-
function RadioGroupRender({ options, name, label, defaultValue, $action, $dispatch }) {
|
|
14
|
+
function RadioGroupRender({ options, name, label, defaultValue, children, $action, $dispatch }) {
|
|
15
15
|
const generatedName = useId();
|
|
16
16
|
const fieldName = name ?? generatedName;
|
|
17
17
|
const safeOptions = Array.isArray(options) ? options : [];
|
|
18
|
-
return /* @__PURE__ */
|
|
18
|
+
return /* @__PURE__ */ jsxs("fieldset", {
|
|
19
19
|
"data-aui": "radiogroup",
|
|
20
20
|
"data-aui-action": actionAttr($action),
|
|
21
21
|
"aria-label": label,
|
|
22
|
-
children: safeOptions.map((option, i) => isOption(option) ? /* @__PURE__ */ jsxs("label", {
|
|
22
|
+
children: [safeOptions.map((option, i) => isOption(option) ? /* @__PURE__ */ jsxs("label", {
|
|
23
23
|
"data-aui": "radiogroup-option",
|
|
24
24
|
children: [/* @__PURE__ */ jsx("input", {
|
|
25
25
|
type: "radio",
|
|
@@ -29,7 +29,7 @@ function RadioGroupRender({ options, name, label, defaultValue, $action, $dispat
|
|
|
29
29
|
defaultChecked: defaultValue === option.value,
|
|
30
30
|
onChange: () => fire($action, $dispatch, option.value)
|
|
31
31
|
}), option.label]
|
|
32
|
-
}, i) : null)
|
|
32
|
+
}, i) : null), children]
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
const interactiveVocabulary = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","names":[],"sources":["../../src/vocabulary/interactive.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { z } from \"zod\";\nimport { GENERATED_NAME_ATTR } from \"../constants\";\nimport type { Action } from \"../ir\";\nimport { BUTTON_STYLES } from \"../ir\";\nimport type {\n GenerativeUIDispatch,\n GenerativeUILibrary,\n GenerativeUIStatus,\n} from \"../types\";\nimport { actionAttr, fire } from \"./dispatch\";\nimport { toTextContent } from \"./toTextContent\";\n\nconst optionSchema = z.object({\n label: z.string(),\n value: z.string(),\n});\n\ntype Option = { label: string; value: string };\n\nconst isOption = (option: unknown): option is Option =>\n option !== null &&\n typeof option === \"object\" &&\n \"label\" in option &&\n typeof option.label === \"string\" &&\n \"value\" in option &&\n typeof option.value === \"string\";\n\ntype RadioGroupRenderProps = {\n options: Option[];\n name?: string;\n label?: string;\n defaultValue?: string;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction RadioGroupRender({\n options,\n name,\n label,\n defaultValue,\n $action,\n $dispatch,\n}: RadioGroupRenderProps) {\n const generatedName = useId();\n const fieldName = name ?? generatedName;\n const safeOptions = Array.isArray(options) ? options : [];\n return (\n <fieldset\n data-aui=\"radiogroup\"\n data-aui-action={actionAttr($action)}\n aria-label={label}\n >\n {safeOptions.map((option, i) =>\n isOption(option) ? (\n <label key={i} data-aui=\"radiogroup-option\">\n <input\n type=\"radio\"\n name={fieldName}\n {...(name == null ? { [GENERATED_NAME_ATTR]: \"\" } : {})}\n value={option.value}\n defaultChecked={defaultValue === option.value}\n onChange={() => fire($action, $dispatch, option.value)}\n />\n {option.label}\n </label>\n ) : null,\n )}\n </fieldset>\n );\n}\n\nexport const interactiveVocabulary = {\n Button: {\n description:\n \"A clickable button. Carries `$action` describing the side effect or resume value. Set `submit` to submit an ancestor Form/Card instead of firing `$action` on click.\",\n properties: z.object({\n label: z.string().describe(\"Button label.\"),\n buttonStyle: z.enum(BUTTON_STYLES).optional().describe(\"Visual style.\"),\n block: z\n .boolean()\n .optional()\n .describe(\"Whether the button spans the full width.\"),\n submit: z\n .boolean()\n .optional()\n .describe(\n \"Render as a submit button for an ancestor Form/Card instead of a click button.\",\n ),\n }),\n render: ({\n label,\n buttonStyle,\n block,\n submit,\n $action,\n $dispatch,\n children,\n }) => (\n <button\n type={submit ? \"submit\" : \"button\"}\n data-aui=\"button\"\n data-aui-style={buttonStyle}\n data-aui-block={block || undefined}\n data-aui-submit={submit || undefined}\n data-aui-action={actionAttr($action)}\n onClick={submit ? undefined : () => fire($action, $dispatch)}\n >\n {toTextContent(label)}\n {children}\n </button>\n ),\n },\n Select: {\n description:\n \"A dropdown selector. Carries `$action` describing the on-select behavior.\",\n properties: z.object({\n options: z.array(optionSchema).describe(\"Selectable options.\"),\n placeholder: z\n .string()\n .optional()\n .describe(\"Placeholder shown when nothing is selected.\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({\n options,\n placeholder,\n label,\n name,\n $action,\n $dispatch,\n children,\n }) => {\n const placeholderText = toTextContent(placeholder);\n return (\n <select\n data-aui=\"select\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n defaultValue=\"\"\n onChange={(e) => fire($action, $dispatch, e.currentTarget.value)}\n >\n {placeholderText ? (\n <option value=\"\" disabled>\n {placeholderText}\n </option>\n ) : null}\n {(Array.isArray(options) ? options : []).map((option, i) =>\n isOption(option) ? (\n <option key={i} value={option.value}>\n {option.label}\n </option>\n ) : null,\n )}\n {children}\n </select>\n );\n },\n },\n Input: {\n description:\n \"A text input. Carries `$action` describing the on-submit behavior.\",\n properties: z.object({\n placeholder: z.string().optional().describe(\"Placeholder text.\"),\n multiline: z\n .boolean()\n .optional()\n .describe(\"Render a textarea instead of a single-line input.\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({ placeholder, multiline, label, name, $action, $dispatch }) => {\n const submit = (v: string) => fire($action, $dispatch, v);\n return multiline ? (\n <textarea\n data-aui=\"input\"\n data-aui-multiline\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (\n e.key !== \"Enter\" ||\n !(e.ctrlKey || e.metaKey) ||\n e.nativeEvent.isComposing\n )\n return;\n if (e.currentTarget.form) {\n e.preventDefault();\n HTMLFormElement.prototype.requestSubmit.call(\n e.currentTarget.form,\n );\n } else {\n submit(e.currentTarget.value);\n }\n }}\n />\n ) : (\n <input\n data-aui=\"input\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (\n e.key === \"Enter\" &&\n !e.nativeEvent.isComposing &&\n !e.currentTarget.form\n )\n submit(e.currentTarget.value);\n }}\n />\n );\n },\n },\n DatePicker: {\n description:\n \"A date input. Carries `$action` describing the on-select behavior.\",\n properties: z.object({\n value: z.string().optional().describe(\"Initial date (YYYY-MM-DD).\"),\n min: z.string().optional().describe(\"Minimum date (YYYY-MM-DD).\"),\n max: z.string().optional().describe(\"Maximum date (YYYY-MM-DD).\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({ value, min, max, label, name, $action, $dispatch }) => (\n <input\n type=\"date\"\n data-aui=\"datepicker\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n defaultValue={value}\n min={min}\n max={max}\n onChange={(e) => fire($action, $dispatch, e.currentTarget.value)}\n />\n ),\n },\n Checkbox: {\n description:\n \"A checkbox with a label. Carries `$action` describing the on-change behavior.\",\n properties: z.object({\n label: z.string().describe(\"Label text next to the checkbox.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n defaultChecked: z\n .boolean()\n .optional()\n .describe(\"Whether the checkbox starts checked.\"),\n }),\n render: ({ label, name, defaultChecked, $action, $dispatch }) => (\n <label data-aui=\"checkbox\">\n <input\n type=\"checkbox\"\n data-aui-action={actionAttr($action)}\n name={name}\n defaultChecked={defaultChecked}\n onChange={(e) => fire($action, $dispatch, e.currentTarget.checked)}\n />\n <span data-aui=\"checkbox-label\">{toTextContent(label)}</span>\n </label>\n ),\n },\n RadioGroup: {\n description:\n \"A group of mutually exclusive radio options. Carries `$action` describing the on-change behavior.\",\n properties: z.object({\n options: z.array(optionSchema).describe(\"Selectable options.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n label: z.string().optional().describe(\"Accessible name for the group.\"),\n defaultValue: z.string().optional().describe(\"Initially selected value.\"),\n }),\n render: RadioGroupRender,\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interactive.js","names":[],"sources":["../../src/vocabulary/interactive.tsx"],"sourcesContent":["import { useId, type ReactNode } from \"react\";\nimport { z } from \"zod\";\nimport { GENERATED_NAME_ATTR } from \"../constants\";\nimport type { Action } from \"../ir\";\nimport { BUTTON_STYLES } from \"../ir\";\nimport type {\n GenerativeUIDispatch,\n GenerativeUILibrary,\n GenerativeUIStatus,\n} from \"../types\";\nimport { actionAttr, fire } from \"./dispatch\";\nimport { toTextContent } from \"./toTextContent\";\n\nconst optionSchema = z.object({\n label: z.string(),\n value: z.string(),\n});\n\ntype Option = { label: string; value: string };\n\nconst isOption = (option: unknown): option is Option =>\n option !== null &&\n typeof option === \"object\" &&\n \"label\" in option &&\n typeof option.label === \"string\" &&\n \"value\" in option &&\n typeof option.value === \"string\";\n\ntype RadioGroupRenderProps = {\n options: Option[];\n name?: string;\n label?: string;\n defaultValue?: string;\n children?: ReactNode;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction RadioGroupRender({\n options,\n name,\n label,\n defaultValue,\n children,\n $action,\n $dispatch,\n}: RadioGroupRenderProps) {\n const generatedName = useId();\n const fieldName = name ?? generatedName;\n const safeOptions = Array.isArray(options) ? options : [];\n return (\n <fieldset\n data-aui=\"radiogroup\"\n data-aui-action={actionAttr($action)}\n aria-label={label}\n >\n {safeOptions.map((option, i) =>\n isOption(option) ? (\n <label key={i} data-aui=\"radiogroup-option\">\n <input\n type=\"radio\"\n name={fieldName}\n {...(name == null ? { [GENERATED_NAME_ATTR]: \"\" } : {})}\n value={option.value}\n defaultChecked={defaultValue === option.value}\n onChange={() => fire($action, $dispatch, option.value)}\n />\n {option.label}\n </label>\n ) : null,\n )}\n {children}\n </fieldset>\n );\n}\n\nexport const interactiveVocabulary = {\n Button: {\n description:\n \"A clickable button. Carries `$action` describing the side effect or resume value. Set `submit` to submit an ancestor Form/Card instead of firing `$action` on click.\",\n properties: z.object({\n label: z.string().describe(\"Button label.\"),\n buttonStyle: z.enum(BUTTON_STYLES).optional().describe(\"Visual style.\"),\n block: z\n .boolean()\n .optional()\n .describe(\"Whether the button spans the full width.\"),\n submit: z\n .boolean()\n .optional()\n .describe(\n \"Render as a submit button for an ancestor Form/Card instead of a click button.\",\n ),\n }),\n render: ({\n label,\n buttonStyle,\n block,\n submit,\n $action,\n $dispatch,\n children,\n }) => (\n <button\n type={submit ? \"submit\" : \"button\"}\n data-aui=\"button\"\n data-aui-style={buttonStyle}\n data-aui-block={block || undefined}\n data-aui-submit={submit || undefined}\n data-aui-action={actionAttr($action)}\n onClick={submit ? undefined : () => fire($action, $dispatch)}\n >\n {toTextContent(label)}\n {children}\n </button>\n ),\n },\n Select: {\n description:\n \"A dropdown selector. Carries `$action` describing the on-select behavior.\",\n properties: z.object({\n options: z.array(optionSchema).describe(\"Selectable options.\"),\n placeholder: z\n .string()\n .optional()\n .describe(\"Placeholder shown when nothing is selected.\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({\n options,\n placeholder,\n label,\n name,\n $action,\n $dispatch,\n children,\n }) => {\n const placeholderText = toTextContent(placeholder);\n return (\n <select\n data-aui=\"select\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n defaultValue=\"\"\n onChange={(e) => fire($action, $dispatch, e.currentTarget.value)}\n >\n {placeholderText ? (\n <option value=\"\" disabled>\n {placeholderText}\n </option>\n ) : null}\n {(Array.isArray(options) ? options : []).map((option, i) =>\n isOption(option) ? (\n <option key={i} value={option.value}>\n {option.label}\n </option>\n ) : null,\n )}\n {children}\n </select>\n );\n },\n },\n Input: {\n description:\n \"A text input. Carries `$action` describing the on-submit behavior.\",\n properties: z.object({\n placeholder: z.string().optional().describe(\"Placeholder text.\"),\n multiline: z\n .boolean()\n .optional()\n .describe(\"Render a textarea instead of a single-line input.\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({ placeholder, multiline, label, name, $action, $dispatch }) => {\n const submit = (v: string) => fire($action, $dispatch, v);\n return multiline ? (\n <textarea\n data-aui=\"input\"\n data-aui-multiline\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (\n e.key !== \"Enter\" ||\n !(e.ctrlKey || e.metaKey) ||\n e.nativeEvent.isComposing\n )\n return;\n if (e.currentTarget.form) {\n e.preventDefault();\n HTMLFormElement.prototype.requestSubmit.call(\n e.currentTarget.form,\n );\n } else {\n submit(e.currentTarget.value);\n }\n }}\n />\n ) : (\n <input\n data-aui=\"input\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n placeholder={placeholder}\n onKeyDown={(e) => {\n if (\n e.key === \"Enter\" &&\n !e.nativeEvent.isComposing &&\n !e.currentTarget.form\n )\n submit(e.currentTarget.value);\n }}\n />\n );\n },\n },\n DatePicker: {\n description:\n \"A date input. Carries `$action` describing the on-select behavior.\",\n properties: z.object({\n value: z.string().optional().describe(\"Initial date (YYYY-MM-DD).\"),\n min: z.string().optional().describe(\"Minimum date (YYYY-MM-DD).\"),\n max: z.string().optional().describe(\"Maximum date (YYYY-MM-DD).\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n }),\n render: ({ value, min, max, label, name, $action, $dispatch }) => (\n <input\n type=\"date\"\n data-aui=\"datepicker\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n defaultValue={value}\n min={min}\n max={max}\n onChange={(e) => fire($action, $dispatch, e.currentTarget.value)}\n />\n ),\n },\n Checkbox: {\n description:\n \"A checkbox with a label. Carries `$action` describing the on-change behavior.\",\n properties: z.object({\n label: z.string().describe(\"Label text next to the checkbox.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n defaultChecked: z\n .boolean()\n .optional()\n .describe(\"Whether the checkbox starts checked.\"),\n }),\n render: ({ label, name, defaultChecked, $action, $dispatch }) => (\n <label data-aui=\"checkbox\">\n <input\n type=\"checkbox\"\n data-aui-action={actionAttr($action)}\n name={name}\n defaultChecked={defaultChecked}\n onChange={(e) => fire($action, $dispatch, e.currentTarget.checked)}\n />\n <span data-aui=\"checkbox-label\">{toTextContent(label)}</span>\n </label>\n ),\n },\n RadioGroup: {\n description:\n \"A group of mutually exclusive radio options. Carries `$action` describing the on-change behavior.\",\n properties: z.object({\n options: z.array(optionSchema).describe(\"Selectable options.\"),\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n label: z.string().optional().describe(\"Accessible name for the group.\"),\n defaultValue: z.string().optional().describe(\"Initially selected value.\"),\n }),\n render: RadioGroupRender,\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":"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"}
|