@thinkersteps_labs/3d-viewer-react-native 0.0.0-stage → 2.0.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.
Files changed (66) hide show
  1. package/dist/Viewer.d.ts +5 -0
  2. package/dist/Viewer.d.ts.map +1 -0
  3. package/dist/Viewer.js +157 -0
  4. package/dist/Viewer.js.map +1 -0
  5. package/dist/bridge/ar-launcher.d.ts +6 -0
  6. package/dist/bridge/ar-launcher.d.ts.map +1 -0
  7. package/dist/bridge/ar-launcher.js +18 -0
  8. package/dist/bridge/ar-launcher.js.map +1 -0
  9. package/dist/bridge/runtime-bundle.d.ts +2 -0
  10. package/dist/bridge/runtime-bundle.d.ts.map +1 -0
  11. package/dist/bridge/runtime-bundle.js +3 -0
  12. package/dist/bridge/runtime-bundle.js.map +1 -0
  13. package/dist/bridge/runtime-entry.d.ts +2 -0
  14. package/dist/bridge/runtime-entry.d.ts.map +1 -0
  15. package/dist/bridge/runtime-entry.js +616 -0
  16. package/dist/bridge/runtime-entry.js.map +1 -0
  17. package/dist/bridge/types.d.ts +186 -0
  18. package/dist/bridge/types.d.ts.map +1 -0
  19. package/dist/bridge/types.js +2 -0
  20. package/dist/bridge/types.js.map +1 -0
  21. package/dist/hooks/useViewerBridge.d.ts +16 -0
  22. package/dist/hooks/useViewerBridge.d.ts.map +1 -0
  23. package/dist/hooks/useViewerBridge.js +565 -0
  24. package/dist/hooks/useViewerBridge.js.map +1 -0
  25. package/dist/hooks/useViewerGestureLock.d.ts +23 -0
  26. package/dist/hooks/useViewerGestureLock.d.ts.map +1 -0
  27. package/dist/hooks/useViewerGestureLock.js +49 -0
  28. package/dist/hooks/useViewerGestureLock.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +7 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/swatches/JewelryCustomizer.d.ts +16 -0
  34. package/dist/swatches/JewelryCustomizer.d.ts.map +1 -0
  35. package/dist/swatches/JewelryCustomizer.js +36 -0
  36. package/dist/swatches/JewelryCustomizer.js.map +1 -0
  37. package/dist/swatches/MetalSwatches.d.ts +13 -0
  38. package/dist/swatches/MetalSwatches.d.ts.map +1 -0
  39. package/dist/swatches/MetalSwatches.js +81 -0
  40. package/dist/swatches/MetalSwatches.js.map +1 -0
  41. package/dist/swatches/ShapeSelect.d.ts +15 -0
  42. package/dist/swatches/ShapeSelect.d.ts.map +1 -0
  43. package/dist/swatches/ShapeSelect.js +226 -0
  44. package/dist/swatches/ShapeSelect.js.map +1 -0
  45. package/dist/swatches/ShapeSwatches.d.ts +22 -0
  46. package/dist/swatches/ShapeSwatches.d.ts.map +1 -0
  47. package/dist/swatches/ShapeSwatches.js +144 -0
  48. package/dist/swatches/ShapeSwatches.js.map +1 -0
  49. package/dist/swatches/StoneSwatches.d.ts +13 -0
  50. package/dist/swatches/StoneSwatches.d.ts.map +1 -0
  51. package/dist/swatches/StoneSwatches.js +81 -0
  52. package/dist/swatches/StoneSwatches.js.map +1 -0
  53. package/dist/swatches/index.d.ts +7 -0
  54. package/dist/swatches/index.d.ts.map +1 -0
  55. package/dist/swatches/index.js +7 -0
  56. package/dist/swatches/index.js.map +1 -0
  57. package/dist/swatches/useJewelryCustomizer.d.ts +33 -0
  58. package/dist/swatches/useJewelryCustomizer.d.ts.map +1 -0
  59. package/dist/swatches/useJewelryCustomizer.js +43 -0
  60. package/dist/swatches/useJewelryCustomizer.js.map +1 -0
  61. package/dist/types.d.ts +103 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +2 -0
  64. package/dist/types.js.map +1 -0
  65. package/package.json +50 -6
  66. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-bundle.js","sourceRoot":"","sources":["../../src/bridge/runtime-bundle.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,0i4zBAA0i4zB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-entry.d.ts","sourceRoot":"","sources":["../../src/bridge/runtime-entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,616 @@
