@roomle/web-sdk 4.0.0 → 4.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/lib/{BufferGeometry-CnbfgBmz.mjs → BufferGeometry-DcRNeLZD.mjs} +2 -2
  2. package/lib/{BufferGeometry-CnbfgBmz.mjs.map → BufferGeometry-DcRNeLZD.mjs.map} +1 -1
  3. package/lib/{GLTFExporter-BxcjPMva.mjs → GLTFExporter-DdzTpCjW.mjs} +46 -46
  4. package/lib/{GLTFExporter-BxcjPMva.mjs.map → GLTFExporter-DdzTpCjW.mjs.map} +1 -1
  5. package/lib/{GaussianBlurNode-8gO-I1qG.mjs → GaussianBlurNode-CLuzhfDu.mjs} +19 -19
  6. package/lib/{GaussianBlurNode-8gO-I1qG.mjs.map → GaussianBlurNode-CLuzhfDu.mjs.map} +1 -1
  7. package/lib/{Object3D-DMaDdv-D.mjs → Object3D-CEXK2mMb.mjs} +1 -1
  8. package/lib/{Object3D-DMaDdv-D.mjs.map → Object3D-CEXK2mMb.mjs.map} +1 -1
  9. package/lib/Pass-C7MZilDW.mjs +53 -0
  10. package/lib/Pass-C7MZilDW.mjs.map +1 -0
  11. package/lib/{PointLightHelper-CahXSxiA.mjs → PointLightHelper-dDeo1kUI.mjs} +4 -4
  12. package/lib/{PointLightHelper-CahXSxiA.mjs.map → PointLightHelper-dDeo1kUI.mjs.map} +1 -1
  13. package/lib/{SpotLightHelper-BEqeYq1p.mjs → SpotLightHelper-BsMEPgVo.mjs} +3 -3
  14. package/lib/{SpotLightHelper-BEqeYq1p.mjs.map → SpotLightHelper-BsMEPgVo.mjs.map} +1 -1
  15. package/lib/{USDZExporter-ZZoG1mne.mjs → USDZExporter-BIDQSKG4.mjs} +3 -3
  16. package/lib/{USDZExporter-ZZoG1mne.mjs.map → USDZExporter-BIDQSKG4.mjs.map} +1 -1
  17. package/lib/{Vector4-BkA_VGid.mjs → Vector4-D-4p8rfn.mjs} +2 -2
  18. package/lib/{Vector4-BkA_VGid.mjs.map → Vector4-D-4p8rfn.mjs.map} +1 -1
  19. package/lib/{api-CUyBdNba.mjs → api-BEszDVqh.mjs} +10 -10
  20. package/lib/{api-CUyBdNba.mjs.map → api-BEszDVqh.mjs.map} +1 -1
  21. package/lib/{asset-loader.worker-C_5RQYHp.mjs → asset-loader.worker-eqHzNAwa.mjs} +1 -1
  22. package/lib/asset-loader.worker-eqHzNAwa.mjs.map +1 -0
  23. package/lib/{banana-for-scale-B77S3z9R.mjs → banana-for-scale-CiCouumi.mjs} +4 -4
  24. package/lib/{banana-for-scale-B77S3z9R.mjs.map → banana-for-scale-CiCouumi.mjs.map} +1 -1
  25. package/lib/{budgeteer.sw-DxeAvd0v.mjs → budgeteer.sw-BUMElkO1.mjs} +1 -1
  26. package/lib/budgeteer.sw-BUMElkO1.mjs.map +1 -0
  27. package/lib/{common-utils-BiOW17Ao.mjs → common-utils-CCzT4Gnn.mjs} +2 -2
  28. package/lib/{common-utils-BiOW17Ao.mjs.map → common-utils-CCzT4Gnn.mjs.map} +1 -1
  29. package/lib/{component-dimensioning-DPyPzSsa.mjs → component-dimensioning-DWEZ4jZg.mjs} +7 -7
  30. package/lib/{component-dimensioning-DPyPzSsa.mjs.map → component-dimensioning-DWEZ4jZg.mjs.map} +1 -1
  31. package/lib/{component-raycast-helper-RiQIybsX.mjs → component-raycast-helper-D2hyLpdX.mjs} +17 -17
  32. package/lib/{component-raycast-helper-RiQIybsX.mjs.map → component-raycast-helper-D2hyLpdX.mjs.map} +1 -1
  33. package/lib/configurator-BENT3shs.mjs +2 -0
  34. package/lib/{configurator-C_rsqn9l.mjs → configurator-BjLLdSf8.mjs} +16 -16
  35. package/lib/{configurator-C_rsqn9l.mjs.map → configurator-BjLLdSf8.mjs.map} +1 -1
  36. package/lib/{continuous-drawing-helper-C_Yc0uuv.mjs → continuous-drawing-helper-CCuU99Vh.mjs} +3 -3
  37. package/lib/{continuous-drawing-helper-C_Yc0uuv.mjs.map → continuous-drawing-helper-CCuU99Vh.mjs.map} +1 -1
  38. package/lib/{dat.gui.module-BLjoST8r.mjs → dat.gui.module-B2PXSbre.mjs} +1 -1
  39. package/lib/{dat.gui.module-BLjoST8r.mjs.map → dat.gui.module-B2PXSbre.mjs.map} +1 -1
  40. package/lib/{decorate-BAtqSPNS.mjs → decorate-CX1ZGuFY.mjs} +1 -1
  41. package/lib/{decorate-BAtqSPNS.mjs.map → decorate-CX1ZGuFY.mjs.map} +1 -1
  42. package/lib/{dimensioning-helper-D9oxGkry.mjs → dimensioning-helper-CjuQqjBn.mjs} +14 -14
  43. package/lib/{dimensioning-helper-D9oxGkry.mjs.map → dimensioning-helper-CjuQqjBn.mjs.map} +1 -1
  44. package/lib/dimensioning-helper-ImsWfczi.mjs +2 -0
  45. package/lib/{dist-DGov-RNo.mjs → dist-Blgk0vU0.mjs} +1 -1
  46. package/lib/{dist-DGov-RNo.mjs.map → dist-Blgk0vU0.mjs.map} +1 -1
  47. package/lib/{fflate.module-CTnSdWOb.mjs → fflate.module-DTkA0kF8.mjs} +1 -1
  48. package/lib/{fflate.module-CTnSdWOb.mjs.map → fflate.module-DTkA0kF8.mjs.map} +1 -1
  49. package/lib/{glb-viewer-A5vSLFZ5.mjs → glb-viewer-9Ata6ZNJ.mjs} +59 -45
  50. package/lib/glb-viewer-9Ata6ZNJ.mjs.map +1 -0
  51. package/lib/glb-viewer-CGqSGT38.mjs +2 -0
  52. package/lib/{highlight-coordinator-CZEJGeXA.mjs → highlight-coordinator-PyWNABN9.mjs} +3 -3
  53. package/lib/{highlight-coordinator-CZEJGeXA.mjs.map → highlight-coordinator-PyWNABN9.mjs.map} +1 -1
  54. package/lib/{homag-intelligence-BdCDX7LF.mjs → homag-intelligence-BNqPqVgE.mjs} +3 -3
  55. package/lib/{homag-intelligence-BdCDX7LF.mjs.map → homag-intelligence-BNqPqVgE.mjs.map} +1 -1
  56. package/lib/{imos-ix-poc-export-helper-CaXXDNvP.mjs → imos-ix-poc-export-helper-C1LfrtjM.mjs} +3 -3
  57. package/lib/{imos-ix-poc-export-helper-CaXXDNvP.mjs.map → imos-ix-poc-export-helper-C1LfrtjM.mjs.map} +1 -1
  58. package/lib/{kernel-utils-BYEsHVYJ.mjs → kernel-utils-Cn4evFqF.mjs} +2 -2
  59. package/lib/{kernel-utils-BYEsHVYJ.mjs.map → kernel-utils-Cn4evFqF.mjs.map} +1 -1
  60. package/lib/{layer-CIWL5ZW3.mjs → layer-DvZF9ur3.mjs} +1 -1
  61. package/lib/{layer-CIWL5ZW3.mjs.map → layer-DvZF9ur3.mjs.map} +1 -1
  62. package/lib/{main-BUl8iCi1.mjs → main-n3n3jdja.mjs} +1097 -1017
  63. package/lib/{main-BUl8iCi1.mjs.map → main-n3n3jdja.mjs.map} +1 -1
  64. package/lib/{material-viewer-C4SqVaGG.mjs → material-viewer-Cv5Awgwm.mjs} +24 -24
  65. package/lib/{material-viewer-C4SqVaGG.mjs.map → material-viewer-Cv5Awgwm.mjs.map} +1 -1
  66. package/lib/{packages-C9gO5mKk.mjs → packages-B3bi3adH.mjs} +5 -5
  67. package/lib/{packages-C9gO5mKk.mjs.map → packages-B3bi3adH.mjs.map} +1 -1
  68. package/lib/planner-DIT2VvMG.mjs +44 -0
  69. package/lib/{planner-t4QH26WW.mjs.map → planner-DIT2VvMG.mjs.map} +1 -1
  70. package/lib/planner-DaI8ZwEe.mjs +2 -0
  71. package/lib/{plugin-system-COZJdJH_.mjs → plugin-system-FuZpDWqv.mjs} +3 -3
  72. package/lib/{plugin-system-COZJdJH_.mjs.map → plugin-system-FuZpDWqv.mjs.map} +1 -1
  73. package/lib/roomle-headless-setup-CMHahWyC.mjs +612 -0
  74. package/lib/roomle-headless-setup-CMHahWyC.mjs.map +1 -0
  75. package/lib/roomle-headless.d.ts +113 -34
  76. package/lib/roomle-headless.js +433 -84
  77. package/lib/roomle-headless.js.map +1 -1
  78. package/lib/{roomle-renderer-DhLUaHJZ.mjs → roomle-renderer-BR0UKz2y.mjs} +2 -2
  79. package/lib/{roomle-renderer-DhLUaHJZ.mjs.map → roomle-renderer-BR0UKz2y.mjs.map} +1 -1
  80. package/lib/roomle-sdk.d.ts +37 -9
  81. package/lib/roomle-sdk.js +8 -8
  82. package/lib/{roomle-webgpu-renderer-CRGcdahn.mjs → roomle-webgpu-renderer-fOYJoKJU.mjs} +175 -173
  83. package/lib/roomle-webgpu-renderer-fOYJoKJU.mjs.map +1 -0
  84. package/lib/{scene-renderer-D5CfxCag.mjs → scene-renderer-CAzAJ4pS.mjs} +212 -211
  85. package/lib/{scene-renderer-D5CfxCag.mjs.map → scene-renderer-CAzAJ4pS.mjs.map} +1 -1
  86. package/lib/{script-loader-D6IuUFjw.mjs → script-loader-BAWHLt9q.mjs} +3 -3
  87. package/lib/{script-loader-D6IuUFjw.mjs.map → script-loader-BAWHLt9q.mjs.map} +1 -1
  88. package/lib/{shading-settings-BEMqEGzB.mjs → shading-settings-BPpgt0Fq.mjs} +101 -146
  89. package/lib/shading-settings-BPpgt0Fq.mjs.map +1 -0
  90. package/lib/{stats-helper-DAfbSToL.mjs → stats-helper-CqiTcJuc.mjs} +3 -3
  91. package/lib/{stats-helper-DAfbSToL.mjs.map → stats-helper-CqiTcJuc.mjs.map} +1 -1
  92. package/lib/{svgo.browser-DYieWzyw.mjs → svgo.browser-EB1zkPfG.mjs} +1 -1
  93. package/lib/{svgo.browser-DYieWzyw.mjs.map → svgo.browser-EB1zkPfG.mjs.map} +1 -1
  94. package/lib/{three.core-DjCexDCp.mjs → three.core-CmmDf_BZ.mjs} +73 -38
  95. package/lib/{three.core-DjCexDCp.mjs.map → three.core-CmmDf_BZ.mjs.map} +1 -1
  96. package/lib/{three.module-CuRNgijg.mjs → three.module-BkkLbA6n.mjs} +857 -857
  97. package/lib/{three.module-CuRNgijg.mjs.map → three.module-BkkLbA6n.mjs.map} +1 -1
  98. package/lib/three.tsl-8HwZJGJ8.mjs +2 -0
  99. package/lib/{three.tsl-BIBER8nk.mjs → three.tsl-Cw9IeeKW.mjs} +64 -52
  100. package/lib/{three.tsl-BIBER8nk.mjs.map → three.tsl-Cw9IeeKW.mjs.map} +1 -1
  101. package/lib/three.webgpu-Bw4_U6Q1.mjs +3 -0
  102. package/lib/{three.webgpu-Bz4Xtk0X.mjs → three.webgpu-DL5l_0xI.mjs} +1742 -1728
  103. package/lib/{three.webgpu-Bz4Xtk0X.mjs.map → three.webgpu-DL5l_0xI.mjs.map} +1 -1
  104. package/lib/{threejs-utils-Dpvg3Czz.mjs → threejs-utils-PRhv_eX3.mjs} +63 -63
  105. package/lib/{threejs-utils-Dpvg3Czz.mjs.map → threejs-utils-PRhv_eX3.mjs.map} +1 -1
  106. package/lib/{tools-core-BDOFf9le.mjs → tools-core-CmrXkw3J.mjs} +3 -3
  107. package/lib/{tools-core-BDOFf9le.mjs.map → tools-core-CmrXkw3J.mjs.map} +1 -1
  108. package/lib/webgpu-wkXAkJ6p.mjs +5084 -0
  109. package/lib/webgpu-wkXAkJ6p.mjs.map +1 -0
  110. package/lib/workers-YGDNEfpU.mjs +6 -0
  111. package/lib/{workers-DcgrO-z7.mjs.map → workers-YGDNEfpU.mjs.map} +1 -1
  112. package/package.json +5 -4
  113. package/lib/asset-loader.worker-C_5RQYHp.mjs.map +0 -1
  114. package/lib/budgeteer.sw-DxeAvd0v.mjs.map +0 -1
  115. package/lib/configurator-BBlZVIId.mjs +0 -2
  116. package/lib/dimensioning-helper-Bzf1sbpy.mjs +0 -2
  117. package/lib/glb-viewer-A5vSLFZ5.mjs.map +0 -1
  118. package/lib/glb-viewer-B4ILlvw0.mjs +0 -2
  119. package/lib/planner-49YwTdiA.mjs +0 -2
  120. package/lib/planner-t4QH26WW.mjs +0 -44
  121. package/lib/roomle-headless-setup-Cc8EAnVe.mjs +0 -1204
  122. package/lib/roomle-headless-setup-Cc8EAnVe.mjs.map +0 -1
  123. package/lib/roomle-webgpu-renderer-CRGcdahn.mjs.map +0 -1
  124. package/lib/shading-settings-BEMqEGzB.mjs.map +0 -1
  125. package/lib/three.tsl-Q-21y0pO.mjs +0 -2
  126. package/lib/three.webgpu-dtN0kDKB.mjs +0 -3
  127. package/lib/workers-DcgrO-z7.mjs +0 -6
