@copilotkit/a2ui-renderer 1.51.4 → 1.51.5-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/A2UIMessageRenderer.cjs +135 -0
- package/dist/A2UIMessageRenderer.cjs.map +1 -0
- package/dist/A2UIMessageRenderer.d.cts +11 -0
- package/dist/A2UIMessageRenderer.d.cts.map +1 -0
- package/dist/A2UIMessageRenderer.d.mts +11 -0
- package/dist/A2UIMessageRenderer.d.mts.map +1 -0
- package/dist/A2UIMessageRenderer.mjs +134 -0
- package/dist/A2UIMessageRenderer.mjs.map +1 -0
- package/dist/A2UIViewer.cjs +154 -0
- package/dist/A2UIViewer.cjs.map +1 -0
- package/dist/A2UIViewer.d.cts +39 -0
- package/dist/A2UIViewer.d.cts.map +1 -0
- package/dist/A2UIViewer.d.mts +39 -0
- package/dist/A2UIViewer.d.mts.map +1 -0
- package/dist/A2UIViewer.mjs +152 -0
- package/dist/A2UIViewer.mjs.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/index.cjs +8 -0
- package/dist/index.d.cts +15 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +15 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.umd.js +3070 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/react-renderer/components/content/AudioPlayer.cjs +34 -0
- package/dist/react-renderer/components/content/AudioPlayer.cjs.map +1 -0
- package/dist/react-renderer/components/content/AudioPlayer.mjs +33 -0
- package/dist/react-renderer/components/content/AudioPlayer.mjs.map +1 -0
- package/dist/react-renderer/components/content/Divider.cjs +31 -0
- package/dist/react-renderer/components/content/Divider.cjs.map +1 -0
- package/dist/react-renderer/components/content/Divider.mjs +30 -0
- package/dist/react-renderer/components/content/Divider.mjs.map +1 -0
- package/dist/react-renderer/components/content/Icon.cjs +50 -0
- package/dist/react-renderer/components/content/Icon.cjs.map +1 -0
- package/dist/react-renderer/components/content/Icon.mjs +49 -0
- package/dist/react-renderer/components/content/Icon.mjs.map +1 -0
- package/dist/react-renderer/components/content/Image.cjs +43 -0
- package/dist/react-renderer/components/content/Image.cjs.map +1 -0
- package/dist/react-renderer/components/content/Image.mjs +42 -0
- package/dist/react-renderer/components/content/Image.mjs.map +1 -0
- package/dist/react-renderer/components/content/Text.cjs +131 -0
- package/dist/react-renderer/components/content/Text.cjs.map +1 -0
- package/dist/react-renderer/components/content/Text.mjs +129 -0
- package/dist/react-renderer/components/content/Text.mjs.map +1 -0
- package/dist/react-renderer/components/content/Video.cjs +56 -0
- package/dist/react-renderer/components/content/Video.cjs.map +1 -0
- package/dist/react-renderer/components/content/Video.mjs +55 -0
- package/dist/react-renderer/components/content/Video.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/Button.cjs +39 -0
- package/dist/react-renderer/components/interactive/Button.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/Button.mjs +38 -0
- package/dist/react-renderer/components/interactive/Button.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/CheckBox.cjs +58 -0
- package/dist/react-renderer/components/interactive/CheckBox.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/CheckBox.mjs +57 -0
- package/dist/react-renderer/components/interactive/CheckBox.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/DateTimeInput.cjs +65 -0
- package/dist/react-renderer/components/interactive/DateTimeInput.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/DateTimeInput.mjs +64 -0
- package/dist/react-renderer/components/interactive/DateTimeInput.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/MultipleChoice.cjs +54 -0
- package/dist/react-renderer/components/interactive/MultipleChoice.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/MultipleChoice.mjs +53 -0
- package/dist/react-renderer/components/interactive/MultipleChoice.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/Slider.cjs +72 -0
- package/dist/react-renderer/components/interactive/Slider.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/Slider.mjs +71 -0
- package/dist/react-renderer/components/interactive/Slider.mjs.map +1 -0
- package/dist/react-renderer/components/interactive/TextField.cjs +74 -0
- package/dist/react-renderer/components/interactive/TextField.cjs.map +1 -0
- package/dist/react-renderer/components/interactive/TextField.mjs +73 -0
- package/dist/react-renderer/components/interactive/TextField.mjs.map +1 -0
- package/dist/react-renderer/components/layout/Card.cjs +46 -0
- package/dist/react-renderer/components/layout/Card.cjs.map +1 -0
- package/dist/react-renderer/components/layout/Card.mjs +45 -0
- package/dist/react-renderer/components/layout/Card.mjs.map +1 -0
- package/dist/react-renderer/components/layout/Column.cjs +43 -0
- package/dist/react-renderer/components/layout/Column.cjs.map +1 -0
- package/dist/react-renderer/components/layout/Column.mjs +42 -0
- package/dist/react-renderer/components/layout/Column.mjs.map +1 -0
- package/dist/react-renderer/components/layout/List.cjs +41 -0
- package/dist/react-renderer/components/layout/List.cjs.map +1 -0
- package/dist/react-renderer/components/layout/List.mjs +40 -0
- package/dist/react-renderer/components/layout/List.mjs.map +1 -0
- package/dist/react-renderer/components/layout/Modal.cjs +92 -0
- package/dist/react-renderer/components/layout/Modal.cjs.map +1 -0
- package/dist/react-renderer/components/layout/Modal.mjs +91 -0
- package/dist/react-renderer/components/layout/Modal.mjs.map +1 -0
- package/dist/react-renderer/components/layout/Row.cjs +43 -0
- package/dist/react-renderer/components/layout/Row.cjs.map +1 -0
- package/dist/react-renderer/components/layout/Row.mjs +42 -0
- package/dist/react-renderer/components/layout/Row.mjs.map +1 -0
- package/dist/react-renderer/components/layout/Tabs.cjs +47 -0
- package/dist/react-renderer/components/layout/Tabs.cjs.map +1 -0
- package/dist/react-renderer/components/layout/Tabs.mjs +46 -0
- package/dist/react-renderer/components/layout/Tabs.mjs.map +1 -0
- package/dist/react-renderer/core/A2UIProvider.cjs +123 -0
- package/dist/react-renderer/core/A2UIProvider.cjs.map +1 -0
- package/dist/react-renderer/core/A2UIProvider.mjs +120 -0
- package/dist/react-renderer/core/A2UIProvider.mjs.map +1 -0
- package/dist/react-renderer/core/A2UIRenderer.cjs +93 -0
- package/dist/react-renderer/core/A2UIRenderer.cjs.map +1 -0
- package/dist/react-renderer/core/A2UIRenderer.mjs +92 -0
- package/dist/react-renderer/core/A2UIRenderer.mjs.map +1 -0
- package/dist/react-renderer/core/ComponentNode.cjs +53 -0
- package/dist/react-renderer/core/ComponentNode.cjs.map +1 -0
- package/dist/react-renderer/core/ComponentNode.mjs +52 -0
- package/dist/react-renderer/core/ComponentNode.mjs.map +1 -0
- package/dist/react-renderer/hooks/useA2UI.cjs +46 -0
- package/dist/react-renderer/hooks/useA2UI.cjs.map +1 -0
- package/dist/react-renderer/hooks/useA2UI.mjs +46 -0
- package/dist/react-renderer/hooks/useA2UI.mjs.map +1 -0
- package/dist/react-renderer/hooks/useA2UIComponent.cjs +173 -0
- package/dist/react-renderer/hooks/useA2UIComponent.cjs.map +1 -0
- package/dist/react-renderer/hooks/useA2UIComponent.mjs +172 -0
- package/dist/react-renderer/hooks/useA2UIComponent.mjs.map +1 -0
- package/dist/react-renderer/lib/utils.cjs +39 -0
- package/dist/react-renderer/lib/utils.cjs.map +1 -0
- package/dist/react-renderer/lib/utils.mjs +37 -0
- package/dist/react-renderer/lib/utils.mjs.map +1 -0
- package/dist/react-renderer/registry/ComponentRegistry.cjs +114 -0
- package/dist/react-renderer/registry/ComponentRegistry.cjs.map +1 -0
- package/dist/react-renderer/registry/ComponentRegistry.mjs +113 -0
- package/dist/react-renderer/registry/ComponentRegistry.mjs.map +1 -0
- package/dist/react-renderer/registry/defaultCatalog.cjs +57 -0
- package/dist/react-renderer/registry/defaultCatalog.cjs.map +1 -0
- package/dist/react-renderer/registry/defaultCatalog.mjs +57 -0
- package/dist/react-renderer/registry/defaultCatalog.mjs.map +1 -0
- package/dist/react-renderer/styles/index.cjs +458 -0
- package/dist/react-renderer/styles/index.cjs.map +1 -0
- package/dist/react-renderer/styles/{index.js → index.mjs} +47 -64
- package/dist/react-renderer/styles/index.mjs.map +1 -0
- package/dist/react-renderer/styles/reset.cjs +29 -0
- package/dist/react-renderer/styles/reset.cjs.map +1 -0
- package/dist/react-renderer/styles/reset.mjs +28 -0
- package/dist/react-renderer/styles/reset.mjs.map +1 -0
- package/dist/react-renderer/theme/ThemeContext.cjs +35 -0
- package/dist/react-renderer/theme/ThemeContext.cjs.map +1 -0
- package/dist/react-renderer/theme/ThemeContext.mjs +33 -0
- package/dist/react-renderer/theme/ThemeContext.mjs.map +1 -0
- package/dist/react-renderer/theme/litTheme.cjs +368 -0
- package/dist/react-renderer/theme/litTheme.cjs.map +1 -0
- package/dist/react-renderer/theme/litTheme.mjs +367 -0
- package/dist/react-renderer/theme/litTheme.mjs.map +1 -0
- package/dist/react-renderer/theme/utils.cjs +41 -0
- package/dist/react-renderer/theme/utils.cjs.map +1 -0
- package/dist/react-renderer/theme/utils.mjs +39 -0
- package/dist/react-renderer/theme/utils.mjs.map +1 -0
- package/dist/theme/viewer-theme.cjs +366 -0
- package/dist/theme/viewer-theme.cjs.map +1 -0
- package/dist/theme/viewer-theme.d.cts +7 -0
- package/dist/theme/viewer-theme.d.cts.map +1 -0
- package/dist/theme/viewer-theme.d.mts +7 -0
- package/dist/theme/viewer-theme.d.mts.map +1 -0
- package/dist/theme/viewer-theme.mjs +365 -0
- package/dist/theme/viewer-theme.mjs.map +1 -0
- package/package.json +14 -9
- package/dist/.tsbuildinfo +0 -1
- package/dist/A2UIMessageRenderer.d.ts +0 -7
- package/dist/A2UIMessageRenderer.d.ts.map +0 -1
- package/dist/A2UIMessageRenderer.js +0 -126
- package/dist/A2UIMessageRenderer.js.map +0 -1
- package/dist/A2UIViewer.d.ts +0 -32
- package/dist/A2UIViewer.d.ts.map +0 -1
- package/dist/A2UIViewer.js +0 -121
- package/dist/A2UIViewer.js.map +0 -1
- package/dist/__tests__/A2UIMessageRenderer.test.d.ts +0 -2
- package/dist/__tests__/A2UIMessageRenderer.test.d.ts.map +0 -1
- package/dist/__tests__/A2UIMessageRenderer.test.js +0 -229
- package/dist/__tests__/A2UIMessageRenderer.test.js.map +0 -1
- package/dist/__tests__/clsx-shim.d.ts +0 -8
- package/dist/__tests__/clsx-shim.d.ts.map +0 -1
- package/dist/__tests__/clsx-shim.js +0 -24
- package/dist/__tests__/clsx-shim.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -2
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -29
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -19
- package/dist/index.js.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.d.ts +0 -8
- package/dist/react-renderer/components/content/AudioPlayer.d.ts.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.js +0 -23
- package/dist/react-renderer/components/content/AudioPlayer.js.map +0 -1
- package/dist/react-renderer/components/content/Divider.d.ts +0 -13
- package/dist/react-renderer/components/content/Divider.d.ts.map +0 -1
- package/dist/react-renderer/components/content/Divider.js +0 -22
- package/dist/react-renderer/components/content/Divider.js.map +0 -1
- package/dist/react-renderer/components/content/Icon.d.ts +0 -16
- package/dist/react-renderer/components/content/Icon.d.ts.map +0 -1
- package/dist/react-renderer/components/content/Icon.js +0 -40
- package/dist/react-renderer/components/content/Icon.js.map +0 -1
- package/dist/react-renderer/components/content/Image.d.ts +0 -11
- package/dist/react-renderer/components/content/Image.d.ts.map +0 -1
- package/dist/react-renderer/components/content/Image.js +0 -34
- package/dist/react-renderer/components/content/Image.js.map +0 -1
- package/dist/react-renderer/components/content/Text.d.ts +0 -28
- package/dist/react-renderer/components/content/Text.d.ts.map +0 -1
- package/dist/react-renderer/components/content/Text.js +0 -134
- package/dist/react-renderer/components/content/Text.js.map +0 -1
- package/dist/react-renderer/components/content/Video.d.ts +0 -10
- package/dist/react-renderer/components/content/Video.d.ts.map +0 -1
- package/dist/react-renderer/components/content/Video.js +0 -41
- package/dist/react-renderer/components/content/Video.js.map +0 -1
- package/dist/react-renderer/components/content/index.d.ts +0 -7
- package/dist/react-renderer/components/content/index.d.ts.map +0 -1
- package/dist/react-renderer/components/content/index.js +0 -7
- package/dist/react-renderer/components/content/index.js.map +0 -1
- package/dist/react-renderer/components/interactive/Button.d.ts +0 -11
- package/dist/react-renderer/components/interactive/Button.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/Button.js +0 -27
- package/dist/react-renderer/components/interactive/Button.js.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.d.ts +0 -10
- package/dist/react-renderer/components/interactive/CheckBox.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.js +0 -55
- package/dist/react-renderer/components/interactive/CheckBox.js.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.d.ts +0 -10
- package/dist/react-renderer/components/interactive/DateTimeInput.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.js +0 -68
- package/dist/react-renderer/components/interactive/DateTimeInput.js.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.d.ts +0 -11
- package/dist/react-renderer/components/interactive/MultipleChoice.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.js +0 -43
- package/dist/react-renderer/components/interactive/MultipleChoice.js.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.d.ts +0 -10
- package/dist/react-renderer/components/interactive/Slider.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.js +0 -62
- package/dist/react-renderer/components/interactive/Slider.js.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.d.ts +0 -10
- package/dist/react-renderer/components/interactive/TextField.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.js +0 -59
- package/dist/react-renderer/components/interactive/TextField.js.map +0 -1
- package/dist/react-renderer/components/interactive/index.d.ts +0 -7
- package/dist/react-renderer/components/interactive/index.d.ts.map +0 -1
- package/dist/react-renderer/components/interactive/index.js +0 -7
- package/dist/react-renderer/components/interactive/index.js.map +0 -1
- package/dist/react-renderer/components/layout/Card.d.ts +0 -17
- package/dist/react-renderer/components/layout/Card.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/Card.js +0 -39
- package/dist/react-renderer/components/layout/Card.js.map +0 -1
- package/dist/react-renderer/components/layout/Column.d.ts +0 -10
- package/dist/react-renderer/components/layout/Column.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/Column.js +0 -33
- package/dist/react-renderer/components/layout/Column.js.map +0 -1
- package/dist/react-renderer/components/layout/List.d.ts +0 -10
- package/dist/react-renderer/components/layout/List.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/List.js +0 -32
- package/dist/react-renderer/components/layout/List.js.map +0 -1
- package/dist/react-renderer/components/layout/Modal.d.ts +0 -15
- package/dist/react-renderer/components/layout/Modal.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/Modal.js +0 -65
- package/dist/react-renderer/components/layout/Modal.js.map +0 -1
- package/dist/react-renderer/components/layout/Row.d.ts +0 -10
- package/dist/react-renderer/components/layout/Row.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/Row.js +0 -33
- package/dist/react-renderer/components/layout/Row.js.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.d.ts +0 -8
- package/dist/react-renderer/components/layout/Tabs.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.js +0 -29
- package/dist/react-renderer/components/layout/Tabs.js.map +0 -1
- package/dist/react-renderer/components/layout/index.d.ts +0 -7
- package/dist/react-renderer/components/layout/index.d.ts.map +0 -1
- package/dist/react-renderer/components/layout/index.js +0 -7
- package/dist/react-renderer/components/layout/index.js.map +0 -1
- package/dist/react-renderer/core/A2UIProvider.d.ts +0 -82
- package/dist/react-renderer/core/A2UIProvider.d.ts.map +0 -1
- package/dist/react-renderer/core/A2UIProvider.js +0 -156
- package/dist/react-renderer/core/A2UIProvider.js.map +0 -1
- package/dist/react-renderer/core/A2UIRenderer.d.ts +0 -36
- package/dist/react-renderer/core/A2UIRenderer.d.ts.map +0 -1
- package/dist/react-renderer/core/A2UIRenderer.js +0 -83
- package/dist/react-renderer/core/A2UIRenderer.js.map +0 -1
- package/dist/react-renderer/core/A2UIViewer.d.ts +0 -56
- package/dist/react-renderer/core/A2UIViewer.d.ts.map +0 -1
- package/dist/react-renderer/core/A2UIViewer.js +0 -135
- package/dist/react-renderer/core/A2UIViewer.js.map +0 -1
- package/dist/react-renderer/core/ComponentNode.d.ts +0 -25
- package/dist/react-renderer/core/ComponentNode.d.ts.map +0 -1
- package/dist/react-renderer/core/ComponentNode.js +0 -43
- package/dist/react-renderer/core/ComponentNode.js.map +0 -1
- package/dist/react-renderer/core/store.d.ts +0 -37
- package/dist/react-renderer/core/store.d.ts.map +0 -1
- package/dist/react-renderer/core/store.js +0 -2
- package/dist/react-renderer/core/store.js.map +0 -1
- package/dist/react-renderer/hooks/useA2UI.d.ts +0 -46
- package/dist/react-renderer/hooks/useA2UI.d.ts.map +0 -1
- package/dist/react-renderer/hooks/useA2UI.js +0 -41
- package/dist/react-renderer/hooks/useA2UI.js.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.d.ts +0 -52
- package/dist/react-renderer/hooks/useA2UIComponent.d.ts.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.js +0 -175
- package/dist/react-renderer/hooks/useA2UIComponent.js.map +0 -1
- package/dist/react-renderer/index.d.ts +0 -37
- package/dist/react-renderer/index.d.ts.map +0 -1
- package/dist/react-renderer/index.js +0 -40
- package/dist/react-renderer/index.js.map +0 -1
- package/dist/react-renderer/lib/utils.d.ts +0 -32
- package/dist/react-renderer/lib/utils.d.ts.map +0 -1
- package/dist/react-renderer/lib/utils.js +0 -41
- package/dist/react-renderer/lib/utils.js.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.d.ts +0 -78
- package/dist/react-renderer/registry/ComponentRegistry.d.ts.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.js +0 -113
- package/dist/react-renderer/registry/ComponentRegistry.js.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.d.ts +0 -13
- package/dist/react-renderer/registry/defaultCatalog.d.ts.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.js +0 -59
- package/dist/react-renderer/registry/defaultCatalog.js.map +0 -1
- package/dist/react-renderer/styles/index.d.ts +0 -41
- package/dist/react-renderer/styles/index.d.ts.map +0 -1
- package/dist/react-renderer/styles/index.js.map +0 -1
- package/dist/react-renderer/styles/reset.d.ts +0 -18
- package/dist/react-renderer/styles/reset.d.ts.map +0 -1
- package/dist/react-renderer/styles/reset.js +0 -24
- package/dist/react-renderer/styles/reset.js.map +0 -1
- package/dist/react-renderer/theme/ThemeContext.d.ts +0 -29
- package/dist/react-renderer/theme/ThemeContext.d.ts.map +0 -1
- package/dist/react-renderer/theme/ThemeContext.js +0 -35
- package/dist/react-renderer/theme/ThemeContext.js.map +0 -1
- package/dist/react-renderer/theme/litTheme.d.ts +0 -8
- package/dist/react-renderer/theme/litTheme.d.ts.map +0 -1
- package/dist/react-renderer/theme/litTheme.js +0 -401
- package/dist/react-renderer/theme/litTheme.js.map +0 -1
- package/dist/react-renderer/theme/utils.d.ts +0 -23
- package/dist/react-renderer/theme/utils.d.ts.map +0 -1
- package/dist/react-renderer/theme/utils.js +0 -46
- package/dist/react-renderer/theme/utils.js.map +0 -1
- package/dist/react-renderer/types.d.ts +0 -53
- package/dist/react-renderer/types.d.ts.map +0 -1
- package/dist/react-renderer/types.js +0 -2
- package/dist/react-renderer/types.js.map +0 -1
- package/dist/theme/viewer-theme.d.ts +0 -3
- package/dist/theme/viewer-theme.d.ts.map +0 -1
- package/dist/theme/viewer-theme.js +0 -391
- package/dist/theme/viewer-theme.js.map +0 -1
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { Types } from "@a2ui/lit/0.8";
|
|
2
|
-
/**
|
|
3
|
-
* Component instance format for static A2UI definitions.
|
|
4
|
-
*/
|
|
5
|
-
export interface ComponentInstance {
|
|
6
|
-
id: string;
|
|
7
|
-
component: Record<string, unknown>;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Action event dispatched when a user interacts with a component.
|
|
11
|
-
*/
|
|
12
|
-
export interface A2UIActionEvent {
|
|
13
|
-
actionName: string;
|
|
14
|
-
sourceComponentId: string;
|
|
15
|
-
timestamp: string;
|
|
16
|
-
context: Record<string, unknown>;
|
|
17
|
-
}
|
|
18
|
-
export interface A2UIViewerProps {
|
|
19
|
-
/** The root component ID */
|
|
20
|
-
root: string;
|
|
21
|
-
/** Array of component definitions */
|
|
22
|
-
components: ComponentInstance[];
|
|
23
|
-
/** Data model for the surface */
|
|
24
|
-
data?: Record<string, unknown>;
|
|
25
|
-
/** Callback when an action is triggered */
|
|
26
|
-
onAction?: (action: A2UIActionEvent) => void;
|
|
27
|
-
/** Custom theme (defaults to litTheme) */
|
|
28
|
-
theme?: Types.Theme;
|
|
29
|
-
/** Additional CSS class */
|
|
30
|
-
className?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* A2UIViewer renders an A2UI component tree from static JSON definitions.
|
|
34
|
-
*
|
|
35
|
-
* Use this when you have component definitions and data as props rather than
|
|
36
|
-
* streaming messages from a server. For streaming use cases, use A2UIProvider
|
|
37
|
-
* with A2UIRenderer and useA2UI instead.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```tsx
|
|
41
|
-
* const components = [
|
|
42
|
-
* { id: 'root', component: { Card: { child: 'text' } } },
|
|
43
|
-
* { id: 'text', component: { Text: { text: { path: '/message' } } } },
|
|
44
|
-
* ];
|
|
45
|
-
*
|
|
46
|
-
* <A2UIViewer
|
|
47
|
-
* root="root"
|
|
48
|
-
* components={components}
|
|
49
|
-
* data={{ message: 'Hello World!' }}
|
|
50
|
-
* onAction={(action) => console.log('Action:', action)}
|
|
51
|
-
* />
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export declare function A2UIViewer({ root, components, data, onAction, theme, className, }: A2UIViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
55
|
-
export default A2UIViewer;
|
|
56
|
-
//# sourceMappingURL=A2UIViewer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"A2UIViewer.d.ts","sourceRoot":"","sources":["../../../src/react-renderer/core/A2UIViewer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQ3C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7C,0CAA0C;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IACpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,IAAS,EACT,QAAQ,EACR,KAAgB,EAChB,SAAS,GACV,EAAE,eAAe,2CA4CjB;AAyFD,eAAe,UAAU,CAAC"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useId, useMemo, useEffect, useRef } from "react";
|
|
4
|
-
import { A2UIProvider, useA2UIActions } from "./A2UIProvider";
|
|
5
|
-
import { A2UIRenderer } from "./A2UIRenderer";
|
|
6
|
-
import { initializeDefaultCatalog } from "../registry/defaultCatalog";
|
|
7
|
-
import { litTheme } from "../theme/litTheme";
|
|
8
|
-
import { injectStyles } from "../styles";
|
|
9
|
-
// Initialize the component catalog and styles once
|
|
10
|
-
let initialized = false;
|
|
11
|
-
function ensureInitialized() {
|
|
12
|
-
if (!initialized) {
|
|
13
|
-
initializeDefaultCatalog();
|
|
14
|
-
injectStyles(); // Inject structural CSS for litTheme utility classes
|
|
15
|
-
initialized = true;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* A2UIViewer renders an A2UI component tree from static JSON definitions.
|
|
20
|
-
*
|
|
21
|
-
* Use this when you have component definitions and data as props rather than
|
|
22
|
-
* streaming messages from a server. For streaming use cases, use A2UIProvider
|
|
23
|
-
* with A2UIRenderer and useA2UI instead.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* const components = [
|
|
28
|
-
* { id: 'root', component: { Card: { child: 'text' } } },
|
|
29
|
-
* { id: 'text', component: { Text: { text: { path: '/message' } } } },
|
|
30
|
-
* ];
|
|
31
|
-
*
|
|
32
|
-
* <A2UIViewer
|
|
33
|
-
* root="root"
|
|
34
|
-
* components={components}
|
|
35
|
-
* data={{ message: 'Hello World!' }}
|
|
36
|
-
* onAction={(action) => console.log('Action:', action)}
|
|
37
|
-
* />
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export function A2UIViewer({ root, components, data = {}, onAction, theme = litTheme, className, }) {
|
|
41
|
-
ensureInitialized();
|
|
42
|
-
// Generate a stable surface ID based on the definition
|
|
43
|
-
const baseId = useId();
|
|
44
|
-
const surfaceId = useMemo(() => {
|
|
45
|
-
const definitionKey = `${root}-${JSON.stringify(components)}`;
|
|
46
|
-
let hash = 0;
|
|
47
|
-
for (let i = 0; i < definitionKey.length; i++) {
|
|
48
|
-
const char = definitionKey.charCodeAt(i);
|
|
49
|
-
hash = (hash << 5) - hash + char;
|
|
50
|
-
hash = hash & hash;
|
|
51
|
-
}
|
|
52
|
-
return `surface${baseId.replace(/:/g, "-")}${hash}`;
|
|
53
|
-
}, [baseId, root, components]);
|
|
54
|
-
// Convert onAction callback to internal format
|
|
55
|
-
const handleAction = useMemo(() => {
|
|
56
|
-
if (!onAction)
|
|
57
|
-
return undefined;
|
|
58
|
-
return (message) => {
|
|
59
|
-
const userAction = message.userAction;
|
|
60
|
-
if (userAction) {
|
|
61
|
-
onAction({
|
|
62
|
-
actionName: userAction.name,
|
|
63
|
-
sourceComponentId: userAction.sourceComponentId,
|
|
64
|
-
timestamp: userAction.timestamp,
|
|
65
|
-
context: userAction.context ?? {},
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
}, [onAction]);
|
|
70
|
-
return (_jsx(A2UIProvider, { onAction: handleAction, theme: theme, children: _jsx(A2UIViewerInner, { surfaceId: surfaceId, root: root, components: components, data: data, className: className }) }));
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Inner component that processes messages within the provider context.
|
|
74
|
-
*/
|
|
75
|
-
function A2UIViewerInner({ surfaceId, root, components, data, className, }) {
|
|
76
|
-
const { processMessages } = useA2UIActions();
|
|
77
|
-
const lastProcessedRef = useRef("");
|
|
78
|
-
// Process messages when props change
|
|
79
|
-
useEffect(() => {
|
|
80
|
-
const key = `${surfaceId}-${JSON.stringify(components)}-${JSON.stringify(data)}`;
|
|
81
|
-
if (key === lastProcessedRef.current)
|
|
82
|
-
return;
|
|
83
|
-
lastProcessedRef.current = key;
|
|
84
|
-
const messages = [
|
|
85
|
-
{ beginRendering: { surfaceId, root, styles: {} } },
|
|
86
|
-
{ surfaceUpdate: { surfaceId, components } },
|
|
87
|
-
];
|
|
88
|
-
// Add data model updates
|
|
89
|
-
if (data && Object.keys(data).length > 0) {
|
|
90
|
-
const contents = objectToValueMaps(data);
|
|
91
|
-
if (contents.length > 0) {
|
|
92
|
-
messages.push({
|
|
93
|
-
dataModelUpdate: { surfaceId, path: "/", contents },
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
processMessages(messages);
|
|
98
|
-
}, [processMessages, surfaceId, root, components, data]);
|
|
99
|
-
return (_jsx("div", { className: className, children: _jsx(A2UIRenderer, { surfaceId: surfaceId }) }));
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Converts a nested JavaScript object to the ValueMap[] format
|
|
103
|
-
* expected by A2UI's dataModelUpdate message.
|
|
104
|
-
*/
|
|
105
|
-
function objectToValueMaps(obj) {
|
|
106
|
-
return Object.entries(obj).map(([key, value]) => valueToValueMap(key, value));
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Converts a single key-value pair to a ValueMap.
|
|
110
|
-
*/
|
|
111
|
-
function valueToValueMap(key, value) {
|
|
112
|
-
if (typeof value === "string") {
|
|
113
|
-
return { key, valueString: value };
|
|
114
|
-
}
|
|
115
|
-
if (typeof value === "number") {
|
|
116
|
-
return { key, valueNumber: value };
|
|
117
|
-
}
|
|
118
|
-
if (typeof value === "boolean") {
|
|
119
|
-
return { key, valueBoolean: value };
|
|
120
|
-
}
|
|
121
|
-
if (value === null || value === undefined) {
|
|
122
|
-
return { key };
|
|
123
|
-
}
|
|
124
|
-
if (Array.isArray(value)) {
|
|
125
|
-
const valueMap = value.map((item, index) => valueToValueMap(String(index), item));
|
|
126
|
-
return { key, valueMap };
|
|
127
|
-
}
|
|
128
|
-
if (typeof value === "object") {
|
|
129
|
-
const valueMap = objectToValueMaps(value);
|
|
130
|
-
return { key, valueMap };
|
|
131
|
-
}
|
|
132
|
-
return { key };
|
|
133
|
-
}
|
|
134
|
-
export default A2UIViewer;
|
|
135
|
-
//# sourceMappingURL=A2UIViewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"A2UIViewer.js","sourceRoot":"","sources":["../../../src/react-renderer/core/A2UIViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { Types } from "@a2ui/lit/0.8";
|
|
2
|
-
import { ComponentRegistry } from "../registry/ComponentRegistry";
|
|
3
|
-
interface ComponentNodeProps {
|
|
4
|
-
/** The component node to render (can be null/undefined for safety) */
|
|
5
|
-
node: Types.AnyComponentNode | null | undefined;
|
|
6
|
-
/** The surface ID this component belongs to */
|
|
7
|
-
surfaceId: string;
|
|
8
|
-
/** Optional custom registry. Falls back to singleton. */
|
|
9
|
-
registry?: ComponentRegistry;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* ComponentNode - dynamically renders an A2UI component based on its type.
|
|
13
|
-
*
|
|
14
|
-
* Looks up the component in the registry and renders it with the appropriate props.
|
|
15
|
-
* Supports lazy-loaded components via React.Suspense.
|
|
16
|
-
*
|
|
17
|
-
* No wrapper div is rendered - the component's root div (e.g., .a2ui-image) is the
|
|
18
|
-
* direct flex child, exactly matching Lit's structure where the :host element IS
|
|
19
|
-
* the flex item. Each component handles --weight CSS variable on its root div.
|
|
20
|
-
*
|
|
21
|
-
* Memoized to prevent unnecessary re-renders when parent updates but node hasn't changed.
|
|
22
|
-
*/
|
|
23
|
-
export declare const ComponentNode: import("react").NamedExoticComponent<ComponentNodeProps>;
|
|
24
|
-
export default ComponentNode;
|
|
25
|
-
//# sourceMappingURL=ComponentNode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentNode.d.ts","sourceRoot":"","sources":["../../../src/react-renderer/core/ComponentNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAWlE,UAAU,kBAAkB;IAC1B,sEAAsE;IACtE,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,0DAsCxB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Suspense, useMemo, memo } from "react";
|
|
3
|
-
import { ComponentRegistry } from "../registry/ComponentRegistry";
|
|
4
|
-
/** Memoized loading fallback to avoid recreating on each render */
|
|
5
|
-
const LoadingFallback = memo(function LoadingFallback() {
|
|
6
|
-
return (_jsx("div", { className: "a2ui-loading", style: { padding: "8px", opacity: 0.5 }, children: "Loading..." }));
|
|
7
|
-
});
|
|
8
|
-
/**
|
|
9
|
-
* ComponentNode - dynamically renders an A2UI component based on its type.
|
|
10
|
-
*
|
|
11
|
-
* Looks up the component in the registry and renders it with the appropriate props.
|
|
12
|
-
* Supports lazy-loaded components via React.Suspense.
|
|
13
|
-
*
|
|
14
|
-
* No wrapper div is rendered - the component's root div (e.g., .a2ui-image) is the
|
|
15
|
-
* direct flex child, exactly matching Lit's structure where the :host element IS
|
|
16
|
-
* the flex item. Each component handles --weight CSS variable on its root div.
|
|
17
|
-
*
|
|
18
|
-
* Memoized to prevent unnecessary re-renders when parent updates but node hasn't changed.
|
|
19
|
-
*/
|
|
20
|
-
export const ComponentNode = memo(function ComponentNode({ node, surfaceId, registry, }) {
|
|
21
|
-
const actualRegistry = registry ?? ComponentRegistry.getInstance();
|
|
22
|
-
// useMemo must be called unconditionally (Rules of Hooks)
|
|
23
|
-
// We handle invalid nodes by returning null component type
|
|
24
|
-
const nodeType = node && typeof node === "object" && "type" in node ? node.type : null;
|
|
25
|
-
const Component = useMemo(() => (nodeType ? actualRegistry.get(nodeType) : null), [actualRegistry, nodeType]);
|
|
26
|
-
// Handle null/undefined/invalid nodes gracefully
|
|
27
|
-
if (!nodeType) {
|
|
28
|
-
if (node) {
|
|
29
|
-
console.warn("[A2UI] Invalid component node (not resolved?):", node);
|
|
30
|
-
}
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
if (!Component) {
|
|
34
|
-
console.warn(`[A2UI] Unknown component type: ${nodeType}`);
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
// No wrapper div - component's root div is the :host equivalent
|
|
38
|
-
// Suspense doesn't add DOM elements, preserving the correct hierarchy
|
|
39
|
-
// Type assertion is safe: we've already validated node is valid (nodeType check above)
|
|
40
|
-
return (_jsx(Suspense, { fallback: _jsx(LoadingFallback, {}), children: _jsx(Component, { node: node, surfaceId: surfaceId }) }));
|
|
41
|
-
});
|
|
42
|
-
export default ComponentNode;
|
|
43
|
-
//# sourceMappingURL=ComponentNode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentNode.js","sourceRoot":"","sources":["../../../src/react-renderer/core/ComponentNode.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,mEAAmE;AACnE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,eAAe;IACnD,OAAO,CACL,cAAK,SAAS,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,2BAE/D,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAWH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,aAAa,CAAC,EACvD,IAAI,EACJ,SAAS,EACT,QAAQ,GACW;IACnB,MAAM,cAAc,GAAG,QAAQ,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAEnE,0DAA0D;IAC1D,2DAA2D;IAC3D,MAAM,QAAQ,GACZ,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACtD,CAAC,cAAc,EAAE,QAAQ,CAAC,CAC3B,CAAC;IAEF,iDAAiD;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,sEAAsE;IACtE,uFAAuF;IACvF,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,eAAe,KAAG,YACrC,KAAC,SAAS,IAAC,IAAI,EAAE,IAA8B,EAAE,SAAS,EAAE,SAAS,GAAI,GAChE,CACZ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Types } from "@a2ui/lit/0.8";
|
|
2
|
-
import type { OnActionCallback } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* Stable actions that never change (won't cause re-renders).
|
|
5
|
-
* These are stored in a ref and exposed via A2UIActionsContext.
|
|
6
|
-
*/
|
|
7
|
-
export interface A2UIActions {
|
|
8
|
-
/** Process incoming server messages */
|
|
9
|
-
processMessages: (messages: Types.ServerToClientMessage[]) => void;
|
|
10
|
-
/** Update data in the data model (for two-way binding) */
|
|
11
|
-
setData: (node: Types.AnyComponentNode | null, path: string, value: Types.DataValue, surfaceId: string) => void;
|
|
12
|
-
/** Dispatch a user action to the server */
|
|
13
|
-
dispatch: (message: Types.A2UIClientEventMessage) => void;
|
|
14
|
-
/** Clear all surfaces */
|
|
15
|
-
clearSurfaces: () => void;
|
|
16
|
-
/** Get a surface by ID */
|
|
17
|
-
getSurface: (surfaceId: string) => Types.Surface | undefined;
|
|
18
|
-
/** Get all surfaces */
|
|
19
|
-
getSurfaces: () => ReadonlyMap<string, Types.Surface>;
|
|
20
|
-
/** Get data from the data model */
|
|
21
|
-
getData: (node: Types.AnyComponentNode, path: string, surfaceId: string) => Types.DataValue | null;
|
|
22
|
-
/** Resolve a relative path to an absolute path */
|
|
23
|
-
resolvePath: (path: string, dataContextPath?: string) => string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* The shape of the A2UI context value.
|
|
27
|
-
* Combines stable actions with reactive state.
|
|
28
|
-
*/
|
|
29
|
-
export interface A2UIContextValue extends A2UIActions {
|
|
30
|
-
/** The underlying message processor from @a2ui/lit */
|
|
31
|
-
processor: Types.MessageProcessor;
|
|
32
|
-
/** Version counter for triggering React re-renders */
|
|
33
|
-
version: number;
|
|
34
|
-
/** Callback for dispatching actions to the server */
|
|
35
|
-
onAction: OnActionCallback | null;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/react-renderer/core/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAEnE,0DAA0D;IAC1D,OAAO,EAAE,CACP,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,IAAI,EACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,SAAS,EAAE,MAAM,KACd,IAAI,CAAC;IAEV,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,KAAK,IAAI,CAAC;IAE1D,yBAAyB;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,0BAA0B;IAC1B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;IAE7D,uBAAuB;IACvB,WAAW,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,mCAAmC;IACnC,OAAO,EAAE,CACP,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,KACd,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IAE5B,kDAAkD;IAClD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACjE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,sDAAsD;IACtD,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC;IAElC,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAEhB,qDAAqD;IACrD,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACnC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/react-renderer/core/store.ts"],"names":[],"mappings":""}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { Types } from "@a2ui/lit/0.8";
|
|
2
|
-
/**
|
|
3
|
-
* Result returned by the useA2UI hook.
|
|
4
|
-
*/
|
|
5
|
-
export interface UseA2UIResult {
|
|
6
|
-
/** Process incoming server messages */
|
|
7
|
-
processMessages: (messages: Types.ServerToClientMessage[]) => void;
|
|
8
|
-
/** Get a surface by ID */
|
|
9
|
-
getSurface: (surfaceId: string) => Types.Surface | undefined;
|
|
10
|
-
/** Get all surfaces */
|
|
11
|
-
getSurfaces: () => ReadonlyMap<string, Types.Surface>;
|
|
12
|
-
/** Clear all surfaces */
|
|
13
|
-
clearSurfaces: () => void;
|
|
14
|
-
/** The current version number (increments on state changes) */
|
|
15
|
-
version: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Main API hook for A2UI. Provides methods to process messages
|
|
19
|
-
* and access surface state.
|
|
20
|
-
*
|
|
21
|
-
* Note: This hook subscribes to state changes. Components using this
|
|
22
|
-
* will re-render when the A2UI state changes. For action-only usage
|
|
23
|
-
* (no re-renders), use useA2UIActions() instead.
|
|
24
|
-
*
|
|
25
|
-
* @returns Object with message processing and surface access methods
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```tsx
|
|
29
|
-
* function ChatApp() {
|
|
30
|
-
* const { processMessages, getSurface } = useA2UI();
|
|
31
|
-
*
|
|
32
|
-
* useEffect(() => {
|
|
33
|
-
* const ws = new WebSocket('wss://agent.example.com');
|
|
34
|
-
* ws.onmessage = (event) => {
|
|
35
|
-
* const messages = JSON.parse(event.data);
|
|
36
|
-
* processMessages(messages);
|
|
37
|
-
* };
|
|
38
|
-
* return () => ws.close();
|
|
39
|
-
* }, [processMessages]);
|
|
40
|
-
*
|
|
41
|
-
* return <A2UIRenderer surfaceId="main" />;
|
|
42
|
-
* }
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export declare function useA2UI(): UseA2UIResult;
|
|
46
|
-
//# sourceMappingURL=useA2UI.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UI.d.ts","sourceRoot":"","sources":["../../../src/react-renderer/hooks/useA2UI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAEnE,0BAA0B;IAC1B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;IAE7D,uBAAuB;IACvB,WAAW,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,yBAAyB;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,OAAO,IAAI,aAAa,CAWvC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { useA2UIActions, useA2UIState } from "../core/A2UIProvider";
|
|
2
|
-
/**
|
|
3
|
-
* Main API hook for A2UI. Provides methods to process messages
|
|
4
|
-
* and access surface state.
|
|
5
|
-
*
|
|
6
|
-
* Note: This hook subscribes to state changes. Components using this
|
|
7
|
-
* will re-render when the A2UI state changes. For action-only usage
|
|
8
|
-
* (no re-renders), use useA2UIActions() instead.
|
|
9
|
-
*
|
|
10
|
-
* @returns Object with message processing and surface access methods
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* function ChatApp() {
|
|
15
|
-
* const { processMessages, getSurface } = useA2UI();
|
|
16
|
-
*
|
|
17
|
-
* useEffect(() => {
|
|
18
|
-
* const ws = new WebSocket('wss://agent.example.com');
|
|
19
|
-
* ws.onmessage = (event) => {
|
|
20
|
-
* const messages = JSON.parse(event.data);
|
|
21
|
-
* processMessages(messages);
|
|
22
|
-
* };
|
|
23
|
-
* return () => ws.close();
|
|
24
|
-
* }, [processMessages]);
|
|
25
|
-
*
|
|
26
|
-
* return <A2UIRenderer surfaceId="main" />;
|
|
27
|
-
* }
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export function useA2UI() {
|
|
31
|
-
const actions = useA2UIActions();
|
|
32
|
-
const state = useA2UIState();
|
|
33
|
-
return {
|
|
34
|
-
processMessages: actions.processMessages,
|
|
35
|
-
getSurface: actions.getSurface,
|
|
36
|
-
getSurfaces: actions.getSurfaces,
|
|
37
|
-
clearSurfaces: actions.clearSurfaces,
|
|
38
|
-
version: state.version,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=useA2UI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UI.js","sourceRoot":"","sources":["../../../src/react-renderer/hooks/useA2UI.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAsBpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { Types, Primitives } from "@a2ui/lit/0.8";
|
|
2
|
-
/**
|
|
3
|
-
* Result returned by the useA2UIComponent hook.
|
|
4
|
-
*/
|
|
5
|
-
export interface UseA2UIComponentResult {
|
|
6
|
-
/** The current theme */
|
|
7
|
-
theme: Types.Theme;
|
|
8
|
-
/** Resolve a StringValue to its actual string value */
|
|
9
|
-
resolveString: (value: Primitives.StringValue | null | undefined) => string | null;
|
|
10
|
-
/** Resolve a NumberValue to its actual number value */
|
|
11
|
-
resolveNumber: (value: Primitives.NumberValue | null | undefined) => number | null;
|
|
12
|
-
/** Resolve a BooleanValue to its actual boolean value */
|
|
13
|
-
resolveBoolean: (value: Primitives.BooleanValue | null | undefined) => boolean | null;
|
|
14
|
-
/** Set a value in the data model (for two-way binding) */
|
|
15
|
-
setValue: (path: string, value: Types.DataValue) => void;
|
|
16
|
-
/** Get a value from the data model */
|
|
17
|
-
getValue: (path: string) => Types.DataValue | null;
|
|
18
|
-
/** Dispatch a user action */
|
|
19
|
-
sendAction: (action: Types.Action) => void;
|
|
20
|
-
/** Generate a unique ID for accessibility */
|
|
21
|
-
getUniqueId: (prefix: string) => string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
25
|
-
* and action dispatching.
|
|
26
|
-
*
|
|
27
|
-
* @param node - The component node from the A2UI message processor
|
|
28
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
29
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```tsx
|
|
33
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
34
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
35
|
-
*
|
|
36
|
-
* const label = resolveString(node.properties.label);
|
|
37
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
38
|
-
*
|
|
39
|
-
* return (
|
|
40
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
41
|
-
* <label>{label}</label>
|
|
42
|
-
* <input
|
|
43
|
-
* value={value}
|
|
44
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
45
|
-
* />
|
|
46
|
-
* </div>
|
|
47
|
-
* );
|
|
48
|
-
* }
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
export declare function useA2UIComponent<T extends Types.AnyComponentNode>(node: T, surfaceId: string): UseA2UIComponentResult;
|
|
52
|
-
//# sourceMappingURL=useA2UIComponent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UIComponent.d.ts","sourceRoot":"","sources":["../../../src/react-renderer/hooks/useA2UIComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIvD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IAEnB,uDAAuD;IACvD,aAAa,EAAE,CACb,KAAK,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,KAC7C,MAAM,GAAG,IAAI,CAAC;IAEnB,uDAAuD;IACvD,aAAa,EAAE,CACb,KAAK,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,KAC7C,MAAM,GAAG,IAAI,CAAC;IAEnB,yDAAyD;IACzD,cAAc,EAAE,CACd,KAAK,EAAE,UAAU,CAAC,YAAY,GAAG,IAAI,GAAG,SAAS,KAC9C,OAAO,GAAG,IAAI,CAAC;IAEpB,0DAA0D;IAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAEzD,sCAAsC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;IAEnD,6BAA6B;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;IAE3C,6CAA6C;IAC7C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,CAAC,gBAAgB,EAC/D,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,MAAM,GAChB,sBAAsB,CAkLxB"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { useCallback, useId, useMemo } from "react";
|
|
2
|
-
import { useA2UIActions, useA2UIState } from "../core/A2UIProvider";
|
|
3
|
-
import { useTheme } from "../theme/ThemeContext";
|
|
4
|
-
/**
|
|
5
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
6
|
-
* and action dispatching.
|
|
7
|
-
*
|
|
8
|
-
* @param node - The component node from the A2UI message processor
|
|
9
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
10
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
15
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
16
|
-
*
|
|
17
|
-
* const label = resolveString(node.properties.label);
|
|
18
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
19
|
-
*
|
|
20
|
-
* return (
|
|
21
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
22
|
-
* <label>{label}</label>
|
|
23
|
-
* <input
|
|
24
|
-
* value={value}
|
|
25
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
26
|
-
* />
|
|
27
|
-
* </div>
|
|
28
|
-
* );
|
|
29
|
-
* }
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export function useA2UIComponent(node, surfaceId) {
|
|
33
|
-
// Use stable actions - won't cause re-renders when version changes
|
|
34
|
-
const actions = useA2UIActions();
|
|
35
|
-
const theme = useTheme();
|
|
36
|
-
const baseId = useId();
|
|
37
|
-
// Subscribe to data model version - triggers re-render when data changes via setData.
|
|
38
|
-
// This ensures components with path bindings see updated values.
|
|
39
|
-
// memo() doesn't block context-triggered re-renders.
|
|
40
|
-
useA2UIState();
|
|
41
|
-
/**
|
|
42
|
-
* Resolve a StringValue to its actual string value.
|
|
43
|
-
* Checks literalString, literal, then path in that order.
|
|
44
|
-
* Note: This reads from data model via stable actions reference.
|
|
45
|
-
*/
|
|
46
|
-
const resolveString = useCallback((value) => {
|
|
47
|
-
if (!value)
|
|
48
|
-
return null;
|
|
49
|
-
if (typeof value !== "object")
|
|
50
|
-
return null;
|
|
51
|
-
if (value.literalString !== undefined) {
|
|
52
|
-
return value.literalString;
|
|
53
|
-
}
|
|
54
|
-
if (value.literal !== undefined) {
|
|
55
|
-
return String(value.literal);
|
|
56
|
-
}
|
|
57
|
-
if (value.path) {
|
|
58
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
59
|
-
return data !== null ? String(data) : null;
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
}, [actions, node, surfaceId]);
|
|
63
|
-
/**
|
|
64
|
-
* Resolve a NumberValue to its actual number value.
|
|
65
|
-
*/
|
|
66
|
-
const resolveNumber = useCallback((value) => {
|
|
67
|
-
if (!value)
|
|
68
|
-
return null;
|
|
69
|
-
if (typeof value !== "object")
|
|
70
|
-
return null;
|
|
71
|
-
if (value.literalNumber !== undefined) {
|
|
72
|
-
return value.literalNumber;
|
|
73
|
-
}
|
|
74
|
-
if (value.literal !== undefined) {
|
|
75
|
-
return Number(value.literal);
|
|
76
|
-
}
|
|
77
|
-
if (value.path) {
|
|
78
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
79
|
-
return data !== null ? Number(data) : null;
|
|
80
|
-
}
|
|
81
|
-
return null;
|
|
82
|
-
}, [actions, node, surfaceId]);
|
|
83
|
-
/**
|
|
84
|
-
* Resolve a BooleanValue to its actual boolean value.
|
|
85
|
-
*/
|
|
86
|
-
const resolveBoolean = useCallback((value) => {
|
|
87
|
-
if (!value)
|
|
88
|
-
return null;
|
|
89
|
-
if (typeof value !== "object")
|
|
90
|
-
return null;
|
|
91
|
-
if (value.literalBoolean !== undefined) {
|
|
92
|
-
return value.literalBoolean;
|
|
93
|
-
}
|
|
94
|
-
if (value.literal !== undefined) {
|
|
95
|
-
return Boolean(value.literal);
|
|
96
|
-
}
|
|
97
|
-
if (value.path) {
|
|
98
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
99
|
-
return data !== null ? Boolean(data) : null;
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}, [actions, node, surfaceId]);
|
|
103
|
-
/**
|
|
104
|
-
* Set a value in the data model for two-way binding.
|
|
105
|
-
*/
|
|
106
|
-
const setValue = useCallback((path, value) => {
|
|
107
|
-
actions.setData(node, path, value, surfaceId);
|
|
108
|
-
}, [actions, node, surfaceId]);
|
|
109
|
-
/**
|
|
110
|
-
* Get a value from the data model.
|
|
111
|
-
*/
|
|
112
|
-
const getValue = useCallback((path) => {
|
|
113
|
-
return actions.getData(node, path, surfaceId);
|
|
114
|
-
}, [actions, node, surfaceId]);
|
|
115
|
-
/**
|
|
116
|
-
* Dispatch a user action to the server.
|
|
117
|
-
* Resolves all context bindings before dispatching.
|
|
118
|
-
*/
|
|
119
|
-
const sendAction = useCallback((action) => {
|
|
120
|
-
const actionContext = {};
|
|
121
|
-
if (action.context) {
|
|
122
|
-
for (const item of action.context) {
|
|
123
|
-
if (item.value.literalString !== undefined) {
|
|
124
|
-
actionContext[item.key] = item.value.literalString;
|
|
125
|
-
}
|
|
126
|
-
else if (item.value.literalNumber !== undefined) {
|
|
127
|
-
actionContext[item.key] = item.value.literalNumber;
|
|
128
|
-
}
|
|
129
|
-
else if (item.value.literalBoolean !== undefined) {
|
|
130
|
-
actionContext[item.key] = item.value.literalBoolean;
|
|
131
|
-
}
|
|
132
|
-
else if (item.value.path) {
|
|
133
|
-
const resolvedPath = actions.resolvePath(item.value.path, node.dataContextPath);
|
|
134
|
-
actionContext[item.key] = actions.getData(node, resolvedPath, surfaceId);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
actions.dispatch({
|
|
139
|
-
userAction: {
|
|
140
|
-
name: action.name,
|
|
141
|
-
sourceComponentId: node.id,
|
|
142
|
-
surfaceId,
|
|
143
|
-
timestamp: new Date().toISOString(),
|
|
144
|
-
context: actionContext,
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
}, [actions, node, surfaceId]);
|
|
148
|
-
/**
|
|
149
|
-
* Generate a unique ID for accessibility purposes.
|
|
150
|
-
* Uses React's useId() for SSR and Concurrent Mode compatibility.
|
|
151
|
-
*/
|
|
152
|
-
const getUniqueId = useCallback((prefix) => {
|
|
153
|
-
return `${prefix}${baseId}`;
|
|
154
|
-
}, [baseId]);
|
|
155
|
-
return useMemo(() => ({
|
|
156
|
-
theme,
|
|
157
|
-
resolveString,
|
|
158
|
-
resolveNumber,
|
|
159
|
-
resolveBoolean,
|
|
160
|
-
setValue,
|
|
161
|
-
getValue,
|
|
162
|
-
sendAction,
|
|
163
|
-
getUniqueId,
|
|
164
|
-
}), [
|
|
165
|
-
theme,
|
|
166
|
-
resolveString,
|
|
167
|
-
resolveNumber,
|
|
168
|
-
resolveBoolean,
|
|
169
|
-
setValue,
|
|
170
|
-
getValue,
|
|
171
|
-
sendAction,
|
|
172
|
-
getUniqueId,
|
|
173
|
-
]);
|
|
174
|
-
}
|
|
175
|
-
//# sourceMappingURL=useA2UIComponent.js.map
|