1
+ import { createViewer } from '@thinkersteps_labs/3d-viewer-core';
2
+ function postToRN(msg) {
3
+ const json = JSON.stringify(msg);
4
+ if (typeof window !== 'undefined' && window.ReactNativeWebView?.postMessage) {
5
+ window.ReactNativeWebView.postMessage(json);
6
+ }
7
+ else if (typeof window !== 'undefined' && window.parent && window.parent !== window) {
8
+ window.parent.postMessage(json, '*');
9
+ }
10
+ }
11
+ function init() {
12
+ const container = document.getElementById('viewer-container');
13
+ if (!container) {
14
+ console.error('[Viewer Runtime] #viewer-container not found');
15
+ return;
16
+ }
17
+ let viewer = null;
18
+ try {
19
+ const urlParams = typeof window !== 'undefined' && window.location?.search ? new URLSearchParams(window.location.search) : null;
20
+ const initialConfig = {};
21
+ if (urlParams) {
22
+ if (urlParams.get('diamondMode'))
23
+ initialConfig.diamondMode = urlParams.get('diamondMode');
24
+ if (urlParams.get('diamondQuality'))
25
+ initialConfig.diamondQuality = urlParams.get('diamondQuality');
26
+ if (urlParams.get('minZoom'))
27
+ initialConfig.minZoom = parseFloat(urlParams.get('minZoom'));
28
+ if (urlParams.get('maxZoom'))
29
+ initialConfig.maxZoom = parseFloat(urlParams.get('maxZoom'));
30
+ if (urlParams.get('autoRotateSpeed'))
31
+ initialConfig.autoRotateSpeed = parseFloat(urlParams.get('autoRotateSpeed'));
32
+ }
33
+ viewer = createViewer(container, {
34
+ antialias: true,
35
+ alpha: true,
36
+ background: 'transparent',
37
+ ...initialConfig,
38
+ });
39
+ window.__viewer = viewer;
40
+ console.log('[Viewer Runtime] 3D engine initialized successfully');
41
+ viewer.on('loading', (e) => {
42
+ postToRN({ type: 'VIEWER_PROGRESS', progress: e.progress });
43
+ });
44
+ viewer.on('loaded', (e) => {
45
+ console.log('[Viewer Runtime] Model loaded into 3D scene:', e.parts?.length ?? 0, 'parts');
46
+ postToRN({
47
+ type: 'VIEWER_LOADED',
48
+ parts: e.parts || viewer.getParts?.() || [],
49
+ materials: e.materials || viewer.getMaterials?.() || [],
50
+ });
51
+ });
52
+ viewer.on('partSelected', (e) => {
53
+ postToRN({
54
+ type: 'PART_SELECTED',
55
+ meshId: e.meshId,
56
+ partId: e.partId,
57
+ partType: e.type || e.partType,
58
+ slotIndex: e.slotIndex,
59
+ slotId: e.slotId,
60
+ materialName: e.materialName,
61
+ });
62
+ });
63
+ viewer.on('change', (state) => {
64
+ postToRN({
65
+ type: 'VIEWER_CHANGE',
66
+ state,
67
+ });
68
+ });
69
+ viewer.on('error', (err) => {
70
+ console.error('[Viewer Runtime] Viewer error:', err);
71
+ postToRN({
72
+ type: 'VIEWER_ERROR',
73
+ code: 'MODEL_LOAD_FAILED',
74
+ message: err?.message || String(err),
75
+ });
76
+ });
77
+ }
78
+ catch (err) {
79
+ console.error('[Viewer Runtime] WebGL init failure:', err);
80
+ postToRN({
81
+ type: 'VIEWER_ERROR',
82
+ code: 'WEBGL_UNSUPPORTED',
83
+ message: err?.message || 'Failed to initialize 3D viewer WebGL canvas',
84
+ });
85
+ return;
86
+ }
87
+ // Pointer interactions
88
+ container.addEventListener('pointerdown', () => {
89
+ postToRN({ type: 'INTERACTION_START' });
90
+ });
91
+ window.addEventListener('pointerup', () => {
92
+ postToRN({ type: 'INTERACTION_END' });
93
+ });
94
+ container.addEventListener('touchstart', () => {
95
+ postToRN({ type: 'INTERACTION_START' });
96
+ }, { passive: true });
97
+ window.addEventListener('touchend', () => {
98
+ postToRN({ type: 'INTERACTION_END' });
99
+ }, { passive: true });
100
+ // Lifecycle
101
+ window.addEventListener('pagehide', () => {
102
+ if (viewer && typeof viewer.dispose === 'function') {
103
+ try {
104
+ viewer.dispose();
105
+ }
106
+ catch { }
107
+ }
108
+ });
109
+ window.addEventListener('beforeunload', () => {
110
+ if (viewer && typeof viewer.dispose === 'function') {
111
+ try {
112
+ viewer.dispose();
113
+ }
114
+ catch { }
115
+ }
116
+ });
117
+ document.addEventListener('visibilitychange', () => {
118
+ if (document.hidden && viewer && typeof viewer.stopRotation === 'function') {
119
+ try {
120
+ viewer.stopRotation();
121
+ }
122
+ catch { }
123
+ }
124
+ });
125
+ let readyAcked = false;
126
+ let activeMetalEnvUrl = undefined;
127
+ let activeGemEnvUrl = undefined;
128
+ let gemEnvPromise = null;
129
+ let metalEnvPromise = null;
130
+ function resolveEnvUrl(url) {
131
+ if (!url || typeof url !== 'string')
132
+ return undefined;
133
+ if (url.startsWith('/') && typeof window !== 'undefined') {
134
+ try {
135
+ if (window.parent && window.parent.location?.origin && window.parent.location.origin !== 'null') {
136
+ return window.parent.location.origin + url;
137
+ }
138
+ else if (window.location.origin && window.location.origin !== 'null') {
139
+ return window.location.origin + url;
140
+ }
141
+ }
142
+ catch { }
143
+ }
144
+ return url;
145
+ }
146
+ let cameraAnimationId = null;
147
+ function computePresetVectors(preset, center = [0, 0, 0], distance = 5) {
148
+ const [cx, cy, cz] = center;
149
+ switch (preset) {
150
+ case 'crown':
151
+ return {
152
+ position: [cx, cy + distance, cz + 0.001],
153
+ target: [cx, cy, cz],
154
+ };
155
+ case 'profile':
156
+ return {
157
+ position: [cx + distance, cy, cz],
158
+ target: [cx, cy, cz],
159
+ };
160
+ case 'macro': {
161
+ const macroDist = distance * 0.45;
162
+ const angle = Math.PI / 4;
163
+ return {
164
+ position: [
165
+ cx + macroDist * Math.cos(angle),
166
+ cy + macroDist * 0.7,
167
+ cz + macroDist * Math.sin(angle),
168
+ ],
169
+ target: [cx, cy + distance * 0.05, cz],
170
+ };
171
+ }
172
+ case 'hero':
173
+ default: {
174
+ const angle = Math.PI / 4;
175
+ const yDist = distance * 0.6;
176
+ const rDist = distance * 0.8;
177
+ return {
178
+ position: [
179
+ cx + rDist * Math.sin(angle),
180
+ cy + yDist,
181
+ cz + rDist * Math.cos(angle),
182
+ ],
183
+ target: [cx, cy, cz],
184
+ };
185
+ }
186
+ }
187
+ }
188
+ function transitionToPreset(preset, duration = 600) {
189
+ if (!viewer)
190
+ return;
191
+ if (cameraAnimationId !== null) {
192
+ cancelAnimationFrame(cameraAnimationId);
193
+ cameraAnimationId = null;
194
+ }
195
+ const state = viewer.getState?.();
196
+ const currentPos = state?.cameraState?.position || [0, 2, 5];
197
+ const currentTarget = state?.cameraState?.target || [0, 0, 0];
198
+ const dx = currentPos[0] - currentTarget[0];
199
+ const dy = currentPos[1] - currentTarget[1];
200
+ const dz = currentPos[2] - currentTarget[2];
201
+ const distance = Math.hypot(dx, dy, dz) || 4;
202
+ const destination = computePresetVectors(preset, currentTarget, distance);
203
+ const startTime = performance.now();
204
+ const animate = (now) => {
205
+ const elapsed = now - startTime;
206
+ const progress = Math.min(elapsed / duration, 1);
207
+ const eased = 1 - Math.pow(1 - progress, 3);
208
+ const interpPos = [
209
+ currentPos[0] + (destination.position[0] - currentPos[0]) * eased,
210
+ currentPos[1] + (destination.position[1] - currentPos[1]) * eased,
211
+ currentPos[2] + (destination.position[2] - currentPos[2]) * eased,
212
+ ];
213
+ const interpTarget = [
214
+ currentTarget[0] + (destination.target[0] - currentTarget[0]) * eased,
215
+ currentTarget[1] + (destination.target[1] - currentTarget[1]) * eased,
216
+ currentTarget[2] + (destination.target[2] - currentTarget[2]) * eased,
217
+ ];
218
+ viewer.setCameraPosition?.(interpPos, interpTarget);
219
+ if (progress < 1) {
220
+ cameraAnimationId = requestAnimationFrame(animate);
221
+ }
222
+ else {
223
+ cameraAnimationId = null;
224
+ }
225
+ };
226
+ cameraAnimationId = requestAnimationFrame(animate);
227
+ }
228
+ function resolveModelUrlString(url) {
229
+ if (!url || typeof url !== 'string')
230
+ return url;
231
+ if (url.startsWith('/') && typeof window !== 'undefined') {
232
+ try {
233
+ const origin = window.parent && window.parent.location?.origin && window.parent.location.origin !== 'null'
234
+ ? window.parent.location.origin
235
+ : window.location.origin && window.location.origin !== 'null'
236
+ ? window.location.origin
237
+ : '';
238
+ return origin ? `${origin}${url}` : url;
239
+ }
240
+ catch {
241
+ return url;
242
+ }
243
+ }
244
+ return url;
245
+ }
246
+ function resolveSingleSource(src) {
247
+ if (!src)
248
+ return null;
249
+ if (typeof src === 'string') {
250
+ return { url: resolveModelUrlString(src), format: 'glb' };
251
+ }
252
+ if (typeof src === 'object') {
253
+ const rawUrl = src.url || src.uri;
254
+ return {
255
+ ...src,
256
+ url: resolveModelUrlString(rawUrl),
257
+ format: src.format || 'glb',
258
+ };
259
+ }
260
+ return src;
261
+ }
262
+ async function applyEnvironmentsPostLoad() {
263
+ if (gemEnvPromise || metalEnvPromise) {
264
+ await Promise.allSettled([gemEnvPromise, metalEnvPromise]);
265
+ }
266
+ if (activeGemEnvUrl && viewer.setGemEnvironment) {
267
+ viewer.setGemEnvironment(activeGemEnvUrl).catch(() => { });
268
+ }
269
+ if (activeMetalEnvUrl && viewer.setMetalEnvironment) {
270
+ viewer.setMetalEnvironment(activeMetalEnvUrl).catch(() => { });
271
+ }
272
+ }
273
+ function handleCommand(cmd) {
274
+ if (!cmd || !cmd.type)
275
+ return;
276
+ readyAcked = true;
277
+ switch (cmd.type) {
278
+ case 'PING': {
279
+ postToRN({ type: 'VIEWER_READY' });
280
+ break;
281
+ }
282
+ case 'LOAD_MODEL': {
283
+ if (!viewer)
284
+ return;
285
+ const srcObj = cmd.source;
286
+ if (srcObj && typeof srcObj === 'object' && srcObj.modular) {
287
+ const compMap = {};
288
+ for (const [slot, comp] of Object.entries(srcObj)) {
289
+ if (slot === 'modular')
290
+ continue;
291
+ compMap[slot] = resolveSingleSource(comp);
292
+ }
293
+ console.log('[Viewer Runtime] Loading modular model:', compMap);
294
+ viewer.loadModular(compMap, { preserveCamera: true }).then(applyEnvironmentsPostLoad).catch((err) => {
295
+ console.error('[Viewer Runtime] Failed to load modular model:', err);
296
+ postToRN({
297
+ type: 'VIEWER_ERROR',
298
+ code: 'MODEL_LOAD_FAILED',
299
+ message: err?.message || 'Failed to load modular model',
300
+ });
301
+ });
302
+ break;
303
+ }
304
+ let src = srcObj?.uri || srcObj?.url || (typeof srcObj === 'string' ? srcObj : null);
305
+ console.log('[Viewer Runtime] LOAD_MODEL received:', src);
306
+ if (src) {
307
+ src = resolveModelUrlString(src);
308
+ const sourceInput = (srcObj && typeof srcObj === 'object' && srcObj.format)
309
+ ? { url: src, format: srcObj.format }
310
+ : src;
311
+ console.log('[Viewer Runtime] Loading 3D model from resolved URL:', sourceInput);
312
+ viewer.load(sourceInput).then(applyEnvironmentsPostLoad).catch((err) => {
313
+ console.error('[Viewer Runtime] Failed to load 3D model:', err);
314
+ postToRN({
315
+ type: 'VIEWER_ERROR',
316
+ code: 'MODEL_LOAD_FAILED',
317
+ message: err?.message || 'Failed to load 3D model',
318
+ });
319
+ });
320
+ }
321
+ break;
322
+ }
323
+ case 'LOAD_MODULAR': {
324
+ if (!viewer || !cmd.components)
325
+ return;
326
+ const compMap = {};
327
+ for (const [slot, comp] of Object.entries(cmd.components)) {
328
+ compMap[slot] = resolveSingleSource(comp);
329
+ }
330
+ console.log('[Viewer Runtime] LOAD_MODULAR received:', compMap);
331
+ viewer.loadModular(compMap, cmd.options || { preserveCamera: true }).then(applyEnvironmentsPostLoad).catch((err) => {
332
+ console.error('[Viewer Runtime] Failed to load modular components:', err);
333
+ postToRN({
334
+ type: 'VIEWER_ERROR',
335
+ code: 'MODEL_LOAD_FAILED',
336
+ message: err?.message || 'Failed to load modular components',
337
+ });
338
+ });
339
+ break;
340
+ }
341
+ case 'LOAD_COMPONENT': {
342
+ if (!viewer || !cmd.slot)
343
+ return;
344
+ const resolvedSrc = resolveSingleSource(cmd.source);
345
+ console.log(`[Viewer Runtime] LOAD_COMPONENT '${cmd.slot}':`, resolvedSrc);
346
+ viewer.loadComponent(cmd.slot, resolvedSrc, cmd.options || { preserveCamera: true }).then(applyEnvironmentsPostLoad).catch((err) => {
347
+ console.error(`[Viewer Runtime] Failed to load component '${cmd.slot}':`, err);
348
+ postToRN({
349
+ type: 'VIEWER_ERROR',
350
+ code: 'MODEL_LOAD_FAILED',
351
+ message: err?.message || `Failed to load component '${cmd.slot}'`,
352
+ });
353
+ });
354
+ break;
355
+ }
356
+ case 'APPLY_CONFIG': {
357
+ if (!viewer || !cmd.config)
358
+ return;
359
+ const cfg = cmd.config;
360
+ // Bind gem environment before metal environment so dedicated gem texture takes precedence
361
+ if (cfg.gemEnvUrl) {
362
+ const url = resolveEnvUrl(cfg.gemEnvUrl);
363
+ if (url && url !== activeGemEnvUrl) {
364
+ activeGemEnvUrl = url;
365
+ gemEnvPromise = viewer.setGemEnvironment?.(url).catch((err) => {
366
+ console.error('[Viewer Runtime] Failed to set gem environment:', err);
367
+ });
368
+ }
369
+ }
370
+ if (cfg.metalEnvUrl) {
371
+ const url = resolveEnvUrl(cfg.metalEnvUrl);
372
+ if (url && url !== activeMetalEnvUrl) {
373
+ activeMetalEnvUrl = url;
374
+ metalEnvPromise = viewer.setMetalEnvironment?.(url).catch((err) => {
375
+ console.error('[Viewer Runtime] Failed to set metal environment:', err);
376
+ });
377
+ }
378
+ }
379
+ if (cfg.metalColor)
380
+ viewer.setMetalColor?.(cfg.metalColor);
381
+ if (cfg.stoneColor)
382
+ viewer.setStoneColor?.(cfg.stoneColor);
383
+ if (cfg.shape) {
384
+ if (typeof viewer.switchShape === 'function') {
385
+ viewer.switchShape(cfg.shape);
386
+ }
387
+ else if (typeof viewer.setShape === 'function') {
388
+ viewer.setShape(cfg.shape);
389
+ }
390
+ }
391
+ if (cfg.quality)
392
+ viewer.setQuality?.(cfg.quality);
393
+ if (cfg.diamondQuality)
394
+ viewer.setDiamondQuality?.(cfg.diamondQuality);
395
+ if (cfg.autoRotate !== undefined) {
396
+ if (cfg.autoRotate)
397
+ viewer.startRotation?.(cfg.autoRotateSpeed);
398
+ else
399
+ viewer.stopRotation?.();
400
+ }
401
+ break;
402
+ }
403
+ case 'SET_METAL': {
404
+ if (cmd.color && viewer)
405
+ viewer.setMetalColor?.(cmd.color);
406
+ break;
407
+ }
408
+ case 'SET_STONE': {
409
+ if (cmd.color && viewer)
410
+ viewer.setStoneColor?.(cmd.color);
411
+ break;
412
+ }
413
+ case 'SET_SHAPE': {
414
+ if (cmd.shape && viewer) {
415
+ if (typeof viewer.switchShape === 'function') {
416
+ viewer.switchShape(cmd.shape);
417
+ }
418
+ else if (typeof viewer.setShape === 'function') {
419
+ viewer.setShape(cmd.shape);
420
+ }
421
+ }
422
+ break;
423
+ }
424
+ case 'SET_MATERIAL_COLOR': {
425
+ if (cmd.slotId && cmd.color && viewer)
426
+ viewer.setMaterialColor?.(cmd.slotId, cmd.color);
427
+ break;
428
+ }
429
+ case 'CLEAR_MATERIAL_COLOR': {
430
+ if (cmd.slotId && viewer)
431
+ viewer.clearMaterialColor?.(cmd.slotId);
432
+ break;
433
+ }
434
+ case 'SET_PART_COLOR': {
435
+ if (cmd.partId && cmd.color && viewer)
436
+ viewer.setPartColor?.(cmd.partId, cmd.color, cmd.slotIndex);
437
+ break;
438
+ }
439
+ case 'CLEAR_PART_COLOR': {
440
+ if (cmd.partId && viewer)
441
+ viewer.clearPartColor?.(cmd.partId, cmd.slotIndex);
442
+ break;
443
+ }
444
+ case 'SET_AUTO_ROTATE': {
445
+ if (viewer) {
446
+ if (cmd.enabled)
447
+ viewer.startRotation?.(cmd.speed);
448
+ else
449
+ viewer.stopRotation?.();
450
+ }
451
+ break;
452
+ }
453
+ case 'SET_DIAMOND_QUALITY': {
454
+ if (cmd.quality && viewer)
455
+ viewer.setDiamondQuality?.(cmd.quality);
456
+ break;
457
+ }
458
+ case 'FIT_TO_SCENE': {
459
+ if (viewer)
460
+ viewer.fitToScene?.();
461
+ break;
462
+ }
463
+ case 'UNLOAD': {
464
+ if (viewer)
465
+ viewer.unload?.();
466
+ break;
467
+ }
468
+ case 'SET_PART_TYPE': {
469
+ if (cmd.meshId && cmd.partType && viewer) {
470
+ viewer.setPartType?.(cmd.meshId, cmd.partType);
471
+ }
472
+ break;
473
+ }
474
+ case 'GET_PARTS': {
475
+ const parts = viewer?.getParts?.() || [];
476
+ postToRN({ type: 'PARTS_READY', reqId: cmd.reqId, parts });
477
+ break;
478
+ }
479
+ case 'GET_MATERIALS': {
480
+ const materials = viewer?.getMaterials?.() || [];
481
+ postToRN({ type: 'MATERIALS_READY', reqId: cmd.reqId, materials });
482
+ break;
483
+ }
484
+ case 'SET_QUALITY': {
485
+ if (cmd.quality && viewer)
486
+ viewer.setQuality?.(cmd.quality);
487
+ break;
488
+ }
489
+ case 'SET_METAL_ENVIRONMENT': {
490
+ const url = resolveEnvUrl(cmd.url);
491
+ if (url && viewer) {
492
+ activeMetalEnvUrl = url;
493
+ metalEnvPromise = viewer.setMetalEnvironment?.(url).catch((err) => {
494
+ console.error('[Viewer Runtime] Failed to set metal environment:', err);
495
+ });
496
+ }
497
+ break;
498
+ }
499
+ case 'SET_GEM_ENVIRONMENT': {
500
+ const url = resolveEnvUrl(cmd.url);
501
+ if (url && viewer) {
502
+ activeGemEnvUrl = url;
503
+ gemEnvPromise = viewer.setGemEnvironment?.(url).catch((err) => {
504
+ console.error('[Viewer Runtime] Failed to set gem environment:', err);
505
+ });
506
+ }
507
+ break;
508
+ }
509
+ case 'RESET_CAMERA': {
510
+ if (cameraAnimationId !== null) {
511
+ cancelAnimationFrame(cameraAnimationId);
512
+ cameraAnimationId = null;
513
+ }
514
+ if (viewer)
515
+ viewer.resetCamera?.();
516
+ break;
517
+ }
518
+ case 'SET_CAMERA_PRESET': {
519
+ if (cmd.preset) {
520
+ transitionToPreset(cmd.preset);
521
+ }
522
+ break;
523
+ }
524
+ case 'SET_CAMERA_POSITION': {
525
+ if (cameraAnimationId !== null) {
526
+ cancelAnimationFrame(cameraAnimationId);
527
+ cameraAnimationId = null;
528
+ }
529
+ if (viewer && cmd.position && cmd.target) {
530
+ viewer.setCameraPosition?.(cmd.position, cmd.target);
531
+ }
532
+ break;
533
+ }
534
+ case 'CLEAR_OVERRIDES': {
535
+ if (viewer)
536
+ viewer.clearOverrides?.();
537
+ break;
538
+ }
539
+ case 'GET_STATE': {
540
+ if (viewer && typeof viewer.getState === 'function') {
541
+ const state = viewer.getState();
542
+ postToRN({ type: 'STATE_READY', reqId: cmd.reqId, state });
543
+ }
544
+ break;
545
+ }
546
+ case 'SET_STATE': {
547
+ if (viewer && cmd.state)
548
+ viewer.setState?.(cmd.state);
549
+ break;
550
+ }
551
+ case 'CAPTURE_SNAPSHOT': {
552
+ if (viewer && typeof viewer.captureSnapshot === 'function') {
553
+ viewer.captureSnapshot(cmd.options)
554
+ .then((dataUrl) => {
555
+ postToRN({ type: 'SNAPSHOT_READY', reqId: cmd.reqId, dataUrl });
556
+ })
557
+ .catch((err) => {
558
+ postToRN({
559
+ type: 'VIEWER_ERROR',
560
+ code: 'SNAPSHOT_FAILED',
561
+ message: err?.message || 'Snapshot capture failed',
562
+ reqId: cmd.reqId,
563
+ });
564
+ });
565
+ }
566
+ break;
567
+ }
568
+ case 'EXPORT_AR_PAYLOAD': {
569
+ if (cmd.platform === 'ios' && cmd.usdzUrl) {
570
+ const anchor = document.getElementById('ar-anchor');
571
+ if (anchor) {
572
+ anchor.setAttribute('href', cmd.usdzUrl);
573
+ anchor.click();
574
+ postToRN({
575
+ type: 'AR_PAYLOAD_READY',
576
+ reqId: cmd.reqId,
577
+ url: cmd.usdzUrl,
578
+ launchedInWebView: true,
579
+ });
580
+ }
581
+ }
582
+ break;
583
+ }
584
+ }
585
+ }
586
+ function onMessageReceived(e) {
587
+ let cmd;
588
+ try {
589
+ cmd = typeof e.data === 'string' ? JSON.parse(e.data) : e.data;
590
+ }
591
+ catch {
592
+ return;
593
+ }
594
+ handleCommand(cmd);
595
+ }
596
+ window.addEventListener('message', onMessageReceived);
597
+ document.addEventListener('message', onMessageReceived);
598
+ // Notify React Native that runtime is fully mounted and ready
599
+ postToRN({ type: 'VIEWER_READY' });
600
+ // Repeat handshake until acknowledged by parent to avoid ready-state race conditions
601
+ const readyInterval = setInterval(() => {
602
+ if (readyAcked) {
603
+ clearInterval(readyInterval);
604
+ }
605
+ else {
606
+ postToRN({ type: 'VIEWER_READY' });
607
+ }
608
+ }, 250);
609
+ }
610
+ if (document.readyState === 'loading') {
611
+ document.addEventListener('DOMContentLoaded', init);
612
+ }
613
+ else {
614
+ init();
615
+ }
616
+ //# sourceMappingURL=runtime-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-entry.js","sourceRoot":"","sources":["../../src/bridge/runtime-entry.ts"],"names":[],"mappings":"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"}