@dimina-kit/devtools 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main/api.d.ts +3 -1
- package/dist/main/api.d.ts.map +1 -1
- package/dist/main/api.js +2 -0
- package/dist/main/api.js.map +1 -1
- package/dist/main/app/app.d.ts +2 -0
- package/dist/main/app/app.d.ts.map +1 -1
- package/dist/main/app/app.js +29 -7
- package/dist/main/app/app.js.map +1 -1
- package/dist/main/services/automation/index.d.ts +2 -1
- package/dist/main/services/automation/index.d.ts.map +1 -1
- package/dist/main/services/automation/index.js +28 -4
- package/dist/main/services/automation/index.js.map +1 -1
- package/dist/main/services/simulator-storage/index.d.ts +20 -0
- package/dist/main/services/simulator-storage/index.d.ts.map +1 -0
- package/dist/main/services/simulator-storage/index.js +136 -0
- package/dist/main/services/simulator-storage/index.js.map +1 -0
- package/dist/main/services/update/github-release-checker.d.ts +49 -0
- package/dist/main/services/update/github-release-checker.d.ts.map +1 -0
- package/dist/main/services/update/github-release-checker.js +248 -0
- package/dist/main/services/update/github-release-checker.js.map +1 -0
- package/dist/main/services/update/index.d.ts +5 -0
- package/dist/main/services/update/index.d.ts.map +1 -0
- package/dist/main/services/update/index.js +3 -0
- package/dist/main/services/update/index.js.map +1 -0
- package/dist/main/services/update/update-manager.d.ts +37 -0
- package/dist/main/services/update/update-manager.d.ts.map +1 -0
- package/dist/main/services/update/update-manager.js +90 -0
- package/dist/main/services/update/update-manager.js.map +1 -0
- package/dist/preload/instrumentation/index.d.ts +0 -1
- package/dist/preload/instrumentation/index.d.ts.map +1 -1
- package/dist/preload/instrumentation/index.js +0 -1
- package/dist/preload/instrumentation/index.js.map +1 -1
- package/dist/preload/windows/main.d.ts +0 -1
- package/dist/preload/windows/main.d.ts.map +1 -1
- package/dist/preload/windows/main.js +0 -1
- package/dist/preload/windows/main.js.map +1 -1
- package/dist/preload/windows/simulator.js +1 -109
- package/dist/preload/windows/simulator.js.map +4 -4
- package/dist/renderer/assets/index-D_HFRqZA.js +46 -0
- package/dist/renderer/assets/index-D_HFRqZA.js.map +1 -0
- package/dist/renderer/assets/{input-B7sz4y1r.js → input-VLotwer2.js} +2 -2
- package/dist/renderer/assets/{input-B7sz4y1r.js.map → input-VLotwer2.js.map} +1 -1
- package/dist/renderer/assets/ipc-transport-6Gy3FXIL.css +1 -0
- package/dist/renderer/assets/{ipc-transport-L_WD9x12.js → ipc-transport-COKIC6Ny.js} +6 -6
- package/dist/renderer/assets/ipc-transport-COKIC6Ny.js.map +1 -0
- package/dist/renderer/assets/{popover-CzMIs2j4.js → popover-Dn0RwMLI.js} +2 -2
- package/dist/renderer/assets/{popover-CzMIs2j4.js.map → popover-Dn0RwMLI.js.map} +1 -1
- package/dist/renderer/assets/{select-BBXJVe8R.js → select-DzIsLaKX.js} +2 -2
- package/dist/renderer/assets/{select-BBXJVe8R.js.map → select-DzIsLaKX.js.map} +1 -1
- package/dist/renderer/assets/{settings-Db1pvrBJ.js → settings-CD-dacWB.js} +2 -2
- package/dist/renderer/assets/{settings-Db1pvrBJ.js.map → settings-CD-dacWB.js.map} +1 -1
- package/dist/renderer/assets/settings-api-BV9MPckG.js +2 -0
- package/dist/renderer/assets/{settings-api-DJ1M-CNt.js.map → settings-api-BV9MPckG.js.map} +1 -1
- package/dist/renderer/assets/{workbenchSettings-BnQsvWkQ.js → workbenchSettings-ClwgsvJL.js} +2 -2
- package/dist/renderer/assets/{workbenchSettings-BnQsvWkQ.js.map → workbenchSettings-ClwgsvJL.js.map} +1 -1
- package/dist/renderer/entries/main/index.html +5 -5
- package/dist/renderer/entries/popover/index.html +5 -5
- package/dist/renderer/entries/settings/index.html +5 -5
- package/dist/renderer/entries/workbench-settings/index.html +4 -4
- package/dist/shared/ipc-channels.d.ts +26 -3
- package/dist/shared/ipc-channels.d.ts.map +1 -1
- package/dist/shared/ipc-channels.js +10 -3
- package/dist/shared/ipc-channels.js.map +1 -1
- package/dist/shared/types.d.ts +27 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/preload/instrumentation/storage.d.ts +0 -2
- package/dist/preload/instrumentation/storage.d.ts.map +0 -1
- package/dist/preload/instrumentation/storage.js +0 -106
- package/dist/preload/instrumentation/storage.js.map +0 -1
- package/dist/renderer/assets/index-kcmIQPCg.js +0 -2
- package/dist/renderer/assets/index-kcmIQPCg.js.map +0 -1
- package/dist/renderer/assets/ipc-transport-C9-PPTGn.css +0 -1
- package/dist/renderer/assets/ipc-transport-L_WD9x12.js.map +0 -1
- package/dist/renderer/assets/settings-api-DJ1M-CNt.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/preload/runtime/bridge.ts", "../../../src/shared/ipc-channels.ts", "../../../src/preload/runtime/host.ts", "../../../src/preload/instrumentation/console.ts", "../../../src/preload/instrumentation/disposable.ts", "../../../src/preload/instrumentation/
|
|
4
|
-
"sourcesContent": ["import { contextBridge } from 'electron'\n\nexport interface WxmlNode {\n tagName: string\n attrs: Record<string, string>\n children: WxmlNode[]\n text?: string\n sid?: string\n}\n\nexport interface Snapshot<T> {\n gen: number\n ready: boolean\n data: T\n}\n\nexport interface StorageSnapshot extends Snapshot<Record<string, string>> {\n namespace: string | null\n}\n\ntype RefreshTarget = 'wxml' | 'appdata' | 'storage'\n\ninterface SimulatorBridgeState {\n appdata: Snapshot<Record<string, unknown>>\n storage: StorageSnapshot\n wxml: Snapshot<WxmlNode | WxmlNode[] | null>\n refreshHandler: ((type: RefreshTarget) => void) | null\n}\n\nconst state: SimulatorBridgeState = {\n appdata: { gen: 0, ready: true, data: {} },\n storage: { gen: 0, ready: false, namespace: null, data: {} },\n wxml: { gen: 0, ready: false, data: null },\n refreshHandler: null,\n}\n\nlet highlightOverlay: HTMLDivElement | null = null\nlet exposedApi: Record<string, unknown> | null = null\n\nfunction clone<T>(value: T): T {\n try {\n return JSON.parse(JSON.stringify(value)) as T\n } catch {\n return value\n }\n}\n\nfunction getPageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction ensureOverlay(doc: Document): HTMLDivElement {\n if (highlightOverlay && highlightOverlay.ownerDocument === doc) return highlightOverlay\n highlightOverlay = doc.createElement('div')\n highlightOverlay.id = '__simulator-highlight'\n highlightOverlay.style.cssText =\n 'position:fixed;pointer-events:none;z-index:999999;' +\n 'border:2px solid #1a73e8;background:rgba(26,115,232,0.12);' +\n 'transition:all 0.1s ease;display:none;border-radius:2px;'\n doc.body.appendChild(highlightOverlay)\n return highlightOverlay\n}\n\nfunction highlightElement(sid: string): void {\n const iframe = getPageIframe()\n if (!iframe?.contentDocument) return\n const doc = iframe.contentDocument\n const el = doc.querySelector(`[data-sid=\"${sid}\"]`) as HTMLElement | null\n if (!el) return\n const rect = el.getBoundingClientRect()\n const overlay = ensureOverlay(doc)\n overlay.style.left = `${rect.left}px`\n overlay.style.top = `${rect.top}px`\n overlay.style.width = `${rect.width}px`\n overlay.style.height = `${rect.height}px`\n overlay.style.display = 'block'\n}\n\nfunction unhighlightElement(): void {\n if (highlightOverlay) highlightOverlay.style.display = 'none'\n}\n\nexport { highlightElement, unhighlightElement }\n\nfunction buildApi(): Record<string, unknown> {\n return {\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getAppdataGen: () => state.appdata.gen,\n getStorageSnapshot: () => clone(state.storage),\n getStorageGen: () => state.storage.gen,\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n getWxmlGen: () => state.wxml.gen,\n refresh: (type: RefreshTarget) => state.refreshHandler?.(type),\n highlightElement,\n unhighlightElement,\n }\n}\n\nexport const simulatorBridge = state\n\nexport function setRefreshHandler(handler: ((type: RefreshTarget) => void) | null): void {\n state.refreshHandler = handler\n}\n\nexport function setAppDataSnapshot(data: Record<string, unknown>): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: clone(data),\n }\n}\n\nexport function clearAppDataSnapshot(): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: {},\n }\n}\n\nexport function setStorageSnapshot(namespace: string | null, data: Record<string, string>): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: namespace !== null,\n namespace,\n data: clone(data),\n }\n}\n\nexport function clearStorageSnapshot(): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: false,\n namespace: null,\n data: {},\n }\n}\n\nexport function setWxmlSnapshot(data: WxmlNode | WxmlNode[] | null, ready = true): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready,\n data: clone(data),\n }\n}\n\nexport function clearWxmlSnapshot(): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready: false,\n data: null,\n }\n}\n\nexport function resetBridgeState(): void {\n clearAppDataSnapshot()\n clearStorageSnapshot()\n clearWxmlSnapshot()\n unhighlightElement()\n state.refreshHandler = null\n}\n\nexport function installSimulatorBridge(): () => void {\n if (!exposedApi) {\n exposedApi = buildApi()\n }\n\n try {\n contextBridge.exposeInMainWorld('__simulatorData', {\n ...exposedApi,\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getStorageSnapshot: () => clone(state.storage),\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n })\n } catch {\n ;(window as unknown as Record<string, unknown>).__simulatorData = exposedApi\n }\n\n return () => {\n resetBridgeState()\n const windowRef = window as unknown as Record<string, unknown>\n if (windowRef.__simulatorData === exposedApi) {\n delete windowRef.__simulatorData\n }\n }\n}\n", "/**\n * Centralised IPC channel name constants for dimina-devtools.\n *\n * Every raw channel string used across main, renderer, preload and e2e code\n * should reference one of these constants so that renaming a channel only\n * requires a single edit.\n */\n\n// \u2500\u2500 Simulator (preload \u2192 host / renderer \u2194 main) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SimulatorChannel = {\n Attach: 'simulator:attach',\n Detach: 'simulator:detach',\n Resize: 'simulator:resize',\n SetVisible: 'simulator:setVisible',\n Console: 'simulator:console',\n Wxml: 'simulator:wxml',\n AppData: 'simulator:appdata',\n AppDataAll: 'simulator:appdata-all',\n Storage: 'simulator:storage',\n StorageAll: 'simulator:storage-all',\n} as const\n\n// \u2500\u2500 Workbench \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchChannel = {\n GetPanelConfig: 'workbench:getPanelConfig',\n GetApiNamespaces: 'workbench:getApiNamespaces',\n Reset: 'workbench:reset',\n} as const\n\n// \u2500\u2500 Workbench settings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchSettingsChannel = {\n Get: 'workbenchSettings:get',\n Save: 'workbenchSettings:save',\n SetTheme: 'workbenchSettings:setTheme',\n GetCdpStatus: 'workbenchSettings:getCdpStatus',\n SetVisible: 'workbenchSettings:setVisible',\n Init: 'workbenchSettings:init',\n} as const\n\n// \u2500\u2500 Project session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectChannel = {\n Open: 'project:open',\n Close: 'project:close',\n GetPages: 'project:getPages',\n GetCompileConfig: 'project:getCompileConfig',\n SaveCompileConfig: 'project:saveCompileConfig',\n Status: 'project:status',\n} as const\n\n// \u2500\u2500 Project list / workspace \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectsChannel = {\n List: 'projects:list',\n Add: 'projects:add',\n Remove: 'projects:remove',\n} as const\n\n// \u2500\u2500 Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DialogChannel = {\n OpenDirectory: 'dialog:openDirectory',\n} as const\n\n// \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PanelChannel = {\n List: 'panel:list',\n Eval: 'panel:eval',\n Select: 'panel:select',\n SelectSimulator: 'panel:selectSimulator',\n} as const\n\n// \u2500\u2500 Popover \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PopoverChannel = {\n Show: 'popover:show',\n Hide: 'popover:hide',\n Relaunch: 'popover:relaunch',\n Closed: 'popover:closed',\n Init: 'popover:init',\n} as const\n\n// \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ToolbarChannel = {\n GetActions: 'toolbar:getActions',\n ActionsChanged: 'toolbar:actionsChanged',\n /** Prefix for dynamic action channels: `toolbar:action:${actionId}` */\n ActionPrefix: 'toolbar:action:',\n} as const\n\n// \u2500\u2500 Window \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WindowChannel = {\n NavigateBack: 'window:navigateBack',\n} as const\n\n// \u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const AppChannel = {\n GetPreloadPath: 'app:getPreloadPath',\n GetBranding: 'app:getBranding',\n} as const\n\n// \u2500\u2500 Bridge (renderer \u2194 preload, webview.send / sendToHost) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BridgeChannel = {\n WxmlRefreshRequest: 'wxml:refresh:request',\n AppDataGetAllRequest: 'appdata:getAll:request',\n AppDataGetAllResponse: 'appdata:getAll:response',\n StorageGetAllRequest: 'storage:getAll:request',\n} as const\n\n// \u2500\u2500 Embedded settings overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SettingsChannel = {\n SetVisible: 'settings:setVisible',\n ConfigChanged: 'settings:configChanged',\n ProjectSettingsChanged: 'settings:projectSettingsChanged',\n Init: 'settings:init',\n Closed: 'settings:closed',\n Changed: 'settings:changed',\n} as const\n", "import { ipcRenderer } from 'electron'\n\nexport function sendToHost(channel: string, data: unknown): void {\n ipcRenderer.sendToHost(channel, data)\n}\n\nexport function safeSerialize(val: unknown): unknown {\n if (val === null || val === undefined) return val\n if (typeof val === 'function') return `[Function: ${(val as { name?: string }).name || 'anonymous'}]`\n if (typeof val !== 'object') return val\n if (val instanceof Error) return { __isError: true, message: val.message, stack: val.stack }\n try {\n return structuredClone(val)\n } catch {\n // expected: some objects (e.g. DOM nodes, proxies) cannot be structuredCloned\n }\n try {\n return JSON.parse(JSON.stringify(val))\n } catch {\n // expected: circular references or non-serializable values\n }\n return String(val)\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost, safeSerialize } from '../runtime/host.js'\n\ntype ConsoleLevel = 'log' | 'warn' | 'error' | 'info' | 'debug'\n\nexport function installConsoleInstrumentation(): () => void {\n const consoleRef = console as unknown as Record<string, (...args: unknown[]) => void>\n const originals = new Map<ConsoleLevel, (...args: unknown[]) => void>()\n const levels: ConsoleLevel[] = ['log', 'warn', 'error', 'info', 'debug']\n\n for (const level of levels) {\n const original = consoleRef[level]?.bind(console)\n if (!original) continue\n originals.set(level, original)\n consoleRef[level] = (...args: unknown[]) => {\n original(...args)\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level,\n args: args.map(safeSerialize),\n ts: Date.now(),\n })\n }\n }\n\n const handleError = (event: ErrorEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n stack: event.error?.stack,\n }],\n ts: Date.now(),\n })\n }\n\n const handleRejection = (event: PromiseRejectionEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{ message: 'Unhandled Promise Rejection', reason: String(event.reason) }],\n ts: Date.now(),\n })\n }\n\n window.addEventListener('error', handleError)\n window.addEventListener('unhandledrejection', handleRejection)\n\n return () => {\n for (const [level, original] of originals) {\n consoleRef[level] = original\n }\n window.removeEventListener('error', handleError)\n window.removeEventListener('unhandledrejection', handleRejection)\n }\n}\n", "/** A cleanup function that releases a resource. */\nexport type Disposable = () => void\n\n/**\n * Creates a set of disposable cleanup functions that can be disposed together.\n * Useful for aggregating timer, observer, and event listener cleanup.\n */\nexport function createDisposableSet(): {\n add: (fn: Disposable) => void\n disposeAll: () => void\n} {\n const disposables: Disposable[] = []\n return {\n add: (fn) => disposables.push(fn),\n disposeAll: () => {\n disposables.forEach((fn) => fn())\n disposables.length = 0\n },\n }\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n setStorageSnapshot,\n clearStorageSnapshot,\n} from '../runtime/bridge.js'\nimport { createDisposableSet } from './disposable.js'\n\nconst STORAGE_PREFIX = /^#\\/?/\n\nfunction getStorageNamespace(): string | null {\n const hash = window.location.hash || ''\n const normalized = hash.replace(STORAGE_PREFIX, '')\n // New format: appid|page1|page2 \u2014 first segment is appid\n // Legacy format: appid/pages/xxx?query\n const candidate = normalized.split(/[|/?&]/, 1)[0]?.trim()\n return candidate ? candidate : null\n}\n\nfunction normalizeStorageKey(rawKey: string, namespace: string): string | null {\n const prefix = `${namespace}_`\n if (!rawKey.startsWith(prefix)) return null\n return rawKey.slice(prefix.length)\n}\n\nfunction readSnapshot(namespace: string | null): Record<string, string> {\n if (!namespace) return {}\n const items: Record<string, string> = {}\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (!key) continue\n const normalized = normalizeStorageKey(key, namespace)\n if (normalized === null) continue\n items[normalized] = localStorage.getItem(key) ?? ''\n }\n return items\n}\n\nfunction syncSnapshot(namespace: string | null): void {\n if (!namespace) {\n clearStorageSnapshot()\n return\n }\n setStorageSnapshot(namespace, readSnapshot(namespace))\n}\n\nexport function installStorageInstrumentation(): () => void {\n const originalSetItem = localStorage.setItem.bind(localStorage)\n const originalRemoveItem = localStorage.removeItem.bind(localStorage)\n const namespaceRef = { value: getStorageNamespace() }\n\n const handleNamespaceChange = () => {\n namespaceRef.value = getStorageNamespace()\n syncSnapshot(namespaceRef.value)\n }\n\n const handleSetItem = (key: string, value: string) => {\n const namespace = namespaceRef.value\n originalSetItem(key, value)\n if (namespace) {\n const normalized = normalizeStorageKey(key, namespace)\n if (normalized !== null) {\n const snapshot = readSnapshot(namespace)\n setStorageSnapshot(namespace, snapshot)\n sendToHost(SimulatorChannel.Storage, {\n namespace,\n action: 'set',\n key: normalized,\n rawKey: key,\n value,\n ts: Date.now(),\n })\n }\n }\n }\n\n const handleRemoveItem = (key: string) => {\n const namespace = namespaceRef.value\n originalRemoveItem(key)\n if (namespace) {\n const normalized = normalizeStorageKey(key, namespace)\n if (normalized !== null) {\n const snapshot = readSnapshot(namespace)\n setStorageSnapshot(namespace, snapshot)\n sendToHost(SimulatorChannel.Storage, {\n namespace,\n action: 'remove',\n key: normalized,\n rawKey: key,\n ts: Date.now(),\n })\n }\n }\n }\n\n const disposables = createDisposableSet()\n\n localStorage.setItem = handleSetItem\n localStorage.removeItem = handleRemoveItem\n window.addEventListener('hashchange', handleNamespaceChange)\n syncSnapshot(namespaceRef.value)\n\n disposables.add(() => {\n localStorage.setItem = originalSetItem\n localStorage.removeItem = originalRemoveItem\n })\n disposables.add(() => {\n window.removeEventListener('hashchange', handleNamespaceChange)\n })\n disposables.add(() => {\n clearStorageSnapshot()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n", "import { SimulatorChannel, BridgeChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n simulatorBridge,\n clearAppDataSnapshot,\n setAppDataSnapshot,\n} from '../runtime/bridge.js'\nimport { createDisposableSet } from './disposable.js'\n\n// Window augmentation is in ../types.ts\n\ntype AppDataBody = {\n bridgeId?: string\n moduleId?: string\n data?: unknown\n}\n\nconst appDataCache = new Map<string, unknown>()\n\nfunction publishSnapshot(): void {\n const data: Record<string, unknown> = {}\n for (const [key, value] of appDataCache) {\n data[key] = value\n }\n setAppDataSnapshot(data)\n}\n\nfunction decodeWorkerMessage(message: unknown): AppDataBody | null {\n let payload = message\n if (typeof payload === 'string') {\n try {\n payload = JSON.parse(payload)\n } catch {\n return null\n }\n }\n\n const record = payload as { type?: string; body?: AppDataBody } | null\n if (record?.type !== 'u' || !record.body) return null\n return record.body\n}\n\nfunction createInstrumentedWorker(OriginalWorker: typeof Worker): typeof Worker {\n function InstrumentedWorker(\n this: unknown,\n scriptURL: string | URL,\n options?: WorkerOptions\n ): Worker {\n const resolvedScriptURL = scriptURL instanceof URL\n ? scriptURL\n : new URL(scriptURL, window.location.href)\n const worker = Reflect.construct(\n OriginalWorker,\n [resolvedScriptURL, options],\n new.target ?? InstrumentedWorker\n ) as Worker\n\n worker.addEventListener('message', (event: MessageEvent) => {\n const body = decodeWorkerMessage(event.data)\n if (!body) return\n window.__simulatorHook?.appData({\n bridgeId: body.bridgeId,\n moduleId: body.moduleId,\n data: body.data,\n })\n })\n\n return worker\n }\n\n Object.setPrototypeOf(InstrumentedWorker, OriginalWorker)\n Object.defineProperty(InstrumentedWorker, 'prototype', {\n value: OriginalWorker.prototype,\n })\n\n return InstrumentedWorker as unknown as typeof Worker\n}\n\nexport function installAppDataInstrumentation(): () => void {\n const disposables = createDisposableSet()\n const originalHook = window.__simulatorHook\n const originalDescriptor = Object.getOwnPropertyDescriptor(window, 'Worker')\n const OriginalWorker = window.Worker\n\n window.__simulatorHook = {\n appData: (body: unknown) => {\n const record = body as AppDataBody | null\n if (record?.bridgeId && record?.moduleId) {\n const key = `${record.bridgeId}/${record.moduleId}`\n appDataCache.set(key, record.data)\n publishSnapshot()\n }\n sendToHost(SimulatorChannel.AppData, body)\n },\n }\n\n Object.defineProperty(window, 'Worker', {\n configurable: true,\n writable: true,\n value: createInstrumentedWorker(OriginalWorker),\n })\n\n publishSnapshot()\n\n disposables.add(() => {\n if (originalDescriptor) {\n Object.defineProperty(window, 'Worker', originalDescriptor)\n } else {\n window.Worker = OriginalWorker\n }\n })\n\n disposables.add(() => {\n if (originalHook) {\n window.__simulatorHook = originalHook\n } else {\n delete window.__simulatorHook\n }\n })\n\n disposables.add(() => {\n appDataCache.clear()\n clearAppDataSnapshot()\n publishSnapshot()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport function sendAllAppData(): void {\n publishSnapshot()\n sendToHost(BridgeChannel.AppDataGetAllResponse, simulatorBridge.appdata.data)\n}\n", "/** Preload-only timing constants for instrumentation. */\n\n/** Debounce delay for WXML MutationObserver callbacks. */\nexport const WXML_DEBOUNCE_MS = 300\n\n/** Interval between WXML attachment retries. */\nexport const WXML_RETRY_INTERVAL_MS = 500\n\n/** Maximum time to keep retrying WXML attachment. */\nexport const WXML_RETRY_TIMEOUT_MS = 10_000\n\n/** Interval for polling Vue app readiness during navigation. */\nexport const NAVIGATION_POLL_INTERVAL_MS = 200\n\n/** Maximum time to wait for Vue app during navigation. */\nexport const NAVIGATION_TIMEOUT_MS = 10_000\n\n/** Maximum number of retries for simulator webview attachment. */\nexport const MAX_ATTACH_RETRIES = 50\n\n/** Interval between simulator attachment retries. */\nexport const ATTACH_RETRY_INTERVAL_MS = 200\n", "import { type WxmlNode } from '../runtime/bridge.js'\n\nexport interface ComponentInstance extends Record<string, unknown> {\n type?: Record<string, unknown>\n props?: Record<string, unknown>\n attrs?: Record<string, unknown>\n parent?: Record<string, unknown>\n appContext?: Record<string, unknown>\n subTree?: Record<string, unknown>\n}\n\nconst INTERNAL_CLASSES = new Set([\n 'dd-swiper-wrapper', 'dd-swiper-slides', 'dd-swiper-slide-frame', 'dd-swiper-dots',\n 'dd-picker-overlay', 'dd-picker-container', 'dd-picker-header', 'dd-picker-body',\n])\n\nconst FRAMEWORK_TEMPLATE_RE = /^(taro_tmpl|tmpl_\\d+)/\n\nfunction resolveTemplateNameFromParent(instance: ComponentInstance): string | null {\n const parent = instance.parent as Record<string, unknown> | undefined\n if (!parent) return null\n const parentType = parent.type as Record<string, unknown> | undefined\n const components = parentType?.components as Record<string, unknown> | undefined\n if (components) {\n for (const [regName, comp] of Object.entries(components)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n }\n const appComponents = instance.appContext?.components as Record<string, unknown> | undefined\n if (!appComponents) return null\n for (const [regName, comp] of Object.entries(appComponents)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n return null\n}\n\nfunction resolveTagName(instance: ComponentInstance): string {\n const type = instance.type\n if (!type) return 'unknown'\n if (typeof type.__tagName === 'string') return type.__tagName\n const name = (type.__name || type.name) as string | undefined\n if (!name) {\n if (type.__scopeId && type.components) return 'page'\n if (type.__scopeId) return resolveTemplateNameFromParent(instance) || 'template'\n return 'unknown'\n }\n if (name === 'dd-page') return 'page'\n if (name.startsWith('dd-')) return name.slice(3)\n if (name.startsWith('Dd') && name.length > 2) return name.slice(2).toLowerCase()\n return name\n}\n\nfunction extractProps(instance: ComponentInstance): Record<string, string> {\n const out: Record<string, string> = {}\n for (const raw of [instance.props, instance.attrs]) {\n if (!raw) continue\n for (const [k, v] of Object.entries(raw)) {\n if (typeof v === 'function' || v === undefined) continue\n if (k === 'data' || k.startsWith('__')) continue\n if (typeof v === 'boolean' && !v) continue\n if (k === 'class' && typeof v === 'string') {\n const cleaned = v.split(/\\s+/).filter((c) => !c.startsWith('dd-')).join(' ')\n if (cleaned) out[k] = cleaned\n continue\n }\n out[k] = typeof v === 'object' ? JSON.stringify(v) : String(v)\n }\n }\n return out\n}\n\nfunction isInternalElement(vnode: Record<string, unknown>): boolean {\n const props = vnode.props as Record<string, unknown> | null\n if (!props) return false\n const cls = String(props.class || '')\n return cls.split(/\\s+/).some((c) => INTERNAL_CLASSES.has(c))\n}\n\nfunction getElementSid(instance: ComponentInstance): string | undefined {\n const subTree = instance.subTree as Record<string, unknown> | undefined\n const el = subTree?.el as HTMLElement | undefined\n return el?.getAttribute ? el.getAttribute('data-sid') ?? undefined : undefined\n}\n\nfunction isTransparentComponent(instance: ComponentInstance, tagName: string): boolean {\n if (tagName === 'unknown') return true\n if (tagName === 'template') {\n const props = instance.props as Record<string, unknown> | undefined\n const is = props?.is as string | undefined\n if (is && FRAMEWORK_TEMPLATE_RE.test(is)) return true\n if (!is) {\n const type = instance.type as Record<string, unknown> | undefined\n if (type?.__scopeId && !type.components) return true\n }\n }\n return false\n}\n\nfunction extractChildrenFromVNode(vnode: Record<string, unknown> | null | undefined, depth: number): WxmlNode[] {\n if (!vnode || depth > 50) return []\n if (vnode.component) {\n const result = walkInstance(vnode.component as ComponentInstance, depth + 1)\n return result ? (Array.isArray(result) ? result : [result]) : []\n }\n if (vnode.suspense) {\n const suspense = vnode.suspense as Record<string, unknown>\n const activeBranch = suspense.activeBranch as Record<string, unknown> | null\n return activeBranch ? extractChildrenFromVNode(activeBranch, depth + 1) : []\n }\n if (typeof vnode.children === 'string' && vnode.children.trim()) {\n const vnodeType = vnode.type\n if (typeof vnodeType === 'symbol' || typeof vnodeType === 'string') {\n return [{ tagName: '#text', attrs: {}, children: [], text: vnode.children.trim() }]\n }\n }\n const kids = vnode.children\n if (!Array.isArray(kids)) return []\n const result: WxmlNode[] = []\n for (const child of kids) {\n if (!child) continue\n if (typeof child === 'string') {\n const trimmed = child.trim()\n if (trimmed) result.push({ tagName: '#text', attrs: {}, children: [], text: trimmed })\n continue\n }\n if (typeof child !== 'object') continue\n const c = child as Record<string, unknown>\n if (c.component) {\n const walked = walkInstance(c.component as ComponentInstance, depth + 1)\n if (walked) result.push(...(Array.isArray(walked) ? walked : [walked]))\n continue\n }\n if (typeof c.type === 'symbol') {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n continue\n }\n if (typeof c.type === 'string') {\n if (isInternalElement(c)) {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n } else if (typeof c.children === 'string' && c.children.trim()) {\n result.push({ tagName: '#text', attrs: {}, children: [], text: c.children.trim() })\n } else {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n continue\n }\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n return result\n}\n\nexport function walkInstance(instance: ComponentInstance, depth: number): WxmlNode | WxmlNode[] | null {\n if (depth > 50) return null\n const tagName = resolveTagName(instance)\n const children = extractChildrenFromVNode(instance.subTree as Record<string, unknown>, depth)\n if (isTransparentComponent(instance, tagName)) return children.length > 0 ? children : null\n const node: WxmlNode = { tagName, attrs: extractProps(instance), children }\n const sid = getElementSid(instance)\n if (sid) node.sid = sid\n return node\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n clearWxmlSnapshot,\n setWxmlSnapshot,\n type WxmlNode,\n unhighlightElement,\n} from '../runtime/bridge.js'\nimport {\n WXML_DEBOUNCE_MS,\n WXML_RETRY_INTERVAL_MS,\n WXML_RETRY_TIMEOUT_MS,\n NAVIGATION_POLL_INTERVAL_MS,\n NAVIGATION_TIMEOUT_MS,\n} from '../shared/constants.js'\nimport { createDisposableSet } from './disposable.js'\nimport { walkInstance, type ComponentInstance } from './wxml-extract.js'\n\nfunction findActivePageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction getVueAppFromIframe(iframe: HTMLIFrameElement): ComponentInstance | null {\n try {\n const doc = iframe.contentDocument\n if (!doc?.body) return null\n const body = doc.body as unknown as Record<string, unknown>\n const app = body.__vue_app__ as Record<string, unknown> | undefined\n if (!app) return null\n if (app._instance) return app._instance as ComponentInstance\n const container = app._container as Record<string, unknown> | undefined\n const vnode = container?._vnode as Record<string, unknown> | undefined\n return vnode?.component as ComponentInstance | null ?? null\n } catch {\n return null\n }\n}\n\nlet wxmlTimer: ReturnType<typeof setTimeout> | undefined\nlet currentObserver: MutationObserver | null = null\nlet currentIframe: HTMLIFrameElement | null = null\nlet topObserver: MutationObserver | null = null\nlet retryTimer: ReturnType<typeof setInterval> | undefined\nlet retryTimeout: ReturnType<typeof setTimeout> | undefined\nlet navigationWaitTimer: ReturnType<typeof setInterval> | undefined\nlet navigationWaitTimeout: ReturnType<typeof setTimeout> | undefined\n\nconst disposables = createDisposableSet()\n\nfunction clearTimers(): void {\n if (wxmlTimer) clearTimeout(wxmlTimer)\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n if (navigationWaitTimer) clearInterval(navigationWaitTimer)\n if (navigationWaitTimeout) clearTimeout(navigationWaitTimeout)\n wxmlTimer = undefined\n retryTimer = undefined\n retryTimeout = undefined\n navigationWaitTimer = undefined\n navigationWaitTimeout = undefined\n}\n\nfunction publishTree(tree: WxmlNode | WxmlNode[] | null): void {\n if (tree) {\n const normalized: WxmlNode = Array.isArray(tree)\n ? { tagName: '#fragment', attrs: {}, children: tree }\n : tree\n setWxmlSnapshot(normalized, true)\n sendToHost(SimulatorChannel.Wxml, normalized)\n return\n }\n clearWxmlSnapshot()\n unhighlightElement()\n}\n\nfunction sendWxmlTree(): void {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n const instance = getVueAppFromIframe(iframe)\n if (!instance) {\n publishTree(null)\n return\n }\n const tree = walkInstance(instance, 0)\n if (!tree) {\n publishTree(null)\n return\n }\n publishTree(tree)\n}\n\nfunction observeIframe(iframe: HTMLIFrameElement): void {\n if (iframe === currentIframe) return\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n currentIframe = iframe\n\n const doc = iframe.contentDocument\n if (!doc?.body) {\n publishTree(null)\n return\n }\n\n sendWxmlTree()\n currentObserver = new MutationObserver(() => {\n clearTimeout(wxmlTimer)\n wxmlTimer = setTimeout(sendWxmlTree, WXML_DEBOUNCE_MS)\n })\n currentObserver.observe(doc.body, { childList: true, subtree: true })\n}\n\nfunction tryAttach(): boolean {\n const iframe = findActivePageIframe()\n if (!iframe) return false\n const instance = getVueAppFromIframe(iframe)\n if (!instance) return false\n observeIframe(iframe)\n return true\n}\n\nfunction scheduleAttach(): void {\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n retryTimer = setInterval(() => {\n if (tryAttach() && retryTimer) {\n clearInterval(retryTimer)\n retryTimer = undefined\n }\n }, WXML_RETRY_INTERVAL_MS)\n retryTimeout = setTimeout(() => {\n if (retryTimer) clearInterval(retryTimer)\n retryTimer = undefined\n }, WXML_RETRY_TIMEOUT_MS)\n}\n\nfunction observeTopLevel(): void {\n if (topObserver) return\n topObserver = new MutationObserver(() => {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n if (iframe !== currentIframe) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n navigationWaitTimer = setInterval(() => {\n if (getVueAppFromIframe(iframe)) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n observeIframe(iframe)\n }\n }, NAVIGATION_POLL_INTERVAL_MS)\n navigationWaitTimeout = setTimeout(() => {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n navigationWaitTimeout = undefined\n }, NAVIGATION_TIMEOUT_MS)\n }\n })\n\n if (document.body) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n if (document.body && topObserver) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n }\n }, { once: true })\n }\n}\n\nexport function installWxmlInstrumentation(): () => void {\n if (!tryAttach()) {\n scheduleAttach()\n }\n observeTopLevel()\n\n disposables.add(() => {\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n })\n disposables.add(() => {\n if (topObserver) {\n topObserver.disconnect()\n topObserver = null\n }\n })\n disposables.add(() => {\n currentIframe = null\n clearTimers()\n })\n disposables.add(() => {\n clearWxmlSnapshot()\n unhighlightElement()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport const setupWxmlObserver = installWxmlInstrumentation\nexport { sendWxmlTree }\n", "type Callback<T = unknown> = ((payload: T) => void) | undefined\n\nfunction call<T>(fn: Callback<T>, payload: T): void {\n try {\n fn?.(payload)\n } catch {\n // Ignore callback errors in compat shims.\n }\n}\n\nfunction buildWindowInfo() {\n const width = window.innerWidth || document.documentElement.clientWidth || 375\n const height = window.innerHeight || document.documentElement.clientHeight || 812\n const pixelRatio = window.devicePixelRatio || 2\n const statusBarHeight = 0\n return {\n pixelRatio,\n screenWidth: width,\n screenHeight: height,\n windowWidth: width,\n windowHeight: height,\n statusBarHeight,\n safeArea: {\n width,\n height,\n top: statusBarHeight,\n bottom: height,\n left: 0,\n right: width,\n },\n }\n}\n\nfunction makeStorageKey(key: string): string {\n return `dimina:${key}`\n}\n\nfunction ensureWxApi(wx: Record<string, unknown>): void {\n if (typeof wx.canIUse !== 'function') {\n wx.canIUse = (_schema: unknown) => true\n }\n\n if (typeof wx.getWindowInfo !== 'function') {\n wx.getWindowInfo = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = buildWindowInfo()\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemSetting !== 'function') {\n wx.getSystemSetting = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = {\n bluetoothEnabled: false,\n locationEnabled: true,\n wifiEnabled: true,\n deviceOrientation: 'portrait',\n }\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemInfoSync !== 'function') {\n wx.getSystemInfoSync = () => ({\n brand: 'simulator',\n model: 'web',\n platform: 'simulator',\n system: 'web',\n language: 'zh_CN',\n SDKVersion: '3.0.0',\n ...buildWindowInfo(),\n })\n }\n\n if (typeof wx.setStorageSync !== 'function') {\n wx.setStorageSync = (key: string, data: unknown) => {\n const value = typeof data === 'string' ? data : JSON.stringify(data)\n localStorage.setItem(makeStorageKey(String(key)), value)\n }\n }\n\n if (typeof wx.getStorageSync !== 'function') {\n wx.getStorageSync = (key: string) => {\n const raw = localStorage.getItem(makeStorageKey(String(key)))\n if (raw == null) return ''\n try {\n return JSON.parse(raw)\n } catch {\n return raw\n }\n }\n }\n\n if (typeof wx.removeStorageSync !== 'function') {\n wx.removeStorageSync = (key: string) => {\n localStorage.removeItem(makeStorageKey(String(key)))\n }\n }\n\n if (typeof wx.clearStorageSync !== 'function') {\n wx.clearStorageSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(prefix)) keys.push(key)\n }\n keys.forEach((key) => localStorage.removeItem(key))\n }\n }\n\n if (typeof wx.getStorageInfoSync !== 'function') {\n wx.getStorageInfoSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n let currentSize = 0\n for (let i = 0; i < localStorage.length; i++) {\n const fullKey = localStorage.key(i)\n if (!fullKey?.startsWith(prefix)) continue\n keys.push(fullKey.slice(prefix.length))\n currentSize += (localStorage.getItem(fullKey) || '').length * 2\n }\n return { keys, currentSize, limitSize: 10 * 1024 * 1024 }\n }\n }\n\n if (typeof wx.request !== 'function') {\n wx.request = (opts: {\n url: string\n data?: unknown\n header?: Record<string, string>\n timeout?: number\n method?: string\n dataType?: 'json' | 'text' | 'arraybuffer'\n success?: Callback<unknown>\n fail?: Callback<unknown>\n complete?: Callback<void>\n }) => {\n const controller = new AbortController()\n const method = (opts.method || 'GET').toUpperCase()\n let requestUrl = opts.url\n const init: RequestInit = {\n method,\n headers: { 'Content-Type': 'application/json', ...(opts.header || {}) },\n signal: controller.signal,\n }\n\n if (method === 'GET' && opts.data && typeof opts.data === 'object') {\n const url = new URL(requestUrl, window.location.href)\n Object.entries(opts.data as Record<string, unknown>).forEach(([key, value]) => {\n url.searchParams.append(key, String(value))\n })\n requestUrl = url.toString()\n } else if (opts.data != null) {\n init.body = typeof opts.data === 'string' ? opts.data : JSON.stringify(opts.data)\n }\n\n const timeoutId = Number(opts.timeout) > 0\n ? window.setTimeout(() => controller.abort(), Number(opts.timeout))\n : null\n\n fetch(requestUrl, init)\n .then(async (response) => {\n const headers = Object.fromEntries(response.headers.entries())\n let data: unknown\n if (opts.dataType === 'arraybuffer') data = await response.arrayBuffer()\n else {\n const text = await response.text()\n if (opts.dataType === 'text') data = text\n else {\n try {\n data = JSON.parse(text)\n } catch {\n data = text\n }\n }\n }\n call(opts.success, { data, statusCode: response.status, header: headers, errMsg: 'request:ok' })\n })\n .catch((error) => {\n call(opts.fail, { errMsg: `request:fail ${error instanceof Error ? error.message : String(error)}` })\n })\n .finally(() => {\n if (timeoutId != null) window.clearTimeout(timeoutId)\n call(opts.complete, undefined)\n })\n\n return {\n abort: () => controller.abort(),\n }\n }\n }\n}\n\nexport function setupApiCompatHook(): void {\n const apply = () => {\n const target = window as unknown as { wx?: Record<string, unknown> }\n if (!target.wx || typeof target.wx !== 'object') {\n target.wx = {}\n }\n const wx = target.wx\n ensureWxApi(wx)\n return true\n }\n\n if (apply()) return\n\n const timer = window.setInterval(() => {\n if (apply()) window.clearInterval(timer)\n }, 200)\n}\n", "// Default preload script for the simulator <webview>.\n// Composes all built-in instrumentation. For custom preloads, import individual\n// functions from '@dimina-kit/devtools/preload' and assemble your own.\n//\n// This file is bundled into a single JS file via build:preload (esbuild)\n// because webview sandbox cannot resolve require() for separate modules.\nimport { installSimulatorBridge } from '../runtime/bridge.js'\nimport { installConsoleInstrumentation } from '../instrumentation/console.js'\nimport { installStorageInstrumentation } from '../instrumentation/storage.js'\nimport { installAppDataInstrumentation } from '../instrumentation/app-data.js'\nimport { installWxmlInstrumentation } from '../instrumentation/wxml.js'\nimport { setupApiCompatHook } from '../shared/api-compat.js'\n\nsetupApiCompatHook()\ninstallSimulatorBridge()\ninstallConsoleInstrumentation()\ninstallStorageInstrumentation()\ninstallAppDataInstrumentation()\ninstallWxmlInstrumentation()\n"],
|
|
5
|
-
"mappings": ";;;AAAA,sBAA8B;AA6B9B,IAAM,QAA8B;AAAA,EAClC,SAAS,EAAE,KAAK,GAAG,OAAO,MAAM,MAAM,CAAC,EAAE;AAAA,EACzC,SAAS,EAAE,KAAK,GAAG,OAAO,OAAO,WAAW,MAAM,MAAM,CAAC,EAAE;AAAA,EAC3D,MAAM,EAAE,KAAK,GAAG,OAAO,OAAO,MAAM,KAAK;AAAA,EACzC,gBAAgB;AAClB;AAEA,IAAI,mBAA0C;AAC9C,IAAI,aAA6C;AAEjD,SAAS,MAAS,OAAa;AAC7B,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAA0C;AACjD,QAAM,UAAU,SAAS,iBAAoC,gCAAgC;AAC7F,SAAO,QAAQ,SAAS,IAAI,QAAQ,QAAQ,SAAS,CAAC,IAAK;AAC7D;AAEA,SAAS,cAAc,KAA+B;AACpD,MAAI,oBAAoB,iBAAiB,kBAAkB,IAAK,QAAO;AACvE,qBAAmB,IAAI,cAAc,KAAK;AAC1C,mBAAiB,KAAK;AACtB,mBAAiB,MAAM,UACrB;AAGF,MAAI,KAAK,YAAY,gBAAgB;AACrC,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAmB;AAC3C,QAAM,SAAS,cAAc;AAC7B,MAAI,CAAC,QAAQ,gBAAiB;AAC9B,QAAM,MAAM,OAAO;AACnB,QAAM,KAAK,IAAI,cAAc,cAAc,GAAG,IAAI;AAClD,MAAI,CAAC,GAAI;AACT,QAAM,OAAO,GAAG,sBAAsB;AACtC,QAAM,UAAU,cAAc,GAAG;AACjC,UAAQ,MAAM,OAAO,GAAG,KAAK,IAAI;AACjC,UAAQ,MAAM,MAAM,GAAG,KAAK,GAAG;AAC/B,UAAQ,MAAM,QAAQ,GAAG,KAAK,KAAK;AACnC,UAAQ,MAAM,SAAS,GAAG,KAAK,MAAM;AACrC,UAAQ,MAAM,UAAU;AAC1B;AAEA,SAAS,qBAA2B;AAClC,MAAI,iBAAkB,kBAAiB,MAAM,UAAU;AACzD;AAIA,SAAS,WAAoC;AAC3C,SAAO;AAAA,IACL,YAAY,MAAM,MAAM,MAAM,QAAQ,IAAI;AAAA,IAC1C,oBAAoB,MAAM,MAAM,MAAM,OAAO;AAAA,IAC7C,eAAe,MAAM,MAAM,QAAQ;AAAA,IACnC,oBAAoB,MAAM,MAAM,MAAM,OAAO;AAAA,IAC7C,eAAe,MAAM,MAAM,QAAQ;AAAA,IACnC,SAAS,MAAM,MAAM,MAAM,KAAK,IAAI;AAAA,IACpC,iBAAiB,MAAM,MAAM,MAAM,IAAI;AAAA,IACvC,YAAY,MAAM,MAAM,KAAK;AAAA,IAC7B,SAAS,CAAC,SAAwB,MAAM,iBAAiB,IAAI;AAAA,IAC7D;AAAA,IACA;AAAA,EACF;AACF;AAQO,SAAS,mBAAmB,MAAqC;AACtE,QAAM,UAAU;AAAA,IACd,KAAK,MAAM,QAAQ,MAAM;AAAA,IACzB,OAAO;AAAA,IACP,MAAM,MAAM,IAAI;AAAA,EAClB;AACF;AAEO,SAAS,uBAA6B;AAC3C,QAAM,UAAU;AAAA,IACd,KAAK,MAAM,QAAQ,MAAM;AAAA,IACzB,OAAO;AAAA,IACP,MAAM,CAAC;AAAA,EACT;AACF;AAEO,SAAS,mBAAmB,WAA0B,MAAoC;AAC/F,QAAM,UAAU;AAAA,IACd,KAAK,MAAM,QAAQ,MAAM;AAAA,IACzB,OAAO,cAAc;AAAA,IACrB;AAAA,IACA,MAAM,MAAM,IAAI;AAAA,EAClB;AACF;AAEO,SAAS,uBAA6B;AAC3C,QAAM,UAAU;AAAA,IACd,KAAK,MAAM,QAAQ,MAAM;AAAA,IACzB,OAAO;AAAA,IACP,WAAW;AAAA,IACX,MAAM,CAAC;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,MAAoC,QAAQ,MAAY;AACtF,QAAM,OAAO;AAAA,IACX,KAAK,MAAM,KAAK,MAAM;AAAA,IACtB;AAAA,IACA,MAAM,MAAM,IAAI;AAAA,EAClB;AACF;AAEO,SAAS,oBAA0B;AACxC,QAAM,OAAO;AAAA,IACX,KAAK,MAAM,KAAK,MAAM;AAAA,IACtB,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAEO,SAAS,mBAAyB;AACvC,uBAAqB;AACrB,uBAAqB;AACrB,oBAAkB;AAClB,qBAAmB;AACnB,QAAM,iBAAiB;AACzB;AAEO,SAAS,yBAAqC;AACnD,MAAI,CAAC,YAAY;AACf,iBAAa,SAAS;AAAA,EACxB;AAEA,MAAI;AACF,kCAAc,kBAAkB,mBAAmB;AAAA,MACjD,GAAG;AAAA,MACH,YAAY,MAAM,MAAM,MAAM,QAAQ,IAAI;AAAA,MAC1C,oBAAoB,MAAM,MAAM,MAAM,OAAO;AAAA,MAC7C,oBAAoB,MAAM,MAAM,MAAM,OAAO;AAAA,MAC7C,SAAS,MAAM,MAAM,MAAM,KAAK,IAAI;AAAA,MACpC,iBAAiB,MAAM,MAAM,MAAM,IAAI;AAAA,IACzC,CAAC;AAAA,EACH,QAAQ;AACN;AAAC,IAAC,OAA8C,kBAAkB;AAAA,EACpE;AAEA,SAAO,MAAM;AACX,qBAAiB;AACjB,UAAM,YAAY;AAClB,QAAI,UAAU,oBAAoB,YAAY;AAC5C,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACF;;;ACpLO,IAAM,mBAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AACd;;;ACrBA,IAAAA,mBAA4B;AAErB,SAAS,WAAW,SAAiB,MAAqB;AAC/D,+BAAY,WAAW,SAAS,IAAI;AACtC;AAEO,SAAS,cAAc,KAAuB;AACnD,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,MAAI,OAAO,QAAQ,WAAY,QAAO,cAAe,IAA0B,QAAQ,WAAW;AAClG,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,MAAI,eAAe,MAAO,QAAO,EAAE,WAAW,MAAM,SAAS,IAAI,SAAS,OAAO,IAAI,MAAM;AAC3F,MAAI;AACF,WAAO,gBAAgB,GAAG;AAAA,EAC5B,QAAQ;AAAA,EAER;AACA,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,EACvC,QAAQ;AAAA,EAER;AACA,SAAO,OAAO,GAAG;AACnB;;;ACjBO,SAAS,gCAA4C;AAC1D,QAAM,aAAa;AACnB,QAAM,YAAY,oBAAI,IAAgD;AACtE,QAAM,SAAyB,CAAC,OAAO,QAAQ,SAAS,QAAQ,OAAO;AAEvE,aAAW,SAAS,QAAQ;AAC1B,UAAM,WAAW,WAAW,KAAK,GAAG,KAAK,OAAO;AAChD,QAAI,CAAC,SAAU;AACf,cAAU,IAAI,OAAO,QAAQ;AAC7B,eAAW,KAAK,IAAI,IAAI,SAAoB;AAC1C,eAAS,GAAG,IAAI;AAChB,iBAAW,iBAAiB,SAAS;AAAA,QACnC,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,IAAI,aAAa;AAAA,QAC5B,IAAI,KAAK,IAAI;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cAAc,CAAC,UAAsB;AACzC,eAAW,iBAAiB,SAAS;AAAA,MACnC,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM,CAAC;AAAA,QACL,SAAS,MAAM;AAAA,QACf,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,OAAO,MAAM,OAAO;AAAA,MACtB,CAAC;AAAA,MACD,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,CAAC,UAAiC;AACxD,eAAW,iBAAiB,SAAS;AAAA,MACnC,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM,CAAC,EAAE,SAAS,+BAA+B,QAAQ,OAAO,MAAM,MAAM,EAAE,CAAC;AAAA,MAC/E,IAAI,KAAK,IAAI;AAAA,IACf,CAAC;AAAA,EACH;AAEA,SAAO,iBAAiB,SAAS,WAAW;AAC5C,SAAO,iBAAiB,sBAAsB,eAAe;AAE7D,SAAO,MAAM;AACX,eAAW,CAAC,OAAO,QAAQ,KAAK,WAAW;AACzC,iBAAW,KAAK,IAAI;AAAA,IACtB;AACA,WAAO,oBAAoB,SAAS,WAAW;AAC/C,WAAO,oBAAoB,sBAAsB,eAAe;AAAA,EAClE;AACF;;;ACpDO,SAAS,sBAGd;AACA,QAAMC,eAA4B,CAAC;AACnC,SAAO;AAAA,IACL,KAAK,CAAC,OAAOA,aAAY,KAAK,EAAE;AAAA,IAChC,YAAY,MAAM;AAChB,MAAAA,aAAY,QAAQ,CAAC,OAAO,GAAG,CAAC;AAChC,MAAAA,aAAY,SAAS;AAAA,IACvB;AAAA,EACF;AACF;;;ACXA,IAAM,iBAAiB;AAEvB,SAAS,sBAAqC;AAC5C,QAAM,OAAO,OAAO,SAAS,QAAQ;AACrC,QAAM,aAAa,KAAK,QAAQ,gBAAgB,EAAE;AAGlD,QAAM,YAAY,WAAW,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK;AACzD,SAAO,YAAY,YAAY;AACjC;AAEA,SAAS,oBAAoB,QAAgB,WAAkC;AAC7E,QAAM,SAAS,GAAG,SAAS;AAC3B,MAAI,CAAC,OAAO,WAAW,MAAM,EAAG,QAAO;AACvC,SAAO,OAAO,MAAM,OAAO,MAAM;AACnC;AAEA,SAAS,aAAa,WAAkD;AACtE,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,QAAM,QAAgC,CAAC;AACvC,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,QAAI,CAAC,IAAK;AACV,UAAM,aAAa,oBAAoB,KAAK,SAAS;AACrD,QAAI,eAAe,KAAM;AACzB,UAAM,UAAU,IAAI,aAAa,QAAQ,GAAG,KAAK;AAAA,EACnD;AACA,SAAO;AACT;AAEA,SAAS,aAAa,WAAgC;AACpD,MAAI,CAAC,WAAW;AACd,yBAAqB;AACrB;AAAA,EACF;AACA,qBAAmB,WAAW,aAAa,SAAS,CAAC;AACvD;AAEO,SAAS,gCAA4C;AAC1D,QAAM,kBAAkB,aAAa,QAAQ,KAAK,YAAY;AAC9D,QAAM,qBAAqB,aAAa,WAAW,KAAK,YAAY;AACpE,QAAM,eAAe,EAAE,OAAO,oBAAoB,EAAE;AAEpD,QAAM,wBAAwB,MAAM;AAClC,iBAAa,QAAQ,oBAAoB;AACzC,iBAAa,aAAa,KAAK;AAAA,EACjC;AAEA,QAAM,gBAAgB,CAAC,KAAa,UAAkB;AACpD,UAAM,YAAY,aAAa;AAC/B,oBAAgB,KAAK,KAAK;AAC1B,QAAI,WAAW;AACb,YAAM,aAAa,oBAAoB,KAAK,SAAS;AACrD,UAAI,eAAe,MAAM;AACvB,cAAM,WAAW,aAAa,SAAS;AACvC,2BAAmB,WAAW,QAAQ;AACtC,mBAAW,iBAAiB,SAAS;AAAA,UACnC;AAAA,UACA,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,IAAI,KAAK,IAAI;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,QAAgB;AACxC,UAAM,YAAY,aAAa;AAC/B,uBAAmB,GAAG;AACtB,QAAI,WAAW;AACb,YAAM,aAAa,oBAAoB,KAAK,SAAS;AACrD,UAAI,eAAe,MAAM;AACvB,cAAM,WAAW,aAAa,SAAS;AACvC,2BAAmB,WAAW,QAAQ;AACtC,mBAAW,iBAAiB,SAAS;AAAA,UACnC;AAAA,UACA,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,IAAI,KAAK,IAAI;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAMC,eAAc,oBAAoB;AAExC,eAAa,UAAU;AACvB,eAAa,aAAa;AAC1B,SAAO,iBAAiB,cAAc,qBAAqB;AAC3D,eAAa,aAAa,KAAK;AAE/B,EAAAA,aAAY,IAAI,MAAM;AACpB,iBAAa,UAAU;AACvB,iBAAa,aAAa;AAAA,EAC5B,CAAC;AACD,EAAAA,aAAY,IAAI,MAAM;AACpB,WAAO,oBAAoB,cAAc,qBAAqB;AAAA,EAChE,CAAC;AACD,EAAAA,aAAY,IAAI,MAAM;AACpB,yBAAqB;AAAA,EACvB,CAAC;AAED,SAAO,MAAM;AACX,IAAAA,aAAY,WAAW;AAAA,EACzB;AACF;;;ACnGA,IAAM,eAAe,oBAAI,IAAqB;AAE9C,SAAS,kBAAwB;AAC/B,QAAM,OAAgC,CAAC;AACvC,aAAW,CAAC,KAAK,KAAK,KAAK,cAAc;AACvC,SAAK,GAAG,IAAI;AAAA,EACd;AACA,qBAAmB,IAAI;AACzB;AAEA,SAAS,oBAAoB,SAAsC;AACjE,MAAI,UAAU;AACd,MAAI,OAAO,YAAY,UAAU;AAC/B,QAAI;AACF,gBAAU,KAAK,MAAM,OAAO;AAAA,IAC9B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,SAAS;AACf,MAAI,QAAQ,SAAS,OAAO,CAAC,OAAO,KAAM,QAAO;AACjD,SAAO,OAAO;AAChB;AAEA,SAAS,yBAAyB,gBAA8C;AAC9E,WAAS,mBAEP,WACA,SACQ;AACR,UAAM,oBAAoB,qBAAqB,MAC3C,YACA,IAAI,IAAI,WAAW,OAAO,SAAS,IAAI;AAC3C,UAAM,SAAS,QAAQ;AAAA,MACrB;AAAA,MACA,CAAC,mBAAmB,OAAO;AAAA,MAC3B,cAAc;AAAA,IAChB;AAEA,WAAO,iBAAiB,WAAW,CAAC,UAAwB;AAC1D,YAAM,OAAO,oBAAoB,MAAM,IAAI;AAC3C,UAAI,CAAC,KAAM;AACX,aAAO,iBAAiB,QAAQ;AAAA,QAC9B,UAAU,KAAK;AAAA,QACf,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,MACb,CAAC;AAAA,IACH,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,oBAAoB,cAAc;AACxD,SAAO,eAAe,oBAAoB,aAAa;AAAA,IACrD,OAAO,eAAe;AAAA,EACxB,CAAC;AAED,SAAO;AACT;AAEO,SAAS,gCAA4C;AAC1D,QAAMC,eAAc,oBAAoB;AACxC,QAAM,eAAe,OAAO;AAC5B,QAAM,qBAAqB,OAAO,yBAAyB,QAAQ,QAAQ;AAC3E,QAAM,iBAAiB,OAAO;AAE9B,SAAO,kBAAkB;AAAA,IACvB,SAAS,CAAC,SAAkB;AAC1B,YAAM,SAAS;AACf,UAAI,QAAQ,YAAY,QAAQ,UAAU;AACxC,cAAM,MAAM,GAAG,OAAO,QAAQ,IAAI,OAAO,QAAQ;AACjD,qBAAa,IAAI,KAAK,OAAO,IAAI;AACjC,wBAAgB;AAAA,MAClB;AACA,iBAAW,iBAAiB,SAAS,IAAI;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO,eAAe,QAAQ,UAAU;AAAA,IACtC,cAAc;AAAA,IACd,UAAU;AAAA,IACV,OAAO,yBAAyB,cAAc;AAAA,EAChD,CAAC;AAED,kBAAgB;AAEhB,EAAAA,aAAY,IAAI,MAAM;AACpB,QAAI,oBAAoB;AACtB,aAAO,eAAe,QAAQ,UAAU,kBAAkB;AAAA,IAC5D,OAAO;AACL,aAAO,SAAS;AAAA,IAClB;AAAA,EACF,CAAC;AAED,EAAAA,aAAY,IAAI,MAAM;AACpB,QAAI,cAAc;AAChB,aAAO,kBAAkB;AAAA,IAC3B,OAAO;AACL,aAAO,OAAO;AAAA,IAChB;AAAA,EACF,CAAC;AAED,EAAAA,aAAY,IAAI,MAAM;AACpB,iBAAa,MAAM;AACnB,yBAAqB;AACrB,oBAAgB;AAAA,EAClB,CAAC;AAED,SAAO,MAAM;AACX,IAAAA,aAAY,WAAW;AAAA,EACzB;AACF;;;AC9HO,IAAM,mBAAmB;AAGzB,IAAM,yBAAyB;AAG/B,IAAM,wBAAwB;AAG9B,IAAM,8BAA8B;AAGpC,IAAM,wBAAwB;;;ACJrC,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EAAqB;AAAA,EAAoB;AAAA,EAAyB;AAAA,EAClE;AAAA,EAAqB;AAAA,EAAuB;AAAA,EAAoB;AAClE,CAAC;AAED,IAAM,wBAAwB;AAE9B,SAAS,8BAA8B,UAA4C;AACjF,QAAM,SAAS,SAAS;AACxB,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,aAAa,OAAO;AAC1B,QAAM,aAAa,YAAY;AAC/B,MAAI,YAAY;AACd,eAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACxD,UAAI,SAAS,SAAS,KAAM,QAAO,QAAQ,WAAW,KAAK,IAAI,QAAQ,MAAM,CAAC,IAAI;AAAA,IACpF;AAAA,EACF;AACA,QAAM,gBAAgB,SAAS,YAAY;AAC3C,MAAI,CAAC,cAAe,QAAO;AAC3B,aAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC3D,QAAI,SAAS,SAAS,KAAM,QAAO,QAAQ,WAAW,KAAK,IAAI,QAAQ,MAAM,CAAC,IAAI;AAAA,EACpF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,UAAqC;AAC3D,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,OAAO,KAAK,cAAc,SAAU,QAAO,KAAK;AACpD,QAAM,OAAQ,KAAK,UAAU,KAAK;AAClC,MAAI,CAAC,MAAM;AACT,QAAI,KAAK,aAAa,KAAK,WAAY,QAAO;AAC9C,QAAI,KAAK,UAAW,QAAO,8BAA8B,QAAQ,KAAK;AACtE,WAAO;AAAA,EACT;AACA,MAAI,SAAS,UAAW,QAAO;AAC/B,MAAI,KAAK,WAAW,KAAK,EAAG,QAAO,KAAK,MAAM,CAAC;AAC/C,MAAI,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,EAAG,QAAO,KAAK,MAAM,CAAC,EAAE,YAAY;AAC/E,SAAO;AACT;AAEA,SAAS,aAAa,UAAqD;AACzE,QAAM,MAA8B,CAAC;AACrC,aAAW,OAAO,CAAC,SAAS,OAAO,SAAS,KAAK,GAAG;AAClD,QAAI,CAAC,IAAK;AACV,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,GAAG;AACxC,UAAI,OAAO,MAAM,cAAc,MAAM,OAAW;AAChD,UAAI,MAAM,UAAU,EAAE,WAAW,IAAI,EAAG;AACxC,UAAI,OAAO,MAAM,aAAa,CAAC,EAAG;AAClC,UAAI,MAAM,WAAW,OAAO,MAAM,UAAU;AAC1C,cAAM,UAAU,EAAE,MAAM,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,CAAC,EAAE,KAAK,GAAG;AAC3E,YAAI,QAAS,KAAI,CAAC,IAAI;AACtB;AAAA,MACF;AACA,UAAI,CAAC,IAAI,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC;AAAA,IAC/D;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAyC;AAClE,QAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,OAAO,MAAM,SAAS,EAAE;AACpC,SAAO,IAAI,MAAM,KAAK,EAAE,KAAK,CAAC,MAAM,iBAAiB,IAAI,CAAC,CAAC;AAC7D;AAEA,SAAS,cAAc,UAAiD;AACtE,QAAM,UAAU,SAAS;AACzB,QAAM,KAAK,SAAS;AACpB,SAAO,IAAI,eAAe,GAAG,aAAa,UAAU,KAAK,SAAY;AACvE;AAEA,SAAS,uBAAuB,UAA6B,SAA0B;AACrF,MAAI,YAAY,UAAW,QAAO;AAClC,MAAI,YAAY,YAAY;AAC1B,UAAM,QAAQ,SAAS;AACvB,UAAM,KAAK,OAAO;AAClB,QAAI,MAAM,sBAAsB,KAAK,EAAE,EAAG,QAAO;AACjD,QAAI,CAAC,IAAI;AACP,YAAM,OAAO,SAAS;AACtB,UAAI,MAAM,aAAa,CAAC,KAAK,WAAY,QAAO;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,OAAmD,OAA2B;AAC9G,MAAI,CAAC,SAAS,QAAQ,GAAI,QAAO,CAAC;AAClC,MAAI,MAAM,WAAW;AACnB,UAAMC,UAAS,aAAa,MAAM,WAAgC,QAAQ,CAAC;AAC3E,WAAOA,UAAU,MAAM,QAAQA,OAAM,IAAIA,UAAS,CAACA,OAAM,IAAK,CAAC;AAAA,EACjE;AACA,MAAI,MAAM,UAAU;AAClB,UAAM,WAAW,MAAM;AACvB,UAAM,eAAe,SAAS;AAC9B,WAAO,eAAe,yBAAyB,cAAc,QAAQ,CAAC,IAAI,CAAC;AAAA,EAC7E;AACA,MAAI,OAAO,MAAM,aAAa,YAAY,MAAM,SAAS,KAAK,GAAG;AAC/D,UAAM,YAAY,MAAM;AACxB,QAAI,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU;AAClE,aAAO,CAAC,EAAE,SAAS,SAAS,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,IACpF;AAAA,EACF;AACA,QAAM,OAAO,MAAM;AACnB,MAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAClC,QAAM,SAAqB,CAAC;AAC5B,aAAW,SAAS,MAAM;AACxB,QAAI,CAAC,MAAO;AACZ,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,UAAU,MAAM,KAAK;AAC3B,UAAI,QAAS,QAAO,KAAK,EAAE,SAAS,SAAS,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,QAAQ,CAAC;AACrF;AAAA,IACF;AACA,QAAI,OAAO,UAAU,SAAU;AAC/B,UAAM,IAAI;AACV,QAAI,EAAE,WAAW;AACf,YAAM,SAAS,aAAa,EAAE,WAAgC,QAAQ,CAAC;AACvE,UAAI,OAAQ,QAAO,KAAK,GAAI,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM,CAAE;AACtE;AAAA,IACF;AACA,QAAI,OAAO,EAAE,SAAS,UAAU;AAC9B,aAAO,KAAK,GAAG,yBAAyB,GAAG,QAAQ,CAAC,CAAC;AACrD;AAAA,IACF;AACA,QAAI,OAAO,EAAE,SAAS,UAAU;AAC9B,UAAI,kBAAkB,CAAC,GAAG;AACxB,eAAO,KAAK,GAAG,yBAAyB,GAAG,QAAQ,CAAC,CAAC;AAAA,MACvD,WAAW,OAAO,EAAE,aAAa,YAAY,EAAE,SAAS,KAAK,GAAG;AAC9D,eAAO,KAAK,EAAE,SAAS,SAAS,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;AAAA,MACpF,OAAO;AACL,eAAO,KAAK,GAAG,yBAAyB,GAAG,QAAQ,CAAC,CAAC;AAAA,MACvD;AACA;AAAA,IACF;AACA,WAAO,KAAK,GAAG,yBAAyB,GAAG,QAAQ,CAAC,CAAC;AAAA,EACvD;AACA,SAAO;AACT;AAEO,SAAS,aAAa,UAA6B,OAA6C;AACrG,MAAI,QAAQ,GAAI,QAAO;AACvB,QAAM,UAAU,eAAe,QAAQ;AACvC,QAAM,WAAW,yBAAyB,SAAS,SAAoC,KAAK;AAC5F,MAAI,uBAAuB,UAAU,OAAO,EAAG,QAAO,SAAS,SAAS,IAAI,WAAW;AACvF,QAAM,OAAiB,EAAE,SAAS,OAAO,aAAa,QAAQ,GAAG,SAAS;AAC1E,QAAM,MAAM,cAAc,QAAQ;AAClC,MAAI,IAAK,MAAK,MAAM;AACpB,SAAO;AACT;;;AC9IA,SAAS,uBAAiD;AACxD,QAAM,UAAU,SAAS,iBAAoC,gCAAgC;AAC7F,SAAO,QAAQ,SAAS,IAAI,QAAQ,QAAQ,SAAS,CAAC,IAAK;AAC7D;AAEA,SAAS,oBAAoB,QAAqD;AAChF,MAAI;AACF,UAAM,MAAM,OAAO;AACnB,QAAI,CAAC,KAAK,KAAM,QAAO;AACvB,UAAM,OAAO,IAAI;AACjB,UAAM,MAAM,KAAK;AACjB,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,IAAI,UAAW,QAAO,IAAI;AAC9B,UAAM,YAAY,IAAI;AACtB,UAAM,QAAQ,WAAW;AACzB,WAAO,OAAO,aAAyC;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAI;AACJ,IAAI,kBAA2C;AAC/C,IAAI,gBAA0C;AAC9C,IAAI,cAAuC;AAC3C,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAEJ,IAAM,cAAc,oBAAoB;AAExC,SAAS,cAAoB;AAC3B,MAAI,UAAW,cAAa,SAAS;AACrC,MAAI,WAAY,eAAc,UAAU;AACxC,MAAI,aAAc,cAAa,YAAY;AAC3C,MAAI,oBAAqB,eAAc,mBAAmB;AAC1D,MAAI,sBAAuB,cAAa,qBAAqB;AAC7D,cAAY;AACZ,eAAa;AACb,iBAAe;AACf,wBAAsB;AACtB,0BAAwB;AAC1B;AAEA,SAAS,YAAY,MAA0C;AAC7D,MAAI,MAAM;AACR,UAAM,aAAuB,MAAM,QAAQ,IAAI,IAC3C,EAAE,SAAS,aAAa,OAAO,CAAC,GAAG,UAAU,KAAK,IAClD;AACJ,oBAAgB,YAAY,IAAI;AAChC,eAAW,iBAAiB,MAAM,UAAU;AAC5C;AAAA,EACF;AACA,oBAAkB;AAClB,qBAAmB;AACrB;AAEA,SAAS,eAAqB;AAC5B,QAAM,SAAS,qBAAqB;AACpC,MAAI,CAAC,QAAQ;AACX,gBAAY,IAAI;AAChB;AAAA,EACF;AACA,QAAM,WAAW,oBAAoB,MAAM;AAC3C,MAAI,CAAC,UAAU;AACb,gBAAY,IAAI;AAChB;AAAA,EACF;AACA,QAAM,OAAO,aAAa,UAAU,CAAC;AACrC,MAAI,CAAC,MAAM;AACT,gBAAY,IAAI;AAChB;AAAA,EACF;AACA,cAAY,IAAI;AAClB;AAEA,SAAS,cAAc,QAAiC;AACtD,MAAI,WAAW,cAAe;AAC9B,MAAI,iBAAiB;AACnB,oBAAgB,WAAW;AAC3B,sBAAkB;AAAA,EACpB;AACA,MAAI,qBAAqB;AACvB,kBAAc,mBAAmB;AACjC,0BAAsB;AAAA,EACxB;AACA,MAAI,uBAAuB;AACzB,iBAAa,qBAAqB;AAClC,4BAAwB;AAAA,EAC1B;AACA,kBAAgB;AAEhB,QAAM,MAAM,OAAO;AACnB,MAAI,CAAC,KAAK,MAAM;AACd,gBAAY,IAAI;AAChB;AAAA,EACF;AAEA,eAAa;AACb,oBAAkB,IAAI,iBAAiB,MAAM;AAC3C,iBAAa,SAAS;AACtB,gBAAY,WAAW,cAAc,gBAAgB;AAAA,EACvD,CAAC;AACD,kBAAgB,QAAQ,IAAI,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AACtE;AAEA,SAAS,YAAqB;AAC5B,QAAM,SAAS,qBAAqB;AACpC,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,WAAW,oBAAoB,MAAM;AAC3C,MAAI,CAAC,SAAU,QAAO;AACtB,gBAAc,MAAM;AACpB,SAAO;AACT;AAEA,SAAS,iBAAuB;AAC9B,MAAI,WAAY,eAAc,UAAU;AACxC,MAAI,aAAc,cAAa,YAAY;AAC3C,eAAa,YAAY,MAAM;AAC7B,QAAI,UAAU,KAAK,YAAY;AAC7B,oBAAc,UAAU;AACxB,mBAAa;AAAA,IACf;AAAA,EACF,GAAG,sBAAsB;AACzB,iBAAe,WAAW,MAAM;AAC9B,QAAI,WAAY,eAAc,UAAU;AACxC,iBAAa;AAAA,EACf,GAAG,qBAAqB;AAC1B;AAEA,SAAS,kBAAwB;AAC/B,MAAI,YAAa;AACjB,gBAAc,IAAI,iBAAiB,MAAM;AACvC,UAAM,SAAS,qBAAqB;AACpC,QAAI,CAAC,QAAQ;AACX,kBAAY,IAAI;AAChB;AAAA,IACF;AACA,QAAI,WAAW,eAAe;AAC5B,UAAI,qBAAqB;AACvB,sBAAc,mBAAmB;AACjC,8BAAsB;AAAA,MACxB;AACA,UAAI,uBAAuB;AACzB,qBAAa,qBAAqB;AAClC,gCAAwB;AAAA,MAC1B;AACA,4BAAsB,YAAY,MAAM;AACtC,YAAI,oBAAoB,MAAM,GAAG;AAC/B,cAAI,qBAAqB;AACvB,0BAAc,mBAAmB;AACjC,kCAAsB;AAAA,UACxB;AACA,cAAI,uBAAuB;AACzB,yBAAa,qBAAqB;AAClC,oCAAwB;AAAA,UAC1B;AACA,wBAAc,MAAM;AAAA,QACtB;AAAA,MACF,GAAG,2BAA2B;AAC9B,8BAAwB,WAAW,MAAM;AACvC,YAAI,qBAAqB;AACvB,wBAAc,mBAAmB;AACjC,gCAAsB;AAAA,QACxB;AACA,gCAAwB;AAAA,MAC1B,GAAG,qBAAqB;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,MAAI,SAAS,MAAM;AACjB,gBAAY,QAAQ,SAAS,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EACvE,OAAO;AACL,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAI,SAAS,QAAQ,aAAa;AAChC,oBAAY,QAAQ,SAAS,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,MACvE;AAAA,IACF,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,EACnB;AACF;AAEO,SAAS,6BAAyC;AACvD,MAAI,CAAC,UAAU,GAAG;AAChB,mBAAe;AAAA,EACjB;AACA,kBAAgB;AAEhB,cAAY,IAAI,MAAM;AACpB,QAAI,iBAAiB;AACnB,sBAAgB,WAAW;AAC3B,wBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AACD,cAAY,IAAI,MAAM;AACpB,QAAI,aAAa;AACf,kBAAY,WAAW;AACvB,oBAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACD,cAAY,IAAI,MAAM;AACpB,oBAAgB;AAChB,gBAAY;AAAA,EACd,CAAC;AACD,cAAY,IAAI,MAAM;AACpB,sBAAkB;AAClB,uBAAmB;AAAA,EACrB,CAAC;AAED,SAAO,MAAM;AACX,gBAAY,WAAW;AAAA,EACzB;AACF;;;ACpOA,SAAS,KAAQ,IAAiB,SAAkB;AAClD,MAAI;AACF,SAAK,OAAO;AAAA,EACd,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,kBAAkB;AACzB,QAAM,QAAQ,OAAO,cAAc,SAAS,gBAAgB,eAAe;AAC3E,QAAM,SAAS,OAAO,eAAe,SAAS,gBAAgB,gBAAgB;AAC9E,QAAM,aAAa,OAAO,oBAAoB;AAC9C,QAAM,kBAAkB;AACxB,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,eAAe,KAAqB;AAC3C,SAAO,UAAU,GAAG;AACtB;AAEA,SAAS,YAAY,IAAmC;AACtD,MAAI,OAAO,GAAG,YAAY,YAAY;AACpC,OAAG,UAAU,CAAC,YAAqB;AAAA,EACrC;AAEA,MAAI,OAAO,GAAG,kBAAkB,YAAY;AAC1C,OAAG,gBAAgB,CAAC,OAAmE,CAAC,MAAM;AAC5F,YAAM,OAAO,gBAAgB;AAC7B,WAAK,KAAK,SAAS,IAAI;AACvB,WAAK,KAAK,UAAU,MAAS;AAC7B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,qBAAqB,YAAY;AAC7C,OAAG,mBAAmB,CAAC,OAAmE,CAAC,MAAM;AAC/F,YAAM,OAAO;AAAA,QACX,kBAAkB;AAAA,QAClB,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,mBAAmB;AAAA,MACrB;AACA,WAAK,KAAK,SAAS,IAAI;AACvB,WAAK,KAAK,UAAU,MAAS;AAC7B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,sBAAsB,YAAY;AAC9C,OAAG,oBAAoB,OAAO;AAAA,MAC5B,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,GAAG,gBAAgB;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,mBAAmB,YAAY;AAC3C,OAAG,iBAAiB,CAAC,KAAa,SAAkB;AAClD,YAAM,QAAQ,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AACnE,mBAAa,QAAQ,eAAe,OAAO,GAAG,CAAC,GAAG,KAAK;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,mBAAmB,YAAY;AAC3C,OAAG,iBAAiB,CAAC,QAAgB;AACnC,YAAM,MAAM,aAAa,QAAQ,eAAe,OAAO,GAAG,CAAC,CAAC;AAC5D,UAAI,OAAO,KAAM,QAAO;AACxB,UAAI;AACF,eAAO,KAAK,MAAM,GAAG;AAAA,MACvB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,sBAAsB,YAAY;AAC9C,OAAG,oBAAoB,CAAC,QAAgB;AACtC,mBAAa,WAAW,eAAe,OAAO,GAAG,CAAC,CAAC;AAAA,IACrD;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,qBAAqB,YAAY;AAC7C,OAAG,mBAAmB,MAAM;AAC1B,YAAM,SAAS;AACf,YAAM,OAAiB,CAAC;AACxB,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,YAAI,KAAK,WAAW,MAAM,EAAG,MAAK,KAAK,GAAG;AAAA,MAC5C;AACA,WAAK,QAAQ,CAAC,QAAQ,aAAa,WAAW,GAAG,CAAC;AAAA,IACpD;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,uBAAuB,YAAY;AAC/C,OAAG,qBAAqB,MAAM;AAC5B,YAAM,SAAS;AACf,YAAM,OAAiB,CAAC;AACxB,UAAI,cAAc;AAClB,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAM,UAAU,aAAa,IAAI,CAAC;AAClC,YAAI,CAAC,SAAS,WAAW,MAAM,EAAG;AAClC,aAAK,KAAK,QAAQ,MAAM,OAAO,MAAM,CAAC;AACtC,wBAAgB,aAAa,QAAQ,OAAO,KAAK,IAAI,SAAS;AAAA,MAChE;AACA,aAAO,EAAE,MAAM,aAAa,WAAW,KAAK,OAAO,KAAK;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,OAAO,GAAG,YAAY,YAAY;AACpC,OAAG,UAAU,CAAC,SAUR;AACJ,YAAM,aAAa,IAAI,gBAAgB;AACvC,YAAM,UAAU,KAAK,UAAU,OAAO,YAAY;AAClD,UAAI,aAAa,KAAK;AACtB,YAAM,OAAoB;AAAA,QACxB;AAAA,QACA,SAAS,EAAE,gBAAgB,oBAAoB,GAAI,KAAK,UAAU,CAAC,EAAG;AAAA,QACtE,QAAQ,WAAW;AAAA,MACrB;AAEA,UAAI,WAAW,SAAS,KAAK,QAAQ,OAAO,KAAK,SAAS,UAAU;AAClE,cAAM,MAAM,IAAI,IAAI,YAAY,OAAO,SAAS,IAAI;AACpD,eAAO,QAAQ,KAAK,IAA+B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7E,cAAI,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,QAC5C,CAAC;AACD,qBAAa,IAAI,SAAS;AAAA,MAC5B,WAAW,KAAK,QAAQ,MAAM;AAC5B,aAAK,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI;AAAA,MAClF;AAEA,YAAM,YAAY,OAAO,KAAK,OAAO,IAAI,IACrC,OAAO,WAAW,MAAM,WAAW,MAAM,GAAG,OAAO,KAAK,OAAO,CAAC,IAChE;AAEJ,YAAM,YAAY,IAAI,EACnB,KAAK,OAAO,aAAa;AACxB,cAAM,UAAU,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAC7D,YAAI;AACJ,YAAI,KAAK,aAAa,cAAe,QAAO,MAAM,SAAS,YAAY;AAAA,aAClE;AACH,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAI,KAAK,aAAa,OAAQ,QAAO;AAAA,eAChC;AACH,gBAAI;AACF,qBAAO,KAAK,MAAM,IAAI;AAAA,YACxB,QAAQ;AACN,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,aAAK,KAAK,SAAS,EAAE,MAAM,YAAY,SAAS,QAAQ,QAAQ,SAAS,QAAQ,aAAa,CAAC;AAAA,MACjG,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,aAAK,KAAK,MAAM,EAAE,QAAQ,gBAAgB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,GAAG,CAAC;AAAA,MACtG,CAAC,EACA,QAAQ,MAAM;AACb,YAAI,aAAa,KAAM,QAAO,aAAa,SAAS;AACpD,aAAK,KAAK,UAAU,MAAS;AAAA,MAC/B,CAAC;AAEH,aAAO;AAAA,QACL,OAAO,MAAM,WAAW,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,qBAA2B;AACzC,QAAM,QAAQ,MAAM;AAClB,UAAM,SAAS;AACf,QAAI,CAAC,OAAO,MAAM,OAAO,OAAO,OAAO,UAAU;AAC/C,aAAO,KAAK,CAAC;AAAA,IACf;AACA,UAAM,KAAK,OAAO;AAClB,gBAAY,EAAE;AACd,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,EAAG;AAEb,QAAM,QAAQ,OAAO,YAAY,MAAM;AACrC,QAAI,MAAM,EAAG,QAAO,cAAc,KAAK;AAAA,EACzC,GAAG,GAAG;AACR;;;ACxMA,mBAAmB;AACnB,uBAAuB;AACvB,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,2BAA2B;",
|
|
6
|
-
"names": ["import_electron", "disposables", "disposables", "
|
|
3
|
+
"sources": ["../../../src/preload/runtime/bridge.ts", "../../../src/shared/ipc-channels.ts", "../../../src/preload/runtime/host.ts", "../../../src/preload/instrumentation/console.ts", "../../../src/preload/instrumentation/disposable.ts", "../../../src/preload/instrumentation/app-data.ts", "../../../src/preload/shared/constants.ts", "../../../src/preload/instrumentation/wxml-extract.ts", "../../../src/preload/instrumentation/wxml.ts", "../../../src/preload/shared/api-compat.ts", "../../../src/preload/windows/simulator.ts"],
|
|
4
|
+
"sourcesContent": ["import { contextBridge } from 'electron'\n\nexport interface WxmlNode {\n tagName: string\n attrs: Record<string, string>\n children: WxmlNode[]\n text?: string\n sid?: string\n}\n\nexport interface Snapshot<T> {\n gen: number\n ready: boolean\n data: T\n}\n\nexport interface StorageSnapshot extends Snapshot<Record<string, string>> {\n namespace: string | null\n}\n\ntype RefreshTarget = 'wxml' | 'appdata' | 'storage'\n\ninterface SimulatorBridgeState {\n appdata: Snapshot<Record<string, unknown>>\n storage: StorageSnapshot\n wxml: Snapshot<WxmlNode | WxmlNode[] | null>\n refreshHandler: ((type: RefreshTarget) => void) | null\n}\n\nconst state: SimulatorBridgeState = {\n appdata: { gen: 0, ready: true, data: {} },\n storage: { gen: 0, ready: false, namespace: null, data: {} },\n wxml: { gen: 0, ready: false, data: null },\n refreshHandler: null,\n}\n\nlet highlightOverlay: HTMLDivElement | null = null\nlet exposedApi: Record<string, unknown> | null = null\n\nfunction clone<T>(value: T): T {\n try {\n return JSON.parse(JSON.stringify(value)) as T\n } catch {\n return value\n }\n}\n\nfunction getPageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction ensureOverlay(doc: Document): HTMLDivElement {\n if (highlightOverlay && highlightOverlay.ownerDocument === doc) return highlightOverlay\n highlightOverlay = doc.createElement('div')\n highlightOverlay.id = '__simulator-highlight'\n highlightOverlay.style.cssText =\n 'position:fixed;pointer-events:none;z-index:999999;' +\n 'border:2px solid #1a73e8;background:rgba(26,115,232,0.12);' +\n 'transition:all 0.1s ease;display:none;border-radius:2px;'\n doc.body.appendChild(highlightOverlay)\n return highlightOverlay\n}\n\nfunction highlightElement(sid: string): void {\n const iframe = getPageIframe()\n if (!iframe?.contentDocument) return\n const doc = iframe.contentDocument\n const el = doc.querySelector(`[data-sid=\"${sid}\"]`) as HTMLElement | null\n if (!el) return\n const rect = el.getBoundingClientRect()\n const overlay = ensureOverlay(doc)\n overlay.style.left = `${rect.left}px`\n overlay.style.top = `${rect.top}px`\n overlay.style.width = `${rect.width}px`\n overlay.style.height = `${rect.height}px`\n overlay.style.display = 'block'\n}\n\nfunction unhighlightElement(): void {\n if (highlightOverlay) highlightOverlay.style.display = 'none'\n}\n\nexport { highlightElement, unhighlightElement }\n\nfunction buildApi(): Record<string, unknown> {\n return {\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getAppdataGen: () => state.appdata.gen,\n getStorageSnapshot: () => clone(state.storage),\n getStorageGen: () => state.storage.gen,\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n getWxmlGen: () => state.wxml.gen,\n refresh: (type: RefreshTarget) => state.refreshHandler?.(type),\n highlightElement,\n unhighlightElement,\n }\n}\n\nexport const simulatorBridge = state\n\nexport function setRefreshHandler(handler: ((type: RefreshTarget) => void) | null): void {\n state.refreshHandler = handler\n}\n\nexport function setAppDataSnapshot(data: Record<string, unknown>): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: clone(data),\n }\n}\n\nexport function clearAppDataSnapshot(): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: {},\n }\n}\n\nexport function setStorageSnapshot(namespace: string | null, data: Record<string, string>): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: namespace !== null,\n namespace,\n data: clone(data),\n }\n}\n\nexport function clearStorageSnapshot(): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: false,\n namespace: null,\n data: {},\n }\n}\n\nexport function setWxmlSnapshot(data: WxmlNode | WxmlNode[] | null, ready = true): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready,\n data: clone(data),\n }\n}\n\nexport function clearWxmlSnapshot(): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready: false,\n data: null,\n }\n}\n\nexport function resetBridgeState(): void {\n clearAppDataSnapshot()\n clearStorageSnapshot()\n clearWxmlSnapshot()\n unhighlightElement()\n state.refreshHandler = null\n}\n\nexport function installSimulatorBridge(): () => void {\n if (!exposedApi) {\n exposedApi = buildApi()\n }\n\n try {\n contextBridge.exposeInMainWorld('__simulatorData', {\n ...exposedApi,\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getStorageSnapshot: () => clone(state.storage),\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n })\n } catch {\n ;(window as unknown as Record<string, unknown>).__simulatorData = exposedApi\n }\n\n return () => {\n resetBridgeState()\n const windowRef = window as unknown as Record<string, unknown>\n if (windowRef.__simulatorData === exposedApi) {\n delete windowRef.__simulatorData\n }\n }\n}\n", "/**\n * Centralised IPC channel name constants for dimina-devtools.\n *\n * Every raw channel string used across main, renderer, preload and e2e code\n * should reference one of these constants so that renaming a channel only\n * requires a single edit.\n */\n\n// \u2500\u2500 Simulator (preload \u2192 host / renderer \u2194 main) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SimulatorChannel = {\n Attach: 'simulator:attach',\n Detach: 'simulator:detach',\n Resize: 'simulator:resize',\n SetVisible: 'simulator:setVisible',\n Console: 'simulator:console',\n Wxml: 'simulator:wxml',\n AppData: 'simulator:appdata',\n AppDataAll: 'simulator:appdata-all',\n} as const\n\n// \u2500\u2500 Storage (CDP-backed; main process attaches the debugger to the\n// simulator <webview> and forwards DOMStorage events to the renderer) \u2500\u2500\nexport const SimulatorStorageChannel = {\n GetSnapshot: 'simulator:storage:snapshot',\n Event: 'simulator:storage:event',\n} as const\n\nexport interface StorageItem { key: string; value: string }\nexport type StorageEvent =\n | { type: 'added'; key: string; newValue: string }\n | { type: 'updated'; key: string; oldValue: string; newValue: string }\n | { type: 'removed'; key: string }\n | { type: 'cleared' }\n\n// \u2500\u2500 Workbench \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchChannel = {\n GetPanelConfig: 'workbench:getPanelConfig',\n GetApiNamespaces: 'workbench:getApiNamespaces',\n Reset: 'workbench:reset',\n} as const\n\n// \u2500\u2500 Workbench settings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchSettingsChannel = {\n Get: 'workbenchSettings:get',\n Save: 'workbenchSettings:save',\n SetTheme: 'workbenchSettings:setTheme',\n GetCdpStatus: 'workbenchSettings:getCdpStatus',\n SetVisible: 'workbenchSettings:setVisible',\n Init: 'workbenchSettings:init',\n} as const\n\n// \u2500\u2500 Project session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectChannel = {\n Open: 'project:open',\n Close: 'project:close',\n GetPages: 'project:getPages',\n GetCompileConfig: 'project:getCompileConfig',\n SaveCompileConfig: 'project:saveCompileConfig',\n Status: 'project:status',\n} as const\n\n// \u2500\u2500 Project list / workspace \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectsChannel = {\n List: 'projects:list',\n Add: 'projects:add',\n Remove: 'projects:remove',\n} as const\n\n// \u2500\u2500 Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DialogChannel = {\n OpenDirectory: 'dialog:openDirectory',\n} as const\n\n// \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PanelChannel = {\n List: 'panel:list',\n Eval: 'panel:eval',\n Select: 'panel:select',\n SelectSimulator: 'panel:selectSimulator',\n} as const\n\n// \u2500\u2500 Popover \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PopoverChannel = {\n Show: 'popover:show',\n Hide: 'popover:hide',\n Relaunch: 'popover:relaunch',\n Closed: 'popover:closed',\n Init: 'popover:init',\n} as const\n\n// \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ToolbarChannel = {\n GetActions: 'toolbar:getActions',\n ActionsChanged: 'toolbar:actionsChanged',\n /** Prefix for dynamic action channels: `toolbar:action:${actionId}` */\n ActionPrefix: 'toolbar:action:',\n} as const\n\n// \u2500\u2500 Window \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WindowChannel = {\n NavigateBack: 'window:navigateBack',\n} as const\n\n// \u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const AppChannel = {\n GetPreloadPath: 'app:getPreloadPath',\n GetBranding: 'app:getBranding',\n} as const\n\n// \u2500\u2500 Bridge (renderer \u2194 preload, webview.send / sendToHost) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BridgeChannel = {\n WxmlRefreshRequest: 'wxml:refresh:request',\n AppDataGetAllRequest: 'appdata:getAll:request',\n AppDataGetAllResponse: 'appdata:getAll:response',\n} as const\n\n// \u2500\u2500 Automation (WebSocket server) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const AutomationChannel = {\n GetPort: 'automation:port',\n} as const\n\n// \u2500\u2500 Embedded settings overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SettingsChannel = {\n SetVisible: 'settings:setVisible',\n ConfigChanged: 'settings:configChanged',\n ProjectSettingsChanged: 'settings:projectSettingsChanged',\n Init: 'settings:init',\n Closed: 'settings:closed',\n Changed: 'settings:changed',\n} as const\n", "import { ipcRenderer } from 'electron'\n\nexport function sendToHost(channel: string, data: unknown): void {\n ipcRenderer.sendToHost(channel, data)\n}\n\nexport function safeSerialize(val: unknown): unknown {\n if (val === null || val === undefined) return val\n if (typeof val === 'function') return `[Function: ${(val as { name?: string }).name || 'anonymous'}]`\n if (typeof val !== 'object') return val\n if (val instanceof Error) return { __isError: true, message: val.message, stack: val.stack }\n try {\n return structuredClone(val)\n } catch {\n // expected: some objects (e.g. DOM nodes, proxies) cannot be structuredCloned\n }\n try {\n return JSON.parse(JSON.stringify(val))\n } catch {\n // expected: circular references or non-serializable values\n }\n return String(val)\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost, safeSerialize } from '../runtime/host.js'\n\ntype ConsoleLevel = 'log' | 'warn' | 'error' | 'info' | 'debug'\n\nexport function installConsoleInstrumentation(): () => void {\n const consoleRef = console as unknown as Record<string, (...args: unknown[]) => void>\n const originals = new Map<ConsoleLevel, (...args: unknown[]) => void>()\n const levels: ConsoleLevel[] = ['log', 'warn', 'error', 'info', 'debug']\n\n for (const level of levels) {\n const original = consoleRef[level]?.bind(console)\n if (!original) continue\n originals.set(level, original)\n consoleRef[level] = (...args: unknown[]) => {\n original(...args)\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level,\n args: args.map(safeSerialize),\n ts: Date.now(),\n })\n }\n }\n\n const handleError = (event: ErrorEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n stack: event.error?.stack,\n }],\n ts: Date.now(),\n })\n }\n\n const handleRejection = (event: PromiseRejectionEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{ message: 'Unhandled Promise Rejection', reason: String(event.reason) }],\n ts: Date.now(),\n })\n }\n\n window.addEventListener('error', handleError)\n window.addEventListener('unhandledrejection', handleRejection)\n\n return () => {\n for (const [level, original] of originals) {\n consoleRef[level] = original\n }\n window.removeEventListener('error', handleError)\n window.removeEventListener('unhandledrejection', handleRejection)\n }\n}\n", "/** A cleanup function that releases a resource. */\nexport type Disposable = () => void\n\n/**\n * Creates a set of disposable cleanup functions that can be disposed together.\n * Useful for aggregating timer, observer, and event listener cleanup.\n */\nexport function createDisposableSet(): {\n add: (fn: Disposable) => void\n disposeAll: () => void\n} {\n const disposables: Disposable[] = []\n return {\n add: (fn) => disposables.push(fn),\n disposeAll: () => {\n disposables.forEach((fn) => fn())\n disposables.length = 0\n },\n }\n}\n", "import { SimulatorChannel, BridgeChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n simulatorBridge,\n clearAppDataSnapshot,\n setAppDataSnapshot,\n} from '../runtime/bridge.js'\nimport { createDisposableSet } from './disposable.js'\n\n// Window augmentation is in ../types.ts\n\ntype AppDataBody = {\n bridgeId?: string\n moduleId?: string\n data?: unknown\n}\n\nconst appDataCache = new Map<string, unknown>()\n\nfunction publishSnapshot(): void {\n const data: Record<string, unknown> = {}\n for (const [key, value] of appDataCache) {\n data[key] = value\n }\n setAppDataSnapshot(data)\n}\n\nfunction decodeWorkerMessage(message: unknown): AppDataBody | null {\n let payload = message\n if (typeof payload === 'string') {\n try {\n payload = JSON.parse(payload)\n } catch {\n return null\n }\n }\n\n const record = payload as { type?: string; body?: AppDataBody } | null\n if (record?.type !== 'u' || !record.body) return null\n return record.body\n}\n\nfunction createInstrumentedWorker(OriginalWorker: typeof Worker): typeof Worker {\n function InstrumentedWorker(\n this: unknown,\n scriptURL: string | URL,\n options?: WorkerOptions\n ): Worker {\n const resolvedScriptURL = scriptURL instanceof URL\n ? scriptURL\n : new URL(scriptURL, window.location.href)\n const worker = Reflect.construct(\n OriginalWorker,\n [resolvedScriptURL, options],\n new.target ?? InstrumentedWorker\n ) as Worker\n\n worker.addEventListener('message', (event: MessageEvent) => {\n const body = decodeWorkerMessage(event.data)\n if (!body) return\n window.__simulatorHook?.appData({\n bridgeId: body.bridgeId,\n moduleId: body.moduleId,\n data: body.data,\n })\n })\n\n return worker\n }\n\n Object.setPrototypeOf(InstrumentedWorker, OriginalWorker)\n Object.defineProperty(InstrumentedWorker, 'prototype', {\n value: OriginalWorker.prototype,\n })\n\n return InstrumentedWorker as unknown as typeof Worker\n}\n\nexport function installAppDataInstrumentation(): () => void {\n const disposables = createDisposableSet()\n const originalHook = window.__simulatorHook\n const originalDescriptor = Object.getOwnPropertyDescriptor(window, 'Worker')\n const OriginalWorker = window.Worker\n\n window.__simulatorHook = {\n appData: (body: unknown) => {\n const record = body as AppDataBody | null\n if (record?.bridgeId && record?.moduleId) {\n const key = `${record.bridgeId}/${record.moduleId}`\n appDataCache.set(key, record.data)\n publishSnapshot()\n }\n sendToHost(SimulatorChannel.AppData, body)\n },\n }\n\n Object.defineProperty(window, 'Worker', {\n configurable: true,\n writable: true,\n value: createInstrumentedWorker(OriginalWorker),\n })\n\n publishSnapshot()\n\n disposables.add(() => {\n if (originalDescriptor) {\n Object.defineProperty(window, 'Worker', originalDescriptor)\n } else {\n window.Worker = OriginalWorker\n }\n })\n\n disposables.add(() => {\n if (originalHook) {\n window.__simulatorHook = originalHook\n } else {\n delete window.__simulatorHook\n }\n })\n\n disposables.add(() => {\n appDataCache.clear()\n clearAppDataSnapshot()\n publishSnapshot()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport function sendAllAppData(): void {\n publishSnapshot()\n sendToHost(BridgeChannel.AppDataGetAllResponse, simulatorBridge.appdata.data)\n}\n", "/** Preload-only timing constants for instrumentation. */\n\n/** Debounce delay for WXML MutationObserver callbacks. */\nexport const WXML_DEBOUNCE_MS = 300\n\n/** Interval between WXML attachment retries. */\nexport const WXML_RETRY_INTERVAL_MS = 500\n\n/** Maximum time to keep retrying WXML attachment. */\nexport const WXML_RETRY_TIMEOUT_MS = 10_000\n\n/** Interval for polling Vue app readiness during navigation. */\nexport const NAVIGATION_POLL_INTERVAL_MS = 200\n\n/** Maximum time to wait for Vue app during navigation. */\nexport const NAVIGATION_TIMEOUT_MS = 10_000\n\n/** Maximum number of retries for simulator webview attachment. */\nexport const MAX_ATTACH_RETRIES = 50\n\n/** Interval between simulator attachment retries. */\nexport const ATTACH_RETRY_INTERVAL_MS = 200\n", "import { type WxmlNode } from '../runtime/bridge.js'\n\nexport interface ComponentInstance extends Record<string, unknown> {\n type?: Record<string, unknown>\n props?: Record<string, unknown>\n attrs?: Record<string, unknown>\n parent?: Record<string, unknown>\n appContext?: Record<string, unknown>\n subTree?: Record<string, unknown>\n}\n\nconst INTERNAL_CLASSES = new Set([\n 'dd-swiper-wrapper', 'dd-swiper-slides', 'dd-swiper-slide-frame', 'dd-swiper-dots',\n 'dd-picker-overlay', 'dd-picker-container', 'dd-picker-header', 'dd-picker-body',\n])\n\nconst FRAMEWORK_TEMPLATE_RE = /^(taro_tmpl|tmpl_\\d+)/\n\nfunction resolveTemplateNameFromParent(instance: ComponentInstance): string | null {\n const parent = instance.parent as Record<string, unknown> | undefined\n if (!parent) return null\n const parentType = parent.type as Record<string, unknown> | undefined\n const components = parentType?.components as Record<string, unknown> | undefined\n if (components) {\n for (const [regName, comp] of Object.entries(components)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n }\n const appComponents = instance.appContext?.components as Record<string, unknown> | undefined\n if (!appComponents) return null\n for (const [regName, comp] of Object.entries(appComponents)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n return null\n}\n\nfunction resolveTagName(instance: ComponentInstance): string {\n const type = instance.type\n if (!type) return 'unknown'\n if (typeof type.__tagName === 'string') return type.__tagName\n const name = (type.__name || type.name) as string | undefined\n if (!name) {\n if (type.__scopeId && type.components) return 'page'\n if (type.__scopeId) return resolveTemplateNameFromParent(instance) || 'template'\n return 'unknown'\n }\n if (name === 'dd-page') return 'page'\n if (name.startsWith('dd-')) return name.slice(3)\n if (name.startsWith('Dd') && name.length > 2) return name.slice(2).toLowerCase()\n return name\n}\n\nfunction extractProps(instance: ComponentInstance): Record<string, string> {\n const out: Record<string, string> = {}\n for (const raw of [instance.props, instance.attrs]) {\n if (!raw) continue\n for (const [k, v] of Object.entries(raw)) {\n if (typeof v === 'function' || v === undefined) continue\n if (k === 'data' || k.startsWith('__')) continue\n if (typeof v === 'boolean' && !v) continue\n if (k === 'class' && typeof v === 'string') {\n const cleaned = v.split(/\\s+/).filter((c) => !c.startsWith('dd-')).join(' ')\n if (cleaned) out[k] = cleaned\n continue\n }\n out[k] = typeof v === 'object' ? JSON.stringify(v) : String(v)\n }\n }\n return out\n}\n\nfunction isInternalElement(vnode: Record<string, unknown>): boolean {\n const props = vnode.props as Record<string, unknown> | null\n if (!props) return false\n const cls = String(props.class || '')\n return cls.split(/\\s+/).some((c) => INTERNAL_CLASSES.has(c))\n}\n\nfunction getElementSid(instance: ComponentInstance): string | undefined {\n const subTree = instance.subTree as Record<string, unknown> | undefined\n const el = subTree?.el as HTMLElement | undefined\n return el?.getAttribute ? el.getAttribute('data-sid') ?? undefined : undefined\n}\n\nfunction isTransparentComponent(instance: ComponentInstance, tagName: string): boolean {\n if (tagName === 'unknown') return true\n if (tagName === 'template') {\n const props = instance.props as Record<string, unknown> | undefined\n const is = props?.is as string | undefined\n if (is && FRAMEWORK_TEMPLATE_RE.test(is)) return true\n if (!is) {\n const type = instance.type as Record<string, unknown> | undefined\n if (type?.__scopeId && !type.components) return true\n }\n }\n return false\n}\n\nfunction extractChildrenFromVNode(vnode: Record<string, unknown> | null | undefined, depth: number): WxmlNode[] {\n if (!vnode || depth > 50) return []\n if (vnode.component) {\n const result = walkInstance(vnode.component as ComponentInstance, depth + 1)\n return result ? (Array.isArray(result) ? result : [result]) : []\n }\n if (vnode.suspense) {\n const suspense = vnode.suspense as Record<string, unknown>\n const activeBranch = suspense.activeBranch as Record<string, unknown> | null\n return activeBranch ? extractChildrenFromVNode(activeBranch, depth + 1) : []\n }\n if (typeof vnode.children === 'string' && vnode.children.trim()) {\n const vnodeType = vnode.type\n if (typeof vnodeType === 'symbol' || typeof vnodeType === 'string') {\n return [{ tagName: '#text', attrs: {}, children: [], text: vnode.children.trim() }]\n }\n }\n const kids = vnode.children\n if (!Array.isArray(kids)) return []\n const result: WxmlNode[] = []\n for (const child of kids) {\n if (!child) continue\n if (typeof child === 'string') {\n const trimmed = child.trim()\n if (trimmed) result.push({ tagName: '#text', attrs: {}, children: [], text: trimmed })\n continue\n }\n if (typeof child !== 'object') continue\n const c = child as Record<string, unknown>\n if (c.component) {\n const walked = walkInstance(c.component as ComponentInstance, depth + 1)\n if (walked) result.push(...(Array.isArray(walked) ? walked : [walked]))\n continue\n }\n if (typeof c.type === 'symbol') {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n continue\n }\n if (typeof c.type === 'string') {\n if (isInternalElement(c)) {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n } else if (typeof c.children === 'string' && c.children.trim()) {\n result.push({ tagName: '#text', attrs: {}, children: [], text: c.children.trim() })\n } else {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n continue\n }\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n return result\n}\n\nexport function walkInstance(instance: ComponentInstance, depth: number): WxmlNode | WxmlNode[] | null {\n if (depth > 50) return null\n const tagName = resolveTagName(instance)\n const children = extractChildrenFromVNode(instance.subTree as Record<string, unknown>, depth)\n if (isTransparentComponent(instance, tagName)) return children.length > 0 ? children : null\n const node: WxmlNode = { tagName, attrs: extractProps(instance), children }\n const sid = getElementSid(instance)\n if (sid) node.sid = sid\n return node\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n clearWxmlSnapshot,\n setWxmlSnapshot,\n type WxmlNode,\n unhighlightElement,\n} from '../runtime/bridge.js'\nimport {\n WXML_DEBOUNCE_MS,\n WXML_RETRY_INTERVAL_MS,\n WXML_RETRY_TIMEOUT_MS,\n NAVIGATION_POLL_INTERVAL_MS,\n NAVIGATION_TIMEOUT_MS,\n} from '../shared/constants.js'\nimport { createDisposableSet } from './disposable.js'\nimport { walkInstance, type ComponentInstance } from './wxml-extract.js'\n\nfunction findActivePageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction getVueAppFromIframe(iframe: HTMLIFrameElement): ComponentInstance | null {\n try {\n const doc = iframe.contentDocument\n if (!doc?.body) return null\n const body = doc.body as unknown as Record<string, unknown>\n const app = body.__vue_app__ as Record<string, unknown> | undefined\n if (!app) return null\n if (app._instance) return app._instance as ComponentInstance\n const container = app._container as Record<string, unknown> | undefined\n const vnode = container?._vnode as Record<string, unknown> | undefined\n return vnode?.component as ComponentInstance | null ?? null\n } catch {\n return null\n }\n}\n\nlet wxmlTimer: ReturnType<typeof setTimeout> | undefined\nlet currentObserver: MutationObserver | null = null\nlet currentIframe: HTMLIFrameElement | null = null\nlet topObserver: MutationObserver | null = null\nlet retryTimer: ReturnType<typeof setInterval> | undefined\nlet retryTimeout: ReturnType<typeof setTimeout> | undefined\nlet navigationWaitTimer: ReturnType<typeof setInterval> | undefined\nlet navigationWaitTimeout: ReturnType<typeof setTimeout> | undefined\n\nconst disposables = createDisposableSet()\n\nfunction clearTimers(): void {\n if (wxmlTimer) clearTimeout(wxmlTimer)\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n if (navigationWaitTimer) clearInterval(navigationWaitTimer)\n if (navigationWaitTimeout) clearTimeout(navigationWaitTimeout)\n wxmlTimer = undefined\n retryTimer = undefined\n retryTimeout = undefined\n navigationWaitTimer = undefined\n navigationWaitTimeout = undefined\n}\n\nfunction publishTree(tree: WxmlNode | WxmlNode[] | null): void {\n if (tree) {\n const normalized: WxmlNode = Array.isArray(tree)\n ? { tagName: '#fragment', attrs: {}, children: tree }\n : tree\n setWxmlSnapshot(normalized, true)\n sendToHost(SimulatorChannel.Wxml, normalized)\n return\n }\n clearWxmlSnapshot()\n unhighlightElement()\n}\n\nfunction sendWxmlTree(): void {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n const instance = getVueAppFromIframe(iframe)\n if (!instance) {\n publishTree(null)\n return\n }\n const tree = walkInstance(instance, 0)\n if (!tree) {\n publishTree(null)\n return\n }\n publishTree(tree)\n}\n\nfunction observeIframe(iframe: HTMLIFrameElement): void {\n if (iframe === currentIframe) return\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n currentIframe = iframe\n\n const doc = iframe.contentDocument\n if (!doc?.body) {\n publishTree(null)\n return\n }\n\n sendWxmlTree()\n currentObserver = new MutationObserver(() => {\n clearTimeout(wxmlTimer)\n wxmlTimer = setTimeout(sendWxmlTree, WXML_DEBOUNCE_MS)\n })\n currentObserver.observe(doc.body, { childList: true, subtree: true })\n}\n\nfunction tryAttach(): boolean {\n const iframe = findActivePageIframe()\n if (!iframe) return false\n const instance = getVueAppFromIframe(iframe)\n if (!instance) return false\n observeIframe(iframe)\n return true\n}\n\nfunction scheduleAttach(): void {\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n retryTimer = setInterval(() => {\n if (tryAttach() && retryTimer) {\n clearInterval(retryTimer)\n retryTimer = undefined\n }\n }, WXML_RETRY_INTERVAL_MS)\n retryTimeout = setTimeout(() => {\n if (retryTimer) clearInterval(retryTimer)\n retryTimer = undefined\n }, WXML_RETRY_TIMEOUT_MS)\n}\n\nfunction observeTopLevel(): void {\n if (topObserver) return\n topObserver = new MutationObserver(() => {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n if (iframe !== currentIframe) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n navigationWaitTimer = setInterval(() => {\n if (getVueAppFromIframe(iframe)) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n observeIframe(iframe)\n }\n }, NAVIGATION_POLL_INTERVAL_MS)\n navigationWaitTimeout = setTimeout(() => {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n navigationWaitTimeout = undefined\n }, NAVIGATION_TIMEOUT_MS)\n }\n })\n\n if (document.body) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n if (document.body && topObserver) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n }\n }, { once: true })\n }\n}\n\nexport function installWxmlInstrumentation(): () => void {\n if (!tryAttach()) {\n scheduleAttach()\n }\n observeTopLevel()\n\n disposables.add(() => {\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n })\n disposables.add(() => {\n if (topObserver) {\n topObserver.disconnect()\n topObserver = null\n }\n })\n disposables.add(() => {\n currentIframe = null\n clearTimers()\n })\n disposables.add(() => {\n clearWxmlSnapshot()\n unhighlightElement()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport const setupWxmlObserver = installWxmlInstrumentation\nexport { sendWxmlTree }\n", "type Callback<T = unknown> = ((payload: T) => void) | undefined\n\nfunction call<T>(fn: Callback<T>, payload: T): void {\n try {\n fn?.(payload)\n } catch {\n // Ignore callback errors in compat shims.\n }\n}\n\nfunction buildWindowInfo() {\n const width = window.innerWidth || document.documentElement.clientWidth || 375\n const height = window.innerHeight || document.documentElement.clientHeight || 812\n const pixelRatio = window.devicePixelRatio || 2\n const statusBarHeight = 0\n return {\n pixelRatio,\n screenWidth: width,\n screenHeight: height,\n windowWidth: width,\n windowHeight: height,\n statusBarHeight,\n safeArea: {\n width,\n height,\n top: statusBarHeight,\n bottom: height,\n left: 0,\n right: width,\n },\n }\n}\n\nfunction makeStorageKey(key: string): string {\n return `dimina:${key}`\n}\n\nfunction ensureWxApi(wx: Record<string, unknown>): void {\n if (typeof wx.canIUse !== 'function') {\n wx.canIUse = (_schema: unknown) => true\n }\n\n if (typeof wx.getWindowInfo !== 'function') {\n wx.getWindowInfo = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = buildWindowInfo()\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemSetting !== 'function') {\n wx.getSystemSetting = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = {\n bluetoothEnabled: false,\n locationEnabled: true,\n wifiEnabled: true,\n deviceOrientation: 'portrait',\n }\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemInfoSync !== 'function') {\n wx.getSystemInfoSync = () => ({\n brand: 'simulator',\n model: 'web',\n platform: 'simulator',\n system: 'web',\n language: 'zh_CN',\n SDKVersion: '3.0.0',\n ...buildWindowInfo(),\n })\n }\n\n if (typeof wx.setStorageSync !== 'function') {\n wx.setStorageSync = (key: string, data: unknown) => {\n const value = typeof data === 'string' ? data : JSON.stringify(data)\n localStorage.setItem(makeStorageKey(String(key)), value)\n }\n }\n\n if (typeof wx.getStorageSync !== 'function') {\n wx.getStorageSync = (key: string) => {\n const raw = localStorage.getItem(makeStorageKey(String(key)))\n if (raw == null) return ''\n try {\n return JSON.parse(raw)\n } catch {\n return raw\n }\n }\n }\n\n if (typeof wx.removeStorageSync !== 'function') {\n wx.removeStorageSync = (key: string) => {\n localStorage.removeItem(makeStorageKey(String(key)))\n }\n }\n\n if (typeof wx.clearStorageSync !== 'function') {\n wx.clearStorageSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(prefix)) keys.push(key)\n }\n keys.forEach((key) => localStorage.removeItem(key))\n }\n }\n\n if (typeof wx.getStorageInfoSync !== 'function') {\n wx.getStorageInfoSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n let currentSize = 0\n for (let i = 0; i < localStorage.length; i++) {\n const fullKey = localStorage.key(i)\n if (!fullKey?.startsWith(prefix)) continue\n keys.push(fullKey.slice(prefix.length))\n currentSize += (localStorage.getItem(fullKey) || '').length * 2\n }\n return { keys, currentSize, limitSize: 10 * 1024 * 1024 }\n }\n }\n\n if (typeof wx.request !== 'function') {\n wx.request = (opts: {\n url: string\n data?: unknown\n header?: Record<string, string>\n timeout?: number\n method?: string\n dataType?: 'json' | 'text' | 'arraybuffer'\n success?: Callback<unknown>\n fail?: Callback<unknown>\n complete?: Callback<void>\n }) => {\n const controller = new AbortController()\n const method = (opts.method || 'GET').toUpperCase()\n let requestUrl = opts.url\n const init: RequestInit = {\n method,\n headers: { 'Content-Type': 'application/json', ...(opts.header || {}) },\n signal: controller.signal,\n }\n\n if (method === 'GET' && opts.data && typeof opts.data === 'object') {\n const url = new URL(requestUrl, window.location.href)\n Object.entries(opts.data as Record<string, unknown>).forEach(([key, value]) => {\n url.searchParams.append(key, String(value))\n })\n requestUrl = url.toString()\n } else if (opts.data != null) {\n init.body = typeof opts.data === 'string' ? opts.data : JSON.stringify(opts.data)\n }\n\n const timeoutId = Number(opts.timeout) > 0\n ? window.setTimeout(() => controller.abort(), Number(opts.timeout))\n : null\n\n fetch(requestUrl, init)\n .then(async (response) => {\n const headers = Object.fromEntries(response.headers.entries())\n let data: unknown\n if (opts.dataType === 'arraybuffer') data = await response.arrayBuffer()\n else {\n const text = await response.text()\n if (opts.dataType === 'text') data = text\n else {\n try {\n data = JSON.parse(text)\n } catch {\n data = text\n }\n }\n }\n call(opts.success, { data, statusCode: response.status, header: headers, errMsg: 'request:ok' })\n })\n .catch((error) => {\n call(opts.fail, { errMsg: `request:fail ${error instanceof Error ? error.message : String(error)}` })\n })\n .finally(() => {\n if (timeoutId != null) window.clearTimeout(timeoutId)\n call(opts.complete, undefined)\n })\n\n return {\n abort: () => controller.abort(),\n }\n }\n }\n}\n\nexport function setupApiCompatHook(): void {\n const apply = () => {\n const target = window as unknown as { wx?: Record<string, unknown> }\n if (!target.wx || typeof target.wx !== 'object') {\n target.wx = {}\n }\n const wx = target.wx\n ensureWxApi(wx)\n return true\n }\n\n if (apply()) return\n\n const timer = window.setInterval(() => {\n if (apply()) window.clearInterval(timer)\n }, 200)\n}\n", "// Default preload script for the simulator <webview>.\n// Composes all built-in instrumentation. For custom preloads, import individual\n// functions from '@dimina-kit/devtools/preload' and assemble your own.\n//\n// This file is bundled into a single JS file via build:preload (esbuild)\n// because webview sandbox cannot resolve require() for separate modules.\nimport { installSimulatorBridge } from '../runtime/bridge.js'\nimport { installConsoleInstrumentation } from '../instrumentation/console.js'\nimport { installAppDataInstrumentation } from '../instrumentation/app-data.js'\nimport { installWxmlInstrumentation } from '../instrumentation/wxml.js'\nimport { setupApiCompatHook } from '../shared/api-compat.js'\n\n// Note: storage panel data is sourced from the main process via the CDP\n// DOMStorage domain (src/main/services/simulator-storage). No preload-side\n// localStorage hook is required.\n\nsetupApiCompatHook()\ninstallSimulatorBridge()\ninstallConsoleInstrumentation()\ninstallAppDataInstrumentation()\ninstallWxmlInstrumentation()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_electron", "disposables", "disposables", "result"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import{C as e,S as t,a as n,b as r,d as i,m as a,n as o,o as s,p as c,r as l,s as u,t as d,u as f,x as p,y as m}from"./ipc-transport-COKIC6Ny.js";import{n as h,r as g,t as _}from"./input-VLotwer2.js";import{_ as v,a as y,b,c as x,d as S,f as C,g as ee,h as te,i as ne,m as re,n as ie,o as ae,p as oe,r as se,s as ce,t as le,u as ue,v as de,x as w,y as T}from"./select-DzIsLaKX.js";var fe=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),pe=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),me=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),he=e=>{let t=me(e);return t.charAt(0).toUpperCase()+t.slice(1)},ge={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},_e=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},E=e(t()),ve=(0,E.createContext)({}),ye=()=>(0,E.useContext)(ve),be=(0,E.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=ye()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,E.createElement)(`svg`,{ref:c,...ge,width:t??l??ge.width,height:t??l??ge.height,stroke:e??f,strokeWidth:m,className:fe(`lucide`,p,i),...!a&&!_e(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,E.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),xe=(e,t)=>{let n=(0,E.forwardRef)(({className:n,...r},i)=>(0,E.createElement)(be,{ref:i,iconNode:t,className:fe(`lucide-${pe(he(e))}`,`lucide-${e}`,n),...r}));return n.displayName=he(e),n},Se=xe(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Ce=xe(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),we=e(r(),1),D=m();function Te({project:e,onOpen:t,onRemove:n}){let[r,i]=(0,E.useState)(!1);return(0,D.jsxs)(`div`,{className:`relative bg-surface border border-border rounded-lg overflow-hidden cursor-pointer transition-all duration-150 hover:border-accent hover:-translate-y-0.5`,onClick:()=>t(e),onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),children:[(0,D.jsx)(`div`,{className:`h-20 bg-surface-thumb`}),(0,D.jsxs)(`div`,{className:`p-3`,children:[(0,D.jsx)(`div`,{className:`text-sm font-medium text-text-white mb-1 truncate`,title:e.name,children:e.name}),(0,D.jsx)(`div`,{className:`text-[11px] text-text-secondary truncate`,title:e.path,children:e.path}),(0,D.jsx)(`div`,{className:`text-[11px] text-text-dim mt-1.5`,children:g(e.lastOpened)})]}),r&&(0,D.jsx)(w,{variant:`danger`,size:`icon-sm`,className:`absolute top-1.5 right-1.5 w-5 h-5 rounded-full bg-overlay text-text-secondary leading-none hover:text-status-error hover:bg-danger-bg`,onClick:t=>{t.stopPropagation(),n(e)},title:`移除`,children:`×`})]})}function Ee({projects:e,onAdd:t,onOpen:n,onRemove:r}){let[i,a]=(0,E.useState)(``),o=(0,E.useMemo)(()=>{if(!i.trim())return e;let t=i.trim().toLowerCase();return e.filter(e=>(e.name||``).toLowerCase().includes(t)||(e.path||``).toLowerCase().includes(t))},[e,i]);return(0,D.jsx)(`div`,{className:`flex flex-col h-screen bg-bg`,children:(0,D.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-6`,children:[(0,D.jsxs)(`div`,{className:`flex items-center justify-between mb-6 gap-4`,children:[(0,D.jsx)(`div`,{className:`flex items-center flex-1 max-w-xs min-w-0`,children:(0,D.jsxs)(`div`,{className:`relative w-full`,children:[(0,D.jsx)(Se,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-secondary pointer-events-none`}),(0,D.jsx)(_,{placeholder:`搜索`,value:i,onChange:e=>a(e.target.value),className:`w-full h-8 pl-8 pr-3 rounded-md text-sm`})]})}),(0,D.jsx)(w,{variant:`ghost`,size:`sm`,onClick:t,className:`shrink-0 text-accent hover:text-accent-hover hover:bg-transparent`,children:`导入`})]}),e.length>0?o.length>0?(0,D.jsx)(`div`,{className:`grid gap-4`,style:{gridTemplateColumns:`repeat(auto-fill, minmax(220px, 1fr))`},children:o.map(e=>(0,D.jsx)(Te,{project:e,onOpen:n,onRemove:r},e.path))}):(0,D.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-72 text-text-dim gap-3`,children:[(0,D.jsx)(`span`,{className:`text-5xl opacity-40`,children:`🔍`}),(0,D.jsx)(`span`,{className:`text-sm`,children:`未找到匹配的项目`})]}):(0,D.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-72 text-text-dim gap-3`,children:[(0,D.jsx)(`span`,{className:`text-5xl opacity-40`,children:`📁`}),(0,D.jsx)(`span`,{className:`text-sm`,children:`暂无项目,点击「导入」添加`})]})]})})}function De(){return d(n.GetBranding)}function Oe(){return o(n.GetPreloadPath)}function ke(){return o(i.List)}function Ae(){return d(u.OpenDirectory)}function je(e){return o(i.Add,e)}function Me(e){return d(i.Remove,e)}function Ne(e){return o(f.Open,e)}function Pe(e){return o(f.GetPages,e)}function Fe(e){return o(f.GetCompileConfig,e)}function Ie(e,t){return o(f.SaveCompileConfig,e,t)}function Le(e){return l(f.Status,t=>e(t))}var Re={selected:`simulator`,simulatorVisible:!0};function ze(e){return e+48}function Be(e,t){return Math.max(200,Math.min(t-200,e))}function O(e){return e.current}function Ve(e){let{initialDevice:t,simulatorRef:n}=e,[r,i]=(0,E.useState)(t),[a,o]=(0,E.useState)(100),[s,c]=(0,E.useState)(()=>ze(t.width)),l=(0,E.useRef)(null),u=(0,E.useRef)(s),d=(0,E.useRef)(s),f=(0,E.useRef)(r);(0,E.useEffect)(()=>{u.current=s,d.current=s},[s]),(0,E.useEffect)(()=>{f.current=r},[r]),(0,E.useEffect)(()=>()=>{l.current!==null&&window.cancelAnimationFrame(l.current)},[]);let p=(0,E.useCallback)(e=>{u.current=e,l.current===null&&(l.current=window.requestAnimationFrame(()=>{l.current=null,re(u.current)}))},[]),m=(0,E.useCallback)(e=>{let t=O(n);try{t?.send?.(`device:change`,{brand:`Apple`,model:e.name,pixelRatio:e.pixelRatio,screenWidth:e.width,screenHeight:e.height,statusBarHeight:e.statusBarHeight,system:e.system,platform:`ios`,safeAreaBottom:e.safeAreaBottom})}catch{}},[n]);return{device:r,zoom:a,simPanelWidth:s,setSimPanelWidth:c,handleDeviceChange:(0,E.useCallback)(e=>{let t=T.find(t=>t.name===e.target.value)??T[1];i(t),m(t);let n=ze(t.width);c(n),p(n)},[p,m]),handleZoomChange:(0,E.useCallback)(e=>{o(Number(e.target.value))},[]),handleSplitterDrag:(0,E.useCallback)(e=>{e.preventDefault();let t=e.clientX,n=d.current,r=e=>{let r=Be(n+e.clientX-t,window.innerWidth);c(r),p(r)},i=()=>{window.removeEventListener(`mousemove`,r),window.removeEventListener(`mouseup`,i)};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,i)},[p]),sendDeviceInfo:m,simPanelWidthRef:d,deviceRef:f,scheduleResize:p}}function He(e,t,n,r){let i=t.startPage||`pages/index/index`,a=(t.queryParams||[]).filter(e=>e.key).map(e=>`${encodeURIComponent(e.key)}=${encodeURIComponent(e.value)}`);return a.push(`scene=${t.scene||1001}`),`http://localhost:${n}/simulator.html${r?.length?`?apiNamespaces=${r.join(`,`)}`:``}#${e}|${i}?${a.join(`&`)}`}function Ue(e){let t=e.split(`#`)[1];if(!t)return``;let n=t.indexOf(`|`);return n===-1?t.split(`?`)[0].split(`/`).slice(1).join(`/`):t.slice(n+1).split(`?`)[0]}function We(e){let{projectPath:t,simulatorRef:n}=e,[r,i]=(0,E.useState)({status:`compiling`,message:`正在编译...`}),[a,o]=(0,E.useState)(null),[s,c]=(0,E.useState)([]),[l,u]=(0,E.useState)(0),[d,f]=(0,E.useState)({startPage:``,scene:ie,queryParams:[]}),[p,m]=(0,E.useState)(``);(0,E.useEffect)(()=>{let e=!1;async function n(){try{let n=await Ne(t);if(e)return;if(!n.success){i({status:`error`,message:n.error});return}let[r,a]=await Promise.all([Pe(t),Fe(t)]);if(e)return;o(n.appInfo),u(n.port),c(r.pages),f({startPage:a.startPage||r.entryPagePath||r.pages[0]||``,scene:a.scene??1001,queryParams:a.queryParams||[]}),i({status:`ready`,message:`编译完成`})}catch(t){if(e)return;i({status:`error`,message:t instanceof Error?t.message:String(t)})}}return n(),()=>{e=!0}},[t]),(0,E.useEffect)(()=>{Oe().then(m)},[]),(0,E.useEffect)(()=>Le(e=>i(e)),[]);let h=(0,E.useRef)(!1),g=(0,E.useRef)(null);return(0,E.useEffect)(()=>()=>{g.current?.()},[]),{compileStatus:r,appInfo:a,port:l,pages:s,compileConfig:d,preloadPath:p,relaunch:(0,E.useCallback)(async(e=d)=>{try{if(!a?.appId||h.current)return;let r=O(n);if(!r)return;g.current?.(),g.current=null,h.current=!0,await Ie(t,e),i({status:`ready`,message:`正在刷新...`});let o=He(a.appId,e,l),s=r.getURL?.(),c=!1,u=null,d=(t,n)=>{c||(c=!0,h.current=!1,g.current=null,u&&clearTimeout(u),r.removeEventListener?.(`did-finish-load`,p),r.removeEventListener?.(`did-stop-loading`,p),r.removeEventListener?.(`did-fail-load`,m),f(e),i({status:t,message:n}))},p=()=>{let e=r.getURL?.()??``,t=o.split(`#`)[1]??``,n=e.split(`#`)[1]??``;t&&n!==t||d(`ready`,`刷新完成`)},m=e=>{e.errorCode!==-3&&d(`error`,`刷新失败`)};r.addEventListener?.(`did-finish-load`,p),r.addEventListener?.(`did-stop-loading`,p),r.addEventListener?.(`did-fail-load`,m),g.current=()=>d(`error`,`已取消`),u=setTimeout(()=>{d(`error`,`刷新超时`)},3e4),s===o?r.reload?.():(r.loadURL?.(o),setTimeout(()=>r.reload?.(),100))}catch(e){h.current=!1,i({status:`error`,message:e instanceof Error?e.message:`刷新失败`})}},[a,d,l,t,n])}}function Ge(e){let{compileStatus:t,sendDeviceInfo:n,simulatorRef:r,simPanelWidthRef:i,deviceRef:a,appInfo:o,compileConfig:s,port:c}=e,l=(0,E.useMemo)(()=>!o||!c?``:He(o.appId,s,c),[o,s,c]),[u,d]=(0,E.useState)(()=>Ue(l));return(0,E.useEffect)(()=>{d(Ue(l))},[l]),(0,E.useEffect)(()=>{if(t.status!==`ready`)return;let e=O(r);if(!e){n(a.current);return}let o=!1,s=!1,c=null,u=0,f=t=>{let n=t;if(!n)try{n=e.getURL?.()}catch{}d(Ue(n??l))},p=()=>{if(o||s)return;if(u++,u>50){console.warn(`[simulator] Max attach retries exceeded, giving up`),c!==null&&(window.clearInterval(c),c=null);return}let t;try{t=e.getWebContentsId?.()}catch{return}t&&(s=!0,c!==null&&(window.clearInterval(c),c=null),se(t,i.current),n(a.current),f())},m=e=>{f(e.url)},h=()=>{o||(f(),n(a.current),p())};return e.addEventListener?.(`did-navigate`,m),e.addEventListener?.(`did-navigate-in-page`,m),e.addEventListener?.(`dom-ready`,h),e.addEventListener?.(`did-finish-load`,h),c=window.setInterval(p,200),p(),()=>{o=!0,c!==null&&window.clearInterval(c),e.removeEventListener?.(`did-navigate`,m),e.removeEventListener?.(`did-navigate-in-page`,m),e.removeEventListener?.(`dom-ready`,h),e.removeEventListener?.(`did-finish-load`,h)}},[t.status,n,l,r,i,a]),{simulatorUrl:l,currentPage:u}}function Ke(e){let{compileStatus:t,simulatorRef:n}=e,[r,i]=(0,E.useState)(!0),[o,u]=(0,E.useState)(null),[f,p]=(0,E.useState)({}),[m,h]=(0,E.useState)([]);(0,E.useEffect)(()=>{if(t.status!==`ready`)return;let e=e=>{let{channel:t,args:n}=e;if(t===c.Wxml)u(n[0]);else if(t===c.AppData){let e=n[0],t=e.componentPath||e.moduleId||e.bridgeId;t&&p(n=>({...n,[t]:e.data}))}else t===c.AppDataAll&&p(n[0])},r=()=>i(!1),a=()=>i(!0),o=null,s=null,l=0,d=()=>{if(o)return;let t=O(n);if(!t){l+=1,l>=50&&s!==null&&(window.clearInterval(s),s=null);return}o=t,s!==null&&(window.clearInterval(s),s=null),i(!0),t.addEventListener(`ipc-message`,e),t.addEventListener(`crashed`,r),t.addEventListener(`did-start-loading`,a)};return d(),o||(s=window.setInterval(d,200)),()=>{s!==null&&(window.clearInterval(s),s=null),o&&(o.removeEventListener(`ipc-message`,e),o.removeEventListener(`crashed`,r),o.removeEventListener(`did-start-loading`,a))}},[t.status,n]),(0,E.useEffect)(()=>oe(()=>{i(!0),u(null),p({}),h([])}),[]);let g=(0,E.useCallback)(()=>{O(n)?.send?.(s.WxmlRefreshRequest)},[n]),_=(0,E.useCallback)(()=>{O(n)?.send?.(s.AppDataGetAllRequest)},[n]),v=(0,E.useCallback)(async()=>{let e=await d(a.GetSnapshot);e&&h(e)},[]);return(0,E.useEffect)(()=>l(a.Event,e=>{e.type===`cleared`?h([]):e.type===`added`||e.type===`updated`?h(t=>{let n=t.findIndex(t=>t.key===e.key),r=n>=0?[...t]:[...t,{key:e.key,value:e.newValue}];return n>=0&&(r[n]={key:e.key,value:e.newValue}),r}):e.type===`removed`&&h(t=>t.filter(t=>t.key!==e.key))}),[]),{connected:r,wxmlTree:o,appData:f,storageItems:m,refreshWxml:g,refreshAppData:_,refreshStorage:v}}function qe(e){let{initialRightPane:t,simPanelWidthRef:n}=e,[r,i]=(0,E.useState)(t),a=(0,E.useCallback)((e,t)=>{if(e.selected===`simulator`){if(e.simulatorVisible){te();return}ee(!1,t);return}ee(!1,t)},[]);return{rightPane:r,selectRightPane:(0,E.useCallback)(e=>{let t={selected:e,simulatorVisible:!0};i(t),a(t,n.current)},[a,n]),toggleRightPaneVisible:(0,E.useCallback)(()=>{i(e=>{let t={...e,simulatorVisible:!e.simulatorVisible};return a(t,n.current),t})},[a,n])}}function Je(e){let{relaunch:t,compileConfig:n,pages:r,compileDropdownRef:i}=e,[a,o]=(0,E.useState)(!1),s=(0,E.useRef)(t);(0,E.useEffect)(()=>{s.current=t},[t]),(0,E.useEffect)(()=>{let e=x(()=>o(!1)),t=ue(e=>{o(!1),s.current(e)});return()=>{e(),t()}},[]);let c=(0,E.useRef)(n),l=(0,E.useRef)(r);return(0,E.useEffect)(()=>{c.current=n},[n]),(0,E.useEffect)(()=>{l.current=r},[r]),{showCompilePanel:a,toggleCompilePanel:(0,E.useCallback)(()=>{o(e=>{if(e)return y(),!1;let t=i.current;if(!t)return e;let n=t.getBoundingClientRect();return v({top:Math.round(n.bottom-40+6),left:Math.round(n.left),config:c.current,pages:l.current}),!0})},[i])}}function Ye(e){let{projectPath:t,initialDevice:n=T[1],initialRightPane:r=Re}=e,i=(0,E.useRef)(null),a=(0,E.useRef)(null),o=Ve({initialDevice:n,simulatorRef:i}),s=We({projectPath:t,simulatorRef:i});(0,E.useEffect)(()=>{s.compileStatus.status===`ready`&&o.setSimPanelWidth(o.device.width+48)},[o.device.width,s.compileStatus.status,o.setSimPanelWidth]);let c=Ge({compileStatus:s.compileStatus,sendDeviceInfo:o.sendDeviceInfo,simulatorRef:i,simPanelWidthRef:o.simPanelWidthRef,deviceRef:o.deviceRef,appInfo:s.appInfo,compileConfig:s.compileConfig,port:s.port}),l=Ke({compileStatus:s.compileStatus,simulatorRef:i}),u=qe({initialRightPane:r,simPanelWidthRef:o.simPanelWidthRef}),d=Je({relaunch:s.relaunch,compileConfig:s.compileConfig,pages:s.pages,compileDropdownRef:a});return{session:{compileStatus:s.compileStatus,appInfo:s.appInfo,port:s.port,pages:s.pages,compileConfig:s.compileConfig,preloadPath:s.preloadPath,relaunch:s.relaunch},device:{device:o.device,zoom:o.zoom,simPanelWidth:o.simPanelWidth,setSimPanelWidth:o.setSimPanelWidth,handleDeviceChange:o.handleDeviceChange,handleZoomChange:o.handleZoomChange,handleSplitterDrag:o.handleSplitterDrag,sendDeviceInfo:o.sendDeviceInfo},simulator:{simulatorRef:i,simulatorUrl:c.simulatorUrl,currentPage:c.currentPage},panelData:{connected:l.connected,wxmlTree:l.wxmlTree,appData:l.appData,storageItems:l.storageItems,refreshWxml:l.refreshWxml,refreshAppData:l.refreshAppData,refreshStorage:l.refreshStorage},rightPane:{rightPane:u.rightPane,selectRightPane:u.selectRightPane,toggleRightPaneVisible:u.toggleRightPaneVisible},popover:{compileDropdownRef:a,showCompilePanel:d.showCompilePanel,toggleCompilePanel:d.toggleCompilePanel}}}typeof window<`u`&&window.document&&window.document.createElement;function k(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}function Xe(e,t){let n=E.createContext(t),r=e=>{let{children:t,...r}=e,i=E.useMemo(()=>r,Object.values(r));return(0,D.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=E.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function A(e,t=[]){let n=[];function r(t,r){let i=E.createContext(r),a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=E.useMemo(()=>o,Object.values(o));return(0,D.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=E.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>E.createContext(e));return function(n){let r=n?.[e]||t;return E.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,Ze(i,...t)]}function Ze(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return E.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function Qe(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function $e(...e){return t=>{let n=!1,r=e.map(e=>{let r=Qe(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():Qe(e[t],null)}}}}function j(...e){return E.useCallback($e(...e),e)}function et(e){let t=tt(e),n=E.forwardRef((e,n)=>{let{children:r,...i}=e,a=E.Children.toArray(r),o=a.find(rt);if(o){let e=o.props.children,r=a.map(t=>t===o?E.Children.count(e)>1?E.Children.only(null):E.isValidElement(e)?e.props.children:null:t);return(0,D.jsx)(t,{...i,ref:n,children:E.isValidElement(e)?E.cloneElement(e,void 0,r):null})}return(0,D.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function tt(e){let t=E.forwardRef((e,t)=>{let{children:n,...r}=e;if(E.isValidElement(n)){let e=at(n),i=it(r,n.props);return n.type!==E.Fragment&&(i.ref=t?$e(t,e):e),E.cloneElement(n,i)}return E.Children.count(n)>1?E.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var nt=Symbol(`radix.slottable`);function rt(e){return E.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===nt}function it(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function at(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function ot(e){let t=e+`CollectionProvider`,[n,r]=A(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=E.useRef(null),a=E.useRef(new Map).current;return(0,D.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=et(s),l=E.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,D.jsx)(c,{ref:j(t,a(s,n).collectionRef),children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=et(u),p=E.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=E.useRef(null),s=j(t,o),c=a(u,n);return E.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,D.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function m(t){let n=a(e+`CollectionConsumer`,t);return E.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:p},m,r]}var M=globalThis?.document?E.useLayoutEffect:()=>{},st=E.useId||(()=>void 0),ct=0;function N(e){let[t,n]=E.useState(st());return M(()=>{e||n(e=>e??String(ct++))},[e]),e||(t?`radix-${t}`:``)}var lt=e(p(),1),P=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=et(`Primitive.${t}`),r=E.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,D.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function ut(e,t){e&<.flushSync(()=>e.dispatchEvent(t))}function F(e){let t=E.useRef(e);return E.useEffect(()=>{t.current=e}),E.useMemo(()=>(...e)=>t.current?.(...e),[])}var dt=E.useInsertionEffect||M;function ft({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=pt({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=E.useRef(e!==void 0);E.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,E.useCallback(t=>{if(s){let n=mt(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function pt({defaultProp:e,onChange:t}){let[n,r]=E.useState(e),i=E.useRef(n),a=E.useRef(t);return dt(()=>{a.current=t},[t]),E.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function mt(e){return typeof e==`function`}var ht=E.createContext(void 0);function gt(e){let t=E.useContext(ht);return e||t||`ltr`}var _t=`rovingFocusGroup.onEntryFocus`,vt={bubbles:!1,cancelable:!0},I=`RovingFocusGroup`,[yt,bt,xt]=ot(I),[St,Ct]=A(I,[xt]),[wt,Tt]=St(I),Et=E.forwardRef((e,t)=>(0,D.jsx)(yt.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,D.jsx)(yt.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,D.jsx)(Dt,{...e,ref:t})})}));Et.displayName=I;var Dt=E.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...d}=e,f=E.useRef(null),p=j(t,f),m=gt(a),[h,g]=ft({prop:o,defaultProp:s??null,onChange:c,caller:I}),[_,v]=E.useState(!1),y=F(l),b=bt(n),x=E.useRef(!1),[S,C]=E.useState(0);return E.useEffect(()=>{let e=f.current;if(e)return e.addEventListener(_t,y),()=>e.removeEventListener(_t,y)},[y]),(0,D.jsx)(wt,{scope:n,orientation:r,dir:m,loop:i,currentTabStopId:h,onItemFocus:E.useCallback(e=>g(e),[g]),onItemShiftTab:E.useCallback(()=>v(!0),[]),onFocusableItemAdd:E.useCallback(()=>C(e=>e+1),[]),onFocusableItemRemove:E.useCallback(()=>C(e=>e-1),[]),children:(0,D.jsx)(P.div,{tabIndex:_||S===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:`none`,...e.style},onMouseDown:k(e.onMouseDown,()=>{x.current=!0}),onFocus:k(e.onFocus,e=>{let t=!x.current;if(e.target===e.currentTarget&&t&&!_){let t=new CustomEvent(_t,vt);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=b().filter(e=>e.focusable);Nt([e.find(e=>e.active),e.find(e=>e.id===h),...e].filter(Boolean).map(e=>e.ref.current),u)}}x.current=!1}),onBlur:k(e.onBlur,()=>v(!1))})})}),Ot=`RovingFocusGroupItem`,kt=E.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=N(),l=a||c,u=Tt(Ot,n),d=u.currentTabStopId===l,f=bt(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:h}=u;return E.useEffect(()=>{if(r)return p(),()=>m()},[r,p,m]),(0,D.jsx)(yt.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,D.jsx)(P.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:k(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:k(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:k(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Mt(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?Pt(n,r+1):n.slice(r+1)}setTimeout(()=>Nt(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:h!=null}):o})})});kt.displayName=Ot;var At={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function jt(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Mt(e,t,n){let r=jt(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return At[r]}function Nt(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function Pt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Ft=Et,It=kt;function Lt(e,t){return E.useReducer((e,n)=>t[e][n]??e,e)}var L=e=>{let{present:t,children:n}=e,r=Rt(t),i=typeof n==`function`?n({present:r.isPresent}):E.Children.only(n),a=j(r.ref,zt(i));return typeof n==`function`||r.isPresent?E.cloneElement(i,{ref:a}):null};L.displayName=`Presence`;function Rt(e){let[t,n]=E.useState(),r=E.useRef(null),i=E.useRef(e),a=E.useRef(`none`),[o,s]=Lt(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return E.useEffect(()=>{let e=R(r.current);a.current=o===`mounted`?e:`none`},[o]),M(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=R(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),M(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=R(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=R(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:E.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function R(e){return e?.animationName||`none`}function zt(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var z=`Tabs`,[Bt,Vt]=A(z,[Ct]),Ht=Ct(),[Ut,Wt]=Bt(z),Gt=E.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=gt(s),[d,f]=ft({prop:r,onChange:i,defaultProp:a??``,caller:z});return(0,D.jsx)(Ut,{scope:n,baseId:N(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,D.jsx)(P.div,{dir:u,"data-orientation":o,...l,ref:t})})});Gt.displayName=z;var Kt=`TabsList`,qt=E.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=Wt(Kt,n),o=Ht(n);return(0,D.jsx)(Ft,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,D.jsx)(P.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})});qt.displayName=Kt;var Jt=`TabsTrigger`,Yt=E.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=Wt(Jt,n),s=Ht(n),c=Qt(o.baseId,r),l=$t(o.baseId,r),u=r===o.value;return(0,D.jsx)(It,{asChild:!0,...s,focusable:!i,active:u,children:(0,D.jsx)(P.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:k(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:k(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:k(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});Yt.displayName=Jt;var Xt=`TabsContent`,Zt=E.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=Wt(Xt,n),c=Qt(s.baseId,r),l=$t(s.baseId,r),u=r===s.value,d=E.useRef(u);return E.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,D.jsx)(L,{present:i||u,children:({present:n})=>(0,D.jsx)(P.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})});Zt.displayName=Xt;function Qt(e,t){return`${e}-trigger-${t}`}function $t(e,t){return`${e}-content-${t}`}var en=Gt,tn=qt,nn=Yt,rn=Zt,an=en,on=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(tn,{ref:n,className:h(`inline-flex h-7 items-center justify-center rounded-md bg-surface-2 p-1 text-text-muted`,e),...t}));on.displayName=tn.displayName;var sn=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(nn,{ref:n,className:h(`inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-bg transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-surface-selected data-[state=active]:text-text data-[state=active]:shadow-sm`,e),...t}));sn.displayName=nn.displayName;var cn=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(rn,{ref:n,className:h(`mt-2 ring-offset-bg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2`,e),...t}));cn.displayName=rn.displayName;var ln={compiling:`bg-status-warn animate-[pulse_1s_infinite]`,ready:`bg-accent`,error:`bg-status-error`};function un({status:e}){return(0,D.jsx)(`span`,{className:h(`w-1.5 h-1.5 rounded-full shrink-0`,ln[e]??`bg-border`)})}function dn({compileDropdownRef:e,showCompilePanel:t,onToggleCompilePanel:n,onRelaunch:r,compileStatus:i,rightPane:a,onToggleRightPaneVisible:o,onSelectRightPane:s}){let[c,l]=(0,E.useState)([]),[u,d]=(0,E.useState)([]),f=()=>{ne().then(e=>{l(Array.isArray(e)?e:[])}).catch(e=>{console.debug(`[toolbar] getActions not available`,e)})};return(0,E.useEffect)(()=>(f(),ce().then(e=>{e?.length&&d(e)}).catch(e=>{console.warn(`[toolbar] panel:list failed`,e)}),S(()=>f())),[]),(0,D.jsxs)(`div`,{className:`flex flex-col shrink-0`,children:[c.length>0&&(0,D.jsx)(`div`,{className:`flex items-center gap-1.5 px-2.5 py-1 bg-surface-2 border-b border-border`,children:c.map(e=>(0,D.jsx)(w,{variant:`outline`,size:`sm`,onClick:()=>ae(e.id),disabled:i.status===`compiling`,children:e.label},e.id))}),(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2.5 bg-surface-2 border-b border-border shrink-0`,style:{height:40},children:[(0,D.jsx)(`div`,{ref:e,children:(0,D.jsxs)(w,{variant:`outline`,size:`sm`,onClick:n,className:h(t&&`border-accent`),children:[`普通编译 `,(0,D.jsx)(`span`,{className:`text-[10px] text-text-secondary`,children:`▾`})]})}),(0,D.jsx)(w,{variant:`icon`,size:`icon`,onClick:()=>{r()},disabled:i.status===`compiling`,title:`重新编译`,children:`↺`}),(0,D.jsxs)(`div`,{className:`flex items-center gap-1.5 px-1.5 shrink-0`,children:[(0,D.jsx)(un,{status:i.status}),(0,D.jsx)(`span`,{className:`text-[11px] text-text-muted max-w-28 truncate`,children:i.message})]}),(0,D.jsx)(`div`,{className:`flex-1 min-w-2`}),u.length>0&&(0,D.jsx)(an,{value:a.selected,onValueChange:e=>s(e),children:(0,D.jsxs)(on,{className:`h-auto gap-px bg-bg border border-border p-0`,children:[(0,D.jsx)(sn,{value:`simulator`,className:`px-2 py-0.5 text-[11px] rounded-none data-[state=active]:shadow-none`,children:`DevTools`}),u.map(e=>(0,D.jsx)(sn,{value:e.id,className:`px-2 py-0.5 text-[11px] rounded-none data-[state=active]:shadow-none`,children:e.label},e.id))]})}),(0,D.jsx)(w,{variant:`icon`,size:`icon`,onClick:o,title:a.simulatorVisible?`隐藏面板`:`显示面板`,className:`text-base`,children:a.simulatorVisible?`⊟`:`⊞`})]})]})}function fn({simPanelWidth:e,device:t,zoom:n,onDeviceChange:r,onZoomChange:i,compileStatus:a,preloadPath:o,simulatorUrl:s,simulatorRef:c,currentPage:l,copied:u,onCopyPagePath:d}){let f=n/100;return(0,D.jsxs)(`div`,{className:`bg-sim-bg flex flex-col overflow-hidden shrink-0`,style:{width:e,minWidth:e},children:[(0,D.jsxs)(`div`,{className:`flex-1 overflow-auto flex items-start justify-center p-5`,children:[a.status===`compiling`&&!o&&(0,D.jsx)(`div`,{className:`flex items-center justify-center min-h-48 w-full text-text-dim text-[13px]`,children:`正在编译中...`}),a.status===`error`&&!s&&(0,D.jsxs)(`div`,{className:`flex flex-col items-center justify-center min-h-48 w-full text-status-error text-[13px] gap-2 p-4`,children:[(0,D.jsx)(`span`,{children:`编译失败`}),(0,D.jsx)(`small`,{className:`text-status-error text-[11px]`,children:a.message})]}),(a.status===`ready`||s)&&(0,D.jsxs)(`div`,{className:`flex flex-col items-center gap-6`,children:[(0,D.jsx)(`div`,{className:`shrink-0 overflow-visible`,style:{borderRadius:44,boxShadow:`0 0 0 8px var(--color-phone-shell), 0 0 0 10px var(--color-phone-border), 0 24px 60px var(--color-overlay-heavy)`,background:`var(--color-phone-shell)`,width:Math.round(t.width*f),height:Math.round(t.height*f)},children:(0,D.jsx)(`div`,{className:`bg-black relative overflow-hidden shrink-0`,style:{borderRadius:36,width:t.width,height:t.height,transform:`scale(${f})`,transformOrigin:`top left`},children:o&&s&&(0,D.jsx)(`webview`,{ref:c,src:s,preload:o,partition:`persist:simulator`,allowpopups:``,style:{display:`flex`,flexDirection:`column`,width:t.width,height:t.height}})})}),a.status===`compiling`&&s&&(0,D.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-black/50 rounded-[36px] z-10`,children:(0,D.jsx)(`div`,{className:`text-text-dim text-[13px]`,children:`正在编译中...`})}),a.status===`error`&&s&&(0,D.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-black/70 rounded-[36px] z-10`,children:(0,D.jsxs)(`div`,{className:`text-center p-4`,children:[(0,D.jsx)(`div`,{className:`text-status-error text-[14px] font-medium mb-2`,children:`编译失败`}),(0,D.jsx)(`div`,{className:`text-status-error text-[11px] max-w-[280px] break-words`,children:a.message})]})}),(0,D.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,D.jsx)(le,{value:t.name,onChange:r,children:T.map(e=>(0,D.jsx)(`option`,{value:e.name,children:e.name},e.name))}),(0,D.jsx)(le,{value:n,onChange:i,className:`max-w-16`,children:b.map(e=>(0,D.jsxs)(`option`,{value:e,children:[e,`%`]},e))})]})]})]}),(0,D.jsx)(`div`,{className:`flex items-center px-2.5 bg-sim-bottom border-t border-border-subtle shrink-0 h-[30px] min-w-0`,children:(0,D.jsxs)(`div`,{className:`flex items-center gap-1 min-w-0`,children:[(0,D.jsx)(`span`,{className:`text-[11px] text-text-dim truncate min-w-0`,children:l||`—`}),l&&(0,D.jsx)(`button`,{className:h(`shrink-0 flex items-center justify-center w-4 h-4 rounded transition-colors`,u?`text-accent`:`text-text-dim hover:text-text`),onClick:d,title:`复制路径`,children:u?(0,D.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,fill:`none`,children:(0,D.jsx)(`polyline`,{points:`1.5,5 4,7.5 8.5,2.5`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})}):(0,D.jsxs)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,fill:`none`,children:[(0,D.jsx)(`rect`,{x:`1`,y:`3`,width:`6`,height:`6.5`,rx:`1`,stroke:`currentColor`,strokeWidth:`1`}),(0,D.jsx)(`path`,{d:`M3 3V2a1 1 0 011-1h4a1 1 0 011 1v5a1 1 0 01-1 1H7`,stroke:`currentColor`,strokeWidth:`1`})]})})]})})]})}function pn({node:e,depth:t}){let[n,r]=(0,E.useState)(t<3),i=t*16;if(e.tagName===`#text`)return(0,D.jsxs)(`div`,{className:`py-px leading-[18px] hover:bg-surface-2`,style:{paddingLeft:i},children:[(0,D.jsx)(`span`,{className:`w-3 inline-block`}),(0,D.jsx)(`span`,{className:`text-text`,children:e.text})]});if(e.tagName===`#fragment`)return(0,D.jsx)(D.Fragment,{children:(e.children??[]).map((e,n)=>(0,D.jsx)(pn,{node:e,depth:t},n))});let a=(e.children??[]).length>0,o=Object.entries(e.attrs),s=a&&e.children.length===1&&e.children[0].tagName===`#text`?e.children[0].text:null;return s?(0,D.jsxs)(`div`,{className:`py-px leading-[18px] hover:bg-surface-2`,style:{paddingLeft:i},children:[(0,D.jsx)(`span`,{className:`w-3 inline-block`}),(0,D.jsxs)(`span`,{className:`text-code-keyword`,children:[`<`,e.tagName]}),o.map(([e,t])=>(0,D.jsxs)(`span`,{children:[` `,(0,D.jsx)(`span`,{className:`text-code-blue`,children:e}),(0,D.jsx)(`span`,{className:`text-text-dim`,children:`=`}),(0,D.jsxs)(`span`,{className:`text-code-orange`,children:[`"`,t,`"`]})]},e)),(0,D.jsx)(`span`,{className:`text-code-keyword`,children:`>`}),(0,D.jsx)(`span`,{className:`text-text`,children:s}),(0,D.jsxs)(`span`,{className:`text-code-keyword`,children:[`</`,e.tagName,`>`]})]}):(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`div`,{className:`flex items-start hover:bg-surface-2 cursor-pointer py-px leading-[18px]`,style:{paddingLeft:i},onClick:()=>a&&r(!n),children:[(0,D.jsx)(`span`,{className:`text-text-dim w-3 shrink-0 text-center select-none`,children:a?n?`▾`:`▸`:` `}),(0,D.jsxs)(`span`,{children:[(0,D.jsxs)(`span`,{className:`text-code-keyword`,children:[`<`,e.tagName]}),o.map(([e,t])=>(0,D.jsxs)(`span`,{children:[` `,(0,D.jsx)(`span`,{className:`text-code-blue`,children:e}),(0,D.jsx)(`span`,{className:`text-text-dim`,children:`=`}),(0,D.jsxs)(`span`,{className:`text-code-orange`,children:[`"`,t,`"`]})]},e)),(0,D.jsx)(`span`,{className:`text-code-keyword`,children:a?`>`:` />`})]})]}),n&&a&&(0,D.jsxs)(D.Fragment,{children:[e.children.map((e,n)=>(0,D.jsx)(pn,{node:e,depth:t+1},n)),(0,D.jsxs)(`div`,{style:{paddingLeft:i},className:`py-px leading-[18px]`,children:[(0,D.jsx)(`span`,{className:`w-3 inline-block`}),(0,D.jsxs)(`span`,{className:`text-code-keyword`,children:[`</`,e.tagName,`>`]})]})]})]})}function mn({tree:e,onRefresh:t}){return e?(0,D.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,D.jsx)(`div`,{className:`flex items-center px-2.5 py-1.5 border-b border-border-subtle shrink-0 bg-bg-panel`,children:(0,D.jsx)(w,{variant:`outline`,size:`xs`,onClick:t,className:`hover:border-accent hover:text-accent`,children:`↻ 刷新`})}),(0,D.jsx)(`div`,{className:`flex-1 overflow-y-auto p-2 font-mono text-[12px]`,children:(0,D.jsx)(pn,{node:e,depth:0})})]}):(0,D.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,D.jsx)(`div`,{className:`flex items-center px-2.5 py-1.5 border-b border-border-subtle shrink-0 bg-bg-panel`,children:(0,D.jsx)(w,{variant:`outline`,size:`xs`,onClick:t,className:`hover:border-accent hover:text-accent`,children:`↻ 刷新`})}),(0,D.jsx)(`div`,{className:`text-[12px] text-text-dim text-center px-4 py-6`,children:`等待小程序加载...`})]})}function hn({data:e,onRefresh:t}){let n=Object.keys(e);return(0,D.jsxs)(`div`,{className:`flex flex-col overflow-hidden flex-1`,children:[(0,D.jsx)(`div`,{className:`flex items-center px-2.5 py-1.5 border-b border-border-subtle shrink-0 bg-bg-panel`,children:(0,D.jsx)(w,{variant:`outline`,size:`xs`,onClick:t,className:`hover:border-accent hover:text-accent`,children:`↻ 刷新`})}),n.length===0?(0,D.jsx)(`div`,{className:`text-[12px] text-text-dim text-center px-4 py-6`,children:`暂无数据(需小程序触发 setData)`}):(0,D.jsx)(`div`,{className:`flex flex-col gap-2 p-2 overflow-y-auto flex-1`,children:n.map(t=>(0,D.jsxs)(`div`,{className:`border border-border-subtle rounded overflow-hidden shrink-0`,children:[(0,D.jsx)(`div`,{className:`bg-surface-3 px-2 py-0.5 text-[11px] text-code-label truncate`,children:t}),(0,D.jsx)(`pre`,{className:`px-2 py-1.5 text-[12px] font-mono text-code-blue whitespace-pre-wrap break-all`,children:JSON.stringify(e[t],null,2)})]},t))})]})}function gn({items:e,onRefresh:t}){return(0,D.jsxs)(`div`,{className:`flex flex-col overflow-hidden flex-1`,children:[(0,D.jsx)(`div`,{className:`flex items-center px-2.5 py-1.5 border-b border-border-subtle shrink-0 bg-bg-panel`,children:(0,D.jsx)(w,{variant:`outline`,size:`xs`,onClick:t,className:`hover:border-accent hover:text-accent`,children:`↻ 刷新`})}),(0,D.jsx)(`div`,{className:`flex-1 overflow-y-auto`,children:e.length===0?(0,D.jsx)(`div`,{className:`text-[12px] text-text-dim text-center px-4 py-6`,children:`暂无 Storage 数据`}):(0,D.jsxs)(`table`,{className:`w-full border-collapse text-[12px]`,children:[(0,D.jsx)(`thead`,{children:(0,D.jsxs)(`tr`,{children:[(0,D.jsx)(`th`,{className:`text-left text-code-label font-normal px-2.5 py-1 border-b border-border-subtle text-[11px] sticky top-0 bg-bg z-10`,children:`Key`}),(0,D.jsx)(`th`,{className:`text-left text-code-label font-normal px-2.5 py-1 border-b border-border-subtle text-[11px] sticky top-0 bg-bg z-10`,children:`Value`})]})}),(0,D.jsx)(`tbody`,{children:e.map(({key:e,value:t})=>(0,D.jsxs)(`tr`,{className:`hover:[&>td]:bg-surface`,children:[(0,D.jsx)(`td`,{className:`px-2.5 py-0.5 border-b border-border-subtle font-mono text-code-blue whitespace-nowrap w-px pr-5 align-top`,children:e}),(0,D.jsx)(`td`,{className:`px-2.5 py-0.5 border-b border-border-subtle font-mono text-code-orange break-all align-top`,children:typeof t==`object`?JSON.stringify(t):String(t)})]},e))})]})})]})}function _n({project:e}){let t=(0,E.useRef)(null),[n,r]=(0,E.useState)(!1),{session:i,device:a,simulator:o,panelData:s,rightPane:c,popover:l}=Ye({projectPath:e.path});(0,E.useEffect)(()=>{let t=`Dimina DevTools`;return document.title=`${e.name} - ${t}`,De().then(n=>{n?.appName&&(t=n.appName,document.title=`${e.name} - ${t}`)}).catch(()=>{}),()=>{document.title=t}},[e.name]),(0,E.useEffect)(()=>()=>{t.current!==null&&window.clearTimeout(t.current)},[]);async function u(){if(o.currentPage)try{await navigator.clipboard.writeText(o.currentPage),r(!0),t.current!==null&&window.clearTimeout(t.current),t.current=window.setTimeout(()=>r(!1),de)}catch{r(!1)}}return(0,D.jsxs)(`div`,{className:`flex flex-col h-screen`,children:[(0,D.jsx)(dn,{compileDropdownRef:l.compileDropdownRef,showCompilePanel:l.showCompilePanel,onToggleCompilePanel:l.toggleCompilePanel,onRelaunch:()=>i.relaunch(),compileStatus:i.compileStatus,rightPane:c.rightPane,onToggleRightPaneVisible:c.toggleRightPaneVisible,onSelectRightPane:c.selectRightPane}),(0,D.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,D.jsx)(fn,{simPanelWidth:a.simPanelWidth,device:a.device,zoom:a.zoom,onDeviceChange:a.handleDeviceChange,onZoomChange:a.handleZoomChange,compileStatus:i.compileStatus,preloadPath:i.preloadPath,simulatorUrl:o.simulatorUrl,simulatorRef:o.simulatorRef,currentPage:o.currentPage,copied:n,onCopyPagePath:u}),(0,D.jsx)(`div`,{className:`w-1 bg-surface-splitter border-l border-r border-border-subtle cursor-col-resize shrink-0 transition-colors hover:bg-accent active:bg-accent`,onMouseDown:a.handleSplitterDrag}),(0,D.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[c.rightPane.selected===`wxml`&&(0,D.jsx)(mn,{tree:s.wxmlTree,onRefresh:s.refreshWxml}),c.rightPane.selected===`appdata`&&(0,D.jsx)(hn,{data:s.appData,onRefresh:s.refreshAppData}),c.rightPane.selected===`storage`&&(0,D.jsx)(gn,{items:s.storageItems,onRefresh:s.refreshStorage}),c.rightPane.selected===`simulator`&&(0,D.jsx)(`div`,{className:`flex-1`})]})]})]})}function vn(e,t=globalThis?.document){let n=F(e);E.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var yn=`DismissableLayer`,bn=`dismissableLayer.update`,xn=`dismissableLayer.pointerDownOutside`,Sn=`dismissableLayer.focusOutside`,Cn,wn=E.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Tn=E.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:a,onInteractOutside:o,onDismiss:s,...c}=e,l=E.useContext(wn),[u,d]=E.useState(null),f=u?.ownerDocument??globalThis?.document,[,p]=E.useState({}),m=j(t,e=>d(e)),h=Array.from(l.layers),[g]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),_=h.indexOf(g),v=u?h.indexOf(u):-1,y=l.layersWithOutsidePointerEventsDisabled.size>0,b=v>=_,x=On(e=>{let t=e.target,n=[...l.branches].some(e=>e.contains(t));!b||n||(i?.(e),o?.(e),e.defaultPrevented||s?.())},f),S=kn(e=>{let t=e.target;[...l.branches].some(e=>e.contains(t))||(a?.(e),o?.(e),e.defaultPrevented||s?.())},f);return vn(e=>{v===l.layers.size-1&&(r?.(e),!e.defaultPrevented&&s&&(e.preventDefault(),s()))},f),E.useEffect(()=>{if(u)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(Cn=f.body.style.pointerEvents,f.body.style.pointerEvents=`none`),l.layersWithOutsidePointerEventsDisabled.add(u)),l.layers.add(u),An(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=Cn)}},[u,f,n,l]),E.useEffect(()=>()=>{u&&(l.layers.delete(u),l.layersWithOutsidePointerEventsDisabled.delete(u),An())},[u,l]),E.useEffect(()=>{let e=()=>p({});return document.addEventListener(bn,e),()=>document.removeEventListener(bn,e)},[]),(0,D.jsx)(P.div,{...c,ref:m,style:{pointerEvents:y?b?`auto`:`none`:void 0,...e.style},onFocusCapture:k(e.onFocusCapture,S.onFocusCapture),onBlurCapture:k(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:k(e.onPointerDownCapture,x.onPointerDownCapture)})});Tn.displayName=yn;var En=`DismissableLayerBranch`,Dn=E.forwardRef((e,t)=>{let n=E.useContext(wn),r=E.useRef(null),i=j(t,r);return E.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,D.jsx)(P.div,{...e,ref:i})});Dn.displayName=En;function On(e,t=globalThis?.document){let n=F(e),r=E.useRef(!1),i=E.useRef(()=>{});return E.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){jn(xn,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function kn(e,t=globalThis?.document){let n=F(e),r=E.useRef(!1);return E.useEffect(()=>{let e=e=>{e.target&&!r.current&&jn(Sn,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function An(){let e=new CustomEvent(bn);document.dispatchEvent(e)}function jn(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?ut(i,a):i.dispatchEvent(a)}var Mn=`focusScope.autoFocusOnMount`,Nn=`focusScope.autoFocusOnUnmount`,Pn={bubbles:!1,cancelable:!0},Fn=`FocusScope`,In=E.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:a,...o}=e,[s,c]=E.useState(null),l=F(i),u=F(a),d=E.useRef(null),f=j(t,e=>c(e)),p=E.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;E.useEffect(()=>{if(r){let e=function(e){if(p.paused||!s)return;let t=e.target;s.contains(t)?d.current=t:B(d.current,{select:!0})},t=function(e){if(p.paused||!s)return;let t=e.relatedTarget;t!==null&&(s.contains(t)||B(d.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&B(s)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return s&&r.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,s,p.paused]),E.useEffect(()=>{if(s){Un.add(p);let e=document.activeElement;if(!s.contains(e)){let t=new CustomEvent(Mn,Pn);s.addEventListener(Mn,l),s.dispatchEvent(t),t.defaultPrevented||(Ln(Kn(zn(s)),{select:!0}),document.activeElement===e&&B(s))}return()=>{s.removeEventListener(Mn,l),setTimeout(()=>{let t=new CustomEvent(Nn,Pn);s.addEventListener(Nn,u),s.dispatchEvent(t),t.defaultPrevented||B(e??document.body,{select:!0}),s.removeEventListener(Nn,u),Un.remove(p)},0)}}},[s,l,u,p]);let m=E.useCallback(e=>{if(!n&&!r||p.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=Rn(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&B(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&B(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,p.paused]);return(0,D.jsx)(P.div,{tabIndex:-1,...o,ref:f,onKeyDown:m})});In.displayName=Fn;function Ln(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(B(r,{select:t}),document.activeElement!==n)return}function Rn(e){let t=zn(e);return[Bn(t,e),Bn(t.reverse(),e)]}function zn(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Bn(e,t){for(let n of e)if(!Vn(n,{upTo:t}))return n}function Vn(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function Hn(e){return e instanceof HTMLInputElement&&`select`in e}function B(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Hn(e)&&t&&e.select()}}var Un=Wn();function Wn(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Gn(e,t),e.unshift(t)},remove(t){e=Gn(e,t),e[0]?.resume()}}}function Gn(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Kn(e){return e.filter(e=>e.tagName!==`A`)}var qn=`Portal`,Jn=E.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=E.useState(!1);M(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?lt.createPortal((0,D.jsx)(P.div,{...r,ref:t}),o):null});Jn.displayName=qn;var Yn=0;function Xn(){E.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??Zn()),document.body.insertAdjacentElement(`beforeend`,e[1]??Zn()),Yn++,()=>{Yn===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),Yn--}},[])}function Zn(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var V=function(){return V=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},V.apply(this,arguments)};function Qn(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function $n(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var er=`right-scroll-bar-position`,tr=`width-before-scroll-bar`,nr=`with-scroll-bars-hidden`,rr=`--removed-body-scroll-bar-size`;function ir(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function ar(e,t){var n=(0,E.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var or=typeof window<`u`?E.useLayoutEffect:E.useEffect,sr=new WeakMap;function cr(e,t){var n=ar(t||null,function(t){return e.forEach(function(e){return ir(e,t)})});return or(function(){var t=sr.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||ir(e,null)}),i.forEach(function(e){r.has(e)||ir(e,a)})}sr.set(n,e)},[e]),n}function lr(e){return e}function ur(e,t){t===void 0&&(t=lr);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function dr(e){e===void 0&&(e={});var t=ur(null);return t.options=V({async:!0,ssr:!1},e),t}var fr=function(e){var t=e.sideCar,n=Qn(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return E.createElement(r,V({},n))};fr.isSideCarExport=!0;function pr(e,t){return e.useMedium(t),fr}var mr=dr(),hr=function(){},gr=E.forwardRef(function(e,t){var n=E.useRef(null),r=E.useState({onScrollCapture:hr,onWheelCapture:hr,onTouchMoveCapture:hr}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,l=e.removeScrollBar,u=e.enabled,d=e.shards,f=e.sideCar,p=e.noRelative,m=e.noIsolation,h=e.inert,g=e.allowPinchZoom,_=e.as,v=_===void 0?`div`:_,y=e.gapMode,b=Qn(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),x=f,S=cr([n,t]),C=V(V({},b),i);return E.createElement(E.Fragment,null,u&&E.createElement(x,{sideCar:mr,removeScrollBar:l,shards:d,noRelative:p,noIsolation:m,inert:h,setCallbacks:a,allowPinchZoom:!!g,lockRef:n,gapMode:y}),o?E.cloneElement(E.Children.only(s),V(V({},C),{ref:S})):E.createElement(v,V({},C,{className:c,ref:S}),s))});gr.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},gr.classNames={fullWidth:tr,zeroRight:er};var _r,vr=function(){if(_r)return _r;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function yr(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=vr();return t&&e.setAttribute(`nonce`,t),e}function br(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function xr(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var Sr=function(){var e=0,t=null;return{add:function(n){e==0&&(t=yr())&&(br(t,n),xr(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Cr=function(){var e=Sr();return function(t,n){E.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},wr=function(){var e=Cr();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},Tr={left:0,top:0,right:0,gap:0},Er=function(e){return parseInt(e||``,10)||0},Dr=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[Er(n),Er(r),Er(i)]},Or=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return Tr;var t=Dr(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},kr=wr(),H=`data-scroll-locked`,Ar=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
|
+
.${nr} {
|
|
3
|
+
overflow: hidden ${r};
|
|
4
|
+
padding-right: ${s}px ${r};
|
|
5
|
+
}
|
|
6
|
+
body[${H}] {
|
|
7
|
+
overflow: hidden ${r};
|
|
8
|
+
overscroll-behavior: contain;
|
|
9
|
+
${[t&&`position: relative ${r};`,n===`margin`&&`
|
|
10
|
+
padding-left: ${i}px;
|
|
11
|
+
padding-top: ${a}px;
|
|
12
|
+
padding-right: ${o}px;
|
|
13
|
+
margin-left:0;
|
|
14
|
+
margin-top:0;
|
|
15
|
+
margin-right: ${s}px ${r};
|
|
16
|
+
`,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.${er} {
|
|
20
|
+
right: ${s}px ${r};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.${tr} {
|
|
24
|
+
margin-right: ${s}px ${r};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.${er} .${er} {
|
|
28
|
+
right: 0 ${r};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.${tr} .${tr} {
|
|
32
|
+
margin-right: 0 ${r};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
body[${H}] {
|
|
36
|
+
${rr}: ${s}px;
|
|
37
|
+
}
|
|
38
|
+
`},jr=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Mr=function(){E.useEffect(function(){return document.body.setAttribute(H,(jr()+1).toString()),function(){var e=jr()-1;e<=0?document.body.removeAttribute(H):document.body.setAttribute(H,e.toString())}},[])},Nr=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Mr();var a=E.useMemo(function(){return Or(i)},[i]);return E.createElement(kr,{styles:Ar(a,!t,i,n?``:`!important`)})},Pr=!1;if(typeof window<`u`)try{var U=Object.defineProperty({},`passive`,{get:function(){return Pr=!0,!0}});window.addEventListener(`test`,U,U),window.removeEventListener(`test`,U,U)}catch{Pr=!1}var W=Pr?{passive:!1}:!1,Fr=function(e){return e.tagName===`TEXTAREA`},Ir=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Fr(e)&&n[t]===`visible`)},Lr=function(e){return Ir(e,`overflowY`)},Rr=function(e){return Ir(e,`overflowX`)},zr=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),Hr(e,r)){var i=Ur(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Br=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},Vr=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},Hr=function(e,t){return e===`v`?Lr(t):Rr(t)},Ur=function(e,t){return e===`v`?Br(t):Vr(t)},Wr=function(e,t){return e===`h`&&t===`rtl`?-1:1},Gr=function(e,t,n,r,i){var a=Wr(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=Ur(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&Hr(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},G=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Kr=function(e){return[e.deltaX,e.deltaY]},qr=function(e){return e&&`current`in e?e.current:e},Jr=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Yr=function(e){return`
|
|
39
|
+
.block-interactivity-${e} {pointer-events: none;}
|
|
40
|
+
.allow-interactivity-${e} {pointer-events: all;}
|
|
41
|
+
`},Xr=0,K=[];function Zr(e){var t=E.useRef([]),n=E.useRef([0,0]),r=E.useRef(),i=E.useState(Xr++)[0],a=E.useState(wr)[0],o=E.useRef(e);E.useEffect(function(){o.current=e},[e]),E.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=$n([e.lockRef.current],(e.shards||[]).map(qr),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=E.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=G(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=zr(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=zr(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Gr(h,t,e,h===`h`?s:c,!0)},[]),c=E.useCallback(function(e){var n=e;if(!(!K.length||K[K.length-1]!==a)){var r=`deltaY`in n?Kr(n):G(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&Jr(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(qr).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=E.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:Qr(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=E.useCallback(function(e){n.current=G(e),r.current=void 0},[]),d=E.useCallback(function(t){l(t.type,Kr(t),t.target,s(t,e.lockRef.current))},[]),f=E.useCallback(function(t){l(t.type,G(t),t.target,s(t,e.lockRef.current))},[]);E.useEffect(function(){return K.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener(`wheel`,c,W),document.addEventListener(`touchmove`,c,W),document.addEventListener(`touchstart`,u,W),function(){K=K.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,W),document.removeEventListener(`touchmove`,c,W),document.removeEventListener(`touchstart`,u,W)}},[]);var p=e.removeScrollBar,m=e.inert;return E.createElement(E.Fragment,null,m?E.createElement(a,{styles:Yr(i)}):null,p?E.createElement(Nr,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Qr(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var $r=pr(mr,Zr),ei=E.forwardRef(function(e,t){return E.createElement(gr,V({},e,{ref:t,sideCar:$r}))});ei.classNames=gr.classNames;var ti=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},q=new WeakMap,J=new WeakMap,Y={},ni=0,ri=function(e){return e&&(e.host||ri(e.parentNode))},ii=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=ri(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},ai=function(e,t,n,r){var i=ii(t,Array.isArray(e)?e:[e]);Y[n]||(Y[n]=new WeakMap);var a=Y[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(q.get(e)||0)+1,l=(a.get(e)||0)+1;q.set(e,c),a.set(e,l),o.push(e),c===1&&i&&J.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),ni++,function(){o.forEach(function(e){var t=q.get(e)-1,i=a.get(e)-1;q.set(e,t),a.set(e,i),t||(J.has(e)||e.removeAttribute(r),J.delete(e)),i||e.removeAttribute(n)}),ni--,ni||(q=new WeakMap,q=new WeakMap,J=new WeakMap,Y={})}},oi=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||ti(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),ai(r,i,n,`aria-hidden`)):function(){return null}},X=`Dialog`,[si,ci]=A(X),[li,Z]=si(X),ui=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=E.useRef(null),c=E.useRef(null),[l,u]=ft({prop:r,defaultProp:i??!1,onChange:a,caller:X});return(0,D.jsx)(li,{scope:t,triggerRef:s,contentRef:c,contentId:N(),titleId:N(),descriptionId:N(),open:l,onOpenChange:u,onOpenToggle:E.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};ui.displayName=X;var di=`DialogTrigger`,fi=E.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(di,n),a=j(t,i.triggerRef);return(0,D.jsx)(P.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.contentId,"data-state":ji(i.open),...r,ref:a,onClick:k(e.onClick,i.onOpenToggle)})});fi.displayName=di;var pi=`DialogPortal`,[mi,hi]=si(pi,{forceMount:void 0}),gi=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=Z(pi,t);return(0,D.jsx)(mi,{scope:t,forceMount:n,children:E.Children.map(r,e=>(0,D.jsx)(L,{present:n||a.open,children:(0,D.jsx)(Jn,{asChild:!0,container:i,children:e})}))})};gi.displayName=pi;var _i=`DialogOverlay`,vi=E.forwardRef((e,t)=>{let n=hi(_i,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=Z(_i,e.__scopeDialog);return a.modal?(0,D.jsx)(L,{present:r||a.open,children:(0,D.jsx)(bi,{...i,ref:t})}):null});vi.displayName=_i;var yi=et(`DialogOverlay.RemoveScroll`),bi=E.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(_i,n);return(0,D.jsx)(ei,{as:yi,allowPinchZoom:!0,shards:[i.contentRef],children:(0,D.jsx)(P.div,{"data-state":ji(i.open),...r,ref:t,style:{pointerEvents:`auto`,...r.style}})})}),Q=`DialogContent`,xi=E.forwardRef((e,t)=>{let n=hi(Q,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=Z(Q,e.__scopeDialog);return(0,D.jsx)(L,{present:r||a.open,children:a.modal?(0,D.jsx)(Si,{...i,ref:t}):(0,D.jsx)(Ci,{...i,ref:t})})});xi.displayName=Q;var Si=E.forwardRef((e,t)=>{let n=Z(Q,e.__scopeDialog),r=E.useRef(null),i=j(t,n.contentRef,r);return E.useEffect(()=>{let e=r.current;if(e)return oi(e)},[]),(0,D.jsx)(wi,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:k(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:k(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:k(e.onFocusOutside,e=>e.preventDefault())})}),Ci=E.forwardRef((e,t)=>{let n=Z(Q,e.__scopeDialog),r=E.useRef(!1),i=E.useRef(!1);return(0,D.jsx)(wi,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),wi=E.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=Z(Q,n),c=E.useRef(null),l=j(t,c);return Xn(),(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(In,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,D.jsx)(Tn,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":ji(s.open),...o,ref:l,onDismiss:()=>s.onOpenChange(!1)})}),(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Fi,{titleId:s.titleId}),(0,D.jsx)(Li,{contentRef:c,descriptionId:s.descriptionId})]})]})}),Ti=`DialogTitle`,Ei=E.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(Ti,n);return(0,D.jsx)(P.h2,{id:i.titleId,...r,ref:t})});Ei.displayName=Ti;var Di=`DialogDescription`,Oi=E.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(Di,n);return(0,D.jsx)(P.p,{id:i.descriptionId,...r,ref:t})});Oi.displayName=Di;var ki=`DialogClose`,Ai=E.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=Z(ki,n);return(0,D.jsx)(P.button,{type:`button`,...r,ref:t,onClick:k(e.onClick,()=>i.onOpenChange(!1))})});Ai.displayName=ki;function ji(e){return e?`open`:`closed`}var Mi=`DialogTitleWarning`,[Ni,Pi]=Xe(Mi,{contentName:Q,titleName:Ti,docsSlug:`dialog`}),Fi=({titleId:e})=>{let t=Pi(Mi),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
|
|
42
|
+
|
|
43
|
+
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
44
|
+
|
|
45
|
+
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return E.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Ii=`DialogDescriptionWarning`,Li=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Pi(Ii).contentName}}.`;return E.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},Ri=ui,zi=gi,Bi=vi,Vi=xi,Hi=Ei,Ui=Oi,Wi=Ai,Gi=Ri,Ki=zi,qi=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(Bi,{ref:n,className:h(`fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,e),...t}));qi.displayName=Bi.displayName;var Ji=E.forwardRef(({className:e,children:t,...n},r)=>(0,D.jsxs)(Ki,{children:[(0,D.jsx)(qi,{}),(0,D.jsxs)(Vi,{ref:r,className:h(`fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-surface text-text p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg`,e),...n,children:[t,(0,D.jsxs)(Wi,{className:`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-bg transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-surface-active data-[state=open]:text-text-muted`,children:[(0,D.jsx)(Ce,{className:`h-4 w-4`}),(0,D.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]}));Ji.displayName=Vi.displayName;var Yi=({className:e,...t})=>(0,D.jsx)(`div`,{className:h(`flex flex-col space-y-1.5 text-center sm:text-left`,e),...t});Yi.displayName=`DialogHeader`;var Xi=({className:e,...t})=>(0,D.jsx)(`div`,{className:h(`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2`,e),...t});Xi.displayName=`DialogFooter`;var Zi=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(Hi,{ref:n,className:h(`text-lg font-semibold leading-none tracking-tight`,e),...t}));Zi.displayName=Hi.displayName;var Qi=E.forwardRef(({className:e,...t},n)=>(0,D.jsx)(Ui,{ref:n,className:h(`text-sm text-text-muted`,e),...t}));Qi.displayName=Ui.displayName;var{ipcRenderer:$}=window.require(`electron`);function $i(){let[e,t]=(0,E.useState)(!1),[n,r]=(0,E.useState)(null),[i,a]=(0,E.useState)(`prompt`),[o,s]=(0,E.useState)(0),[c,l]=(0,E.useState)(``);(0,E.useEffect)(()=>{let e=(e,n)=>{r(n),a(`prompt`),s(0),l(``),t(!0)};return $.on(`updates:available`,e),()=>{$.removeListener(`updates:available`,e)}},[]),(0,E.useEffect)(()=>{let e=(e,t)=>{s(Math.round(t.percent))};return $.on(`updates:downloadProgress`,e),()=>{$.removeListener(`updates:downloadProgress`,e)}},[]);let u=(0,E.useCallback)(async()=>{a(`downloading`),s(0);let e=await $.invoke(`updates:download`);e.success?a(`ready`):(l(e.error||`Download failed`),a(`error`))},[]),d=(0,E.useCallback)(()=>{$.invoke(`updates:install`)},[]),f=(0,E.useCallback)(()=>{n?.mandatory&&i!==`ready`||t(!1)},[n,i]);return n?(0,D.jsx)(Gi,{open:e,onOpenChange:e=>{!e&&n?.mandatory&&i!==`ready`||t(e)},children:(0,D.jsxs)(Ji,{className:`max-w-md`,children:[(0,D.jsxs)(Yi,{children:[(0,D.jsx)(Zi,{children:i===`ready`?`Ready to Install`:`Update Available`}),(0,D.jsxs)(Qi,{children:[i===`prompt`&&`New version ${n.version} is available.`,i===`downloading`&&`Downloading... ${o}%`,i===`ready`&&`Download complete. Click install to restart and apply the update.`,i===`error`&&`Download failed: ${c}`]})]}),n.releaseNotes&&i===`prompt`&&(0,D.jsx)(`div`,{className:`max-h-40 overflow-y-auto rounded border border-border bg-surface-2 p-3 text-xs text-text-secondary whitespace-pre-wrap`,children:n.releaseNotes}),i===`downloading`&&(0,D.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-surface-3`,children:(0,D.jsx)(`div`,{className:`h-full bg-accent transition-all duration-300`,style:{width:`${o}%`}})}),(0,D.jsxs)(Xi,{children:[i===`prompt`&&(0,D.jsxs)(D.Fragment,{children:[!n.mandatory&&(0,D.jsx)(w,{variant:`outline`,onClick:f,children:`Later`}),(0,D.jsx)(w,{onClick:u,children:`Download`})]}),i===`ready`&&(0,D.jsx)(w,{onClick:d,children:`Install & Restart`}),i===`error`&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(w,{variant:`outline`,onClick:f,children:`Close`}),(0,D.jsx)(w,{onClick:u,children:`Retry`})]})]})]})}):null}var ea=`Dimina DevTools`;function ta(){let[e,t]=(0,E.useState)(`list`),[n,r]=(0,E.useState)(null),[i,a]=(0,E.useState)([]),[o,s]=(0,E.useState)(ea);async function c(){a(await ke())}(0,E.useEffect)(()=>{c(),De().then(e=>{e?.appName&&(s(e.appName),document.title=e.appName)}).catch(()=>{})},[]),(0,E.useEffect)(()=>C(()=>{document.title=o,t(`list`),r(null),ke().then(a)}),[o]);async function l(){let e=await Ae();if(!e)return;let t=await je(e);await c(),d(t)}async function u(e){await Me(e.path),await c()}function d(e){r(e),t(`project`)}return e===`list`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)($i,{}),(0,D.jsx)(Ee,{projects:i,onAdd:l,onOpen:d,onRemove:u})]}):(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)($i,{}),(0,D.jsx)(_n,{project:n},n?.path)]})}we.createRoot(document.getElementById(`root`)).render((0,D.jsx)(ta,{}));
|
|
46
|
+
//# sourceMappingURL=index-D_HFRqZA.js.map
|