@assistant-ui/react-generative-ui 0.0.24 → 0.1.0
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/README.md +2 -0
- package/dist/a2ui.d.ts +1 -4
- package/dist/a2ui.d.ts.map +1 -1
- package/dist/a2ui.js +1 -4
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.server.d.ts +1 -2
- package/dist/index.server.d.ts.map +1 -1
- package/dist/index.server.js +1 -10
- package/dist/ir.d.ts +1 -111
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js +1 -175
- package/dist/slack.d.ts +1 -4
- package/dist/slack.d.ts.map +1 -1
- package/dist/slack.js +1 -4
- package/dist/teams.d.ts +1 -4
- package/dist/teams.d.ts.map +1 -1
- package/dist/teams.js +1 -4
- package/package.json +4 -5
- package/src/a2ui.ts +1 -22
- package/src/index.server.ts +1 -2
- package/src/index.test.ts +75 -0
- package/src/index.ts +1 -2
- package/src/ir.ts +1 -279
- package/src/slack.ts +1 -39
- package/src/teams.ts +1 -35
- package/dist/JSONGenerativeUI.client.d.ts +0 -28
- package/dist/JSONGenerativeUI.client.d.ts.map +0 -1
- package/dist/JSONGenerativeUI.client.js +0 -101
- package/dist/JSONGenerativeUI.client.js.map +0 -1
- package/dist/JSONGenerativeUI.server.d.ts +0 -21
- package/dist/JSONGenerativeUI.server.d.ts.map +0 -1
- package/dist/JSONGenerativeUI.server.js +0 -32
- package/dist/JSONGenerativeUI.server.js.map +0 -1
- package/dist/JSONGenerativeUI.shared.d.ts +0 -63
- package/dist/JSONGenerativeUI.shared.d.ts.map +0 -1
- package/dist/JSONGenerativeUI.shared.js +0 -31
- package/dist/JSONGenerativeUI.shared.js.map +0 -1
- package/dist/RadioGroupScope.d.ts +0 -6
- package/dist/RadioGroupScope.d.ts.map +0 -1
- package/dist/RadioGroupScope.js +0 -25
- package/dist/RadioGroupScope.js.map +0 -1
- package/dist/a2ui/BindingContext.d.ts +0 -11
- package/dist/a2ui/BindingContext.d.ts.map +0 -1
- package/dist/a2ui/BindingContext.js +0 -12
- package/dist/a2ui/BindingContext.js.map +0 -1
- package/dist/a2ui/PresentRenderer.d.ts +0 -11
- package/dist/a2ui/PresentRenderer.d.ts.map +0 -1
- package/dist/a2ui/PresentRenderer.js +0 -39
- package/dist/a2ui/PresentRenderer.js.map +0 -1
- package/dist/a2ui/convert.d.ts +0 -15
- package/dist/a2ui/convert.d.ts.map +0 -1
- package/dist/a2ui/convert.js +0 -728
- package/dist/a2ui/convert.js.map +0 -1
- package/dist/a2ui/dataModel.d.ts +0 -9
- package/dist/a2ui/dataModel.d.ts.map +0 -1
- package/dist/a2ui/dataModel.js +0 -44
- package/dist/a2ui/dataModel.js.map +0 -1
- package/dist/a2ui/reducer.d.ts +0 -8
- package/dist/a2ui/reducer.d.ts.map +0 -1
- package/dist/a2ui/reducer.js +0 -242
- package/dist/a2ui/reducer.js.map +0 -1
- package/dist/a2ui/snapshot.d.ts +0 -3
- package/dist/a2ui/snapshot.d.ts.map +0 -1
- package/dist/a2ui/snapshot.js +0 -33
- package/dist/a2ui/snapshot.js.map +0 -1
- package/dist/a2ui/types.d.ts +0 -88
- package/dist/a2ui/types.d.ts.map +0 -1
- package/dist/a2ui/types.js +0 -6
- package/dist/a2ui/types.js.map +0 -1
- package/dist/a2ui/valueFunctions.d.ts +0 -16
- package/dist/a2ui/valueFunctions.d.ts.map +0 -1
- package/dist/a2ui/valueFunctions.js +0 -332
- package/dist/a2ui/valueFunctions.js.map +0 -1
- package/dist/actionRegistry.d.ts +0 -29
- package/dist/actionRegistry.d.ts.map +0 -1
- package/dist/actionRegistry.js +0 -41
- package/dist/actionRegistry.js.map +0 -1
- package/dist/answeredValues.d.ts +0 -16
- package/dist/answeredValues.d.ts.map +0 -1
- package/dist/answeredValues.js +0 -37
- package/dist/answeredValues.js.map +0 -1
- package/dist/buildPresentParameters.d.ts +0 -21
- package/dist/buildPresentParameters.d.ts.map +0 -1
- package/dist/buildPresentParameters.js +0 -95
- package/dist/buildPresentParameters.js.map +0 -1
- package/dist/constants.d.ts +0 -15
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -19
- package/dist/constants.js.map +0 -1
- package/dist/convert/boundSpec.d.ts +0 -48
- package/dist/convert/boundSpec.d.ts.map +0 -1
- package/dist/convert/boundSpec.js +0 -108
- package/dist/convert/boundSpec.js.map +0 -1
- package/dist/convert/copyBounded.d.ts +0 -25
- package/dist/convert/copyBounded.d.ts.map +0 -1
- package/dist/convert/copyBounded.js +0 -38
- package/dist/convert/copyBounded.js.map +0 -1
- package/dist/convert/isElement.d.ts +0 -3
- package/dist/convert/isElement.d.ts.map +0 -1
- package/dist/convert/isElement.js +0 -6
- package/dist/convert/isElement.js.map +0 -1
- package/dist/convert/takeRun.d.ts +0 -6
- package/dist/convert/takeRun.d.ts.map +0 -1
- package/dist/convert/takeRun.js +0 -20
- package/dist/convert/takeRun.js.map +0 -1
- package/dist/defineGenerativeComponents.d.ts +0 -29
- package/dist/defineGenerativeComponents.d.ts.map +0 -1
- package/dist/defineGenerativeComponents.js +0 -34
- package/dist/defineGenerativeComponents.js.map +0 -1
- package/dist/fieldReferences.d.ts +0 -9
- package/dist/fieldReferences.d.ts.map +0 -1
- package/dist/fieldReferences.js +0 -53
- package/dist/fieldReferences.js.map +0 -1
- package/dist/generativeUIToJSX.d.ts +0 -18
- package/dist/generativeUIToJSX.d.ts.map +0 -1
- package/dist/generativeUIToJSX.js +0 -76
- package/dist/generativeUIToJSX.js.map +0 -1
- package/dist/index.shared.d.ts +0 -15
- package/dist/index.shared.d.ts.map +0 -1
- package/dist/index.shared.js +0 -9
- package/dist/ir.js.map +0 -1
- package/dist/renderGenerativeUI.d.ts +0 -14
- package/dist/renderGenerativeUI.d.ts.map +0 -1
- package/dist/renderGenerativeUI.js +0 -83
- package/dist/renderGenerativeUI.js.map +0 -1
- package/dist/scopeSchema.d.ts +0 -6
- package/dist/scopeSchema.d.ts.map +0 -1
- package/dist/scopeSchema.js +0 -56
- package/dist/scopeSchema.js.map +0 -1
- package/dist/slack/constants.d.ts +0 -93
- package/dist/slack/constants.d.ts.map +0 -1
- package/dist/slack/constants.js +0 -146
- package/dist/slack/constants.js.map +0 -1
- package/dist/slack/decodeBlockAction.d.ts +0 -10
- package/dist/slack/decodeBlockAction.d.ts.map +0 -1
- package/dist/slack/decodeBlockAction.js +0 -129
- package/dist/slack/decodeBlockAction.js.map +0 -1
- package/dist/slack/fromSlackBlocks.d.ts +0 -27
- package/dist/slack/fromSlackBlocks.d.ts.map +0 -1
- package/dist/slack/fromSlackBlocks.js +0 -483
- package/dist/slack/fromSlackBlocks.js.map +0 -1
- package/dist/slack/toSlackBlocks.d.ts +0 -4
- package/dist/slack/toSlackBlocks.d.ts.map +0 -1
- package/dist/slack/toSlackBlocks.js +0 -901
- package/dist/slack/toSlackBlocks.js.map +0 -1
- package/dist/slack/types.d.ts +0 -204
- package/dist/slack/types.d.ts.map +0 -1
- package/dist/slack/types.js +0 -0
- package/dist/teams/constants.d.ts +0 -34
- package/dist/teams/constants.d.ts.map +0 -1
- package/dist/teams/constants.js +0 -68
- package/dist/teams/constants.js.map +0 -1
- package/dist/teams/decodeSubmitData.d.ts +0 -26
- package/dist/teams/decodeSubmitData.d.ts.map +0 -1
- package/dist/teams/decodeSubmitData.js +0 -70
- package/dist/teams/decodeSubmitData.js.map +0 -1
- package/dist/teams/temporalId.d.ts +0 -5
- package/dist/teams/temporalId.d.ts.map +0 -1
- package/dist/teams/temporalId.js +0 -28
- package/dist/teams/temporalId.js.map +0 -1
- package/dist/teams/toAdaptiveCard.d.ts +0 -45
- package/dist/teams/toAdaptiveCard.d.ts.map +0 -1
- package/dist/teams/toAdaptiveCard.js +0 -642
- package/dist/teams/toAdaptiveCard.js.map +0 -1
- package/dist/teams/toTeamsAttachments.d.ts +0 -10
- package/dist/teams/toTeamsAttachments.d.ts.map +0 -1
- package/dist/teams/toTeamsAttachments.js +0 -99
- package/dist/teams/toTeamsAttachments.js.map +0 -1
- package/dist/teams/types.d.ts +0 -224
- package/dist/teams/types.d.ts.map +0 -1
- package/dist/teams/types.js +0 -0
- package/dist/temporal.d.ts +0 -33
- package/dist/temporal.d.ts.map +0 -1
- package/dist/temporal.js +0 -153
- package/dist/temporal.js.map +0 -1
- package/dist/types.d.ts +0 -99
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -0
- package/dist/vocabulary/alert.d.ts +0 -32
- package/dist/vocabulary/alert.d.ts.map +0 -1
- package/dist/vocabulary/alert.js +0 -160
- package/dist/vocabulary/alert.js.map +0 -1
- package/dist/vocabulary/collectFormValues.d.ts +0 -23
- package/dist/vocabulary/collectFormValues.d.ts.map +0 -1
- package/dist/vocabulary/collectFormValues.js +0 -44
- package/dist/vocabulary/collectFormValues.js.map +0 -1
- package/dist/vocabulary/data.d.ts +0 -66
- package/dist/vocabulary/data.d.ts.map +0 -1
- package/dist/vocabulary/data.js +0 -503
- package/dist/vocabulary/data.js.map +0 -1
- package/dist/vocabulary/dispatch.d.ts +0 -9
- package/dist/vocabulary/dispatch.d.ts.map +0 -1
- package/dist/vocabulary/dispatch.js +0 -50
- package/dist/vocabulary/dispatch.js.map +0 -1
- package/dist/vocabulary/fact.d.ts +0 -19
- package/dist/vocabulary/fact.d.ts.map +0 -1
- package/dist/vocabulary/fact.js +0 -51
- package/dist/vocabulary/fact.js.map +0 -1
- package/dist/vocabulary/form.d.ts +0 -11
- package/dist/vocabulary/form.d.ts.map +0 -1
- package/dist/vocabulary/form.js +0 -23
- package/dist/vocabulary/form.js.map +0 -1
- package/dist/vocabulary/formatValue.d.ts +0 -7
- package/dist/vocabulary/formatValue.d.ts.map +0 -1
- package/dist/vocabulary/formatValue.js +0 -76
- package/dist/vocabulary/formatValue.js.map +0 -1
- package/dist/vocabulary/icon.d.ts +0 -41
- package/dist/vocabulary/icon.d.ts.map +0 -1
- package/dist/vocabulary/icon.js +0 -272
- package/dist/vocabulary/icon.js.map +0 -1
- package/dist/vocabulary/index.d.ts +0 -12
- package/dist/vocabulary/index.d.ts.map +0 -1
- package/dist/vocabulary/index.js +0 -36
- package/dist/vocabulary/index.js.map +0 -1
- package/dist/vocabulary/interactive.d.ts +0 -230
- package/dist/vocabulary/interactive.d.ts.map +0 -1
- package/dist/vocabulary/interactive.js +0 -584
- package/dist/vocabulary/interactive.js.map +0 -1
- package/dist/vocabulary/layout.d.ts +0 -79
- package/dist/vocabulary/layout.d.ts.map +0 -1
- package/dist/vocabulary/layout.js +0 -139
- package/dist/vocabulary/layout.js.map +0 -1
- package/dist/vocabulary/list.d.ts +0 -14
- package/dist/vocabulary/list.d.ts.map +0 -1
- package/dist/vocabulary/list.js +0 -50
- package/dist/vocabulary/list.js.map +0 -1
- package/dist/vocabulary/media.d.ts +0 -25
- package/dist/vocabulary/media.d.ts.map +0 -1
- package/dist/vocabulary/media.js +0 -42
- package/dist/vocabulary/media.js.map +0 -1
- package/dist/vocabulary/text.d.ts +0 -57
- package/dist/vocabulary/text.d.ts.map +0 -1
- package/dist/vocabulary/text.js +0 -49
- package/dist/vocabulary/text.js.map +0 -1
- package/dist/vocabulary/toTextContent.d.ts +0 -2
- package/dist/vocabulary/toTextContent.d.ts.map +0 -1
- package/dist/vocabulary/toTextContent.js +0 -6
- package/dist/vocabulary/toTextContent.js.map +0 -1
- package/src/JSONGenerativeUI.client.tsx +0 -168
- package/src/JSONGenerativeUI.server.tsx +0 -39
- package/src/JSONGenerativeUI.shared.ts +0 -90
- package/src/JSONGenerativeUI.test.tsx +0 -1298
- package/src/RadioGroupScope.server.test.tsx +0 -24
- package/src/RadioGroupScope.tsx +0 -34
- package/src/a2ui/BindingContext.ts +0 -26
- package/src/a2ui/PresentRenderer.tsx +0 -83
- package/src/a2ui/convert.test.ts +0 -2923
- package/src/a2ui/convert.ts +0 -1207
- package/src/a2ui/dataModel.ts +0 -69
- package/src/a2ui/reducer.test.ts +0 -422
- package/src/a2ui/reducer.ts +0 -363
- package/src/a2ui/snapshot.test.ts +0 -52
- package/src/a2ui/snapshot.ts +0 -52
- package/src/a2ui/types.ts +0 -114
- package/src/a2ui/valueFunctions.test.ts +0 -271
- package/src/a2ui/valueFunctions.ts +0 -523
- package/src/actionRegistry.test.ts +0 -90
- package/src/actionRegistry.ts +0 -88
- package/src/answeredValues.test.ts +0 -33
- package/src/answeredValues.tsx +0 -70
- package/src/buildPresentParameters.test.ts +0 -246
- package/src/buildPresentParameters.ts +0 -130
- package/src/constants.ts +0 -17
- package/src/convert/boundSpec.test.ts +0 -192
- package/src/convert/boundSpec.ts +0 -134
- package/src/convert/copyBounded.test.ts +0 -131
- package/src/convert/copyBounded.ts +0 -38
- package/src/convert/isElement.ts +0 -6
- package/src/convert/takeRun.test.ts +0 -64
- package/src/convert/takeRun.ts +0 -19
- package/src/defineGenerativeComponents.ts +0 -38
- package/src/fieldReferences.test.ts +0 -66
- package/src/fieldReferences.ts +0 -83
- package/src/generativeUIToJSX.test.ts +0 -268
- package/src/generativeUIToJSX.ts +0 -152
- package/src/index.server.test.ts +0 -106
- package/src/index.shared.ts +0 -61
- package/src/ir.test.ts +0 -203
- package/src/renderGenerativeUI.test.tsx +0 -373
- package/src/renderGenerativeUI.tsx +0 -165
- package/src/scopeSchema.test.ts +0 -72
- package/src/scopeSchema.ts +0 -71
- package/src/slack/a2uiSlack.test.ts +0 -198
- package/src/slack/constants.ts +0 -194
- package/src/slack/datePicker.test.ts +0 -612
- package/src/slack/decodeBlockAction.test.ts +0 -233
- package/src/slack/decodeBlockAction.ts +0 -232
- package/src/slack/fromSlackBlocks.test.ts +0 -1465
- package/src/slack/fromSlackBlocks.ts +0 -789
- package/src/slack/toSlackBlocks.test.ts +0 -3065
- package/src/slack/toSlackBlocks.ts +0 -1818
- package/src/slack/types.ts +0 -264
- package/src/teams/constants.ts +0 -93
- package/src/teams/decodeSubmitData.test.ts +0 -397
- package/src/teams/decodeSubmitData.ts +0 -110
- package/src/teams/temporal.test.ts +0 -766
- package/src/teams/temporalId.ts +0 -56
- package/src/teams/toAdaptiveCard.test.ts +0 -1897
- package/src/teams/toAdaptiveCard.ts +0 -1057
- package/src/teams/toTeamsAttachments.test.ts +0 -74
- package/src/teams/toTeamsAttachments.ts +0 -133
- package/src/teams/types.ts +0 -266
- package/src/temporal.test.ts +0 -337
- package/src/temporal.ts +0 -263
- package/src/types.ts +0 -119
- package/src/vocabulary/alert.test.tsx +0 -427
- package/src/vocabulary/alert.tsx +0 -217
- package/src/vocabulary/collectFormValues.test.ts +0 -389
- package/src/vocabulary/collectFormValues.ts +0 -116
- package/src/vocabulary/data.test.tsx +0 -858
- package/src/vocabulary/data.tsx +0 -819
- package/src/vocabulary/datepicker.dom.test.tsx +0 -1457
- package/src/vocabulary/dispatch.ts +0 -83
- package/src/vocabulary/fact.test.tsx +0 -94
- package/src/vocabulary/fact.tsx +0 -54
- package/src/vocabulary/form.test.tsx +0 -113
- package/src/vocabulary/form.tsx +0 -39
- package/src/vocabulary/formatValue.test.ts +0 -72
- package/src/vocabulary/formatValue.ts +0 -127
- package/src/vocabulary/icon.test.tsx +0 -64
- package/src/vocabulary/icon.tsx +0 -174
- package/src/vocabulary/index.test.ts +0 -65
- package/src/vocabulary/index.ts +0 -33
- package/src/vocabulary/interactive.dispatch.test.tsx +0 -454
- package/src/vocabulary/interactive.dom.test.tsx +0 -1747
- package/src/vocabulary/interactive.test.tsx +0 -377
- package/src/vocabulary/interactive.tsx +0 -1109
- package/src/vocabulary/layout.test.tsx +0 -323
- package/src/vocabulary/layout.tsx +0 -247
- package/src/vocabulary/list.test.tsx +0 -222
- package/src/vocabulary/list.tsx +0 -50
- package/src/vocabulary/media.test.tsx +0 -85
- package/src/vocabulary/media.tsx +0 -56
- package/src/vocabulary/text.test.tsx +0 -102
- package/src/vocabulary/text.tsx +0 -60
- package/src/vocabulary/toTextContent.ts +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","names":[],"sources":["../../src/vocabulary/interactive.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { z } from \"zod\";\nimport {\n CHECKBOX_GROUP_ATTR,\n FIELD_NAME_ATTR,\n FIELD_VALUE_ATTR,\n GENERATED_NAME_ATTR,\n} from \"../constants\";\nimport type { Action } from \"../ir\";\nimport { BUTTON_STYLES } from \"../ir\";\nimport type {\n GenerativeUIDispatch,\n GenerativeUILibrary,\n GenerativeUIStatus,\n} from \"../types\";\nimport { A2uiBindingContext, useA2uiBinding } from \"../a2ui/BindingContext\";\nimport { useAnsweredValue } from \"../answeredValues\";\nimport { actionAttr, fire } from \"./dispatch\";\nimport { toTextContent } from \"./toTextContent\";\nimport { useRadioGroupName } from \"../RadioGroupScope\";\nimport {\n classifyTemporal,\n fromLocalDateTime,\n getTemporalInputStep,\n normalizeTemporalInputValue,\n toLocalDateTime,\n toPickerLocalDateTime,\n} from \"../temporal\";\n\nconst optionSchema = z.object({\n label: z.string(),\n value: z.string(),\n});\n\nconst describedOptionSchema = optionSchema.extend({\n description: z.string().optional(),\n});\n\ntype Option = { label: string; description?: 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 (!(\"description\" in option) || typeof option.description === \"string\") &&\n \"value\" in option &&\n typeof option.value === \"string\";\n\nconst mapOptions = (\n options: unknown,\n render: (option: Option, key: string) => React.ReactNode,\n) => {\n const occurrences = new Map<string, number>();\n return (Array.isArray(options) ? options : []).map((option) => {\n if (!isOption(option)) return null;\n const occurrence = occurrences.get(option.value) ?? 0;\n occurrences.set(option.value, occurrence + 1);\n return render(option, JSON.stringify([option.value, occurrence]));\n });\n};\n\ntype RadioGroupRenderProps = {\n value?: string;\n options: Option[];\n name?: string;\n label?: string;\n defaultValue?: string;\n children?: React.ReactNode;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction RadioGroupRender({\n value,\n options,\n name,\n label,\n defaultValue,\n children,\n $action,\n $dispatch,\n}: RadioGroupRenderProps) {\n const groupName = useRadioGroupName(name);\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const initialValue =\n typeof answeredValue === \"string\" ? answeredValue : defaultValue;\n return (\n <fieldset\n key={initialValue}\n data-aui=\"radiogroup\"\n data-aui-action={actionAttr($action)}\n aria-label={label}\n >\n {mapOptions(options, (option, key) => (\n <label key={key} data-aui=\"radiogroup-option\">\n <input\n type=\"radio\"\n name={groupName}\n {...{ [FIELD_NAME_ATTR]: name }}\n {...(name == null ? { [GENERATED_NAME_ATTR]: \"\" } : {})}\n value={option.value}\n {...(isBound\n ? { checked: (answeredValue ?? value) === option.value }\n : { defaultChecked: initialValue === option.value })}\n onChange={(e) => {\n updateBinding?.(option.value);\n fire($action, $dispatch, option.value, e.currentTarget);\n }}\n />\n {option.description ? (\n <span data-aui=\"option-content\">\n <span data-aui=\"option-label\">{option.label}</span>\n <span data-aui=\"option-description\">{option.description}</span>\n </span>\n ) : (\n option.label\n )}\n </label>\n ))}\n {children}\n </fieldset>\n );\n}\n\ntype CheckboxGroupRenderProps = {\n value?: string[];\n options: Option[];\n name?: string;\n label?: string;\n defaultValue?: string[];\n children?: React.ReactNode;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nconst checkedGroupValues = (input: HTMLInputElement): string[] =>\n Array.from(\n input\n .closest(\"fieldset\")\n ?.querySelectorAll<HTMLInputElement>(\n `:scope > label > input[${CHECKBOX_GROUP_ATTR}]:checked`,\n ) ?? [],\n (checkbox) => checkbox.value,\n );\n\nfunction CheckboxGroupRender({\n value,\n options,\n name,\n label,\n defaultValue,\n children,\n $action,\n $dispatch,\n}: CheckboxGroupRenderProps) {\n const generatedName = React.useId();\n const fieldName = name ?? generatedName;\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const checkedValues =\n Array.isArray(answeredValue) &&\n answeredValue.every((value): value is string => typeof value === \"string\")\n ? answeredValue\n : Array.isArray(defaultValue)\n ? defaultValue\n : [];\n return (\n <fieldset\n key={JSON.stringify(checkedValues)}\n data-aui=\"checkboxgroup\"\n data-aui-action={actionAttr($action)}\n aria-label={label}\n >\n {mapOptions(options, (option, key) => (\n <label key={key} data-aui=\"checkboxgroup-option\">\n <input\n type=\"checkbox\"\n name={fieldName}\n {...{ [CHECKBOX_GROUP_ATTR]: \"\" }}\n {...(name == null ? { [GENERATED_NAME_ATTR]: \"\" } : {})}\n value={option.value}\n {...(isBound\n ? {\n checked: (Array.isArray(answeredValue)\n ? checkedValues\n : (value ?? [])\n ).includes(option.value),\n }\n : { defaultChecked: checkedValues.includes(option.value) })}\n onChange={(e) => {\n const selected = checkedGroupValues(e.currentTarget);\n updateBinding?.(selected);\n fire($action, $dispatch, selected, e.currentTarget);\n }}\n />\n {option.description ? (\n <span data-aui=\"option-content\">\n <span data-aui=\"option-label\">{option.label}</span>\n <span data-aui=\"option-description\">{option.description}</span>\n </span>\n ) : (\n option.label\n )}\n </label>\n ))}\n {children}\n </fieldset>\n );\n}\n\ntype SelectRenderProps = {\n value?: string;\n options: Option[];\n placeholder?: string;\n label?: string;\n name?: string;\n defaultValue?: string;\n children?: React.ReactNode;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction SelectRender({\n value,\n options,\n placeholder,\n label,\n name,\n defaultValue,\n $action,\n $dispatch,\n children,\n}: SelectRenderProps) {\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const placeholderText = toTextContent(placeholder);\n const initialValue =\n typeof answeredValue === \"string\"\n ? answeredValue\n : typeof defaultValue === \"string\"\n ? defaultValue\n : \"\";\n return (\n <select\n key={initialValue}\n data-aui=\"select\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n {...(isBound\n ? {\n value:\n typeof answeredValue === \"string\" ? answeredValue : (value ?? \"\"),\n }\n : { defaultValue: initialValue })}\n onChange={(e) => {\n updateBinding?.(e.currentTarget.value);\n fire($action, $dispatch, e.currentTarget.value, e.currentTarget);\n }}\n >\n {placeholderText ? (\n <option value=\"\" disabled>\n {placeholderText}\n </option>\n ) : null}\n {mapOptions(options, (option, key) => (\n <option key={key} value={option.value}>\n {option.label}\n </option>\n ))}\n {children}\n </select>\n );\n}\n\ntype InputRenderProps = {\n value?: string;\n inputType?: \"text\" | \"password\" | \"number\";\n placeholder?: string;\n multiline?: boolean;\n label?: string;\n name?: string;\n defaultValue?: string;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction InputRender({\n value,\n inputType,\n placeholder,\n multiline,\n label,\n name,\n defaultValue,\n $action,\n $dispatch,\n}: InputRenderProps) {\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const initialValue =\n typeof answeredValue === \"string\" ? answeredValue : defaultValue;\n const submit = (control: HTMLInputElement | HTMLTextAreaElement) =>\n fire($action, $dispatch, control.value, control);\n return multiline && (inputType === undefined || inputType === \"text\") ? (\n <textarea\n key={initialValue}\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 {...(isBound\n ? {\n value:\n typeof answeredValue === \"string\" ? answeredValue : (value ?? \"\"),\n }\n : { defaultValue: initialValue })}\n onChange={\n updateBinding ? (e) => updateBinding(e.currentTarget.value) : undefined\n }\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(e.currentTarget.form);\n } else {\n submit(e.currentTarget);\n }\n }}\n />\n ) : (\n <input\n key={initialValue}\n type={inputType}\n step={inputType === \"number\" ? \"any\" : undefined}\n data-aui=\"input\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n placeholder={placeholder}\n {...(isBound\n ? {\n value:\n typeof answeredValue === \"string\" ? answeredValue : (value ?? \"\"),\n }\n : { defaultValue: initialValue })}\n onChange={\n updateBinding ? (e) => updateBinding(e.currentTarget.value) : undefined\n }\n onKeyDown={(e) => {\n if (\n e.key === \"Enter\" &&\n !e.nativeEvent.isComposing &&\n !e.currentTarget.form\n )\n submit(e.currentTarget);\n }}\n />\n );\n}\n\ntype DatePickerRenderProps = {\n inputType?: \"date\" | \"datetime\" | \"time\";\n value?: string;\n min?: string;\n max?: string;\n label?: string;\n name?: string;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nconst subscribeToHydration = () => () => {};\nconst clientHydrationSnapshot = () => true;\nconst serverHydrationSnapshot = () => false;\n\nfunction DatePickerRender({\n inputType = \"date\",\n value,\n min,\n max,\n label,\n name,\n $action,\n $dispatch,\n}: DatePickerRenderProps) {\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const initialValue =\n typeof answeredValue === \"string\" ? answeredValue : value;\n const [selection, setSelection] = React.useState({\n initialValue,\n value: initialValue,\n anchor: initialValue,\n committedValue: initialValue,\n edited: false,\n });\n if (selection.initialValue !== initialValue) {\n const isEcho = isBound && initialValue === selection.value;\n setSelection({\n initialValue,\n value: initialValue,\n anchor: isEcho ? selection.anchor : initialValue,\n committedValue: isEcho ? selection.committedValue : initialValue,\n edited: isEcho && selection.edited,\n });\n }\n const currentValue = isBound ? initialValue : selection.value;\n const temporal = classifyTemporal(currentValue ?? \"\");\n const anchor = classifyTemporal(selection.anchor ?? \"\");\n const hasInstantAnchor =\n inputType === \"datetime\" && anchor.kind === \"instant\";\n const canonicalFieldValue = (value: string | undefined) => {\n const current = value ?? \"\";\n const kind = classifyTemporal(current).kind;\n if (inputType === \"time\")\n return kind === \"time\" && normalizeTemporalInputValue(current) !== current\n ? value\n : undefined;\n if (inputType !== \"datetime\") return undefined;\n if (kind === \"instant\") return value;\n if (hasInstantAnchor) return selection.anchor;\n return kind === \"floating\" &&\n normalizeTemporalInputValue(current) !== current\n ? value\n : undefined;\n };\n const minimum = classifyTemporal(min ?? \"\");\n const maximum = classifyTemporal(max ?? \"\");\n const hydrated = React.useSyncExternalStore(\n subscribeToHydration,\n clientHydrationSnapshot,\n serverHydrationSnapshot,\n );\n const showRawValue =\n inputType === \"datetime\" && temporal.kind === \"instant\" && !hydrated;\n const displayValue =\n currentValue === undefined\n ? undefined\n : inputType === \"datetime\" && hydrated\n ? toPickerLocalDateTime(currentValue)\n : normalizeTemporalInputValue(currentValue);\n const keyboardActive = React.useRef(false);\n const valueFromInput = (input: HTMLInputElement) => {\n const inputValue = normalizeTemporalInputValue(input.value);\n return inputType === \"datetime\"\n ? fromLocalDateTime(inputValue, selection.anchor)\n : inputValue;\n };\n const commit = (input: HTMLInputElement) => {\n if (!selection.edited) return;\n const nextValue = valueFromInput(input);\n setSelection({ ...selection, committedValue: nextValue, edited: false });\n if (nextValue !== selection.committedValue)\n fire($action, $dispatch, nextValue, input);\n };\n return (\n <input\n key={isBound ? undefined : initialValue}\n type={\n showRawValue\n ? \"text\"\n : inputType === \"datetime\"\n ? \"datetime-local\"\n : inputType\n }\n readOnly={showRawValue || undefined}\n data-aui=\"datepicker\"\n data-aui-action={actionAttr($action)}\n {...{\n [FIELD_VALUE_ATTR]: canonicalFieldValue(currentValue),\n }}\n name={name}\n aria-label={label}\n {...(isBound || inputType === \"datetime\"\n ? { value: displayValue ?? \"\" }\n : { defaultValue: displayValue })}\n min={\n inputType === \"datetime\" && hydrated && min !== undefined\n ? normalizeTemporalInputValue(\n toLocalDateTime(\n min,\n minimum.kind === \"instant\" ? minimum.precision : undefined,\n ),\n )\n : min === undefined\n ? undefined\n : normalizeTemporalInputValue(min)\n }\n max={\n inputType === \"datetime\" && hydrated && max !== undefined\n ? normalizeTemporalInputValue(\n toLocalDateTime(\n max,\n maximum.kind === \"instant\" ? maximum.precision : undefined,\n ),\n )\n : max === undefined\n ? undefined\n : normalizeTemporalInputValue(max)\n }\n step={\n inputType !== \"date\"\n ? getTemporalInputStep(\n selection.anchor,\n hasInstantAnchor ? displayValue : currentValue,\n min,\n max,\n )\n : undefined\n }\n onChange={(e) => {\n const nextValue = valueFromInput(e.currentTarget);\n const canonical = canonicalFieldValue(nextValue);\n if (canonical !== undefined) {\n e.currentTarget.setAttribute(FIELD_VALUE_ATTR, canonical);\n } else {\n e.currentTarget.removeAttribute(FIELD_VALUE_ATTR);\n }\n // A change without an editing key down is a pick from the native picker, which commits at once; a typed value waits for blur or Enter.\n const typed = keyboardActive.current;\n keyboardActive.current = false;\n setSelection({\n initialValue,\n value: nextValue,\n anchor: selection.anchor,\n committedValue: typed ? selection.committedValue : nextValue,\n edited: typed,\n });\n updateBinding?.(nextValue);\n if (!typed && nextValue !== selection.committedValue)\n fire($action, $dispatch, nextValue, e.currentTarget);\n }}\n onBlur={(e) => {\n keyboardActive.current = false;\n commit(e.currentTarget);\n }}\n onKeyDown={(e) => {\n if (\n e.key === \"Enter\" &&\n !e.nativeEvent.isComposing &&\n !e.currentTarget.form\n ) {\n commit(e.currentTarget);\n return;\n }\n keyboardActive.current =\n !e.altKey &&\n !e.ctrlKey &&\n !e.metaKey &&\n (e.key.length === 1 ||\n [\n \"ArrowDown\",\n \"ArrowUp\",\n \"Backspace\",\n \"Delete\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n ].includes(e.key));\n }}\n onKeyUp={() => {\n keyboardActive.current = false;\n }}\n onPaste={() => {\n keyboardActive.current = true;\n }}\n onCut={() => {\n keyboardActive.current = true;\n }}\n />\n );\n}\n\ntype CheckboxRenderProps = {\n checked?: boolean;\n label: string;\n name?: string;\n defaultChecked?: boolean;\n variant?: \"checkbox\" | \"switch\";\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction CheckboxRender({\n checked,\n label,\n name,\n defaultChecked,\n variant = \"checkbox\",\n $action,\n $dispatch,\n}: CheckboxRenderProps) {\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const initialChecked =\n typeof answeredValue === \"boolean\" ? answeredValue : defaultChecked;\n return (\n <label\n data-aui=\"checkbox\"\n data-aui-variant={variant === \"switch\" ? variant : undefined}\n >\n <input\n key={String(initialChecked)}\n type=\"checkbox\"\n role={variant === \"switch\" ? \"switch\" : undefined}\n data-aui-action={actionAttr($action)}\n name={name}\n {...(isBound\n ? {\n checked:\n typeof answeredValue === \"boolean\"\n ? answeredValue\n : checked === true,\n }\n : { defaultChecked: initialChecked })}\n onChange={(e) => {\n updateBinding?.(e.currentTarget.checked);\n fire($action, $dispatch, e.currentTarget.checked, e.currentTarget);\n }}\n />\n <span data-aui=\"checkbox-label\">{toTextContent(label)}</span>\n </label>\n );\n}\n\nconst finiteNumber = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isFinite(value);\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(Math.max(value, min), max);\n\ntype SliderRenderProps = {\n value?: number;\n name?: string;\n label?: string;\n min: number;\n max: number;\n step?: number;\n defaultValue?: number;\n unit?: string;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\ntype SliderControlProps = {\n controlledValue?: number;\n name?: string;\n label?: string;\n min: number;\n max: number;\n step: number;\n initialValue: number;\n unit?: string;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction SliderControl({\n controlledValue,\n name,\n label,\n min,\n max,\n step,\n initialValue,\n unit,\n $action,\n $dispatch,\n}: SliderControlProps) {\n const updateBinding = useA2uiBinding(name);\n const [localValue, setValue] = React.useState(initialValue);\n const value = controlledValue ?? localValue;\n const pointerActive = React.useRef(false);\n const keyboardActive = React.useRef(false);\n const lastCommitted = React.useRef(initialValue);\n const currentValue = (input: HTMLInputElement) =>\n clamp(Number(input.value), min, max);\n const commit = (input: HTMLInputElement) => {\n if (controlledValue !== undefined) return;\n const nextValue = currentValue(input);\n setValue(nextValue);\n if (lastCommitted.current === nextValue) return;\n lastCommitted.current = nextValue;\n fire($action, $dispatch, nextValue, input);\n };\n\n return (\n <label data-aui=\"slider-field\">\n {label ? <span data-aui=\"slider-label\">{label}</span> : null}\n <input\n type=\"range\"\n data-aui=\"slider\"\n data-aui-action={actionAttr($action)}\n name={name}\n aria-label={label}\n aria-valuetext={unit ? `${value} ${unit}` : String(value)}\n min={min}\n max={max}\n step={step}\n {...(controlledValue !== undefined\n ? { value }\n : { defaultValue: initialValue })}\n onInput={(e) => {\n const nextValue = currentValue(e.currentTarget);\n if (controlledValue !== undefined) updateBinding?.(nextValue);\n else setValue(nextValue);\n }}\n onPointerDown={() => {\n pointerActive.current = true;\n }}\n onPointerUp={(e) => {\n pointerActive.current = false;\n commit(e.currentTarget);\n }}\n onKeyDown={(e) => {\n keyboardActive.current = [\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n ].includes(e.key);\n }}\n onKeyUp={(e) => {\n if (!keyboardActive.current) return;\n keyboardActive.current = false;\n commit(e.currentTarget);\n }}\n onChange={(e) => {\n if (!pointerActive.current && !keyboardActive.current)\n commit(e.currentTarget);\n }}\n />\n <output data-aui=\"slider-value\">\n {value}\n {unit ? ` ${unit}` : \"\"}\n </output>\n </label>\n );\n}\n\nfunction SliderRender({\n value,\n name,\n label,\n min,\n max,\n step,\n defaultValue,\n unit,\n $action,\n $dispatch,\n}: SliderRenderProps) {\n const answeredValue = useAnsweredValue(name);\n const updateBinding = useA2uiBinding(name);\n const isBound = updateBinding !== undefined;\n const safeMin = finiteNumber(min) ? min : 0;\n const safeMax = finiteNumber(max) ? Math.max(max, safeMin) : safeMin + 100;\n const safeStep = finiteNumber(step) && step > 0 ? step : 1;\n const defaultNumber = finiteNumber(isBound ? value : defaultValue)\n ? isBound\n ? value!\n : defaultValue!\n : safeMin;\n const initialValue = clamp(\n finiteNumber(answeredValue) ? answeredValue : defaultNumber,\n safeMin,\n safeMax,\n );\n return (\n <SliderControl\n key={`${safeMin}:${safeMax}:${safeStep}:${isBound ? \"bound\" : initialValue}`}\n {...(isBound ? { controlledValue: initialValue } : {})}\n min={safeMin}\n max={safeMax}\n step={safeStep}\n initialValue={initialValue}\n {...(name !== undefined ? { name } : {})}\n {...(label !== undefined ? { label } : {})}\n {...(unit !== undefined ? { unit } : {})}\n {...($action !== undefined ? { $action } : {})}\n {...($dispatch !== undefined ? { $dispatch } : {})}\n />\n );\n}\n\nconst UNDO_WINDOW_SECONDS = 5;\n\ntype ButtonRenderProps = {\n label: string;\n buttonStyle?: (typeof BUTTON_STYLES)[number];\n block?: boolean;\n submit?: boolean;\n undoable?: boolean;\n children?: React.ReactNode;\n $status: GenerativeUIStatus;\n $action?: Action;\n $dispatch?: GenerativeUIDispatch;\n};\n\nfunction ButtonRender({\n label,\n buttonStyle,\n block,\n submit,\n undoable,\n children,\n $action,\n $dispatch,\n}: ButtonRenderProps) {\n const bindings = React.useContext(A2uiBindingContext!)?.fields;\n const bindingsRef = React.useRef(bindings);\n bindingsRef.current = bindings;\n const [remaining, setRemaining] = React.useState<number | undefined>(\n undefined,\n );\n const labelText = String(toTextContent(label) ?? \"\");\n const undoLabel = labelText.trim();\n const pendingAction = React.useRef<\n | {\n $action: Action;\n $dispatch: GenerativeUIDispatch;\n source: HTMLButtonElement;\n }\n | undefined\n >(undefined);\n const canUndo =\n undoable && !submit && $action !== undefined && $dispatch !== undefined;\n\n React.useEffect(() => {\n if (remaining === undefined) return;\n const timer = setTimeout(() => {\n if (remaining > 1) {\n setRemaining(remaining - 1);\n return;\n }\n const action = pendingAction.current;\n pendingAction.current = undefined;\n setRemaining(undefined);\n if (action)\n fire(\n action.$action,\n action.$dispatch,\n undefined,\n action.source,\n bindingsRef.current,\n );\n }, 1_000);\n return () => clearTimeout(timer);\n }, [remaining]);\n\n const cancelUndo = () => {\n pendingAction.current = undefined;\n setRemaining(undefined);\n };\n\n return (\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-state={remaining === undefined ? undefined : \"pending\"}\n data-aui-action={actionAttr($action)}\n aria-label={\n remaining === undefined\n ? undefined\n : undoLabel\n ? `Undo ${undoLabel}`\n : \"Undo\"\n }\n onClick={\n submit\n ? undefined\n : canUndo\n ? (e) => {\n if (remaining !== undefined) {\n cancelUndo();\n return;\n }\n pendingAction.current = {\n $action,\n $dispatch,\n source: e.currentTarget,\n };\n setRemaining(UNDO_WINDOW_SECONDS);\n }\n : (e) =>\n fire($action, $dispatch, undefined, e.currentTarget, bindings)\n }\n onKeyDown={\n canUndo\n ? (e) => {\n if (e.key !== \"Escape\" || remaining === undefined) return;\n e.preventDefault();\n cancelUndo();\n }\n : undefined\n }\n >\n {remaining === undefined ? (\n <>\n {labelText}\n {children}\n </>\n ) : (\n <>\n Undo <span data-aui=\"button-countdown\">{remaining}</span>\n <span data-aui=\"button-undo-status\" role=\"status\">\n {labelText} in {UNDO_WINDOW_SECONDS} seconds\n </span>\n </>\n )}\n </button>\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 undoable: z\n .boolean()\n .optional()\n .describe(\n \"Delay the action with an undo control, for sends and other hard-to-reverse actions.\",\n ),\n }),\n render: ButtonRender,\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 defaultValue: z.string().optional().describe(\"Initially selected value.\"),\n }),\n render: SelectRender,\n },\n Input: {\n description:\n \"A text input. Carries `$action` describing the on-submit behavior.\",\n properties: z.object({\n inputType: z\n .enum([\"text\", \"password\", \"number\"])\n .optional()\n .describe(\"Single-line input type. Values remain strings.\"),\n placeholder: z.string().optional().describe(\"Placeholder text.\"),\n multiline: z\n .boolean()\n .optional()\n .describe(\n 'Render a textarea instead of a single-line input; ignored when `inputType` is `\"password\"` or `\"number\"`.',\n ),\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 defaultValue: z.string().optional().describe(\"Initial text.\"),\n }),\n render: InputRender,\n },\n DatePicker: {\n description:\n \"A date, datetime, or time input. Carries `$action`, which runs once per committed value: a pick from the picker, or a typed value on blur or Enter.\",\n properties: z.object({\n inputType: z\n .enum([\"date\", \"datetime\", \"time\"])\n .optional()\n .describe(\n 'Temporal input type. Defaults to \"date\". Values remain strings.',\n ),\n value: z\n .string()\n .optional()\n .describe(\n \"Initial value: YYYY-MM-DD for date, HH:mm or HH:mm:ss with optional fraction of at most 9 digits for time, YYYY-MM-DDTHH:mm with optional :ss and fraction of at most 9 digits for datetime. A datetime with Z or ±HH:mm is an instant, displayed in the viewer's time zone and submitted with the same offset and precision. A datetime without an offset is local and submitted unchanged. An empty datetime submits with the viewer's offset and seconds.\",\n ),\n min: z\n .string()\n .optional()\n .describe(\n \"Minimum value: YYYY-MM-DD for date, HH:mm or HH:mm:ss with optional fraction of at most 9 digits for time, YYYY-MM-DDTHH:mm with optional :ss and fraction of at most 9 digits for datetime. Datetimes with Z or ±HH:mm are converted to the viewer's time zone.\",\n ),\n max: z\n .string()\n .optional()\n .describe(\n \"Maximum value: YYYY-MM-DD for date, HH:mm or HH:mm:ss with optional fraction of at most 9 digits for time, YYYY-MM-DDTHH:mm with optional :ss and fraction of at most 9 digits for datetime. Datetimes with Z or ±HH:mm are converted to the viewer's time zone.\",\n ),\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: DatePickerRender,\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 variant: z\n .enum([\"checkbox\", \"switch\"])\n .optional()\n .describe(\"Whether to render a checkbox or switch.\"),\n }),\n render: CheckboxRender,\n },\n Slider: {\n description:\n \"A numeric range control. Carries `$action` describing the committed value.\",\n properties: z.object({\n name: z.string().optional().describe(\"Field name used inside a Form.\"),\n label: z\n .string()\n .optional()\n .describe(\"Accessible label for the control.\"),\n min: z.number().describe(\"Minimum value.\"),\n max: z.number().describe(\"Maximum value.\"),\n step: z.number().optional().describe(\"Value increment. Defaults to 1.\"),\n defaultValue: z.number().optional().describe(\"Initial value.\"),\n unit: z.string().optional().describe(\"Unit shown with the value.\"),\n }),\n render: SliderRender,\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(describedOptionSchema).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 CheckboxGroup: {\n description:\n \"A group of checkbox options where any number can be checked. Carries `$action` describing the on-change behavior.\",\n properties: z.object({\n options: z.array(describedOptionSchema).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\n .array(z.string())\n .optional()\n .describe(\"Initially checked values.\"),\n }),\n render: CheckboxGroupRender,\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":"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"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const layoutVocabulary: {
|
|
3
|
-
Card: {
|
|
4
|
-
description: string;
|
|
5
|
-
properties: z.ZodObject<{
|
|
6
|
-
title: z.ZodOptional<z.ZodString>;
|
|
7
|
-
padding: z.ZodOptional<z.ZodNumber>;
|
|
8
|
-
background: z.ZodOptional<z.ZodString>;
|
|
9
|
-
asForm: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
-
confirm: z.ZodOptional<z.ZodObject<{
|
|
11
|
-
label: z.ZodString;
|
|
12
|
-
$action: z.ZodOptional<z.ZodObject<{
|
|
13
|
-
type: z.ZodString;
|
|
14
|
-
}, z.core.$loose>>;
|
|
15
|
-
}, z.core.$strip>>;
|
|
16
|
-
cancel: z.ZodOptional<z.ZodObject<{
|
|
17
|
-
label: z.ZodString;
|
|
18
|
-
$action: z.ZodOptional<z.ZodObject<{
|
|
19
|
-
type: z.ZodString;
|
|
20
|
-
}, z.core.$loose>>;
|
|
21
|
-
}, z.core.$strip>>;
|
|
22
|
-
}, z.core.$strip>;
|
|
23
|
-
render: ({ title, padding, background, asForm, confirm, cancel, $dispatch, children, }: any) => import("react").JSX.Element;
|
|
24
|
-
};
|
|
25
|
-
Col: {
|
|
26
|
-
description: string;
|
|
27
|
-
properties: z.ZodObject<{
|
|
28
|
-
gap: z.ZodOptional<z.ZodNumber>;
|
|
29
|
-
align: z.ZodOptional<z.ZodEnum<{
|
|
30
|
-
start: "start";
|
|
31
|
-
center: "center";
|
|
32
|
-
end: "end";
|
|
33
|
-
}>>;
|
|
34
|
-
}, z.core.$strip>;
|
|
35
|
-
render: ({ gap, align, children }: any) => import("react").JSX.Element;
|
|
36
|
-
};
|
|
37
|
-
Row: {
|
|
38
|
-
description: string;
|
|
39
|
-
properties: z.ZodObject<{
|
|
40
|
-
gap: z.ZodOptional<z.ZodNumber>;
|
|
41
|
-
align: z.ZodOptional<z.ZodEnum<{
|
|
42
|
-
start: "start";
|
|
43
|
-
center: "center";
|
|
44
|
-
end: "end";
|
|
45
|
-
}>>;
|
|
46
|
-
justify: z.ZodOptional<z.ZodEnum<{
|
|
47
|
-
start: "start";
|
|
48
|
-
center: "center";
|
|
49
|
-
end: "end";
|
|
50
|
-
between: "between";
|
|
51
|
-
}>>;
|
|
52
|
-
}, z.core.$strip>;
|
|
53
|
-
render: ({ gap, align, justify, children }: any) => import("react").JSX.Element;
|
|
54
|
-
};
|
|
55
|
-
Spacer: {
|
|
56
|
-
description: string;
|
|
57
|
-
properties: z.ZodObject<{}, z.core.$strip>;
|
|
58
|
-
render: () => import("react").JSX.Element;
|
|
59
|
-
};
|
|
60
|
-
Badge: {
|
|
61
|
-
description: string;
|
|
62
|
-
properties: z.ZodObject<{
|
|
63
|
-
value: z.ZodString;
|
|
64
|
-
variant: z.ZodOptional<z.ZodString>;
|
|
65
|
-
}, z.core.$strip>;
|
|
66
|
-
render: ({ value, variant, children }: any) => import("react").JSX.Element;
|
|
67
|
-
};
|
|
68
|
-
Box: {
|
|
69
|
-
description: string;
|
|
70
|
-
properties: z.ZodObject<{
|
|
71
|
-
width: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
72
|
-
height: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
73
|
-
radius: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"full">, z.ZodNumber]>>;
|
|
74
|
-
background: z.ZodOptional<z.ZodString>;
|
|
75
|
-
}, z.core.$strip>;
|
|
76
|
-
render: ({ width, height, radius, background, children }: any) => import("react").JSX.Element;
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/vocabulary/layout.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NE,CAAC"}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { ALIGNS, JUSTIFIES } from "../ir.js";
|
|
2
|
-
import { toTextContent } from "./toTextContent.js";
|
|
3
|
-
import { collectFormValuesFromEvent } from "./collectFormValues.js";
|
|
4
|
-
import { fire } from "./dispatch.js";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
//#region src/vocabulary/layout.tsx
|
|
8
|
-
const toCssLength = (value) => typeof value === "number" ? `${value}px` : value;
|
|
9
|
-
const cardActionSchema = z.looseObject({ type: z.string().describe("The action type, resolved by the host's action registry.") });
|
|
10
|
-
const cardFooterButtonSchema = z.object({
|
|
11
|
-
label: z.string().describe("Footer button label."),
|
|
12
|
-
$action: cardActionSchema.optional().describe("Action fired when the button is activated.")
|
|
13
|
-
});
|
|
14
|
-
const layoutVocabulary = {
|
|
15
|
-
Card: {
|
|
16
|
-
description: "A titled section of related content, the default way to break a response into parts. It renders as plain content, so several in a row read as one answer rather than a stack of boxes; it takes on a framed surface only when `background` is set, when `confirm`/`cancel` add a footer, or when it is a slot in a `Carousel`. Set `asForm` to collect named child control values on submit.",
|
|
17
|
-
properties: z.object({
|
|
18
|
-
title: z.string().optional().describe("Optional card title."),
|
|
19
|
-
padding: z.number().min(0).max(8).optional().describe("Padding in 4px units (e.g. 2 = 8px). 0 to 8 is the supported range."),
|
|
20
|
-
background: z.string().optional().describe("Background color or gradient (any CSS background value). Setting this also switches the card's own text to white, since a custom background makes the card a tinted surface; children can still opt into a different color explicitly."),
|
|
21
|
-
asForm: z.boolean().optional().describe("Render as a form; submitting it fires `confirm.$action` with every named child control's value, keyed by `name`."),
|
|
22
|
-
confirm: cardFooterButtonSchema.optional().describe("Confirm button shown in the footer."),
|
|
23
|
-
cancel: cardFooterButtonSchema.optional().describe("Cancel button shown in the footer.")
|
|
24
|
-
}),
|
|
25
|
-
render: ({ title, padding, background, asForm, confirm, cancel, $dispatch, children }) => {
|
|
26
|
-
const Root = asForm ? "form" : "section";
|
|
27
|
-
const cardTitle = toTextContent(title);
|
|
28
|
-
const footer = confirm || cancel ? /* @__PURE__ */ jsxs("footer", {
|
|
29
|
-
"data-aui": "card-footer",
|
|
30
|
-
children: [confirm ? /* @__PURE__ */ jsx("button", {
|
|
31
|
-
type: asForm ? "submit" : "button",
|
|
32
|
-
"data-aui": "card-confirm",
|
|
33
|
-
onClick: asForm ? void 0 : (e) => fire(confirm.$action, $dispatch, void 0, e.currentTarget),
|
|
34
|
-
children: toTextContent(confirm.label)
|
|
35
|
-
}) : null, cancel ? /* @__PURE__ */ jsx("button", {
|
|
36
|
-
type: "button",
|
|
37
|
-
"data-aui": "card-cancel",
|
|
38
|
-
onClick: (e) => fire(cancel.$action, $dispatch, void 0, e.currentTarget),
|
|
39
|
-
children: toTextContent(cancel.label)
|
|
40
|
-
}) : null]
|
|
41
|
-
}) : null;
|
|
42
|
-
return /* @__PURE__ */ jsxs(Root, {
|
|
43
|
-
"data-aui": "card",
|
|
44
|
-
"data-aui-padding": padding,
|
|
45
|
-
"data-aui-background": background,
|
|
46
|
-
"data-aui-surface": background !== void 0 || footer !== null ? "" : void 0,
|
|
47
|
-
style: background !== void 0 ? {
|
|
48
|
-
background,
|
|
49
|
-
color: "white"
|
|
50
|
-
} : void 0,
|
|
51
|
-
"data-aui-asform": asForm || void 0,
|
|
52
|
-
onSubmit: asForm ? (event) => {
|
|
53
|
-
event.preventDefault();
|
|
54
|
-
fire(confirm?.$action, $dispatch, collectFormValuesFromEvent(event), event.currentTarget);
|
|
55
|
-
} : void 0,
|
|
56
|
-
children: [
|
|
57
|
-
cardTitle ? /* @__PURE__ */ jsx("header", {
|
|
58
|
-
"data-aui": "card-title",
|
|
59
|
-
children: cardTitle
|
|
60
|
-
}) : null,
|
|
61
|
-
children,
|
|
62
|
-
footer
|
|
63
|
-
]
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
Col: {
|
|
68
|
-
description: "A vertical stack; children laid out top to bottom.",
|
|
69
|
-
properties: z.object({
|
|
70
|
-
gap: z.number().min(0).max(8).optional().describe("Gap between children in 4px units. 0 to 8 is the supported range."),
|
|
71
|
-
align: z.enum(ALIGNS).optional().describe("Cross-axis alignment.")
|
|
72
|
-
}),
|
|
73
|
-
render: ({ gap, align, children }) => /* @__PURE__ */ jsx("div", {
|
|
74
|
-
"data-aui": "col",
|
|
75
|
-
"data-aui-gap": gap,
|
|
76
|
-
"data-aui-align": align,
|
|
77
|
-
children
|
|
78
|
-
})
|
|
79
|
-
},
|
|
80
|
-
Row: {
|
|
81
|
-
description: "A horizontal row; children laid out left to right.",
|
|
82
|
-
properties: z.object({
|
|
83
|
-
gap: z.number().min(0).max(8).optional().describe("Gap between children in 4px units. 0 to 8 is the supported range."),
|
|
84
|
-
align: z.enum(ALIGNS).optional().describe("Cross-axis alignment."),
|
|
85
|
-
justify: z.enum(JUSTIFIES).optional().describe("Main-axis distribution.")
|
|
86
|
-
}),
|
|
87
|
-
render: ({ gap, align, justify, children }) => /* @__PURE__ */ jsx("div", {
|
|
88
|
-
"data-aui": "row",
|
|
89
|
-
"data-aui-gap": gap,
|
|
90
|
-
"data-aui-align": align,
|
|
91
|
-
"data-aui-justify": justify,
|
|
92
|
-
children
|
|
93
|
-
})
|
|
94
|
-
},
|
|
95
|
-
Spacer: {
|
|
96
|
-
description: "Empty space that pushes neighbors apart.",
|
|
97
|
-
properties: z.object({}),
|
|
98
|
-
render: () => /* @__PURE__ */ jsx("div", { "data-aui": "spacer" })
|
|
99
|
-
},
|
|
100
|
-
Badge: {
|
|
101
|
-
description: "A small labeled tag, e.g. for status or category.",
|
|
102
|
-
properties: z.object({
|
|
103
|
-
value: z.string().describe("Badge text."),
|
|
104
|
-
variant: z.string().optional().describe("Visual variant token.")
|
|
105
|
-
}),
|
|
106
|
-
render: ({ value, variant, children }) => /* @__PURE__ */ jsxs("span", {
|
|
107
|
-
"data-aui": "badge",
|
|
108
|
-
"data-aui-variant": variant,
|
|
109
|
-
children: [toTextContent(value), children]
|
|
110
|
-
})
|
|
111
|
-
},
|
|
112
|
-
Box: {
|
|
113
|
-
description: "A generic container for composition, e.g. a progress bar built from an outer track Box containing a partial-width fill Box. Size, radius, and background accept arbitrary values, so they render as inline styles rather than data-attribute hooks.",
|
|
114
|
-
properties: z.object({
|
|
115
|
-
width: z.union([z.string(), z.number()]).optional().describe("Width; a number is pixels."),
|
|
116
|
-
height: z.union([z.string(), z.number()]).optional().describe("Height; a number is pixels."),
|
|
117
|
-
radius: z.union([z.literal("full"), z.number()]).optional().describe("Corner radius; \"full\" is a pill/circle, a number is pixels."),
|
|
118
|
-
background: z.string().optional().describe("Background color or gradient (any CSS background value).")
|
|
119
|
-
}),
|
|
120
|
-
render: ({ width, height, radius, background, children }) => {
|
|
121
|
-
const style = {};
|
|
122
|
-
if (width !== void 0) style.width = toCssLength(width);
|
|
123
|
-
if (height !== void 0) style.height = toCssLength(height);
|
|
124
|
-
if (background !== void 0) style.background = background;
|
|
125
|
-
if (radius === "full") style.borderRadius = "9999px";
|
|
126
|
-
else if (typeof radius === "number") style.borderRadius = `${radius}px`;
|
|
127
|
-
return /* @__PURE__ */ jsx("div", {
|
|
128
|
-
"data-aui": "box",
|
|
129
|
-
"data-aui-radius": radius === "full" ? "full" : void 0,
|
|
130
|
-
style,
|
|
131
|
-
children
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
//#endregion
|
|
137
|
-
export { layoutVocabulary };
|
|
138
|
-
|
|
139
|
-
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","names":[],"sources":["../../src/vocabulary/layout.tsx"],"sourcesContent":["import type { CSSProperties, FormEvent } from \"react\";\nimport { z } from \"zod\";\nimport type { GenerativeUILibrary } from \"../types\";\nimport { ALIGNS, JUSTIFIES } from \"../ir\";\nimport { fire } from \"./dispatch\";\nimport { collectFormValuesFromEvent } from \"./collectFormValues\";\nimport { toTextContent } from \"./toTextContent\";\n\nconst toCssLength = (value: string | number): string =>\n typeof value === \"number\" ? `${value}px` : value;\n\nconst cardActionSchema = z.looseObject({\n type: z\n .string()\n .describe(\"The action type, resolved by the host's action registry.\"),\n});\n\nconst cardFooterButtonSchema = z.object({\n label: z.string().describe(\"Footer button label.\"),\n $action: cardActionSchema\n .optional()\n .describe(\"Action fired when the button is activated.\"),\n});\n\nexport const layoutVocabulary = {\n Card: {\n description:\n \"A titled section of related content, the default way to break a response into parts. It renders as plain content, so several in a row read as one answer rather than a stack of boxes; it takes on a framed surface only when `background` is set, when `confirm`/`cancel` add a footer, or when it is a slot in a `Carousel`. Set `asForm` to collect named child control values on submit.\",\n properties: z.object({\n title: z.string().optional().describe(\"Optional card title.\"),\n padding: z\n .number()\n .min(0)\n .max(8)\n .optional()\n .describe(\n \"Padding in 4px units (e.g. 2 = 8px). 0 to 8 is the supported range.\",\n ),\n background: z\n .string()\n .optional()\n .describe(\n \"Background color or gradient (any CSS background value). Setting this also switches the card's own text to white, since a custom background makes the card a tinted surface; children can still opt into a different color explicitly.\",\n ),\n asForm: z\n .boolean()\n .optional()\n .describe(\n \"Render as a form; submitting it fires `confirm.$action` with every named child control's value, keyed by `name`.\",\n ),\n confirm: cardFooterButtonSchema\n .optional()\n .describe(\"Confirm button shown in the footer.\"),\n cancel: cardFooterButtonSchema\n .optional()\n .describe(\"Cancel button shown in the footer.\"),\n }),\n render: ({\n title,\n padding,\n background,\n asForm,\n confirm,\n cancel,\n $dispatch,\n children,\n }) => {\n const Root = asForm ? \"form\" : \"section\";\n const cardTitle = toTextContent(title);\n const footer =\n confirm || cancel ? (\n <footer data-aui=\"card-footer\">\n {confirm ? (\n <button\n type={asForm ? \"submit\" : \"button\"}\n data-aui=\"card-confirm\"\n onClick={\n asForm\n ? undefined\n : (e) =>\n fire(\n confirm.$action,\n $dispatch,\n undefined,\n e.currentTarget,\n )\n }\n >\n {toTextContent(confirm.label)}\n </button>\n ) : null}\n {cancel ? (\n <button\n type=\"button\"\n data-aui=\"card-cancel\"\n onClick={(e) =>\n fire(cancel.$action, $dispatch, undefined, e.currentTarget)\n }\n >\n {toTextContent(cancel.label)}\n </button>\n ) : null}\n </footer>\n ) : null;\n\n return (\n <Root\n data-aui=\"card\"\n data-aui-padding={padding}\n data-aui-background={background}\n data-aui-surface={\n background !== undefined || footer !== null ? \"\" : undefined\n }\n style={\n background !== undefined\n ? { background, color: \"white\" }\n : undefined\n }\n data-aui-asform={asForm || undefined}\n onSubmit={\n asForm\n ? (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n fire(\n confirm?.$action,\n $dispatch,\n collectFormValuesFromEvent(event),\n event.currentTarget,\n );\n }\n : undefined\n }\n >\n {cardTitle ? (\n <header data-aui=\"card-title\">{cardTitle}</header>\n ) : null}\n {children}\n {footer}\n </Root>\n );\n },\n },\n Col: {\n description: \"A vertical stack; children laid out top to bottom.\",\n properties: z.object({\n gap: z\n .number()\n .min(0)\n .max(8)\n .optional()\n .describe(\n \"Gap between children in 4px units. 0 to 8 is the supported range.\",\n ),\n align: z.enum(ALIGNS).optional().describe(\"Cross-axis alignment.\"),\n }),\n render: ({ gap, align, children }) => (\n <div data-aui=\"col\" data-aui-gap={gap} data-aui-align={align}>\n {children}\n </div>\n ),\n },\n Row: {\n description: \"A horizontal row; children laid out left to right.\",\n properties: z.object({\n gap: z\n .number()\n .min(0)\n .max(8)\n .optional()\n .describe(\n \"Gap between children in 4px units. 0 to 8 is the supported range.\",\n ),\n align: z.enum(ALIGNS).optional().describe(\"Cross-axis alignment.\"),\n justify: z.enum(JUSTIFIES).optional().describe(\"Main-axis distribution.\"),\n }),\n render: ({ gap, align, justify, children }) => (\n <div\n data-aui=\"row\"\n data-aui-gap={gap}\n data-aui-align={align}\n data-aui-justify={justify}\n >\n {children}\n </div>\n ),\n },\n Spacer: {\n description: \"Empty space that pushes neighbors apart.\",\n properties: z.object({}),\n render: () => <div data-aui=\"spacer\" />,\n },\n Badge: {\n description: \"A small labeled tag, e.g. for status or category.\",\n properties: z.object({\n value: z.string().describe(\"Badge text.\"),\n variant: z.string().optional().describe(\"Visual variant token.\"),\n }),\n render: ({ value, variant, children }) => (\n <span data-aui=\"badge\" data-aui-variant={variant}>\n {toTextContent(value)}\n {children}\n </span>\n ),\n },\n Box: {\n description:\n \"A generic container for composition, e.g. a progress bar built from an outer track Box containing a partial-width fill Box. Size, radius, and background accept arbitrary values, so they render as inline styles rather than data-attribute hooks.\",\n properties: z.object({\n width: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\"Width; a number is pixels.\"),\n height: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\"Height; a number is pixels.\"),\n radius: z\n .union([z.literal(\"full\"), z.number()])\n .optional()\n .describe(\n 'Corner radius; \"full\" is a pill/circle, a number is pixels.',\n ),\n background: z\n .string()\n .optional()\n .describe(\"Background color or gradient (any CSS background value).\"),\n }),\n render: ({ width, height, radius, background, children }) => {\n const style: CSSProperties = {};\n if (width !== undefined) style.width = toCssLength(width);\n if (height !== undefined) style.height = toCssLength(height);\n if (background !== undefined) style.background = background;\n if (radius === \"full\") style.borderRadius = \"9999px\";\n else if (typeof radius === \"number\") style.borderRadius = `${radius}px`;\n\n return (\n <div\n data-aui=\"box\"\n data-aui-radius={radius === \"full\" ? \"full\" : undefined}\n style={style}\n >\n {children}\n </div>\n );\n },\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const listVocabulary: {
|
|
3
|
-
ListView: {
|
|
4
|
-
description: string;
|
|
5
|
-
properties: z.ZodObject<{}, z.core.$strip>;
|
|
6
|
-
render: ({ children }: any) => import("react").JSX.Element;
|
|
7
|
-
};
|
|
8
|
-
ListViewItem: {
|
|
9
|
-
description: string;
|
|
10
|
-
properties: z.ZodObject<{}, z.core.$strip>;
|
|
11
|
-
render: ({ $action, $dispatch, children }: any) => import("react").JSX.Element;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/vocabulary/list.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,cAAc;;;;;;;;;;;CA0CI,CAAC"}
|
package/dist/vocabulary/list.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { fire } from "./dispatch.js";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
//#region src/vocabulary/list.tsx
|
|
5
|
-
const INTERACTIVE_DESCENDANT_SELECTOR = "button, a, input, select, textarea, label, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"radio\"], [role=\"switch\"], [role=\"textbox\"], [role=\"combobox\"], [role=\"menuitem\"]";
|
|
6
|
-
const listVocabulary = {
|
|
7
|
-
ListView: {
|
|
8
|
-
description: "A vertical list container. Wrap `ListViewItem` children as rows.",
|
|
9
|
-
properties: z.object({}),
|
|
10
|
-
render: ({ children }) => /* @__PURE__ */ jsx("ul", {
|
|
11
|
-
"data-aui": "listview",
|
|
12
|
-
children
|
|
13
|
-
})
|
|
14
|
-
},
|
|
15
|
-
ListViewItem: {
|
|
16
|
-
description: "A row inside a ListView. Carries `$action` to make the whole row clickable and keyboard-activatable.",
|
|
17
|
-
properties: z.object({}),
|
|
18
|
-
render: ({ $action, $dispatch, children }) => {
|
|
19
|
-
if (!$action || !$dispatch) return /* @__PURE__ */ jsx("li", {
|
|
20
|
-
"data-aui": "listview-item",
|
|
21
|
-
children
|
|
22
|
-
});
|
|
23
|
-
return /* @__PURE__ */ jsx("li", {
|
|
24
|
-
"data-aui": "listview-item",
|
|
25
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
26
|
-
role: "button",
|
|
27
|
-
tabIndex: 0,
|
|
28
|
-
"data-aui": "listview-item-trigger",
|
|
29
|
-
onClick: (event) => {
|
|
30
|
-
const hit = event.target.closest(INTERACTIVE_DESCENDANT_SELECTOR);
|
|
31
|
-
if (hit !== null && hit !== event.currentTarget) return;
|
|
32
|
-
fire($action, $dispatch, void 0, event.currentTarget);
|
|
33
|
-
},
|
|
34
|
-
onKeyDown: (event) => {
|
|
35
|
-
if (event.key !== "Enter" && event.key !== " ") return;
|
|
36
|
-
const hit = event.target.closest(INTERACTIVE_DESCENDANT_SELECTOR);
|
|
37
|
-
if (hit !== null && hit !== event.currentTarget) return;
|
|
38
|
-
if (event.key === " ") event.preventDefault();
|
|
39
|
-
fire($action, $dispatch, void 0, event.currentTarget);
|
|
40
|
-
},
|
|
41
|
-
children
|
|
42
|
-
})
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
//#endregion
|
|
48
|
-
export { listVocabulary };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":[],"sources":["../../src/vocabulary/list.tsx"],"sourcesContent":["import { z } from \"zod\";\nimport type { GenerativeUILibrary } from \"../types\";\nimport { fire } from \"./dispatch\";\n\nconst INTERACTIVE_DESCENDANT_SELECTOR =\n 'button, a, input, select, textarea, label, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"radio\"], [role=\"switch\"], [role=\"textbox\"], [role=\"combobox\"], [role=\"menuitem\"]';\n\nexport const listVocabulary = {\n ListView: {\n description:\n \"A vertical list container. Wrap `ListViewItem` children as rows.\",\n properties: z.object({}),\n render: ({ children }) => <ul data-aui=\"listview\">{children}</ul>,\n },\n ListViewItem: {\n description:\n \"A row inside a ListView. Carries `$action` to make the whole row clickable and keyboard-activatable.\",\n properties: z.object({}),\n render: ({ $action, $dispatch, children }) => {\n if (!$action || !$dispatch) {\n return <li data-aui=\"listview-item\">{children}</li>;\n }\n return (\n <li data-aui=\"listview-item\">\n <div\n role=\"button\"\n tabIndex={0}\n data-aui=\"listview-item-trigger\"\n onClick={(event) => {\n const target = event.target as Element;\n const hit = target.closest(INTERACTIVE_DESCENDANT_SELECTOR);\n if (hit !== null && hit !== event.currentTarget) return;\n fire($action, $dispatch, undefined, event.currentTarget);\n }}\n onKeyDown={(event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n const target = event.target as Element;\n const hit = target.closest(INTERACTIVE_DESCENDANT_SELECTOR);\n if (hit !== null && hit !== event.currentTarget) return;\n if (event.key === \" \") event.preventDefault();\n fire($action, $dispatch, undefined, event.currentTarget);\n }}\n >\n {children}\n </div>\n </li>\n );\n },\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":";;;;AAIA,MAAM,kCACJ;AAEF,MAAa,iBAAiB;CAC5B,UAAU;EACR,aACE;EACF,YAAY,EAAE,OAAO,CAAC,CAAC;EACvB,SAAS,EAAE,eAAe,oBAAC,MAAD;GAAI,YAAS;GAAY;EAAa,CAAA;CAClE;CACA,cAAc;EACZ,aACE;EACF,YAAY,EAAE,OAAO,CAAC,CAAC;EACvB,SAAS,EAAE,SAAS,WAAW,eAAe;GAC5C,IAAI,CAAC,WAAW,CAAC,WACf,OAAO,oBAAC,MAAD;IAAI,YAAS;IAAiB;GAAa,CAAA;GAEpD,OACE,oBAAC,MAAD;IAAI,YAAS;IACX,UAAA,oBAAC,OAAD;KACE,MAAK;KACL,UAAU;KACV,YAAS;KACT,UAAU,UAAU;MAElB,MAAM,MADS,MAAM,OACF,QAAQ,+BAA+B;MAC1D,IAAI,QAAQ,QAAQ,QAAQ,MAAM,eAAe;MACjD,KAAK,SAAS,WAAW,KAAA,GAAW,MAAM,aAAa;KACzD;KACA,YAAY,UAAU;MACpB,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;MAEhD,MAAM,MADS,MAAM,OACF,QAAQ,+BAA+B;MAC1D,IAAI,QAAQ,QAAQ,QAAQ,MAAM,eAAe;MACjD,IAAI,MAAM,QAAQ,KAAK,MAAM,eAAe;MAC5C,KAAK,SAAS,WAAW,KAAA,GAAW,MAAM,aAAa;KACzD;KAEC;IACE,CAAA;GACH,CAAA;EAER;CACF;AACF"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const mediaVocabulary: {
|
|
3
|
-
Image: {
|
|
4
|
-
description: string;
|
|
5
|
-
properties: z.ZodObject<{
|
|
6
|
-
src: z.ZodString;
|
|
7
|
-
alt: z.ZodString;
|
|
8
|
-
size: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
9
|
-
sm: "sm";
|
|
10
|
-
md: "md";
|
|
11
|
-
lg: "lg";
|
|
12
|
-
}>, z.ZodNumber]>>;
|
|
13
|
-
round: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
-
}, z.core.$strip>;
|
|
15
|
-
render: ({ src, alt, size, round }: any) => import("react").JSX.Element;
|
|
16
|
-
};
|
|
17
|
-
Divider: {
|
|
18
|
-
description: string;
|
|
19
|
-
properties: z.ZodObject<{
|
|
20
|
-
flush: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
-
}, z.core.$strip>;
|
|
22
|
-
render: ({ flush }: any) => import("react").JSX.Element;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=media.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/vocabulary/media.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;CAkDG,CAAC"}
|
package/dist/vocabulary/media.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { IMAGE_SIZE_TOKENS } from "../ir.js";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
//#region src/vocabulary/media.tsx
|
|
5
|
-
const mediaVocabulary = {
|
|
6
|
-
Image: {
|
|
7
|
-
description: "An image. Provide `src` and `alt` for accessibility.",
|
|
8
|
-
properties: z.object({
|
|
9
|
-
src: z.string().describe("Image URL."),
|
|
10
|
-
alt: z.string().describe("Alt text for accessibility."),
|
|
11
|
-
size: z.union([z.enum(IMAGE_SIZE_TOKENS), z.number()]).optional().describe("Size token or pixel value."),
|
|
12
|
-
round: z.boolean().optional().describe("Render as a circular avatar (fully rounded, cropped to a square).")
|
|
13
|
-
}),
|
|
14
|
-
render: ({ src, alt, size, round }) => {
|
|
15
|
-
const numericSize = typeof size === "number" ? size : void 0;
|
|
16
|
-
const style = numericSize === void 0 ? void 0 : round ? {
|
|
17
|
-
width: `${numericSize}px`,
|
|
18
|
-
height: `${numericSize}px`
|
|
19
|
-
} : { maxWidth: `${numericSize}px` };
|
|
20
|
-
return /* @__PURE__ */ jsx("img", {
|
|
21
|
-
"data-aui": "image",
|
|
22
|
-
"data-aui-size": numericSize === void 0 ? size : void 0,
|
|
23
|
-
"data-aui-round": round || void 0,
|
|
24
|
-
src,
|
|
25
|
-
alt,
|
|
26
|
-
style
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
Divider: {
|
|
31
|
-
description: "A horizontal rule between sections.",
|
|
32
|
-
properties: z.object({ flush: z.boolean().optional().describe("Whether the divider spans the full width with no inset.") }),
|
|
33
|
-
render: ({ flush }) => /* @__PURE__ */ jsx("hr", {
|
|
34
|
-
"data-aui": "divider",
|
|
35
|
-
"data-aui-flush": flush || void 0
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
//#endregion
|
|
40
|
-
export { mediaVocabulary };
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=media.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","names":[],"sources":["../../src/vocabulary/media.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport { z } from \"zod\";\nimport type { GenerativeUILibrary } from \"../types\";\nimport { IMAGE_SIZE_TOKENS } from \"../ir\";\n\nexport const mediaVocabulary = {\n Image: {\n description: \"An image. Provide `src` and `alt` for accessibility.\",\n properties: z.object({\n src: z.string().describe(\"Image URL.\"),\n alt: z.string().describe(\"Alt text for accessibility.\"),\n size: z\n .union([z.enum(IMAGE_SIZE_TOKENS), z.number()])\n .optional()\n .describe(\"Size token or pixel value.\"),\n round: z\n .boolean()\n .optional()\n .describe(\n \"Render as a circular avatar (fully rounded, cropped to a square).\",\n ),\n }),\n render: ({ src, alt, size, round }) => {\n const numericSize = typeof size === \"number\" ? size : undefined;\n const style: CSSProperties | undefined =\n numericSize === undefined\n ? undefined\n : round\n ? { width: `${numericSize}px`, height: `${numericSize}px` }\n : { maxWidth: `${numericSize}px` };\n\n return (\n <img\n data-aui=\"image\"\n data-aui-size={numericSize === undefined ? size : undefined}\n data-aui-round={round || undefined}\n src={src}\n alt={alt}\n style={style}\n />\n );\n },\n },\n Divider: {\n description: \"A horizontal rule between sections.\",\n properties: z.object({\n flush: z\n .boolean()\n .optional()\n .describe(\"Whether the divider spans the full width with no inset.\"),\n }),\n render: ({ flush }) => (\n <hr data-aui=\"divider\" data-aui-flush={flush || undefined} />\n ),\n },\n} satisfies GenerativeUILibrary;\n"],"mappings":";;;;AAKA,MAAa,kBAAkB;CAC7B,OAAO;EACL,aAAa;EACb,YAAY,EAAE,OAAO;GACnB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,YAAY;GACrC,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,6BAA6B;GACtD,MAAM,EACH,MAAM,CAAC,EAAE,KAAK,iBAAiB,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAC9C,SAAS,CAAC,CACV,SAAS,4BAA4B;GACxC,OAAO,EACJ,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SACC,mEACF;EACJ,CAAC;EACD,SAAS,EAAE,KAAK,KAAK,MAAM,YAAY;GACrC,MAAM,cAAc,OAAO,SAAS,WAAW,OAAO,KAAA;GACtD,MAAM,QACJ,gBAAgB,KAAA,IACZ,KAAA,IACA,QACE;IAAE,OAAO,GAAG,YAAY;IAAK,QAAQ,GAAG,YAAY;GAAI,IACxD,EAAE,UAAU,GAAG,YAAY,IAAI;GAEvC,OACE,oBAAC,OAAD;IACE,YAAS;IACT,iBAAe,gBAAgB,KAAA,IAAY,OAAO,KAAA;IAClD,kBAAgB,SAAS,KAAA;IACpB;IACA;IACE;GACR,CAAA;EAEL;CACF;CACA,SAAS;EACP,aAAa;EACb,YAAY,EAAE,OAAO,EACnB,OAAO,EACJ,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,SAAS,yDAAyD,EACvE,CAAC;EACD,SAAS,EAAE,YACT,oBAAC,MAAD;GAAI,YAAS;GAAU,kBAAgB,SAAS,KAAA;EAAY,CAAA;CAEhE;AACF"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const textVocabulary: {
|
|
3
|
-
Header: {
|
|
4
|
-
description: string;
|
|
5
|
-
properties: z.ZodObject<{
|
|
6
|
-
text: z.ZodString;
|
|
7
|
-
size: z.ZodOptional<z.ZodEnum<{
|
|
8
|
-
sm: "sm";
|
|
9
|
-
md: "md";
|
|
10
|
-
lg: "lg";
|
|
11
|
-
xl: "xl";
|
|
12
|
-
"2xl": "2xl";
|
|
13
|
-
"3xl": "3xl";
|
|
14
|
-
}>>;
|
|
15
|
-
}, z.core.$strip>;
|
|
16
|
-
render: ({ text, size, children }: any) => import("react").JSX.Element;
|
|
17
|
-
};
|
|
18
|
-
Text: {
|
|
19
|
-
description: string;
|
|
20
|
-
properties: z.ZodObject<{
|
|
21
|
-
value: z.ZodString;
|
|
22
|
-
size: z.ZodOptional<z.ZodEnum<{
|
|
23
|
-
sm: "sm";
|
|
24
|
-
md: "md";
|
|
25
|
-
lg: "lg";
|
|
26
|
-
xl: "xl";
|
|
27
|
-
"2xl": "2xl";
|
|
28
|
-
"3xl": "3xl";
|
|
29
|
-
}>>;
|
|
30
|
-
weight: z.ZodOptional<z.ZodEnum<{
|
|
31
|
-
bold: "bold";
|
|
32
|
-
normal: "normal";
|
|
33
|
-
medium: "medium";
|
|
34
|
-
semibold: "semibold";
|
|
35
|
-
}>>;
|
|
36
|
-
color: z.ZodOptional<z.ZodEnum<{
|
|
37
|
-
emphasis: "emphasis";
|
|
38
|
-
secondary: "secondary";
|
|
39
|
-
"alpha-70": "alpha-70";
|
|
40
|
-
white: "white";
|
|
41
|
-
"white-70": "white-70";
|
|
42
|
-
"white-50": "white-50";
|
|
43
|
-
}>>;
|
|
44
|
-
}, z.core.$strip>;
|
|
45
|
-
streamProperties: true;
|
|
46
|
-
render: ({ value, size, weight, color, children }: any) => import("react").JSX.Element;
|
|
47
|
-
};
|
|
48
|
-
Caption: {
|
|
49
|
-
description: string;
|
|
50
|
-
properties: z.ZodObject<{
|
|
51
|
-
value: z.ZodString;
|
|
52
|
-
}, z.core.$strip>;
|
|
53
|
-
streamProperties: true;
|
|
54
|
-
render: ({ value, children }: any) => import("react").JSX.Element;
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/vocabulary/text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDI,CAAC"}
|