@assistant-ui/react-generative-ui 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/JSONGenerativeUI.client.d.ts +14 -15
  2. package/dist/JSONGenerativeUI.client.d.ts.map +1 -1
  3. package/dist/JSONGenerativeUI.client.js +28 -8
  4. package/dist/JSONGenerativeUI.client.js.map +1 -1
  5. package/dist/JSONGenerativeUI.server.d.ts +5 -7
  6. package/dist/JSONGenerativeUI.server.d.ts.map +1 -1
  7. package/dist/JSONGenerativeUI.shared.d.ts +35 -36
  8. package/dist/JSONGenerativeUI.shared.d.ts.map +1 -1
  9. package/dist/a2ui/convert.d.ts +7 -7
  10. package/dist/a2ui/convert.d.ts.map +1 -1
  11. package/dist/a2ui/convert.js +115 -16
  12. package/dist/a2ui/convert.js.map +1 -1
  13. package/dist/a2ui/reducer.d.ts +1 -3
  14. package/dist/a2ui/reducer.d.ts.map +1 -1
  15. package/dist/a2ui/reducer.js +8 -0
  16. package/dist/a2ui/reducer.js.map +1 -1
  17. package/dist/a2ui/snapshot.d.ts +3 -0
  18. package/dist/a2ui/snapshot.d.ts.map +1 -0
  19. package/dist/a2ui/snapshot.js +33 -0
  20. package/dist/a2ui/snapshot.js.map +1 -0
  21. package/dist/a2ui/types.d.ts +50 -40
  22. package/dist/a2ui/types.d.ts.map +1 -1
  23. package/dist/a2ui/types.js.map +1 -1
  24. package/dist/a2ui.d.ts +5 -4
  25. package/dist/a2ui.d.ts.map +1 -0
  26. package/dist/a2ui.js +2 -1
  27. package/dist/actionRegistry.d.ts +12 -14
  28. package/dist/actionRegistry.d.ts.map +1 -1
  29. package/dist/actionRegistry.js.map +1 -1
  30. package/dist/buildPresentParameters.d.ts +2 -4
  31. package/dist/buildPresentParameters.d.ts.map +1 -1
  32. package/dist/buildPresentParameters.js +16 -4
  33. package/dist/buildPresentParameters.js.map +1 -1
  34. package/dist/constants.d.ts +0 -2
  35. package/dist/constants.d.ts.map +1 -1
  36. package/dist/convert/boundSpec.d.ts +0 -2
  37. package/dist/convert/boundSpec.d.ts.map +1 -1
  38. package/dist/convert/copyBounded.d.ts +2 -4
  39. package/dist/convert/copyBounded.d.ts.map +1 -1
  40. package/dist/convert/isElement.d.ts +1 -3
  41. package/dist/convert/isElement.d.ts.map +1 -1
  42. package/dist/convert/takeRun.d.ts +3 -5
  43. package/dist/convert/takeRun.d.ts.map +1 -1
  44. package/dist/defineGenerativeComponents.d.ts +1 -3
  45. package/dist/defineGenerativeComponents.d.ts.map +1 -1
  46. package/dist/generativeUIToJSX.d.ts +4 -6
  47. package/dist/generativeUIToJSX.d.ts.map +1 -1
  48. package/dist/index.d.ts +3 -13
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.server.d.ts +3 -13
  51. package/dist/index.server.d.ts.map +1 -0
  52. package/dist/index.shared.d.ts +15 -11
  53. package/dist/index.shared.d.ts.map +1 -0
  54. package/dist/ir.d.ts +17 -19
  55. package/dist/ir.d.ts.map +1 -1
  56. package/dist/renderGenerativeUI.d.ts +2 -4
  57. package/dist/renderGenerativeUI.d.ts.map +1 -1
  58. package/dist/scopeSchema.d.ts +6 -0
  59. package/dist/scopeSchema.d.ts.map +1 -0
  60. package/dist/scopeSchema.js +56 -0
  61. package/dist/scopeSchema.js.map +1 -0
  62. package/dist/slack/constants.d.ts +8 -9
  63. package/dist/slack/constants.d.ts.map +1 -1
  64. package/dist/slack/decodeBlockAction.d.ts +1 -3
  65. package/dist/slack/decodeBlockAction.d.ts.map +1 -1
  66. package/dist/slack/fromSlackBlocks.d.ts +1 -3
  67. package/dist/slack/fromSlackBlocks.d.ts.map +1 -1
  68. package/dist/slack/toSlackBlocks.d.ts +1 -3
  69. package/dist/slack/toSlackBlocks.d.ts.map +1 -1
  70. package/dist/slack/toSlackBlocks.js +1 -1
  71. package/dist/slack/types.d.ts +78 -80
  72. package/dist/slack/types.d.ts.map +1 -1
  73. package/dist/slack.d.ts +5 -5
  74. package/dist/slack.d.ts.map +1 -0
  75. package/dist/teams/constants.d.ts +1 -3
  76. package/dist/teams/constants.d.ts.map +1 -1
  77. package/dist/teams/decodeSubmitData.d.ts +1 -3
  78. package/dist/teams/decodeSubmitData.d.ts.map +1 -1
  79. package/dist/teams/toAdaptiveCard.d.ts +4 -6
  80. package/dist/teams/toAdaptiveCard.d.ts.map +1 -1
  81. package/dist/teams/toTeamsAttachments.d.ts +1 -3
  82. package/dist/teams/toTeamsAttachments.d.ts.map +1 -1
  83. package/dist/teams/types.d.ts +108 -109
  84. package/dist/teams/types.d.ts.map +1 -1
  85. package/dist/teams.d.ts +5 -5
  86. package/dist/teams.d.ts.map +1 -0
  87. package/dist/types.d.ts +36 -37
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/vocabulary/alert.d.ts +21 -23
  90. package/dist/vocabulary/alert.d.ts.map +1 -1
  91. package/dist/vocabulary/collectFormValues.d.ts +8 -10
  92. package/dist/vocabulary/collectFormValues.d.ts.map +1 -1
  93. package/dist/vocabulary/data.d.ts +45 -47
  94. package/dist/vocabulary/data.d.ts.map +1 -1
  95. package/dist/vocabulary/dispatch.d.ts +2 -4
  96. package/dist/vocabulary/dispatch.d.ts.map +1 -1
  97. package/dist/vocabulary/fact.d.ts +8 -10
  98. package/dist/vocabulary/fact.d.ts.map +1 -1
  99. package/dist/vocabulary/form.d.ts +7 -9
  100. package/dist/vocabulary/form.d.ts.map +1 -1
  101. package/dist/vocabulary/icon.d.ts +37 -39
  102. package/dist/vocabulary/icon.d.ts.map +1 -1
  103. package/dist/vocabulary/index.d.ts +1 -3
  104. package/dist/vocabulary/index.d.ts.map +1 -1
  105. package/dist/vocabulary/interactive.d.ts +87 -86
  106. package/dist/vocabulary/interactive.d.ts.map +1 -1
  107. package/dist/vocabulary/interactive.js +4 -4
  108. package/dist/vocabulary/interactive.js.map +1 -1
  109. package/dist/vocabulary/layout.d.ts +75 -77
  110. package/dist/vocabulary/layout.d.ts.map +1 -1
  111. package/dist/vocabulary/list.d.ts +10 -12
  112. package/dist/vocabulary/list.d.ts.map +1 -1
  113. package/dist/vocabulary/media.d.ts +21 -23
  114. package/dist/vocabulary/media.d.ts.map +1 -1
  115. package/dist/vocabulary/text.d.ts +53 -55
  116. package/dist/vocabulary/text.d.ts.map +1 -1
  117. package/dist/vocabulary/toTextContent.d.ts +0 -2
  118. package/dist/vocabulary/toTextContent.d.ts.map +1 -1
  119. package/package.json +4 -4
  120. package/src/JSONGenerativeUI.client.tsx +57 -15
  121. package/src/JSONGenerativeUI.test.tsx +298 -4
  122. package/src/a2ui/convert.test.ts +496 -0
  123. package/src/a2ui/convert.ts +170 -25
  124. package/src/a2ui/reducer.test.ts +18 -0
  125. package/src/a2ui/reducer.ts +16 -0
  126. package/src/a2ui/snapshot.test.ts +52 -0
  127. package/src/a2ui/snapshot.ts +52 -0
  128. package/src/a2ui/types.ts +16 -0
  129. package/src/a2ui.ts +2 -0
  130. package/src/actionRegistry.ts +5 -5
  131. package/src/buildPresentParameters.test.ts +246 -0
  132. package/src/buildPresentParameters.ts +18 -3
  133. package/src/scopeSchema.test.ts +72 -0
  134. package/src/scopeSchema.ts +71 -0
  135. package/src/vocabulary/interactive.dispatch.test.tsx +17 -3
  136. package/src/vocabulary/interactive.test.tsx +19 -0
  137. 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
