shadow-claw 1.26.0 → 1.27.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/.agents/skills/main/skill-creator/SKILL.md +39 -0
- package/.agents/skills/main/skill-creator/references/declarative-pipelines.md +44 -0
- package/.agents/skills/main/skill-creator/references/declarative-tools.md +35 -0
- package/.agents/skills/main/skill-creator/references/frontmatter-spec.md +50 -0
- package/.well-known/agent-skills/index.json +14 -0
- package/README.md +5 -3
- package/bin/build/build.mjs +148 -15
- package/bin/build/build.test.mjs +128 -0
- package/bin/cli.mjs +35 -0
- package/bin/commands/mcp.mjs +277 -55
- package/bin/commands/mcp.test.mjs +275 -1
- package/bin/commands/skills-index.mjs +447 -0
- package/bin/commands/skills-index.test.mjs +243 -0
- package/bin/site-config/utils/custom-elements/get-approved-custom-element-scripts.test.mjs +2 -0
- package/bin/site-config/utils/custom-elements/sanitize-embedded-custom-element-scripts.test.mjs +10 -1
- package/dist/lib/components/index.js +25 -25
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configurePeerJs-CrlGan0m.js → configurePeerJs-oODzltaC.js} +2 -2
- package/dist/lib/{configurePeerJs-CrlGan0m.js.map → configurePeerJs-oODzltaC.js.map} +1 -1
- package/dist/lib/core/control-plane-client.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-DboUjmp2.js → downloadGroupFile-DmcBQU1n.js} +2 -2
- package/dist/lib/{downloadGroupFile-DboUjmp2.js.map → downloadGroupFile-DmcBQU1n.js.map} +1 -1
- package/dist/lib/{file-viewer-BrK2Wxgh.js → file-viewer-C3YKnq_-.js} +4 -3
- package/dist/lib/{file-viewer-BrK2Wxgh.js.map → file-viewer-C3YKnq_-.js.map} +1 -1
- package/dist/lib/index.js +26 -26
- package/dist/lib/{initControlPlane-CsO4UR6_.js → initControlPlane-C2zURVIS.js} +86 -13
- package/dist/lib/initControlPlane-C2zURVIS.js.map +1 -0
- package/dist/lib/{markdown-eeSTFnMA.js → markdown-C6EHl9zs.js} +3 -3
- package/dist/lib/{markdown-eeSTFnMA.js.map → markdown-C6EHl9zs.js.map} +1 -1
- package/dist/lib/{orchestrator-CJvoC2Uu.js → orchestrator-CACLa_Ro.js} +7 -6
- package/dist/lib/{orchestrator-CJvoC2Uu.js.map → orchestrator-CACLa_Ro.js.map} +1 -1
- package/dist/lib/{orchestrator-DCfomsn9.js → orchestrator-KRjx0eba.js} +6 -534
- package/dist/lib/{orchestrator-DCfomsn9.js.map → orchestrator-KRjx0eba.js.map} +1 -1
- package/dist/lib/parsePath-DwC_YZjw.js +16 -0
- package/dist/lib/parsePath-DwC_YZjw.js.map +1 -0
- package/dist/lib/{peerjs-Dp02bXcG.js → peerjs-DFWOBcXf.js} +4 -4
- package/dist/lib/{peerjs-Dp02bXcG.js.map → peerjs-DFWOBcXf.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-Bve-e5e_.js → readGroupFileBytes-C8oOe8Iu.js} +3 -16
- package/dist/lib/readGroupFileBytes-C8oOe8Iu.js.map +1 -0
- package/dist/lib/security/custom-element-security.d.ts +8 -0
- package/dist/lib/server/control-plane-types.d.ts +1 -1
- package/dist/lib/{shadow-claw-D8xINM3c.js → shadow-claw-6UHdiy4a.js} +5 -5
- package/dist/lib/{shadow-claw-D8xINM3c.js.map → shadow-claw-6UHdiy4a.js.map} +1 -1
- package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js → shadow-claw-a2ui-CpZUTzlh.js} +5 -4
- package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js.map → shadow-claw-a2ui-CpZUTzlh.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-CdruwN8A.js → shadow-claw-accounts-03oJ__XC.js} +2 -2
- package/dist/lib/{shadow-claw-accounts-CdruwN8A.js.map → shadow-claw-accounts-03oJ__XC.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js → shadow-claw-channel-config-DmfwJc6G.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js.map → shadow-claw-channel-config-DmfwJc6G.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-C_jI4KhP.js → shadow-claw-channels-1N6Jl-By.js} +3 -3
- package/dist/lib/{shadow-claw-channels-C_jI4KhP.js.map → shadow-claw-channels-1N6Jl-By.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B16MspoP.js → shadow-claw-chat-BMoqQJRK.js} +10 -10
- package/dist/lib/{shadow-claw-chat-B16MspoP.js.map → shadow-claw-chat-BMoqQJRK.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js → shadow-claw-control-plane-UG0o7pCz.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js.map → shadow-claw-control-plane-UG0o7pCz.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js → shadow-claw-conversations-BwXep3iu.js} +4 -3
- package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js.map → shadow-claw-conversations-BwXep3iu.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-BfDHHgpA.js → shadow-claw-file-viewer-DUxzVxDT.js} +14 -10
- package/dist/lib/shadow-claw-file-viewer-DUxzVxDT.js.map +1 -0
- package/dist/lib/{shadow-claw-files-EYhOPYIH.js → shadow-claw-files-DIREEnT2.js} +7 -7
- package/dist/lib/{shadow-claw-files-EYhOPYIH.js.map → shadow-claw-files-DIREEnT2.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-tcSpT-P0.js → shadow-claw-git-Bg1SWgsF.js} +4 -4
- package/dist/lib/{shadow-claw-git-tcSpT-P0.js.map → shadow-claw-git-Bg1SWgsF.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js → shadow-claw-integrations-Ds-CLPhj.js} +2 -2
- package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js.map → shadow-claw-integrations-Ds-CLPhj.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-BazJdD5f.js → shadow-claw-llm-CazBrVpM.js} +3 -3
- package/dist/lib/{shadow-claw-llm-BazJdD5f.js.map → shadow-claw-llm-CazBrVpM.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js → shadow-claw-mcp-remote-CT5Q-54E.js} +2 -2
- package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js.map → shadow-claw-mcp-remote-CT5Q-54E.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-DImPxe0H.js → shadow-claw-networking-Df85tCbO.js} +2 -2
- package/dist/lib/{shadow-claw-networking-DImPxe0H.js.map → shadow-claw-networking-Df85tCbO.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js → shadow-claw-page-header-Cti2fzf-.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js.map → shadow-claw-page-header-Cti2fzf-.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-D54jF1Qq.js → shadow-claw-pages-BgPyIEZO.js} +15 -11
- package/dist/lib/shadow-claw-pages-BgPyIEZO.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js → shadow-claw-peerjs-xkBXILed.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js.map → shadow-claw-peerjs-xkBXILed.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js → shadow-claw-settings-CN89xRVU.js} +4 -4
- package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js.map → shadow-claw-settings-CN89xRVU.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-CFOjGf1d.js → shadow-claw-storage-VnhcObCe.js} +3 -3
- package/dist/lib/{shadow-claw-storage-CFOjGf1d.js.map → shadow-claw-storage-VnhcObCe.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js → shadow-claw-task-server-jgEC2hHB.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js.map → shadow-claw-task-server-jgEC2hHB.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js → shadow-claw-tasks-i_evIufy.js} +6 -6
- package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js.map → shadow-claw-tasks-i_evIufy.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js → shadow-claw-terminal-CwScROlu.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js.map → shadow-claw-terminal-CwScROlu.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-DxXIm0ku.js → shadow-claw-tools-DD3fyXP4.js} +5 -4
- package/dist/lib/{shadow-claw-tools-DxXIm0ku.js.map → shadow-claw-tools-DD3fyXP4.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js → shadow-claw-webvm-DbJq4I3-.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js.map → shadow-claw-webvm-DbJq4I3-.js.map} +1 -1
- package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js → syncWebMcpRegistration-DNLnQ-jz.js} +3 -2
- package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js.map → syncWebMcpRegistration-DNLnQ-jz.js.map} +1 -1
- package/dist/lib/tools-DwwB9RBa.js +546 -0
- package/dist/lib/tools-DwwB9RBa.js.map +1 -0
- package/dist/lib/{trusted-types-CkLDpLiZ.js → trusted-types-Dx0RZlrd.js} +19 -8
- package/dist/lib/trusted-types-Dx0RZlrd.js.map +1 -0
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/public/.well-known/agent-skills/index.json +14 -0
- package/dist/public/AGENTS.md +5 -3
- package/dist/public/README.md +5 -3
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/{configurePeerJs-COcwE0E7.js → configurePeerJs-BqgeBjP7.js} +1 -1
- package/dist/public/custom-element-security-FU04Cq05.js +1 -0
- package/dist/public/dist-B9m1QM9v.js +58 -0
- package/dist/public/docs/README.md +31 -31
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/docs/subsystems/a2ui.md +11 -1
- package/dist/public/docs/subsystems/cli.md +32 -0
- package/dist/public/docs/subsystems/control-plane.md +8 -2
- package/dist/public/docs/subsystems/custom-element-security.md +19 -9
- package/dist/public/docs/subsystems/mcp-server.md +39 -15
- package/dist/public/docs/subsystems/skills.md +30 -0
- package/dist/public/docs/subsystems/webmcp.md +9 -0
- package/dist/public/downloadGroupFile-D8KRJGGL.js +1 -0
- package/dist/public/e2e/README.md +7 -4
- package/dist/public/{e2e-bridge-CHARpbpW.js → e2e-bridge-Ceqr5kGc.js} +1 -1
- package/dist/public/effect-BJCrpFdp.js +1 -0
- package/dist/public/file-viewer-C-6Jc_tb.js +1 -0
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/initControlPlane-BN9cWyO0.js +1 -0
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{markdown-1I3O6Mmd.js → markdown-C3M4OW_A.js} +1 -1
- package/dist/public/{orchestrator-Cl95w2vb.js → orchestrator-CMbCTjBf.js} +7 -7
- package/dist/public/{orchestrator-D-xlXG92.js → orchestrator-DHjdLtqa.js} +663 -663
- package/dist/public/peerjs-DUCKH-m9.js +1 -0
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-CaoKmIIB.js → shadow-claw-EAt2ml5Y.js} +3 -3
- package/dist/public/{shadow-claw-accounts-CJvYC4li.js → shadow-claw-accounts-xUOLBsQZ.js} +1 -1
- package/dist/public/{shadow-claw-channels-3K62sU5f.js → shadow-claw-channels-XsfuWFF8.js} +4 -4
- package/dist/public/{shadow-claw-chat-Cu2keU2I.js → shadow-claw-chat-CbSaOZ4q.js} +7 -7
- package/dist/public/{shadow-claw-control-plane-D1OwlQI_.js → shadow-claw-control-plane-DHvN3Ukg.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DDtg3BEZ.js → shadow-claw-conversations-BWs5VVfs.js} +2 -2
- package/dist/public/{shadow-claw-file-viewer-BR__1z9S.js → shadow-claw-file-viewer-BWsoW5QS.js} +5 -4
- package/dist/public/{shadow-claw-files-BJSyZ-Bl.js → shadow-claw-files-CG7MqWiV.js} +8 -8
- package/dist/public/{shadow-claw-git-MAjhXRLc.js → shadow-claw-git-DBRPZNav.js} +6 -6
- package/dist/public/{shadow-claw-integrations-82UoFuDR.js → shadow-claw-integrations-BBVnO0Fc.js} +8 -8
- package/dist/public/{shadow-claw-llm-R8j0lwPP.js → shadow-claw-llm-DMvLgKXo.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BzZoz4LX.js → shadow-claw-mcp-remote-Bkx0gsmF.js} +2 -2
- package/dist/public/{shadow-claw-networking-DLEd9cNm.js → shadow-claw-networking-Dd8Rw31D.js} +2 -2
- package/dist/public/{shadow-claw-notifications-1vwR7TbT.js → shadow-claw-notifications-Dbevj-lq.js} +2 -2
- package/dist/public/{shadow-claw-page-header-DMKbkv3s.js → shadow-claw-page-header-BccSHItx.js} +1 -1
- package/dist/public/{shadow-claw-pages-CjyeIV__.js → shadow-claw-pages-3_lQAv0t.js} +4 -3
- package/dist/public/{shadow-claw-settings-BfbT4dBU.js → shadow-claw-settings-t8TIlgrM.js} +5 -5
- package/dist/public/{shadow-claw-storage-C-mWQQML.js → shadow-claw-storage-CfEXoSIE.js} +2 -2
- package/dist/public/{shadow-claw-task-server-D3lHp0Nc.js → shadow-claw-task-server-DxQSsgRZ.js} +2 -2
- package/dist/public/{shadow-claw-tasks-DVVWEm-c.js → shadow-claw-tasks-DNpicQwz.js} +14 -14
- package/dist/public/{shadow-claw-terminal-BwuTRp-O.js → shadow-claw-terminal-DpY6zU_r.js} +1 -1
- package/dist/public/{shadow-claw-toast-ClCwgzFG.js → shadow-claw-toast-BkrQIP-3.js} +1 -1
- package/dist/public/{shadow-claw-tools-zFLk2nbV.js → shadow-claw-tools-WSwWohnk.js} +2 -2
- package/dist/public/{shadow-claw-webvm-qR9X7fg7.js → shadow-claw-webvm-CP6oFjg5.js} +2 -2
- package/dist/public/syncWebMcpRegistration-DOn9gLnD.js +1 -0
- package/dist/public/toast-BXgUfbyh.js +1 -0
- package/dist/public/tools-DvckJZG2.js +1 -0
- package/dist/server.js +188 -188
- package/package.json +3 -1
- package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.stories.ts +1380 -93
- package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.ts +11 -6
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.test.ts +8 -1
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +13 -5
- package/src/components/shadow-claw-pages/utils/buildHtmlPageSrcdoc.ts +13 -5
- package/src/core/control-plane-client.ts +15 -0
- package/src/core/utils/initControlPlane.test.ts +187 -0
- package/src/core/utils/initControlPlane.ts +194 -20
- package/src/security/custom-element-security.test.ts +51 -0
- package/src/security/custom-element-security.ts +33 -15
- package/src/server/control-plane-types.ts +1 -0
- package/src/server/control-plane.test.ts +69 -0
- package/src/server/control-plane.ts +45 -3
- package/src/server/mcp/tools/built-in-tools.ts +80 -5
- package/src/server/mcp/tools/client-tool-relay.ts +183 -26
- package/src/server/mcp/tools/mcp-tools.test.ts +140 -0
- package/src/server/middleware/static-files.test.ts +142 -0
- package/src/server/middleware/static-files.ts +66 -8
- package/src/testing/jest-setup.ts +14 -0
- package/src/worker/utils/handleMessage.ts +4 -1
- package/dist/lib/initControlPlane-CsO4UR6_.js.map +0 -1
- package/dist/lib/readGroupFileBytes-Bve-e5e_.js.map +0 -1
- package/dist/lib/shadow-claw-file-viewer-BfDHHgpA.js.map +0 -1
- package/dist/lib/shadow-claw-pages-D54jF1Qq.js.map +0 -1
- package/dist/lib/trusted-types-CkLDpLiZ.js.map +0 -1
- package/dist/public/custom-element-security-NCqQ5lmC.js +0 -1
- package/dist/public/downloadGroupFile-G0BZQgQg.js +0 -1
- package/dist/public/effect-rHYr4nfu.js +0 -1
- package/dist/public/file-viewer-8PdCURDD.js +0 -1
- package/dist/public/initControlPlane-CcGXax0A.js +0 -1
- package/dist/public/peerjs-BZdxWQFv.js +0 -1
- package/dist/public/syncWebMcpRegistration-DD42YsYV.js +0 -1
- package/dist/public/toast-HAq8XWFj.js +0 -58
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { n as getDb } from "./txPromise-CuGh-TGK.js";
|
|
3
3
|
import { t as Signal } from "./dist-Bxg3C_zy.js";
|
|
4
|
-
import { t as readGroupFileBytes } from "./readGroupFileBytes-
|
|
4
|
+
import { t as readGroupFileBytes } from "./readGroupFileBytes-C8oOe8Iu.js";
|
|
5
5
|
|
|
6
6
|
//#region src/stores/chat-ui.ts
|
|
7
7
|
/**
|
|
@@ -1781,14 +1781,15 @@ var ShadowClawA2UI = class extends ShadowClawElement {
|
|
|
1781
1781
|
async #resolveWorkspaceImages() {
|
|
1782
1782
|
const root = this.shadowRoot?.querySelector(".a2ui__root");
|
|
1783
1783
|
if (!(root instanceof HTMLElement)) return;
|
|
1784
|
-
const db = await getDb();
|
|
1785
1784
|
const mediaElements = [
|
|
1786
1785
|
...Array.from(root.querySelectorAll("img[data-a2ui-workspace-src]")),
|
|
1787
1786
|
...Array.from(root.querySelectorAll("video[data-a2ui-workspace-src]")),
|
|
1788
1787
|
...Array.from(root.querySelectorAll("audio[data-a2ui-workspace-src]"))
|
|
1789
1788
|
];
|
|
1790
|
-
await Promise.all(mediaElements.map((el) => this.#resolveSingleMediaToBlobUrl(el, db)));
|
|
1791
1789
|
const videosWithPoster = Array.from(root.querySelectorAll("video[data-a2ui-workspace-poster]"));
|
|
1790
|
+
if (mediaElements.length === 0 && videosWithPoster.length === 0) return;
|
|
1791
|
+
const db = await getDb();
|
|
1792
|
+
await Promise.all(mediaElements.map((el) => this.#resolveSingleMediaToBlobUrl(el, db)));
|
|
1792
1793
|
await Promise.all(videosWithPoster.map((el) => this.#resolveVideoPosterToBlobUrl(el, db)));
|
|
1793
1794
|
}
|
|
1794
1795
|
};
|
|
@@ -1824,4 +1825,4 @@ registerBasicFunctions();
|
|
|
1824
1825
|
|
|
1825
1826
|
//#endregion
|
|
1826
1827
|
export { chatUiStore as n, ShadowClawA2UI as t };
|
|
1827
|
-
//# sourceMappingURL=shadow-claw-a2ui-
|
|
1828
|
+
//# sourceMappingURL=shadow-claw-a2ui-CpZUTzlh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-claw-a2ui-7rJqG4Ke.js","names":["shadowClawA2uiStyles","shadowClawA2uiTemplate","#surface","#sendDataModel","#renderSurface","#clearRoot","#renderComponent","#dispatchAction","#updateDataModelPointer","#resolveMediaUrl","#attachModalOverlay","#resolveWorkspaceImages","#resolveSingleMediaToBlobUrl","#resolveVideoPosterToBlobUrl"],"sources":["../../src/stores/chat-ui.ts","../../src/ui/a2ui/registries/ComponentRegistry.ts","../../src/ui/a2ui/registries/FunctionRegistry.ts","../../src/ui/a2ui/utils/resolveJsonPointer.ts","../../src/ui/a2ui/utils/resolveDynamicBoolean.ts","../../src/ui/a2ui/utils/resolveDynamicNumber.ts","../../src/ui/a2ui/utils/resolveDynamicString.ts","../../src/ui/a2ui/registries/basicFunctions.ts","../../src/ui/a2ui/utils/applyDataModelUpdate.ts","../../src/ui/a2ui/utils/buildItemDataScope.ts","../../src/ui/a2ui/utils/normaliseComponentsToMap.ts","../../src/components/shadow-claw-a2ui/catalog/basic/shared.ts","../../src/components/shadow-claw-a2ui/catalog/basic/audio-player.ts","../../src/components/shadow-claw-a2ui/catalog/basic/button.ts","../../src/components/shadow-claw-a2ui/catalog/basic/card.ts","../../src/components/shadow-claw-a2ui/catalog/basic/checkbox.ts","../../src/components/shadow-claw-a2ui/catalog/basic/choice-picker.ts","../../src/components/shadow-claw-a2ui/catalog/basic/column.ts","../../src/components/shadow-claw-a2ui/catalog/basic/date-time-input.ts","../../src/components/shadow-claw-a2ui/catalog/basic/divider.ts","../../src/components/shadow-claw-a2ui/catalog/basic/icon.ts","../../src/components/shadow-claw-a2ui/catalog/basic/image.ts","../../src/components/shadow-claw-a2ui/catalog/basic/list.ts","../../src/components/shadow-claw-a2ui/catalog/basic/modal.ts","../../src/components/shadow-claw-a2ui/catalog/basic/row.ts","../../src/components/shadow-claw-a2ui/catalog/basic/slider.ts","../../src/components/shadow-claw-a2ui/catalog/basic/tabs.ts","../../src/components/shadow-claw-a2ui/catalog/basic/text-field.ts","../../src/components/shadow-claw-a2ui/catalog/basic/text.ts","../../src/components/shadow-claw-a2ui/catalog/basic/video.ts","../../src/components/shadow-claw-a2ui/shadow-claw-a2ui.ts"],"sourcesContent":["import { Signal } from \"signal-polyfill\";\n\n/**\n * UI-only state for the Chat page.\n */\nexport class ChatUiStore {\n private _attachmentObjectUrls: Set<string>;\n private _isNearBottom: Signal.State<boolean>;\n private _nearBottomSnapshot: boolean;\n private _scrollStateByGroup: Map<\n string,\n { distanceFromBottom: number; nearBottom: boolean }\n >;\n\n constructor() {\n this._isNearBottom = new Signal.State(true);\n this._nearBottomSnapshot = true;\n this._attachmentObjectUrls = new Set();\n this._scrollStateByGroup = new Map();\n }\n\n getGroupScrollState(\n groupId: string,\n ): { distanceFromBottom: number; nearBottom: boolean } | null {\n return this._scrollStateByGroup.get(groupId) ?? null;\n }\n\n get isNearBottom(): boolean {\n return this._isNearBottom.get();\n }\n\n get nearBottomSnapshot(): boolean {\n return this._nearBottomSnapshot;\n }\n\n registerAttachmentObjectUrl(url: string): void {\n this._attachmentObjectUrls.add(url);\n }\n\n reset(): void {\n this.revokeAttachmentObjectUrls();\n this._scrollStateByGroup.clear();\n this.resetNearBottom();\n }\n\n resetNearBottom(): void {\n this._nearBottomSnapshot = true;\n this._isNearBottom.set(true);\n }\n\n revokeAttachmentObjectUrls(): void {\n for (const objectUrl of this._attachmentObjectUrls) {\n URL.revokeObjectURL(objectUrl);\n }\n\n this._attachmentObjectUrls.clear();\n }\n\n setGroupScrollState(\n groupId: string,\n distanceFromBottom: number,\n nearBottom: boolean,\n ): void {\n this._scrollStateByGroup.set(groupId, {\n distanceFromBottom,\n nearBottom,\n });\n }\n\n setNearBottom(nearBottom: boolean): void {\n this._nearBottomSnapshot = nearBottom;\n this._isNearBottom.set(nearBottom);\n }\n}\n\nexport const chatUiStore = new ChatUiStore();\n","import type { SurfaceState } from \"../../../components/types.js\";\n\n// A render callback that returns an HTMLElement or null\nexport type ComponentRenderCallback = (\n spec: any,\n surface: SurfaceState,\n context: Record<string, any>,\n) => HTMLElement | null;\n\nexport class ComponentRegistry {\n private renderers = new Map<string, ComponentRenderCallback>();\n\n register(\n componentName: string,\n renderCallback: ComponentRenderCallback,\n ): void {\n this.renderers.set(componentName, renderCallback);\n }\n\n get(componentName: string): ComponentRenderCallback | undefined {\n return this.renderers.get(componentName);\n }\n}\n\n// Global default registry\nexport const globalComponentRegistry = new ComponentRegistry();\n","export type CallableBoundary = \"rendererOnly\" | \"agentOnly\" | \"rendererOrAgent\";\n\nexport interface FunctionDefinition {\n name: string;\n callableFrom: CallableBoundary;\n evaluate: (\n args: Record<string, any>,\n context: { dataModel: Record<string, unknown> },\n ) => any;\n}\n\nexport class FunctionRegistry {\n private functions = new Map<string, FunctionDefinition>();\n\n register(definition: FunctionDefinition): void {\n // Validate UAX #31 for name? Can be done in CatalogRegistry instead.\n this.functions.set(definition.name, definition);\n }\n\n get(name: string): FunctionDefinition | undefined {\n return this.functions.get(name);\n }\n\n execute(\n name: string,\n args: Record<string, any>,\n context: { dataModel: Record<string, unknown> },\n ): any {\n const fn = this.functions.get(name);\n if (!fn) {\n throw new Error(`INVALID_FUNCTION_CALL: Unregistered function ${name}`);\n }\n return fn.evaluate(args, context);\n }\n}\n\n// Global default registry\nexport const globalFunctionRegistry = new FunctionRegistry();\n","/**\n * Minimal RFC 6901 JSON Pointer resolver (read).\n */\nexport function resolveJsonPointer(obj: unknown, pointer: string): unknown {\n if (!pointer || pointer === \"/\") {\n return obj;\n }\n\n const tokens = pointer\n .replace(/^\\//, \"\")\n .split(\"/\")\n .map((t) => t.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = obj;\n\n for (const token of tokens) {\n if (current == null || typeof current !== \"object\") {\n return undefined;\n }\n\n current = (current as Record<string, unknown>)[token];\n }\n\n return current;\n}\n","import { globalFunctionRegistry } from \"../registries/FunctionRegistry.js\";\nimport { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type {\n DataModelRef,\n DynamicBoolean,\n FunctionCall,\n PathRef,\n} from \"../types.js\";\n\n/**\n * Resolve a dynamic boolean against a data model.\n */\nexport function resolveDynamicBoolean(\n value: DynamicBoolean | undefined | null,\n dataModel: Record<string, unknown>,\n): boolean {\n if (value == null) return false;\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"object\" && \"path\" in value) {\n return Boolean(resolveJsonPointer(dataModel, (value as PathRef).path));\n }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return Boolean(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel),\n );\n }\n\n if (typeof value === \"object\" && \"call\" in value) {\n const fc = value as FunctionCall;\n try {\n return Boolean(\n globalFunctionRegistry.execute(fc.call, fc.args ?? {}, { dataModel }),\n );\n } catch (err) {\n console.warn(`[resolveDynamicBoolean] Function evaluation failed:`, err);\n return false;\n }\n }\n\n return false;\n}\n","import { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type { DataModelRef, DynamicNumber, PathRef } from \"../types.js\";\n\n/**\n * Resolve a dynamic number against a data model.\n */\nexport function resolveDynamicNumber(\n value: DynamicNumber | undefined | null,\n dataModel: Record<string, unknown>,\n): number {\n if (value == null) return 0;\n if (typeof value === \"number\") return value;\n if (typeof value === \"object\" && \"path\" in value) {\n return Number(resolveJsonPointer(dataModel, (value as PathRef).path) ?? 0);\n }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return Number(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel) ?? 0,\n );\n }\n return 0;\n}\n","import { globalFunctionRegistry } from \"../registries/FunctionRegistry.js\";\nimport { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type {\n DataModelRef,\n DynamicString,\n FunctionCall,\n PathRef,\n} from \"../types.js\";\n\n/**\n * Resolve a dynamic string against a data model.\n *\n * Supported forms (in priority order):\n * - Literal string: `\"Hello\"`\n * - Spec-canonical path ref: `{ \"path\": \"/key\" }` (A2UI v1.0)\n * - Deprecated data-model ref: `{ \"$dataModel\": \"/key\" }` (backward compat)\n * - Function call: `{ \"call\": \"capitalize\", \"args\": { \"value\": ... } }`\n */\nexport function resolveDynamicString(\n value: DynamicString | undefined | null,\n dataModel: Record<string, unknown>,\n): string {\n if (value == null) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n // Spec-canonical: { \"path\": \"/key\" }\n if (typeof value === \"object\" && \"path\" in value) {\n return String(resolveJsonPointer(dataModel, (value as PathRef).path) ?? \"\");\n }\n\n // Deprecated: { \"$dataModel\": \"/key\" }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return String(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel) ?? \"\",\n );\n }\n\n if (typeof value !== \"object\" || !(\"call\" in value)) {\n return \"\";\n }\n\n const fc = value as FunctionCall;\n\n try {\n return String(\n globalFunctionRegistry.execute(fc.call, fc.args ?? {}, { dataModel }) ??\n \"\",\n );\n } catch (err) {\n console.warn(`[resolveDynamicString] Function evaluation failed:`, err);\n return \"\";\n }\n}\n","import { globalFunctionRegistry } from \"./FunctionRegistry.js\";\n\nimport { resolveDynamicBoolean } from \"../utils/resolveDynamicBoolean.js\";\nimport { resolveDynamicNumber } from \"../utils/resolveDynamicNumber.js\";\nimport { resolveDynamicString } from \"../utils/resolveDynamicString.js\";\nimport { resolveJsonPointer } from \"../utils/resolveJsonPointer.js\";\n\nexport function registerBasicFunctions(): void {\n globalFunctionRegistry.register({\n name: \"capitalize\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const inner = resolveDynamicString(args.value, context.dataModel);\n return inner.charAt(0).toUpperCase() + inner.slice(1);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatString\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const template = resolveDynamicString(args.value, context.dataModel);\n return template.replace(/\\$\\{([^}]+)\\}/g, (_, pointer) =>\n String(resolveJsonPointer(context.dataModel, pointer) ?? \"\"),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatNumber\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const num = resolveDynamicNumber(args.value, context.dataModel);\n const decimals =\n args.decimals !== undefined\n ? Number(resolveDynamicNumber(args.decimals, context.dataModel))\n : undefined;\n const grouping =\n args.grouping !== undefined\n ? resolveDynamicBoolean(args.grouping, context.dataModel)\n : true;\n return num.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n useGrouping: grouping,\n });\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatCurrency\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const num = resolveDynamicNumber(args.value, context.dataModel);\n const currency = resolveDynamicString(args.currency, context.dataModel);\n const decimals =\n args.decimals !== undefined\n ? Number(resolveDynamicNumber(args.decimals, context.dataModel))\n : 2;\n return num.toLocaleString(undefined, {\n style: \"currency\",\n currency: currency || \"USD\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatDate\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const dateStr = resolveDynamicString(args.value, context.dataModel);\n try {\n const d = new Date(dateStr);\n return isNaN(d.getTime()) ? dateStr : d.toLocaleDateString();\n } catch {\n return dateStr;\n }\n },\n });\n\n globalFunctionRegistry.register({\n name: \"pluralize\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const count = resolveDynamicNumber(args.value, context.dataModel);\n const one = resolveDynamicString(args.one, context.dataModel);\n const other = resolveDynamicString(args.other, context.dataModel);\n return count === 1 ? one : other;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"openUrl\",\n callableFrom: \"rendererOrAgent\",\n evaluate: () => {\n return \"\";\n },\n });\n\n globalFunctionRegistry.register({\n name: \"and\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return args.values.every((v: any) =>\n resolveDynamicBoolean(v, context.dataModel),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"or\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return args.values.some((v: any) =>\n resolveDynamicBoolean(v, context.dataModel),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"not\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return !resolveDynamicBoolean(args.value, context.dataModel);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"required\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n return v.trim().length > 0;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"email\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(v);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"regex\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n const pattern = resolveDynamicString(args.pattern, context.dataModel);\n return new RegExp(pattern).test(v);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"length\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n const min =\n args.min !== undefined\n ? resolveDynamicNumber(args.min, context.dataModel)\n : 0;\n const max =\n args.max !== undefined\n ? resolveDynamicNumber(args.max, context.dataModel)\n : Infinity;\n return v.length >= min && v.length <= max;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"numeric\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicNumber(args.value, context.dataModel);\n const min =\n args.min !== undefined\n ? resolveDynamicNumber(args.min, context.dataModel)\n : -Infinity;\n const max =\n args.max !== undefined\n ? resolveDynamicNumber(args.max, context.dataModel)\n : Infinity;\n return v >= min && v <= max;\n },\n });\n}\n","/**\n * Set a value at a JSON Pointer path in a plain object (write).\n * Creates intermediate objects as needed.\n * @internal\n */\nfunction setAtPointer(\n obj: Record<string, unknown>,\n pointer: string,\n value: unknown,\n remove: boolean,\n): Record<string, unknown> {\n const tokens = pointer\n .replace(/^\\//, \"\")\n .split(\"/\")\n .map((t) => t.replace(/~1/g, \"/\").replace(/~0/g, \"~\"))\n .filter((t) => t !== \"\");\n\n if (tokens.length === 0) {\n // \"/\" — replace entire object\n return typeof value === \"object\" && value !== null\n ? { ...(value as Record<string, unknown>) }\n : {};\n }\n\n if (tokens.length === 1) {\n const next = { ...obj };\n if (remove) {\n delete next[tokens[0]];\n } else {\n next[tokens[0]] = value;\n }\n return next;\n }\n\n // Deep path — recurse\n const [head, ...rest] = tokens;\n const child =\n obj[head] != null && typeof obj[head] === \"object\"\n ? { ...(obj[head] as Record<string, unknown>) }\n : {};\n return {\n ...obj,\n [head]: setAtPointer(child, \"/\" + rest.join(\"/\"), value, remove),\n };\n}\n\n/**\n * Apply a single A2UI v1.0 `updateDataModel` operation to a data model.\n *\n * - `path` defaults to `\"/\"` (replace the entire data model).\n * - If `value` is `undefined` and `hasValue` is `false`, the key at `path`\n * is deleted.\n *\n * @param dataModel The current data model.\n * @param path JSON Pointer path (RFC 6901). Defaults to `\"/\"`.\n * @param value The new value to set.\n * @param hasValue Pass `false` when the caller explicitly omits `value` to\n * trigger key deletion rather than setting `undefined`.\n */\nexport function applyDataModelUpdate(\n dataModel: Record<string, unknown>,\n path?: string,\n value?: unknown,\n hasValue = true,\n): Record<string, unknown> {\n const p = path ?? \"/\";\n\n if (p === \"/\" || p === \"\") {\n // Replace entire data model\n if (hasValue && typeof value === \"object\" && value !== null) {\n return { ...(value as Record<string, unknown>) };\n }\n return {};\n }\n\n return setAtPointer(dataModel, p, value, !hasValue || value === undefined);\n}\n\nexport function applyDataModelPatches(\n dataModel: Record<string, unknown>,\n patches: Record<string, unknown>,\n): Record<string, unknown> {\n let next = { ...dataModel };\n for (const [pointer, value] of Object.entries(patches)) {\n next = applyDataModelUpdate(next, pointer, value);\n }\n return next;\n}\n","/**\n * Build a per-item data scope for a data-driven child.\n *\n * Merges the surface data model with `@index` (item index) and `@item` (item\n * value) so template components can bind to them via `{ \"path\": \"/@index\" }`\n * and `{ \"path\": \"/@item\" }`. This implements spec §builtins / §@index.\n *\n * @param dataModel The current surface data model.\n * @param item The individual item value from the list.\n * @param index The zero-based index of the item.\n */\nexport function buildItemDataScope(\n dataModel: Record<string, unknown>,\n item: unknown,\n index: number,\n): Record<string, unknown> {\n return {\n ...dataModel,\n ...(typeof item === \"object\" && item !== null ? item : {}),\n \"@index\": index,\n \"@item\": item,\n };\n}\n","import type { A2UIComponentSpec } from \"../types.js\";\n\n/**\n * Normalise a `components` array from a wire envelope into the keyed map used\n * by `SurfaceState` for O(1) lookup during render.\n *\n * Any component whose `id` is missing is skipped with a warning.\n */\nexport function normaliseComponentsToMap(\n components: A2UIComponentSpec[],\n): Record<string, A2UIComponentSpec> {\n const map: Record<string, A2UIComponentSpec> = {};\n\n function walk(specs: any[]) {\n for (const spec of specs) {\n if (!spec || typeof spec !== \"object\") continue;\n\n if (spec.id) {\n map[spec.id] = spec;\n } else if (spec.component) {\n console.warn(\n \"[a2ui] Component missing required 'id' field; skipped.\",\n spec,\n );\n }\n\n // Check for nested children\n if (Array.isArray(spec.children)) {\n if (spec.children.length > 0 && typeof spec.children[0] === \"object\") {\n // Ensure it is not an array containing a template\n if (\n !(\"path\" in spec.children[0] && \"componentId\" in spec.children[0])\n ) {\n walk(spec.children);\n }\n }\n }\n\n // Check for nested single child\n if (spec.child && typeof spec.child === \"object\") {\n walk([spec.child]);\n }\n\n // Check for nested tab children\n if (Array.isArray(spec.tabs)) {\n for (const tab of spec.tabs) {\n if (tab && typeof tab.child === \"object\") {\n walk([tab.child]);\n }\n }\n }\n }\n }\n\n walk(components);\n return map;\n}\n","import { resolveJsonPointer } from \"../../../../ui/a2ui/utils/resolveJsonPointer.js\";\n\nimport type { ChildList, TextVariant } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport { resolveChildIds } from \"../../../../ui/a2ui/utils/resolveChildIds.js\";\n\nexport function renderChildrenList(\n children: ChildList,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n appendFn: (childEl: HTMLElement) => void,\n): void {\n let tmpl: { path: string; componentId: string };\n\n if (Array.isArray(children)) {\n if (\n children.length > 0 &&\n typeof children[0] === \"object\" &&\n children[0] !== null\n ) {\n const first = children[0] as any;\n if (\"path\" in first && \"componentId\" in first) {\n tmpl = first;\n } else if (\"id\" in first) {\n for (const c of children) {\n const el = ctx.renderComponent(String((c as any).id));\n if (el) appendFn(el);\n }\n return;\n } else {\n return;\n }\n } else {\n for (const id of children) {\n const el = ctx.renderComponent(String(id));\n if (el) appendFn(el);\n }\n return;\n }\n } else {\n tmpl = children;\n }\n\n const items = resolveJsonPointer(surface.dataModel, tmpl.path);\n if (!Array.isArray(items)) {\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const el = ctx.renderComponent(tmpl.componentId, {\n arrayPath: tmpl.path,\n index: i,\n itemValue: items[i],\n });\n if (el) appendFn(el);\n }\n}\n\nexport function variantToTag(variant: TextVariant): string {\n switch (variant) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n return variant;\n default:\n return \"span\";\n }\n}\n\nexport function applyWeight(el: HTMLElement, weight: number | undefined): void {\n if (weight !== undefined) {\n el.style.flexGrow = String(weight);\n }\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { AudioPlayerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderAudioPlayer(\n spec: AudioPlayerSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__audio\";\n\n const audio = document.createElement(\"audio\");\n audio.controls = true;\n\n let audioUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).audioUrl ??\n \"\";\n audioUrl = resolveDynamicString(audioUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(audioUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n audio.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n audio.src = resolvedUrl;\n }\n\n applyWeight(wrapper, spec.weight);\n wrapper.appendChild(audio);\n\n if (spec.description) {\n const desc = document.createElement(\"div\");\n desc.className = \"a2ui__audio-description\";\n desc.textContent = resolveDynamicString(\n spec.description,\n surface.dataModel,\n );\n wrapper.appendChild(desc);\n }\n\n return wrapper;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { ButtonSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderButton(\n spec: ButtonSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\" | \"dispatchAction\">,\n): HTMLElement {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = `a2ui__button a2ui__button--${spec.variant ?? \"primary\"}`;\n\n if (spec.checked) {\n btn.classList.add(\"a2ui__button--checked\");\n }\n\n applyWeight(btn, spec.weight);\n\n if (spec.child && surface.components[spec.child]) {\n const labelEl = ctx.renderComponent(spec.child);\n if (labelEl) {\n labelEl.style.color = \"inherit\";\n btn.appendChild(labelEl);\n }\n } else {\n const fallbackText = (spec as any).text;\n if (typeof fallbackText === \"string\" && fallbackText) {\n btn.textContent = fallbackText;\n }\n }\n\n btn.addEventListener(\"click\", () => {\n if (!spec.action) {\n return;\n }\n\n // Spec §actions: use event.name; fall back to deprecated id field.\n const actionId =\n spec.action.event?.name ?? spec.action.id ?? (spec.action as any).name;\n if (actionId) {\n ctx.dispatchAction(actionId);\n }\n });\n\n return btn;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { CardSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderCard(\n spec: CardSpec,\n _: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__card\";\n applyWeight(wrapper, spec.weight);\n\n const childEl = ctx.renderComponent(spec.child);\n if (childEl) {\n wrapper.appendChild(childEl);\n }\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\n\nimport type { CheckBoxSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderCheckBox(\n spec: CheckBoxSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"dispatchAction\" | \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"label\");\n wrapper.className = \"a2ui__checkbox\";\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n const key = (spec.value as { path: string }).path.replace(/^\\//, \"\");\n input.checked = Boolean(surface.dataModel[key]);\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n const key = (spec.value as { $dataModel: string }).$dataModel.replace(\n /^\\//,\n \"\",\n );\n input.checked = Boolean(surface.dataModel[key]);\n } else if (typeof spec.value === \"boolean\") {\n input.checked = spec.value;\n }\n\n input.addEventListener(\"change\", () => {\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n ctx.updateDataModelPointer(\n (spec.value as { path: string }).path,\n input.checked,\n );\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n ctx.updateDataModelPointer(\n (spec.value as { $dataModel: string }).$dataModel,\n input.checked,\n );\n }\n\n // Spec §actions: use event.name; fall back to deprecated id.\n const actionId =\n (spec as any).action?.event?.name ?? (spec as any).action?.id;\n if (actionId) {\n ctx.dispatchAction(actionId);\n }\n });\n\n const label = document.createElement(\"span\");\n label.className = \"a2ui__checkbox-label\";\n label.textContent = resolveDynamicString(spec.label, surface.dataModel);\n\n wrapper.append(input, label);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { ChoicePickerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderChoicePicker(\n spec: ChoicePickerSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__choicepicker\";\n applyWeight(wrapper, spec.weight);\n\n const isMultiple = spec.variant === \"multipleSelection\";\n\n let boundKey: string | null = null;\n let initial: string[] = [];\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n boundKey = (spec.value as { path: string }).path.replace(/^\\//, \"\");\n const current = surface.dataModel[boundKey];\n if (Array.isArray(current)) {\n initial = current.map(String);\n } else if (typeof current === \"string\") {\n initial = [current];\n }\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n boundKey = (spec.value as { $dataModel: string }).$dataModel.replace(\n /^\\//,\n \"\",\n );\n const current = surface.dataModel[boundKey];\n if (Array.isArray(current)) {\n initial = current.map(String);\n } else if (typeof current === \"string\") {\n initial = [current];\n }\n }\n\n (spec.options || []).forEach((rawOption) => {\n // LLMs sometimes pass arrays of strings/numbers instead of the full ChoicePickerOption object\n const isPrimitive =\n typeof rawOption === \"string\" || typeof rawOption === \"number\";\n const option = isPrimitive\n ? { label: String(rawOption), value: String(rawOption) }\n : rawOption;\n\n const id = `a2ui-choice-${surface.surfaceId}-${spec.id}-${option.value}`;\n const item = document.createElement(\"label\");\n item.className = \"a2ui__choice-item\";\n\n const input = document.createElement(\"input\");\n input.type = isMultiple ? \"checkbox\" : \"radio\";\n input.name = `a2ui-choice-${surface.surfaceId}-${spec.id}`;\n input.id = id;\n input.value = option.value;\n input.checked = initial.includes(option.value);\n\n input.addEventListener(\"change\", () => {\n if (!boundKey) {\n return;\n }\n\n if (isMultiple) {\n const checkedValues = Array.from(\n wrapper.querySelectorAll<HTMLInputElement>(\"input:checked\"),\n ).map((inputEl) => inputEl.value);\n ctx.updateDataModelPointer(`/${boundKey}`, checkedValues);\n } else {\n const selected =\n wrapper.querySelector<HTMLInputElement>(\"input:checked\");\n ctx.updateDataModelPointer(\n `/${boundKey}`,\n selected ? selected.value : \"\",\n );\n }\n });\n\n const span = document.createElement(\"span\");\n span.textContent = resolveDynamicString(option.label, surface.dataModel);\n\n item.append(input, span);\n wrapper.appendChild(item);\n });\n\n return wrapper;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { ColumnSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderColumn(\n spec: ColumnSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"a2ui__column\";\n if (spec.justify) {\n el.classList.add(`a2ui__justify--${spec.justify}`);\n }\n\n if (spec.align) {\n el.classList.add(`a2ui__align--${spec.align}`);\n }\n\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n el.appendChild(childEl);\n });\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { DateTimeInputSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderDateTimeInput(\n spec: DateTimeInputSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__datetime\";\n applyWeight(wrapper, spec.weight);\n\n const inputId = `a2ui-datetime-${surface.surfaceId}-${spec.id}`;\n\n if (spec.label) {\n const labelEl = document.createElement(\"label\");\n labelEl.className = \"a2ui__datetime-label\";\n labelEl.htmlFor = inputId;\n labelEl.textContent = resolveDynamicString(spec.label, surface.dataModel);\n wrapper.appendChild(labelEl);\n }\n\n const input = document.createElement(\"input\");\n input.id = inputId;\n\n if (spec.enableDate && spec.enableTime) {\n input.type = \"datetime-local\";\n } else if (spec.enableDate) {\n input.type = \"date\";\n } else if (spec.enableTime) {\n input.type = \"time\";\n } else {\n input.type = \"text\";\n }\n\n // Resolve value: path ref, $dataModel ref, or static ISO 8601 string (spec §DateTimeInput)\n const rawValue = spec.value;\n if (rawValue && typeof rawValue === \"object\") {\n let key: string | null = null;\n if (\"path\" in rawValue) {\n // Spec-canonical\n key = (rawValue as { path: string }).path.replace(/^\\//, \"\");\n } else if (\"$dataModel\" in rawValue) {\n // Deprecated\n key = (rawValue as { $dataModel: string }).$dataModel.replace(/^\\//, \"\");\n }\n if (key !== null) {\n const current = surface.dataModel[key];\n if (typeof current === \"string\") {\n input.value = current;\n }\n }\n } else if (typeof rawValue === \"string\" && rawValue) {\n input.value = rawValue;\n }\n\n if (spec.min) {\n input.min = resolveDynamicString(spec.min, surface.dataModel);\n }\n\n if (spec.max) {\n input.max = resolveDynamicString(spec.max, surface.dataModel);\n }\n\n input.addEventListener(\"input\", () => {\n if (rawValue && typeof rawValue === \"object\") {\n if (\"path\" in rawValue) {\n ctx.updateDataModelPointer(\n (rawValue as { path: string }).path,\n input.value,\n );\n } else if (\"$dataModel\" in rawValue) {\n ctx.updateDataModelPointer(\n (rawValue as { $dataModel: string }).$dataModel,\n input.value,\n );\n }\n }\n });\n\n wrapper.appendChild(input);\n\n return wrapper;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { DividerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderDivider(\n spec: DividerSpec,\n _surface: SurfaceState,\n): HTMLElement {\n const el = document.createElement(\"hr\");\n el.className = `a2ui__divider a2ui__divider--${spec.axis ?? \"horizontal\"}`;\n applyWeight(el, spec.weight);\n\n return el;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { IconSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderIcon(\n spec: IconSpec,\n _surface: SurfaceState,\n): HTMLElement {\n const span = document.createElement(\"span\");\n span.className = \"a2ui__icon material-symbols-outlined\";\n\n if (typeof spec.name === \"string\") {\n span.dataset.iconName = spec.name;\n span.textContent = spec.name;\n } else if (\n spec.name &&\n typeof spec.name === \"object\" &&\n \"path\" in spec.name\n ) {\n const img = document.createElement(\"img\");\n img.src = spec.name.path;\n img.alt = \"\";\n span.appendChild(img);\n }\n\n applyWeight(span, spec.weight);\n\n return span;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { ImageSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderImage(\n spec: ImageSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const img = document.createElement(\"img\");\n img.className = `a2ui__image a2ui__image--${spec.variant ?? \"mediumFeature\"}`;\n\n let imageUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).imageUrl ??\n \"\";\n imageUrl = resolveDynamicString(imageUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(imageUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n img.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n img.src = resolvedUrl;\n }\n\n img.alt = spec.description\n ? resolveDynamicString(spec.description, surface.dataModel)\n : \"\";\n img.style.objectFit = spec.fit ?? \"fill\";\n applyWeight(img, spec.weight);\n\n return img;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { ListSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderList(\n spec: ListSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = `a2ui__list a2ui__list--${spec.direction ?? \"vertical\"}`;\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n const item = document.createElement(\"div\");\n item.className = \"a2ui__list-item\";\n item.appendChild(childEl);\n el.appendChild(item);\n });\n\n return el;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { ModalSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderModal(\n spec: ModalSpec,\n _: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\" | \"attachModalOverlay\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__modal\";\n applyWeight(wrapper, spec.weight);\n\n const triggerEl =\n ctx.renderComponent(spec.trigger) ??\n (() => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.textContent = \"Open\";\n\n return button;\n })();\n\n const overlay = document.createElement(\"div\");\n overlay.className = \"a2ui__modal-overlay\";\n overlay.style.display = \"none\";\n overlay.setAttribute(\"role\", \"dialog\");\n\n const content = document.createElement(\"div\");\n content.className = \"a2ui__modal-content\";\n\n const closeOverlay = () => {\n overlay.style.display = \"none\";\n content.replaceChildren();\n };\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n closeOverlay();\n }\n });\n\n overlay.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") {\n closeOverlay();\n }\n });\n\n overlay.append(content);\n\n triggerEl.addEventListener(\n \"click\",\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n content.replaceChildren();\n const childEl = ctx.renderComponent(spec.content);\n if (childEl) {\n content.appendChild(childEl);\n }\n\n overlay.style.display = \"block\";\n overlay.tabIndex = -1;\n overlay.focus();\n },\n { capture: true },\n );\n\n if (ctx.attachModalOverlay) {\n ctx.attachModalOverlay(overlay);\n }\n\n wrapper.appendChild(triggerEl);\n\n return wrapper;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { RowSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderRow(\n spec: RowSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"a2ui__row\";\n if (spec.justify) {\n el.classList.add(`a2ui__justify--${spec.justify}`);\n }\n\n if (spec.align) {\n el.classList.add(`a2ui__align--${spec.align}`);\n }\n\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n el.appendChild(childEl);\n });\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { SliderSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderSlider(\n spec: SliderSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__slider\";\n applyWeight(wrapper, spec.weight);\n\n const inputId = `a2ui-slider-${surface.surfaceId}-${spec.id}`;\n\n if (spec.label) {\n const labelEl = document.createElement(\"label\");\n labelEl.className = \"a2ui__slider-label\";\n labelEl.htmlFor = inputId;\n labelEl.textContent = resolveDynamicString(spec.label, surface.dataModel);\n wrapper.appendChild(labelEl);\n }\n\n const input = document.createElement(\"input\");\n input.type = \"range\";\n input.id = inputId;\n input.min = String(spec.min ?? 0);\n input.max = String(spec.max ?? 100);\n if (spec.steps !== undefined) {\n input.step = String(spec.steps);\n }\n\n if (typeof spec.value === \"number\") {\n input.value = String(spec.value);\n } else if (spec.value !== undefined) {\n input.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n input.addEventListener(\"input\", () => {\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n ctx.updateDataModelPointer(\n (spec.value as { path: string }).path,\n Number(input.value),\n );\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n ctx.updateDataModelPointer(\n (spec.value as { $dataModel: string }).$dataModel,\n Number(input.value),\n );\n }\n });\n\n wrapper.appendChild(input);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { TabsSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderTabs(\n spec: TabsSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const container = document.createElement(\"div\");\n container.className = \"a2ui__tabs\";\n applyWeight(container, spec.weight);\n\n const headers = document.createElement(\"div\");\n headers.className = \"a2ui__tabs-headers\";\n const content = document.createElement(\"div\");\n content.className = \"a2ui__tabs-content\";\n\n const tabs = Array.isArray(spec.tabs) ? spec.tabs : [];\n if (!Array.isArray(spec.tabs)) {\n console.warn(\n `[shadow-claw-a2ui] Tab spec is missing or invalid for component id: \"${spec.id}\"`,\n );\n }\n\n const activate = (index: number) => {\n headers.querySelectorAll(\"button\").forEach((b, i) => {\n b.classList.toggle(\"active\", i === index);\n });\n content.replaceChildren();\n const childId = tabs[index]?.child;\n if (childId) {\n const childEl = ctx.renderComponent(childId);\n if (childEl) {\n content.appendChild(childEl);\n }\n }\n };\n\n tabs.forEach((tab, index) => {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"a2ui__tab-header\";\n btn.textContent = resolveDynamicString(tab.title, surface.dataModel);\n btn.addEventListener(\"click\", () => activate(index));\n headers.appendChild(btn);\n });\n\n container.append(headers, content);\n if (tabs.length > 0) {\n activate(0);\n }\n\n return container;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { TextFieldSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderTextField(\n spec: TextFieldSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelKey\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__field\";\n applyWeight(wrapper, spec.weight);\n\n const label = document.createElement(\"label\");\n label.className = \"a2ui__field-label\";\n label.textContent = resolveDynamicString(spec.label, surface.dataModel);\n\n const isLongText = spec.variant === \"longText\";\n let input: HTMLInputElement | HTMLTextAreaElement;\n\n if (isLongText) {\n const ta = document.createElement(\"textarea\");\n ta.className = \"a2ui__field-textarea\";\n ta.rows = 3;\n if (spec.value !== undefined) {\n ta.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n ta.addEventListener(\"input\", () => {\n ctx.updateDataModelKey(spec, ta.value);\n });\n input = ta;\n } else {\n const inp = document.createElement(\"input\");\n inp.className = \"a2ui__field-input\";\n inp.type =\n spec.variant === \"number\"\n ? \"number\"\n : spec.variant === \"obscured\"\n ? \"password\"\n : \"text\";\n if (spec.value !== undefined) {\n inp.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n if (spec.validationRegexp) {\n inp.pattern = spec.validationRegexp;\n }\n\n inp.addEventListener(\"input\", () => {\n ctx.updateDataModelKey(spec, inp.value);\n });\n input = inp;\n }\n\n const inputId = `a2ui-field-${surface.surfaceId}-${spec.id}`;\n input.id = inputId;\n label.htmlFor = inputId;\n\n wrapper.append(label, input);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight, variantToTag } from \"./shared.js\";\n\nimport type { TextSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderText(spec: TextSpec, surface: SurfaceState): HTMLElement {\n const variant = spec.variant ?? \"body\";\n const tag = variantToTag(variant);\n const el = document.createElement(tag);\n el.className = `a2ui__text a2ui__text--${variant}`;\n applyWeight(el, spec.weight);\n\n el.textContent = resolveDynamicString(spec.text, surface.dataModel);\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { VideoSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderVideo(\n spec: VideoSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const video = document.createElement(\"video\");\n video.controls = true;\n video.className = \"a2ui__video\";\n\n let videoUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).videoUrl ??\n \"\";\n videoUrl = resolveDynamicString(videoUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(videoUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n video.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n video.src = resolvedUrl;\n }\n\n if (spec.posterUrl) {\n const posterUrl = ctx.resolveMediaUrl(\n resolveDynamicString(spec.posterUrl, surface.dataModel),\n );\n if (posterUrl.startsWith(\"/files/\")) {\n video.setAttribute(\"data-a2ui-workspace-poster\", posterUrl);\n } else if (posterUrl) {\n video.poster = posterUrl;\n }\n }\n\n applyWeight(video, spec.weight);\n\n return video;\n}\n","/**\n * <shadow-claw-a2ui>\n *\n * A2UI v1.0 Basic catalog renderer — renders interactive UI surfaces\n * delivered from an agent.\n *\n * Components accept `{ \"path\": \"/key\" }` data binding syntax, though\n * `{ \"$dataModel\": \"/key\" }` is still supported for backward compatibility.\n */\nimport { getDb } from \"../../db/db.js\";\nimport { readGroupFileBytes } from \"../../storage/readGroupFileBytes.js\";\nimport { chatUiStore } from \"../../stores/chat-ui.js\";\nimport { globalComponentRegistry } from \"../../ui/a2ui/registries/ComponentRegistry.js\";\nimport { globalFunctionRegistry } from \"../../ui/a2ui/registries/FunctionRegistry.js\";\nimport { registerBasicFunctions } from \"../../ui/a2ui/registries/basicFunctions.js\";\nimport { applyDataModelUpdate } from \"../../ui/a2ui/utils/applyDataModelUpdate.js\";\nimport { buildItemDataScope } from \"../../ui/a2ui/utils/buildItemDataScope.js\";\nimport { normaliseComponentsToMap } from \"../../ui/a2ui/utils/normaliseComponentsToMap.js\";\n\nimport { renderAudioPlayer } from \"./catalog/basic/audio-player.js\";\nimport { renderButton } from \"./catalog/basic/button.js\";\nimport { renderCard } from \"./catalog/basic/card.js\";\nimport { renderCheckBox } from \"./catalog/basic/checkbox.js\";\nimport { renderChoicePicker } from \"./catalog/basic/choice-picker.js\";\nimport { renderColumn } from \"./catalog/basic/column.js\";\nimport { renderDateTimeInput } from \"./catalog/basic/date-time-input.js\";\nimport { renderDivider } from \"./catalog/basic/divider.js\";\nimport { renderIcon } from \"./catalog/basic/icon.js\";\nimport { renderImage } from \"./catalog/basic/image.js\";\nimport { renderList } from \"./catalog/basic/list.js\";\nimport { renderModal } from \"./catalog/basic/modal.js\";\nimport { renderRow } from \"./catalog/basic/row.js\";\nimport { renderSlider } from \"./catalog/basic/slider.js\";\nimport { renderTabs } from \"./catalog/basic/tabs.js\";\nimport { renderTextField } from \"./catalog/basic/text-field.js\";\nimport { renderText } from \"./catalog/basic/text.js\";\nimport { renderVideo } from \"./catalog/basic/video.js\";\n\nimport type { A2UIAction, A2UIEnvelope } from \"../../ui/a2ui/types.js\";\nimport type { ScopeContext, SurfaceState } from \"../types.js\";\n\nimport ShadowClawElement from \"../shadow-claw-element.js\";\nimport shadowClawA2uiStyles from \"./shadow-claw-a2ui.css\" with { type: \"css\" };\nimport shadowClawA2uiTemplate from \"./shadow-claw-a2ui.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-a2ui\";\n\nexport class ShadowClawA2UI extends ShadowClawElement {\n static styles = shadowClawA2uiStyles;\n static template = shadowClawA2uiTemplate;\n\n /** groupId of the conversation this surface belongs to */\n groupId: string = \"\";\n\n /**\n * Whether the current surface requested full data model on every action\n * (spec §sendDataModel).\n */\n #sendDataModel: boolean = false;\n\n /** Current surface state — set externally by the chat component */\n #surface: SurfaceState | null = null;\n\n /**\n * Apply an A2UI envelope. Handles all four envelope types.\n * Call this whenever the orchestrator emits \"a2ui-surface\".\n */\n applyEnvelope(envelope: A2UIEnvelope): void {\n switch (envelope.type) {\n case \"createSurface\": {\n // Spec §createSurface: components arrive as a flat array; normalise\n // to a keyed map for O(1) lookup during render. Root is always \"root\".\n this.#surface = {\n surfaceId: envelope.surfaceId,\n components: normaliseComponentsToMap(envelope.components),\n dataModel: { ...(envelope.dataModel ?? {}) },\n rootComponentId: \"root\",\n };\n this.#sendDataModel = envelope.sendDataModel ?? false;\n this.#renderSurface();\n\n break;\n }\n\n case \"updateComponents\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n // Spec §updateComponents: components arrive as an array; merge into map.\n this.#surface = {\n ...this.#surface,\n components: {\n ...this.#surface.components,\n ...normaliseComponentsToMap(envelope.components),\n },\n };\n this.#renderSurface();\n\n break;\n }\n\n case \"updateDataModel\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n // Spec §updateDataModel: single path + value update.\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(\n this.#surface.dataModel,\n envelope.path,\n envelope.value,\n \"value\" in envelope,\n ),\n };\n this.#renderSurface();\n\n break;\n }\n\n case \"deleteSurface\": {\n if (this.#surface?.surfaceId === envelope.surfaceId) {\n this.#surface = null;\n this.#sendDataModel = false;\n this.#clearRoot();\n }\n\n break;\n }\n\n case \"actionResponse\": {\n // Spec §actionResponse: store the response value at responsePath.\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n if (envelope.responsePath) {\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(\n this.#surface.dataModel,\n envelope.responsePath,\n envelope.value,\n ),\n };\n this.#renderSurface();\n }\n break;\n }\n\n case \"callFunction\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n let value: unknown = null;\n let error: string | undefined;\n\n try {\n // Spec §callFunction: evaluate function requested by agent\n value = globalFunctionRegistry.execute(\n (envelope as any).call.call,\n (envelope as any).call.args ?? {},\n { dataModel: this.#surface.dataModel },\n );\n } catch (e: any) {\n error =\n e.message && e.message.includes(\"INVALID_FUNCTION_CALL\")\n ? e.message\n : `INVALID_FUNCTION_CALL: ${e.message}`;\n }\n\n const response: any = {\n version: \"v1.0\",\n type: \"functionResponse\",\n surfaceId: envelope.surfaceId,\n callId: (envelope as any).callId,\n value,\n ...(error ? { error } : {}),\n };\n\n this.dispatchEvent(\n new CustomEvent(\"shadow-claw-a2ui-function-response\", {\n bubbles: true,\n composed: true,\n detail: { groupId: this.groupId, response },\n }),\n );\n break;\n }\n }\n }\n\n getSurfaceId(): string | null {\n return this.#surface?.surfaceId ?? null;\n }\n\n override async render(): Promise<void> {\n if (this.#surface) {\n this.#renderSurface();\n }\n }\n\n #attachModalOverlay(overlay: HTMLElement): void {\n const surface = this.shadowRoot?.querySelector(\".a2ui__surface\");\n if (surface) {\n surface.appendChild(overlay);\n }\n }\n\n #clearRoot(): void {\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (root) {\n root.replaceChildren();\n }\n }\n\n #dispatchAction(actionId: string, surface: SurfaceState): void {\n // Intercept media playback actions to control local audio/video elements\n if (actionId === \"playTrack\" || actionId === \"play\") {\n const mediaElements = this.shadowRoot?.querySelectorAll(\n \"audio, video\",\n ) as NodeListOf<HTMLMediaElement> | undefined;\n mediaElements?.forEach((media) => media.play().catch(console.error));\n\n return; // Handled locally\n }\n\n if (actionId === \"pauseTrack\" || actionId === \"pause\") {\n const mediaElements = this.shadowRoot?.querySelectorAll(\n \"audio, video\",\n ) as NodeListOf<HTMLMediaElement> | undefined;\n mediaElements?.forEach((media) => media.pause());\n\n return; // Handled locally\n }\n\n // Intercept modal close actions to close open modals locally\n if (actionId === \"closeModal\" || actionId === \"close\") {\n const overlays = this.shadowRoot?.querySelectorAll(\n \".a2ui__modal-overlay\",\n ) as NodeListOf<HTMLElement> | undefined;\n let handled = false;\n overlays?.forEach((overlay) => {\n if (overlay.style.display !== \"none\") {\n overlay.style.display = \"none\";\n const content = overlay.querySelector(\".a2ui__modal-content\");\n if (content) {\n content.replaceChildren();\n }\n\n handled = true;\n }\n });\n if (handled) {\n return; // Handled locally;\n }\n }\n\n // Use this.#surface (current state) not surface param (may be stale)\n // to ensure form data updates are captured\n const currentSurface = this.#surface ?? surface;\n const action: A2UIAction = {\n type: \"a2ui-action\",\n surfaceId: currentSurface.surfaceId,\n actionId,\n dataModel: this.#sendDataModel\n ? { ...currentSurface.dataModel }\n : { ...currentSurface.dataModel },\n };\n\n // Bubble up to shadow-claw-chat\n this.dispatchEvent(\n new CustomEvent(\"shadow-claw-a2ui-action\", {\n bubbles: true,\n composed: true,\n detail: { groupId: this.groupId, action },\n }),\n );\n }\n\n #renderComponent(\n id: string,\n surface: SurfaceState,\n scopeContext?: ScopeContext,\n ): HTMLElement | null {\n const rawSpec = surface.components[id];\n if (!rawSpec) {\n console.warn(`[shadow-claw-a2ui] Unknown component id: \"${id}\"`);\n\n return null;\n }\n\n // Stamp the map key as spec.id — agents typically omit this field.\n const spec = rawSpec.id ? rawSpec : { ...rawSpec, id };\n\n let activeSurface = surface;\n if (scopeContext) {\n activeSurface = {\n ...surface,\n dataModel: buildItemDataScope(\n surface.dataModel,\n scopeContext.itemValue,\n scopeContext.index,\n ),\n };\n }\n\n const renderer = globalComponentRegistry.get(spec.component);\n if (renderer) {\n return renderer(spec, activeSurface, {\n renderComponent: (childId: string, childScope?: ScopeContext) =>\n this.#renderComponent(childId, surface, childScope ?? scopeContext),\n dispatchAction: (actionId: string) =>\n this.#dispatchAction(actionId, activeSurface),\n updateDataModelKey: (s: any, newValue: any) => {\n let ptr = \"\";\n if (typeof s.value === \"object\" && \"path\" in s.value) {\n ptr = s.value.path;\n } else if (typeof s.value === \"object\" && \"$dataModel\" in s.value) {\n ptr = s.value.$dataModel;\n }\n if (ptr) {\n if (scopeContext && ptr.startsWith(\"/@item\")) {\n ptr = `${scopeContext.arrayPath}/${scopeContext.index}${ptr.slice(6)}`;\n }\n this.#updateDataModelPointer(ptr, newValue);\n }\n },\n resolveMediaUrl: (input: string) => this.#resolveMediaUrl(input),\n attachModalOverlay: (overlay: HTMLElement) =>\n this.#attachModalOverlay(overlay),\n updateDataModelPointer: (pointer: string, value: unknown) => {\n if (scopeContext && pointer.startsWith(\"/@item\")) {\n const translated = `${scopeContext.arrayPath}/${scopeContext.index}${pointer.slice(6)}`;\n this.#updateDataModelPointer(translated, value);\n } else {\n this.#updateDataModelPointer(pointer, value);\n }\n },\n });\n }\n\n console.warn(\n `[shadow-claw-a2ui] Unknown component type: \"${(spec as any).component}\"`,\n );\n return null;\n }\n\n /**\n * Resolve a potential workspace filename to a file URL.\n * If input looks like a remote URL (http/https), return as-is.\n * If input looks like a workspace filename, resolve it to `/files/{groupId}/{path}`.\n * This URL will be intercepted by the Service Worker and served from OPFS.\n */\n #resolveMediaUrl(input: string): string {\n if (!input) {\n return \"\";\n }\n\n // Already a URL with protocol\n if (/^https?:\\/\\//.test(input)) {\n return input;\n }\n\n // Already a file:// or data: URL\n if (/^(file|data):/.test(input)) {\n return input;\n }\n\n // Already a workspace route path -- preserve it verbatim.\n if (/^\\/files\\/[a-zA-Z0-9_-]+\\/.*$/.test(input)) {\n return input;\n }\n\n // Workspace filename or relative path\n // groupId is set by shadow-claw-chat and should be in canonical form (with colons)\n // or already in URL-safe form (with dashes for peer IDs)\n if (!this.groupId) {\n console.warn(\n \"[shadow-claw-a2ui] groupId not set, cannot resolve workspace files\",\n );\n\n return \"\";\n }\n\n // Normalize: if groupId contains colons, replace with dashes for URL safety\n // If it already has dashes (peer-XXXX format), use as-is\n const normalizedGroupId = this.groupId.replace(/:/g, \"-\");\n const cleanPath = input.replace(/^\\.\\/?/, \"\");\n const encodedPath = cleanPath\n .split(\"/\")\n .map((segment) => encodeURIComponent(segment))\n .join(\"/\");\n\n const resolvedUrl = `/files/${normalizedGroupId}/${encodedPath}`;\n\n return resolvedUrl;\n }\n\n #updateDataModelPointer(pointer: string, value: unknown): void {\n if (!this.#surface) {\n return;\n }\n\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(this.#surface.dataModel, pointer, value),\n };\n }\n\n async #renderSurface(): Promise<void> {\n const surface = this.#surface;\n if (!surface) {\n return;\n }\n\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n root.replaceChildren();\n\n const rootEl = this.#renderComponent(surface.rootComponentId, surface);\n if (rootEl) {\n root.appendChild(rootEl);\n }\n\n // Resolve deferred workspace images to blob URLs (videos/audio use Service Worker streaming)\n await this.#resolveWorkspaceImages();\n }\n\n /**\n * Convert a single media element's deferred workspace path to a blob URL.\n */\n async #resolveSingleMediaToBlobUrl(el: Element, db: any): Promise<void> {\n if (\n !(el instanceof HTMLImageElement) &&\n !(el instanceof HTMLVideoElement) &&\n !(el instanceof HTMLAudioElement)\n ) {\n return;\n }\n\n const workspacePath = el.getAttribute(\"data-a2ui-workspace-src\");\n if (!workspacePath) {\n return;\n }\n\n const elementType =\n el instanceof HTMLImageElement\n ? \"image\"\n : el instanceof HTMLVideoElement\n ? \"video\"\n : \"audio\";\n\n try {\n // Parse workspace path to extract groupId and file path\n const match = workspacePath.match(/^\\/files\\/([a-zA-Z0-9_-]+)\\/(.+)$/);\n if (!match) {\n console.warn(\n `[shadow-claw-a2ui] Invalid workspace path: ${workspacePath}`,\n );\n\n return;\n }\n\n const [, groupId, encodedFilePath] = match;\n const filePath = decodeURIComponent(encodedFilePath);\n const canonicalGroupId = groupId.replace(/-/g, \":\");\n\n // Read media bytes from storage\n const bytes = await readGroupFileBytes(db, canonicalGroupId, filePath);\n const blobBytes = new Uint8Array(bytes.byteLength);\n blobBytes.set(bytes);\n\n // Determine MIME type from file extension\n const lowerPath = filePath.toLowerCase();\n let mimeType = \"application/octet-stream\";\n if (lowerPath.endsWith(\".jpg\") || lowerPath.endsWith(\".jpeg\")) {\n mimeType = \"image/jpeg\";\n } else if (lowerPath.endsWith(\".png\")) {\n mimeType = \"image/png\";\n } else if (lowerPath.endsWith(\".gif\")) {\n mimeType = \"image/gif\";\n } else if (lowerPath.endsWith(\".webp\")) {\n mimeType = \"image/webp\";\n } else if (lowerPath.endsWith(\".svg\")) {\n mimeType = \"image/svg+xml\";\n } else if (lowerPath.endsWith(\".mp4\") || lowerPath.endsWith(\".m4v\")) {\n mimeType = \"video/mp4\";\n } else if (lowerPath.endsWith(\".webm\")) {\n mimeType = \"video/webm\";\n } else if (lowerPath.endsWith(\".mkv\")) {\n mimeType = \"video/x-matroska\";\n } else if (lowerPath.endsWith(\".mov\")) {\n mimeType = \"video/mp4\";\n } else if (lowerPath.endsWith(\".mp3\")) {\n mimeType = \"audio/mpeg\";\n } else if (lowerPath.endsWith(\".wav\")) {\n mimeType = \"audio/wav\";\n } else if (lowerPath.endsWith(\".flac\")) {\n mimeType = \"audio/flac\";\n } else if (lowerPath.endsWith(\".aac\")) {\n mimeType = \"audio/aac\";\n } else if (lowerPath.endsWith(\".m4a\")) {\n mimeType = \"audio/mp4\";\n }\n\n // Create blob URL\n const blob = new Blob([blobBytes], { type: mimeType });\n const objectUrl = URL.createObjectURL(blob);\n chatUiStore.registerAttachmentObjectUrl(objectUrl);\n\n // Set the blob URL as the src\n el.removeAttribute(\"data-a2ui-workspace-src\");\n if (el instanceof HTMLImageElement) {\n el.src = objectUrl;\n } else if (\n el instanceof HTMLVideoElement ||\n el instanceof HTMLAudioElement\n ) {\n el.src = objectUrl;\n }\n } catch (e) {\n console.error(\n `[shadow-claw-a2ui] Failed to load workspace ${elementType}: ${workspacePath}`,\n e,\n );\n }\n }\n\n /**\n * Resolve a video's poster URL to a blob URL.\n */\n async #resolveVideoPosterToBlobUrl(\n video: HTMLVideoElement,\n db: any,\n ): Promise<void> {\n const posterPath = video.getAttribute(\"data-a2ui-workspace-poster\");\n if (!posterPath) {\n return;\n }\n\n try {\n // Parse workspace path to extract groupId and file path\n const match = posterPath.match(/^\\/files\\/([a-zA-Z0-9_-]+)\\/(.+)$/);\n if (!match) {\n return;\n }\n\n const [, groupId, filePath] = match;\n const canonicalGroupId = groupId.replace(/-/g, \":\");\n\n // Read poster bytes from storage\n const bytes = await readGroupFileBytes(db, canonicalGroupId, filePath);\n const blobBytes = new Uint8Array(bytes.byteLength);\n blobBytes.set(bytes);\n\n // Determine MIME type\n const lowerPath = filePath.toLowerCase();\n let mimeType = \"image/jpeg\";\n if (lowerPath.endsWith(\".png\")) {\n mimeType = \"image/png\";\n } else if (lowerPath.endsWith(\".gif\")) {\n mimeType = \"image/gif\";\n } else if (lowerPath.endsWith(\".webp\")) {\n mimeType = \"image/webp\";\n }\n\n // Create blob URL\n const blob = new Blob([blobBytes], { type: mimeType });\n const objectUrl = URL.createObjectURL(blob);\n chatUiStore.registerAttachmentObjectUrl(objectUrl);\n\n video.removeAttribute(\"data-a2ui-workspace-poster\");\n video.poster = objectUrl;\n } catch (e) {\n console.warn(\n `[shadow-claw-a2ui] Failed to load workspace poster: ${posterPath}`,\n e,\n );\n }\n }\n\n /**\n * Resolve deferred workspace images, videos, and audio to blob URLs loaded from storage.\n * Runs asynchronously after rendering to avoid blocking the UI.\n * Uses Promise.all to parallelize all media loading.\n */\n async #resolveWorkspaceImages(): Promise<void> {\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n const db = await getDb();\n\n // Collect all deferred media elements\n const mediaElements = [\n ...Array.from(root.querySelectorAll(\"img[data-a2ui-workspace-src]\")),\n ...Array.from(root.querySelectorAll(\"video[data-a2ui-workspace-src]\")),\n ...Array.from(root.querySelectorAll(\"audio[data-a2ui-workspace-src]\")),\n ];\n\n // Parallelize all media blob URL conversions using Promise.all\n await Promise.all(\n mediaElements.map((el) => this.#resolveSingleMediaToBlobUrl(el, db)),\n );\n\n // Also resolve poster URLs for videos\n const videosWithPoster = Array.from(\n root.querySelectorAll(\"video[data-a2ui-workspace-poster]\"),\n );\n await Promise.all(\n videosWithPoster.map((el) =>\n this.#resolveVideoPosterToBlobUrl(el as HTMLVideoElement, db),\n ),\n );\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawA2UI);\n}\n\n// Register basic catalog components\nglobalComponentRegistry.register(\"Text\", (spec, surface) =>\n renderText(spec, surface),\n);\nglobalComponentRegistry.register(\"Row\", (spec, surface, ctx) =>\n renderRow(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Column\", (spec, surface, ctx) =>\n renderColumn(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Button\", (spec, surface, ctx) =>\n renderButton(spec, surface, {\n renderComponent: ctx.renderComponent,\n dispatchAction: ctx.dispatchAction,\n }),\n);\nglobalComponentRegistry.register(\"TextField\", (spec, surface, ctx) =>\n renderTextField(spec, surface, {\n updateDataModelKey: ctx.updateDataModelKey,\n }),\n);\nglobalComponentRegistry.register(\"Image\", (spec, surface, ctx) =>\n renderImage(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"Icon\", (spec, surface) =>\n renderIcon(spec, surface),\n);\nglobalComponentRegistry.register(\"Video\", (spec, surface, ctx) =>\n renderVideo(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"AudioPlayer\", (spec, surface, ctx) =>\n renderAudioPlayer(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"List\", (spec, surface, ctx) =>\n renderList(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Card\", (spec, surface, ctx) =>\n renderCard(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Tabs\", (spec, surface, ctx) =>\n renderTabs(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Modal\", (spec, surface, ctx) =>\n renderModal(spec, surface, {\n renderComponent: ctx.renderComponent,\n attachModalOverlay: ctx.attachModalOverlay,\n }),\n);\nglobalComponentRegistry.register(\"Divider\", (spec, surface) =>\n renderDivider(spec, surface),\n);\nglobalComponentRegistry.register(\"CheckBox\", (spec, surface, ctx) =>\n renderCheckBox(spec, surface, {\n dispatchAction: ctx.dispatchAction,\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"ChoicePicker\", (spec, surface, ctx) =>\n renderChoicePicker(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"Slider\", (spec, surface, ctx) =>\n renderSlider(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"DateTimeInput\", (spec, surface, ctx) =>\n renderDateTimeInput(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\n\n// Register basic functions\nregisterBasicFunctions();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadow-claw-a2ui-CpZUTzlh.js","names":["shadowClawA2uiStyles","shadowClawA2uiTemplate","#surface","#sendDataModel","#renderSurface","#clearRoot","#renderComponent","#dispatchAction","#updateDataModelPointer","#resolveMediaUrl","#attachModalOverlay","#resolveWorkspaceImages","#resolveSingleMediaToBlobUrl","#resolveVideoPosterToBlobUrl"],"sources":["../../src/stores/chat-ui.ts","../../src/ui/a2ui/registries/ComponentRegistry.ts","../../src/ui/a2ui/registries/FunctionRegistry.ts","../../src/ui/a2ui/utils/resolveJsonPointer.ts","../../src/ui/a2ui/utils/resolveDynamicBoolean.ts","../../src/ui/a2ui/utils/resolveDynamicNumber.ts","../../src/ui/a2ui/utils/resolveDynamicString.ts","../../src/ui/a2ui/registries/basicFunctions.ts","../../src/ui/a2ui/utils/applyDataModelUpdate.ts","../../src/ui/a2ui/utils/buildItemDataScope.ts","../../src/ui/a2ui/utils/normaliseComponentsToMap.ts","../../src/components/shadow-claw-a2ui/catalog/basic/shared.ts","../../src/components/shadow-claw-a2ui/catalog/basic/audio-player.ts","../../src/components/shadow-claw-a2ui/catalog/basic/button.ts","../../src/components/shadow-claw-a2ui/catalog/basic/card.ts","../../src/components/shadow-claw-a2ui/catalog/basic/checkbox.ts","../../src/components/shadow-claw-a2ui/catalog/basic/choice-picker.ts","../../src/components/shadow-claw-a2ui/catalog/basic/column.ts","../../src/components/shadow-claw-a2ui/catalog/basic/date-time-input.ts","../../src/components/shadow-claw-a2ui/catalog/basic/divider.ts","../../src/components/shadow-claw-a2ui/catalog/basic/icon.ts","../../src/components/shadow-claw-a2ui/catalog/basic/image.ts","../../src/components/shadow-claw-a2ui/catalog/basic/list.ts","../../src/components/shadow-claw-a2ui/catalog/basic/modal.ts","../../src/components/shadow-claw-a2ui/catalog/basic/row.ts","../../src/components/shadow-claw-a2ui/catalog/basic/slider.ts","../../src/components/shadow-claw-a2ui/catalog/basic/tabs.ts","../../src/components/shadow-claw-a2ui/catalog/basic/text-field.ts","../../src/components/shadow-claw-a2ui/catalog/basic/text.ts","../../src/components/shadow-claw-a2ui/catalog/basic/video.ts","../../src/components/shadow-claw-a2ui/shadow-claw-a2ui.ts"],"sourcesContent":["import { Signal } from \"signal-polyfill\";\n\n/**\n * UI-only state for the Chat page.\n */\nexport class ChatUiStore {\n private _attachmentObjectUrls: Set<string>;\n private _isNearBottom: Signal.State<boolean>;\n private _nearBottomSnapshot: boolean;\n private _scrollStateByGroup: Map<\n string,\n { distanceFromBottom: number; nearBottom: boolean }\n >;\n\n constructor() {\n this._isNearBottom = new Signal.State(true);\n this._nearBottomSnapshot = true;\n this._attachmentObjectUrls = new Set();\n this._scrollStateByGroup = new Map();\n }\n\n getGroupScrollState(\n groupId: string,\n ): { distanceFromBottom: number; nearBottom: boolean } | null {\n return this._scrollStateByGroup.get(groupId) ?? null;\n }\n\n get isNearBottom(): boolean {\n return this._isNearBottom.get();\n }\n\n get nearBottomSnapshot(): boolean {\n return this._nearBottomSnapshot;\n }\n\n registerAttachmentObjectUrl(url: string): void {\n this._attachmentObjectUrls.add(url);\n }\n\n reset(): void {\n this.revokeAttachmentObjectUrls();\n this._scrollStateByGroup.clear();\n this.resetNearBottom();\n }\n\n resetNearBottom(): void {\n this._nearBottomSnapshot = true;\n this._isNearBottom.set(true);\n }\n\n revokeAttachmentObjectUrls(): void {\n for (const objectUrl of this._attachmentObjectUrls) {\n URL.revokeObjectURL(objectUrl);\n }\n\n this._attachmentObjectUrls.clear();\n }\n\n setGroupScrollState(\n groupId: string,\n distanceFromBottom: number,\n nearBottom: boolean,\n ): void {\n this._scrollStateByGroup.set(groupId, {\n distanceFromBottom,\n nearBottom,\n });\n }\n\n setNearBottom(nearBottom: boolean): void {\n this._nearBottomSnapshot = nearBottom;\n this._isNearBottom.set(nearBottom);\n }\n}\n\nexport const chatUiStore = new ChatUiStore();\n","import type { SurfaceState } from \"../../../components/types.js\";\n\n// A render callback that returns an HTMLElement or null\nexport type ComponentRenderCallback = (\n spec: any,\n surface: SurfaceState,\n context: Record<string, any>,\n) => HTMLElement | null;\n\nexport class ComponentRegistry {\n private renderers = new Map<string, ComponentRenderCallback>();\n\n register(\n componentName: string,\n renderCallback: ComponentRenderCallback,\n ): void {\n this.renderers.set(componentName, renderCallback);\n }\n\n get(componentName: string): ComponentRenderCallback | undefined {\n return this.renderers.get(componentName);\n }\n}\n\n// Global default registry\nexport const globalComponentRegistry = new ComponentRegistry();\n","export type CallableBoundary = \"rendererOnly\" | \"agentOnly\" | \"rendererOrAgent\";\n\nexport interface FunctionDefinition {\n name: string;\n callableFrom: CallableBoundary;\n evaluate: (\n args: Record<string, any>,\n context: { dataModel: Record<string, unknown> },\n ) => any;\n}\n\nexport class FunctionRegistry {\n private functions = new Map<string, FunctionDefinition>();\n\n register(definition: FunctionDefinition): void {\n // Validate UAX #31 for name? Can be done in CatalogRegistry instead.\n this.functions.set(definition.name, definition);\n }\n\n get(name: string): FunctionDefinition | undefined {\n return this.functions.get(name);\n }\n\n execute(\n name: string,\n args: Record<string, any>,\n context: { dataModel: Record<string, unknown> },\n ): any {\n const fn = this.functions.get(name);\n if (!fn) {\n throw new Error(`INVALID_FUNCTION_CALL: Unregistered function ${name}`);\n }\n return fn.evaluate(args, context);\n }\n}\n\n// Global default registry\nexport const globalFunctionRegistry = new FunctionRegistry();\n","/**\n * Minimal RFC 6901 JSON Pointer resolver (read).\n */\nexport function resolveJsonPointer(obj: unknown, pointer: string): unknown {\n if (!pointer || pointer === \"/\") {\n return obj;\n }\n\n const tokens = pointer\n .replace(/^\\//, \"\")\n .split(\"/\")\n .map((t) => t.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = obj;\n\n for (const token of tokens) {\n if (current == null || typeof current !== \"object\") {\n return undefined;\n }\n\n current = (current as Record<string, unknown>)[token];\n }\n\n return current;\n}\n","import { globalFunctionRegistry } from \"../registries/FunctionRegistry.js\";\nimport { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type {\n DataModelRef,\n DynamicBoolean,\n FunctionCall,\n PathRef,\n} from \"../types.js\";\n\n/**\n * Resolve a dynamic boolean against a data model.\n */\nexport function resolveDynamicBoolean(\n value: DynamicBoolean | undefined | null,\n dataModel: Record<string, unknown>,\n): boolean {\n if (value == null) return false;\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"object\" && \"path\" in value) {\n return Boolean(resolveJsonPointer(dataModel, (value as PathRef).path));\n }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return Boolean(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel),\n );\n }\n\n if (typeof value === \"object\" && \"call\" in value) {\n const fc = value as FunctionCall;\n try {\n return Boolean(\n globalFunctionRegistry.execute(fc.call, fc.args ?? {}, { dataModel }),\n );\n } catch (err) {\n console.warn(`[resolveDynamicBoolean] Function evaluation failed:`, err);\n return false;\n }\n }\n\n return false;\n}\n","import { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type { DataModelRef, DynamicNumber, PathRef } from \"../types.js\";\n\n/**\n * Resolve a dynamic number against a data model.\n */\nexport function resolveDynamicNumber(\n value: DynamicNumber | undefined | null,\n dataModel: Record<string, unknown>,\n): number {\n if (value == null) return 0;\n if (typeof value === \"number\") return value;\n if (typeof value === \"object\" && \"path\" in value) {\n return Number(resolveJsonPointer(dataModel, (value as PathRef).path) ?? 0);\n }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return Number(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel) ?? 0,\n );\n }\n return 0;\n}\n","import { globalFunctionRegistry } from \"../registries/FunctionRegistry.js\";\nimport { resolveJsonPointer } from \"./resolveJsonPointer.js\";\n\nimport type {\n DataModelRef,\n DynamicString,\n FunctionCall,\n PathRef,\n} from \"../types.js\";\n\n/**\n * Resolve a dynamic string against a data model.\n *\n * Supported forms (in priority order):\n * - Literal string: `\"Hello\"`\n * - Spec-canonical path ref: `{ \"path\": \"/key\" }` (A2UI v1.0)\n * - Deprecated data-model ref: `{ \"$dataModel\": \"/key\" }` (backward compat)\n * - Function call: `{ \"call\": \"capitalize\", \"args\": { \"value\": ... } }`\n */\nexport function resolveDynamicString(\n value: DynamicString | undefined | null,\n dataModel: Record<string, unknown>,\n): string {\n if (value == null) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n // Spec-canonical: { \"path\": \"/key\" }\n if (typeof value === \"object\" && \"path\" in value) {\n return String(resolveJsonPointer(dataModel, (value as PathRef).path) ?? \"\");\n }\n\n // Deprecated: { \"$dataModel\": \"/key\" }\n if (typeof value === \"object\" && \"$dataModel\" in value) {\n return String(\n resolveJsonPointer(dataModel, (value as DataModelRef).$dataModel) ?? \"\",\n );\n }\n\n if (typeof value !== \"object\" || !(\"call\" in value)) {\n return \"\";\n }\n\n const fc = value as FunctionCall;\n\n try {\n return String(\n globalFunctionRegistry.execute(fc.call, fc.args ?? {}, { dataModel }) ??\n \"\",\n );\n } catch (err) {\n console.warn(`[resolveDynamicString] Function evaluation failed:`, err);\n return \"\";\n }\n}\n","import { globalFunctionRegistry } from \"./FunctionRegistry.js\";\n\nimport { resolveDynamicBoolean } from \"../utils/resolveDynamicBoolean.js\";\nimport { resolveDynamicNumber } from \"../utils/resolveDynamicNumber.js\";\nimport { resolveDynamicString } from \"../utils/resolveDynamicString.js\";\nimport { resolveJsonPointer } from \"../utils/resolveJsonPointer.js\";\n\nexport function registerBasicFunctions(): void {\n globalFunctionRegistry.register({\n name: \"capitalize\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const inner = resolveDynamicString(args.value, context.dataModel);\n return inner.charAt(0).toUpperCase() + inner.slice(1);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatString\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const template = resolveDynamicString(args.value, context.dataModel);\n return template.replace(/\\$\\{([^}]+)\\}/g, (_, pointer) =>\n String(resolveJsonPointer(context.dataModel, pointer) ?? \"\"),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatNumber\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const num = resolveDynamicNumber(args.value, context.dataModel);\n const decimals =\n args.decimals !== undefined\n ? Number(resolveDynamicNumber(args.decimals, context.dataModel))\n : undefined;\n const grouping =\n args.grouping !== undefined\n ? resolveDynamicBoolean(args.grouping, context.dataModel)\n : true;\n return num.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n useGrouping: grouping,\n });\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatCurrency\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const num = resolveDynamicNumber(args.value, context.dataModel);\n const currency = resolveDynamicString(args.currency, context.dataModel);\n const decimals =\n args.decimals !== undefined\n ? Number(resolveDynamicNumber(args.decimals, context.dataModel))\n : 2;\n return num.toLocaleString(undefined, {\n style: \"currency\",\n currency: currency || \"USD\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n },\n });\n\n globalFunctionRegistry.register({\n name: \"formatDate\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const dateStr = resolveDynamicString(args.value, context.dataModel);\n try {\n const d = new Date(dateStr);\n return isNaN(d.getTime()) ? dateStr : d.toLocaleDateString();\n } catch {\n return dateStr;\n }\n },\n });\n\n globalFunctionRegistry.register({\n name: \"pluralize\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const count = resolveDynamicNumber(args.value, context.dataModel);\n const one = resolveDynamicString(args.one, context.dataModel);\n const other = resolveDynamicString(args.other, context.dataModel);\n return count === 1 ? one : other;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"openUrl\",\n callableFrom: \"rendererOrAgent\",\n evaluate: () => {\n return \"\";\n },\n });\n\n globalFunctionRegistry.register({\n name: \"and\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return args.values.every((v: any) =>\n resolveDynamicBoolean(v, context.dataModel),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"or\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return args.values.some((v: any) =>\n resolveDynamicBoolean(v, context.dataModel),\n );\n },\n });\n\n globalFunctionRegistry.register({\n name: \"not\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n return !resolveDynamicBoolean(args.value, context.dataModel);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"required\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n return v.trim().length > 0;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"email\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(v);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"regex\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n const pattern = resolveDynamicString(args.pattern, context.dataModel);\n return new RegExp(pattern).test(v);\n },\n });\n\n globalFunctionRegistry.register({\n name: \"length\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicString(args.value, context.dataModel);\n const min =\n args.min !== undefined\n ? resolveDynamicNumber(args.min, context.dataModel)\n : 0;\n const max =\n args.max !== undefined\n ? resolveDynamicNumber(args.max, context.dataModel)\n : Infinity;\n return v.length >= min && v.length <= max;\n },\n });\n\n globalFunctionRegistry.register({\n name: \"numeric\",\n callableFrom: \"rendererOrAgent\",\n evaluate: (args, context) => {\n const v = resolveDynamicNumber(args.value, context.dataModel);\n const min =\n args.min !== undefined\n ? resolveDynamicNumber(args.min, context.dataModel)\n : -Infinity;\n const max =\n args.max !== undefined\n ? resolveDynamicNumber(args.max, context.dataModel)\n : Infinity;\n return v >= min && v <= max;\n },\n });\n}\n","/**\n * Set a value at a JSON Pointer path in a plain object (write).\n * Creates intermediate objects as needed.\n * @internal\n */\nfunction setAtPointer(\n obj: Record<string, unknown>,\n pointer: string,\n value: unknown,\n remove: boolean,\n): Record<string, unknown> {\n const tokens = pointer\n .replace(/^\\//, \"\")\n .split(\"/\")\n .map((t) => t.replace(/~1/g, \"/\").replace(/~0/g, \"~\"))\n .filter((t) => t !== \"\");\n\n if (tokens.length === 0) {\n // \"/\" — replace entire object\n return typeof value === \"object\" && value !== null\n ? { ...(value as Record<string, unknown>) }\n : {};\n }\n\n if (tokens.length === 1) {\n const next = { ...obj };\n if (remove) {\n delete next[tokens[0]];\n } else {\n next[tokens[0]] = value;\n }\n return next;\n }\n\n // Deep path — recurse\n const [head, ...rest] = tokens;\n const child =\n obj[head] != null && typeof obj[head] === \"object\"\n ? { ...(obj[head] as Record<string, unknown>) }\n : {};\n return {\n ...obj,\n [head]: setAtPointer(child, \"/\" + rest.join(\"/\"), value, remove),\n };\n}\n\n/**\n * Apply a single A2UI v1.0 `updateDataModel` operation to a data model.\n *\n * - `path` defaults to `\"/\"` (replace the entire data model).\n * - If `value` is `undefined` and `hasValue` is `false`, the key at `path`\n * is deleted.\n *\n * @param dataModel The current data model.\n * @param path JSON Pointer path (RFC 6901). Defaults to `\"/\"`.\n * @param value The new value to set.\n * @param hasValue Pass `false` when the caller explicitly omits `value` to\n * trigger key deletion rather than setting `undefined`.\n */\nexport function applyDataModelUpdate(\n dataModel: Record<string, unknown>,\n path?: string,\n value?: unknown,\n hasValue = true,\n): Record<string, unknown> {\n const p = path ?? \"/\";\n\n if (p === \"/\" || p === \"\") {\n // Replace entire data model\n if (hasValue && typeof value === \"object\" && value !== null) {\n return { ...(value as Record<string, unknown>) };\n }\n return {};\n }\n\n return setAtPointer(dataModel, p, value, !hasValue || value === undefined);\n}\n\nexport function applyDataModelPatches(\n dataModel: Record<string, unknown>,\n patches: Record<string, unknown>,\n): Record<string, unknown> {\n let next = { ...dataModel };\n for (const [pointer, value] of Object.entries(patches)) {\n next = applyDataModelUpdate(next, pointer, value);\n }\n return next;\n}\n","/**\n * Build a per-item data scope for a data-driven child.\n *\n * Merges the surface data model with `@index` (item index) and `@item` (item\n * value) so template components can bind to them via `{ \"path\": \"/@index\" }`\n * and `{ \"path\": \"/@item\" }`. This implements spec §builtins / §@index.\n *\n * @param dataModel The current surface data model.\n * @param item The individual item value from the list.\n * @param index The zero-based index of the item.\n */\nexport function buildItemDataScope(\n dataModel: Record<string, unknown>,\n item: unknown,\n index: number,\n): Record<string, unknown> {\n return {\n ...dataModel,\n ...(typeof item === \"object\" && item !== null ? item : {}),\n \"@index\": index,\n \"@item\": item,\n };\n}\n","import type { A2UIComponentSpec } from \"../types.js\";\n\n/**\n * Normalise a `components` array from a wire envelope into the keyed map used\n * by `SurfaceState` for O(1) lookup during render.\n *\n * Any component whose `id` is missing is skipped with a warning.\n */\nexport function normaliseComponentsToMap(\n components: A2UIComponentSpec[],\n): Record<string, A2UIComponentSpec> {\n const map: Record<string, A2UIComponentSpec> = {};\n\n function walk(specs: any[]) {\n for (const spec of specs) {\n if (!spec || typeof spec !== \"object\") continue;\n\n if (spec.id) {\n map[spec.id] = spec;\n } else if (spec.component) {\n console.warn(\n \"[a2ui] Component missing required 'id' field; skipped.\",\n spec,\n );\n }\n\n // Check for nested children\n if (Array.isArray(spec.children)) {\n if (spec.children.length > 0 && typeof spec.children[0] === \"object\") {\n // Ensure it is not an array containing a template\n if (\n !(\"path\" in spec.children[0] && \"componentId\" in spec.children[0])\n ) {\n walk(spec.children);\n }\n }\n }\n\n // Check for nested single child\n if (spec.child && typeof spec.child === \"object\") {\n walk([spec.child]);\n }\n\n // Check for nested tab children\n if (Array.isArray(spec.tabs)) {\n for (const tab of spec.tabs) {\n if (tab && typeof tab.child === \"object\") {\n walk([tab.child]);\n }\n }\n }\n }\n }\n\n walk(components);\n return map;\n}\n","import { resolveJsonPointer } from \"../../../../ui/a2ui/utils/resolveJsonPointer.js\";\n\nimport type { ChildList, TextVariant } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport { resolveChildIds } from \"../../../../ui/a2ui/utils/resolveChildIds.js\";\n\nexport function renderChildrenList(\n children: ChildList,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n appendFn: (childEl: HTMLElement) => void,\n): void {\n let tmpl: { path: string; componentId: string };\n\n if (Array.isArray(children)) {\n if (\n children.length > 0 &&\n typeof children[0] === \"object\" &&\n children[0] !== null\n ) {\n const first = children[0] as any;\n if (\"path\" in first && \"componentId\" in first) {\n tmpl = first;\n } else if (\"id\" in first) {\n for (const c of children) {\n const el = ctx.renderComponent(String((c as any).id));\n if (el) appendFn(el);\n }\n return;\n } else {\n return;\n }\n } else {\n for (const id of children) {\n const el = ctx.renderComponent(String(id));\n if (el) appendFn(el);\n }\n return;\n }\n } else {\n tmpl = children;\n }\n\n const items = resolveJsonPointer(surface.dataModel, tmpl.path);\n if (!Array.isArray(items)) {\n return;\n }\n\n for (let i = 0; i < items.length; i++) {\n const el = ctx.renderComponent(tmpl.componentId, {\n arrayPath: tmpl.path,\n index: i,\n itemValue: items[i],\n });\n if (el) appendFn(el);\n }\n}\n\nexport function variantToTag(variant: TextVariant): string {\n switch (variant) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n return variant;\n default:\n return \"span\";\n }\n}\n\nexport function applyWeight(el: HTMLElement, weight: number | undefined): void {\n if (weight !== undefined) {\n el.style.flexGrow = String(weight);\n }\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { AudioPlayerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderAudioPlayer(\n spec: AudioPlayerSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__audio\";\n\n const audio = document.createElement(\"audio\");\n audio.controls = true;\n\n let audioUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).audioUrl ??\n \"\";\n audioUrl = resolveDynamicString(audioUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(audioUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n audio.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n audio.src = resolvedUrl;\n }\n\n applyWeight(wrapper, spec.weight);\n wrapper.appendChild(audio);\n\n if (spec.description) {\n const desc = document.createElement(\"div\");\n desc.className = \"a2ui__audio-description\";\n desc.textContent = resolveDynamicString(\n spec.description,\n surface.dataModel,\n );\n wrapper.appendChild(desc);\n }\n\n return wrapper;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { ButtonSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderButton(\n spec: ButtonSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\" | \"dispatchAction\">,\n): HTMLElement {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = `a2ui__button a2ui__button--${spec.variant ?? \"primary\"}`;\n\n if (spec.checked) {\n btn.classList.add(\"a2ui__button--checked\");\n }\n\n applyWeight(btn, spec.weight);\n\n if (spec.child && surface.components[spec.child]) {\n const labelEl = ctx.renderComponent(spec.child);\n if (labelEl) {\n labelEl.style.color = \"inherit\";\n btn.appendChild(labelEl);\n }\n } else {\n const fallbackText = (spec as any).text;\n if (typeof fallbackText === \"string\" && fallbackText) {\n btn.textContent = fallbackText;\n }\n }\n\n btn.addEventListener(\"click\", () => {\n if (!spec.action) {\n return;\n }\n\n // Spec §actions: use event.name; fall back to deprecated id field.\n const actionId =\n spec.action.event?.name ?? spec.action.id ?? (spec.action as any).name;\n if (actionId) {\n ctx.dispatchAction(actionId);\n }\n });\n\n return btn;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { CardSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderCard(\n spec: CardSpec,\n _: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__card\";\n applyWeight(wrapper, spec.weight);\n\n const childEl = ctx.renderComponent(spec.child);\n if (childEl) {\n wrapper.appendChild(childEl);\n }\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\n\nimport type { CheckBoxSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderCheckBox(\n spec: CheckBoxSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"dispatchAction\" | \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"label\");\n wrapper.className = \"a2ui__checkbox\";\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n const key = (spec.value as { path: string }).path.replace(/^\\//, \"\");\n input.checked = Boolean(surface.dataModel[key]);\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n const key = (spec.value as { $dataModel: string }).$dataModel.replace(\n /^\\//,\n \"\",\n );\n input.checked = Boolean(surface.dataModel[key]);\n } else if (typeof spec.value === \"boolean\") {\n input.checked = spec.value;\n }\n\n input.addEventListener(\"change\", () => {\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n ctx.updateDataModelPointer(\n (spec.value as { path: string }).path,\n input.checked,\n );\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n ctx.updateDataModelPointer(\n (spec.value as { $dataModel: string }).$dataModel,\n input.checked,\n );\n }\n\n // Spec §actions: use event.name; fall back to deprecated id.\n const actionId =\n (spec as any).action?.event?.name ?? (spec as any).action?.id;\n if (actionId) {\n ctx.dispatchAction(actionId);\n }\n });\n\n const label = document.createElement(\"span\");\n label.className = \"a2ui__checkbox-label\";\n label.textContent = resolveDynamicString(spec.label, surface.dataModel);\n\n wrapper.append(input, label);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { ChoicePickerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderChoicePicker(\n spec: ChoicePickerSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__choicepicker\";\n applyWeight(wrapper, spec.weight);\n\n const isMultiple = spec.variant === \"multipleSelection\";\n\n let boundKey: string | null = null;\n let initial: string[] = [];\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n boundKey = (spec.value as { path: string }).path.replace(/^\\//, \"\");\n const current = surface.dataModel[boundKey];\n if (Array.isArray(current)) {\n initial = current.map(String);\n } else if (typeof current === \"string\") {\n initial = [current];\n }\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n boundKey = (spec.value as { $dataModel: string }).$dataModel.replace(\n /^\\//,\n \"\",\n );\n const current = surface.dataModel[boundKey];\n if (Array.isArray(current)) {\n initial = current.map(String);\n } else if (typeof current === \"string\") {\n initial = [current];\n }\n }\n\n (spec.options || []).forEach((rawOption) => {\n // LLMs sometimes pass arrays of strings/numbers instead of the full ChoicePickerOption object\n const isPrimitive =\n typeof rawOption === \"string\" || typeof rawOption === \"number\";\n const option = isPrimitive\n ? { label: String(rawOption), value: String(rawOption) }\n : rawOption;\n\n const id = `a2ui-choice-${surface.surfaceId}-${spec.id}-${option.value}`;\n const item = document.createElement(\"label\");\n item.className = \"a2ui__choice-item\";\n\n const input = document.createElement(\"input\");\n input.type = isMultiple ? \"checkbox\" : \"radio\";\n input.name = `a2ui-choice-${surface.surfaceId}-${spec.id}`;\n input.id = id;\n input.value = option.value;\n input.checked = initial.includes(option.value);\n\n input.addEventListener(\"change\", () => {\n if (!boundKey) {\n return;\n }\n\n if (isMultiple) {\n const checkedValues = Array.from(\n wrapper.querySelectorAll<HTMLInputElement>(\"input:checked\"),\n ).map((inputEl) => inputEl.value);\n ctx.updateDataModelPointer(`/${boundKey}`, checkedValues);\n } else {\n const selected =\n wrapper.querySelector<HTMLInputElement>(\"input:checked\");\n ctx.updateDataModelPointer(\n `/${boundKey}`,\n selected ? selected.value : \"\",\n );\n }\n });\n\n const span = document.createElement(\"span\");\n span.textContent = resolveDynamicString(option.label, surface.dataModel);\n\n item.append(input, span);\n wrapper.appendChild(item);\n });\n\n return wrapper;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { ColumnSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderColumn(\n spec: ColumnSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"a2ui__column\";\n if (spec.justify) {\n el.classList.add(`a2ui__justify--${spec.justify}`);\n }\n\n if (spec.align) {\n el.classList.add(`a2ui__align--${spec.align}`);\n }\n\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n el.appendChild(childEl);\n });\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { DateTimeInputSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderDateTimeInput(\n spec: DateTimeInputSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__datetime\";\n applyWeight(wrapper, spec.weight);\n\n const inputId = `a2ui-datetime-${surface.surfaceId}-${spec.id}`;\n\n if (spec.label) {\n const labelEl = document.createElement(\"label\");\n labelEl.className = \"a2ui__datetime-label\";\n labelEl.htmlFor = inputId;\n labelEl.textContent = resolveDynamicString(spec.label, surface.dataModel);\n wrapper.appendChild(labelEl);\n }\n\n const input = document.createElement(\"input\");\n input.id = inputId;\n\n if (spec.enableDate && spec.enableTime) {\n input.type = \"datetime-local\";\n } else if (spec.enableDate) {\n input.type = \"date\";\n } else if (spec.enableTime) {\n input.type = \"time\";\n } else {\n input.type = \"text\";\n }\n\n // Resolve value: path ref, $dataModel ref, or static ISO 8601 string (spec §DateTimeInput)\n const rawValue = spec.value;\n if (rawValue && typeof rawValue === \"object\") {\n let key: string | null = null;\n if (\"path\" in rawValue) {\n // Spec-canonical\n key = (rawValue as { path: string }).path.replace(/^\\//, \"\");\n } else if (\"$dataModel\" in rawValue) {\n // Deprecated\n key = (rawValue as { $dataModel: string }).$dataModel.replace(/^\\//, \"\");\n }\n if (key !== null) {\n const current = surface.dataModel[key];\n if (typeof current === \"string\") {\n input.value = current;\n }\n }\n } else if (typeof rawValue === \"string\" && rawValue) {\n input.value = rawValue;\n }\n\n if (spec.min) {\n input.min = resolveDynamicString(spec.min, surface.dataModel);\n }\n\n if (spec.max) {\n input.max = resolveDynamicString(spec.max, surface.dataModel);\n }\n\n input.addEventListener(\"input\", () => {\n if (rawValue && typeof rawValue === \"object\") {\n if (\"path\" in rawValue) {\n ctx.updateDataModelPointer(\n (rawValue as { path: string }).path,\n input.value,\n );\n } else if (\"$dataModel\" in rawValue) {\n ctx.updateDataModelPointer(\n (rawValue as { $dataModel: string }).$dataModel,\n input.value,\n );\n }\n }\n });\n\n wrapper.appendChild(input);\n\n return wrapper;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { DividerSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderDivider(\n spec: DividerSpec,\n _surface: SurfaceState,\n): HTMLElement {\n const el = document.createElement(\"hr\");\n el.className = `a2ui__divider a2ui__divider--${spec.axis ?? \"horizontal\"}`;\n applyWeight(el, spec.weight);\n\n return el;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { IconSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderIcon(\n spec: IconSpec,\n _surface: SurfaceState,\n): HTMLElement {\n const span = document.createElement(\"span\");\n span.className = \"a2ui__icon material-symbols-outlined\";\n\n if (typeof spec.name === \"string\") {\n span.dataset.iconName = spec.name;\n span.textContent = spec.name;\n } else if (\n spec.name &&\n typeof spec.name === \"object\" &&\n \"path\" in spec.name\n ) {\n const img = document.createElement(\"img\");\n img.src = spec.name.path;\n img.alt = \"\";\n span.appendChild(img);\n }\n\n applyWeight(span, spec.weight);\n\n return span;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { ImageSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderImage(\n spec: ImageSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const img = document.createElement(\"img\");\n img.className = `a2ui__image a2ui__image--${spec.variant ?? \"mediumFeature\"}`;\n\n let imageUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).imageUrl ??\n \"\";\n imageUrl = resolveDynamicString(imageUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(imageUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n img.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n img.src = resolvedUrl;\n }\n\n img.alt = spec.description\n ? resolveDynamicString(spec.description, surface.dataModel)\n : \"\";\n img.style.objectFit = spec.fit ?? \"fill\";\n applyWeight(img, spec.weight);\n\n return img;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { ListSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderList(\n spec: ListSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = `a2ui__list a2ui__list--${spec.direction ?? \"vertical\"}`;\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n const item = document.createElement(\"div\");\n item.className = \"a2ui__list-item\";\n item.appendChild(childEl);\n el.appendChild(item);\n });\n\n return el;\n}\n","import { applyWeight } from \"./shared.js\";\n\nimport type { ModalSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderModal(\n spec: ModalSpec,\n _: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\" | \"attachModalOverlay\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__modal\";\n applyWeight(wrapper, spec.weight);\n\n const triggerEl =\n ctx.renderComponent(spec.trigger) ??\n (() => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.textContent = \"Open\";\n\n return button;\n })();\n\n const overlay = document.createElement(\"div\");\n overlay.className = \"a2ui__modal-overlay\";\n overlay.style.display = \"none\";\n overlay.setAttribute(\"role\", \"dialog\");\n\n const content = document.createElement(\"div\");\n content.className = \"a2ui__modal-content\";\n\n const closeOverlay = () => {\n overlay.style.display = \"none\";\n content.replaceChildren();\n };\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n closeOverlay();\n }\n });\n\n overlay.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\") {\n closeOverlay();\n }\n });\n\n overlay.append(content);\n\n triggerEl.addEventListener(\n \"click\",\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n content.replaceChildren();\n const childEl = ctx.renderComponent(spec.content);\n if (childEl) {\n content.appendChild(childEl);\n }\n\n overlay.style.display = \"block\";\n overlay.tabIndex = -1;\n overlay.focus();\n },\n { capture: true },\n );\n\n if (ctx.attachModalOverlay) {\n ctx.attachModalOverlay(overlay);\n }\n\n wrapper.appendChild(triggerEl);\n\n return wrapper;\n}\n","import { applyWeight, renderChildrenList } from \"./shared.js\";\n\nimport type { RowSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderRow(\n spec: RowSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"a2ui__row\";\n if (spec.justify) {\n el.classList.add(`a2ui__justify--${spec.justify}`);\n }\n\n if (spec.align) {\n el.classList.add(`a2ui__align--${spec.align}`);\n }\n\n applyWeight(el, spec.weight);\n\n renderChildrenList(spec.children, surface, ctx, (childEl) => {\n el.appendChild(childEl);\n });\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { SliderSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderSlider(\n spec: SliderSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelPointer\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__slider\";\n applyWeight(wrapper, spec.weight);\n\n const inputId = `a2ui-slider-${surface.surfaceId}-${spec.id}`;\n\n if (spec.label) {\n const labelEl = document.createElement(\"label\");\n labelEl.className = \"a2ui__slider-label\";\n labelEl.htmlFor = inputId;\n labelEl.textContent = resolveDynamicString(spec.label, surface.dataModel);\n wrapper.appendChild(labelEl);\n }\n\n const input = document.createElement(\"input\");\n input.type = \"range\";\n input.id = inputId;\n input.min = String(spec.min ?? 0);\n input.max = String(spec.max ?? 100);\n if (spec.steps !== undefined) {\n input.step = String(spec.steps);\n }\n\n if (typeof spec.value === \"number\") {\n input.value = String(spec.value);\n } else if (spec.value !== undefined) {\n input.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n input.addEventListener(\"input\", () => {\n if (typeof spec.value === \"object\" && \"path\" in spec.value) {\n // Spec-canonical: { \"path\": \"/key\" }\n ctx.updateDataModelPointer(\n (spec.value as { path: string }).path,\n Number(input.value),\n );\n } else if (typeof spec.value === \"object\" && \"$dataModel\" in spec.value) {\n // Deprecated: { \"$dataModel\": \"/key\" }\n ctx.updateDataModelPointer(\n (spec.value as { $dataModel: string }).$dataModel,\n Number(input.value),\n );\n }\n });\n\n wrapper.appendChild(input);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { TabsSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderTabs(\n spec: TabsSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"renderComponent\">,\n): HTMLElement {\n const container = document.createElement(\"div\");\n container.className = \"a2ui__tabs\";\n applyWeight(container, spec.weight);\n\n const headers = document.createElement(\"div\");\n headers.className = \"a2ui__tabs-headers\";\n const content = document.createElement(\"div\");\n content.className = \"a2ui__tabs-content\";\n\n const tabs = Array.isArray(spec.tabs) ? spec.tabs : [];\n if (!Array.isArray(spec.tabs)) {\n console.warn(\n `[shadow-claw-a2ui] Tab spec is missing or invalid for component id: \"${spec.id}\"`,\n );\n }\n\n const activate = (index: number) => {\n headers.querySelectorAll(\"button\").forEach((b, i) => {\n b.classList.toggle(\"active\", i === index);\n });\n content.replaceChildren();\n const childId = tabs[index]?.child;\n if (childId) {\n const childEl = ctx.renderComponent(childId);\n if (childEl) {\n content.appendChild(childEl);\n }\n }\n };\n\n tabs.forEach((tab, index) => {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"a2ui__tab-header\";\n btn.textContent = resolveDynamicString(tab.title, surface.dataModel);\n btn.addEventListener(\"click\", () => activate(index));\n headers.appendChild(btn);\n });\n\n container.append(headers, content);\n if (tabs.length > 0) {\n activate(0);\n }\n\n return container;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { TextFieldSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderTextField(\n spec: TextFieldSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"updateDataModelKey\">,\n): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"a2ui__field\";\n applyWeight(wrapper, spec.weight);\n\n const label = document.createElement(\"label\");\n label.className = \"a2ui__field-label\";\n label.textContent = resolveDynamicString(spec.label, surface.dataModel);\n\n const isLongText = spec.variant === \"longText\";\n let input: HTMLInputElement | HTMLTextAreaElement;\n\n if (isLongText) {\n const ta = document.createElement(\"textarea\");\n ta.className = \"a2ui__field-textarea\";\n ta.rows = 3;\n if (spec.value !== undefined) {\n ta.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n ta.addEventListener(\"input\", () => {\n ctx.updateDataModelKey(spec, ta.value);\n });\n input = ta;\n } else {\n const inp = document.createElement(\"input\");\n inp.className = \"a2ui__field-input\";\n inp.type =\n spec.variant === \"number\"\n ? \"number\"\n : spec.variant === \"obscured\"\n ? \"password\"\n : \"text\";\n if (spec.value !== undefined) {\n inp.value = resolveDynamicString(spec.value, surface.dataModel);\n }\n\n if (spec.validationRegexp) {\n inp.pattern = spec.validationRegexp;\n }\n\n inp.addEventListener(\"input\", () => {\n ctx.updateDataModelKey(spec, inp.value);\n });\n input = inp;\n }\n\n const inputId = `a2ui-field-${surface.surfaceId}-${spec.id}`;\n input.id = inputId;\n label.htmlFor = inputId;\n\n wrapper.append(label, input);\n\n return wrapper;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight, variantToTag } from \"./shared.js\";\n\nimport type { TextSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { SurfaceState } from \"../../../types.js\";\n\nexport function renderText(spec: TextSpec, surface: SurfaceState): HTMLElement {\n const variant = spec.variant ?? \"body\";\n const tag = variantToTag(variant);\n const el = document.createElement(tag);\n el.className = `a2ui__text a2ui__text--${variant}`;\n applyWeight(el, spec.weight);\n\n el.textContent = resolveDynamicString(spec.text, surface.dataModel);\n\n return el;\n}\n","import { resolveDynamicString } from \"../../../../ui/a2ui/utils/resolveDynamicString.js\";\nimport { applyWeight } from \"./shared.js\";\n\nimport type { VideoSpec } from \"../../../../ui/a2ui/types.js\";\nimport type { RenderContext, SurfaceState } from \"../../../types.js\";\n\nexport function renderVideo(\n spec: VideoSpec,\n surface: SurfaceState,\n ctx: Pick<RenderContext, \"resolveMediaUrl\">,\n): HTMLElement {\n const video = document.createElement(\"video\");\n video.controls = true;\n video.className = \"a2ui__video\";\n\n let videoUrl =\n spec.url ??\n (spec as any).src ??\n (spec as any).source ??\n (spec as any).videoUrl ??\n \"\";\n videoUrl = resolveDynamicString(videoUrl, surface.dataModel);\n\n const resolvedUrl = ctx.resolveMediaUrl(videoUrl);\n if (resolvedUrl.startsWith(\"/files/\")) {\n video.setAttribute(\"data-a2ui-workspace-src\", resolvedUrl);\n } else if (resolvedUrl) {\n video.src = resolvedUrl;\n }\n\n if (spec.posterUrl) {\n const posterUrl = ctx.resolveMediaUrl(\n resolveDynamicString(spec.posterUrl, surface.dataModel),\n );\n if (posterUrl.startsWith(\"/files/\")) {\n video.setAttribute(\"data-a2ui-workspace-poster\", posterUrl);\n } else if (posterUrl) {\n video.poster = posterUrl;\n }\n }\n\n applyWeight(video, spec.weight);\n\n return video;\n}\n","/**\n * <shadow-claw-a2ui>\n *\n * A2UI v1.0 Basic catalog renderer — renders interactive UI surfaces\n * delivered from an agent.\n *\n * Components accept `{ \"path\": \"/key\" }` data binding syntax, though\n * `{ \"$dataModel\": \"/key\" }` is still supported for backward compatibility.\n */\nimport { getDb } from \"../../db/db.js\";\nimport { readGroupFileBytes } from \"../../storage/readGroupFileBytes.js\";\nimport { chatUiStore } from \"../../stores/chat-ui.js\";\nimport { globalComponentRegistry } from \"../../ui/a2ui/registries/ComponentRegistry.js\";\nimport { globalFunctionRegistry } from \"../../ui/a2ui/registries/FunctionRegistry.js\";\nimport { registerBasicFunctions } from \"../../ui/a2ui/registries/basicFunctions.js\";\nimport { applyDataModelUpdate } from \"../../ui/a2ui/utils/applyDataModelUpdate.js\";\nimport { buildItemDataScope } from \"../../ui/a2ui/utils/buildItemDataScope.js\";\nimport { normaliseComponentsToMap } from \"../../ui/a2ui/utils/normaliseComponentsToMap.js\";\n\nimport { renderAudioPlayer } from \"./catalog/basic/audio-player.js\";\nimport { renderButton } from \"./catalog/basic/button.js\";\nimport { renderCard } from \"./catalog/basic/card.js\";\nimport { renderCheckBox } from \"./catalog/basic/checkbox.js\";\nimport { renderChoicePicker } from \"./catalog/basic/choice-picker.js\";\nimport { renderColumn } from \"./catalog/basic/column.js\";\nimport { renderDateTimeInput } from \"./catalog/basic/date-time-input.js\";\nimport { renderDivider } from \"./catalog/basic/divider.js\";\nimport { renderIcon } from \"./catalog/basic/icon.js\";\nimport { renderImage } from \"./catalog/basic/image.js\";\nimport { renderList } from \"./catalog/basic/list.js\";\nimport { renderModal } from \"./catalog/basic/modal.js\";\nimport { renderRow } from \"./catalog/basic/row.js\";\nimport { renderSlider } from \"./catalog/basic/slider.js\";\nimport { renderTabs } from \"./catalog/basic/tabs.js\";\nimport { renderTextField } from \"./catalog/basic/text-field.js\";\nimport { renderText } from \"./catalog/basic/text.js\";\nimport { renderVideo } from \"./catalog/basic/video.js\";\n\nimport type { A2UIAction, A2UIEnvelope } from \"../../ui/a2ui/types.js\";\nimport type { ScopeContext, SurfaceState } from \"../types.js\";\n\nimport ShadowClawElement from \"../shadow-claw-element.js\";\nimport shadowClawA2uiStyles from \"./shadow-claw-a2ui.css\" with { type: \"css\" };\nimport shadowClawA2uiTemplate from \"./shadow-claw-a2ui.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-a2ui\";\n\nexport class ShadowClawA2UI extends ShadowClawElement {\n static styles = shadowClawA2uiStyles;\n static template = shadowClawA2uiTemplate;\n\n /** groupId of the conversation this surface belongs to */\n groupId: string = \"\";\n\n /**\n * Whether the current surface requested full data model on every action\n * (spec §sendDataModel).\n */\n #sendDataModel: boolean = false;\n\n /** Current surface state — set externally by the chat component */\n #surface: SurfaceState | null = null;\n\n /**\n * Apply an A2UI envelope. Handles all four envelope types.\n * Call this whenever the orchestrator emits \"a2ui-surface\".\n */\n applyEnvelope(envelope: A2UIEnvelope): void {\n switch (envelope.type) {\n case \"createSurface\": {\n // Spec §createSurface: components arrive as a flat array; normalise\n // to a keyed map for O(1) lookup during render. Root is always \"root\".\n this.#surface = {\n surfaceId: envelope.surfaceId,\n components: normaliseComponentsToMap(envelope.components),\n dataModel: { ...(envelope.dataModel ?? {}) },\n rootComponentId: \"root\",\n };\n this.#sendDataModel = envelope.sendDataModel ?? false;\n this.#renderSurface();\n\n break;\n }\n\n case \"updateComponents\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n // Spec §updateComponents: components arrive as an array; merge into map.\n this.#surface = {\n ...this.#surface,\n components: {\n ...this.#surface.components,\n ...normaliseComponentsToMap(envelope.components),\n },\n };\n this.#renderSurface();\n\n break;\n }\n\n case \"updateDataModel\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n // Spec §updateDataModel: single path + value update.\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(\n this.#surface.dataModel,\n envelope.path,\n envelope.value,\n \"value\" in envelope,\n ),\n };\n this.#renderSurface();\n\n break;\n }\n\n case \"deleteSurface\": {\n if (this.#surface?.surfaceId === envelope.surfaceId) {\n this.#surface = null;\n this.#sendDataModel = false;\n this.#clearRoot();\n }\n\n break;\n }\n\n case \"actionResponse\": {\n // Spec §actionResponse: store the response value at responsePath.\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n if (envelope.responsePath) {\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(\n this.#surface.dataModel,\n envelope.responsePath,\n envelope.value,\n ),\n };\n this.#renderSurface();\n }\n break;\n }\n\n case \"callFunction\": {\n if (!this.#surface || this.#surface.surfaceId !== envelope.surfaceId) {\n return;\n }\n\n let value: unknown = null;\n let error: string | undefined;\n\n try {\n // Spec §callFunction: evaluate function requested by agent\n value = globalFunctionRegistry.execute(\n (envelope as any).call.call,\n (envelope as any).call.args ?? {},\n { dataModel: this.#surface.dataModel },\n );\n } catch (e: any) {\n error =\n e.message && e.message.includes(\"INVALID_FUNCTION_CALL\")\n ? e.message\n : `INVALID_FUNCTION_CALL: ${e.message}`;\n }\n\n const response: any = {\n version: \"v1.0\",\n type: \"functionResponse\",\n surfaceId: envelope.surfaceId,\n callId: (envelope as any).callId,\n value,\n ...(error ? { error } : {}),\n };\n\n this.dispatchEvent(\n new CustomEvent(\"shadow-claw-a2ui-function-response\", {\n bubbles: true,\n composed: true,\n detail: { groupId: this.groupId, response },\n }),\n );\n break;\n }\n }\n }\n\n getSurfaceId(): string | null {\n return this.#surface?.surfaceId ?? null;\n }\n\n override async render(): Promise<void> {\n if (this.#surface) {\n this.#renderSurface();\n }\n }\n\n #attachModalOverlay(overlay: HTMLElement): void {\n const surface = this.shadowRoot?.querySelector(\".a2ui__surface\");\n if (surface) {\n surface.appendChild(overlay);\n }\n }\n\n #clearRoot(): void {\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (root) {\n root.replaceChildren();\n }\n }\n\n #dispatchAction(actionId: string, surface: SurfaceState): void {\n // Intercept media playback actions to control local audio/video elements\n if (actionId === \"playTrack\" || actionId === \"play\") {\n const mediaElements = this.shadowRoot?.querySelectorAll(\n \"audio, video\",\n ) as NodeListOf<HTMLMediaElement> | undefined;\n mediaElements?.forEach((media) => media.play().catch(console.error));\n\n return; // Handled locally\n }\n\n if (actionId === \"pauseTrack\" || actionId === \"pause\") {\n const mediaElements = this.shadowRoot?.querySelectorAll(\n \"audio, video\",\n ) as NodeListOf<HTMLMediaElement> | undefined;\n mediaElements?.forEach((media) => media.pause());\n\n return; // Handled locally\n }\n\n // Intercept modal close actions to close open modals locally\n if (actionId === \"closeModal\" || actionId === \"close\") {\n const overlays = this.shadowRoot?.querySelectorAll(\n \".a2ui__modal-overlay\",\n ) as NodeListOf<HTMLElement> | undefined;\n let handled = false;\n overlays?.forEach((overlay) => {\n if (overlay.style.display !== \"none\") {\n overlay.style.display = \"none\";\n const content = overlay.querySelector(\".a2ui__modal-content\");\n if (content) {\n content.replaceChildren();\n }\n\n handled = true;\n }\n });\n if (handled) {\n return; // Handled locally;\n }\n }\n\n // Use this.#surface (current state) not surface param (may be stale)\n // to ensure form data updates are captured\n const currentSurface = this.#surface ?? surface;\n const action: A2UIAction = {\n type: \"a2ui-action\",\n surfaceId: currentSurface.surfaceId,\n actionId,\n dataModel: this.#sendDataModel\n ? { ...currentSurface.dataModel }\n : { ...currentSurface.dataModel },\n };\n\n // Bubble up to shadow-claw-chat\n this.dispatchEvent(\n new CustomEvent(\"shadow-claw-a2ui-action\", {\n bubbles: true,\n composed: true,\n detail: { groupId: this.groupId, action },\n }),\n );\n }\n\n #renderComponent(\n id: string,\n surface: SurfaceState,\n scopeContext?: ScopeContext,\n ): HTMLElement | null {\n const rawSpec = surface.components[id];\n if (!rawSpec) {\n console.warn(`[shadow-claw-a2ui] Unknown component id: \"${id}\"`);\n\n return null;\n }\n\n // Stamp the map key as spec.id — agents typically omit this field.\n const spec = rawSpec.id ? rawSpec : { ...rawSpec, id };\n\n let activeSurface = surface;\n if (scopeContext) {\n activeSurface = {\n ...surface,\n dataModel: buildItemDataScope(\n surface.dataModel,\n scopeContext.itemValue,\n scopeContext.index,\n ),\n };\n }\n\n const renderer = globalComponentRegistry.get(spec.component);\n if (renderer) {\n return renderer(spec, activeSurface, {\n renderComponent: (childId: string, childScope?: ScopeContext) =>\n this.#renderComponent(childId, surface, childScope ?? scopeContext),\n dispatchAction: (actionId: string) =>\n this.#dispatchAction(actionId, activeSurface),\n updateDataModelKey: (s: any, newValue: any) => {\n let ptr = \"\";\n if (typeof s.value === \"object\" && \"path\" in s.value) {\n ptr = s.value.path;\n } else if (typeof s.value === \"object\" && \"$dataModel\" in s.value) {\n ptr = s.value.$dataModel;\n }\n if (ptr) {\n if (scopeContext && ptr.startsWith(\"/@item\")) {\n ptr = `${scopeContext.arrayPath}/${scopeContext.index}${ptr.slice(6)}`;\n }\n this.#updateDataModelPointer(ptr, newValue);\n }\n },\n resolveMediaUrl: (input: string) => this.#resolveMediaUrl(input),\n attachModalOverlay: (overlay: HTMLElement) =>\n this.#attachModalOverlay(overlay),\n updateDataModelPointer: (pointer: string, value: unknown) => {\n if (scopeContext && pointer.startsWith(\"/@item\")) {\n const translated = `${scopeContext.arrayPath}/${scopeContext.index}${pointer.slice(6)}`;\n this.#updateDataModelPointer(translated, value);\n } else {\n this.#updateDataModelPointer(pointer, value);\n }\n },\n });\n }\n\n console.warn(\n `[shadow-claw-a2ui] Unknown component type: \"${(spec as any).component}\"`,\n );\n return null;\n }\n\n /**\n * Resolve a potential workspace filename to a file URL.\n * If input looks like a remote URL (http/https), return as-is.\n * If input looks like a workspace filename, resolve it to `/files/{groupId}/{path}`.\n * This URL will be intercepted by the Service Worker and served from OPFS.\n */\n #resolveMediaUrl(input: string): string {\n if (!input) {\n return \"\";\n }\n\n // Already a URL with protocol\n if (/^https?:\\/\\//.test(input)) {\n return input;\n }\n\n // Already a file:// or data: URL\n if (/^(file|data):/.test(input)) {\n return input;\n }\n\n // Already a workspace route path -- preserve it verbatim.\n if (/^\\/files\\/[a-zA-Z0-9_-]+\\/.*$/.test(input)) {\n return input;\n }\n\n // Workspace filename or relative path\n // groupId is set by shadow-claw-chat and should be in canonical form (with colons)\n // or already in URL-safe form (with dashes for peer IDs)\n if (!this.groupId) {\n console.warn(\n \"[shadow-claw-a2ui] groupId not set, cannot resolve workspace files\",\n );\n\n return \"\";\n }\n\n // Normalize: if groupId contains colons, replace with dashes for URL safety\n // If it already has dashes (peer-XXXX format), use as-is\n const normalizedGroupId = this.groupId.replace(/:/g, \"-\");\n const cleanPath = input.replace(/^\\.\\/?/, \"\");\n const encodedPath = cleanPath\n .split(\"/\")\n .map((segment) => encodeURIComponent(segment))\n .join(\"/\");\n\n const resolvedUrl = `/files/${normalizedGroupId}/${encodedPath}`;\n\n return resolvedUrl;\n }\n\n #updateDataModelPointer(pointer: string, value: unknown): void {\n if (!this.#surface) {\n return;\n }\n\n this.#surface = {\n ...this.#surface,\n dataModel: applyDataModelUpdate(this.#surface.dataModel, pointer, value),\n };\n }\n\n async #renderSurface(): Promise<void> {\n const surface = this.#surface;\n if (!surface) {\n return;\n }\n\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n root.replaceChildren();\n\n const rootEl = this.#renderComponent(surface.rootComponentId, surface);\n if (rootEl) {\n root.appendChild(rootEl);\n }\n\n // Resolve deferred workspace images to blob URLs (videos/audio use Service Worker streaming)\n await this.#resolveWorkspaceImages();\n }\n\n /**\n * Convert a single media element's deferred workspace path to a blob URL.\n */\n async #resolveSingleMediaToBlobUrl(el: Element, db: any): Promise<void> {\n if (\n !(el instanceof HTMLImageElement) &&\n !(el instanceof HTMLVideoElement) &&\n !(el instanceof HTMLAudioElement)\n ) {\n return;\n }\n\n const workspacePath = el.getAttribute(\"data-a2ui-workspace-src\");\n if (!workspacePath) {\n return;\n }\n\n const elementType =\n el instanceof HTMLImageElement\n ? \"image\"\n : el instanceof HTMLVideoElement\n ? \"video\"\n : \"audio\";\n\n try {\n // Parse workspace path to extract groupId and file path\n const match = workspacePath.match(/^\\/files\\/([a-zA-Z0-9_-]+)\\/(.+)$/);\n if (!match) {\n console.warn(\n `[shadow-claw-a2ui] Invalid workspace path: ${workspacePath}`,\n );\n\n return;\n }\n\n const [, groupId, encodedFilePath] = match;\n const filePath = decodeURIComponent(encodedFilePath);\n const canonicalGroupId = groupId.replace(/-/g, \":\");\n\n // Read media bytes from storage\n const bytes = await readGroupFileBytes(db, canonicalGroupId, filePath);\n const blobBytes = new Uint8Array(bytes.byteLength);\n blobBytes.set(bytes);\n\n // Determine MIME type from file extension\n const lowerPath = filePath.toLowerCase();\n let mimeType = \"application/octet-stream\";\n if (lowerPath.endsWith(\".jpg\") || lowerPath.endsWith(\".jpeg\")) {\n mimeType = \"image/jpeg\";\n } else if (lowerPath.endsWith(\".png\")) {\n mimeType = \"image/png\";\n } else if (lowerPath.endsWith(\".gif\")) {\n mimeType = \"image/gif\";\n } else if (lowerPath.endsWith(\".webp\")) {\n mimeType = \"image/webp\";\n } else if (lowerPath.endsWith(\".svg\")) {\n mimeType = \"image/svg+xml\";\n } else if (lowerPath.endsWith(\".mp4\") || lowerPath.endsWith(\".m4v\")) {\n mimeType = \"video/mp4\";\n } else if (lowerPath.endsWith(\".webm\")) {\n mimeType = \"video/webm\";\n } else if (lowerPath.endsWith(\".mkv\")) {\n mimeType = \"video/x-matroska\";\n } else if (lowerPath.endsWith(\".mov\")) {\n mimeType = \"video/mp4\";\n } else if (lowerPath.endsWith(\".mp3\")) {\n mimeType = \"audio/mpeg\";\n } else if (lowerPath.endsWith(\".wav\")) {\n mimeType = \"audio/wav\";\n } else if (lowerPath.endsWith(\".flac\")) {\n mimeType = \"audio/flac\";\n } else if (lowerPath.endsWith(\".aac\")) {\n mimeType = \"audio/aac\";\n } else if (lowerPath.endsWith(\".m4a\")) {\n mimeType = \"audio/mp4\";\n }\n\n // Create blob URL\n const blob = new Blob([blobBytes], { type: mimeType });\n const objectUrl = URL.createObjectURL(blob);\n chatUiStore.registerAttachmentObjectUrl(objectUrl);\n\n // Set the blob URL as the src\n el.removeAttribute(\"data-a2ui-workspace-src\");\n if (el instanceof HTMLImageElement) {\n el.src = objectUrl;\n } else if (\n el instanceof HTMLVideoElement ||\n el instanceof HTMLAudioElement\n ) {\n el.src = objectUrl;\n }\n } catch (e) {\n console.error(\n `[shadow-claw-a2ui] Failed to load workspace ${elementType}: ${workspacePath}`,\n e,\n );\n }\n }\n\n /**\n * Resolve a video's poster URL to a blob URL.\n */\n async #resolveVideoPosterToBlobUrl(\n video: HTMLVideoElement,\n db: any,\n ): Promise<void> {\n const posterPath = video.getAttribute(\"data-a2ui-workspace-poster\");\n if (!posterPath) {\n return;\n }\n\n try {\n // Parse workspace path to extract groupId and file path\n const match = posterPath.match(/^\\/files\\/([a-zA-Z0-9_-]+)\\/(.+)$/);\n if (!match) {\n return;\n }\n\n const [, groupId, filePath] = match;\n const canonicalGroupId = groupId.replace(/-/g, \":\");\n\n // Read poster bytes from storage\n const bytes = await readGroupFileBytes(db, canonicalGroupId, filePath);\n const blobBytes = new Uint8Array(bytes.byteLength);\n blobBytes.set(bytes);\n\n // Determine MIME type\n const lowerPath = filePath.toLowerCase();\n let mimeType = \"image/jpeg\";\n if (lowerPath.endsWith(\".png\")) {\n mimeType = \"image/png\";\n } else if (lowerPath.endsWith(\".gif\")) {\n mimeType = \"image/gif\";\n } else if (lowerPath.endsWith(\".webp\")) {\n mimeType = \"image/webp\";\n }\n\n // Create blob URL\n const blob = new Blob([blobBytes], { type: mimeType });\n const objectUrl = URL.createObjectURL(blob);\n chatUiStore.registerAttachmentObjectUrl(objectUrl);\n\n video.removeAttribute(\"data-a2ui-workspace-poster\");\n video.poster = objectUrl;\n } catch (e) {\n console.warn(\n `[shadow-claw-a2ui] Failed to load workspace poster: ${posterPath}`,\n e,\n );\n }\n }\n\n /**\n * Resolve deferred workspace images, videos, and audio to blob URLs loaded from storage.\n * Runs asynchronously after rendering to avoid blocking the UI.\n * Uses Promise.all to parallelize all media loading.\n */\n async #resolveWorkspaceImages(): Promise<void> {\n const root = this.shadowRoot?.querySelector(\".a2ui__root\");\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n // Collect all deferred media elements\n const mediaElements = [\n ...Array.from(root.querySelectorAll(\"img[data-a2ui-workspace-src]\")),\n ...Array.from(root.querySelectorAll(\"video[data-a2ui-workspace-src]\")),\n ...Array.from(root.querySelectorAll(\"audio[data-a2ui-workspace-src]\")),\n ];\n\n // Also resolve poster URLs for videos\n const videosWithPoster = Array.from(\n root.querySelectorAll(\"video[data-a2ui-workspace-poster]\"),\n );\n\n if (mediaElements.length === 0 && videosWithPoster.length === 0) {\n return;\n }\n\n const db = await getDb();\n\n // Parallelize all media blob URL conversions using Promise.all\n await Promise.all(\n mediaElements.map((el) => this.#resolveSingleMediaToBlobUrl(el, db)),\n );\n\n await Promise.all(\n videosWithPoster.map((el) =>\n this.#resolveVideoPosterToBlobUrl(el as HTMLVideoElement, db),\n ),\n );\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawA2UI);\n}\n\n// Register basic catalog components\nglobalComponentRegistry.register(\"Text\", (spec, surface) =>\n renderText(spec, surface),\n);\nglobalComponentRegistry.register(\"Row\", (spec, surface, ctx) =>\n renderRow(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Column\", (spec, surface, ctx) =>\n renderColumn(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Button\", (spec, surface, ctx) =>\n renderButton(spec, surface, {\n renderComponent: ctx.renderComponent,\n dispatchAction: ctx.dispatchAction,\n }),\n);\nglobalComponentRegistry.register(\"TextField\", (spec, surface, ctx) =>\n renderTextField(spec, surface, {\n updateDataModelKey: ctx.updateDataModelKey,\n }),\n);\nglobalComponentRegistry.register(\"Image\", (spec, surface, ctx) =>\n renderImage(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"Icon\", (spec, surface) =>\n renderIcon(spec, surface),\n);\nglobalComponentRegistry.register(\"Video\", (spec, surface, ctx) =>\n renderVideo(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"AudioPlayer\", (spec, surface, ctx) =>\n renderAudioPlayer(spec, surface, { resolveMediaUrl: ctx.resolveMediaUrl }),\n);\nglobalComponentRegistry.register(\"List\", (spec, surface, ctx) =>\n renderList(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Card\", (spec, surface, ctx) =>\n renderCard(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Tabs\", (spec, surface, ctx) =>\n renderTabs(spec, surface, { renderComponent: ctx.renderComponent }),\n);\nglobalComponentRegistry.register(\"Modal\", (spec, surface, ctx) =>\n renderModal(spec, surface, {\n renderComponent: ctx.renderComponent,\n attachModalOverlay: ctx.attachModalOverlay,\n }),\n);\nglobalComponentRegistry.register(\"Divider\", (spec, surface) =>\n renderDivider(spec, surface),\n);\nglobalComponentRegistry.register(\"CheckBox\", (spec, surface, ctx) =>\n renderCheckBox(spec, surface, {\n dispatchAction: ctx.dispatchAction,\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"ChoicePicker\", (spec, surface, ctx) =>\n renderChoicePicker(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"Slider\", (spec, surface, ctx) =>\n renderSlider(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\nglobalComponentRegistry.register(\"DateTimeInput\", (spec, surface, ctx) =>\n renderDateTimeInput(spec, surface, {\n updateDataModelPointer: ctx.updateDataModelPointer,\n }),\n);\n\n// Register basic functions\nregisterBasicFunctions();\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
|
2
2
|
import { n as getDb } from "./txPromise-CuGh-TGK.js";
|
|
3
3
|
import { b as OAUTH_PROVIDER_DEFINITIONS, r as CONFIG_KEYS } from "./config--CFrw3J3.js";
|
|
4
4
|
import { t as getConfig } from "./getConfig-BxxXMyuM.js";
|
|
5
|
-
import { c as escapeHtml, n as setSanitizedHtml } from "./trusted-types-
|
|
5
|
+
import { c as escapeHtml, n as setSanitizedHtml } from "./trusted-types-Dx0RZlrd.js";
|
|
6
6
|
import { a as showSuccess, r as showError } from "./toast-DZ6r7_YI.js";
|
|
7
7
|
import "./shadow-claw-empty-state-DPfDqaMA.js";
|
|
8
8
|
import "./shadow-claw-actions-G99P9oxr.js";
|
|
@@ -739,4 +739,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
739
739
|
|
|
740
740
|
//#endregion
|
|
741
741
|
export { ShadowClawAccounts as t };
|
|
742
|
-
//# sourceMappingURL=shadow-claw-accounts-
|
|
742
|
+
//# sourceMappingURL=shadow-claw-accounts-03oJ__XC.js.map
|