@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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_utils = require('../../theme/utils.cjs');
|
|
3
|
+
require('../../lib/utils.cjs');
|
|
4
|
+
const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/react-renderer/components/content/AudioPlayer.tsx
|
|
9
|
+
/**
|
|
10
|
+
* AudioPlayer component - renders an audio player with optional description.
|
|
11
|
+
*/
|
|
12
|
+
const AudioPlayer = (0, react.memo)(function AudioPlayer({ node, surfaceId }) {
|
|
13
|
+
const { theme, resolveString } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
|
|
14
|
+
const props = node.properties;
|
|
15
|
+
const url = resolveString(props.url);
|
|
16
|
+
const description = resolveString(props.description ?? null);
|
|
17
|
+
if (!url) return null;
|
|
18
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
19
|
+
className: "a2ui-audio",
|
|
20
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
21
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
22
|
+
className: require_utils.classMapToString(theme.components.AudioPlayer),
|
|
23
|
+
style: require_utils.stylesToObject(theme.additionalStyles?.AudioPlayer),
|
|
24
|
+
children: [description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: description }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("audio", {
|
|
25
|
+
src: url,
|
|
26
|
+
controls: true
|
|
27
|
+
})]
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.default = AudioPlayer;
|
|
34
|
+
//# sourceMappingURL=AudioPlayer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioPlayer.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/content/AudioPlayer.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * AudioPlayer component - renders an audio player with optional description.\n */\nexport const AudioPlayer = memo(function AudioPlayer({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.AudioPlayerNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const url = resolveString(props.url);\n const description = resolveString(props.description ?? null);\n\n if (!url) {\n return null;\n }\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-audio\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.AudioPlayer)}\n style={stylesToObject(theme.additionalStyles?.AudioPlayer)}\n >\n {description && <p>{description}</p>}\n <audio src={url} controls />\n </section>\n </div>\n );\n});\n\nexport default AudioPlayer;\n"],"mappings":";;;;;;;;;;;AASA,MAAa,8BAAmB,SAAS,YAAY,EACnD,MACA,aAC4C;CAC5C,MAAM,EAAE,OAAO,kBAAkBA,0CAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,MAAM,cAAc,MAAM,IAAI;CACpC,MAAM,cAAc,cAAc,MAAM,eAAe,KAAK;AAE5D,KAAI,CAAC,IACH,QAAO;AAST,QACE,2CAAC;EAAI,WAAU;EAAa,OAL5B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,4CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,YAAY;GACzD,OAAOC,6BAAe,MAAM,kBAAkB,YAAY;cAEzD,eAAe,2CAAC,iBAAG,cAAgB,EACpC,2CAAC;IAAM,KAAK;IAAK;KAAW;IACpB;GACN;EAER"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
|
|
2
|
+
import "../../lib/utils.mjs";
|
|
3
|
+
import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/react-renderer/components/content/AudioPlayer.tsx
|
|
8
|
+
/**
|
|
9
|
+
* AudioPlayer component - renders an audio player with optional description.
|
|
10
|
+
*/
|
|
11
|
+
const AudioPlayer = memo(function AudioPlayer({ node, surfaceId }) {
|
|
12
|
+
const { theme, resolveString } = useA2UIComponent(node, surfaceId);
|
|
13
|
+
const props = node.properties;
|
|
14
|
+
const url = resolveString(props.url);
|
|
15
|
+
const description = resolveString(props.description ?? null);
|
|
16
|
+
if (!url) return null;
|
|
17
|
+
return /* @__PURE__ */ jsx("div", {
|
|
18
|
+
className: "a2ui-audio",
|
|
19
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
20
|
+
children: /* @__PURE__ */ jsxs("section", {
|
|
21
|
+
className: classMapToString(theme.components.AudioPlayer),
|
|
22
|
+
style: stylesToObject(theme.additionalStyles?.AudioPlayer),
|
|
23
|
+
children: [description && /* @__PURE__ */ jsx("p", { children: description }), /* @__PURE__ */ jsx("audio", {
|
|
24
|
+
src: url,
|
|
25
|
+
controls: true
|
|
26
|
+
})]
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { AudioPlayer as default };
|
|
33
|
+
//# sourceMappingURL=AudioPlayer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioPlayer.mjs","names":[],"sources":["../../../../src/react-renderer/components/content/AudioPlayer.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * AudioPlayer component - renders an audio player with optional description.\n */\nexport const AudioPlayer = memo(function AudioPlayer({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.AudioPlayerNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const url = resolveString(props.url);\n const description = resolveString(props.description ?? null);\n\n if (!url) {\n return null;\n }\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-audio\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.AudioPlayer)}\n style={stylesToObject(theme.additionalStyles?.AudioPlayer)}\n >\n {description && <p>{description}</p>}\n <audio src={url} controls />\n </section>\n </div>\n );\n});\n\nexport default AudioPlayer;\n"],"mappings":";;;;;;;;;;AASA,MAAa,cAAc,KAAK,SAAS,YAAY,EACnD,MACA,aAC4C;CAC5C,MAAM,EAAE,OAAO,kBAAkB,iBAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,MAAM,cAAc,MAAM,IAAI;CACpC,MAAM,cAAc,cAAc,MAAM,eAAe,KAAK;AAE5D,KAAI,CAAC,IACH,QAAO;AAST,QACE,oBAAC;EAAI,WAAU;EAAa,OAL5B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,qBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,YAAY;GACzD,OAAO,eAAe,MAAM,kBAAkB,YAAY;cAEzD,eAAe,oBAAC,iBAAG,cAAgB,EACpC,oBAAC;IAAM,KAAK;IAAK;KAAW;IACpB;GACN;EAER"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_utils = require('../../theme/utils.cjs');
|
|
3
|
+
require('../../lib/utils.cjs');
|
|
4
|
+
const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/react-renderer/components/content/Divider.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Divider component - renders a visual separator line.
|
|
11
|
+
*
|
|
12
|
+
* Structure mirrors Lit's Divider component:
|
|
13
|
+
* <div class="a2ui-divider"> ← :host equivalent
|
|
14
|
+
* <hr class="..."> ← internal element
|
|
15
|
+
* </div>
|
|
16
|
+
*/
|
|
17
|
+
const Divider = (0, react.memo)(function Divider({ node, surfaceId }) {
|
|
18
|
+
const { theme } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
|
|
19
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
20
|
+
className: "a2ui-divider",
|
|
21
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
22
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", {
|
|
23
|
+
className: require_utils.classMapToString(theme.components.Divider),
|
|
24
|
+
style: require_utils.stylesToObject(theme.additionalStyles?.Divider)
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.default = Divider;
|
|
31
|
+
//# sourceMappingURL=Divider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/content/Divider.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Divider component - renders a visual separator line.\n *\n * Structure mirrors Lit's Divider component:\n * <div class=\"a2ui-divider\"> ← :host equivalent\n * <hr class=\"...\"> ← internal element\n * </div>\n */\nexport const Divider = memo(function Divider({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.DividerNode>) {\n const { theme } = useA2UIComponent(node, surfaceId);\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-divider\" style={hostStyle}>\n <hr\n className={classMapToString(theme.components.Divider)}\n style={stylesToObject(theme.additionalStyles?.Divider)}\n />\n </div>\n );\n});\n\nexport default Divider;\n"],"mappings":";;;;;;;;;;;;;;;;AAcA,MAAa,0BAAe,SAAS,QAAQ,EAC3C,MACA,aACwC;CACxC,MAAM,EAAE,UAAUA,0CAAiB,MAAM,UAAU;AAQnD,QACE,2CAAC;EAAI,WAAU;EAAe,OAL9B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,2CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,QAAQ;GACrD,OAAOC,6BAAe,MAAM,kBAAkB,QAAQ;IACtD;GACE;EAER"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
|
|
2
|
+
import "../../lib/utils.mjs";
|
|
3
|
+
import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/react-renderer/components/content/Divider.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Divider component - renders a visual separator line.
|
|
10
|
+
*
|
|
11
|
+
* Structure mirrors Lit's Divider component:
|
|
12
|
+
* <div class="a2ui-divider"> ← :host equivalent
|
|
13
|
+
* <hr class="..."> ← internal element
|
|
14
|
+
* </div>
|
|
15
|
+
*/
|
|
16
|
+
const Divider = memo(function Divider({ node, surfaceId }) {
|
|
17
|
+
const { theme } = useA2UIComponent(node, surfaceId);
|
|
18
|
+
return /* @__PURE__ */ jsx("div", {
|
|
19
|
+
className: "a2ui-divider",
|
|
20
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
21
|
+
children: /* @__PURE__ */ jsx("hr", {
|
|
22
|
+
className: classMapToString(theme.components.Divider),
|
|
23
|
+
style: stylesToObject(theme.additionalStyles?.Divider)
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { Divider as default };
|
|
30
|
+
//# sourceMappingURL=Divider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.mjs","names":[],"sources":["../../../../src/react-renderer/components/content/Divider.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Divider component - renders a visual separator line.\n *\n * Structure mirrors Lit's Divider component:\n * <div class=\"a2ui-divider\"> ← :host equivalent\n * <hr class=\"...\"> ← internal element\n * </div>\n */\nexport const Divider = memo(function Divider({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.DividerNode>) {\n const { theme } = useA2UIComponent(node, surfaceId);\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-divider\" style={hostStyle}>\n <hr\n className={classMapToString(theme.components.Divider)}\n style={stylesToObject(theme.additionalStyles?.Divider)}\n />\n </div>\n );\n});\n\nexport default Divider;\n"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAa,UAAU,KAAK,SAAS,QAAQ,EAC3C,MACA,aACwC;CACxC,MAAM,EAAE,UAAU,iBAAiB,MAAM,UAAU;AAQnD,QACE,oBAAC;EAAI,WAAU;EAAe,OAL9B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,oBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,QAAQ;GACrD,OAAO,eAAe,MAAM,kBAAkB,QAAQ;IACtD;GACE;EAER"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_utils = require('../../theme/utils.cjs');
|
|
3
|
+
require('../../lib/utils.cjs');
|
|
4
|
+
const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/react-renderer/components/content/Icon.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Convert camelCase to snake_case for Material Symbols font.
|
|
11
|
+
* e.g., "shoppingCart" -> "shopping_cart"
|
|
12
|
+
* This matches the Lit renderer's approach.
|
|
13
|
+
*/
|
|
14
|
+
function toSnakeCase(str) {
|
|
15
|
+
return str.replace(/([A-Z])/g, "_$1").toLowerCase();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Icon component - renders an icon using Material Symbols Outlined font.
|
|
19
|
+
*
|
|
20
|
+
* This matches the Lit renderer's approach using the g-icon class with
|
|
21
|
+
* Material Symbols Outlined font.
|
|
22
|
+
*
|
|
23
|
+
* @example Add Material Symbols font to your HTML:
|
|
24
|
+
* ```html
|
|
25
|
+
* <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet">
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
const Icon = (0, react.memo)(function Icon({ node, surfaceId }) {
|
|
29
|
+
const { theme, resolveString } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
|
|
30
|
+
const props = node.properties;
|
|
31
|
+
const iconName = resolveString(props.name);
|
|
32
|
+
if (!iconName) return null;
|
|
33
|
+
const snakeCaseName = toSnakeCase(iconName);
|
|
34
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
35
|
+
className: "a2ui-icon",
|
|
36
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
37
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
38
|
+
className: require_utils.classMapToString(theme.components.Icon),
|
|
39
|
+
style: require_utils.stylesToObject(theme.additionalStyles?.Icon),
|
|
40
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
41
|
+
className: "g-icon",
|
|
42
|
+
children: snakeCaseName
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
exports.default = Icon;
|
|
50
|
+
//# sourceMappingURL=Icon.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/content/Icon.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Convert camelCase to snake_case for Material Symbols font.\n * e.g., \"shoppingCart\" -> \"shopping_cart\"\n * This matches the Lit renderer's approach.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n}\n\n/**\n * Icon component - renders an icon using Material Symbols Outlined font.\n *\n * This matches the Lit renderer's approach using the g-icon class with\n * Material Symbols Outlined font.\n *\n * @example Add Material Symbols font to your HTML:\n * ```html\n * <link href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\" rel=\"stylesheet\">\n * ```\n */\nexport const Icon = memo(function Icon({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.IconNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const iconName = resolveString(props.name);\n\n if (!iconName) {\n return null;\n }\n\n // Convert camelCase to snake_case for Material Symbols\n const snakeCaseName = toSnakeCase(iconName);\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-icon\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.Icon)}\n style={stylesToObject(theme.additionalStyles?.Icon)}\n >\n <span className=\"g-icon\">{snakeCaseName}</span>\n </section>\n </div>\n );\n});\n\nexport default Icon;\n"],"mappings":";;;;;;;;;;;;;AAWA,SAAS,YAAY,KAAqB;AACxC,QAAO,IAAI,QAAQ,YAAY,MAAM,CAAC,aAAa;;;;;;;;;;;;;AAcrD,MAAa,uBAAY,SAAS,KAAK,EACrC,MACA,aACqC;CACrC,MAAM,EAAE,OAAO,kBAAkBA,0CAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,WAAW,cAAc,MAAM,KAAK;AAE1C,KAAI,CAAC,SACH,QAAO;CAIT,MAAM,gBAAgB,YAAY,SAAS;AAQ3C,QACE,2CAAC;EAAI,WAAU;EAAY,OAL3B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,2CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,KAAK;GAClD,OAAOC,6BAAe,MAAM,kBAAkB,KAAK;aAEnD,2CAAC;IAAK,WAAU;cAAU;KAAqB;IACvC;GACN;EAER"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
|
|
2
|
+
import "../../lib/utils.mjs";
|
|
3
|
+
import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/react-renderer/components/content/Icon.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Convert camelCase to snake_case for Material Symbols font.
|
|
10
|
+
* e.g., "shoppingCart" -> "shopping_cart"
|
|
11
|
+
* This matches the Lit renderer's approach.
|
|
12
|
+
*/
|
|
13
|
+
function toSnakeCase(str) {
|
|
14
|
+
return str.replace(/([A-Z])/g, "_$1").toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Icon component - renders an icon using Material Symbols Outlined font.
|
|
18
|
+
*
|
|
19
|
+
* This matches the Lit renderer's approach using the g-icon class with
|
|
20
|
+
* Material Symbols Outlined font.
|
|
21
|
+
*
|
|
22
|
+
* @example Add Material Symbols font to your HTML:
|
|
23
|
+
* ```html
|
|
24
|
+
* <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet">
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
const Icon = memo(function Icon({ node, surfaceId }) {
|
|
28
|
+
const { theme, resolveString } = useA2UIComponent(node, surfaceId);
|
|
29
|
+
const props = node.properties;
|
|
30
|
+
const iconName = resolveString(props.name);
|
|
31
|
+
if (!iconName) return null;
|
|
32
|
+
const snakeCaseName = toSnakeCase(iconName);
|
|
33
|
+
return /* @__PURE__ */ jsx("div", {
|
|
34
|
+
className: "a2ui-icon",
|
|
35
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
36
|
+
children: /* @__PURE__ */ jsx("section", {
|
|
37
|
+
className: classMapToString(theme.components.Icon),
|
|
38
|
+
style: stylesToObject(theme.additionalStyles?.Icon),
|
|
39
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
40
|
+
className: "g-icon",
|
|
41
|
+
children: snakeCaseName
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { Icon as default };
|
|
49
|
+
//# sourceMappingURL=Icon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.mjs","names":[],"sources":["../../../../src/react-renderer/components/content/Icon.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Convert camelCase to snake_case for Material Symbols font.\n * e.g., \"shoppingCart\" -> \"shopping_cart\"\n * This matches the Lit renderer's approach.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n}\n\n/**\n * Icon component - renders an icon using Material Symbols Outlined font.\n *\n * This matches the Lit renderer's approach using the g-icon class with\n * Material Symbols Outlined font.\n *\n * @example Add Material Symbols font to your HTML:\n * ```html\n * <link href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\" rel=\"stylesheet\">\n * ```\n */\nexport const Icon = memo(function Icon({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.IconNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const iconName = resolveString(props.name);\n\n if (!iconName) {\n return null;\n }\n\n // Convert camelCase to snake_case for Material Symbols\n const snakeCaseName = toSnakeCase(iconName);\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-icon\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.Icon)}\n style={stylesToObject(theme.additionalStyles?.Icon)}\n >\n <span className=\"g-icon\">{snakeCaseName}</span>\n </section>\n </div>\n );\n});\n\nexport default Icon;\n"],"mappings":";;;;;;;;;;;;AAWA,SAAS,YAAY,KAAqB;AACxC,QAAO,IAAI,QAAQ,YAAY,MAAM,CAAC,aAAa;;;;;;;;;;;;;AAcrD,MAAa,OAAO,KAAK,SAAS,KAAK,EACrC,MACA,aACqC;CACrC,MAAM,EAAE,OAAO,kBAAkB,iBAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,WAAW,cAAc,MAAM,KAAK;AAE1C,KAAI,CAAC,SACH,QAAO;CAIT,MAAM,gBAAgB,YAAY,SAAS;AAQ3C,QACE,oBAAC;EAAI,WAAU;EAAY,OAL3B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,oBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,KAAK;GAClD,OAAO,eAAe,MAAM,kBAAkB,KAAK;aAEnD,oBAAC;IAAK,WAAU;cAAU;KAAqB;IACvC;GACN;EAER"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_utils = require('../../theme/utils.cjs');
|
|
3
|
+
const require_utils$1 = require('../../lib/utils.cjs');
|
|
4
|
+
const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/react-renderer/components/content/Image.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Image component - renders an image from a URL with optional sizing and fit modes.
|
|
11
|
+
*
|
|
12
|
+
* Supports usageHint values: icon, avatar, smallFeature, mediumFeature, largeFeature, header
|
|
13
|
+
* Supports fit values: contain, cover, fill, none, scale-down (maps to object-fit via CSS variable)
|
|
14
|
+
*/
|
|
15
|
+
const Image = (0, react.memo)(function Image({ node, surfaceId }) {
|
|
16
|
+
const { theme, resolveString } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
|
|
17
|
+
const props = node.properties;
|
|
18
|
+
const url = resolveString(props.url);
|
|
19
|
+
const usageHint = props.usageHint;
|
|
20
|
+
const fit = props.fit ?? "fill";
|
|
21
|
+
const classes = require_utils$1.mergeClassMaps(theme.components.Image.all, usageHint ? theme.components.Image[usageHint] : {});
|
|
22
|
+
const style = {
|
|
23
|
+
...require_utils.stylesToObject(theme.additionalStyles?.Image),
|
|
24
|
+
"--object-fit": fit
|
|
25
|
+
};
|
|
26
|
+
if (!url) return null;
|
|
27
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
28
|
+
className: "a2ui-image",
|
|
29
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
30
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
31
|
+
className: require_utils.classMapToString(classes),
|
|
32
|
+
style,
|
|
33
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
34
|
+
src: url,
|
|
35
|
+
alt: ""
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
exports.default = Image;
|
|
43
|
+
//# sourceMappingURL=Image.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.cjs","names":["useA2UIComponent","mergeClassMaps","stylesToObject","classMapToString"],"sources":["../../../../src/react-renderer/components/content/Image.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport {\n classMapToString,\n stylesToObject,\n mergeClassMaps,\n} from \"../../lib/utils\";\n\ntype UsageHint =\n | \"icon\"\n | \"avatar\"\n | \"smallFeature\"\n | \"mediumFeature\"\n | \"largeFeature\"\n | \"header\";\ntype FitMode = \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n\n/**\n * Image component - renders an image from a URL with optional sizing and fit modes.\n *\n * Supports usageHint values: icon, avatar, smallFeature, mediumFeature, largeFeature, header\n * Supports fit values: contain, cover, fill, none, scale-down (maps to object-fit via CSS variable)\n */\nexport const Image = memo(function Image({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.ImageNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const url = resolveString(props.url);\n const usageHint = props.usageHint as UsageHint | undefined;\n const fit = (props.fit as FitMode) ?? \"fill\";\n\n // Get merged classes for section (matches Lit's Styles.merge)\n const classes = mergeClassMaps(\n theme.components.Image.all,\n usageHint ? theme.components.Image[usageHint] : {},\n );\n\n // Build style object with object-fit as CSS variable (matches Lit)\n const style: React.CSSProperties = {\n ...stylesToObject(theme.additionalStyles?.Image),\n \"--object-fit\": fit,\n } as React.CSSProperties;\n\n if (!url) {\n return null;\n }\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-image\" style={hostStyle}>\n <section className={classMapToString(classes)} style={style}>\n <img src={url} alt=\"\" />\n </section>\n </div>\n );\n});\n\nexport default Image;\n"],"mappings":";;;;;;;;;;;;;;AAyBA,MAAa,wBAAa,SAAS,MAAM,EACvC,MACA,aACsC;CACtC,MAAM,EAAE,OAAO,kBAAkBA,0CAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,MAAM,cAAc,MAAM,IAAI;CACpC,MAAM,YAAY,MAAM;CACxB,MAAM,MAAO,MAAM,OAAmB;CAGtC,MAAM,UAAUC,+BACd,MAAM,WAAW,MAAM,KACvB,YAAY,MAAM,WAAW,MAAM,aAAa,EAAE,CACnD;CAGD,MAAM,QAA6B;EACjC,GAAGC,6BAAe,MAAM,kBAAkB,MAAM;EAChD,gBAAgB;EACjB;AAED,KAAI,CAAC,IACH,QAAO;AAST,QACE,2CAAC;EAAI,WAAU;EAAa,OAL5B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,2CAAC;GAAQ,WAAWC,+BAAiB,QAAQ;GAAS;aACpD,2CAAC;IAAI,KAAK;IAAK,KAAI;KAAK;IAChB;GACN;EAER"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
|
|
2
|
+
import { mergeClassMaps } from "../../lib/utils.mjs";
|
|
3
|
+
import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/react-renderer/components/content/Image.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Image component - renders an image from a URL with optional sizing and fit modes.
|
|
10
|
+
*
|
|
11
|
+
* Supports usageHint values: icon, avatar, smallFeature, mediumFeature, largeFeature, header
|
|
12
|
+
* Supports fit values: contain, cover, fill, none, scale-down (maps to object-fit via CSS variable)
|
|
13
|
+
*/
|
|
14
|
+
const Image = memo(function Image({ node, surfaceId }) {
|
|
15
|
+
const { theme, resolveString } = useA2UIComponent(node, surfaceId);
|
|
16
|
+
const props = node.properties;
|
|
17
|
+
const url = resolveString(props.url);
|
|
18
|
+
const usageHint = props.usageHint;
|
|
19
|
+
const fit = props.fit ?? "fill";
|
|
20
|
+
const classes = mergeClassMaps(theme.components.Image.all, usageHint ? theme.components.Image[usageHint] : {});
|
|
21
|
+
const style = {
|
|
22
|
+
...stylesToObject(theme.additionalStyles?.Image),
|
|
23
|
+
"--object-fit": fit
|
|
24
|
+
};
|
|
25
|
+
if (!url) return null;
|
|
26
|
+
return /* @__PURE__ */ jsx("div", {
|
|
27
|
+
className: "a2ui-image",
|
|
28
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
29
|
+
children: /* @__PURE__ */ jsx("section", {
|
|
30
|
+
className: classMapToString(classes),
|
|
31
|
+
style,
|
|
32
|
+
children: /* @__PURE__ */ jsx("img", {
|
|
33
|
+
src: url,
|
|
34
|
+
alt: ""
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { Image as default };
|
|
42
|
+
//# sourceMappingURL=Image.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.mjs","names":[],"sources":["../../../../src/react-renderer/components/content/Image.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport {\n classMapToString,\n stylesToObject,\n mergeClassMaps,\n} from \"../../lib/utils\";\n\ntype UsageHint =\n | \"icon\"\n | \"avatar\"\n | \"smallFeature\"\n | \"mediumFeature\"\n | \"largeFeature\"\n | \"header\";\ntype FitMode = \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n\n/**\n * Image component - renders an image from a URL with optional sizing and fit modes.\n *\n * Supports usageHint values: icon, avatar, smallFeature, mediumFeature, largeFeature, header\n * Supports fit values: contain, cover, fill, none, scale-down (maps to object-fit via CSS variable)\n */\nexport const Image = memo(function Image({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.ImageNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const url = resolveString(props.url);\n const usageHint = props.usageHint as UsageHint | undefined;\n const fit = (props.fit as FitMode) ?? \"fill\";\n\n // Get merged classes for section (matches Lit's Styles.merge)\n const classes = mergeClassMaps(\n theme.components.Image.all,\n usageHint ? theme.components.Image[usageHint] : {},\n );\n\n // Build style object with object-fit as CSS variable (matches Lit)\n const style: React.CSSProperties = {\n ...stylesToObject(theme.additionalStyles?.Image),\n \"--object-fit\": fit,\n } as React.CSSProperties;\n\n if (!url) {\n return null;\n }\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-image\" style={hostStyle}>\n <section className={classMapToString(classes)} style={style}>\n <img src={url} alt=\"\" />\n </section>\n </div>\n );\n});\n\nexport default Image;\n"],"mappings":";;;;;;;;;;;;;AAyBA,MAAa,QAAQ,KAAK,SAAS,MAAM,EACvC,MACA,aACsC;CACtC,MAAM,EAAE,OAAO,kBAAkB,iBAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,MAAM,cAAc,MAAM,IAAI;CACpC,MAAM,YAAY,MAAM;CACxB,MAAM,MAAO,MAAM,OAAmB;CAGtC,MAAM,UAAU,eACd,MAAM,WAAW,MAAM,KACvB,YAAY,MAAM,WAAW,MAAM,aAAa,EAAE,CACnD;CAGD,MAAM,QAA6B;EACjC,GAAG,eAAe,MAAM,kBAAkB,MAAM;EAChD,gBAAgB;EACjB;AAED,KAAI,CAAC,IACH,QAAO;AAST,QACE,oBAAC;EAAI,WAAU;EAAa,OAL5B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,oBAAC;GAAQ,WAAW,iBAAiB,QAAQ;GAAS;aACpD,oBAAC;IAAI,KAAK;IAAK,KAAI;KAAK;IAChB;GACN;EAER"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_utils = require('../../theme/utils.cjs');
|
|
3
|
+
const require_utils$1 = require('../../lib/utils.cjs');
|
|
4
|
+
const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let markdown_it = require("markdown-it");
|
|
8
|
+
markdown_it = require_runtime.__toESM(markdown_it);
|
|
9
|
+
|
|
10
|
+
//#region src/react-renderer/components/content/Text.tsx
|
|
11
|
+
function isHintedStyles(styles) {
|
|
12
|
+
if (typeof styles !== "object" || !styles || Array.isArray(styles)) return false;
|
|
13
|
+
return [
|
|
14
|
+
"h1",
|
|
15
|
+
"h2",
|
|
16
|
+
"h3",
|
|
17
|
+
"h4",
|
|
18
|
+
"h5",
|
|
19
|
+
"caption",
|
|
20
|
+
"body"
|
|
21
|
+
].some((v) => v in styles);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Markdown-it instance for rendering markdown text.
|
|
25
|
+
* Uses synchronous import to ensure availability at first render (matches Lit renderer).
|
|
26
|
+
*
|
|
27
|
+
* Configuration matches Lit's markdown directive (uses MarkdownIt defaults):
|
|
28
|
+
* - html: false (default) - Security: disable raw HTML
|
|
29
|
+
* - linkify: false (default) - Don't auto-convert URLs/emails to links
|
|
30
|
+
* - breaks: false (default) - Don't convert \n to <br>
|
|
31
|
+
* - typographer: false (default) - Don't use smart quotes/dashes
|
|
32
|
+
*/
|
|
33
|
+
const markdownRenderer = new markdown_it.default();
|
|
34
|
+
/**
|
|
35
|
+
* Apply theme classes to markdown HTML elements.
|
|
36
|
+
* Replaces default element tags with themed versions.
|
|
37
|
+
*/
|
|
38
|
+
function applyMarkdownTheme(html, markdownTheme) {
|
|
39
|
+
if (!markdownTheme) return html;
|
|
40
|
+
const replacements = [];
|
|
41
|
+
for (const [element, classes] of Object.entries(markdownTheme)) {
|
|
42
|
+
if (!classes || Array.isArray(classes) && classes.length === 0) continue;
|
|
43
|
+
const classString = Array.isArray(classes) ? classes.join(" ") : require_utils.classMapToString(classes);
|
|
44
|
+
if (!classString) continue;
|
|
45
|
+
const tagRegex = new RegExp(`<${element}(?=\\s|>|/>)`, "gi");
|
|
46
|
+
replacements.push([tagRegex, `<${element} class="${classString}"`]);
|
|
47
|
+
}
|
|
48
|
+
let result = html;
|
|
49
|
+
for (const [regex, replacement] of replacements) result = result.replace(regex, replacement);
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Text component - renders text content with markdown support.
|
|
54
|
+
*
|
|
55
|
+
* Structure mirrors Lit's Text component:
|
|
56
|
+
* <div class="a2ui-text"> ← :host equivalent
|
|
57
|
+
* <section class="..."> ← theme classes
|
|
58
|
+
* <h2>...</h2> ← rendered markdown content
|
|
59
|
+
* </section>
|
|
60
|
+
* </div>
|
|
61
|
+
*
|
|
62
|
+
* Text is parsed as markdown and rendered as HTML (matches Lit renderer behavior).
|
|
63
|
+
* Supports usageHint values: h1, h2, h3, h4, h5, caption, body
|
|
64
|
+
*
|
|
65
|
+
* Markdown features supported:
|
|
66
|
+
* - **Bold** and *italic* text
|
|
67
|
+
* - Lists (ordered and unordered)
|
|
68
|
+
* - `inline code` and code blocks
|
|
69
|
+
* - [Links](url) (auto-linkified URLs too)
|
|
70
|
+
* - Blockquotes
|
|
71
|
+
* - Horizontal rules
|
|
72
|
+
*
|
|
73
|
+
* Note: Raw HTML is disabled for security.
|
|
74
|
+
*/
|
|
75
|
+
const Text = (0, react.memo)(function Text({ node, surfaceId }) {
|
|
76
|
+
const { theme, resolveString } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
|
|
77
|
+
const props = node.properties;
|
|
78
|
+
const textValue = resolveString(props.text);
|
|
79
|
+
const usageHint = props.usageHint;
|
|
80
|
+
const classes = require_utils$1.mergeClassMaps(theme.components.Text.all, usageHint ? theme.components.Text[usageHint] : {});
|
|
81
|
+
const additionalStyles = (0, react.useMemo)(() => {
|
|
82
|
+
const textStyles = theme.additionalStyles?.Text;
|
|
83
|
+
if (!textStyles) return void 0;
|
|
84
|
+
if (isHintedStyles(textStyles)) return require_utils.stylesToObject(textStyles[usageHint ?? "body"]);
|
|
85
|
+
return require_utils.stylesToObject(textStyles);
|
|
86
|
+
}, [theme.additionalStyles?.Text, usageHint]);
|
|
87
|
+
const renderedContent = (0, react.useMemo)(() => {
|
|
88
|
+
if (textValue === null || textValue === void 0) return null;
|
|
89
|
+
let markdownText = textValue;
|
|
90
|
+
switch (usageHint) {
|
|
91
|
+
case "h1":
|
|
92
|
+
markdownText = `# ${markdownText}`;
|
|
93
|
+
break;
|
|
94
|
+
case "h2":
|
|
95
|
+
markdownText = `## ${markdownText}`;
|
|
96
|
+
break;
|
|
97
|
+
case "h3":
|
|
98
|
+
markdownText = `### ${markdownText}`;
|
|
99
|
+
break;
|
|
100
|
+
case "h4":
|
|
101
|
+
markdownText = `#### ${markdownText}`;
|
|
102
|
+
break;
|
|
103
|
+
case "h5":
|
|
104
|
+
markdownText = `##### ${markdownText}`;
|
|
105
|
+
break;
|
|
106
|
+
case "caption":
|
|
107
|
+
markdownText = `*${markdownText}*`;
|
|
108
|
+
break;
|
|
109
|
+
default: break;
|
|
110
|
+
}
|
|
111
|
+
return { __html: applyMarkdownTheme(markdownRenderer.render(markdownText), theme.markdown) };
|
|
112
|
+
}, [
|
|
113
|
+
textValue,
|
|
114
|
+
theme.markdown,
|
|
115
|
+
usageHint
|
|
116
|
+
]);
|
|
117
|
+
if (!renderedContent) return null;
|
|
118
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
119
|
+
className: "a2ui-text",
|
|
120
|
+
style: node.weight !== void 0 ? { "--weight": node.weight } : {},
|
|
121
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
122
|
+
className: require_utils.classMapToString(classes),
|
|
123
|
+
style: additionalStyles,
|
|
124
|
+
dangerouslySetInnerHTML: renderedContent
|
|
125
|
+
})
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
//#endregion
|
|
130
|
+
exports.default = Text;
|
|
131
|
+
//# sourceMappingURL=Text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.cjs","names":["MarkdownIt","classMapToString","useA2UIComponent","mergeClassMaps","stylesToObject"],"sources":["../../../../src/react-renderer/components/content/Text.tsx"],"sourcesContent":["import { useMemo, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport {\n classMapToString,\n stylesToObject,\n mergeClassMaps,\n} from \"../../lib/utils\";\nimport MarkdownIt from \"markdown-it\";\n\ntype UsageHint = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"caption\" | \"body\";\n\ninterface HintedStyles {\n h1: Record<string, string>;\n h2: Record<string, string>;\n h3: Record<string, string>;\n h4: Record<string, string>;\n h5: Record<string, string>;\n body: Record<string, string>;\n caption: Record<string, string>;\n}\n\nfunction isHintedStyles(styles: unknown): styles is HintedStyles {\n if (typeof styles !== \"object\" || !styles || Array.isArray(styles))\n return false;\n const expected = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"caption\", \"body\"];\n return expected.some((v) => v in styles);\n}\n\n/**\n * Markdown-it instance for rendering markdown text.\n * Uses synchronous import to ensure availability at first render (matches Lit renderer).\n *\n * Configuration matches Lit's markdown directive (uses MarkdownIt defaults):\n * - html: false (default) - Security: disable raw HTML\n * - linkify: false (default) - Don't auto-convert URLs/emails to links\n * - breaks: false (default) - Don't convert \\n to <br>\n * - typographer: false (default) - Don't use smart quotes/dashes\n */\nconst markdownRenderer = new MarkdownIt();\n\n/**\n * Apply theme classes to markdown HTML elements.\n * Replaces default element tags with themed versions.\n */\nfunction applyMarkdownTheme(\n html: string,\n markdownTheme: Types.Theme[\"markdown\"],\n): string {\n if (!markdownTheme) return html;\n\n // Map of element -> classes\n const replacements: Array<[RegExp, string]> = [];\n\n for (const [element, classes] of Object.entries(markdownTheme)) {\n if (!classes || (Array.isArray(classes) && classes.length === 0)) continue;\n\n const classString = Array.isArray(classes)\n ? classes.join(\" \")\n : classMapToString(classes);\n if (!classString) continue;\n\n // Create regex to match opening tags (handles self-closing and regular)\n const tagRegex = new RegExp(`<${element}(?=\\\\s|>|/>)`, \"gi\");\n replacements.push([tagRegex, `<${element} class=\"${classString}\"`]);\n }\n\n let result = html;\n for (const [regex, replacement] of replacements) {\n result = result.replace(regex, replacement);\n }\n\n return result;\n}\n\n/**\n * Text component - renders text content with markdown support.\n *\n * Structure mirrors Lit's Text component:\n * <div class=\"a2ui-text\"> ← :host equivalent\n * <section class=\"...\"> ← theme classes\n * <h2>...</h2> ← rendered markdown content\n * </section>\n * </div>\n *\n * Text is parsed as markdown and rendered as HTML (matches Lit renderer behavior).\n * Supports usageHint values: h1, h2, h3, h4, h5, caption, body\n *\n * Markdown features supported:\n * - **Bold** and *italic* text\n * - Lists (ordered and unordered)\n * - `inline code` and code blocks\n * - [Links](url) (auto-linkified URLs too)\n * - Blockquotes\n * - Horizontal rules\n *\n * Note: Raw HTML is disabled for security.\n */\nexport const Text = memo(function Text({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.TextNode>) {\n const { theme, resolveString } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n const textValue = resolveString(props.text);\n const usageHint = props.usageHint as UsageHint | undefined;\n\n // Get merged classes (matches Lit's Styles.merge)\n const classes = mergeClassMaps(\n theme.components.Text.all,\n usageHint ? theme.components.Text[usageHint] : {},\n );\n\n // Get additional styles based on usage hint\n const additionalStyles = useMemo(() => {\n const textStyles = theme.additionalStyles?.Text;\n if (!textStyles) return undefined;\n\n if (isHintedStyles(textStyles)) {\n const hint = usageHint ?? \"body\";\n return stylesToObject(textStyles[hint]);\n }\n return stylesToObject(textStyles as Record<string, string>);\n }, [theme.additionalStyles?.Text, usageHint]);\n\n // Render markdown content (matches Lit behavior - always uses markdown)\n const renderedContent = useMemo(() => {\n if (textValue === null || textValue === undefined) {\n return null;\n }\n\n // Add markdown prefix based on usageHint (matches Lit behavior)\n let markdownText = textValue;\n switch (usageHint) {\n case \"h1\":\n markdownText = `# ${markdownText}`;\n break;\n case \"h2\":\n markdownText = `## ${markdownText}`;\n break;\n case \"h3\":\n markdownText = `### ${markdownText}`;\n break;\n case \"h4\":\n markdownText = `#### ${markdownText}`;\n break;\n case \"h5\":\n markdownText = `##### ${markdownText}`;\n break;\n case \"caption\":\n markdownText = `*${markdownText}*`;\n break;\n default:\n break; // Body - no prefix\n }\n\n const rawHtml = markdownRenderer.render(markdownText);\n const themedHtml = applyMarkdownTheme(rawHtml, theme.markdown);\n return { __html: themedHtml };\n }, [textValue, theme.markdown, usageHint]);\n\n if (!renderedContent) {\n return null;\n }\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-text\" style={hostStyle}>\n <section\n className={classMapToString(classes)}\n style={additionalStyles}\n dangerouslySetInnerHTML={renderedContent}\n />\n </div>\n );\n});\n\nexport default Text;\n"],"mappings":";;;;;;;;;;AAuBA,SAAS,eAAe,QAAyC;AAC/D,KAAI,OAAO,WAAW,YAAY,CAAC,UAAU,MAAM,QAAQ,OAAO,CAChE,QAAO;AAET,QADiB;EAAC;EAAM;EAAM;EAAM;EAAM;EAAM;EAAW;EAAO,CAClD,MAAM,MAAM,KAAK,OAAO;;;;;;;;;;;;AAa1C,MAAM,mBAAmB,IAAIA,qBAAY;;;;;AAMzC,SAAS,mBACP,MACA,eACQ;AACR,KAAI,CAAC,cAAe,QAAO;CAG3B,MAAM,eAAwC,EAAE;AAEhD,MAAK,MAAM,CAAC,SAAS,YAAY,OAAO,QAAQ,cAAc,EAAE;AAC9D,MAAI,CAAC,WAAY,MAAM,QAAQ,QAAQ,IAAI,QAAQ,WAAW,EAAI;EAElE,MAAM,cAAc,MAAM,QAAQ,QAAQ,GACtC,QAAQ,KAAK,IAAI,GACjBC,+BAAiB,QAAQ;AAC7B,MAAI,CAAC,YAAa;EAGlB,MAAM,WAAW,IAAI,OAAO,IAAI,QAAQ,eAAe,KAAK;AAC5D,eAAa,KAAK,CAAC,UAAU,IAAI,QAAQ,UAAU,YAAY,GAAG,CAAC;;CAGrE,IAAI,SAAS;AACb,MAAK,MAAM,CAAC,OAAO,gBAAgB,aACjC,UAAS,OAAO,QAAQ,OAAO,YAAY;AAG7C,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,MAAa,uBAAY,SAAS,KAAK,EACrC,MACA,aACqC;CACrC,MAAM,EAAE,OAAO,kBAAkBC,0CAAiB,MAAM,UAAU;CAClE,MAAM,QAAQ,KAAK;CAEnB,MAAM,YAAY,cAAc,MAAM,KAAK;CAC3C,MAAM,YAAY,MAAM;CAGxB,MAAM,UAAUC,+BACd,MAAM,WAAW,KAAK,KACtB,YAAY,MAAM,WAAW,KAAK,aAAa,EAAE,CAClD;CAGD,MAAM,4CAAiC;EACrC,MAAM,aAAa,MAAM,kBAAkB;AAC3C,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI,eAAe,WAAW,CAE5B,QAAOC,6BAAe,WADT,aAAa,QACa;AAEzC,SAAOA,6BAAe,WAAqC;IAC1D,CAAC,MAAM,kBAAkB,MAAM,UAAU,CAAC;CAG7C,MAAM,2CAAgC;AACpC,MAAI,cAAc,QAAQ,cAAc,OACtC,QAAO;EAIT,IAAI,eAAe;AACnB,UAAQ,WAAR;GACE,KAAK;AACH,mBAAe,KAAK;AACpB;GACF,KAAK;AACH,mBAAe,MAAM;AACrB;GACF,KAAK;AACH,mBAAe,OAAO;AACtB;GACF,KAAK;AACH,mBAAe,QAAQ;AACvB;GACF,KAAK;AACH,mBAAe,SAAS;AACxB;GACF,KAAK;AACH,mBAAe,IAAI,aAAa;AAChC;GACF,QACE;;AAKJ,SAAO,EAAE,QADU,mBADH,iBAAiB,OAAO,aAAa,EACN,MAAM,SAAS,EACjC;IAC5B;EAAC;EAAW,MAAM;EAAU;EAAU,CAAC;AAE1C,KAAI,CAAC,gBACH,QAAO;AAST,QACE,2CAAC;EAAI,WAAU;EAAY,OAL3B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,2CAAC;GACC,WAAWH,+BAAiB,QAAQ;GACpC,OAAO;GACP,yBAAyB;IACzB;GACE;EAER"}
|