@@ -0,0 +1,612 @@
1
+ import { createRequire as e } from "module";
2
+ //#region packages/headless-core/src/headless-webgpu-queue-polyfill.ts
3
+ var t = (e) => e instanceof Uint8Array ? e : new Uint8Array(e.buffer, e.byteOffset, e.byteLength), n = (e) => {
4
+ if (Array.isArray(e)) return {
5
+ width: e[0] ?? 0,
6
+ height: e[1] ?? 0
7
+ };
8
+ let { width: t, height: n } = e;
9
+ return {
10
+ width: t ?? 0,
11
+ height: n ?? 0
12
+ };
13
+ }, r = (e) => ArrayBuffer.isView(e.data) && typeof e.width == "number" && typeof e.height == "number", i = (e) => typeof e.getContext == "function", a = (e, t, n) => {
14
+ let r = t * 4, i = new Uint8Array(r * n);
15
+ for (let t = 0; t < n; t++) i.set(e.subarray((n - 1 - t) * r, (n - t) * r), t * r);
16
+ return i;
17
+ }, o = (e) => {
18
+ for (let t = 0; t < e.length; t += 4) {
19
+ let n = e[t + 3];
20
+ if (n === 255) continue;
21
+ let r = n / 255;
22
+ e[t] = Math.round(e[t] * r), e[t + 1] = Math.round(e[t + 1] * r), e[t + 2] = Math.round(e[t + 2] * r);
23
+ }
24
+ }, s = (e) => {
25
+ for (let t = 0; t < e.length; t += 4) {
26
+ let n = e[t];
27
+ e[t] = e[t + 2], e[t + 2] = n;
28
+ }
29
+ };
30
+ function c(e, c) {
31
+ let l = e?.queue;
32
+ if (!l || typeof l.writeTexture != "function") return;
33
+ let u = null, d = (e, t) => {
34
+ u ? (u.width !== e && (u.width = e), u.height !== t && (u.height = t)) : u = c.createNativeCanvas(e, t);
35
+ let n = u.getContext("2d");
36
+ return n?.clearRect(0, 0, e, t), n;
37
+ }, f = (e, n, a) => {
38
+ if (!e || typeof e != "object") return null;
39
+ if (r(e)) return {
40
+ data: t(e.data),
41
+ width: e.width,
42
+ height: e.height
43
+ };
44
+ let o = e, s = (o.width ?? o.videoWidth ?? n) | 0 || 0, l = (o.height ?? o.videoHeight ?? a) | 0 || 0;
45
+ if (s <= 0 || l <= 0) return null;
46
+ if (i(e)) {
47
+ let n = e.getContext("2d");
48
+ if (n) return {
49
+ data: t(n.getImageData(0, 0, s, l).data),
50
+ width: s,
51
+ height: l
52
+ };
53
+ }
54
+ let u = d(s, l);
55
+ return u ? (u.drawImage(c.unwrapImage ? c.unwrapImage(e) : e, 0, 0, s, l), {
56
+ data: t(u.getImageData(0, 0, s, l).data),
57
+ width: s,
58
+ height: l
59
+ }) : null;
60
+ };
61
+ l.copyExternalImageToTexture = (e, t, r) => {
62
+ let i = n(r), c = f(e?.source, i.width, i.height);
63
+ if (!c) throw Error("[headless] copyExternalImageToTexture: could not read pixels from source. Expected ImageData, a canvas exposing getContext('2d'), or a drawable image.");
64
+ let { width: u, height: d } = c, p = Math.min(u, i.width || u), m = Math.min(d, i.height || d), h = c.data, g = !1;
65
+ e?.flipY && (h = a(h, u, d), g = !0);
66
+ let _ = t?.premultipliedAlpha === !0, v = t?.texture?.format, y = typeof v == "string" && v.startsWith("bgra");
67
+ (_ || y) && (g ||= (h = new Uint8Array(h), !0), _ && o(h), y && s(h)), l.writeTexture({
68
+ texture: t.texture,
69
+ mipLevel: t.mipLevel ?? 0,
70
+ origin: t.origin ?? {
71
+ x: 0,
72
+ y: 0,
73
+ z: 0
74
+ },
75
+ aspect: t.aspect ?? "all"
76
+ }, h, {
77
+ offset: 0,
78
+ bytesPerRow: u * 4,
79
+ rowsPerImage: d
80
+ }, {
81
+ width: p,
82
+ height: m,
83
+ depthOrArrayLayers: 1
84
+ });
85
+ };
86
+ }
87
+ //#endregion
88
+ //#region packages/headless-core/src/setup-environment.ts
89
+ var l = await import("@napi-rs/canvas").catch(() => null), u = await import("happy-dom").catch(() => null);
90
+ if (!l) throw Error("[headless] @napi-rs/canvas is required for headless setup. Install it (it is an optionalDependency of @roomle/web-sdk)");
91
+ if (!u) throw Error("[headless] happy-dom is required for headless setup. Install it (it is an optionalDependency of @roomle/web-sdk)");
92
+ var { createCanvas: d, Image: f, ImageData: p } = l, { GlobalWindow: m, PropertySymbol: h } = u, g = [
93
+ "fetch",
94
+ "Response",
95
+ "Request",
96
+ "Headers",
97
+ "AbortController",
98
+ "AbortSignal",
99
+ "ReadableStream",
100
+ "WritableStream",
101
+ "TransformStream",
102
+ "FormData",
103
+ "URL",
104
+ "URLSearchParams",
105
+ "Blob",
106
+ "File",
107
+ "constructor",
108
+ "undefined",
109
+ "NaN",
110
+ "global",
111
+ "globalThis"
112
+ ], _ = class {
113
+ static #e = null;
114
+ static get isRegistered() {
115
+ return this.#e !== null;
116
+ }
117
+ static register(e) {
118
+ if (this.#e !== null) throw Error("Failed to register. Happy DOM has already been globally registered.");
119
+ let t = new m({
120
+ ...e,
121
+ console: globalThis.console
122
+ });
123
+ this.#e = {};
124
+ let n = Object.getOwnPropertyDescriptors(t);
125
+ for (let e of Object.keys(n)) if (!g.includes(e)) {
126
+ let r = n[e], i = Object.getOwnPropertyDescriptor(globalThis, e);
127
+ (i?.value === void 0 || i?.value !== r?.value) && (this.#e[e] = i || null, r?.value === t && (t[e] = globalThis, r.value = globalThis), Object.defineProperty(globalThis, e, {
128
+ ...r,
129
+ configurable: !0
130
+ }));
131
+ }
132
+ let r = Object.getOwnPropertySymbols(t);
133
+ for (let e of r) {
134
+ let n = Object.getOwnPropertyDescriptor(t, e);
135
+ this.#e[e] = null, n.value === t && (t[e] = globalThis, n.value = globalThis), Object.defineProperty(globalThis, e, {
136
+ ...n,
137
+ configurable: !0
138
+ });
139
+ }
140
+ globalThis.document[h.defaultView] = globalThis;
141
+ }
142
+ static async unregister() {
143
+ if (this.#e === null) throw Error("Failed to unregister. Happy DOM has not previously been globally registered.");
144
+ let e = globalThis.happyDOM;
145
+ for (let e of Object.keys(this.#e)) this.#e[e] === null ? delete globalThis[e] : Object.defineProperty(globalThis, e, this.#e[e]);
146
+ this.#e = null, e && await e.close();
147
+ }
148
+ }, v = e(import.meta.url), y = v("fs"), b = v("path"), x = v("url"), S = "";
149
+ try {
150
+ S = b.dirname(x.fileURLToPath(import.meta.url));
151
+ } catch {}
152
+ var C = (e) => {
153
+ if (!S || !e.startsWith("/") || e.startsWith("//")) return null;
154
+ let t = b.join(S, e);
155
+ return y.existsSync(t) ? t : null;
156
+ }, w = globalThis.fetch;
157
+ globalThis.fetch = async (e, t) => {
158
+ let n = typeof e == "string" ? e : e instanceof URL ? e.href : e.url ?? String(e);
159
+ if (n.startsWith("file://")) {
160
+ let e = y.readFileSync(x.fileURLToPath(n));
161
+ return new Response(e, {
162
+ status: 200,
163
+ headers: { "Content-Type": "application/octet-stream" }
164
+ });
165
+ }
166
+ if (n.startsWith("/") && !n.startsWith("//")) {
167
+ let e = C(n);
168
+ return e ? new Response(y.readFileSync(e), {
169
+ status: 200,
170
+ headers: { "Content-Type": "application/octet-stream" }
171
+ }) : (console.warn(`[headless] fetch: root-relative asset not found: ${n} (bundle dir: ${S || "unknown"})`), new Response(null, {
172
+ status: 404,
173
+ statusText: "Not Found"
174
+ }));
175
+ }
176
+ return w.call(void 0, e, t);
177
+ };
178
+ var T = globalThis.Request;
179
+ T && (globalThis.Request = new Proxy(T, {
180
+ construct(e, [t, n]) {
181
+ if (typeof t == "string" && t.startsWith("/") && !t.startsWith("//")) {
182
+ let e = C(t) ?? b.join(S || "/tmp", t);
183
+ t = x.pathToFileURL(e).href;
184
+ }
185
+ return Reflect.construct(e, n === void 0 ? [t] : [t, n], e);
186
+ },
187
+ get(e, t) {
188
+ return e[t];
189
+ }
190
+ })), _.register(), globalThis.requestAnimationFrame = (e) => setTimeout(() => e(performance.now()), 16.666666666666668), globalThis.cancelAnimationFrame = (e) => clearTimeout(e), globalThis.ImageData === void 0 && (globalThis.ImageData = p), globalThis.FileReader = class {
191
+ constructor() {
192
+ this.result = null, this.error = null, this.readyState = 0, this.onload = null, this.onloadend = null, this.onerror = null;
193
+ }
194
+ readAsArrayBuffer(e) {
195
+ this.readyState = 1, e.arrayBuffer().then((e) => {
196
+ this.result = e, this.readyState = 2;
197
+ let t = { target: this };
198
+ this.onload?.(t), this.onloadend?.(t);
199
+ }, (e) => {
200
+ this.error = e, this.readyState = 2;
201
+ let t = { target: this };
202
+ this.onerror?.(t), this.onloadend?.(t);
203
+ });
204
+ }
205
+ readAsDataURL(e) {
206
+ this.readyState = 1, e.arrayBuffer().then((t) => {
207
+ let n = Buffer.from(t).toString("base64");
208
+ this.result = `data:${e.type || "application/octet-stream"};base64,${n}`, this.readyState = 2;
209
+ let r = { target: this };
210
+ this.onload?.(r), this.onloadend?.(r);
211
+ }, (e) => {
212
+ this.error = e, this.readyState = 2;
213
+ let t = { target: this };
214
+ this.onerror?.(t), this.onloadend?.(t);
215
+ });
216
+ }
217
+ readAsText(e) {
218
+ this.readyState = 1, e.text().then((e) => {
219
+ this.result = e, this.readyState = 2;
220
+ let t = { target: this };
221
+ this.onload?.(t), this.onloadend?.(t);
222
+ }, (e) => {
223
+ this.error = e, this.readyState = 2;
224
+ let t = { target: this };
225
+ this.onerror?.(t), this.onloadend?.(t);
226
+ });
227
+ }
228
+ abort() {}
229
+ };
230
+ var E = Symbol("napiImage"), D = document.createElement.bind(document), O = document.createElementNS.bind(document), k = (e) => {
231
+ let t = e.drawImage.bind(e);
232
+ return e.drawImage = (e, ...n) => t(e?.[E] ?? e, ...n), e;
233
+ }, A = null, j = () => A, M = 8192, N = 2147483647, P = (e) => {
234
+ let t = e.limits, n = {};
235
+ for (let e in t) {
236
+ let r = t[e];
237
+ n[e] = r === 0 ? N : r;
238
+ }
239
+ return Object.defineProperty(e, "limits", {
240
+ value: n,
241
+ configurable: !0
242
+ }), () => Object.defineProperty(e, "limits", {
243
+ value: t,
244
+ configurable: !0
245
+ });
246
+ }, F = (e) => {
247
+ let { requiredLimits: t, ...n } = e ?? {};
248
+ return t && Object.keys(t).length > 0 ? { ...e } : n;
249
+ }, I = (e, t) => {
250
+ let n = e.limits?.maxTextureDimension2D;
251
+ typeof n == "number" && n > 0 ? A = n : typeof t == "number" && (A = t);
252
+ }, L = (e) => {
253
+ let t = e.requestDevice.bind(e), n = e.limits?.maxTextureDimension2D, r = typeof n == "number" && n > M, i = (n) => {
254
+ if (!r) return t(n);
255
+ let i = P(e);
256
+ try {
257
+ return t(n);
258
+ } finally {
259
+ i();
260
+ }
261
+ };
262
+ e.requestDevice = async (e) => {
263
+ let t = await i(r ? {
264
+ ...e,
265
+ requiredLimits: {
266
+ ...e?.requiredLimits ?? {},
267
+ maxTextureDimension2D: n
268
+ }
269
+ } : F(e));
270
+ if (!t) throw Error("[headless] WebGPU adapter returned no device (adapter already invalid)");
271
+ return I(t, n), c(t, {
272
+ createNativeCanvas: d,
273
+ unwrapImage: (e) => e?.[E] ?? e
274
+ }), t;
275
+ };
276
+ }, R = (e) => {
277
+ let t = e.requestAdapter.bind(e);
278
+ e.requestAdapter = async (e) => {
279
+ let n = { ...e };
280
+ n.powerPreference ||= "high-performance";
281
+ let r = await t(n);
282
+ return r?.info && console.log(`[headless] WebGPU adapter: ${r.info.vendor ?? "?"} ${r.info.device ?? ""} (${r.info.description ?? ""})`), r && typeof r.requestDevice == "function" && L(r), r;
283
+ };
284
+ }, z = (e) => {
285
+ let t = globalThis.navigator;
286
+ if (!t || typeof t != "object") {
287
+ Object.defineProperty(globalThis, "navigator", {
288
+ value: { gpu: e },
289
+ configurable: !0,
290
+ writable: !0
291
+ });
292
+ return;
293
+ }
294
+ try {
295
+ t.gpu = e;
296
+ } catch {
297
+ Object.defineProperty(t, "gpu", {
298
+ value: e,
299
+ configurable: !0,
300
+ writable: !0
301
+ });
302
+ }
303
+ }, B = async (e) => {
304
+ try {
305
+ let t = (await e.requestAdapter({ powerPreference: "high-performance" }))?.limits?.maxTextureDimension2D;
306
+ typeof t == "number" && t > 0 && A == null && (A = t);
307
+ } catch (e) {
308
+ console.log("[headless] adapter texture-limit probe failed", e);
309
+ }
310
+ }, V = null;
311
+ try {
312
+ let e = await import("bun-webgpu");
313
+ V = e.createGPUInstance(), e.globals(), V.getPreferredCanvasFormat = () => "rgba8unorm", typeof V.requestAdapter == "function" && R(V), z(V), console.log("[headless] Using bun-webgpu (Dawn FFI) for real WebGPU rendering"), await B(V);
314
+ } catch (e) {
315
+ console.log("[headless] bun-webgpu not available, WebGPU disabled", e);
316
+ }
317
+ var H = 1, U = 16, W = 8, G = 1, K = 1, q = 256, J = 256 * 1024 * 1024, Y = "\nstruct VSOut {\n @builtin(position) pos: vec4f,\n @location(0) uv: vec2f,\n};\n\n@vertex\nfn vs(@builtin(vertex_index) vertexIndex: u32) -> VSOut {\n var corners = array<vec2f, 3>(\n vec2f(0.0, 0.0),\n vec2f(2.0, 0.0),\n vec2f(0.0, 2.0)\n );\n let xy = corners[vertexIndex];\n var out: VSOut;\n out.pos = vec4f(xy * 2.0 - 1.0, 0.0, 1.0);\n // Clip-space y is up, texture v is down, flip v so the output keeps the\n // source orientation (row 0 = top), matching the direct readback path.\n out.uv = vec2f(xy.x, 1.0 - xy.y);\n return out;\n}\n\n@group(0) @binding(0) var srcTex: texture_2d<f32>;\n@group(0) @binding(1) var srcSampler: sampler;\n\n@fragment\nfn fs(in: VSOut) -> @location(0) vec4f {\n return textureSample(srcTex, srcSampler, in.uv);\n}\n", X = (e) => {
318
+ let t = null, n = "bgra8unorm", r = 0, i = null, a = 0, o = 0, s = null, c = null, l = null, u = null, d = 0, f = 0, p = null, m = 0, h = !1, g = () => {
319
+ if (!t) throw Error("[headless] WebGPU canvas context has no device");
320
+ return t;
321
+ }, _ = (e) => {
322
+ try {
323
+ e.destroy();
324
+ } catch {
325
+ console.error("[webgpu]: Failed to destroy texture image");
326
+ }
327
+ }, v = () => {
328
+ if (!t) return null;
329
+ let s = t, c = Math.max(1, e.width | 0), l = Math.max(1, e.height | 0);
330
+ if (i && a === c && o === l) return i;
331
+ i && _(i), a = c, o = l;
332
+ let u = (r || 0) | 21;
333
+ return i = s.createTexture({
334
+ size: {
335
+ width: c,
336
+ height: l,
337
+ depthOrArrayLayers: 1
338
+ },
339
+ format: n,
340
+ usage: u
341
+ }), i;
342
+ }, y = (e) => {
343
+ try {
344
+ e.destroy();
345
+ } catch {
346
+ console.error("[webgpu]: Failed to destroy staging buffer");
347
+ }
348
+ }, b = (e) => g().createBuffer({
349
+ size: e,
350
+ usage: W | G
351
+ }), x = (e) => {
352
+ if (h) {
353
+ let t = b(e);
354
+ return {
355
+ buffer: t,
356
+ release: () => y(t)
357
+ };
358
+ }
359
+ return (!p || m !== e) && (p && y(p), p = b(e), m = e), h = !0, {
360
+ buffer: p,
361
+ release: () => {
362
+ h = !1;
363
+ }
364
+ };
365
+ }, S = (e) => {
366
+ for (let t = 0; t < e.length; t += 4) {
367
+ let n = e[t];
368
+ e[t] = e[t + 2], e[t + 2] = n;
369
+ }
370
+ }, C = async (e, t, r) => {
371
+ let i = g(), a = t * 4, o = Math.ceil(a / q) * q, s = Math.max(1, Math.floor(J * .95 / o)), { buffer: c, release: l } = x(o * Math.min(s, r)), u = new Uint8Array(a * r);
372
+ try {
373
+ for (let n = 0; n < r; n += s) {
374
+ let l = Math.min(s, r - n), d = i.createCommandEncoder();
375
+ d.copyTextureToBuffer({
376
+ texture: e,
377
+ origin: {
378
+ x: 0,
379
+ y: n,
380
+ z: 0
381
+ }
382
+ }, {
383
+ buffer: c,
384
+ bytesPerRow: o,
385
+ rowsPerImage: l
386
+ }, {
387
+ width: t,
388
+ height: l,
389
+ depthOrArrayLayers: 1
390
+ }), i.queue.submit([d.finish()]), await c.mapAsync(K);
391
+ let f = new Uint8Array(c.getMappedRange());
392
+ for (let e = 0; e < l; e++) u.set(f.subarray(e * o, e * o + a), (n + e) * a);
393
+ c.unmap();
394
+ }
395
+ } catch (e) {
396
+ return console.warn("[headless] WebGPU readback failed", e), null;
397
+ } finally {
398
+ l();
399
+ }
400
+ return n === "bgra8unorm" && S(u), u;
401
+ }, w = async () => {
402
+ if (!t || !i) return;
403
+ let e = await C(i, a, o);
404
+ e && (s = e);
405
+ }, T = () => {
406
+ if (c && l) return {
407
+ pipeline: c,
408
+ sampler: l
409
+ };
410
+ let e = g(), t = e.createShaderModule({ code: Y }), r = e.createRenderPipeline({
411
+ layout: "auto",
412
+ vertex: {
413
+ module: t,
414
+ entryPoint: "vs"
415
+ },
416
+ fragment: {
417
+ module: t,
418
+ entryPoint: "fs",
419
+ targets: [{ format: n }]
420
+ },
421
+ primitive: { topology: "triangle-list" }
422
+ }), i = e.createSampler({
423
+ magFilter: "linear",
424
+ minFilter: "linear"
425
+ });
426
+ return c = r, l = i, {
427
+ pipeline: r,
428
+ sampler: i
429
+ };
430
+ }, E = (e, t) => u && d === e && f === t ? u : (u && _(u), d = e, f = t, u = g().createTexture({
431
+ size: {
432
+ width: e,
433
+ height: t,
434
+ depthOrArrayLayers: 1
435
+ },
436
+ format: n,
437
+ usage: U | H
438
+ }), u), D = () => {
439
+ i &&= (_(i), null);
440
+ }, O = () => {
441
+ c = null, l = null, u &&= (_(u), null);
442
+ }, k = () => {
443
+ p && !h && y(p), p = null, m = 0, h = !1;
444
+ }, A = async (e) => {
445
+ let t = await C(e, a, o);
446
+ return t ? {
447
+ data: t,
448
+ width: a,
449
+ height: o
450
+ } : null;
451
+ }, j = async (e, t, n) => {
452
+ let r = g(), { pipeline: i, sampler: a } = T(), o = E(t, n), s = r.createBindGroup({
453
+ layout: i.getBindGroupLayout(0),
454
+ entries: [{
455
+ binding: 0,
456
+ resource: e.createView()
457
+ }, {
458
+ binding: 1,
459
+ resource: a
460
+ }]
461
+ }), c = r.createCommandEncoder(), l = c.beginRenderPass({ colorAttachments: [{
462
+ view: o.createView(),
463
+ loadOp: "clear",
464
+ storeOp: "store",
465
+ clearValue: {
466
+ r: 0,
467
+ g: 0,
468
+ b: 0,
469
+ a: 0
470
+ }
471
+ }] });
472
+ l.setPipeline(i), l.setBindGroup(0, s), l.draw(3), l.end(), r.queue.submit([c.finish()]);
473
+ let u = await C(o, t, n);
474
+ return u ? {
475
+ data: u,
476
+ width: t,
477
+ height: n
478
+ } : null;
479
+ };
480
+ return {
481
+ canvas: e,
482
+ __isHeadlessWebGPUContext: !0,
483
+ configure(e) {
484
+ t = e.device, n = e.format || n, r = e.usage || 0, D(), O(), k();
485
+ },
486
+ unconfigure() {
487
+ D(), O(), k(), t = null;
488
+ },
489
+ getCurrentTexture() {
490
+ return v();
491
+ },
492
+ async flushReadback() {
493
+ return i && await w(), s;
494
+ },
495
+ async readbackScaled(e, n) {
496
+ if (!t || !i) return null;
497
+ let r = i;
498
+ if (e >= a && n >= o) return A(r);
499
+ try {
500
+ return await j(r, e, n);
501
+ } catch (e) {
502
+ return console.warn("[headless] WebGPU scaled readback failed, falling back to full-size readback", e), A(r);
503
+ }
504
+ },
505
+ getCachedPixels() {
506
+ return s;
507
+ },
508
+ getPreferredFormat() {
509
+ return V?.getPreferredCanvasFormat?.() ?? "bgra8unorm";
510
+ }
511
+ };
512
+ }, Z = (e = 300, t = 150) => {
513
+ let n = d(e, t), r = null, i = null, a = new Proxy(n, {
514
+ get(e, t) {
515
+ if (t === "style") return e._style ??= {};
516
+ if (t === "classList") return e._classList ??= {
517
+ add() {},
518
+ remove() {},
519
+ contains() {
520
+ return !1;
521
+ },
522
+ toggle() {}
523
+ };
524
+ if (t === Symbol.toStringTag) return "HTMLCanvasElement";
525
+ if (t === "getContext") return (t, n) => t === "2d" ? (r ||= k(e.getContext("2d", n)), r) : t === "webgl2" || t === "webgl" ? null : t === "webgpu" ? V ? (i ||= X(a), i) : null : e.getContext(t, n);
526
+ if (t === "addEventListener" || t === "removeEventListener") return () => {};
527
+ if (t === "getBoundingClientRect") return () => ({
528
+ x: 0,
529
+ y: 0,
530
+ width: e.width,
531
+ height: e.height,
532
+ top: 0,
533
+ left: 0,
534
+ bottom: e.height,
535
+ right: e.width
536
+ });
537
+ if (t === "toDataURL" && i) {
538
+ let t = i;
539
+ return (n, r) => {
540
+ let i = t.getCachedPixels();
541
+ return i && e.getContext("2d").putImageData(new p(new Uint8ClampedArray(i.buffer), e.width, e.height), 0, 0), e.toDataURL(n, r);
542
+ };
543
+ }
544
+ let n = e[t];
545
+ return typeof n == "function" ? n.bind(e) : n;
546
+ },
547
+ set(e, t, n) {
548
+ return e[t] = n, !0;
549
+ },
550
+ getPrototypeOf() {
551
+ return HTMLCanvasElement.prototype;
552
+ }
553
+ });
554
+ return a;
555
+ }, Q = () => {
556
+ let e = O("http://www.w3.org/1999/xhtml", "img"), t = new f();
557
+ e[E] = t;
558
+ let n = "";
559
+ return Object.defineProperty(e, "src", {
560
+ get() {
561
+ return n;
562
+ },
563
+ set(r) {
564
+ if (n = r, typeof r == "string" && r.startsWith("blob:")) {
565
+ fetch(r).then((e) => e.arrayBuffer()).then((e) => {
566
+ n === r && (t.src = Buffer.from(e));
567
+ }).catch((t) => {
568
+ let n = t instanceof Error ? t : Error(String(t));
569
+ e.dispatchEvent(new ErrorEvent("error", {
570
+ error: n,
571
+ message: n.message
572
+ }));
573
+ });
574
+ return;
575
+ }
576
+ t.src = r;
577
+ },
578
+ configurable: !0
579
+ }), t.onload = () => {
580
+ Object.defineProperty(e, "width", {
581
+ value: t.width,
582
+ writable: !0,
583
+ configurable: !0
584
+ }), Object.defineProperty(e, "height", {
585
+ value: t.height,
586
+ writable: !0,
587
+ configurable: !0
588
+ }), Object.defineProperty(e, "naturalWidth", {
589
+ value: t.naturalWidth,
590
+ configurable: !0
591
+ }), Object.defineProperty(e, "naturalHeight", {
592
+ value: t.naturalHeight,
593
+ configurable: !0
594
+ }), Object.defineProperty(e, "complete", {
595
+ value: !0,
596
+ configurable: !0
597
+ }), e.dispatchEvent(new Event("load"));
598
+ }, t.onerror = (t) => {
599
+ e.dispatchEvent(new ErrorEvent("error", {
600
+ error: t,
601
+ message: t?.message
602
+ }));
603
+ }, e;
604
+ };
605
+ document.createElement = (e, t) => e.toLowerCase() === "canvas" ? Z() : D(e, t), document.createElementNS = (e, t, n) => {
606
+ let r = t.toLowerCase();
607
+ return r === "canvas" ? Z() : r === "img" ? Q() : O(e, t, n);
608
+ };
609
+ //#endregion
610
+ export { j as t };
611
+
612
+ //# sourceMappingURL=roomle-headless-setup-CMHahWyC.mjs.map