- Table: {
5
- description: string;
6
- properties: z.ZodObject<{
7
- columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
8
- label: z.ZodString;
9
- }, z.core.$strip>>>;
10
- rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>>;
11
- }, z.core.$strip>;
12
- render: ({ columns, rows, children }: any) => import("react").JSX.Element;
13
- };
14
- Markdown: {
15
- description: string;
16
- properties: z.ZodObject<{
17
- value: z.ZodString;
18
- }, z.core.$strip>;
19
- streamProperties: true;
20
- render: ({ value, children }: any) => import("react").JSX.Element;
21
- };
22
- Chart: {
23
- description: string;
24
- properties: z.ZodObject<{
25
- variant: z.ZodEnum<{
26
- bar: "bar";
27
- line: "line";
28
- sparkline: "sparkline";
29
- area: "area";
30
- }>;
31
- data: z.ZodOptional<z.ZodArray<z.ZodObject<{
32
- label: z.ZodOptional<z.ZodString>;
33
- value: z.ZodNumber;
34
- }, z.core.$strip>>>;
35
- series: z.ZodOptional<z.ZodArray<z.ZodObject<{
36
- label: z.ZodOptional<z.ZodString>;
37
- data: z.ZodArray<z.ZodObject<{
38
- label: z.ZodOptional<z.ZodString>;
39
- value: z.ZodNumber;
40
- }, z.core.$strip>>;
41
- }, z.core.$strip>>>;
42
- stacked: z.ZodOptional<z.ZodBoolean>;
43
- showAxis: z.ZodOptional<z.ZodBoolean>;
44
- showLegend: z.ZodOptional<z.ZodBoolean>;
45
- color: z.ZodOptional<z.ZodString>;
46
- }, z.core.$strip>;
47
- render: ({ variant, data, series, stacked, showAxis, showLegend, color }: any) => import("react").JSX.Element;
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","names":[],"sources":["../../src/vocabulary/data.tsx"],"mappings":";;qBAmSa"}
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","names":[],"sources":["../../src/vocabulary/dispatch.ts"],"mappings":";;;qBAGa,aAAc,GAAG;;;;qBAMjB,OACX,SAAS,oBACT,WAAW,kCACX"}
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
- Fact: {
5
- description: string;
6
- properties: z.ZodObject<{
7
- label: z.ZodString;
8
- value: z.ZodString;
9
- }, z.core.$strip>;
10
- render: ({ label, value, children }: any) => import("react").JSX.Element;
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","names":[],"sources":["../../src/vocabulary/fact.tsx"],"mappings":";;qBAIa"}
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
- Form: {
5
- description: string;
6
- properties: z.ZodObject<{
7
- gap: z.ZodOptional<z.ZodNumber>;
8
- }, z.core.$strip>;
9
- render: ({ gap, $action, $dispatch, children }: any) => import("react").JSX.Element;
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","names":[],"sources":["../../src/vocabulary/form.tsx"],"mappings":";;qBAKa"}
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
- Icon: {
5
- description: string;
6
- properties: z.ZodObject<{
7
- name: z.ZodEnum<{
8
- search: "search";
9
- check: "check";
10
- sun: "sun";
11
- moon: "moon";
12
- cloud: "cloud";
13
- rain: "rain";
14
- snow: "snow";
15
- wind: "wind";
16
- play: "play";
17
- pause: "pause";
18
- x: "x";
19
- star: "star";
20
- heart: "heart";
21
- "arrow-right": "arrow-right";
22
- "arrow-up-right": "arrow-up-right";
23
- "chevron-right": "chevron-right";
24
- calendar: "calendar";
25
- clock: "clock";
26
- "map-pin": "map-pin";
27
- plane: "plane";
28
- truck: "truck";
29
- "credit-card": "credit-card";
30
- user: "user";
31
- bell: "bell";
32
- }>;
33
- size: z.ZodOptional<z.ZodEnum<{
34
- sm: "sm";
35
- md: "md";
36
- lg: "lg";
37
- }>>;
38
- }, z.core.$strip>;
39
- render: ({ name, size }: any) => import("react").JSX.Element | null;
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","names":[],"sources":["../../src/vocabulary/icon.tsx"],"mappings":";;qBAyIa"}
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","names":[],"sources":["../../src/vocabulary/index.ts"],"mappings":";;;;;;;;;;;qBAqBa,4BAA4B"}
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 { Action } from "../ir.js";
2
- import { GenerativeUIDispatch, GenerativeUIStatus } from "../types.js";
1
+ import { type ReactNode } from "react";
3
2
  import { z } from "zod";
4
- //#region src/vocabulary/interactive.d.ts
3
+ import type { Action } from "../ir.js";
4
+ import type { GenerativeUIDispatch, GenerativeUIStatus } from "../types.js";
5
5
  type Option = {
6
- label: string;
7
- value: string;
6
+ label: string;
7
+ value: string;
8
8
  };
9
9
  type RadioGroupRenderProps = {
10
- options: Option[];
11
- name?: string;
12
- label?: string;
13
- defaultValue?: string;
14
- $status: GenerativeUIStatus;
15
- $action?: Action;
16
- $dispatch?: GenerativeUIDispatch;
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
- Button: {
21
- description: string;
22
- properties: z.ZodObject<{
23
- label: z.ZodString;
24
- buttonStyle: z.ZodOptional<z.ZodEnum<{
25
- danger: "danger";
26
- primary: "primary";
27
- secondary: "secondary";
28
- outline: "outline";
29
- ghost: "ghost";
30
- }>>;
31
- block: z.ZodOptional<z.ZodBoolean>;
32
- submit: z.ZodOptional<z.ZodBoolean>;
33
- }, z.core.$strip>;
34
- render: ({ label, buttonStyle, block, submit, $action, $dispatch, children }: any) => import("react").JSX.Element;
35
- };
36
- Select: {
37
- description: string;
38
- properties: z.ZodObject<{
39
- options: z.ZodArray<z.ZodObject<{
40
- label: z.ZodString;
41
- value: z.ZodString;
42
- }, z.core.$strip>>;
43
- placeholder: z.ZodOptional<z.ZodString>;
44
- label: z.ZodOptional<z.ZodString>;
45
- name: z.ZodOptional<z.ZodString>;
46
- }, z.core.$strip>;
47
- render: ({ options, placeholder, label, name, $action, $dispatch, children }: any) => import("react").JSX.Element;
48
- };
49
- Input: {
50
- description: string;
51
- properties: z.ZodObject<{
52
- placeholder: z.ZodOptional<z.ZodString>;
53
- multiline: z.ZodOptional<z.ZodBoolean>;
54
- label: z.ZodOptional<z.ZodString>;
55
- name: z.ZodOptional<z.ZodString>;
56
- }, z.core.$strip>;
57
- render: ({ placeholder, multiline, label, name, $action, $dispatch }: any) => import("react").JSX.Element;
58
- };
59
- DatePicker: {
60
- description: string;
61
- properties: z.ZodObject<{
62
- value: z.ZodOptional<z.ZodString>;
63
- min: z.ZodOptional<z.ZodString>;
64
- max: z.ZodOptional<z.ZodString>;
65
- label: z.ZodOptional<z.ZodString>;
66
- name: z.ZodOptional<z.ZodString>;
67
- }, z.core.$strip>;
68
- render: ({ value, min, max, label, name, $action, $dispatch }: any) => import("react").JSX.Element;
69
- };
70
- Checkbox: {
71
- description: string;
72
- properties: z.ZodObject<{
73
- label: z.ZodString;
74
- name: z.ZodOptional<z.ZodString>;
75
- defaultChecked: z.ZodOptional<z.ZodBoolean>;
76
- }, z.core.$strip>;
77
- render: ({ label, name, defaultChecked, $action, $dispatch }: any) => import("react").JSX.Element;
78
- };
79
- RadioGroup: {
80
- description: string;
81
- properties: z.ZodObject<{
82
- options: z.ZodArray<z.ZodObject<{
83
- label: z.ZodString;
84
- value: z.ZodString;
85
- }, z.core.$strip>>;
86
- name: z.ZodOptional<z.ZodString>;
87
- label: z.ZodOptional<z.ZodString>;
88
- defaultValue: z.ZodOptional<z.ZodString>;
89
- }, z.core.$strip>;
90
- render: typeof RadioGroupRender;
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
- //#endregion
94
+ export {};
94
95
  //# sourceMappingURL=interactive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","names":[],"sources":["../../src/vocabulary/interactive.tsx"],"mappings":";;;;KAkBK;EAAW;EAAe;;KAU1B;EACH,SAAS;EACT;EACA;EACA;EACA,SAAS;EACT,UAAU;EACV,YAAY;;iBAGL,mBACP,SACA,MACA,OACA,cACA,SACA,aACC,wCAAqB,IAAA;qBA6BX"}
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__ */ jsx("fieldset", {
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":";;;;;;;;AAaA,MAAM,eAAe,EAAE,OAAO;CAC5B,OAAO,EAAE,OAAO;CAChB,OAAO,EAAE,OAAO;AAClB,CAAC;AAID,MAAM,YAAY,WAChB,WAAW,QACX,OAAO,WAAW,YAClB,WAAW,UACX,OAAO,OAAO,UAAU,YACxB,WAAW,UACX,OAAO,OAAO,UAAU;AAY1B,SAAS,iBAAiB,EACxB,SACA,MACA,OACA,cACA,SACA,aACwB;CACxB,MAAM,gBAAgB,MAAM;CAC5B,MAAM,YAAY,QAAQ;CAC1B,MAAM,cAAc,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;CACxD,OACE,oBAAC,YAAD;EACE,YAAS;EACT,mBAAiB,WAAW,OAAO;EACnC,cAAY;EAEX,UAAA,YAAY,KAAK,QAAQ,MACxB,SAAS,MAAM,IACb,qBAAC,SAAD;GAAe,YAAS;GAAxB,UAAA,CACE,oBAAC,SAAD;IACE,MAAK;IACL,MAAM;IACN,GAAK,QAAQ,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACrD,OAAO,OAAO;IACd,gBAAgB,iBAAiB,OAAO;IACxC,gBAAgB,KAAK,SAAS,WAAW,OAAO,KAAK;GACtD,CAAA,GACA,OAAO,KACH;EAVK,GAAA,CAUL,IACL,IACN;CACQ,CAAA;AAEd;AAEA,MAAa,wBAAwB;CACnC,QAAQ;EACN,aACE;EACF,YAAY,EAAE,OAAO;GACnB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,eAAe;GAC1C,aAAa,EAAE,KAAK,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,eAAe;GACtE,OAAO,EACJ,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,0CAA0C;GACtD,QAAQ,EACL,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SACC,gFACF;EACJ,CAAC;EACD,SAAS,EACP,OACA,aACA,OACA,QACA,SACA,WACA,eAEA,qBAAC,UAAD;GACE,MAAM,SAAS,WAAW;GAC1B,YAAS;GACT,kBAAgB;GAChB,kBAAgB,SAAS,KAAA;GACzB,mBAAiB,UAAU,KAAA;GAC3B,mBAAiB,WAAW,OAAO;GACnC,SAAS,SAAS,KAAA,UAAkB,KAAK,SAAS,SAAS;GAP7D,UAAA,CASG,cAAc,KAAK,GACnB,QACK;;CAEZ;CACA,QAAQ;EACN,aACE;EACF,YAAY,EAAE,OAAO;GACnB,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,qBAAqB;GAC7D,aAAa,EACV,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,6CAA6C;GACzD,OAAO,EACJ,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,mCAAmC;GAC/C,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;EACvE,CAAC;EACD,SAAS,EACP,SACA,aACA,OACA,MACA,SACA,WACA,eACI;GACJ,MAAM,kBAAkB,cAAc,WAAW;GACjD,OACE,qBAAC,UAAD;IACE,YAAS;IACT,mBAAiB,WAAW,OAAO;IAC7B;IACN,cAAY;IACZ,cAAa;IACb,WAAW,MAAM,KAAK,SAAS,WAAW,EAAE,cAAc,KAAK;IANjE,UAAA;KAQG,kBACC,oBAAC,UAAD;MAAQ,OAAM;MAAG,UAAA;MACd,UAAA;KACK,CAAA,IACN;MACF,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,EAAA,CAAG,KAAK,QAAQ,MACpD,SAAS,MAAM,IACb,oBAAC,UAAD;MAAgB,OAAO,OAAO;MAC3B,UAAA,OAAO;KACF,GAFK,CAEL,IACN,IACN;KACC;IACK;;EAEZ;CACF;CACA,OAAO;EACL,aACE;EACF,YAAY,EAAE,OAAO;GACnB,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,mBAAmB;GAC/D,WAAW,EACR,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,mDAAmD;GAC/D,OAAO,EACJ,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,mCAAmC;GAC/C,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;EACvE,CAAC;EACD,SAAS,EAAE,aAAa,WAAW,OAAO,MAAM,SAAS,gBAAgB;GACvE,MAAM,UAAU,MAAc,KAAK,SAAS,WAAW,CAAC;GACxD,OAAO,YACL,oBAAC,YAAD;IACE,YAAS;IACT,sBAAA;IACA,mBAAiB,WAAW,OAAO;IAC7B;IACN,cAAY;IACC;IACb,YAAY,MAAM;KAChB,IACE,EAAE,QAAQ,WACV,EAAE,EAAE,WAAW,EAAE,YACjB,EAAE,YAAY,aAEd;KACF,IAAI,EAAE,cAAc,MAAM;MACxB,EAAE,eAAe;MACjB,gBAAgB,UAAU,cAAc,KACtC,EAAE,cAAc,IAClB;KACF,OACE,OAAO,EAAE,cAAc,KAAK;IAEhC;GACD,CAAA,IAED,oBAAC,SAAD;IACE,YAAS;IACT,mBAAiB,WAAW,OAAO;IAC7B;IACN,cAAY;IACC;IACb,YAAY,MAAM;KAChB,IACE,EAAE,QAAQ,WACV,CAAC,EAAE,YAAY,eACf,CAAC,EAAE,cAAc,MAEjB,OAAO,EAAE,cAAc,KAAK;IAChC;GACD,CAAA;EAEL;CACF;CACA,YAAY;EACV,aACE;EACF,YAAY,EAAE,OAAO;GACnB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,4BAA4B;GAClE,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,4BAA4B;GAChE,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,4BAA4B;GAChE,OAAO,EACJ,OAAO,CAAC,CACR,SAAS,CAAC,CACV,SAAS,mCAAmC;GAC/C,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;EACvE,CAAC;EACD,SAAS,EAAE,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,gBAChD,oBAAC,SAAD;GACE,MAAK;GACL,YAAS;GACT,mBAAiB,WAAW,OAAO;GAC7B;GACN,cAAY;GACZ,cAAc;GACT;GACA;GACL,WAAW,MAAM,KAAK,SAAS,WAAW,EAAE,cAAc,KAAK;EAChE,CAAA;CAEL;CACA,UAAU;EACR,aACE;EACF,YAAY,EAAE,OAAO;GACnB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,kCAAkC;GAC7D,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;GACrE,gBAAgB,EACb,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,sCAAsC;EACpD,CAAC;EACD,SAAS,EAAE,OAAO,MAAM,gBAAgB,SAAS,gBAC/C,qBAAC,SAAD;GAAO,YAAS;GAAhB,UAAA,CACE,oBAAC,SAAD;IACE,MAAK;IACL,mBAAiB,WAAW,OAAO;IAC7B;IACU;IAChB,WAAW,MAAM,KAAK,SAAS,WAAW,EAAE,cAAc,OAAO;GAClE,CAAA,GACD,oBAAC,QAAD;IAAM,YAAS;IAAkB,UAAA,cAAc,KAAK;GAAQ,CAAA,CACvD;;CAEX;CACA,YAAY;EACV,aACE;EACF,YAAY,EAAE,OAAO;GACnB,SAAS,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,qBAAqB;GAC7D,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;GACrE,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gCAAgC;GACtE,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,2BAA2B;EAC1E,CAAC;EACD,QAAQ;CACV;AACF"}
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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"}