@effindomv2/runtime 0.1.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/LICENSE.md +6 -0
- package/dist/bridge.js +4 -0
- package/dist/bridge.js.map +7 -0
- package/dist/effindom.v2.manifest.json +68 -0
- package/dist/fonts/NotoColorEmoji.ttf +0 -0
- package/dist/fonts/NotoEmoji-Regular.ttf +0 -0
- package/dist/fonts/NotoSans-Bold.ttf +0 -0
- package/dist/fonts/NotoSans-BoldItalic.ttf +0 -0
- package/dist/fonts/NotoSans-Italic.ttf +0 -0
- package/dist/fonts/NotoSans-Regular.ttf +0 -0
- package/dist/fonts/NotoSansMono-Bold.ttf +0 -0
- package/dist/fonts/NotoSansMono-Regular.ttf +0 -0
- package/dist/fonts/NotoSansSymbols2-Regular.ttf +0 -0
- package/dist/harness.js +2 -0
- package/dist/harness.js.map +7 -0
- package/dist/index.html +53 -0
- package/dist/runtime/effindom-core-v2.wasm32-simd.JQXIaRaN0-JahfIVFiSLE49WzzCENvef_2EDEm09nJs.wasm +0 -0
- package/dist/runtime/effindom-core-v2.wasm32-simd.y7RzpkMARiFeRkpgiqKQsAfv4Hf17NYdpni-6aLNhMs.js.symbols +10079 -0
- package/dist/runtime/effindom-core-v2.wasm32-simd.yhT7DGUv4soEv4W91WVZl3T7T_ecKojk5_IcnwL79a0.js +1 -0
- package/dist/runtime/effindom-core-v2.wasm32.JSfMkp9ertJzSZxA-_xz3yacrJUhswxlwbqbJLRIuqw.wasm +0 -0
- package/dist/runtime/effindom-core-v2.wasm32.xNgsQv7dCwf8Uy-PfJSoRNyk9-q1OSogUwkk5g6ZBjk.js.symbols +10088 -0
- package/dist/runtime/effindom-core-v2.wasm32.yhT7DGUv4soEv4W91WVZl3T7T_ecKojk5_IcnwL79a0.js +1 -0
- package/dist/runtime/effindom-core-v2.wasm64-simd.GkByf-CPorNOs1CORny_8JjVk8Z3piiFq92r-uw1Syc.js +1 -0
- package/dist/runtime/effindom-core-v2.wasm64-simd.p4P98oRu2wEWxtRRW8RHr27JhGeWvWlziZXDM_z3Nc4.js.symbols +10286 -0
- package/dist/runtime/effindom-core-v2.wasm64-simd.y75FYXRwhQrpaDGYbZWrohGDv0AmjTb-EjXwOjBIgnM.wasm +0 -0
- package/dist/runtime/effindom-core-v2.wasm64.GkByf-CPorNOs1CORny_8JjVk8Z3piiFq92r-uw1Syc.js +1 -0
- package/dist/runtime/effindom-core-v2.wasm64.emhE1_CJs4_zXp8wiQS_5lYpUQ0OchmXgxksi0ykaBs.js.symbols +10298 -0
- package/dist/runtime/effindom-core-v2.wasm64.sO-Yu70cfN8Qs3a5iEp6cbFPaiOchqcMKUzryu4npNo.wasm +0 -0
- package/dist/runtime/effindom-ui-v2.wasm32-simd.0Mas1XD03eYvemryTioWaZOBuBA5ij7MFlTa8CgEZWs.wasm +0 -0
- package/dist/runtime/effindom-ui-v2.wasm32-simd.ThSDClMnSWdwf9d89JZfYor0G1Z6OxR4lOc75rNRuD4.js.symbols +1890 -0
- package/dist/runtime/effindom-ui-v2.wasm32-simd.wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N_wCP4I.js +2 -0
- package/dist/runtime/effindom-ui-v2.wasm32.H7kYg99bT9ADGh0uUvj6H9Dk1L058nVFLv_4R79IXW8.js.symbols +1900 -0
- package/dist/runtime/effindom-ui-v2.wasm32.tp53X7nHfG_EUq29naDyElfnqhMw2D1Tr1T-BJAYO7w.wasm +0 -0
- package/dist/runtime/effindom-ui-v2.wasm32.wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N_wCP4I.js +2 -0
- package/dist/runtime/effindom-ui-v2.wasm64-simd.86tk9Z3xIpgTOykET_8Nn9iUVJnp1AzOHW4fVQRGtQE.wasm +0 -0
- package/dist/runtime/effindom-ui-v2.wasm64-simd.RQaXil22Chu63-vxK9oOuX8wUY044kbo190oYIbBU4M.js.symbols +1918 -0
- package/dist/runtime/effindom-ui-v2.wasm64-simd.ZS1KEAg0XQex-VXkfgpBHE8MIoqPF8qpaf8nOjANb_U.js +2 -0
- package/dist/runtime/effindom-ui-v2.wasm64.YSwpMFbr-Q1SBe0Ze8mub1u1PqsvSz3QIYuA3eaUMME.js.symbols +1924 -0
- package/dist/runtime/effindom-ui-v2.wasm64.ZS1KEAg0XQex-VXkfgpBHE8MIoqPF8qpaf8nOjANb_U.js +2 -0
- package/dist/runtime/effindom-ui-v2.wasm64.ioQ9DuM6gR_EjlfRHdF8EvNPBcKCs0PQbbY9-cjTV6Y.wasm +0 -0
- package/dist/runtime/icudt_minimal.962CX1q0-Nbv-OqXPaub5piYTOLumUk-nEvemcvvnpw.dat +0 -0
- package/package.json +62 -0
- package/scripts/build.sh +279 -0
- package/scripts/build_assets.sh +51 -0
- package/scripts/font_assets.sh +52 -0
- package/scripts/generate_manifest.py +121 -0
- package/scripts/stage_package_assets.sh +42 -0
- package/src/bridge/commit-policy.ts +10 -0
- package/src/bridge/events/canvas-geometry.ts +78 -0
- package/src/bridge/events/key-router.ts +187 -0
- package/src/bridge/events/pointer-router.ts +619 -0
- package/src/bridge/events/semantic-hit-testing.ts +27 -0
- package/src/bridge/events.ts +54 -0
- package/src/bridge/find-dialog.ts +690 -0
- package/src/bridge/find-session.ts +158 -0
- package/src/bridge/font-catalog.ts +51 -0
- package/src/bridge/google-fonts.ts +63 -0
- package/src/bridge/incremental-font-packages.ts +216 -0
- package/src/bridge/init.ts +77 -0
- package/src/bridge/interaction/editor-model.ts +371 -0
- package/src/bridge/interaction/editor-mutations.ts +495 -0
- package/src/bridge/interaction/editor-session.ts +628 -0
- package/src/bridge/interaction/logs.ts +23 -0
- package/src/bridge/interaction/text-encoding.ts +51 -0
- package/src/bridge/interaction.ts +86 -0
- package/src/bridge/local-types.ts +105 -0
- package/src/bridge/platform.ts +68 -0
- package/src/bridge/pointer-move-coalescer.ts +41 -0
- package/src/bridge/pull-to-refresh.ts +124 -0
- package/src/bridge/render-loop.ts +268 -0
- package/src/bridge/runtime/asset-manager.ts +202 -0
- package/src/bridge/runtime/find-controller.ts +269 -0
- package/src/bridge/runtime/font-manager.ts +691 -0
- package/src/bridge/runtime/open-canvas-api.ts +72 -0
- package/src/bridge/runtime/semantic-controller.ts +133 -0
- package/src/bridge/runtime/text-documents.ts +234 -0
- package/src/bridge/runtime.ts +315 -0
- package/src/bridge/touch-gesture.ts +159 -0
- package/src/bridge/utils/assets.ts +572 -0
- package/src/bridge/utils/backends.ts +163 -0
- package/src/bridge/utils/encoding.ts +128 -0
- package/src/bridge/utils/fetch.ts +147 -0
- package/src/bridge/utils/heap.ts +118 -0
- package/src/bridge.ts +93 -0
- package/src/clipboard.ts +139 -0
- package/src/core-types.ts +595 -0
- package/src/find-on-page.ts +284 -0
- package/src/harness.ts +53 -0
- package/src/index.ts +40 -0
- package/src/open-canvas.ts +108 -0
- package/src/runtime-config.ts +96 -0
- package/src/semantic.ts +905 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"manifest_hash": "U2swDINM2xrZ6I9_Sr0-rrHLo81hI0V8lk16_UITs74",
|
|
4
|
+
"architectures": {
|
|
5
|
+
"wasm64-simd": {
|
|
6
|
+
"core": {
|
|
7
|
+
"js": "./runtime/effindom-core-v2.wasm64-simd.GkByf-CPorNOs1CORny_8JjVk8Z3piiFq92r-uw1Syc.js",
|
|
8
|
+
"js_integrity": "sha256-GkByf+CPorNOs1CORny/8JjVk8Z3piiFq92r+uw1Syc=",
|
|
9
|
+
"wasm": "./runtime/effindom-core-v2.wasm64-simd.y75FYXRwhQrpaDGYbZWrohGDv0AmjTb-EjXwOjBIgnM.wasm",
|
|
10
|
+
"wasm_integrity": "sha256-y75FYXRwhQrpaDGYbZWrohGDv0AmjTb+EjXwOjBIgnM="
|
|
11
|
+
},
|
|
12
|
+
"ui": {
|
|
13
|
+
"js": "./runtime/effindom-ui-v2.wasm64-simd.ZS1KEAg0XQex-VXkfgpBHE8MIoqPF8qpaf8nOjANb_U.js",
|
|
14
|
+
"js_integrity": "sha256-ZS1KEAg0XQex+VXkfgpBHE8MIoqPF8qpaf8nOjANb/U=",
|
|
15
|
+
"wasm": "./runtime/effindom-ui-v2.wasm64-simd.86tk9Z3xIpgTOykET_8Nn9iUVJnp1AzOHW4fVQRGtQE.wasm",
|
|
16
|
+
"wasm_integrity": "sha256-86tk9Z3xIpgTOykET/8Nn9iUVJnp1AzOHW4fVQRGtQE="
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"wasm64": {
|
|
20
|
+
"core": {
|
|
21
|
+
"js": "./runtime/effindom-core-v2.wasm64.GkByf-CPorNOs1CORny_8JjVk8Z3piiFq92r-uw1Syc.js",
|
|
22
|
+
"js_integrity": "sha256-GkByf+CPorNOs1CORny/8JjVk8Z3piiFq92r+uw1Syc=",
|
|
23
|
+
"wasm": "./runtime/effindom-core-v2.wasm64.sO-Yu70cfN8Qs3a5iEp6cbFPaiOchqcMKUzryu4npNo.wasm",
|
|
24
|
+
"wasm_integrity": "sha256-sO+Yu70cfN8Qs3a5iEp6cbFPaiOchqcMKUzryu4npNo="
|
|
25
|
+
},
|
|
26
|
+
"ui": {
|
|
27
|
+
"js": "./runtime/effindom-ui-v2.wasm64.ZS1KEAg0XQex-VXkfgpBHE8MIoqPF8qpaf8nOjANb_U.js",
|
|
28
|
+
"js_integrity": "sha256-ZS1KEAg0XQex+VXkfgpBHE8MIoqPF8qpaf8nOjANb/U=",
|
|
29
|
+
"wasm": "./runtime/effindom-ui-v2.wasm64.ioQ9DuM6gR_EjlfRHdF8EvNPBcKCs0PQbbY9-cjTV6Y.wasm",
|
|
30
|
+
"wasm_integrity": "sha256-ioQ9DuM6gR/EjlfRHdF8EvNPBcKCs0PQbbY9+cjTV6Y="
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"wasm32-simd": {
|
|
34
|
+
"core": {
|
|
35
|
+
"js": "./runtime/effindom-core-v2.wasm32-simd.yhT7DGUv4soEv4W91WVZl3T7T_ecKojk5_IcnwL79a0.js",
|
|
36
|
+
"js_integrity": "sha256-yhT7DGUv4soEv4W91WVZl3T7T/ecKojk5/IcnwL79a0=",
|
|
37
|
+
"wasm": "./runtime/effindom-core-v2.wasm32-simd.JQXIaRaN0-JahfIVFiSLE49WzzCENvef_2EDEm09nJs.wasm",
|
|
38
|
+
"wasm_integrity": "sha256-JQXIaRaN0+JahfIVFiSLE49WzzCENvef/2EDEm09nJs="
|
|
39
|
+
},
|
|
40
|
+
"ui": {
|
|
41
|
+
"js": "./runtime/effindom-ui-v2.wasm32-simd.wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N_wCP4I.js",
|
|
42
|
+
"js_integrity": "sha256-wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N/wCP4I=",
|
|
43
|
+
"wasm": "./runtime/effindom-ui-v2.wasm32-simd.0Mas1XD03eYvemryTioWaZOBuBA5ij7MFlTa8CgEZWs.wasm",
|
|
44
|
+
"wasm_integrity": "sha256-0Mas1XD03eYvemryTioWaZOBuBA5ij7MFlTa8CgEZWs="
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"wasm32": {
|
|
48
|
+
"core": {
|
|
49
|
+
"js": "./runtime/effindom-core-v2.wasm32.yhT7DGUv4soEv4W91WVZl3T7T_ecKojk5_IcnwL79a0.js",
|
|
50
|
+
"js_integrity": "sha256-yhT7DGUv4soEv4W91WVZl3T7T/ecKojk5/IcnwL79a0=",
|
|
51
|
+
"wasm": "./runtime/effindom-core-v2.wasm32.JSfMkp9ertJzSZxA-_xz3yacrJUhswxlwbqbJLRIuqw.wasm",
|
|
52
|
+
"wasm_integrity": "sha256-JSfMkp9ertJzSZxA+/xz3yacrJUhswxlwbqbJLRIuqw="
|
|
53
|
+
},
|
|
54
|
+
"ui": {
|
|
55
|
+
"js": "./runtime/effindom-ui-v2.wasm32.wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N_wCP4I.js",
|
|
56
|
+
"js_integrity": "sha256-wved0xEV4EKXVNBU3Sx7giD4faxD2YII9sQ2N/wCP4I=",
|
|
57
|
+
"wasm": "./runtime/effindom-ui-v2.wasm32.tp53X7nHfG_EUq29naDyElfnqhMw2D1Tr1T-BJAYO7w.wasm",
|
|
58
|
+
"wasm_integrity": "sha256-tp53X7nHfG/EUq29naDyElfnqhMw2D1Tr1T+BJAYO7w="
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"assets": {
|
|
63
|
+
"icu": {
|
|
64
|
+
"url": "./runtime/icudt_minimal.962CX1q0-Nbv-OqXPaub5piYTOLumUk-nEvemcvvnpw.dat",
|
|
65
|
+
"integrity": "sha256-962CX1q0+Nbv+OqXPaub5piYTOLumUk+nEvemcvvnpw="
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/harness.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(()=>{function c(e){if(typeof e=="bigint"||typeof e=="number"||typeof e=="string")return e;let t=e[Symbol.toPrimitive]?.("default");if(typeof t=="bigint"||typeof t=="number"||typeof t=="string")return t;let r=e.valueOf();if(typeof r=="bigint"||typeof r=="number"||typeof r=="string")return r;let i=e.toString();if(typeof i=="string")return i;throw new TypeError(`Cannot convert ${String(e)} to BigInt.`)}function a(e){let t=c(e);if(typeof t=="bigint")return t;if(typeof t=="number"){if(!Number.isInteger(t))throw new TypeError(`Cannot convert non-integer handle ${String(t)} to BigInt.`);return BigInt(t)}if(typeof t=="string")return BigInt(t);throw new TypeError(`Cannot convert ${String(e)} to BigInt.`)}var s=0,f=0;function d(){return new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{e()})})})}async function g(e){let{canvas:t,ui:r}=e,i=t.getBoundingClientRect(),u=i.width,m=i.height,n=a(r._ui_create_node(f));if(n===0n)throw new Error("ui_create_node returned UI_INVALID_HANDLE.");r._ui_set_root(n),r._ui_set_width(n,u,s),r._ui_set_height(n,m,s),r._ui_set_bg_color(n,4278190335),r._ui_commit_frame();let o=e.syncCommandBufferToCore();await d(),window.__bridgeState={commandWordCount:o.length,commandWords:Array.from(o),rootHandle:n.toString()},window.__bridgeReady=!0,delete window.__bridgeError}window.EffinDomBrowserBridge?.ready.then(async e=>{await g(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);throw window.__bridgeError=t,e});})();
|
|
2
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../v2/browser-bridge/src/bridge/utils/encoding.ts", "../../../v2/browser-bridge/src/harness.ts"],
|
|
4
|
+
"sourcesContent": ["import { EdBackendType, EdDeviceState } from '../../core-types';\nimport type {\n CoreModule,\n EdBackendType as EdBackendTypeValue,\n EdDeviceState as EdDeviceStateValue,\n UiModule,\n WasmHandleLike,\n} from '../../core-types';\n\nexport type WasmModuleMemoryView = Pick<UiModule | CoreModule, 'usesMemory64'>;\n\nfunction extractHandlePrimitive(handle: WasmHandleLike): bigint | number | string {\n if (typeof handle === 'bigint' || typeof handle === 'number' || typeof handle === 'string') {\n return handle;\n }\n const symbolPrimitive = (handle as { [Symbol.toPrimitive]?: (hint: string) => unknown })[Symbol.toPrimitive]?.('default');\n if (\n typeof symbolPrimitive === 'bigint' ||\n typeof symbolPrimitive === 'number' ||\n typeof symbolPrimitive === 'string'\n ) {\n return symbolPrimitive;\n }\n const primitive = handle.valueOf();\n if (typeof primitive === 'bigint' || typeof primitive === 'number' || typeof primitive === 'string') {\n return primitive;\n }\n const stringified = handle.toString();\n if (typeof stringified === 'string') {\n return stringified;\n }\n throw new TypeError(`Cannot convert ${String(handle)} to BigInt.`);\n}\n\nexport function handleToBigInt(handle: WasmHandleLike): bigint {\n const primitive = extractHandlePrimitive(handle);\n if (typeof primitive === 'bigint') {\n return primitive;\n }\n if (typeof primitive === 'number') {\n if (!Number.isInteger(primitive)) {\n throw new TypeError(`Cannot convert non-integer handle ${String(primitive)} to BigInt.`);\n }\n return BigInt(primitive);\n }\n if (typeof primitive === 'string') {\n return BigInt(primitive);\n }\n throw new TypeError(`Cannot convert ${String(handle)} to BigInt.`);\n}\n\nexport function handleToString(handle: WasmHandleLike): string {\n return handleToBigInt(handle).toString();\n}\n\nexport function pointerToHeapOffset(pointer: WasmHandleLike): number {\n if (typeof pointer === 'number') {\n if (!Number.isInteger(pointer)) {\n throw new TypeError(`Cannot convert non-integer pointer ${String(pointer)} to a heap offset.`);\n }\n return pointer;\n }\n const value = handleToBigInt(pointer);\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new RangeError(`Pointer ${value.toString()} exceeds JavaScript heap offset precision.`);\n }\n return Number(value);\n}\n\nexport function normalizePointerForWasm(\n module: WasmModuleMemoryView,\n pointer: WasmHandleLike,\n): number | bigint {\n return module.usesMemory64 === true ? handleToBigInt(pointer) : pointerToHeapOffset(pointer);\n}\n\nexport function toHeapPointer(\n module: WasmModuleMemoryView,\n pointer: WasmHandleLike,\n): { readonly ptr: number | bigint; readonly offset: number } {\n const ptr = normalizePointerForWasm(module, pointer);\n return {\n ptr,\n offset: pointerToHeapOffset(ptr),\n };\n}\n\nexport function normalizeBackendType(value: number): EdBackendTypeValue {\n switch (value) {\n case EdBackendType.WEBGPU:\n case EdBackendType.WEBGL2:\n case EdBackendType.CPU:\n return value;\n default:\n return EdBackendType.NONE;\n }\n}\n\nexport function normalizeDeviceState(value: number): EdDeviceStateValue {\n switch (value) {\n case EdDeviceState.LOST:\n case EdDeviceState.RECOVERING:\n return value;\n default:\n return EdDeviceState.OK;\n }\n}\n\ntype ModifierSource =\n | Pick<KeyboardEvent, 'shiftKey' | 'ctrlKey' | 'altKey' | 'metaKey'>\n | Pick<PointerEvent, 'shiftKey' | 'ctrlKey' | 'altKey' | 'metaKey'>;\n\nexport function computeModifiers(event: ModifierSource): number {\n let modifiers = 0;\n if (event.shiftKey) {\n modifiers |= 1 << 0;\n }\n if (event.ctrlKey) {\n modifiers |= 1 << 1;\n }\n if (event.altKey) {\n modifiers |= 1 << 2;\n }\n if (event.metaKey) {\n modifiers |= 1 << 3;\n }\n return modifiers;\n}\n", "import type { BridgeRuntime } from './core-types';\nimport { handleToBigInt } from './bridge/utils/encoding';\n\nconst UI_SIZE_UNIT_PIXEL = 0;\nconst UI_NODE_FLEX_BOX = 0;\n\nfunction waitForFrame(): Promise<void> {\n return new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n}\n\nasync function runSmokeHarness(runtime: BridgeRuntime): Promise<void> {\n const { canvas, ui } = runtime;\n const rect = canvas.getBoundingClientRect();\n const logicalWidth = rect.width;\n const logicalHeight = rect.height;\n const rootHandle = handleToBigInt(ui._ui_create_node(UI_NODE_FLEX_BOX));\n if (rootHandle === 0n) {\n throw new Error('ui_create_node returned UI_INVALID_HANDLE.');\n }\n\n ui._ui_set_root(rootHandle);\n ui._ui_set_width(rootHandle, logicalWidth, UI_SIZE_UNIT_PIXEL);\n ui._ui_set_height(rootHandle, logicalHeight, UI_SIZE_UNIT_PIXEL);\n ui._ui_set_bg_color(rootHandle, 0xff0000ff);\n ui._ui_commit_frame();\n\n const commandWords = runtime.syncCommandBufferToCore();\n await waitForFrame();\n\n window.__bridgeState = {\n commandWordCount: commandWords.length,\n commandWords: Array.from(commandWords),\n rootHandle: rootHandle.toString(),\n };\n window.__bridgeReady = true;\n delete window.__bridgeError;\n}\n\nvoid window.EffinDomBrowserBridge?.ready.then(async (runtime) => {\n await runSmokeHarness(runtime);\n}).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n window.__bridgeError = message;\n throw error;\n});\n\nexport {};\n"],
|
|
5
|
+
"mappings": "mBAWA,SAASA,EAAuBC,EAAkD,CAChF,GAAI,OAAOA,GAAW,UAAY,OAAOA,GAAW,UAAY,OAAOA,GAAW,SAChF,OAAOA,EAET,IAAMC,EAAmBD,EAAgE,OAAO,WAAW,IAAI,SAAS,EACxH,GACE,OAAOC,GAAoB,UAC3B,OAAOA,GAAoB,UAC3B,OAAOA,GAAoB,SAE3B,OAAOA,EAET,IAAMC,EAAYF,EAAO,QAAQ,EACjC,GAAI,OAAOE,GAAc,UAAY,OAAOA,GAAc,UAAY,OAAOA,GAAc,SACzF,OAAOA,EAET,IAAMC,EAAcH,EAAO,SAAS,EACpC,GAAI,OAAOG,GAAgB,SACzB,OAAOA,EAET,MAAM,IAAI,UAAU,kBAAkB,OAAOH,CAAM,CAAC,aAAa,CACnE,CAEO,SAASI,EAAeJ,EAAgC,CAC7D,IAAME,EAAYH,EAAuBC,CAAM,EAC/C,GAAI,OAAOE,GAAc,SACvB,OAAOA,EAET,GAAI,OAAOA,GAAc,SAAU,CACjC,GAAI,CAAC,OAAO,UAAUA,CAAS,EAC7B,MAAM,IAAI,UAAU,qCAAqC,OAAOA,CAAS,CAAC,aAAa,EAEzF,OAAO,OAAOA,CAAS,CACzB,CACA,GAAI,OAAOA,GAAc,SACvB,OAAO,OAAOA,CAAS,EAEzB,MAAM,IAAI,UAAU,kBAAkB,OAAOF,CAAM,CAAC,aAAa,CACnE,CC9CA,IAAMK,EAAqB,EACrBC,EAAmB,EAEzB,SAASC,GAA8B,CACrC,OAAO,IAAI,QAAeC,GAAY,CACpC,sBAAsB,IAAM,CAC1B,sBAAsB,IAAM,CAC1BA,EAAQ,CACV,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAEA,eAAeC,EAAgBC,EAAuC,CACpE,GAAM,CAAE,OAAAC,EAAQ,GAAAC,CAAG,EAAIF,EACjBG,EAAOF,EAAO,sBAAsB,EACpCG,EAAeD,EAAK,MACpBE,EAAgBF,EAAK,OACrBG,EAAaC,EAAeL,EAAG,gBAAgBN,CAAgB,CAAC,EACtE,GAAIU,IAAe,GACjB,MAAM,IAAI,MAAM,4CAA4C,EAG9DJ,EAAG,aAAaI,CAAU,EAC1BJ,EAAG,cAAcI,EAAYF,EAAcT,CAAkB,EAC7DO,EAAG,eAAeI,EAAYD,EAAeV,CAAkB,EAC/DO,EAAG,iBAAiBI,EAAY,UAAU,EAC1CJ,EAAG,iBAAiB,EAEpB,IAAMM,EAAeR,EAAQ,wBAAwB,EACrD,MAAMH,EAAa,EAEnB,OAAO,cAAgB,CACrB,iBAAkBW,EAAa,OAC/B,aAAc,MAAM,KAAKA,CAAY,EACrC,WAAYF,EAAW,SAAS,CAClC,EACA,OAAO,cAAgB,GACvB,OAAO,OAAO,aAChB,CAEK,OAAO,uBAAuB,MAAM,KAAK,MAAON,GAAY,CAC/D,MAAMD,EAAgBC,CAAO,CAC/B,CAAC,EAAE,MAAOS,GAAmB,CAC3B,IAAMC,EAAUD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACrE,aAAO,cAAgBC,EACjBD,CACR,CAAC",
|
|
6
|
+
"names": ["extractHandlePrimitive", "handle", "symbolPrimitive", "primitive", "stringified", "handleToBigInt", "UI_SIZE_UNIT_PIXEL", "UI_NODE_FLEX_BOX", "waitForFrame", "resolve", "runSmokeHarness", "runtime", "canvas", "ui", "rect", "logicalWidth", "logicalHeight", "rootHandle", "handleToBigInt", "commandWords", "error", "message"]
|
|
7
|
+
}
|
package/dist/index.html
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>EffinDom Browser Bridge Smoke Harness</title>
|
|
7
|
+
<style>
|
|
8
|
+
body {
|
|
9
|
+
margin: 0;
|
|
10
|
+
font-family: system-ui, sans-serif;
|
|
11
|
+
background: #0f172a;
|
|
12
|
+
color: #e2e8f0;
|
|
13
|
+
display: grid;
|
|
14
|
+
place-items: center;
|
|
15
|
+
min-height: 100vh;
|
|
16
|
+
gap: 12px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
canvas {
|
|
20
|
+
width: 320px;
|
|
21
|
+
height: 220px;
|
|
22
|
+
border: 1px solid #334155;
|
|
23
|
+
border-radius: 12px;
|
|
24
|
+
image-rendering: pixelated;
|
|
25
|
+
box-shadow: 0 20px 40px rgba(15, 23, 42, 0.35);
|
|
26
|
+
background: transparent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#icu-error {
|
|
30
|
+
display: none;
|
|
31
|
+
padding: 12px 16px;
|
|
32
|
+
border: 1px solid #7f1d1d;
|
|
33
|
+
border-radius: 10px;
|
|
34
|
+
background: #450a0a;
|
|
35
|
+
color: #fecaca;
|
|
36
|
+
font-size: 14px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#icu-error button {
|
|
40
|
+
margin-left: 8px;
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
43
|
+
</head>
|
|
44
|
+
<body>
|
|
45
|
+
<canvas id="fui-canvas"></canvas>
|
|
46
|
+
<div id="icu-error">
|
|
47
|
+
<span id="icu-error-message">Failed to load text engine.</span>
|
|
48
|
+
<button type="button" onclick="location.reload()">Retry</button>
|
|
49
|
+
</div>
|
|
50
|
+
<script src="./bridge.js"></script>
|
|
51
|
+
<script src="./harness.js"></script>
|
|
52
|
+
</body>
|
|
53
|
+
</html>
|