@copilotkit/a2ui-renderer 1.55.0-next.9 → 1.55.1-next.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/dist/a2ui-types.cjs +2 -3
- package/dist/a2ui-types.cjs.map +1 -1
- package/dist/a2ui-types.d.cts +21 -5
- package/dist/a2ui-types.d.cts.map +1 -1
- package/dist/a2ui-types.d.mts +21 -5
- package/dist/a2ui-types.d.mts.map +1 -1
- package/dist/a2ui-types.mjs +2 -3
- package/dist/a2ui-types.mjs.map +1 -1
- package/dist/index.cjs +40 -61
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10 -39
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +10 -39
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +12 -29
- package/dist/index.mjs.map +1 -0
- package/dist/index.umd.js +1743 -2783
- package/dist/index.umd.js.map +1 -1
- package/dist/react-renderer/a2ui-react/A2uiSurface.cjs +110 -0
- package/dist/react-renderer/a2ui-react/A2uiSurface.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/A2uiSurface.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/A2uiSurface.d.mts +3 -0
- package/dist/react-renderer/a2ui-react/A2uiSurface.mjs +107 -0
- package/dist/react-renderer/a2ui-react/A2uiSurface.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/adapter.cjs +63 -0
- package/dist/react-renderer/a2ui-react/adapter.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/adapter.d.cts +23 -0
- package/dist/react-renderer/a2ui-react/adapter.d.cts.map +1 -0
- package/dist/react-renderer/a2ui-react/adapter.d.mts +23 -0
- package/dist/react-renderer/a2ui-react/adapter.d.mts.map +1 -0
- package/dist/react-renderer/a2ui-react/adapter.mjs +61 -0
- package/dist/react-renderer/a2ui-react/adapter.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.cjs +53 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.mjs +36 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/AudioPlayer.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.cjs +48 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.mjs +31 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Button.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.cjs +39 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.mjs +22 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Card.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.cjs +73 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.mjs +71 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/CheckBox.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChildList.cjs +36 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChildList.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChildList.mjs +34 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChildList.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.cjs +110 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.mjs +108 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/ChoicePicker.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.cjs +45 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.mjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Column.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.cjs +69 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.mjs +67 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/DateTimeInput.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.cjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.mjs +27 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Divider.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.cjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.mjs +27 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Icon.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.cjs +59 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.mjs +42 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Image.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.cjs +49 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.mjs +32 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/List.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.cjs +81 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.mjs +80 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Modal.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.cjs +45 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.mjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Row.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.cjs +74 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.mjs +72 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Slider.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.cjs +63 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.mjs +62 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Tabs.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.cjs +69 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.mjs +52 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Text.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.cjs +88 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.mjs +86 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/TextField.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.cjs +40 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.d.cts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.d.mts +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.mjs +23 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/components/Video.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.cjs +63 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.d.cts +26 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.d.cts.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.d.mts +26 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.d.mts.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.mjs +62 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/index.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/utils.cjs +52 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/utils.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/utils.mjs +45 -0
- package/dist/react-renderer/a2ui-react/catalog/basic/utils.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.cjs +51 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.d.mts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.mjs +34 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Button.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/ChildList.cjs +36 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/ChildList.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/ChildList.mjs +34 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/ChildList.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.cjs +85 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.d.mts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.mjs +84 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Column.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.cjs +84 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.d.mts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.mjs +83 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Row.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.cjs +54 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.d.mts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.mjs +53 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/Text.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.cjs +85 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.d.cts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.d.mts +2 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.mjs +68 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/components/TextField.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.cjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.cjs.map +1 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.d.cts +7 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.d.mts +7 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.mjs +44 -0
- package/dist/react-renderer/a2ui-react/catalog/minimal/index.mjs.map +1 -0
- package/dist/react-renderer/a2ui-react/index.cjs +22 -0
- package/dist/react-renderer/a2ui-react/index.d.cts +4 -0
- package/dist/react-renderer/a2ui-react/index.d.mts +4 -0
- package/dist/react-renderer/a2ui-react/index.mjs +24 -0
- package/dist/react-renderer/catalog-utils.cjs +84 -0
- package/dist/react-renderer/catalog-utils.cjs.map +1 -0
- package/dist/react-renderer/catalog-utils.d.cts +39 -0
- package/dist/react-renderer/catalog-utils.d.cts.map +1 -0
- package/dist/react-renderer/catalog-utils.d.mts +39 -0
- package/dist/react-renderer/catalog-utils.d.mts.map +1 -0
- package/dist/react-renderer/catalog-utils.mjs +79 -0
- package/dist/react-renderer/catalog-utils.mjs.map +1 -0
- package/dist/react-renderer/core/A2UIProvider.cjs +48 -70
- package/dist/react-renderer/core/A2UIProvider.cjs.map +1 -1
- package/dist/react-renderer/core/A2UIProvider.d.cts +13 -47
- package/dist/react-renderer/core/A2UIProvider.d.cts.map +1 -1
- package/dist/react-renderer/core/A2UIProvider.d.mts +13 -47
- package/dist/react-renderer/core/A2UIProvider.d.mts.map +1 -1
- package/dist/react-renderer/core/A2UIProvider.mjs +48 -71
- package/dist/react-renderer/core/A2UIProvider.mjs.map +1 -1
- package/dist/react-renderer/core/A2UIRenderer.cjs +8 -56
- package/dist/react-renderer/core/A2UIRenderer.cjs.map +1 -1
- package/dist/react-renderer/core/A2UIRenderer.d.cts +5 -19
- package/dist/react-renderer/core/A2UIRenderer.d.cts.map +1 -1
- package/dist/react-renderer/core/A2UIRenderer.d.mts +5 -19
- package/dist/react-renderer/core/A2UIRenderer.d.mts.map +1 -1
- package/dist/react-renderer/core/A2UIRenderer.mjs +9 -57
- package/dist/react-renderer/core/A2UIRenderer.mjs.map +1 -1
- package/dist/react-renderer/core/store.d.cts +6 -17
- package/dist/react-renderer/core/store.d.cts.map +1 -1
- package/dist/react-renderer/core/store.d.mts +6 -17
- package/dist/react-renderer/core/store.d.mts.map +1 -1
- package/dist/react-renderer/create-catalog.cjs +115 -0
- package/dist/react-renderer/create-catalog.cjs.map +1 -0
- package/dist/react-renderer/create-catalog.d.cts +107 -0
- package/dist/react-renderer/create-catalog.d.cts.map +1 -0
- package/dist/react-renderer/create-catalog.d.mts +107 -0
- package/dist/react-renderer/create-catalog.d.mts.map +1 -0
- package/dist/react-renderer/create-catalog.mjs +111 -0
- package/dist/react-renderer/create-catalog.mjs.map +1 -0
- package/dist/react-renderer/hooks/useA2UI.cjs +1 -26
- package/dist/react-renderer/hooks/useA2UI.cjs.map +1 -1
- package/dist/react-renderer/hooks/useA2UI.d.cts +5 -33
- package/dist/react-renderer/hooks/useA2UI.d.cts.map +1 -1
- package/dist/react-renderer/hooks/useA2UI.d.mts +5 -33
- package/dist/react-renderer/hooks/useA2UI.d.mts.map +1 -1
- package/dist/react-renderer/hooks/useA2UI.mjs +1 -26
- package/dist/react-renderer/hooks/useA2UI.mjs.map +1 -1
- package/dist/react-renderer/index.cjs +21 -27
- package/dist/react-renderer/index.cjs.map +1 -0
- package/dist/react-renderer/index.d.cts +17 -27
- package/dist/react-renderer/index.d.cts.map +1 -0
- package/dist/react-renderer/index.d.mts +17 -27
- package/dist/react-renderer/index.d.mts.map +1 -0
- package/dist/react-renderer/index.mjs +15 -27
- package/dist/react-renderer/index.mjs.map +1 -0
- package/dist/react-renderer/lib/utils.cjs +0 -25
- package/dist/react-renderer/lib/utils.cjs.map +1 -1
- package/dist/react-renderer/lib/utils.d.cts +0 -8
- package/dist/react-renderer/lib/utils.d.cts.map +1 -1
- package/dist/react-renderer/lib/utils.d.mts +0 -8
- package/dist/react-renderer/lib/utils.d.mts.map +1 -1
- package/dist/react-renderer/lib/utils.mjs +1 -25
- package/dist/react-renderer/lib/utils.mjs.map +1 -1
- package/dist/react-renderer/styles/index.cjs +4 -459
- package/dist/react-renderer/styles/index.cjs.map +1 -1
- package/dist/react-renderer/styles/index.d.mts +2 -18
- package/dist/react-renderer/styles/index.d.mts.map +1 -1
- package/dist/react-renderer/styles/index.mjs +4 -459
- package/dist/react-renderer/styles/index.mjs.map +1 -1
- package/dist/react-renderer/theme/ThemeContext.cjs +2 -19
- package/dist/react-renderer/theme/ThemeContext.cjs.map +1 -1
- package/dist/react-renderer/theme/ThemeContext.d.cts +4 -23
- package/dist/react-renderer/theme/ThemeContext.d.cts.map +1 -1
- package/dist/react-renderer/theme/ThemeContext.d.mts +4 -23
- package/dist/react-renderer/theme/ThemeContext.d.mts.map +1 -1
- package/dist/react-renderer/theme/ThemeContext.mjs +2 -19
- package/dist/react-renderer/theme/ThemeContext.mjs.map +1 -1
- package/dist/react-renderer/types.d.cts +24 -29
- package/dist/react-renderer/types.d.cts.map +1 -1
- package/dist/react-renderer/types.d.mts +24 -29
- package/dist/react-renderer/types.d.mts.map +1 -1
- package/package.json +29 -29
- package/dist/A2UIViewer.cjs +0 -154
- package/dist/A2UIViewer.cjs.map +0 -1
- package/dist/A2UIViewer.d.cts +0 -39
- package/dist/A2UIViewer.d.cts.map +0 -1
- package/dist/A2UIViewer.d.mts +0 -39
- package/dist/A2UIViewer.d.mts.map +0 -1
- package/dist/A2UIViewer.mjs +0 -152
- package/dist/A2UIViewer.mjs.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.cjs +0 -34
- package/dist/react-renderer/components/content/AudioPlayer.cjs.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.d.cts +0 -12
- package/dist/react-renderer/components/content/AudioPlayer.d.cts.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.d.mts +0 -12
- package/dist/react-renderer/components/content/AudioPlayer.d.mts.map +0 -1
- package/dist/react-renderer/components/content/AudioPlayer.mjs +0 -33
- package/dist/react-renderer/components/content/AudioPlayer.mjs.map +0 -1
- package/dist/react-renderer/components/content/Divider.cjs +0 -31
- package/dist/react-renderer/components/content/Divider.cjs.map +0 -1
- package/dist/react-renderer/components/content/Divider.d.cts +0 -17
- package/dist/react-renderer/components/content/Divider.d.cts.map +0 -1
- package/dist/react-renderer/components/content/Divider.d.mts +0 -17
- package/dist/react-renderer/components/content/Divider.d.mts.map +0 -1
- package/dist/react-renderer/components/content/Divider.mjs +0 -30
- package/dist/react-renderer/components/content/Divider.mjs.map +0 -1
- package/dist/react-renderer/components/content/Icon.cjs +0 -50
- package/dist/react-renderer/components/content/Icon.cjs.map +0 -1
- package/dist/react-renderer/components/content/Icon.d.cts +0 -20
- package/dist/react-renderer/components/content/Icon.d.cts.map +0 -1
- package/dist/react-renderer/components/content/Icon.d.mts +0 -20
- package/dist/react-renderer/components/content/Icon.d.mts.map +0 -1
- package/dist/react-renderer/components/content/Icon.mjs +0 -49
- package/dist/react-renderer/components/content/Icon.mjs.map +0 -1
- package/dist/react-renderer/components/content/Image.cjs +0 -43
- package/dist/react-renderer/components/content/Image.cjs.map +0 -1
- package/dist/react-renderer/components/content/Image.d.cts +0 -15
- package/dist/react-renderer/components/content/Image.d.cts.map +0 -1
- package/dist/react-renderer/components/content/Image.d.mts +0 -15
- package/dist/react-renderer/components/content/Image.d.mts.map +0 -1
- package/dist/react-renderer/components/content/Image.mjs +0 -42
- package/dist/react-renderer/components/content/Image.mjs.map +0 -1
- package/dist/react-renderer/components/content/Text.cjs +0 -131
- package/dist/react-renderer/components/content/Text.cjs.map +0 -1
- package/dist/react-renderer/components/content/Text.d.cts +0 -32
- package/dist/react-renderer/components/content/Text.d.cts.map +0 -1
- package/dist/react-renderer/components/content/Text.d.mts +0 -32
- package/dist/react-renderer/components/content/Text.d.mts.map +0 -1
- package/dist/react-renderer/components/content/Text.mjs +0 -129
- package/dist/react-renderer/components/content/Text.mjs.map +0 -1
- package/dist/react-renderer/components/content/Video.cjs +0 -56
- package/dist/react-renderer/components/content/Video.cjs.map +0 -1
- package/dist/react-renderer/components/content/Video.d.cts +0 -14
- package/dist/react-renderer/components/content/Video.d.cts.map +0 -1
- package/dist/react-renderer/components/content/Video.d.mts +0 -14
- package/dist/react-renderer/components/content/Video.d.mts.map +0 -1
- package/dist/react-renderer/components/content/Video.mjs +0 -55
- package/dist/react-renderer/components/content/Video.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/Button.cjs +0 -39
- package/dist/react-renderer/components/interactive/Button.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/Button.d.cts +0 -15
- package/dist/react-renderer/components/interactive/Button.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/Button.d.mts +0 -15
- package/dist/react-renderer/components/interactive/Button.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/Button.mjs +0 -38
- package/dist/react-renderer/components/interactive/Button.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.cjs +0 -58
- package/dist/react-renderer/components/interactive/CheckBox.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.d.cts +0 -14
- package/dist/react-renderer/components/interactive/CheckBox.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.d.mts +0 -14
- package/dist/react-renderer/components/interactive/CheckBox.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/CheckBox.mjs +0 -57
- package/dist/react-renderer/components/interactive/CheckBox.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.cjs +0 -65
- package/dist/react-renderer/components/interactive/DateTimeInput.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.d.cts +0 -14
- package/dist/react-renderer/components/interactive/DateTimeInput.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.d.mts +0 -14
- package/dist/react-renderer/components/interactive/DateTimeInput.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/DateTimeInput.mjs +0 -64
- package/dist/react-renderer/components/interactive/DateTimeInput.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.cjs +0 -54
- package/dist/react-renderer/components/interactive/MultipleChoice.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.d.cts +0 -15
- package/dist/react-renderer/components/interactive/MultipleChoice.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.d.mts +0 -15
- package/dist/react-renderer/components/interactive/MultipleChoice.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/MultipleChoice.mjs +0 -53
- package/dist/react-renderer/components/interactive/MultipleChoice.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.cjs +0 -72
- package/dist/react-renderer/components/interactive/Slider.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.d.cts +0 -14
- package/dist/react-renderer/components/interactive/Slider.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.d.mts +0 -14
- package/dist/react-renderer/components/interactive/Slider.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/Slider.mjs +0 -71
- package/dist/react-renderer/components/interactive/Slider.mjs.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.cjs +0 -74
- package/dist/react-renderer/components/interactive/TextField.cjs.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.d.cts +0 -14
- package/dist/react-renderer/components/interactive/TextField.d.cts.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.d.mts +0 -14
- package/dist/react-renderer/components/interactive/TextField.d.mts.map +0 -1
- package/dist/react-renderer/components/interactive/TextField.mjs +0 -73
- package/dist/react-renderer/components/interactive/TextField.mjs.map +0 -1
- package/dist/react-renderer/components/layout/Card.cjs +0 -46
- package/dist/react-renderer/components/layout/Card.cjs.map +0 -1
- package/dist/react-renderer/components/layout/Card.d.cts +0 -21
- package/dist/react-renderer/components/layout/Card.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/Card.d.mts +0 -21
- package/dist/react-renderer/components/layout/Card.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/Card.mjs +0 -45
- package/dist/react-renderer/components/layout/Card.mjs.map +0 -1
- package/dist/react-renderer/components/layout/Column.cjs +0 -43
- package/dist/react-renderer/components/layout/Column.cjs.map +0 -1
- package/dist/react-renderer/components/layout/Column.d.cts +0 -14
- package/dist/react-renderer/components/layout/Column.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/Column.d.mts +0 -14
- package/dist/react-renderer/components/layout/Column.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/Column.mjs +0 -42
- package/dist/react-renderer/components/layout/Column.mjs.map +0 -1
- package/dist/react-renderer/components/layout/List.cjs +0 -41
- package/dist/react-renderer/components/layout/List.cjs.map +0 -1
- package/dist/react-renderer/components/layout/List.d.cts +0 -14
- package/dist/react-renderer/components/layout/List.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/List.d.mts +0 -14
- package/dist/react-renderer/components/layout/List.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/List.mjs +0 -40
- package/dist/react-renderer/components/layout/List.mjs.map +0 -1
- package/dist/react-renderer/components/layout/Modal.cjs +0 -92
- package/dist/react-renderer/components/layout/Modal.cjs.map +0 -1
- package/dist/react-renderer/components/layout/Modal.d.cts +0 -19
- package/dist/react-renderer/components/layout/Modal.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/Modal.d.mts +0 -19
- package/dist/react-renderer/components/layout/Modal.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/Modal.mjs +0 -91
- package/dist/react-renderer/components/layout/Modal.mjs.map +0 -1
- package/dist/react-renderer/components/layout/Row.cjs +0 -43
- package/dist/react-renderer/components/layout/Row.cjs.map +0 -1
- package/dist/react-renderer/components/layout/Row.d.cts +0 -14
- package/dist/react-renderer/components/layout/Row.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/Row.d.mts +0 -14
- package/dist/react-renderer/components/layout/Row.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/Row.mjs +0 -42
- package/dist/react-renderer/components/layout/Row.mjs.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.cjs +0 -47
- package/dist/react-renderer/components/layout/Tabs.cjs.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.d.cts +0 -12
- package/dist/react-renderer/components/layout/Tabs.d.cts.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.d.mts +0 -12
- package/dist/react-renderer/components/layout/Tabs.d.mts.map +0 -1
- package/dist/react-renderer/components/layout/Tabs.mjs +0 -46
- package/dist/react-renderer/components/layout/Tabs.mjs.map +0 -1
- package/dist/react-renderer/core/A2UIViewer.cjs +0 -11
- package/dist/react-renderer/core/A2UIViewer.d.cts +0 -16
- package/dist/react-renderer/core/A2UIViewer.d.cts.map +0 -1
- package/dist/react-renderer/core/A2UIViewer.d.mts +0 -16
- package/dist/react-renderer/core/A2UIViewer.d.mts.map +0 -1
- package/dist/react-renderer/core/A2UIViewer.mjs +0 -11
- package/dist/react-renderer/core/ComponentNode.cjs +0 -53
- package/dist/react-renderer/core/ComponentNode.cjs.map +0 -1
- package/dist/react-renderer/core/ComponentNode.d.cts +0 -29
- package/dist/react-renderer/core/ComponentNode.d.cts.map +0 -1
- package/dist/react-renderer/core/ComponentNode.d.mts +0 -29
- package/dist/react-renderer/core/ComponentNode.d.mts.map +0 -1
- package/dist/react-renderer/core/ComponentNode.mjs +0 -52
- package/dist/react-renderer/core/ComponentNode.mjs.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.cjs +0 -173
- package/dist/react-renderer/hooks/useA2UIComponent.cjs.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.d.cts +0 -56
- package/dist/react-renderer/hooks/useA2UIComponent.d.cts.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.d.mts +0 -56
- package/dist/react-renderer/hooks/useA2UIComponent.d.mts.map +0 -1
- package/dist/react-renderer/hooks/useA2UIComponent.mjs +0 -172
- package/dist/react-renderer/hooks/useA2UIComponent.mjs.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.cjs +0 -114
- package/dist/react-renderer/registry/ComponentRegistry.cjs.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.d.cts +0 -82
- package/dist/react-renderer/registry/ComponentRegistry.d.cts.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.d.mts +0 -82
- package/dist/react-renderer/registry/ComponentRegistry.d.mts.map +0 -1
- package/dist/react-renderer/registry/ComponentRegistry.mjs +0 -113
- package/dist/react-renderer/registry/ComponentRegistry.mjs.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.cjs +0 -58
- package/dist/react-renderer/registry/defaultCatalog.cjs.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.d.cts +0 -17
- package/dist/react-renderer/registry/defaultCatalog.d.cts.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.d.mts +0 -17
- package/dist/react-renderer/registry/defaultCatalog.d.mts.map +0 -1
- package/dist/react-renderer/registry/defaultCatalog.mjs +0 -57
- package/dist/react-renderer/registry/defaultCatalog.mjs.map +0 -1
- package/dist/react-renderer/styles/reset.cjs +0 -29
- package/dist/react-renderer/styles/reset.cjs.map +0 -1
- package/dist/react-renderer/styles/reset.mjs +0 -28
- package/dist/react-renderer/styles/reset.mjs.map +0 -1
- package/dist/react-renderer/theme/litTheme.cjs +0 -386
- package/dist/react-renderer/theme/litTheme.cjs.map +0 -1
- package/dist/react-renderer/theme/litTheme.d.cts +0 -12
- package/dist/react-renderer/theme/litTheme.d.cts.map +0 -1
- package/dist/react-renderer/theme/litTheme.d.mts +0 -12
- package/dist/react-renderer/theme/litTheme.d.mts.map +0 -1
- package/dist/react-renderer/theme/litTheme.mjs +0 -384
- package/dist/react-renderer/theme/litTheme.mjs.map +0 -1
- package/dist/react-renderer/theme/utils.cjs +0 -41
- package/dist/react-renderer/theme/utils.cjs.map +0 -1
- package/dist/react-renderer/theme/utils.d.cts +0 -26
- package/dist/react-renderer/theme/utils.d.cts.map +0 -1
- package/dist/react-renderer/theme/utils.d.mts +0 -26
- package/dist/react-renderer/theme/utils.d.mts.map +0 -1
- package/dist/react-renderer/theme/utils.mjs +0 -39
- package/dist/react-renderer/theme/utils.mjs.map +0 -1
- package/dist/theme/viewer-theme.cjs +0 -395
- package/dist/theme/viewer-theme.cjs.map +0 -1
- package/dist/theme/viewer-theme.d.cts +0 -7
- package/dist/theme/viewer-theme.d.cts.map +0 -1
- package/dist/theme/viewer-theme.d.mts +0 -7
- package/dist/theme/viewer-theme.d.mts.map +0 -1
- package/dist/theme/viewer-theme.mjs +0 -394
- package/dist/theme/viewer-theme.mjs.map +0 -1
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
-
const require_ThemeContext = require('../theme/ThemeContext.cjs');
|
|
3
|
-
const require_A2UIProvider = require('../core/A2UIProvider.cjs');
|
|
4
|
-
let react = require("react");
|
|
5
|
-
|
|
6
|
-
//#region src/react-renderer/hooks/useA2UIComponent.ts
|
|
7
|
-
/**
|
|
8
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
9
|
-
* and action dispatching.
|
|
10
|
-
*
|
|
11
|
-
* @param node - The component node from the A2UI message processor
|
|
12
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
13
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```tsx
|
|
17
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
18
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
19
|
-
*
|
|
20
|
-
* const label = resolveString(node.properties.label);
|
|
21
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
22
|
-
*
|
|
23
|
-
* return (
|
|
24
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
25
|
-
* <label>{label}</label>
|
|
26
|
-
* <input
|
|
27
|
-
* value={value}
|
|
28
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
29
|
-
* />
|
|
30
|
-
* </div>
|
|
31
|
-
* );
|
|
32
|
-
* }
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
function useA2UIComponent(node, surfaceId) {
|
|
36
|
-
const actions = require_A2UIProvider.useA2UIActions();
|
|
37
|
-
const theme = require_ThemeContext.useTheme();
|
|
38
|
-
const baseId = (0, react.useId)();
|
|
39
|
-
require_A2UIProvider.useA2UIState();
|
|
40
|
-
/**
|
|
41
|
-
* Resolve a StringValue to its actual string value.
|
|
42
|
-
* Checks literalString, literal, then path in that order.
|
|
43
|
-
* Note: This reads from data model via stable actions reference.
|
|
44
|
-
*/
|
|
45
|
-
const resolveString = (0, react.useCallback)((value) => {
|
|
46
|
-
if (!value) return null;
|
|
47
|
-
if (typeof value !== "object") return null;
|
|
48
|
-
if (value.literalString !== void 0) return value.literalString;
|
|
49
|
-
if (value.literal !== void 0) return String(value.literal);
|
|
50
|
-
if (value.path) {
|
|
51
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
52
|
-
return data !== null ? String(data) : null;
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}, [
|
|
56
|
-
actions,
|
|
57
|
-
node,
|
|
58
|
-
surfaceId
|
|
59
|
-
]);
|
|
60
|
-
/**
|
|
61
|
-
* Resolve a NumberValue to its actual number value.
|
|
62
|
-
*/
|
|
63
|
-
const resolveNumber = (0, react.useCallback)((value) => {
|
|
64
|
-
if (!value) return null;
|
|
65
|
-
if (typeof value !== "object") return null;
|
|
66
|
-
if (value.literalNumber !== void 0) return value.literalNumber;
|
|
67
|
-
if (value.literal !== void 0) return Number(value.literal);
|
|
68
|
-
if (value.path) {
|
|
69
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
70
|
-
return data !== null ? Number(data) : null;
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
}, [
|
|
74
|
-
actions,
|
|
75
|
-
node,
|
|
76
|
-
surfaceId
|
|
77
|
-
]);
|
|
78
|
-
/**
|
|
79
|
-
* Resolve a BooleanValue to its actual boolean value.
|
|
80
|
-
*/
|
|
81
|
-
const resolveBoolean = (0, react.useCallback)((value) => {
|
|
82
|
-
if (!value) return null;
|
|
83
|
-
if (typeof value !== "object") return null;
|
|
84
|
-
if (value.literalBoolean !== void 0) return value.literalBoolean;
|
|
85
|
-
if (value.literal !== void 0) return Boolean(value.literal);
|
|
86
|
-
if (value.path) {
|
|
87
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
88
|
-
return data !== null ? Boolean(data) : null;
|
|
89
|
-
}
|
|
90
|
-
return null;
|
|
91
|
-
}, [
|
|
92
|
-
actions,
|
|
93
|
-
node,
|
|
94
|
-
surfaceId
|
|
95
|
-
]);
|
|
96
|
-
/**
|
|
97
|
-
* Set a value in the data model for two-way binding.
|
|
98
|
-
*/
|
|
99
|
-
const setValue = (0, react.useCallback)((path, value) => {
|
|
100
|
-
actions.setData(node, path, value, surfaceId);
|
|
101
|
-
}, [
|
|
102
|
-
actions,
|
|
103
|
-
node,
|
|
104
|
-
surfaceId
|
|
105
|
-
]);
|
|
106
|
-
/**
|
|
107
|
-
* Get a value from the data model.
|
|
108
|
-
*/
|
|
109
|
-
const getValue = (0, react.useCallback)((path) => {
|
|
110
|
-
return actions.getData(node, path, surfaceId);
|
|
111
|
-
}, [
|
|
112
|
-
actions,
|
|
113
|
-
node,
|
|
114
|
-
surfaceId
|
|
115
|
-
]);
|
|
116
|
-
/**
|
|
117
|
-
* Dispatch a user action to the server.
|
|
118
|
-
* Resolves all context bindings before dispatching.
|
|
119
|
-
*/
|
|
120
|
-
const sendAction = (0, react.useCallback)((action) => {
|
|
121
|
-
const actionContext = {};
|
|
122
|
-
if (action.context) {
|
|
123
|
-
for (const item of action.context) if (item.value.literalString !== void 0) actionContext[item.key] = item.value.literalString;
|
|
124
|
-
else if (item.value.literalNumber !== void 0) actionContext[item.key] = item.value.literalNumber;
|
|
125
|
-
else if (item.value.literalBoolean !== void 0) actionContext[item.key] = item.value.literalBoolean;
|
|
126
|
-
else if (item.value.path) {
|
|
127
|
-
const resolvedPath = actions.resolvePath(item.value.path, node.dataContextPath);
|
|
128
|
-
actionContext[item.key] = actions.getData(node, resolvedPath, surfaceId);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
actions.dispatch({ userAction: {
|
|
132
|
-
name: action.name,
|
|
133
|
-
sourceComponentId: node.id,
|
|
134
|
-
surfaceId,
|
|
135
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
136
|
-
context: actionContext
|
|
137
|
-
} });
|
|
138
|
-
}, [
|
|
139
|
-
actions,
|
|
140
|
-
node,
|
|
141
|
-
surfaceId
|
|
142
|
-
]);
|
|
143
|
-
/**
|
|
144
|
-
* Generate a unique ID for accessibility purposes.
|
|
145
|
-
* Uses React's useId() for SSR and Concurrent Mode compatibility.
|
|
146
|
-
*/
|
|
147
|
-
const getUniqueId = (0, react.useCallback)((prefix) => {
|
|
148
|
-
return `${prefix}${baseId}`;
|
|
149
|
-
}, [baseId]);
|
|
150
|
-
return (0, react.useMemo)(() => ({
|
|
151
|
-
theme,
|
|
152
|
-
resolveString,
|
|
153
|
-
resolveNumber,
|
|
154
|
-
resolveBoolean,
|
|
155
|
-
setValue,
|
|
156
|
-
getValue,
|
|
157
|
-
sendAction,
|
|
158
|
-
getUniqueId
|
|
159
|
-
}), [
|
|
160
|
-
theme,
|
|
161
|
-
resolveString,
|
|
162
|
-
resolveNumber,
|
|
163
|
-
resolveBoolean,
|
|
164
|
-
setValue,
|
|
165
|
-
getValue,
|
|
166
|
-
sendAction,
|
|
167
|
-
getUniqueId
|
|
168
|
-
]);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
//#endregion
|
|
172
|
-
exports.useA2UIComponent = useA2UIComponent;
|
|
173
|
-
//# sourceMappingURL=useA2UIComponent.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UIComponent.cjs","names":["useA2UIActions","useTheme"],"sources":["../../../src/react-renderer/hooks/useA2UIComponent.ts"],"sourcesContent":["import { useCallback, useId, useMemo } from \"react\";\nimport type { Types, Primitives } from \"@a2ui/lit/0.8\";\nimport { useA2UIActions, useA2UIState } from \"../core/A2UIProvider\";\nimport { useTheme } from \"../theme/ThemeContext\";\n\n/**\n * Result returned by the useA2UIComponent hook.\n */\nexport interface UseA2UIComponentResult {\n /** The current theme */\n theme: Types.Theme;\n\n /** Resolve a StringValue to its actual string value */\n resolveString: (\n value: Primitives.StringValue | null | undefined,\n ) => string | null;\n\n /** Resolve a NumberValue to its actual number value */\n resolveNumber: (\n value: Primitives.NumberValue | null | undefined,\n ) => number | null;\n\n /** Resolve a BooleanValue to its actual boolean value */\n resolveBoolean: (\n value: Primitives.BooleanValue | null | undefined,\n ) => boolean | null;\n\n /** Set a value in the data model (for two-way binding) */\n setValue: (path: string, value: Types.DataValue) => void;\n\n /** Get a value from the data model */\n getValue: (path: string) => Types.DataValue | null;\n\n /** Dispatch a user action */\n sendAction: (action: Types.Action) => void;\n\n /** Generate a unique ID for accessibility */\n getUniqueId: (prefix: string) => string;\n}\n\n/**\n * Base hook for A2UI components. Provides data binding, theme access,\n * and action dispatching.\n *\n * @param node - The component node from the A2UI message processor\n * @param surfaceId - The surface ID this component belongs to\n * @returns Object with theme, data binding helpers, and action dispatcher\n *\n * @example\n * ```tsx\n * function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {\n * const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);\n *\n * const label = resolveString(node.properties.label);\n * const value = resolveString(node.properties.text) ?? '';\n *\n * return (\n * <div className={classMapToString(theme.components.TextField.container)}>\n * <label>{label}</label>\n * <input\n * value={value}\n * onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function useA2UIComponent<T extends Types.AnyComponentNode>(\n node: T,\n surfaceId: string,\n): UseA2UIComponentResult {\n // Use stable actions - won't cause re-renders when version changes\n const actions = useA2UIActions();\n const theme = useTheme();\n const baseId = useId();\n\n // Subscribe to data model version - triggers re-render when data changes via setData.\n // This ensures components with path bindings see updated values.\n // memo() doesn't block context-triggered re-renders.\n useA2UIState();\n\n /**\n * Resolve a StringValue to its actual string value.\n * Checks literalString, literal, then path in that order.\n * Note: This reads from data model via stable actions reference.\n */\n const resolveString = useCallback(\n (value: Primitives.StringValue | null | undefined): string | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalString !== undefined) {\n return value.literalString;\n }\n if (value.literal !== undefined) {\n return String(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? String(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Resolve a NumberValue to its actual number value.\n */\n const resolveNumber = useCallback(\n (value: Primitives.NumberValue | null | undefined): number | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalNumber !== undefined) {\n return value.literalNumber;\n }\n if (value.literal !== undefined) {\n return Number(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? Number(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Resolve a BooleanValue to its actual boolean value.\n */\n const resolveBoolean = useCallback(\n (value: Primitives.BooleanValue | null | undefined): boolean | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalBoolean !== undefined) {\n return value.literalBoolean;\n }\n if (value.literal !== undefined) {\n return Boolean(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? Boolean(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Set a value in the data model for two-way binding.\n */\n const setValue = useCallback(\n (path: string, value: Types.DataValue) => {\n actions.setData(node, path, value, surfaceId);\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Get a value from the data model.\n */\n const getValue = useCallback(\n (path: string): Types.DataValue | null => {\n return actions.getData(node, path, surfaceId);\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Dispatch a user action to the server.\n * Resolves all context bindings before dispatching.\n */\n const sendAction = useCallback(\n (action: Types.Action) => {\n const actionContext: Record<string, unknown> = {};\n\n if (action.context) {\n for (const item of action.context) {\n if (item.value.literalString !== undefined) {\n actionContext[item.key] = item.value.literalString;\n } else if (item.value.literalNumber !== undefined) {\n actionContext[item.key] = item.value.literalNumber;\n } else if (item.value.literalBoolean !== undefined) {\n actionContext[item.key] = item.value.literalBoolean;\n } else if (item.value.path) {\n const resolvedPath = actions.resolvePath(\n item.value.path,\n node.dataContextPath,\n );\n actionContext[item.key] = actions.getData(\n node,\n resolvedPath,\n surfaceId,\n );\n }\n }\n }\n\n actions.dispatch({\n userAction: {\n name: action.name,\n sourceComponentId: node.id,\n surfaceId,\n timestamp: new Date().toISOString(),\n context: actionContext,\n },\n });\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Generate a unique ID for accessibility purposes.\n * Uses React's useId() for SSR and Concurrent Mode compatibility.\n */\n const getUniqueId = useCallback(\n (prefix: string) => {\n return `${prefix}${baseId}`;\n },\n [baseId],\n );\n\n return useMemo(\n () => ({\n theme,\n resolveString,\n resolveNumber,\n resolveBoolean,\n setValue,\n getValue,\n sendAction,\n getUniqueId,\n }),\n [\n theme,\n resolveString,\n resolveNumber,\n resolveBoolean,\n setValue,\n getValue,\n sendAction,\n getUniqueId,\n ],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA,SAAgB,iBACd,MACA,WACwB;CAExB,MAAM,UAAUA,qCAAgB;CAChC,MAAM,QAAQC,+BAAU;CACxB,MAAM,2BAAgB;AAKtB,oCAAc;;;;;;CAOd,MAAM,wCACH,UAAoE;AACnE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,kBAAkB,OAC1B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,OAAO,MAAM,QAAQ;AAE9B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,OAAO,KAAK,GAAG;;AAExC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,wCACH,UAAoE;AACnE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,kBAAkB,OAC1B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,OAAO,MAAM,QAAQ;AAE9B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,OAAO,KAAK,GAAG;;AAExC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,yCACH,UAAsE;AACrE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,mBAAmB,OAC3B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,QAAQ,MAAM,QAAQ;AAE/B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,QAAQ,KAAK,GAAG;;AAEzC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,mCACH,MAAc,UAA2B;AACxC,UAAQ,QAAQ,MAAM,MAAM,OAAO,UAAU;IAE/C;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,mCACH,SAAyC;AACxC,SAAO,QAAQ,QAAQ,MAAM,MAAM,UAAU;IAE/C;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;;CAMD,MAAM,qCACH,WAAyB;EACxB,MAAM,gBAAyC,EAAE;AAEjD,MAAI,OAAO,SACT;QAAK,MAAM,QAAQ,OAAO,QACxB,KAAI,KAAK,MAAM,kBAAkB,OAC/B,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,kBAAkB,OACtC,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,mBAAmB,OACvC,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,MAAM;IAC1B,MAAM,eAAe,QAAQ,YAC3B,KAAK,MAAM,MACX,KAAK,gBACN;AACD,kBAAc,KAAK,OAAO,QAAQ,QAChC,MACA,cACA,UACD;;;AAKP,UAAQ,SAAS,EACf,YAAY;GACV,MAAM,OAAO;GACb,mBAAmB,KAAK;GACxB;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC,SAAS;GACV,EACF,CAAC;IAEJ;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;;CAMD,MAAM,sCACH,WAAmB;AAClB,SAAO,GAAG,SAAS;IAErB,CAAC,OAAO,CACT;AAED,kCACS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Primitives, Types } from "@a2ui/lit/0.8";
|
|
2
|
-
|
|
3
|
-
//#region src/react-renderer/hooks/useA2UIComponent.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Result returned by the useA2UIComponent hook.
|
|
6
|
-
*/
|
|
7
|
-
interface UseA2UIComponentResult {
|
|
8
|
-
/** The current theme */
|
|
9
|
-
theme: Types.Theme;
|
|
10
|
-
/** Resolve a StringValue to its actual string value */
|
|
11
|
-
resolveString: (value: Primitives.StringValue | null | undefined) => string | null;
|
|
12
|
-
/** Resolve a NumberValue to its actual number value */
|
|
13
|
-
resolveNumber: (value: Primitives.NumberValue | null | undefined) => number | null;
|
|
14
|
-
/** Resolve a BooleanValue to its actual boolean value */
|
|
15
|
-
resolveBoolean: (value: Primitives.BooleanValue | null | undefined) => boolean | null;
|
|
16
|
-
/** Set a value in the data model (for two-way binding) */
|
|
17
|
-
setValue: (path: string, value: Types.DataValue) => void;
|
|
18
|
-
/** Get a value from the data model */
|
|
19
|
-
getValue: (path: string) => Types.DataValue | null;
|
|
20
|
-
/** Dispatch a user action */
|
|
21
|
-
sendAction: (action: Types.Action) => void;
|
|
22
|
-
/** Generate a unique ID for accessibility */
|
|
23
|
-
getUniqueId: (prefix: string) => string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
27
|
-
* and action dispatching.
|
|
28
|
-
*
|
|
29
|
-
* @param node - The component node from the A2UI message processor
|
|
30
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
31
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```tsx
|
|
35
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
36
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
37
|
-
*
|
|
38
|
-
* const label = resolveString(node.properties.label);
|
|
39
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
40
|
-
*
|
|
41
|
-
* return (
|
|
42
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
43
|
-
* <label>{label}</label>
|
|
44
|
-
* <input
|
|
45
|
-
* value={value}
|
|
46
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
47
|
-
* />
|
|
48
|
-
* </div>
|
|
49
|
-
* );
|
|
50
|
-
* }
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
declare function useA2UIComponent<T extends Types.AnyComponentNode>(node: T, surfaceId: string): UseA2UIComponentResult;
|
|
54
|
-
//#endregion
|
|
55
|
-
export { UseA2UIComponentResult, useA2UIComponent };
|
|
56
|
-
//# sourceMappingURL=useA2UIComponent.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UIComponent.d.cts","names":[],"sources":["../../../src/react-renderer/hooks/useA2UIComponent.ts"],"mappings":";;;;;AAQA;UAAiB,sBAAA;;EAEf,KAAA,EAAO,KAAA,CAAM,KAAA;EAIJ;EADT,aAAA,GACE,KAAA,EAAO,UAAA,CAAW,WAAA;EAUX;EANT,aAAA,GACE,KAAA,EAAO,UAAA,CAAW,WAAA;EAYQ;EAR5B,cAAA,GACE,KAAA,EAAO,UAAA,CAAW,YAAA;EAUa;EANjC,QAAA,GAAW,IAAA,UAAc,KAAA,EAAO,KAAA,CAAM,SAAA;EAlBtC;EAqBA,QAAA,GAAW,IAAA,aAAiB,KAAA,CAAM,SAAA;EArBrB;EAwBb,UAAA,GAAa,MAAA,EAAQ,KAAA,CAAM,MAAA;EApBlB;EAuBT,WAAA,GAAc,MAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BhB;;;iBAAgB,gBAAA,WAA2B,KAAA,CAAM,gBAAA,CAAA,CAC/C,IAAA,EAAM,CAAA,EACN,SAAA,WACC,sBAAA"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Primitives, Types } from "@a2ui/lit/0.8";
|
|
2
|
-
|
|
3
|
-
//#region src/react-renderer/hooks/useA2UIComponent.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Result returned by the useA2UIComponent hook.
|
|
6
|
-
*/
|
|
7
|
-
interface UseA2UIComponentResult {
|
|
8
|
-
/** The current theme */
|
|
9
|
-
theme: Types.Theme;
|
|
10
|
-
/** Resolve a StringValue to its actual string value */
|
|
11
|
-
resolveString: (value: Primitives.StringValue | null | undefined) => string | null;
|
|
12
|
-
/** Resolve a NumberValue to its actual number value */
|
|
13
|
-
resolveNumber: (value: Primitives.NumberValue | null | undefined) => number | null;
|
|
14
|
-
/** Resolve a BooleanValue to its actual boolean value */
|
|
15
|
-
resolveBoolean: (value: Primitives.BooleanValue | null | undefined) => boolean | null;
|
|
16
|
-
/** Set a value in the data model (for two-way binding) */
|
|
17
|
-
setValue: (path: string, value: Types.DataValue) => void;
|
|
18
|
-
/** Get a value from the data model */
|
|
19
|
-
getValue: (path: string) => Types.DataValue | null;
|
|
20
|
-
/** Dispatch a user action */
|
|
21
|
-
sendAction: (action: Types.Action) => void;
|
|
22
|
-
/** Generate a unique ID for accessibility */
|
|
23
|
-
getUniqueId: (prefix: string) => string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
27
|
-
* and action dispatching.
|
|
28
|
-
*
|
|
29
|
-
* @param node - The component node from the A2UI message processor
|
|
30
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
31
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```tsx
|
|
35
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
36
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
37
|
-
*
|
|
38
|
-
* const label = resolveString(node.properties.label);
|
|
39
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
40
|
-
*
|
|
41
|
-
* return (
|
|
42
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
43
|
-
* <label>{label}</label>
|
|
44
|
-
* <input
|
|
45
|
-
* value={value}
|
|
46
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
47
|
-
* />
|
|
48
|
-
* </div>
|
|
49
|
-
* );
|
|
50
|
-
* }
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
declare function useA2UIComponent<T extends Types.AnyComponentNode>(node: T, surfaceId: string): UseA2UIComponentResult;
|
|
54
|
-
//#endregion
|
|
55
|
-
export { UseA2UIComponentResult, useA2UIComponent };
|
|
56
|
-
//# sourceMappingURL=useA2UIComponent.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UIComponent.d.mts","names":[],"sources":["../../../src/react-renderer/hooks/useA2UIComponent.ts"],"mappings":";;;;;AAQA;UAAiB,sBAAA;;EAEf,KAAA,EAAO,KAAA,CAAM,KAAA;EAIJ;EADT,aAAA,GACE,KAAA,EAAO,UAAA,CAAW,WAAA;EAUX;EANT,aAAA,GACE,KAAA,EAAO,UAAA,CAAW,WAAA;EAYQ;EAR5B,cAAA,GACE,KAAA,EAAO,UAAA,CAAW,YAAA;EAUa;EANjC,QAAA,GAAW,IAAA,UAAc,KAAA,EAAO,KAAA,CAAM,SAAA;EAlBtC;EAqBA,QAAA,GAAW,IAAA,aAAiB,KAAA,CAAM,SAAA;EArBrB;EAwBb,UAAA,GAAa,MAAA,EAAQ,KAAA,CAAM,MAAA;EApBlB;EAuBT,WAAA,GAAc,MAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BhB;;;iBAAgB,gBAAA,WAA2B,KAAA,CAAM,gBAAA,CAAA,CAC/C,IAAA,EAAM,CAAA,EACN,SAAA,WACC,sBAAA"}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { useTheme } from "../theme/ThemeContext.mjs";
|
|
2
|
-
import { useA2UIActions, useA2UIState } from "../core/A2UIProvider.mjs";
|
|
3
|
-
import { useCallback, useId, useMemo } from "react";
|
|
4
|
-
|
|
5
|
-
//#region src/react-renderer/hooks/useA2UIComponent.ts
|
|
6
|
-
/**
|
|
7
|
-
* Base hook for A2UI components. Provides data binding, theme access,
|
|
8
|
-
* and action dispatching.
|
|
9
|
-
*
|
|
10
|
-
* @param node - The component node from the A2UI message processor
|
|
11
|
-
* @param surfaceId - The surface ID this component belongs to
|
|
12
|
-
* @returns Object with theme, data binding helpers, and action dispatcher
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```tsx
|
|
16
|
-
* function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {
|
|
17
|
-
* const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
|
|
18
|
-
*
|
|
19
|
-
* const label = resolveString(node.properties.label);
|
|
20
|
-
* const value = resolveString(node.properties.text) ?? '';
|
|
21
|
-
*
|
|
22
|
-
* return (
|
|
23
|
-
* <div className={classMapToString(theme.components.TextField.container)}>
|
|
24
|
-
* <label>{label}</label>
|
|
25
|
-
* <input
|
|
26
|
-
* value={value}
|
|
27
|
-
* onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}
|
|
28
|
-
* />
|
|
29
|
-
* </div>
|
|
30
|
-
* );
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
function useA2UIComponent(node, surfaceId) {
|
|
35
|
-
const actions = useA2UIActions();
|
|
36
|
-
const theme = useTheme();
|
|
37
|
-
const baseId = useId();
|
|
38
|
-
useA2UIState();
|
|
39
|
-
/**
|
|
40
|
-
* Resolve a StringValue to its actual string value.
|
|
41
|
-
* Checks literalString, literal, then path in that order.
|
|
42
|
-
* Note: This reads from data model via stable actions reference.
|
|
43
|
-
*/
|
|
44
|
-
const resolveString = useCallback((value) => {
|
|
45
|
-
if (!value) return null;
|
|
46
|
-
if (typeof value !== "object") return null;
|
|
47
|
-
if (value.literalString !== void 0) return value.literalString;
|
|
48
|
-
if (value.literal !== void 0) return String(value.literal);
|
|
49
|
-
if (value.path) {
|
|
50
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
51
|
-
return data !== null ? String(data) : null;
|
|
52
|
-
}
|
|
53
|
-
return null;
|
|
54
|
-
}, [
|
|
55
|
-
actions,
|
|
56
|
-
node,
|
|
57
|
-
surfaceId
|
|
58
|
-
]);
|
|
59
|
-
/**
|
|
60
|
-
* Resolve a NumberValue to its actual number value.
|
|
61
|
-
*/
|
|
62
|
-
const resolveNumber = useCallback((value) => {
|
|
63
|
-
if (!value) return null;
|
|
64
|
-
if (typeof value !== "object") return null;
|
|
65
|
-
if (value.literalNumber !== void 0) return value.literalNumber;
|
|
66
|
-
if (value.literal !== void 0) return Number(value.literal);
|
|
67
|
-
if (value.path) {
|
|
68
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
69
|
-
return data !== null ? Number(data) : null;
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}, [
|
|
73
|
-
actions,
|
|
74
|
-
node,
|
|
75
|
-
surfaceId
|
|
76
|
-
]);
|
|
77
|
-
/**
|
|
78
|
-
* Resolve a BooleanValue to its actual boolean value.
|
|
79
|
-
*/
|
|
80
|
-
const resolveBoolean = useCallback((value) => {
|
|
81
|
-
if (!value) return null;
|
|
82
|
-
if (typeof value !== "object") return null;
|
|
83
|
-
if (value.literalBoolean !== void 0) return value.literalBoolean;
|
|
84
|
-
if (value.literal !== void 0) return Boolean(value.literal);
|
|
85
|
-
if (value.path) {
|
|
86
|
-
const data = actions.getData(node, value.path, surfaceId);
|
|
87
|
-
return data !== null ? Boolean(data) : null;
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}, [
|
|
91
|
-
actions,
|
|
92
|
-
node,
|
|
93
|
-
surfaceId
|
|
94
|
-
]);
|
|
95
|
-
/**
|
|
96
|
-
* Set a value in the data model for two-way binding.
|
|
97
|
-
*/
|
|
98
|
-
const setValue = useCallback((path, value) => {
|
|
99
|
-
actions.setData(node, path, value, surfaceId);
|
|
100
|
-
}, [
|
|
101
|
-
actions,
|
|
102
|
-
node,
|
|
103
|
-
surfaceId
|
|
104
|
-
]);
|
|
105
|
-
/**
|
|
106
|
-
* Get a value from the data model.
|
|
107
|
-
*/
|
|
108
|
-
const getValue = useCallback((path) => {
|
|
109
|
-
return actions.getData(node, path, surfaceId);
|
|
110
|
-
}, [
|
|
111
|
-
actions,
|
|
112
|
-
node,
|
|
113
|
-
surfaceId
|
|
114
|
-
]);
|
|
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) if (item.value.literalString !== void 0) actionContext[item.key] = item.value.literalString;
|
|
123
|
-
else if (item.value.literalNumber !== void 0) actionContext[item.key] = item.value.literalNumber;
|
|
124
|
-
else if (item.value.literalBoolean !== void 0) actionContext[item.key] = item.value.literalBoolean;
|
|
125
|
-
else if (item.value.path) {
|
|
126
|
-
const resolvedPath = actions.resolvePath(item.value.path, node.dataContextPath);
|
|
127
|
-
actionContext[item.key] = actions.getData(node, resolvedPath, surfaceId);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
actions.dispatch({ userAction: {
|
|
131
|
-
name: action.name,
|
|
132
|
-
sourceComponentId: node.id,
|
|
133
|
-
surfaceId,
|
|
134
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
135
|
-
context: actionContext
|
|
136
|
-
} });
|
|
137
|
-
}, [
|
|
138
|
-
actions,
|
|
139
|
-
node,
|
|
140
|
-
surfaceId
|
|
141
|
-
]);
|
|
142
|
-
/**
|
|
143
|
-
* Generate a unique ID for accessibility purposes.
|
|
144
|
-
* Uses React's useId() for SSR and Concurrent Mode compatibility.
|
|
145
|
-
*/
|
|
146
|
-
const getUniqueId = useCallback((prefix) => {
|
|
147
|
-
return `${prefix}${baseId}`;
|
|
148
|
-
}, [baseId]);
|
|
149
|
-
return useMemo(() => ({
|
|
150
|
-
theme,
|
|
151
|
-
resolveString,
|
|
152
|
-
resolveNumber,
|
|
153
|
-
resolveBoolean,
|
|
154
|
-
setValue,
|
|
155
|
-
getValue,
|
|
156
|
-
sendAction,
|
|
157
|
-
getUniqueId
|
|
158
|
-
}), [
|
|
159
|
-
theme,
|
|
160
|
-
resolveString,
|
|
161
|
-
resolveNumber,
|
|
162
|
-
resolveBoolean,
|
|
163
|
-
setValue,
|
|
164
|
-
getValue,
|
|
165
|
-
sendAction,
|
|
166
|
-
getUniqueId
|
|
167
|
-
]);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
//#endregion
|
|
171
|
-
export { useA2UIComponent };
|
|
172
|
-
//# sourceMappingURL=useA2UIComponent.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useA2UIComponent.mjs","names":[],"sources":["../../../src/react-renderer/hooks/useA2UIComponent.ts"],"sourcesContent":["import { useCallback, useId, useMemo } from \"react\";\nimport type { Types, Primitives } from \"@a2ui/lit/0.8\";\nimport { useA2UIActions, useA2UIState } from \"../core/A2UIProvider\";\nimport { useTheme } from \"../theme/ThemeContext\";\n\n/**\n * Result returned by the useA2UIComponent hook.\n */\nexport interface UseA2UIComponentResult {\n /** The current theme */\n theme: Types.Theme;\n\n /** Resolve a StringValue to its actual string value */\n resolveString: (\n value: Primitives.StringValue | null | undefined,\n ) => string | null;\n\n /** Resolve a NumberValue to its actual number value */\n resolveNumber: (\n value: Primitives.NumberValue | null | undefined,\n ) => number | null;\n\n /** Resolve a BooleanValue to its actual boolean value */\n resolveBoolean: (\n value: Primitives.BooleanValue | null | undefined,\n ) => boolean | null;\n\n /** Set a value in the data model (for two-way binding) */\n setValue: (path: string, value: Types.DataValue) => void;\n\n /** Get a value from the data model */\n getValue: (path: string) => Types.DataValue | null;\n\n /** Dispatch a user action */\n sendAction: (action: Types.Action) => void;\n\n /** Generate a unique ID for accessibility */\n getUniqueId: (prefix: string) => string;\n}\n\n/**\n * Base hook for A2UI components. Provides data binding, theme access,\n * and action dispatching.\n *\n * @param node - The component node from the A2UI message processor\n * @param surfaceId - The surface ID this component belongs to\n * @returns Object with theme, data binding helpers, and action dispatcher\n *\n * @example\n * ```tsx\n * function TextField({ node, surfaceId }: A2UIComponentProps<Types.TextFieldNode>) {\n * const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);\n *\n * const label = resolveString(node.properties.label);\n * const value = resolveString(node.properties.text) ?? '';\n *\n * return (\n * <div className={classMapToString(theme.components.TextField.container)}>\n * <label>{label}</label>\n * <input\n * value={value}\n * onChange={(e) => setValue(node.properties.text?.path!, e.target.value)}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function useA2UIComponent<T extends Types.AnyComponentNode>(\n node: T,\n surfaceId: string,\n): UseA2UIComponentResult {\n // Use stable actions - won't cause re-renders when version changes\n const actions = useA2UIActions();\n const theme = useTheme();\n const baseId = useId();\n\n // Subscribe to data model version - triggers re-render when data changes via setData.\n // This ensures components with path bindings see updated values.\n // memo() doesn't block context-triggered re-renders.\n useA2UIState();\n\n /**\n * Resolve a StringValue to its actual string value.\n * Checks literalString, literal, then path in that order.\n * Note: This reads from data model via stable actions reference.\n */\n const resolveString = useCallback(\n (value: Primitives.StringValue | null | undefined): string | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalString !== undefined) {\n return value.literalString;\n }\n if (value.literal !== undefined) {\n return String(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? String(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Resolve a NumberValue to its actual number value.\n */\n const resolveNumber = useCallback(\n (value: Primitives.NumberValue | null | undefined): number | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalNumber !== undefined) {\n return value.literalNumber;\n }\n if (value.literal !== undefined) {\n return Number(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? Number(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Resolve a BooleanValue to its actual boolean value.\n */\n const resolveBoolean = useCallback(\n (value: Primitives.BooleanValue | null | undefined): boolean | null => {\n if (!value) return null;\n if (typeof value !== \"object\") return null;\n\n if (value.literalBoolean !== undefined) {\n return value.literalBoolean;\n }\n if (value.literal !== undefined) {\n return Boolean(value.literal);\n }\n if (value.path) {\n const data = actions.getData(node, value.path, surfaceId);\n return data !== null ? Boolean(data) : null;\n }\n return null;\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Set a value in the data model for two-way binding.\n */\n const setValue = useCallback(\n (path: string, value: Types.DataValue) => {\n actions.setData(node, path, value, surfaceId);\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Get a value from the data model.\n */\n const getValue = useCallback(\n (path: string): Types.DataValue | null => {\n return actions.getData(node, path, surfaceId);\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Dispatch a user action to the server.\n * Resolves all context bindings before dispatching.\n */\n const sendAction = useCallback(\n (action: Types.Action) => {\n const actionContext: Record<string, unknown> = {};\n\n if (action.context) {\n for (const item of action.context) {\n if (item.value.literalString !== undefined) {\n actionContext[item.key] = item.value.literalString;\n } else if (item.value.literalNumber !== undefined) {\n actionContext[item.key] = item.value.literalNumber;\n } else if (item.value.literalBoolean !== undefined) {\n actionContext[item.key] = item.value.literalBoolean;\n } else if (item.value.path) {\n const resolvedPath = actions.resolvePath(\n item.value.path,\n node.dataContextPath,\n );\n actionContext[item.key] = actions.getData(\n node,\n resolvedPath,\n surfaceId,\n );\n }\n }\n }\n\n actions.dispatch({\n userAction: {\n name: action.name,\n sourceComponentId: node.id,\n surfaceId,\n timestamp: new Date().toISOString(),\n context: actionContext,\n },\n });\n },\n [actions, node, surfaceId],\n );\n\n /**\n * Generate a unique ID for accessibility purposes.\n * Uses React's useId() for SSR and Concurrent Mode compatibility.\n */\n const getUniqueId = useCallback(\n (prefix: string) => {\n return `${prefix}${baseId}`;\n },\n [baseId],\n );\n\n return useMemo(\n () => ({\n theme,\n resolveString,\n resolveNumber,\n resolveBoolean,\n setValue,\n getValue,\n sendAction,\n getUniqueId,\n }),\n [\n theme,\n resolveString,\n resolveNumber,\n resolveBoolean,\n setValue,\n getValue,\n sendAction,\n getUniqueId,\n ],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA,SAAgB,iBACd,MACA,WACwB;CAExB,MAAM,UAAU,gBAAgB;CAChC,MAAM,QAAQ,UAAU;CACxB,MAAM,SAAS,OAAO;AAKtB,eAAc;;;;;;CAOd,MAAM,gBAAgB,aACnB,UAAoE;AACnE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,kBAAkB,OAC1B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,OAAO,MAAM,QAAQ;AAE9B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,OAAO,KAAK,GAAG;;AAExC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,gBAAgB,aACnB,UAAoE;AACnE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,kBAAkB,OAC1B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,OAAO,MAAM,QAAQ;AAE9B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,OAAO,KAAK,GAAG;;AAExC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,iBAAiB,aACpB,UAAsE;AACrE,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,MAAI,MAAM,mBAAmB,OAC3B,QAAO,MAAM;AAEf,MAAI,MAAM,YAAY,OACpB,QAAO,QAAQ,MAAM,QAAQ;AAE/B,MAAI,MAAM,MAAM;GACd,MAAM,OAAO,QAAQ,QAAQ,MAAM,MAAM,MAAM,UAAU;AACzD,UAAO,SAAS,OAAO,QAAQ,KAAK,GAAG;;AAEzC,SAAO;IAET;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,WAAW,aACd,MAAc,UAA2B;AACxC,UAAQ,QAAQ,MAAM,MAAM,OAAO,UAAU;IAE/C;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;CAKD,MAAM,WAAW,aACd,SAAyC;AACxC,SAAO,QAAQ,QAAQ,MAAM,MAAM,UAAU;IAE/C;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;;CAMD,MAAM,aAAa,aAChB,WAAyB;EACxB,MAAM,gBAAyC,EAAE;AAEjD,MAAI,OAAO,SACT;QAAK,MAAM,QAAQ,OAAO,QACxB,KAAI,KAAK,MAAM,kBAAkB,OAC/B,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,kBAAkB,OACtC,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,mBAAmB,OACvC,eAAc,KAAK,OAAO,KAAK,MAAM;YAC5B,KAAK,MAAM,MAAM;IAC1B,MAAM,eAAe,QAAQ,YAC3B,KAAK,MAAM,MACX,KAAK,gBACN;AACD,kBAAc,KAAK,OAAO,QAAQ,QAChC,MACA,cACA,UACD;;;AAKP,UAAQ,SAAS,EACf,YAAY;GACV,MAAM,OAAO;GACb,mBAAmB,KAAK;GACxB;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC,SAAS;GACV,EACF,CAAC;IAEJ;EAAC;EAAS;EAAM;EAAU,CAC3B;;;;;CAMD,MAAM,cAAc,aACjB,WAAmB;AAClB,SAAO,GAAG,SAAS;IAErB,CAAC,OAAO,CACT;AAED,QAAO,eACE;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
-
let react = require("react");
|
|
3
|
-
|
|
4
|
-
//#region src/react-renderer/registry/ComponentRegistry.ts
|
|
5
|
-
/**
|
|
6
|
-
* Registry for A2UI components. Allows registration of custom components
|
|
7
|
-
* and supports lazy loading for code splitting.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```tsx
|
|
11
|
-
* const registry = new ComponentRegistry();
|
|
12
|
-
*
|
|
13
|
-
* // Register a component directly
|
|
14
|
-
* registry.register('Text', { component: Text });
|
|
15
|
-
*
|
|
16
|
-
* // Register with lazy loading
|
|
17
|
-
* registry.register('Modal', {
|
|
18
|
-
* component: () => import('./components/Modal'),
|
|
19
|
-
* lazy: true
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* // Use with A2UIRenderer
|
|
23
|
-
* <A2UIRenderer surfaceId="main" registry={registry} />
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
var ComponentRegistry = class ComponentRegistry {
|
|
27
|
-
constructor() {
|
|
28
|
-
this.registry = /* @__PURE__ */ new Map();
|
|
29
|
-
this.lazyCache = /* @__PURE__ */ new Map();
|
|
30
|
-
}
|
|
31
|
-
static {
|
|
32
|
-
this._instance = null;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get the singleton instance of the registry.
|
|
36
|
-
* Use this for the default global registry.
|
|
37
|
-
*/
|
|
38
|
-
static getInstance() {
|
|
39
|
-
if (!ComponentRegistry._instance) ComponentRegistry._instance = new ComponentRegistry();
|
|
40
|
-
return ComponentRegistry._instance;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Reset the singleton instance.
|
|
44
|
-
* Useful for testing.
|
|
45
|
-
*/
|
|
46
|
-
static resetInstance() {
|
|
47
|
-
ComponentRegistry._instance = null;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Register a component type.
|
|
51
|
-
*
|
|
52
|
-
* @param type - The A2UI component type name (e.g., 'Text', 'Button')
|
|
53
|
-
* @param registration - The component registration
|
|
54
|
-
*/
|
|
55
|
-
register(type, registration) {
|
|
56
|
-
this.registry.set(type, registration);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Unregister a component type.
|
|
60
|
-
*
|
|
61
|
-
* @param type - The component type to unregister
|
|
62
|
-
*/
|
|
63
|
-
unregister(type) {
|
|
64
|
-
this.registry.delete(type);
|
|
65
|
-
this.lazyCache.delete(type);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Check if a component type is registered.
|
|
69
|
-
*
|
|
70
|
-
* @param type - The component type to check
|
|
71
|
-
* @returns True if the component is registered
|
|
72
|
-
*/
|
|
73
|
-
has(type) {
|
|
74
|
-
return this.registry.has(type);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get a component by type. If the component is registered with lazy loading,
|
|
78
|
-
* returns a React.lazy wrapped component.
|
|
79
|
-
*
|
|
80
|
-
* @param type - The component type to get
|
|
81
|
-
* @returns The React component, or null if not found
|
|
82
|
-
*/
|
|
83
|
-
get(type) {
|
|
84
|
-
const registration = this.registry.get(type);
|
|
85
|
-
if (!registration) return null;
|
|
86
|
-
if (registration.lazy && typeof registration.component === "function") {
|
|
87
|
-
const cached = this.lazyCache.get(type);
|
|
88
|
-
if (cached) return cached;
|
|
89
|
-
const lazyComponent = (0, react.lazy)(registration.component);
|
|
90
|
-
this.lazyCache.set(type, lazyComponent);
|
|
91
|
-
return lazyComponent;
|
|
92
|
-
}
|
|
93
|
-
return registration.component;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get all registered component types.
|
|
97
|
-
*
|
|
98
|
-
* @returns Array of registered type names
|
|
99
|
-
*/
|
|
100
|
-
getRegisteredTypes() {
|
|
101
|
-
return Array.from(this.registry.keys());
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Clear all registrations.
|
|
105
|
-
*/
|
|
106
|
-
clear() {
|
|
107
|
-
this.registry.clear();
|
|
108
|
-
this.lazyCache.clear();
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
//#endregion
|
|
113
|
-
exports.ComponentRegistry = ComponentRegistry;
|
|
114
|
-
//# sourceMappingURL=ComponentRegistry.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentRegistry.cjs","names":[],"sources":["../../../src/react-renderer/registry/ComponentRegistry.ts"],"sourcesContent":["import { lazy, type ComponentType } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type {\n A2UIComponentProps,\n ComponentLoader,\n ComponentRegistration,\n} from \"../types\";\n\n/**\n * Registry for A2UI components. Allows registration of custom components\n * and supports lazy loading for code splitting.\n *\n * @example\n * ```tsx\n * const registry = new ComponentRegistry();\n *\n * // Register a component directly\n * registry.register('Text', { component: Text });\n *\n * // Register with lazy loading\n * registry.register('Modal', {\n * component: () => import('./components/Modal'),\n * lazy: true\n * });\n *\n * // Use with A2UIRenderer\n * <A2UIRenderer surfaceId=\"main\" registry={registry} />\n * ```\n */\nexport class ComponentRegistry {\n private static _instance: ComponentRegistry | null = null;\n private registry = new Map<string, ComponentRegistration>();\n private lazyCache = new Map<string, ComponentType<A2UIComponentProps>>();\n\n /**\n * Get the singleton instance of the registry.\n * Use this for the default global registry.\n */\n static getInstance(): ComponentRegistry {\n if (!ComponentRegistry._instance) {\n ComponentRegistry._instance = new ComponentRegistry();\n }\n return ComponentRegistry._instance;\n }\n\n /**\n * Reset the singleton instance.\n * Useful for testing.\n */\n static resetInstance(): void {\n ComponentRegistry._instance = null;\n }\n\n /**\n * Register a component type.\n *\n * @param type - The A2UI component type name (e.g., 'Text', 'Button')\n * @param registration - The component registration\n */\n register<T extends Types.AnyComponentNode>(\n type: string,\n registration: ComponentRegistration<T>,\n ): void {\n this.registry.set(type, registration as unknown as ComponentRegistration);\n }\n\n /**\n * Unregister a component type.\n *\n * @param type - The component type to unregister\n */\n unregister(type: string): void {\n this.registry.delete(type);\n this.lazyCache.delete(type);\n }\n\n /**\n * Check if a component type is registered.\n *\n * @param type - The component type to check\n * @returns True if the component is registered\n */\n has(type: string): boolean {\n return this.registry.has(type);\n }\n\n /**\n * Get a component by type. If the component is registered with lazy loading,\n * returns a React.lazy wrapped component.\n *\n * @param type - The component type to get\n * @returns The React component, or null if not found\n */\n get(type: string): ComponentType<A2UIComponentProps> | null {\n const registration = this.registry.get(type);\n if (!registration) return null;\n\n // If lazy loading is enabled and the component is a loader function\n if (registration.lazy && typeof registration.component === \"function\") {\n // Check cache first\n const cached = this.lazyCache.get(type);\n if (cached) return cached;\n\n // Create lazy component and cache it\n const lazyComponent = lazy(registration.component as ComponentLoader);\n this.lazyCache.set(type, lazyComponent);\n return lazyComponent;\n }\n\n return registration.component as ComponentType<A2UIComponentProps>;\n }\n\n /**\n * Get all registered component types.\n *\n * @returns Array of registered type names\n */\n getRegisteredTypes(): string[] {\n return Array.from(this.registry.keys());\n }\n\n /**\n * Clear all registrations.\n */\n clear(): void {\n this.registry.clear();\n this.lazyCache.clear();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,IAAa,oBAAb,MAAa,kBAAkB;;kCAEV,IAAI,KAAoC;mCACvC,IAAI,KAAgD;;;mBAFnB;;;;;;CAQrD,OAAO,cAAiC;AACtC,MAAI,CAAC,kBAAkB,UACrB,mBAAkB,YAAY,IAAI,mBAAmB;AAEvD,SAAO,kBAAkB;;;;;;CAO3B,OAAO,gBAAsB;AAC3B,oBAAkB,YAAY;;;;;;;;CAShC,SACE,MACA,cACM;AACN,OAAK,SAAS,IAAI,MAAM,aAAiD;;;;;;;CAQ3E,WAAW,MAAoB;AAC7B,OAAK,SAAS,OAAO,KAAK;AAC1B,OAAK,UAAU,OAAO,KAAK;;;;;;;;CAS7B,IAAI,MAAuB;AACzB,SAAO,KAAK,SAAS,IAAI,KAAK;;;;;;;;;CAUhC,IAAI,MAAwD;EAC1D,MAAM,eAAe,KAAK,SAAS,IAAI,KAAK;AAC5C,MAAI,CAAC,aAAc,QAAO;AAG1B,MAAI,aAAa,QAAQ,OAAO,aAAa,cAAc,YAAY;GAErE,MAAM,SAAS,KAAK,UAAU,IAAI,KAAK;AACvC,OAAI,OAAQ,QAAO;GAGnB,MAAM,gCAAqB,aAAa,UAA6B;AACrE,QAAK,UAAU,IAAI,MAAM,cAAc;AACvC,UAAO;;AAGT,SAAO,aAAa;;;;;;;CAQtB,qBAA+B;AAC7B,SAAO,MAAM,KAAK,KAAK,SAAS,MAAM,CAAC;;;;;CAMzC,QAAc;AACZ,OAAK,SAAS,OAAO;AACrB,OAAK,UAAU,OAAO"}
|