@desktalk/core 0.1.0-alpha.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/LICENSE +21 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +82 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/frontend/assets/frontend-B3QNYf3p.js +413 -0
- package/dist/frontend/assets/frontend-B3QNYf3p.js.map +1 -0
- package/dist/frontend/assets/frontend-B4aeXn9d.js +416 -0
- package/dist/frontend/assets/frontend-B4aeXn9d.js.map +1 -0
- package/dist/frontend/assets/frontend-BwyRSlHp.js +6513 -0
- package/dist/frontend/assets/frontend-BwyRSlHp.js.map +1 -0
- package/dist/frontend/assets/frontend-Dix2OWTT.js +229 -0
- package/dist/frontend/assets/frontend-Dix2OWTT.js.map +1 -0
- package/dist/frontend/assets/frontend-Dx41dEM9.js +407 -0
- package/dist/frontend/assets/frontend-Dx41dEM9.js.map +1 -0
- package/dist/frontend/assets/frontend-WpQng8Mt.js +1991 -0
- package/dist/frontend/assets/frontend-WpQng8Mt.js.map +1 -0
- package/dist/frontend/assets/frontend-rTwBdJbn.js +2123 -0
- package/dist/frontend/assets/frontend-rTwBdJbn.js.map +1 -0
- package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js +2 -0
- package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js.map +1 -0
- package/dist/frontend/assets/index-C5-XUOS7.js +1863 -0
- package/dist/frontend/assets/index-C5-XUOS7.js.map +1 -0
- package/dist/frontend/assets/index-C_e3_6yE.css +1 -0
- package/dist/frontend/index.html +22 -0
- package/dist/frontend/pcm-capture-processor.js +65 -0
- package/dist/i18n/manifest.json +34 -0
- package/dist/i18n/zh-CN.json +7 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server/admin-routes.d.ts +14 -0
- package/dist/server/admin-routes.d.ts.map +1 -0
- package/dist/server/admin-routes.js +118 -0
- package/dist/server/admin-routes.js.map +1 -0
- package/dist/server/api-routes.d.ts +8 -0
- package/dist/server/api-routes.d.ts.map +1 -0
- package/dist/server/api-routes.js +203 -0
- package/dist/server/api-routes.js.map +1 -0
- package/dist/server/auth-routes.d.ts +19 -0
- package/dist/server/auth-routes.d.ts.map +1 -0
- package/dist/server/auth-routes.js +155 -0
- package/dist/server/auth-routes.js.map +1 -0
- package/dist/server/dtfs-routes.d.ts +3 -0
- package/dist/server/dtfs-routes.d.ts.map +1 -0
- package/dist/server/dtfs-routes.js +183 -0
- package/dist/server/dtfs-routes.js.map +1 -0
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +158 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/monaco-routes.d.ts +3 -0
- package/dist/server/monaco-routes.d.ts.map +1 -0
- package/dist/server/monaco-routes.js +45 -0
- package/dist/server/monaco-routes.js.map +1 -0
- package/dist/server/voice-routes.d.ts +7 -0
- package/dist/server/voice-routes.d.ts.map +1 -0
- package/dist/server/voice-routes.js +142 -0
- package/dist/server/voice-routes.js.map +1 -0
- package/dist/server/ws-routes.d.ts +29 -0
- package/dist/server/ws-routes.d.ts.map +1 -0
- package/dist/server/ws-routes.js +334 -0
- package/dist/server/ws-routes.js.map +1 -0
- package/dist/services/ai/action-tool.d.ts +9 -0
- package/dist/services/ai/action-tool.d.ts.map +1 -0
- package/dist/services/ai/action-tool.js +51 -0
- package/dist/services/ai/action-tool.js.map +1 -0
- package/dist/services/ai/app-tools.d.ts +15 -0
- package/dist/services/ai/app-tools.d.ts.map +1 -0
- package/dist/services/ai/app-tools.js +119 -0
- package/dist/services/ai/app-tools.js.map +1 -0
- package/dist/services/ai/chat-service.d.ts +27 -0
- package/dist/services/ai/chat-service.d.ts.map +1 -0
- package/dist/services/ai/chat-service.js +213 -0
- package/dist/services/ai/chat-service.js.map +1 -0
- package/dist/services/ai/create-liveapp-tool.d.ts +15 -0
- package/dist/services/ai/create-liveapp-tool.d.ts.map +1 -0
- package/dist/services/ai/create-liveapp-tool.js +142 -0
- package/dist/services/ai/create-liveapp-tool.js.map +1 -0
- package/dist/services/ai/desktop-tool.d.ts +27 -0
- package/dist/services/ai/desktop-tool.d.ts.map +1 -0
- package/dist/services/ai/desktop-tool.js +106 -0
- package/dist/services/ai/desktop-tool.js.map +1 -0
- package/dist/services/ai/edit-history.d.ts +16 -0
- package/dist/services/ai/edit-history.d.ts.map +1 -0
- package/dist/services/ai/edit-history.js +137 -0
- package/dist/services/ai/edit-history.js.map +1 -0
- package/dist/services/ai/edit-tool.d.ts +9 -0
- package/dist/services/ai/edit-tool.d.ts.map +1 -0
- package/dist/services/ai/edit-tool.js +113 -0
- package/dist/services/ai/edit-tool.js.map +1 -0
- package/dist/services/ai/generate-html-tool.d.ts +15 -0
- package/dist/services/ai/generate-html-tool.d.ts.map +1 -0
- package/dist/services/ai/generate-html-tool.js +140 -0
- package/dist/services/ai/generate-html-tool.js.map +1 -0
- package/dist/services/ai/generate-icon-tool.d.ts +10 -0
- package/dist/services/ai/generate-icon-tool.d.ts.map +1 -0
- package/dist/services/ai/generate-icon-tool.js +58 -0
- package/dist/services/ai/generate-icon-tool.js.map +1 -0
- package/dist/services/ai/html-bridge-script.d.ts +2 -0
- package/dist/services/ai/html-bridge-script.d.ts.map +1 -0
- package/dist/services/ai/html-bridge-script.js +2 -0
- package/dist/services/ai/html-bridge-script.js.map +1 -0
- package/dist/services/ai/html-guidelines-tool.d.ts +3 -0
- package/dist/services/ai/html-guidelines-tool.d.ts.map +1 -0
- package/dist/services/ai/html-guidelines-tool.js +157 -0
- package/dist/services/ai/html-guidelines-tool.js.map +1 -0
- package/dist/services/ai/html-stream-coordinator.d.ts +92 -0
- package/dist/services/ai/html-stream-coordinator.d.ts.map +1 -0
- package/dist/services/ai/html-stream-coordinator.js +314 -0
- package/dist/services/ai/html-stream-coordinator.js.map +1 -0
- package/dist/services/ai/html-theme-link.d.ts +9 -0
- package/dist/services/ai/html-theme-link.d.ts.map +1 -0
- package/dist/services/ai/html-theme-link.js +12 -0
- package/dist/services/ai/html-theme-link.js.map +1 -0
- package/dist/services/ai/html-ui-script.d.ts +9 -0
- package/dist/services/ai/html-ui-script.d.ts.map +1 -0
- package/dist/services/ai/html-ui-script.js +9 -0
- package/dist/services/ai/html-ui-script.js.map +1 -0
- package/dist/services/ai/image-generation-service.d.ts +26 -0
- package/dist/services/ai/image-generation-service.d.ts.map +1 -0
- package/dist/services/ai/image-generation-service.js +205 -0
- package/dist/services/ai/image-generation-service.js.map +1 -0
- package/dist/services/ai/manual-pages/desktop-actions.md +36 -0
- package/dist/services/ai/manual-pages/desktop-windows.md +24 -0
- package/dist/services/ai/manual-pages/dt-badge.md +36 -0
- package/dist/services/ai/manual-pages/dt-button.md +38 -0
- package/dist/services/ai/manual-pages/dt-card.md +22 -0
- package/dist/services/ai/manual-pages/dt-chart.md +261 -0
- package/dist/services/ai/manual-pages/dt-divider.md +25 -0
- package/dist/services/ai/manual-pages/dt-grid.md +29 -0
- package/dist/services/ai/manual-pages/dt-list-view.md +96 -0
- package/dist/services/ai/manual-pages/dt-markdown-editor.md +90 -0
- package/dist/services/ai/manual-pages/dt-markdown.md +86 -0
- package/dist/services/ai/manual-pages/dt-select.md +21 -0
- package/dist/services/ai/manual-pages/dt-stack.md +31 -0
- package/dist/services/ai/manual-pages/dt-stat.md +43 -0
- package/dist/services/ai/manual-pages/dt-table-view.md +120 -0
- package/dist/services/ai/manual-pages/dt-tooltip.md +18 -0
- package/dist/services/ai/manual-pages/editing-preview.md +25 -0
- package/dist/services/ai/manual-pages/html-actions.md +74 -0
- package/dist/services/ai/manual-pages/html-bridge.md +187 -0
- package/dist/services/ai/manual-pages/html-components.md +66 -0
- package/dist/services/ai/manual-pages/html-examples.md +185 -0
- package/dist/services/ai/manual-pages/html-layouts.md +128 -0
- package/dist/services/ai/manual-pages/html-storage.md +153 -0
- package/dist/services/ai/manual-pages/html-tokens.md +26 -0
- package/dist/services/ai/manual-pages/index.d.ts +10 -0
- package/dist/services/ai/manual-pages/index.d.ts.map +1 -0
- package/dist/services/ai/manual-pages/index.js +186 -0
- package/dist/services/ai/manual-pages/index.js.map +1 -0
- package/dist/services/ai/manual-tool.d.ts +3 -0
- package/dist/services/ai/manual-tool.d.ts.map +1 -0
- package/dist/services/ai/manual-tool.js +104 -0
- package/dist/services/ai/manual-tool.js.map +1 -0
- package/dist/services/ai/pi-session-service.d.ts +101 -0
- package/dist/services/ai/pi-session-service.d.ts.map +1 -0
- package/dist/services/ai/pi-session-service.js +697 -0
- package/dist/services/ai/pi-session-service.js.map +1 -0
- package/dist/services/ai/providers.d.ts +21 -0
- package/dist/services/ai/providers.d.ts.map +1 -0
- package/dist/services/ai/providers.js +93 -0
- package/dist/services/ai/providers.js.map +1 -0
- package/dist/services/ai/redo-edit-tool.d.ts +9 -0
- package/dist/services/ai/redo-edit-tool.d.ts.map +1 -0
- package/dist/services/ai/redo-edit-tool.js +44 -0
- package/dist/services/ai/redo-edit-tool.js.map +1 -0
- package/dist/services/ai/system-prompt.d.ts +7 -0
- package/dist/services/ai/system-prompt.d.ts.map +1 -0
- package/dist/services/ai/system-prompt.js +72 -0
- package/dist/services/ai/system-prompt.js.map +1 -0
- package/dist/services/ai/undo-edit-tool.d.ts +9 -0
- package/dist/services/ai/undo-edit-tool.d.ts.map +1 -0
- package/dist/services/ai/undo-edit-tool.js +44 -0
- package/dist/services/ai/undo-edit-tool.js.map +1 -0
- package/dist/services/ai/window-tools.d.ts +27 -0
- package/dist/services/ai/window-tools.d.ts.map +1 -0
- package/dist/services/ai/window-tools.js +155 -0
- package/dist/services/ai/window-tools.js.map +1 -0
- package/dist/services/backend-host.d.ts +10 -0
- package/dist/services/backend-host.d.ts.map +1 -0
- package/dist/services/backend-host.js +117 -0
- package/dist/services/backend-host.js.map +1 -0
- package/dist/services/backend-ipc.d.ts +60 -0
- package/dist/services/backend-ipc.d.ts.map +1 -0
- package/dist/services/backend-ipc.js +2 -0
- package/dist/services/backend-ipc.js.map +1 -0
- package/dist/services/backend-process-manager.d.ts +60 -0
- package/dist/services/backend-process-manager.d.ts.map +1 -0
- package/dist/services/backend-process-manager.js +203 -0
- package/dist/services/backend-process-manager.js.map +1 -0
- package/dist/services/filesystem.d.ts +8 -0
- package/dist/services/filesystem.d.ts.map +1 -0
- package/dist/services/filesystem.js +94 -0
- package/dist/services/filesystem.js.map +1 -0
- package/dist/services/i18n.d.ts +28 -0
- package/dist/services/i18n.d.ts.map +1 -0
- package/dist/services/i18n.js +76 -0
- package/dist/services/i18n.js.map +1 -0
- package/dist/services/liveapp-icon.d.ts +9 -0
- package/dist/services/liveapp-icon.d.ts.map +1 -0
- package/dist/services/liveapp-icon.js +28 -0
- package/dist/services/liveapp-icon.js.map +1 -0
- package/dist/services/liveapps.d.ts +12 -0
- package/dist/services/liveapps.d.ts.map +1 -0
- package/dist/services/liveapps.js +84 -0
- package/dist/services/liveapps.js.map +1 -0
- package/dist/services/logger.d.ts +34 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +74 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/messaging.d.ts +14 -0
- package/dist/services/messaging.d.ts.map +1 -0
- package/dist/services/messaging.js +41 -0
- package/dist/services/messaging.js.map +1 -0
- package/dist/services/miniapp-icon.d.ts +9 -0
- package/dist/services/miniapp-icon.d.ts.map +1 -0
- package/dist/services/miniapp-icon.js +25 -0
- package/dist/services/miniapp-icon.js.map +1 -0
- package/dist/services/miniapp-registry.d.ts +73 -0
- package/dist/services/miniapp-registry.d.ts.map +1 -0
- package/dist/services/miniapp-registry.js +144 -0
- package/dist/services/miniapp-registry.js.map +1 -0
- package/dist/services/onboarding-config.d.ts +37 -0
- package/dist/services/onboarding-config.d.ts.map +1 -0
- package/dist/services/onboarding-config.js +76 -0
- package/dist/services/onboarding-config.js.map +1 -0
- package/dist/services/preferences.d.ts +10 -0
- package/dist/services/preferences.d.ts.map +1 -0
- package/dist/services/preferences.js +48 -0
- package/dist/services/preferences.js.map +1 -0
- package/dist/services/proxy-dispatcher.d.ts +18 -0
- package/dist/services/proxy-dispatcher.d.ts.map +1 -0
- package/dist/services/proxy-dispatcher.js +33 -0
- package/dist/services/proxy-dispatcher.js.map +1 -0
- package/dist/services/storage.d.ts +7 -0
- package/dist/services/storage.d.ts.map +1 -0
- package/dist/services/storage.js +55 -0
- package/dist/services/storage.js.map +1 -0
- package/dist/services/theme-css.d.ts +21 -0
- package/dist/services/theme-css.d.ts.map +1 -0
- package/dist/services/theme-css.js +213 -0
- package/dist/services/theme-css.js.map +1 -0
- package/dist/services/user-db.d.ts +69 -0
- package/dist/services/user-db.d.ts.map +1 -0
- package/dist/services/user-db.js +175 -0
- package/dist/services/user-db.js.map +1 -0
- package/dist/services/voice/audio-format.d.ts +5 -0
- package/dist/services/voice/audio-format.d.ts.map +1 -0
- package/dist/services/voice/audio-format.js +27 -0
- package/dist/services/voice/audio-format.js.map +1 -0
- package/dist/services/voice/azure-openai-whisper-adapter.d.ts +23 -0
- package/dist/services/voice/azure-openai-whisper-adapter.d.ts.map +1 -0
- package/dist/services/voice/azure-openai-whisper-adapter.js +60 -0
- package/dist/services/voice/azure-openai-whisper-adapter.js.map +1 -0
- package/dist/services/voice/openai-whisper-adapter.d.ts +22 -0
- package/dist/services/voice/openai-whisper-adapter.d.ts.map +1 -0
- package/dist/services/voice/openai-whisper-adapter.js +61 -0
- package/dist/services/voice/openai-whisper-adapter.js.map +1 -0
- package/dist/services/voice/stt-adapter.d.ts +31 -0
- package/dist/services/voice/stt-adapter.d.ts.map +1 -0
- package/dist/services/voice/stt-adapter.js +8 -0
- package/dist/services/voice/stt-adapter.js.map +1 -0
- package/dist/services/voice/vad-segmenter.d.ts +68 -0
- package/dist/services/voice/vad-segmenter.d.ts.map +1 -0
- package/dist/services/voice/vad-segmenter.js +159 -0
- package/dist/services/voice/vad-segmenter.js.map +1 -0
- package/dist/services/voice/voice-session.d.ts +54 -0
- package/dist/services/voice/voice-session.d.ts.map +1 -0
- package/dist/services/voice/voice-session.js +137 -0
- package/dist/services/voice/voice-session.js.map +1 -0
- package/dist/services/window-manager.d.ts +94 -0
- package/dist/services/window-manager.d.ts.map +1 -0
- package/dist/services/window-manager.js +282 -0
- package/dist/services/window-manager.js.map +1 -0
- package/dist/services/workspace.d.ts +51 -0
- package/dist/services/workspace.d.ts.map +1 -0
- package/dist/services/workspace.js +144 -0
- package/dist/services/workspace.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontend-Dx41dEM9.js","sources":["../../../../sdk/dist/utils/html-bridge-script.js","../../../../miniapp-preview/dist/frontend.js"],"sourcesContent":["function serializeForInlineScript(value) {\n return JSON.stringify(value).replace(/</g, '\\\\u003c');\n}\nexport function createHtmlBridgeScript(streamId, bridgeToken) {\n const serializedStreamId = serializeForInlineScript(streamId);\n const serializedBridgeToken = serializeForInlineScript(bridgeToken);\n return [\n '<script data-dt-bridge>',\n '(() => {',\n ` const streamId = ${serializedStreamId};`,\n ` const token = ${serializedBridgeToken};`,\n ' let requestCounter = 0;',\n ' const pending = new Map();',\n ' const actionHandlers = new Map();',\n ' const REQUEST_TIMEOUT_MS = 30000;',\n '',\n ' function createError(message) {',\n ' return message instanceof Error ? message : new Error(String(message));',\n ' }',\n '',\n ' function normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts) {',\n ' if (typeof programOrShell === \"string\" && /\\\\s/.test(programOrShell)',\n ' && (argsOrOpts === undefined || argsOrOpts === null',\n ' || (typeof argsOrOpts === \"object\" && !Array.isArray(argsOrOpts)))) {',\n ' return {',\n ' program: \"sh\",',\n ' args: [\"-c\", programOrShell],',\n ' options: (typeof argsOrOpts === \"object\" && argsOrOpts !== null) ? argsOrOpts : {},',\n ' };',\n ' }',\n ' return {',\n ' program: programOrShell,',\n ' args: Array.isArray(argsOrOpts) ? argsOrOpts : [],',\n ' options: (Array.isArray(argsOrOpts) ? maybeOpts : argsOrOpts) || {},',\n ' };',\n ' }',\n '',\n ' function request(kind, payload) {',\n ' return new Promise((resolve, reject) => {',\n ' const requestId = `dt-bridge-${Date.now()}-${++requestCounter}`;',\n ' const timeout = window.setTimeout(() => {',\n ' pending.delete(requestId);',\n \" reject(new Error('DeskTalk bridge request timed out.'));\",\n ' }, REQUEST_TIMEOUT_MS);',\n '',\n ' pending.set(requestId, { resolve, reject, timeout });',\n ' window.parent.postMessage({',\n \" type: 'desktalk:bridge-request',\",\n ' streamId,',\n ' token,',\n ' requestId,',\n ' kind,',\n ' payload,',\n \" }, '*');\",\n ' });',\n ' }',\n '',\n ' function createCollectionStorage(name) {',\n ' return Object.freeze({',\n ' insert(params) {',\n \" return request('storage', { action: 'collection.insert', collection: name, params }).then(() => undefined);\",\n ' },',\n ' update(id, params) {',\n \" return request('storage', { action: 'collection.update', collection: name, id, params }).then(() => undefined);\",\n ' },',\n ' delete(id) {',\n \" return request('storage', { action: 'collection.delete', collection: name, id }).then(() => undefined);\",\n ' },',\n ' findById(id) {',\n \" return request('storage', { action: 'collection.findById', collection: name, id }).then((result) => result.record);\",\n ' },',\n ' find(filter, options) {',\n \" return request('storage', { action: 'collection.find', collection: name, filter, options }).then((result) => result.records);\",\n ' },',\n ' findAll() {',\n \" return request('storage', { action: 'collection.findAll', collection: name }).then((result) => result.records);\",\n ' },',\n ' count(filter) {',\n \" return request('storage', { action: 'collection.count', collection: name, filter }).then((result) => result.count);\",\n ' },',\n ' compact() {',\n \" return request('storage', { action: 'collection.compact', collection: name }).then(() => undefined);\",\n ' },',\n ' });',\n ' }',\n '',\n ' const actions = Object.freeze({',\n ' register(definition) {',\n ' if (!definition || typeof definition !== \"object\") {',\n ' throw new Error(\"DeskTalk.actions.register requires an action definition object.\");',\n ' }',\n ' const name = typeof definition.name === \"string\" ? definition.name.trim() : \"\";',\n ' if (!name) {',\n ' throw new Error(\"DeskTalk.actions.register requires a non-empty action name.\");',\n ' }',\n ' if (typeof definition.handler !== \"function\") {',\n ' throw new Error(`DeskTalk.actions.register(\\\"${name}\\\") requires a handler function.`);',\n ' }',\n ' actionHandlers.set(name, definition.handler);',\n ' return request(\"actions\", {',\n ' action: \"register\",',\n ' name,',\n ' description: typeof definition.description === \"string\" ? definition.description : \"\",',\n ' params: definition.params && typeof definition.params === \"object\" ? definition.params : undefined,',\n ' }).then(() => undefined);',\n ' },',\n ' unregister(name) {',\n ' const normalizedName = typeof name === \"string\" ? name.trim() : \"\";',\n ' if (!normalizedName) {',\n ' throw new Error(\"DeskTalk.actions.unregister requires a non-empty action name.\");',\n ' }',\n ' actionHandlers.delete(normalizedName);',\n ' return request(\"actions\", { action: \"unregister\", name: normalizedName }).then(() => undefined);',\n ' },',\n ' clear() {',\n ' actionHandlers.clear();',\n ' return request(\"actions\", { action: \"clear\" }).then(() => undefined);',\n ' },',\n ' });',\n '',\n ' const storage = Object.freeze({',\n ' get(name) {',\n \" return request('storage', { action: 'kv.get', name }).then((result) => result.value);\",\n ' },',\n ' set(name, value) {',\n \" return request('storage', { action: 'kv.set', name, value }).then(() => undefined);\",\n ' },',\n ' delete(name) {',\n \" return request('storage', { action: 'kv.delete', name }).then((result) => result.deleted);\",\n ' },',\n ' list() {',\n \" return request('storage', { action: 'kv.list' }).then((result) => result.names);\",\n ' },',\n ' collection(name) {',\n ' return createCollectionStorage(name);',\n ' },',\n ' });',\n '',\n \" window.addEventListener('message', (event) => {\",\n ' const message = event.data;',\n ' if (!message || message.streamId !== streamId || message.token !== token) return;',\n \" if (message.type === 'desktalk:bridge-response') {\",\n ' const pendingRequest = pending.get(message.requestId);',\n ' if (!pendingRequest) return;',\n ' pending.delete(message.requestId);',\n ' window.clearTimeout(pendingRequest.timeout);',\n ' if (message.ok) {',\n ' pendingRequest.resolve(message.result);',\n ' return;',\n ' }',\n ' pendingRequest.reject(createError(message.error || \"DeskTalk bridge request failed.\"));',\n ' return;',\n ' }',\n \" if (message.type !== 'desktalk:invoke-action') return;\",\n ' const handler = actionHandlers.get(message.actionName);',\n ' if (!handler) {',\n ' window.parent.postMessage({',\n \" type: 'desktalk:invoke-action-result',\",\n ' streamId,',\n ' token,',\n ' requestId: message.requestId,',\n ' ok: false,',\n ' error: `Action \\\"${String(message.actionName || \"\")}\\\" is not registered.`,',\n \" }, '*');\",\n ' return;',\n ' }',\n ' Promise.resolve()',\n ' .then(() => handler(message.params || {}))',\n ' .then((result) => {',\n ' window.parent.postMessage({',\n \" type: 'desktalk:invoke-action-result',\",\n ' streamId,',\n ' token,',\n ' requestId: message.requestId,',\n ' ok: true,',\n ' result,',\n \" }, '*');\",\n ' })',\n ' .catch((error) => {',\n ' window.parent.postMessage({',\n \" type: 'desktalk:invoke-action-result',\",\n ' streamId,',\n ' token,',\n ' requestId: message.requestId,',\n ' ok: false,',\n ' error: error instanceof Error ? error.message : String(error),',\n \" }, '*');\",\n ' });',\n ' });',\n '',\n ' window.DeskTalk = Object.freeze({',\n ' getState(selector) {',\n \" return request('getState', { selector });\",\n ' },',\n ' request(url, options) {',\n \" return request('request', { url, options: options || {} });\",\n ' },',\n ' exec(programOrShell, argsOrOpts, maybeOpts) {',\n ' const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);',\n \" return request('exec', { program: n.program, args: n.args, options: n.options });\",\n ' },',\n ' execute(programOrShell, argsOrOpts, maybeOpts) {',\n ' const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);',\n \" return request('exec', { program: n.program, args: n.args, options: n.options });\",\n ' },',\n ' actions,',\n ' storage,',\n ' });',\n '})();',\n '</script>',\n ].join('\\n');\n}\n//# sourceMappingURL=html-bridge-script.js.map","(() => {\n if (typeof document === 'undefined') return;\n const styleId = \"desktalk-style-desktalk-miniapp-preview-1p9nnor\";\n if (document.getElementById(styleId)) return;\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = \"/* src/components/PreviewToolbar.module.css */\\n.PreviewToolbar_toolbar {\\n display: flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: 12px;\\n padding: 8px 12px;\\n border-bottom: 1px solid var(--dt-border);\\n min-width: 0;\\n}\\n.PreviewToolbar_toolbarGroup {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n}\\n.PreviewToolbar_toolBtn {\\n display: flex;\\n width: 28px;\\n height: 28px;\\n flex-shrink: 0;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 1px solid var(--dt-border);\\n border-radius: 6px;\\n background: var(--dt-surface);\\n color: var(--dt-text);\\n cursor: pointer;\\n font-size: 14px;\\n line-height: 1;\\n transition:\\n background 0.15s,\\n border-color 0.15s,\\n color 0.15s;\\n}\\n.PreviewToolbar_toolBtn:hover:not(:disabled) {\\n border-color: var(--dt-accent);\\n background: var(--dt-surface-hover);\\n color: var(--dt-accent);\\n}\\n.PreviewToolbar_toolBtn:disabled {\\n cursor: default;\\n opacity: 0.35;\\n}\\n.PreviewToolbar_filename {\\n flex: 1;\\n overflow: hidden;\\n font-size: 13px;\\n font-weight: 500;\\n text-align: center;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.PreviewToolbar_zoomIndicator {\\n min-width: 44px;\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n font-variant-numeric: tabular-nums;\\n text-align: center;\\n}\\n.PreviewToolbar_browserNavGroup {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n flex-shrink: 0;\\n}\\n.PreviewToolbar_browserNavBtn {\\n display: flex;\\n width: 28px;\\n height: 28px;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 1px solid var(--dt-border);\\n border-radius: 6px;\\n background: var(--dt-surface);\\n color: var(--dt-text-secondary);\\n cursor: pointer;\\n transition:\\n background 0.15s,\\n border-color 0.15s,\\n color 0.15s;\\n}\\n.PreviewToolbar_browserNavBtn:hover:not(:disabled) {\\n border-color: var(--dt-accent);\\n background: var(--dt-surface-hover);\\n color: var(--dt-accent);\\n}\\n.PreviewToolbar_browserNavBtn:disabled {\\n cursor: default;\\n opacity: 0.3;\\n}\\n.PreviewToolbar_browserActionSpacer {\\n width: 28px;\\n height: 28px;\\n}\\n.PreviewToolbar_addressBar {\\n display: flex;\\n flex: 1;\\n align-items: center;\\n gap: 8px;\\n padding: 6px 12px;\\n border: 1px solid var(--dt-border);\\n border-radius: 20px;\\n background: var(--dt-bg-subtle);\\n min-width: 0;\\n overflow: hidden;\\n}\\n.PreviewToolbar_lockIcon {\\n flex-shrink: 0;\\n color: var(--dt-text-muted);\\n}\\n.PreviewToolbar_addressText {\\n flex: 1;\\n overflow: hidden;\\n color: var(--dt-text);\\n font-size: 13px;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.PreviewToolbar_streamingIndicator {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n width: 100%;\\n justify-content: center;\\n color: var(--dt-text-secondary);\\n font-size: 13px;\\n font-weight: 500;\\n}\\n.PreviewToolbar_streamingDot {\\n width: 8px;\\n height: 8px;\\n border-radius: 50%;\\n background: #22c55e;\\n animation: PreviewToolbar_pulse 1.5s ease-in-out infinite;\\n}\\n@keyframes PreviewToolbar_pulse {\\n 0%, 100% {\\n opacity: 1;\\n }\\n 50% {\\n opacity: 0.4;\\n }\\n}\\n\\n/* src/components/ImageViewport.module.css */\\n.ImageViewport_viewport {\\n display: flex;\\n flex: 1;\\n width: 100%;\\n height: 100%;\\n min-height: 0;\\n align-items: center;\\n justify-content: center;\\n overflow: hidden;\\n outline: none;\\n}\\n.ImageViewport_image {\\n max-width: none;\\n max-height: none;\\n transform-origin: center center;\\n -webkit-user-select: none;\\n user-select: none;\\n pointer-events: none;\\n}\\n\\n/* src/components/HtmlViewport.module.css */\\n.HtmlViewport_viewportContainer {\\n position: relative;\\n display: flex;\\n width: 100%;\\n height: 100%;\\n flex: 1;\\n min-height: 0;\\n}\\n.HtmlViewport_htmlViewport {\\n display: block;\\n width: 100%;\\n height: 100%;\\n flex: 1;\\n min-height: 0;\\n border: none;\\n}\\n.HtmlViewport_shimmerOverlay {\\n position: absolute;\\n inset: 0;\\n z-index: 1;\\n pointer-events: none;\\n background:\\n linear-gradient(\\n 110deg,\\n transparent 0%,\\n color-mix(in srgb, var(--dt-accent) 10%, transparent) 40%,\\n color-mix(in srgb, white 14%, transparent) 50%,\\n color-mix(in srgb, var(--dt-accent) 10%, transparent) 60%,\\n transparent 100%);\\n background-size: 220% 100%;\\n animation: HtmlViewport_viewportShimmer 1.8s ease-in-out infinite;\\n}\\n@keyframes HtmlViewport_viewportShimmer {\\n 0% {\\n background-position: 200% 0;\\n }\\n 100% {\\n background-position: -200% 0;\\n }\\n}\\n\\n/* src/components/BridgeConfirmDialog.module.css */\\n.BridgeConfirmDialog_dialogOverlay {\\n position: fixed;\\n inset: 0;\\n z-index: 1000;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: color-mix(in oklab, var(--dt-overlay) 78%, transparent);\\n}\\n.BridgeConfirmDialog_dialogCard {\\n width: min(520px, calc(100vw - 32px));\\n padding: 20px;\\n border: 1px solid var(--dt-border-strong);\\n border-radius: 16px;\\n background: var(--dt-surface);\\n box-shadow: 0 24px 60px var(--dt-shadow-color);\\n}\\n.BridgeConfirmDialog_dialogHeader {\\n display: flex;\\n align-items: flex-start;\\n gap: 12px;\\n margin-bottom: 16px;\\n}\\n.BridgeConfirmDialog_dialogIcon {\\n display: inline-flex;\\n width: 32px;\\n height: 32px;\\n align-items: center;\\n justify-content: center;\\n border-radius: 999px;\\n background: var(--dt-warning-subtle);\\n color: var(--dt-warning);\\n font-size: 18px;\\n}\\n.BridgeConfirmDialog_dialogTitle {\\n color: var(--dt-text);\\n font-size: 16px;\\n font-weight: 600;\\n}\\n.BridgeConfirmDialog_dialogSubtitle {\\n margin-top: 2px;\\n color: var(--dt-text-secondary);\\n font-size: 13px;\\n}\\n.BridgeConfirmDialog_dialogLabel {\\n margin-top: 12px;\\n margin-bottom: 6px;\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n font-weight: 600;\\n letter-spacing: 0.04em;\\n text-transform: uppercase;\\n}\\n.BridgeConfirmDialog_dialogCode {\\n overflow-wrap: anywhere;\\n padding: 10px 12px;\\n border: 1px solid var(--dt-border-subtle);\\n border-radius: 10px;\\n background: var(--dt-bg-subtle);\\n color: var(--dt-text);\\n font-family: var(--font-mono);\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n.BridgeConfirmDialog_dialogRisk {\\n margin-top: 14px;\\n color: var(--dt-text-secondary);\\n font-size: 13px;\\n line-height: 1.5;\\n}\\n.BridgeConfirmDialog_dialogActions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 10px;\\n margin-top: 18px;\\n}\\n.BridgeConfirmDialog_dialogCancelButton,\\n.BridgeConfirmDialog_dialogConfirmButton {\\n border-radius: 10px;\\n padding: 9px 14px;\\n font: inherit;\\n cursor: pointer;\\n}\\n.BridgeConfirmDialog_dialogCancelButton {\\n border: 1px solid var(--dt-border);\\n background: var(--dt-surface);\\n color: var(--dt-text);\\n}\\n.BridgeConfirmDialog_dialogConfirmButton {\\n border: 1px solid var(--dt-warning);\\n background: var(--dt-warning);\\n color: var(--dt-text-on-accent);\\n font-weight: 600;\\n}\\n\\n/* src/components/HtmlPreviewPane.module.css */\\n.HtmlPreviewPane_emptyState {\\n display: flex;\\n height: 100%;\\n align-items: center;\\n justify-content: center;\\n color: var(--dt-text-muted);\\n font-size: 14px;\\n}\\n.HtmlPreviewPane_errorState {\\n display: flex;\\n height: 100%;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n color: var(--dt-text-muted);\\n font-size: 14px;\\n}\\n.HtmlPreviewPane_errorIcon {\\n font-size: 32px;\\n opacity: 0.5;\\n}\\n\\n/* src/PreviewApp.module.css */\\n.PreviewApp_root {\\n display: flex;\\n height: 100%;\\n min-height: 0;\\n flex-direction: column;\\n overflow: hidden;\\n background: var(--dt-window-body);\\n color: var(--dt-text);\\n font-family: var(--font-sans);\\n}\\n.PreviewApp_imageViewportWrap {\\n display: flex;\\n flex: 1;\\n min-height: 0;\\n overflow: hidden;\\n}\\n.PreviewApp_emptyState {\\n display: flex;\\n height: 100%;\\n align-items: center;\\n justify-content: center;\\n color: var(--dt-text-muted);\\n font-size: 14px;\\n}\\n.PreviewApp_errorState {\\n display: flex;\\n height: 100%;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n color: var(--dt-text-muted);\\n font-size: 14px;\\n}\\n.PreviewApp_errorIcon {\\n font-size: 32px;\\n opacity: 0.5;\\n}\\n/*# sourceMappingURL=frontend.css.map */\\n\";\n document.head.appendChild(style);\n})();\n\n// desktalk-global:react\nvar _mod = window.React;\nvar react_default = _mod;\nvar Children = _mod.Children;\nvar Component = _mod.Component;\nvar Fragment = _mod.Fragment;\nvar Profiler = _mod.Profiler;\nvar PureComponent = _mod.PureComponent;\nvar StrictMode = _mod.StrictMode;\nvar Suspense = _mod.Suspense;\nvar cloneElement = _mod.cloneElement;\nvar createContext = _mod.createContext;\nvar createElement = _mod.createElement;\nvar createRef = _mod.createRef;\nvar forwardRef = _mod.forwardRef;\nvar isValidElement = _mod.isValidElement;\nvar lazy = _mod.lazy;\nvar memo = _mod.memo;\nvar startTransition = _mod.startTransition;\nvar useCallback = _mod.useCallback;\nvar useContext = _mod.useContext;\nvar useDebugValue = _mod.useDebugValue;\nvar useDeferredValue = _mod.useDeferredValue;\nvar useEffect = _mod.useEffect;\nvar useId = _mod.useId;\nvar useImperativeHandle = _mod.useImperativeHandle;\nvar useInsertionEffect = _mod.useInsertionEffect;\nvar useLayoutEffect = _mod.useLayoutEffect;\nvar useMemo = _mod.useMemo;\nvar useReducer = _mod.useReducer;\nvar useRef = _mod.useRef;\nvar useState = _mod.useState;\nvar useSyncExternalStore = _mod.useSyncExternalStore;\nvar useTransition = _mod.useTransition;\nvar version = _mod.version;\n\n// desktalk-global:react-dom/client\nvar _mod2 = window.ReactDOM;\nvar createRoot = _mod2.createRoot;\nvar hydrateRoot = _mod2.hydrateRoot;\n\n// ../../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.14_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/vanilla.mjs\nvar createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nvar createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\n// ../../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.14_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/react.mjs\nvar identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = react_default.useSyncExternalStore(\n api.subscribe,\n react_default.useCallback(() => selector(api.getState()), [api, selector]),\n react_default.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n react_default.useDebugValue(slice);\n return slice;\n}\n\n// src/frontend.tsx\nimport { useCommand as useCommand4, MiniAppIdProvider, WindowIdProvider } from \"@desktalk/sdk\";\n\n// src/components/PreviewToolbar.tsx\nimport { simplifyPath } from \"@desktalk/sdk\";\n\n// src/components/PreviewToolbar.module.css\nvar PreviewToolbar_default = {\n toolbar: \"PreviewToolbar_toolbar\",\n toolbarGroup: \"PreviewToolbar_toolbarGroup\",\n toolBtn: \"PreviewToolbar_toolBtn\",\n filename: \"PreviewToolbar_filename\",\n zoomIndicator: \"PreviewToolbar_zoomIndicator\",\n browserNavGroup: \"PreviewToolbar_browserNavGroup\",\n browserNavBtn: \"PreviewToolbar_browserNavBtn\",\n browserActionSpacer: \"PreviewToolbar_browserActionSpacer\",\n addressBar: \"PreviewToolbar_addressBar\",\n lockIcon: \"PreviewToolbar_lockIcon\",\n addressText: \"PreviewToolbar_addressText\",\n streamingIndicator: \"PreviewToolbar_streamingIndicator\",\n streamingDot: \"PreviewToolbar_streamingDot\",\n pulse: \"PreviewToolbar_pulse\"\n};\n\n// desktalk-global:react/jsx-runtime\nvar _mod3 = window.__desktalk_jsx_runtime;\nvar jsx = _mod3.jsx;\nvar jsxs = _mod3.jsxs;\nvar jsxDEV = _mod3.jsxDEV;\nvar Fragment2 = _mod3.Fragment;\n\n// src/components/PreviewToolbar.tsx\nfunction PreviewToolbar({\n filename,\n filepath,\n mode,\n zoomPercent,\n canGoPrev,\n canGoNext,\n onZoomIn,\n onZoomOut,\n onFitToWindow,\n onActualSize,\n onPrevious,\n onNext,\n streaming,\n onRefreshFromFile,\n onEditSource\n}) {\n if (mode === \"html\" || mode === \"stream\") {\n return /* @__PURE__ */ jsxs(\"div\", { className: PreviewToolbar_default.toolbar, children: [\n /* @__PURE__ */ jsx(\"div\", { className: PreviewToolbar_default.browserNavGroup, children: !streaming && onRefreshFromFile ? /* @__PURE__ */ jsx(\n \"button\",\n {\n className: PreviewToolbar_default.browserNavBtn,\n onClick: onRefreshFromFile,\n title: \"Refresh\",\n \"aria-label\": \"Refresh\",\n children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /* @__PURE__ */ jsx(\"polyline\", { points: \"23 4 23 10 17 10\" }),\n /* @__PURE__ */ jsx(\"path\", { d: \"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\" })\n ]\n }\n )\n }\n ) : /* @__PURE__ */ jsx(\"button\", { className: PreviewToolbar_default.browserNavBtn, disabled: true, \"aria-hidden\": \"true\", children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /* @__PURE__ */ jsx(\"polyline\", { points: \"23 4 23 10 17 10\" }),\n /* @__PURE__ */ jsx(\"path\", { d: \"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\" })\n ]\n }\n ) }) }),\n /* @__PURE__ */ jsx(\"div\", { className: PreviewToolbar_default.addressBar, children: streaming ? /* @__PURE__ */ jsxs(\"div\", { className: PreviewToolbar_default.streamingIndicator, children: [\n /* @__PURE__ */ jsx(\"span\", { className: PreviewToolbar_default.streamingDot }),\n /* @__PURE__ */ jsx(\"span\", { children: \"Streaming...\" })\n ] }) : /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsxs(\n \"svg\",\n {\n className: PreviewToolbar_default.lockIcon,\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /* @__PURE__ */ jsx(\"rect\", { x: \"3\", y: \"11\", width: \"18\", height: \"11\", rx: \"2\", ry: \"2\" }),\n /* @__PURE__ */ jsx(\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\" })\n ]\n }\n ),\n /* @__PURE__ */ jsxs(\"span\", { className: PreviewToolbar_default.addressText, title: filepath || filename, children: [\n \"file://\",\n simplifyPath(filepath || filename)\n ] })\n ] }) }),\n /* @__PURE__ */ jsx(\"div\", { className: PreviewToolbar_default.browserNavGroup, children: onEditSource && !streaming ? /* @__PURE__ */ jsx(\n \"button\",\n {\n className: PreviewToolbar_default.browserNavBtn,\n onClick: onEditSource,\n title: \"Edit in TextEdit\",\n \"aria-label\": \"Edit in TextEdit\",\n children: /* @__PURE__ */ jsxs(\n \"svg\",\n {\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /* @__PURE__ */ jsx(\"path\", { d: \"M12 20h9\" }),\n /* @__PURE__ */ jsx(\"path\", { d: \"M16.5 3.5a2.12 2.12 0 1 1 3 3L7 19l-4 1 1-4Z\" })\n ]\n }\n )\n }\n ) : /* @__PURE__ */ jsx(\"div\", { className: PreviewToolbar_default.browserActionSpacer, \"aria-hidden\": \"true\" }) })\n ] });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: PreviewToolbar_default.toolbar, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: PreviewToolbar_default.toolbarGroup, children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: PreviewToolbar_default.toolBtn,\n onClick: onPrevious,\n disabled: !canGoPrev,\n title: \"Previous image\",\n children: \"\\u25C0\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: PreviewToolbar_default.toolBtn,\n onClick: onNext,\n disabled: !canGoNext,\n title: \"Next image\",\n children: \"\\u25B6\"\n }\n )\n ] }),\n /* @__PURE__ */ jsx(\"span\", { className: PreviewToolbar_default.filename, title: filename, children: filename }),\n /* @__PURE__ */ jsxs(\"div\", { className: PreviewToolbar_default.toolbarGroup, children: [\n /* @__PURE__ */ jsx(\"button\", { className: PreviewToolbar_default.toolBtn, onClick: onZoomOut, title: \"Zoom out\", children: \"\\u2212\" }),\n /* @__PURE__ */ jsxs(\"span\", { className: PreviewToolbar_default.zoomIndicator, children: [\n zoomPercent ?? 100,\n \"%\"\n ] }),\n /* @__PURE__ */ jsx(\"button\", { className: PreviewToolbar_default.toolBtn, onClick: onZoomIn, title: \"Zoom in\", children: \"+\" }),\n /* @__PURE__ */ jsx(\"button\", { className: PreviewToolbar_default.toolBtn, onClick: onFitToWindow, title: \"Fit to window\", children: \"\\u2922\" }),\n /* @__PURE__ */ jsx(\"button\", { className: PreviewToolbar_default.toolBtn, onClick: onActualSize, title: \"Actual size (1:1)\", children: \"1:1\" })\n ] })\n ] });\n}\n\n// src/components/ImageViewport.module.css\nvar ImageViewport_default = {\n viewport: \"ImageViewport_viewport\",\n image: \"ImageViewport_image\"\n};\n\n// src/components/ImageViewport.tsx\nvar PAN_STEP = 50;\nfunction ImageViewport({ dataUrl, zoom, onZoomChange }) {\n const containerRef = useRef(null);\n const [panX, setPanX] = useState(0);\n const [panY, setPanY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStart = useRef({ x: 0, y: 0, panX: 0, panY: 0 });\n useEffect(() => {\n setPanX(0);\n setPanY(0);\n }, [dataUrl]);\n const handleWheel = useCallback(\n (e) => {\n e.preventDefault();\n const delta = e.deltaY > 0 ? -0.1 : 0.1;\n const newZoom = Math.max(0.1, Math.min(10, zoom + delta));\n onZoomChange(newZoom);\n },\n [zoom, onZoomChange]\n );\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }, [handleWheel]);\n const handleMouseDown = useCallback(\n (e) => {\n if (e.button !== 0) return;\n setIsDragging(true);\n dragStart.current = { x: e.clientX, y: e.clientY, panX, panY };\n },\n [panX, panY]\n );\n const handleMouseMove = useCallback(\n (e) => {\n if (!isDragging) return;\n const dx = e.clientX - dragStart.current.x;\n const dy = e.clientY - dragStart.current.y;\n setPanX(dragStart.current.panX + dx);\n setPanY(dragStart.current.panY + dy);\n },\n [isDragging]\n );\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const handleKeyDown = (e) => {\n switch (e.key) {\n case \"ArrowUp\":\n e.preventDefault();\n setPanY((y) => y + PAN_STEP);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n setPanY((y) => y - PAN_STEP);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n setPanX((x) => x + PAN_STEP);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n setPanX((x) => x - PAN_STEP);\n break;\n }\n };\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n const panInDirection = useCallback((direction) => {\n switch (direction) {\n case \"up\":\n setPanY((y) => y + PAN_STEP);\n break;\n case \"down\":\n setPanY((y) => y - PAN_STEP);\n break;\n case \"left\":\n setPanX((x) => x + PAN_STEP);\n break;\n case \"right\":\n setPanX((x) => x - PAN_STEP);\n break;\n }\n }, []);\n useEffect(() => {\n const el = containerRef.current;\n if (el) {\n el.panInDirection = panInDirection;\n }\n }, [panInDirection]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: containerRef,\n className: ImageViewport_default.viewport,\n onMouseDown: handleMouseDown,\n onMouseMove: handleMouseMove,\n onMouseUp: handleMouseUp,\n onMouseLeave: handleMouseUp,\n tabIndex: 0,\n style: { cursor: isDragging ? \"grabbing\" : \"grab\" },\n children: /* @__PURE__ */ jsx(\n \"img\",\n {\n className: ImageViewport_default.image,\n src: dataUrl,\n alt: \"\",\n draggable: false,\n style: {\n transform: `translate(${panX}px, ${panY}px) scale(${zoom})`\n }\n }\n )\n }\n );\n}\n\n// src/components/HtmlPreviewPane.tsx\nimport { useCommand, useEvent, useOpenMiniApp, useWindowId } from \"@desktalk/sdk\";\n\n// src/components/HtmlViewport.module.css\nvar HtmlViewport_default = {\n viewportContainer: \"HtmlViewport_viewportContainer\",\n htmlViewport: \"HtmlViewport_htmlViewport\",\n shimmerOverlay: \"HtmlViewport_shimmerOverlay\",\n viewportShimmer: \"HtmlViewport_viewportShimmer\"\n};\n\n// src/components/HtmlViewport.tsx\nvar LIGHT_IFRAME_BACKGROUND = \"#f7f7fa\";\nvar DARK_IFRAME_BACKGROUND = \"#101114\";\nvar HtmlViewport = forwardRef(function HtmlViewport2({ html, src, streaming, onBridgeRequest, onInvokeActionResult, onLoad, theme }, ref) {\n const iframeRef = useRef(null);\n const writtenLengthRef = useRef(0);\n const docOpenRef = useRef(false);\n const wasStreamingRef = useRef(Boolean(streaming));\n const syncThemeToIframe = useCallback(() => {\n const iframe = iframeRef.current;\n if (!iframe || !theme) {\n return;\n }\n const backgroundColor = theme.mode === \"dark\" ? DARK_IFRAME_BACKGROUND : LIGHT_IFRAME_BACKGROUND;\n iframe.style.backgroundColor = backgroundColor;\n const doc = iframe.contentDocument;\n if (doc?.documentElement) {\n doc.documentElement.dataset.theme = theme.mode;\n doc.documentElement.style.colorScheme = theme.mode;\n doc.documentElement.style.backgroundColor = backgroundColor;\n }\n if (doc?.body) {\n doc.body.style.backgroundColor = backgroundColor;\n }\n const message = {\n type: \"desktalk:theme-update\",\n accentColor: theme.accentColor,\n mode: theme.mode\n };\n iframe.contentWindow?.postMessage(message, \"*\");\n }, [theme]);\n useImperativeHandle(\n ref,\n () => ({\n postInvokeAction(message) {\n iframeRef.current?.contentWindow?.postMessage(message, \"*\");\n }\n }),\n []\n );\n useEffect(() => {\n if (!onBridgeRequest && !onInvokeActionResult) return;\n const handleMessage = (event) => {\n const iframe = iframeRef.current;\n if (!iframe || event.source !== iframe.contentWindow) {\n return;\n }\n const data = event.data;\n if (!data) {\n return;\n }\n if (data.type === \"desktalk:bridge-request\") {\n if (!onBridgeRequest) {\n return;\n }\n onBridgeRequest(data, (response) => {\n iframe.contentWindow?.postMessage(response, \"*\");\n });\n return;\n }\n if (data.type === \"desktalk:invoke-action-result\") {\n onInvokeActionResult?.(data);\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [onBridgeRequest, onInvokeActionResult]);\n useEffect(() => {\n syncThemeToIframe();\n }, [syncThemeToIframe]);\n useEffect(() => {\n if (src) {\n const iframe2 = iframeRef.current;\n iframe2?.contentDocument?.close();\n writtenLengthRef.current = 0;\n docOpenRef.current = false;\n wasStreamingRef.current = false;\n return;\n }\n if (html === void 0) {\n return;\n }\n const iframe = iframeRef.current;\n if (!iframe) return;\n const doc = iframe.contentDocument;\n if (!doc) return;\n const wasStreaming = wasStreamingRef.current;\n wasStreamingRef.current = Boolean(streaming);\n if (!streaming) {\n if (wasStreaming && docOpenRef.current) {\n const newContent2 = html.slice(writtenLengthRef.current);\n if (newContent2.length > 0) {\n doc.write(newContent2);\n writtenLengthRef.current = html.length;\n }\n doc.close();\n docOpenRef.current = false;\n return;\n }\n doc.open();\n doc.write(html);\n doc.close();\n writtenLengthRef.current = html.length;\n docOpenRef.current = false;\n return;\n }\n if (!docOpenRef.current) {\n doc.open();\n docOpenRef.current = true;\n writtenLengthRef.current = 0;\n }\n const newContent = html.slice(writtenLengthRef.current);\n if (newContent.length > 0) {\n doc.write(newContent);\n writtenLengthRef.current = html.length;\n }\n }, [html, src, streaming]);\n return /* @__PURE__ */ jsxs(\"div\", { className: HtmlViewport_default.viewportContainer, children: [\n streaming ? /* @__PURE__ */ jsx(\"div\", { className: HtmlViewport_default.shimmerOverlay, \"aria-hidden\": \"true\" }) : null,\n /* @__PURE__ */ jsx(\n \"iframe\",\n {\n ref: iframeRef,\n className: HtmlViewport_default.htmlViewport,\n sandbox: streaming ? \"allow-same-origin\" : \"allow-scripts allow-same-origin\",\n title: \"HTML Preview\",\n src,\n onLoad: () => {\n syncThemeToIframe();\n onLoad?.();\n },\n style: {\n backgroundColor: theme?.mode === \"dark\" ? DARK_IFRAME_BACKGROUND : LIGHT_IFRAME_BACKGROUND\n }\n }\n )\n ] });\n});\n\n// src/preview-paths.ts\nfunction normalizePreviewPath(path) {\n if (!path) {\n return null;\n }\n return path.replace(/\\\\/g, \"/\");\n}\nfunction buildDtfsUrl(path, options) {\n const normalized = normalizePreviewPath(path) ?? path;\n const encodedPath = normalized.split(\"/\").filter(Boolean).map((segment) => encodeURIComponent(segment)).join(\"/\");\n const params = new URLSearchParams();\n if (options?.streamId) params.set(\"streamId\", options.streamId);\n if (options?.token) params.set(\"token\", options.token);\n if (options?.accentColor) params.set(\"accent\", options.accentColor);\n if (options?.theme) params.set(\"theme\", options.theme);\n if (options?.cacheBust) params.set(\"t\", options.cacheBust);\n const query = params.toString();\n return query ? `/@dtfs/${encodedPath}?${query}` : `/@dtfs/${encodedPath}`;\n}\nfunction isLiveAppPath(path) {\n const normalizedPath = normalizePreviewPath(path);\n if (!normalizedPath) {\n return false;\n }\n return normalizedPath === \".data/liveapps\" || normalizedPath.startsWith(\".data/liveapps/\");\n}\nfunction matchesPreviewFilePath(changedPath, currentPath) {\n const normalizedChangedPath = normalizePreviewPath(changedPath);\n const normalizedCurrentPath = normalizePreviewPath(currentPath);\n if (!normalizedChangedPath || !normalizedCurrentPath) {\n return false;\n }\n return normalizedChangedPath === normalizedCurrentPath || normalizedChangedPath.endsWith(`/${normalizedCurrentPath}`);\n}\n\n// src/components/BridgeConfirmDialog.module.css\nvar BridgeConfirmDialog_default = {\n dialogOverlay: \"BridgeConfirmDialog_dialogOverlay\",\n dialogCard: \"BridgeConfirmDialog_dialogCard\",\n dialogHeader: \"BridgeConfirmDialog_dialogHeader\",\n dialogIcon: \"BridgeConfirmDialog_dialogIcon\",\n dialogTitle: \"BridgeConfirmDialog_dialogTitle\",\n dialogSubtitle: \"BridgeConfirmDialog_dialogSubtitle\",\n dialogLabel: \"BridgeConfirmDialog_dialogLabel\",\n dialogCode: \"BridgeConfirmDialog_dialogCode\",\n dialogRisk: \"BridgeConfirmDialog_dialogRisk\",\n dialogActions: \"BridgeConfirmDialog_dialogActions\",\n dialogCancelButton: \"BridgeConfirmDialog_dialogCancelButton\",\n dialogConfirmButton: \"BridgeConfirmDialog_dialogConfirmButton\"\n};\n\n// src/components/BridgeConfirmDialog.tsx\nfunction BridgeConfirmDialog({\n command,\n cwd,\n risk,\n onConfirm,\n onCancel\n}) {\n return /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogOverlay, onClick: onCancel, children: /* @__PURE__ */ jsxs(\"div\", { className: BridgeConfirmDialog_default.dialogCard, onClick: (event) => event.stopPropagation(), children: [\n /* @__PURE__ */ jsxs(\"div\", { className: BridgeConfirmDialog_default.dialogHeader, children: [\n /* @__PURE__ */ jsx(\"span\", { className: BridgeConfirmDialog_default.dialogIcon, children: \"\\u26A0\" }),\n /* @__PURE__ */ jsxs(\"div\", { children: [\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogTitle, children: \"Confirm command execution\" }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogSubtitle, children: \"This generated page is requesting a risky command.\" })\n ] })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogLabel, children: \"Command\" }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogCode, children: command }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogLabel, children: \"Working directory\" }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogCode, children: cwd }),\n /* @__PURE__ */ jsx(\"div\", { className: BridgeConfirmDialog_default.dialogRisk, children: risk }),\n /* @__PURE__ */ jsxs(\"div\", { className: BridgeConfirmDialog_default.dialogActions, children: [\n /* @__PURE__ */ jsx(\"button\", { type: \"button\", className: BridgeConfirmDialog_default.dialogCancelButton, onClick: onCancel, children: \"Cancel\" }),\n /* @__PURE__ */ jsx(\"button\", { type: \"button\", className: BridgeConfirmDialog_default.dialogConfirmButton, onClick: onConfirm, children: \"Run command\" })\n ] })\n ] }) });\n}\n\n// src/components/HtmlPreviewPane.module.css\nvar HtmlPreviewPane_default = {\n emptyState: \"HtmlPreviewPane_emptyState\",\n errorState: \"HtmlPreviewPane_errorState\",\n errorIcon: \"HtmlPreviewPane_errorIcon\"\n};\n\n// src/components/HtmlPreviewPane.tsx\nfunction requestCoreBridgeState(selector) {\n let result;\n let error = null;\n let resolved = false;\n window.dispatchEvent(\n new CustomEvent(\"desktalk:bridge:get-state\", {\n detail: {\n selector,\n resolve: (value) => {\n resolved = true;\n result = value;\n },\n reject: (message) => {\n error = new Error(message);\n }\n }\n })\n );\n if (error) {\n throw error;\n }\n if (!resolved) {\n throw new Error(\"DeskTalk core state bridge is unavailable.\");\n }\n return result;\n}\nfunction getFileName(path) {\n const normalized = normalizePreviewPath(path);\n if (!normalized) {\n return null;\n }\n const parts = normalized.split(\"/\").filter(Boolean);\n return parts.at(-1) ?? normalized;\n}\nfunction HtmlPreviewPane({\n initialPath,\n liveAppId,\n bridgeToken,\n theme,\n onActionStateChange,\n onLiveAppActionsChange,\n onLiveAppActionInvokerChange\n}) {\n const windowId = useWindowId();\n const openMiniApp = useOpenMiniApp();\n const viewportRef = useRef(null);\n const liveAppActionsRef = useRef(/* @__PURE__ */ new Map());\n const pendingActionInvocationsRef = useRef(/* @__PURE__ */ new Map());\n const [reloadKey, setReloadKey] = useState(0);\n const [pendingBridgeConfirm, setPendingBridgeConfirm] = useState(null);\n const registerBridgeSession = useCommand(\n \"preview.bridge.registerSession\"\n );\n const execBridgeCommand = useCommand(\n \"preview.bridge.exec\"\n );\n const confirmBridgeCommand = useCommand(\n \"preview.bridge.exec.confirm\"\n );\n const storageBridgeCommand = useCommand(\n \"preview.bridge.storage\"\n );\n const requestBridgeCommand = useCommand(\n \"preview.bridge.request\"\n );\n const normalizedPath = normalizePreviewPath(initialPath);\n const fileName = useMemo(() => getFileName(initialPath), [initialPath]);\n const shouldInjectRuntime = Boolean(liveAppId && bridgeToken && isLiveAppPath(initialPath));\n const canEditLiveAppSource = Boolean(shouldInjectRuntime && normalizedPath);\n const publishLiveAppActions = useCallback(() => {\n onLiveAppActionsChange(Array.from(liveAppActionsRef.current.values()));\n }, [onLiveAppActionsChange]);\n const rejectPendingActionInvocations = useCallback((message) => {\n for (const pending of pendingActionInvocationsRef.current.values()) {\n clearTimeout(pending.timeout);\n pending.reject(new Error(message));\n }\n pendingActionInvocationsRef.current.clear();\n }, []);\n const clearLiveAppActions = useCallback(() => {\n liveAppActionsRef.current.clear();\n publishLiveAppActions();\n }, [publishLiveAppActions]);\n const iframeSrc = useMemo(() => {\n if (!normalizedPath) {\n return null;\n }\n return buildDtfsUrl(normalizedPath, {\n streamId: shouldInjectRuntime ? liveAppId : void 0,\n token: shouldInjectRuntime ? bridgeToken : void 0,\n accentColor: shouldInjectRuntime ? theme.accentColor : void 0,\n theme: shouldInjectRuntime ? theme.mode : void 0,\n cacheBust: reloadKey > 0 ? String(reloadKey) : void 0\n });\n }, [bridgeToken, liveAppId, normalizedPath, reloadKey, shouldInjectRuntime, theme]);\n useEvent(\"preview.file-changed\", (data) => {\n if (!matchesPreviewFilePath(data.filePath, normalizedPath)) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n setReloadKey(Date.now());\n });\n useEffect(() => {\n if (!shouldInjectRuntime || !liveAppId || !bridgeToken) {\n return;\n }\n void registerBridgeSession({ streamId: liveAppId, token: bridgeToken }).catch(\n (registerError) => {\n console.error(\"Failed to register preview bridge session:\", registerError);\n }\n );\n }, [bridgeToken, liveAppId, registerBridgeSession, shouldInjectRuntime]);\n const resolveBridgeState = useCallback(\n (payload) => {\n switch (payload.selector) {\n case \"desktop.summary\":\n case \"desktop.windows\":\n case \"desktop.focusedWindow\":\n case \"theme.current\":\n return requestCoreBridgeState(payload.selector);\n case \"preview.context\":\n return {\n windowId,\n mode: \"html\",\n liveAppId,\n title: fileName,\n path: normalizedPath\n };\n default:\n throw new Error(`Unsupported DeskTalk bridge selector: ${String(payload.selector)}`);\n }\n },\n [fileName, liveAppId, normalizedPath, windowId]\n );\n const invokeLiveAppAction = useCallback(\n (actionName, params) => {\n if (!shouldInjectRuntime || !liveAppId || !bridgeToken) {\n return Promise.reject(new Error(\"DeskTalk LiveApp actions are unavailable.\"));\n }\n if (!viewportRef.current) {\n return Promise.reject(new Error(\"LiveApp viewport is not ready.\"));\n }\n const requestId = `liveapp-action-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n pendingActionInvocationsRef.current.delete(requestId);\n reject(new Error(`LiveApp action \"${actionName}\" timed out.`));\n }, 1e4);\n pendingActionInvocationsRef.current.set(requestId, { resolve, reject, timeout });\n viewportRef.current?.postInvokeAction({\n type: \"desktalk:invoke-action\",\n streamId: liveAppId,\n token: bridgeToken,\n requestId,\n actionName,\n params: params ?? null\n });\n });\n },\n [bridgeToken, liveAppId, shouldInjectRuntime]\n );\n useEffect(() => {\n if (!shouldInjectRuntime) {\n onLiveAppActionInvokerChange(null);\n onLiveAppActionsChange([]);\n return;\n }\n onLiveAppActionInvokerChange(invokeLiveAppAction);\n return () => {\n onLiveAppActionInvokerChange(null);\n };\n }, [\n invokeLiveAppAction,\n onLiveAppActionInvokerChange,\n onLiveAppActionsChange,\n shouldInjectRuntime\n ]);\n useEffect(() => {\n return () => {\n rejectPendingActionInvocations(\"LiveApp action invocation was interrupted.\");\n clearLiveAppActions();\n onLiveAppActionInvokerChange(null);\n };\n }, [clearLiveAppActions, onLiveAppActionInvokerChange, rejectPendingActionInvocations]);\n const handleInvokeActionResult = useCallback(\n (message) => {\n if (!shouldInjectRuntime || message.streamId !== liveAppId || message.token !== bridgeToken) {\n return;\n }\n const pending = pendingActionInvocationsRef.current.get(message.requestId);\n if (!pending) {\n return;\n }\n clearTimeout(pending.timeout);\n pendingActionInvocationsRef.current.delete(message.requestId);\n if (message.ok) {\n pending.resolve(message.result);\n return;\n }\n pending.reject(new Error(message.error || \"LiveApp action failed.\"));\n },\n [bridgeToken, liveAppId, shouldInjectRuntime]\n );\n const handleViewportLoad = useCallback(() => {\n if (!shouldInjectRuntime) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n }, [clearLiveAppActions, rejectPendingActionInvocations, shouldInjectRuntime]);\n const respondToBridgeRequest = useCallback(\n (request, respond) => {\n const reply = (payload) => {\n respond({\n type: \"desktalk:bridge-response\",\n streamId: request.streamId,\n token: request.token,\n requestId: request.requestId,\n ...payload\n });\n };\n if (!shouldInjectRuntime || !liveAppId || !bridgeToken) {\n reply({ ok: false, error: \"DeskTalk bridge is only available for LiveApps.\" });\n return;\n }\n if (request.streamId !== liveAppId || request.token !== bridgeToken) {\n reply({ ok: false, error: \"DeskTalk bridge token mismatch.\" });\n return;\n }\n if (request.kind === \"getState\") {\n try {\n reply({\n ok: true,\n result: resolveBridgeState(request.payload)\n });\n } catch (bridgeError) {\n reply({ ok: false, error: bridgeError.message });\n }\n return;\n }\n if (request.kind === \"storage\") {\n void storageBridgeCommand({\n streamId: liveAppId,\n token: bridgeToken,\n liveAppId,\n request: request.payload\n }).then((result) => {\n reply({ ok: true, result });\n }).catch((bridgeError) => {\n reply({ ok: false, error: bridgeError.message });\n });\n return;\n }\n if (request.kind === \"request\") {\n void requestBridgeCommand({\n streamId: liveAppId,\n token: bridgeToken,\n request: request.payload\n }).then((result) => {\n reply({ ok: true, result });\n }).catch((bridgeError) => {\n reply({ ok: false, error: bridgeError.message });\n });\n return;\n }\n if (request.kind === \"actions\") {\n const payload = request.payload;\n if (payload.action === \"register\") {\n liveAppActionsRef.current.set(payload.name, {\n name: payload.name,\n description: payload.description,\n params: payload.params\n });\n publishLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n if (payload.action === \"unregister\") {\n liveAppActionsRef.current.delete(payload.name);\n publishLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n if (payload.action === \"clear\") {\n clearLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n reply({ ok: false, error: \"Unsupported DeskTalk actions request.\" });\n return;\n }\n if (request.kind !== \"exec\") {\n reply({ ok: false, error: `Unsupported DeskTalk bridge request: ${request.kind}` });\n return;\n }\n if (pendingBridgeConfirm) {\n reply({ ok: false, error: \"A command confirmation is already waiting for user input.\" });\n return;\n }\n void execBridgeCommand({\n ...request.payload,\n streamId: liveAppId,\n token: bridgeToken\n }).then((result) => {\n if (result.status === \"completed\") {\n reply({ ok: true, result: result.result });\n return;\n }\n if (result.status === \"requires_confirmation\") {\n setPendingBridgeConfirm({\n confirmationRequestId: result.requestId,\n bridgeRequestId: request.requestId,\n commandPreview: result.commandPreview,\n cwd: result.cwd,\n reason: result.reason,\n respond\n });\n return;\n }\n reply({ ok: false, error: result.reason });\n }).catch((bridgeError) => {\n reply({ ok: false, error: bridgeError.message });\n });\n },\n [\n bridgeToken,\n execBridgeCommand,\n liveAppId,\n pendingBridgeConfirm,\n requestBridgeCommand,\n publishLiveAppActions,\n clearLiveAppActions,\n resolveBridgeState,\n shouldInjectRuntime,\n storageBridgeCommand\n ]\n );\n const handleBridgeConfirmation = useCallback(\n async (confirmed) => {\n if (!pendingBridgeConfirm || !bridgeToken || !liveAppId) {\n return;\n }\n const respond = pendingBridgeConfirm.respond;\n const requestId = pendingBridgeConfirm.bridgeRequestId;\n const confirmationRequestId = pendingBridgeConfirm.confirmationRequestId;\n setPendingBridgeConfirm(null);\n try {\n const result = await confirmBridgeCommand({\n requestId: confirmationRequestId,\n confirmed\n });\n respond({\n type: \"desktalk:bridge-response\",\n streamId: liveAppId,\n token: bridgeToken,\n requestId,\n ok: result.status === \"completed\",\n result: result.status === \"completed\" ? result.result : void 0,\n error: result.status === \"completed\" ? void 0 : result.reason\n });\n } catch (bridgeError) {\n respond({\n type: \"desktalk:bridge-response\",\n streamId: liveAppId,\n token: bridgeToken,\n requestId,\n ok: false,\n error: bridgeError.message\n });\n }\n },\n [bridgeToken, confirmBridgeCommand, liveAppId, pendingBridgeConfirm]\n );\n const handleEditSource = useCallback(() => {\n if (!normalizedPath || !shouldInjectRuntime) {\n return;\n }\n openMiniApp(\"text-edit\", { path: normalizedPath });\n }, [normalizedPath, openMiniApp, shouldInjectRuntime]);\n useEffect(() => {\n onActionStateChange({\n mode: \"html\",\n streaming: false,\n file: normalizedPath && fileName ? {\n name: fileName,\n path: normalizedPath,\n kind: \"html\"\n } : null\n });\n }, [fileName, normalizedPath, onActionStateChange]);\n if (iframeSrc && fileName) {\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(\n PreviewToolbar,\n {\n filename: fileName,\n filepath: normalizedPath ?? void 0,\n mode: \"html\",\n onEditSource: canEditLiveAppSource ? handleEditSource : void 0\n }\n ),\n /* @__PURE__ */ jsx(\n HtmlViewport,\n {\n ref: viewportRef,\n src: iframeSrc,\n theme,\n onBridgeRequest: shouldInjectRuntime ? respondToBridgeRequest : void 0,\n onInvokeActionResult: shouldInjectRuntime ? handleInvokeActionResult : void 0,\n onLoad: shouldInjectRuntime ? handleViewportLoad : void 0\n }\n ),\n pendingBridgeConfirm ? /* @__PURE__ */ jsx(\n BridgeConfirmDialog,\n {\n command: pendingBridgeConfirm.commandPreview,\n cwd: pendingBridgeConfirm.cwd,\n risk: pendingBridgeConfirm.reason,\n onConfirm: () => {\n void handleBridgeConfirmation(true);\n },\n onCancel: () => {\n void handleBridgeConfirmation(false);\n }\n }\n ) : null\n ] });\n }\n return /* @__PURE__ */ jsx(\"div\", { className: HtmlPreviewPane_default.emptyState, children: \"Loading HTML...\" });\n}\n\n// src/components/PreviewActions.tsx\nimport { ActionsProvider, Action, useCommand as useCommand2 } from \"@desktalk/sdk\";\nfunction PreviewActions({\n children,\n state,\n onFileOpened,\n onZoomIn,\n onZoomOut,\n onFitToWindow,\n onActualSize,\n onPan,\n onPrevious,\n onNext,\n liveAppActions,\n onInvokeLiveAppAction\n}) {\n const openFile = useCommand2(\"preview.open\");\n const handleOpen = useCallback(\n async (params) => {\n const path = params?.path;\n if (!path) return { error: \"path parameter is required\" };\n const file = await openFile({ path });\n onFileOpened(file);\n return file;\n },\n [openFile, onFileOpened]\n );\n const handleGetState = useCallback(async () => state, [state]);\n const handleZoomIn = useCallback(async () => {\n onZoomIn();\n }, [onZoomIn]);\n const handleZoomOut = useCallback(async () => {\n onZoomOut();\n }, [onZoomOut]);\n const handleFitToWindow = useCallback(async () => {\n onFitToWindow();\n }, [onFitToWindow]);\n const handleActualSize = useCallback(async () => {\n onActualSize();\n }, [onActualSize]);\n const handlePan = useCallback(\n async (params) => {\n const direction = params?.direction;\n if (!direction) return { error: \"direction parameter is required\" };\n onPan(direction);\n },\n [onPan]\n );\n const handlePrevious = useCallback(async () => {\n onPrevious();\n }, [onPrevious]);\n const handleNext = useCallback(async () => {\n onNext();\n }, [onNext]);\n const isImage = state.mode === \"image\";\n const mergedActions = useMemo(() => {\n const builtinActions = [\n {\n name: \"Get State\",\n description: \"Get the current preview mode and opened file\",\n handler: handleGetState\n },\n {\n name: \"Open File\",\n description: \"Open an image or HTML file for preview\",\n params: {\n path: { type: \"string\", description: \"Path to the file\", required: true }\n },\n handler: handleOpen\n }\n ];\n if (isImage) {\n builtinActions.push(\n {\n name: \"Zoom In\",\n description: \"Increase zoom level by one step\",\n handler: handleZoomIn\n },\n {\n name: \"Zoom Out\",\n description: \"Decrease zoom level by one step\",\n handler: handleZoomOut\n },\n {\n name: \"Fit to Window\",\n description: \"Scale image to fit the viewport\",\n handler: handleFitToWindow\n },\n {\n name: \"Actual Size\",\n description: \"Display image at 1:1 pixel ratio\",\n handler: handleActualSize\n },\n {\n name: \"Pan\",\n description: \"Pan the viewport in a direction\",\n params: {\n direction: {\n type: \"string\",\n description: 'Direction to pan: \"up\", \"down\", \"left\", or \"right\"',\n required: true\n }\n },\n handler: handlePan\n },\n {\n name: \"Previous File\",\n description: \"Navigate to previous image in directory\",\n handler: handlePrevious\n },\n {\n name: \"Next File\",\n description: \"Navigate to next image in directory\",\n handler: handleNext\n }\n );\n }\n const merged = /* @__PURE__ */ new Map();\n for (const action of builtinActions) {\n merged.set(action.name, action);\n }\n for (const action of liveAppActions) {\n merged.set(action.name, {\n ...action,\n handler: async (params) => onInvokeLiveAppAction(action.name, params)\n });\n }\n return Array.from(merged.values());\n }, [\n handleActualSize,\n handleFitToWindow,\n handleGetState,\n handleNext,\n handleOpen,\n handlePan,\n handlePrevious,\n handleZoomIn,\n handleZoomOut,\n isImage,\n liveAppActions,\n onInvokeLiveAppAction\n ]);\n return /* @__PURE__ */ jsxs(ActionsProvider, { children: [\n mergedActions.map((action) => /* @__PURE__ */ jsx(\n Action,\n {\n name: action.name,\n description: action.description,\n params: action.params,\n handler: action.handler\n },\n action.name\n )),\n children\n ] });\n}\n\n// src/components/StreamPreviewPane.tsx\nimport { useCommand as useCommand3, useEvent as useEvent2, useWindowId as useWindowId2 } from \"@desktalk/sdk\";\n\n// src/html-injections.ts\nimport { createHtmlBridgeScript } from \"@desktalk/sdk\";\n\n// src/strip-dt-injections.ts\nvar DT_THEME_TAG_PATTERN = /\\s*<link\\b[^>]*\\bdata-dt-theme\\b[^>]*>\\s*/gi;\nvar DT_THEME_SYNC_TAG_PATTERN = /\\s*<script\\b[^>]*\\bdata-dt-theme-sync\\b[^>]*>[\\s\\S]*?<\\/script>\\s*/gi;\nvar DT_UI_TAG_PATTERN = /\\s*<script\\b[^>]*\\bdata-dt-ui\\b[^>]*><\\/script>\\s*/gi;\nvar DT_BRIDGE_TAG_PATTERN = /\\s*<script\\b[^>]*\\bdata-dt-bridge\\b[^>]*>[\\s\\S]*?<\\/script>\\s*/gi;\nvar STREAM_PREAMBLE_HEAD_PATTERN = /^\\s*<!DOCTYPE html><html><head>\\s*(?=<!DOCTYPE html>)/i;\nfunction stripDtInjections(html) {\n const stripped = html.replace(DT_THEME_TAG_PATTERN, \"\\n\").replace(DT_THEME_SYNC_TAG_PATTERN, \"\\n\").replace(DT_UI_TAG_PATTERN, \"\\n\").replace(DT_BRIDGE_TAG_PATTERN, \"\\n\").replace(STREAM_PREAMBLE_HEAD_PATTERN, \"\");\n return stripped.trimStart();\n}\n\n// src/html-injections.ts\nvar UI_BUNDLE_SCRIPT_TAG = '<script src=\"/api/ui/desktalk-ui.js\" data-dt-ui><\\/script>';\nfunction createThemeLinkTag(accentColor, mode) {\n const params = new URLSearchParams({ accent: accentColor, theme: mode });\n return `<link rel=\"stylesheet\" href=\"/api/ui/desktalk-theme.css?${params.toString()}\" data-dt-theme>`;\n}\nfunction createThemeSyncScript(accentColor, mode) {\n return `<script data-dt-theme-sync>\n(() => {\n const THEME_MESSAGE = 'desktalk:theme-update';\n const THEME_SELECTOR = 'link[data-dt-theme]';\n const updateTheme = (nextAccent, nextMode) => {\n const params = new URLSearchParams({ accent: nextAccent, theme: nextMode });\n const href = '/api/ui/desktalk-theme.css?' + params.toString();\n let link = document.querySelector(THEME_SELECTOR);\n if (!link) {\n link = document.createElement('link');\n link.rel = 'stylesheet';\n link.setAttribute('data-dt-theme', '');\n document.head.prepend(link);\n }\n link.href = href;\n document.documentElement.dataset.theme = nextMode;\n document.documentElement.style.colorScheme = nextMode;\n document.documentElement.style.backgroundColor = nextMode === 'dark' ? '#101114' : '#f7f7fa';\n document.body?.style.setProperty('background-color', nextMode === 'dark' ? '#101114' : '#f7f7fa');\n };\n updateTheme(${JSON.stringify(accentColor)}, ${JSON.stringify(mode)});\n window.addEventListener('message', (event) => {\n const data = event.data;\n if (!data || data.type !== THEME_MESSAGE) return;\n updateTheme(data.accentColor, data.mode === 'light' ? 'light' : 'dark');\n });\n})();\n<\\/script>`;\n}\nfunction injectIntoHtmlHead(html, snippet) {\n const headMatch = html.match(/<head(\\s[^>]*)?>|<head>/i);\n if (headMatch && headMatch.index !== void 0) {\n const insertPos = headMatch.index + headMatch[0].length;\n return html.slice(0, insertPos) + \"\\n\" + snippet + \"\\n\" + html.slice(insertPos);\n }\n return snippet + \"\\n\" + html;\n}\nfunction injectDtRuntime(html, options) {\n const cleanHtml = stripDtInjections(html);\n const snippet = [\n createThemeLinkTag(options.theme.accentColor, options.theme.mode),\n createThemeSyncScript(options.theme.accentColor, options.theme.mode),\n UI_BUNDLE_SCRIPT_TAG,\n createHtmlBridgeScript(options.streamId, options.bridgeToken)\n ].join(\"\\n\");\n return injectIntoHtmlHead(cleanHtml, snippet);\n}\n\n// src/liveapp-id.ts\nfunction sanitizeTitleSegment(title) {\n const normalized = title.trim().toLowerCase().replace(/\\s+/g, \"-\");\n const safe = normalized.replace(/[^a-z0-9._-]/g, \"\");\n return safe || \"preview\";\n}\nfunction getStreamedDirectoryName(streamId, title) {\n return `${sanitizeTitleSegment(title)}_${streamId}`;\n}\n\n// src/components/StreamPreviewPane.tsx\nfunction requestCoreBridgeState2(selector) {\n let result;\n let error = null;\n let resolved = false;\n window.dispatchEvent(\n new CustomEvent(\"desktalk:bridge:get-state\", {\n detail: {\n selector,\n resolve: (value) => {\n resolved = true;\n result = value;\n },\n reject: (message) => {\n error = new Error(message);\n }\n }\n })\n );\n if (error) {\n throw error;\n }\n if (!resolved) {\n throw new Error(\"DeskTalk core state bridge is unavailable.\");\n }\n return result;\n}\nfunction StreamPreviewPane({\n previewStore,\n streamId,\n streamTitle,\n bridgeToken,\n theme,\n onActionStateChange,\n onLiveAppActionsChange,\n onLiveAppActionInvokerChange\n}) {\n const windowId = useWindowId2();\n const streaming = useStore(previewStore, (state) => state.streaming);\n const viewportRef = useRef(null);\n const [streamHtml, setStreamHtml] = useState(\"\");\n const [streamSnapshot, setStreamSnapshot] = useState(null);\n const [pendingBridgeConfirm, setPendingBridgeConfirm] = useState(null);\n const streamHtmlRef = useRef(streamHtml);\n const liveAppActionsRef = useRef(/* @__PURE__ */ new Map());\n const pendingActionInvocationsRef = useRef(/* @__PURE__ */ new Map());\n const loadStreamedHtml = useCommand3(\"preview.stream.load-html\");\n const saveStreamedHtml = useCommand3(\"preview.stream.save-html\");\n const registerBridgeSession = useCommand3(\n \"preview.bridge.registerSession\"\n );\n const execBridgeCommand = useCommand3(\n \"preview.bridge.exec\"\n );\n const confirmBridgeCommand = useCommand3(\"preview.bridge.exec.confirm\");\n const storageBridgeCommand = useCommand3(\n \"preview.bridge.storage\"\n );\n const requestBridgeCommand = useCommand3(\n \"preview.bridge.request\"\n );\n const liveAppId = getStreamedDirectoryName(streamId, streamTitle);\n const switchToHtmlMode = useCallback(() => {\n previewStore.getState().switchToHtmlMode(`.data/liveapps/${liveAppId}/index.html`, liveAppId);\n }, [liveAppId, previewStore]);\n const setPreviewStreaming = useCallback(\n (nextStreaming) => {\n previewStore.getState().setStreaming(nextStreaming);\n },\n [previewStore]\n );\n const publishLiveAppActions = useCallback(() => {\n onLiveAppActionsChange(Array.from(liveAppActionsRef.current.values()));\n }, [onLiveAppActionsChange]);\n const rejectPendingActionInvocations = useCallback((message) => {\n for (const pending of pendingActionInvocationsRef.current.values()) {\n clearTimeout(pending.timeout);\n pending.reject(new Error(message));\n }\n pendingActionInvocationsRef.current.clear();\n }, []);\n const clearLiveAppActions = useCallback(() => {\n liveAppActionsRef.current.clear();\n publishLiveAppActions();\n }, [publishLiveAppActions]);\n useEffect(() => {\n streamHtmlRef.current = streamHtml;\n }, [streamHtml]);\n useEffect(() => {\n onActionStateChange({\n mode: \"stream\",\n streaming,\n file: {\n name: streamSnapshot?.name ?? streamTitle,\n path: streamSnapshot?.path ?? null,\n kind: \"stream\"\n }\n });\n }, [onActionStateChange, streamSnapshot, streamTitle, streaming]);\n useEvent2(\"preview.file-changed\", (data) => {\n if (!matchesPreviewFilePath(data.filePath, streamSnapshot?.path)) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n const nextHtml = bridgeToken ? injectDtRuntime(data.content, {\n theme,\n streamId,\n bridgeToken\n }) : data.content;\n setStreamHtml(nextHtml);\n streamHtmlRef.current = nextHtml;\n setPreviewStreaming(false);\n setStreamSnapshot(\n (currentSnapshot) => currentSnapshot ? {\n ...currentSnapshot,\n content: data.content\n } : currentSnapshot\n );\n switchToHtmlMode();\n });\n useEvent2(\"preview.html-chunk\", (data) => {\n if (data.streamId !== streamId) {\n return;\n }\n setStreamHtml((prev) => {\n const next = prev + data.chunk;\n streamHtmlRef.current = next;\n return next;\n });\n });\n useEvent2(\"preview.html-done\", (data) => {\n if (data.streamId !== streamId) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n setPreviewStreaming(false);\n const htmlToSave = typeof data.html === \"string\" ? data.html : streamHtmlRef.current;\n void saveStreamedHtml({\n streamId,\n title: streamTitle,\n content: htmlToSave\n }).then((snapshot) => {\n setStreamSnapshot(snapshot);\n switchToHtmlMode();\n }).catch((saveError) => {\n console.error(\"Failed to save LiveApp HTML:\", saveError);\n });\n });\n useEffect(() => {\n let cancelled = false;\n void loadStreamedHtml({ streamId, title: streamTitle }).then((snapshot) => {\n if (cancelled || !snapshot) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n const nextHtml = bridgeToken ? injectDtRuntime(snapshot.content, {\n theme,\n streamId,\n bridgeToken\n }) : snapshot.content;\n setStreamHtml(nextHtml);\n streamHtmlRef.current = nextHtml;\n setStreamSnapshot(snapshot);\n setPreviewStreaming(false);\n switchToHtmlMode();\n }).catch((loadError) => {\n if (!cancelled) {\n console.error(\"Failed to load LiveApp HTML snapshot:\", loadError);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [\n bridgeToken,\n loadStreamedHtml,\n setPreviewStreaming,\n streamId,\n streamTitle,\n switchToHtmlMode,\n theme\n ]);\n useEffect(() => {\n if (!bridgeToken) {\n onLiveAppActionInvokerChange(null);\n onLiveAppActionsChange([]);\n return;\n }\n void registerBridgeSession({ streamId, token: bridgeToken }).catch((error) => {\n console.error(\"Failed to register preview bridge session:\", error);\n });\n }, [\n bridgeToken,\n onLiveAppActionInvokerChange,\n onLiveAppActionsChange,\n registerBridgeSession,\n streamId\n ]);\n const resolveBridgeState = useCallback(\n (payload) => {\n switch (payload.selector) {\n case \"desktop.summary\":\n case \"desktop.windows\":\n case \"desktop.focusedWindow\":\n case \"theme.current\":\n return requestCoreBridgeState2(payload.selector);\n case \"preview.context\":\n return {\n windowId,\n mode: \"stream\",\n streamId,\n title: streamTitle,\n path: null\n };\n default:\n throw new Error(`Unsupported DeskTalk bridge selector: ${String(payload.selector)}`);\n }\n },\n [streamId, streamTitle, windowId]\n );\n const invokeLiveAppAction = useCallback(\n (actionName, params) => {\n if (!bridgeToken) {\n return Promise.reject(new Error(\"DeskTalk LiveApp actions are unavailable.\"));\n }\n if (!viewportRef.current) {\n return Promise.reject(new Error(\"LiveApp viewport is not ready.\"));\n }\n const requestId = `liveapp-action-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n pendingActionInvocationsRef.current.delete(requestId);\n reject(new Error(`LiveApp action \"${actionName}\" timed out.`));\n }, 1e4);\n pendingActionInvocationsRef.current.set(requestId, { resolve, reject, timeout });\n viewportRef.current?.postInvokeAction({\n type: \"desktalk:invoke-action\",\n streamId,\n token: bridgeToken,\n requestId,\n actionName,\n params: params ?? null\n });\n });\n },\n [bridgeToken, streamId]\n );\n useEffect(() => {\n if (!bridgeToken) {\n return;\n }\n onLiveAppActionInvokerChange(invokeLiveAppAction);\n return () => {\n onLiveAppActionInvokerChange(null);\n };\n }, [bridgeToken, invokeLiveAppAction, onLiveAppActionInvokerChange]);\n useEffect(() => {\n return () => {\n rejectPendingActionInvocations(\"LiveApp action invocation was interrupted.\");\n clearLiveAppActions();\n onLiveAppActionInvokerChange(null);\n };\n }, [clearLiveAppActions, onLiveAppActionInvokerChange, rejectPendingActionInvocations]);\n const handleInvokeActionResult = useCallback(\n (message) => {\n if (!bridgeToken || message.streamId !== streamId || message.token !== bridgeToken) {\n return;\n }\n const pending = pendingActionInvocationsRef.current.get(message.requestId);\n if (!pending) {\n return;\n }\n clearTimeout(pending.timeout);\n pendingActionInvocationsRef.current.delete(message.requestId);\n if (message.ok) {\n pending.resolve(message.result);\n return;\n }\n pending.reject(new Error(message.error || \"LiveApp action failed.\"));\n },\n [bridgeToken, streamId]\n );\n const handleViewportLoad = useCallback(() => {\n if (!bridgeToken) {\n return;\n }\n clearLiveAppActions();\n rejectPendingActionInvocations(\"LiveApp reloaded before the action completed.\");\n }, [bridgeToken, clearLiveAppActions, rejectPendingActionInvocations]);\n const respondToBridgeRequest = useCallback(\n (request, respond) => {\n const reply = (payload) => {\n respond({\n type: \"desktalk:bridge-response\",\n streamId: request.streamId,\n token: request.token,\n requestId: request.requestId,\n ...payload\n });\n };\n if (!bridgeToken) {\n reply({\n ok: false,\n error: \"DeskTalk bridge is only available for generated HTML previews.\"\n });\n return;\n }\n if (request.streamId !== streamId || request.token !== bridgeToken) {\n reply({ ok: false, error: \"DeskTalk bridge token mismatch.\" });\n return;\n }\n if (request.kind === \"getState\") {\n try {\n reply({\n ok: true,\n result: resolveBridgeState(request.payload)\n });\n } catch (error) {\n reply({ ok: false, error: error.message });\n }\n return;\n }\n if (request.kind === \"storage\") {\n void storageBridgeCommand({\n streamId,\n token: bridgeToken,\n liveAppId,\n request: request.payload\n }).then((result) => {\n reply({ ok: true, result });\n }).catch((error) => {\n reply({ ok: false, error: error.message });\n });\n return;\n }\n if (request.kind === \"request\") {\n void requestBridgeCommand({\n streamId,\n token: bridgeToken,\n request: request.payload\n }).then((result) => {\n reply({ ok: true, result });\n }).catch((error) => {\n reply({ ok: false, error: error.message });\n });\n return;\n }\n if (request.kind === \"actions\") {\n const payload = request.payload;\n if (payload.action === \"register\") {\n liveAppActionsRef.current.set(payload.name, {\n name: payload.name,\n description: payload.description,\n params: payload.params\n });\n publishLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n if (payload.action === \"unregister\") {\n liveAppActionsRef.current.delete(payload.name);\n publishLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n if (payload.action === \"clear\") {\n clearLiveAppActions();\n reply({ ok: true, result: { ok: true } });\n return;\n }\n reply({ ok: false, error: \"Unsupported DeskTalk actions request.\" });\n return;\n }\n if (request.kind !== \"exec\") {\n reply({ ok: false, error: `Unsupported DeskTalk bridge request: ${request.kind}` });\n return;\n }\n if (pendingBridgeConfirm) {\n reply({ ok: false, error: \"A command confirmation is already waiting for user input.\" });\n return;\n }\n void execBridgeCommand({\n ...request.payload,\n streamId,\n token: bridgeToken\n }).then((result) => {\n if (result.status === \"completed\") {\n reply({ ok: true, result: result.result });\n return;\n }\n if (result.status === \"requires_confirmation\") {\n setPendingBridgeConfirm({\n confirmationRequestId: result.requestId,\n bridgeRequestId: request.requestId,\n commandPreview: result.commandPreview,\n cwd: result.cwd,\n reason: result.reason,\n respond\n });\n return;\n }\n reply({ ok: false, error: result.reason });\n }).catch((error) => {\n reply({ ok: false, error: error.message });\n });\n },\n [\n bridgeToken,\n execBridgeCommand,\n liveAppId,\n pendingBridgeConfirm,\n requestBridgeCommand,\n publishLiveAppActions,\n clearLiveAppActions,\n resolveBridgeState,\n storageBridgeCommand,\n streamId\n ]\n );\n const handleBridgeConfirmation = useCallback(\n async (confirmed) => {\n if (!pendingBridgeConfirm || !bridgeToken) {\n return;\n }\n const respond = pendingBridgeConfirm.respond;\n const requestId = pendingBridgeConfirm.bridgeRequestId;\n const token = bridgeToken;\n const confirmationRequestId = pendingBridgeConfirm.confirmationRequestId;\n setPendingBridgeConfirm(null);\n try {\n const result = await confirmBridgeCommand({\n requestId: confirmationRequestId,\n confirmed\n });\n respond({\n type: \"desktalk:bridge-response\",\n streamId,\n token,\n requestId,\n ok: result.status === \"completed\",\n result: result.status === \"completed\" ? result.result : void 0,\n error: result.status === \"completed\" ? void 0 : result.reason\n });\n } catch (error) {\n respond({\n type: \"desktalk:bridge-response\",\n streamId,\n token,\n requestId,\n ok: false,\n error: error.message\n });\n }\n },\n [bridgeToken, confirmBridgeCommand, pendingBridgeConfirm, streamId]\n );\n const handleRefreshFromFile = useCallback(() => {\n void loadStreamedHtml({ streamId, title: streamTitle }).then((snapshot) => {\n if (!snapshot) {\n throw new Error(\"Saved LiveApp HTML file was not found.\");\n }\n const nextHtml = bridgeToken ? injectDtRuntime(snapshot.content, {\n theme,\n streamId,\n bridgeToken\n }) : snapshot.content;\n setStreamHtml(nextHtml);\n streamHtmlRef.current = nextHtml;\n setStreamSnapshot(snapshot);\n }).catch((loadError) => {\n console.error(\"Failed to refresh LiveApp HTML from file:\", loadError);\n });\n }, [bridgeToken, loadStreamedHtml, streamId, streamTitle, theme]);\n return /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(\n PreviewToolbar,\n {\n filename: streamTitle,\n filepath: streamSnapshot?.path,\n mode: \"stream\",\n streaming,\n onRefreshFromFile: !streaming && streamSnapshot ? handleRefreshFromFile : void 0\n }\n ),\n /* @__PURE__ */ jsx(\n HtmlViewport,\n {\n ref: viewportRef,\n html: streamHtml,\n streaming,\n theme,\n onBridgeRequest: respondToBridgeRequest,\n onInvokeActionResult: handleInvokeActionResult,\n onLoad: handleViewportLoad\n }\n ),\n pendingBridgeConfirm ? /* @__PURE__ */ jsx(\n BridgeConfirmDialog,\n {\n command: pendingBridgeConfirm.commandPreview,\n cwd: pendingBridgeConfirm.cwd,\n risk: pendingBridgeConfirm.reason,\n onConfirm: () => {\n void handleBridgeConfirmation(true);\n },\n onCancel: () => {\n void handleBridgeConfirmation(false);\n }\n }\n ) : null\n ] });\n}\n\n// src/store.ts\nfunction createPreviewStore(initialMode, initialPath = null, liveAppId = null) {\n return createStore((set) => ({\n mode: initialMode,\n streaming: initialMode === \"stream\",\n resolvedHtmlPath: initialMode === \"html\" ? initialPath : null,\n resolvedLiveAppId: initialMode === \"html\" ? liveAppId : null,\n setStreaming(streaming) {\n set({ streaming });\n },\n switchToHtmlMode(path, liveAppId2) {\n set({\n mode: \"html\",\n streaming: false,\n resolvedHtmlPath: path,\n resolvedLiveAppId: liveAppId2 ?? null\n });\n }\n }));\n}\n\n// src/PreviewApp.module.css\nvar PreviewApp_default = {\n root: \"PreviewApp_root\",\n imageViewportWrap: \"PreviewApp_imageViewportWrap\",\n emptyState: \"PreviewApp_emptyState\",\n errorState: \"PreviewApp_errorState\",\n errorIcon: \"PreviewApp_errorIcon\"\n};\n\n// src/frontend.tsx\nvar ZOOM_STEP = 0.25;\nvar MIN_ZOOM = 0.1;\nvar MAX_ZOOM = 10;\nfunction detectMode(args) {\n if (args?.streamId && typeof args.streamId === \"string\") return \"stream\";\n if (typeof args?.path === \"string\") {\n const ext = args.path.toLowerCase();\n if (ext.endsWith(\".html\") || ext.endsWith(\".htm\")) return \"html\";\n }\n return \"image\";\n}\nfunction PreviewApp({\n initialPath,\n initialMode,\n liveAppId,\n streamId,\n streamTitle,\n bridgeToken,\n theme: initialTheme,\n windowId\n}) {\n const storeRef = useRef(null);\n if (!storeRef.current) {\n storeRef.current = createPreviewStore(initialMode, initialPath ?? null, liveAppId ?? null);\n }\n const previewStore = storeRef.current;\n const mode = useStore(previewStore, (state) => state.mode);\n const storeStreaming = useStore(previewStore, (state) => state.streaming);\n const resolvedHtmlPath = useStore(previewStore, (state) => state.resolvedHtmlPath);\n const resolvedLiveAppId = useStore(previewStore, (state) => state.resolvedLiveAppId);\n const [currentFile, setCurrentFile] = useState(null);\n const [siblings, setSiblings] = useState(null);\n const [zoom, setZoom] = useState(1);\n const [error, setError] = useState(null);\n const viewportRef = useRef(null);\n const liveAppActionInvokerRef = useRef(null);\n const [htmlActionState, setHtmlActionState] = useState({\n mode: \"html\",\n streaming: false,\n file: null\n });\n const [streamActionState, setStreamActionState] = useState({\n mode: \"stream\",\n streaming: initialMode === \"stream\",\n file: streamTitle ? {\n name: streamTitle,\n path: null,\n kind: \"stream\"\n } : null\n });\n const [liveAppActions, setLiveAppActions] = useState([]);\n const [theme, setTheme] = useState(initialTheme);\n useEffect(() => {\n setTheme(initialTheme);\n }, [initialTheme]);\n useEffect(() => {\n const handleThemeUpdate = (event) => {\n const detail = event.detail;\n if (!detail || detail.windowId !== windowId || detail.miniAppId !== \"preview\") {\n return;\n }\n setTheme({\n accentColor: detail.theme.accentColor,\n mode: detail.theme.mode === \"light\" ? \"light\" : \"dark\"\n });\n };\n window.addEventListener(\"desktalk:theme-update\", handleThemeUpdate);\n return () => window.removeEventListener(\"desktalk:theme-update\", handleThemeUpdate);\n }, [windowId]);\n const openFile = useCommand4(\"preview.open\");\n const getSiblings = useCommand4(\"preview.siblings\");\n const nextFile = useCommand4(\"preview.next\");\n const previousFile = useCommand4(\"preview.previous\");\n const handleFileOpened = useCallback(\n (file) => {\n setError(null);\n setCurrentFile(file);\n setZoom(1);\n getSiblings({ path: file.path }).then(setSiblings).catch(console.error);\n },\n [getSiblings]\n );\n useEffect(() => {\n if (!initialPath) return;\n if (mode === \"image\") {\n openFile({ path: initialPath }).then(handleFileOpened).catch(console.error);\n }\n }, [handleFileOpened, initialPath, mode, openFile]);\n const handleZoomIn = useCallback(() => {\n setZoom((z) => Math.min(MAX_ZOOM, z + ZOOM_STEP));\n }, []);\n const handleZoomOut = useCallback(() => {\n setZoom((z) => Math.max(MIN_ZOOM, z - ZOOM_STEP));\n }, []);\n const handleFitToWindow = useCallback(() => {\n if (!currentFile || !viewportRef.current) {\n setZoom(1);\n return;\n }\n const container = viewportRef.current;\n const rect = container.getBoundingClientRect();\n const scaleX = rect.width / currentFile.width;\n const scaleY = rect.height / currentFile.height;\n setZoom(Math.min(scaleX, scaleY, 1));\n }, [currentFile]);\n const handleActualSize = useCallback(() => {\n setZoom(1);\n }, []);\n const handleZoomChange = useCallback((newZoom) => {\n setZoom(Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, newZoom)));\n }, []);\n const handlePan = useCallback((direction) => {\n const container = document.querySelector(\"[data-preview-viewport]\");\n if (container) {\n const el = container;\n el.panInDirection?.(direction);\n }\n }, []);\n const handleNext = useCallback(async () => {\n if (!currentFile) return;\n try {\n const file = await nextFile({ currentPath: currentFile.path });\n setCurrentFile(file);\n setZoom(1);\n const sibs = await getSiblings({ path: file.path });\n setSiblings(sibs);\n } catch (err) {\n console.error(\"Failed to load next file:\", err);\n }\n }, [currentFile, nextFile, getSiblings]);\n const handlePrevious = useCallback(async () => {\n if (!currentFile) return;\n try {\n const file = await previousFile({ currentPath: currentFile.path });\n setCurrentFile(file);\n setZoom(1);\n const sibs = await getSiblings({ path: file.path });\n setSiblings(sibs);\n } catch (err) {\n console.error(\"Failed to load previous file:\", err);\n }\n }, [currentFile, previousFile, getSiblings]);\n const handleLiveAppActionInvokerChange = useCallback(\n (invoker) => {\n liveAppActionInvokerRef.current = invoker;\n },\n []\n );\n const handleInvokeLiveAppAction = useCallback(\n async (actionName, params) => {\n const invoker = liveAppActionInvokerRef.current;\n if (!invoker) {\n throw new Error(`LiveApp action \"${actionName}\" is unavailable.`);\n }\n return invoker(actionName, params);\n },\n []\n );\n useEffect(() => {\n if (mode !== \"image\") return;\n const handleKeyDown = (e) => {\n if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return;\n switch (e.key) {\n case \"+\":\n case \"=\":\n e.preventDefault();\n handleZoomIn();\n break;\n case \"-\":\n e.preventDefault();\n handleZoomOut();\n break;\n case \"0\":\n e.preventDefault();\n handleFitToWindow();\n break;\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [mode, handleZoomIn, handleZoomOut, handleFitToWindow]);\n const canGoPrev = siblings !== null && siblings.files.length > 1;\n const canGoNext = siblings !== null && siblings.files.length > 1;\n const zoomPercent = Math.round(zoom * 100);\n const previewActionState = mode === \"image\" ? {\n mode,\n streaming: false,\n file: currentFile ? {\n name: currentFile.name,\n path: currentFile.path,\n kind: \"image\",\n mimeType: currentFile.mimeType\n } : null\n } : mode === \"html\" ? htmlActionState : {\n ...streamActionState,\n streaming: storeStreaming\n };\n return /* @__PURE__ */ jsx(\n PreviewActions,\n {\n state: previewActionState,\n onFileOpened: handleFileOpened,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWindow: handleFitToWindow,\n onActualSize: handleActualSize,\n onPan: handlePan,\n onPrevious: handlePrevious,\n onNext: handleNext,\n liveAppActions,\n onInvokeLiveAppAction: handleInvokeLiveAppAction,\n children: /* @__PURE__ */ jsx(\"div\", { className: PreviewApp_default.root, children: mode === \"image\" ? currentFile ? /* @__PURE__ */ jsxs(Fragment2, { children: [\n /* @__PURE__ */ jsx(\n PreviewToolbar,\n {\n filename: currentFile.name,\n mode: \"image\",\n zoomPercent,\n canGoPrev,\n canGoNext,\n onZoomIn: handleZoomIn,\n onZoomOut: handleZoomOut,\n onFitToWindow: handleFitToWindow,\n onActualSize: handleActualSize,\n onPrevious: handlePrevious,\n onNext: handleNext\n }\n ),\n /* @__PURE__ */ jsx(\"div\", { ref: viewportRef, \"data-preview-viewport\": \"\", className: PreviewApp_default.imageViewportWrap, children: /* @__PURE__ */ jsx(\n ImageViewport,\n {\n dataUrl: currentFile.dataUrl,\n zoom,\n onZoomChange: handleZoomChange\n }\n ) })\n ] }) : error ? /* @__PURE__ */ jsxs(\"div\", { className: PreviewApp_default.errorState, children: [\n /* @__PURE__ */ jsx(\"span\", { className: PreviewApp_default.errorIcon, children: \"\\u26A0\" }),\n /* @__PURE__ */ jsx(\"span\", { children: error })\n ] }) : /* @__PURE__ */ jsx(\"div\", { className: PreviewApp_default.emptyState, children: \"No image open\" }) : mode === \"html\" ? /* @__PURE__ */ jsx(\n HtmlPreviewPane,\n {\n initialPath: resolvedHtmlPath ?? initialPath,\n liveAppId: resolvedLiveAppId ?? liveAppId,\n bridgeToken,\n theme,\n onActionStateChange: setHtmlActionState,\n onLiveAppActionsChange: setLiveAppActions,\n onLiveAppActionInvokerChange: handleLiveAppActionInvokerChange\n }\n ) : /* @__PURE__ */ jsx(\n StreamPreviewPane,\n {\n previewStore,\n streamId,\n streamTitle: streamTitle ?? \"HTML Preview\",\n bridgeToken,\n theme,\n onActionStateChange: setStreamActionState,\n onLiveAppActionsChange: setLiveAppActions,\n onLiveAppActionInvokerChange: handleLiveAppActionInvokerChange\n }\n ) })\n }\n );\n}\nfunction activate(ctx) {\n const themedContext = ctx;\n const initialMode = detectMode(ctx.args);\n const initialPath = typeof ctx.args?.path === \"string\" ? ctx.args.path : void 0;\n const liveAppId = typeof ctx.args?.liveAppId === \"string\" ? ctx.args.liveAppId : void 0;\n const streamId = typeof ctx.args?.streamId === \"string\" ? ctx.args.streamId : void 0;\n const streamTitle = typeof ctx.args?.title === \"string\" ? ctx.args.title : void 0;\n const bridgeToken = typeof ctx.args?.bridgeToken === \"string\" ? ctx.args.bridgeToken : void 0;\n const theme = {\n accentColor: themedContext.theme?.accentColor ?? \"#7c6ff7\",\n mode: themedContext.theme?.mode === \"light\" ? \"light\" : \"dark\"\n };\n const root = createRoot(ctx.root);\n root.render(\n /* @__PURE__ */ jsx(WindowIdProvider, { windowId: ctx.windowId, children: /* @__PURE__ */ jsx(MiniAppIdProvider, { miniAppId: ctx.miniAppId, children: /* @__PURE__ */ jsx(\n PreviewApp,\n {\n initialPath,\n initialMode,\n liveAppId,\n streamId,\n streamTitle,\n bridgeToken,\n theme,\n windowId: ctx.windowId\n }\n ) }) })\n );\n return {\n deactivate() {\n root.unmount();\n }\n };\n}\nexport {\n activate\n};\n//# sourceMappingURL=frontend.js.map\n"],"names":["serializeForInlineScript","value","createHtmlBridgeScript","streamId","bridgeToken","serializedStreamId","serializedBridgeToken","styleId","style","_mod","react_default","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","_mod2","createRoot","createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","PreviewToolbar_default","_mod3","jsx","jsxs","Fragment2","PreviewToolbar","filename","filepath","mode","zoomPercent","canGoPrev","canGoNext","onZoomIn","onZoomOut","onFitToWindow","onActualSize","onPrevious","onNext","streaming","onRefreshFromFile","onEditSource","simplifyPath","ImageViewport_default","PAN_STEP","ImageViewport","dataUrl","zoom","onZoomChange","containerRef","panX","setPanX","panY","setPanY","isDragging","setIsDragging","dragStart","handleWheel","e","delta","newZoom","container","handleMouseDown","handleMouseMove","dx","dy","handleMouseUp","handleKeyDown","y","x","panInDirection","direction","el","HtmlViewport_default","LIGHT_IFRAME_BACKGROUND","DARK_IFRAME_BACKGROUND","HtmlViewport","html","src","onBridgeRequest","onInvokeActionResult","onLoad","theme","ref","iframeRef","writtenLengthRef","docOpenRef","wasStreamingRef","syncThemeToIframe","iframe","backgroundColor","doc","message","handleMessage","event","data","response","wasStreaming","newContent2","newContent","normalizePreviewPath","path","buildDtfsUrl","options","encodedPath","segment","params","query","isLiveAppPath","normalizedPath","matchesPreviewFilePath","changedPath","currentPath","normalizedChangedPath","normalizedCurrentPath","BridgeConfirmDialog_default","BridgeConfirmDialog","command","cwd","risk","onConfirm","onCancel","HtmlPreviewPane_default","requestCoreBridgeState","result","error","resolved","getFileName","normalized","HtmlPreviewPane","initialPath","liveAppId","onActionStateChange","onLiveAppActionsChange","onLiveAppActionInvokerChange","windowId","useWindowId","openMiniApp","useOpenMiniApp","viewportRef","liveAppActionsRef","pendingActionInvocationsRef","reloadKey","setReloadKey","pendingBridgeConfirm","setPendingBridgeConfirm","registerBridgeSession","useCommand","execBridgeCommand","confirmBridgeCommand","storageBridgeCommand","requestBridgeCommand","fileName","shouldInjectRuntime","canEditLiveAppSource","publishLiveAppActions","rejectPendingActionInvocations","pending","clearLiveAppActions","iframeSrc","useEvent","registerError","resolveBridgeState","payload","invokeLiveAppAction","actionName","requestId","resolve","reject","timeout","handleInvokeActionResult","handleViewportLoad","respondToBridgeRequest","request","respond","reply","bridgeError","handleBridgeConfirmation","confirmed","confirmationRequestId","handleEditSource","PreviewActions","children","onFileOpened","onPan","liveAppActions","onInvokeLiveAppAction","openFile","useCommand2","handleOpen","file","handleGetState","handleZoomIn","handleZoomOut","handleFitToWindow","handleActualSize","handlePan","handlePrevious","handleNext","isImage","mergedActions","builtinActions","merged","action","ActionsProvider","Action","DT_THEME_TAG_PATTERN","DT_THEME_SYNC_TAG_PATTERN","DT_UI_TAG_PATTERN","DT_BRIDGE_TAG_PATTERN","STREAM_PREAMBLE_HEAD_PATTERN","stripDtInjections","UI_BUNDLE_SCRIPT_TAG","createThemeLinkTag","accentColor","createThemeSyncScript","injectIntoHtmlHead","snippet","headMatch","insertPos","injectDtRuntime","cleanHtml","sanitizeTitleSegment","title","getStreamedDirectoryName","requestCoreBridgeState2","StreamPreviewPane","previewStore","streamTitle","useWindowId2","streamHtml","setStreamHtml","streamSnapshot","setStreamSnapshot","streamHtmlRef","loadStreamedHtml","useCommand3","saveStreamedHtml","switchToHtmlMode","setPreviewStreaming","nextStreaming","useEvent2","nextHtml","currentSnapshot","prev","next","htmlToSave","snapshot","saveError","cancelled","loadError","token","handleRefreshFromFile","createPreviewStore","initialMode","set","liveAppId2","PreviewApp_default","ZOOM_STEP","MIN_ZOOM","MAX_ZOOM","detectMode","args","ext","PreviewApp","initialTheme","storeRef","storeStreaming","resolvedHtmlPath","resolvedLiveAppId","currentFile","setCurrentFile","siblings","setSiblings","setZoom","setError","liveAppActionInvokerRef","htmlActionState","setHtmlActionState","streamActionState","setStreamActionState","setLiveAppActions","setTheme","handleThemeUpdate","detail","useCommand4","getSiblings","nextFile","previousFile","handleFileOpened","z","rect","scaleX","scaleY","handleZoomChange","sibs","err","handleLiveAppActionInvokerChange","invoker","handleInvokeLiveAppAction","previewActionState","activate","ctx","themedContext","root","WindowIdProvider","MiniAppIdProvider"],"mappings":"wGAAA,SAASA,GAAyBC,EAAO,CACrC,OAAO,KAAK,UAAUA,CAAK,EAAE,QAAQ,KAAM,SAAS,CACxD,CACO,SAASC,GAAuBC,EAAUC,EAAa,CAC1D,MAAMC,EAAqBL,GAAyBG,CAAQ,EACtDG,EAAwBN,GAAyBI,CAAW,EAClE,MAAO,CACH,0BACA,WACA,sBAAsBC,CAAkB,IACxC,mBAAmBC,CAAqB,IACxC,4BACA,+BACA,sCACA,sCACA,GACA,oCACA,8EACA,MACA,GACA,wEACA,2EACA,8DACA,oFACA,iBACA,yBACA,wCACA,8FACA,WACA,QACA,eACA,iCACA,2DACA,6EACA,SACA,MACA,GACA,sCACA,gDACA,yEACA,kDACA,qCACA,mEACA,gCACA,GACA,8DACA,oCACA,2CACA,oBACA,iBACA,qBACA,gBACA,mBACA,iBACA,UACA,MACA,GACA,6CACA,6BACA,yBACA,sHACA,WACA,6BACA,0HACA,WACA,qBACA,kHACA,WACA,uBACA,8HACA,WACA,gCACA,wIACA,WACA,oBACA,0HACA,WACA,wBACA,8HACA,WACA,oBACA,+GACA,WACA,UACA,MACA,GACA,oCACA,6BACA,6DACA,8FACA,UACA,wFACA,qBACA,0FACA,UACA,wDACA,gGACA,UACA,sDACA,oCACA,8BACA,gBACA,iGACA,8GACA,kCACA,SACA,yBACA,4EACA,+BACA,4FACA,UACA,+CACA,yGACA,SACA,gBACA,gCACA,8EACA,SACA,QACA,GACA,oCACA,kBACA,8FACA,SACA,yBACA,4FACA,SACA,qBACA,mGACA,SACA,eACA,yFACA,SACA,yBACA,8CACA,SACA,QACA,GACA,oDACA,kCACA,wFACA,yDACA,+DACA,qCACA,2CACA,qDACA,0BACA,kDACA,kBACA,UACA,gGACA,gBACA,QACA,6DACA,8DACA,sBACA,oCACA,iDACA,oBACA,iBACA,wCACA,qBACA,oFACA,iBACA,gBACA,QACA,wBACA,mDACA,4BACA,sCACA,mDACA,sBACA,mBACA,0CACA,sBACA,oBACA,mBACA,WACA,4BACA,sCACA,m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"}
|