@neurodyn/react-ar 0.0.11 → 0.0.13

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/index.d.ts CHANGED
@@ -204,740 +204,36 @@ declare type AnyMapping = Mapping | CubeTextureMapping;
204
204
  */
205
205
  declare type AnyPixelFormat = PixelFormat | DepthTexturePixelFormat | CompressedPixelFormat;
206
206
 
207
- /**
208
- * Generated by Kubb (https://kubb.dev/).
209
- * Do not edit manually.
210
- */
211
- declare type ApiCat = {
212
- /**
213
- * @description Whether any objects are currently assigned to this category.
214
- * @type boolean | undefined
215
- */
216
- hasObjs?: boolean;
217
- /**
218
- * @description Category id.
219
- * @type string | undefined, int64
220
- */
221
- id?: string;
222
- /**
223
- * @description Category display name, localized to the requested language.
224
- * @type string | undefined
225
- */
226
- name?: string;
227
- /**
228
- * @description URL of the category\'s preview image.
229
- * @type string | undefined
230
- */
231
- previewUrl?: string;
232
- /**
233
- * @description Child categories nested under this one.
234
- * @type array | undefined
235
- */
236
- subs?: ApiCat[];
237
- };
238
-
239
- declare type ApiDraftInfo = {
240
- /**
241
- * @type object | undefined
242
- */
243
- moderation?: ApiModerationInfo;
244
- /**
245
- * @description Pending draft\'s version number; unset when no draft exists.
246
- * @type integer | undefined, int32
247
- */
248
- version?: number;
249
- };
250
-
251
- /**
252
- * Generated by Kubb (https://kubb.dev/).
253
- * Do not edit manually.
254
- */
255
- declare type ApiFile = {
256
- /**
257
- * @description File extension (without dot), e.g. \"glb\", \"usdz\", \"jpg\".
258
- * @type string | undefined
259
- */
260
- ext?: string;
261
- /**
262
- * @description Image orientation (\"horizontal\" or \"vertical\"), when set.
263
- * @type string | undefined
264
- */
265
- imgOrientation?: string;
266
- /**
267
- * @description Whether this file can be cloned by users other than its owner (moderator-settable via obj.modrapi.SetFileClonable); see CloneFile.
268
- * @type boolean | undefined
269
- */
270
- isClonable?: boolean;
271
- /**
272
- * @description Original filename supplied by the uploader.
273
- * @type string | undefined
274
- */
275
- realName?: string;
276
- /**
277
- * @description UUID of the original file this one is a clone of, when applicable.
278
- * @type string | undefined
279
- */
280
- realUuid?: string;
281
- /**
282
- * @description Client-supplied, per-object-unique identifier for model files.
283
- * @type string | undefined
284
- */
285
- slug?: string;
286
- /**
287
- * @description Sub-resolution variant URLs, keyed by subresolution key; present only when generated.
288
- * @type object | undefined
289
- */
290
- subRes?: {
291
- [key: string]: string;
292
- };
293
- /**
294
- * @description AttachType identifying the file\'s role (model, cover, colPreview, tex, etc.).
295
- * @type string | undefined
296
- */
297
- type?: string;
298
- /**
299
- * @description Public URL of the file in object storage.
300
- * @type string | undefined
301
- */
302
- url?: string;
303
- /**
304
- * @description File UUID.
305
- * @type string | undefined
306
- */
307
- uuid?: string;
308
- };
309
-
310
207
  /**
311
208
  * VZ-108: the go-backend `account` / `user` / `auth` / `file` services are
312
209
  * archived and no longer published in the gateway's OpenAPI config, so
313
210
  * `@vizbl/api/account` stopped being generated. This module keeps the old
314
211
  * account wire shape the apps are built around (`ApiUserAccount`, snake_case
315
- * flags, `config` as a JSON string) and reads it from the node gate:
316
- *
317
- * - own profile → `GET /user/me` (+ `/file/stored/read` for the images);
318
- * - someone else's profile → `/legacy/account/Fetch` (JWT) or the public
319
- * `/legacy/account/Search`;
320
- * - register / deletion → `/legacy/account/Register|RequestDeletion` (the
321
- * same handlers the old `/v1/account/*` paths are rewritten to; Register is
322
- * the only one that still takes a display `name`).
323
- *
324
- * All calls go through the node client, so a custom `baseURL` must be the
325
- * node API base, not the legacy `/v1` one.
326
- */
327
- declare type ApiFile_2 = {
328
- ext?: string;
329
- realName?: string;
330
- type?: string;
331
- url?: string;
332
- uuid?: string;
333
- };
334
-
335
- declare type ApiFolder = {
336
- /**
337
- * @description Objects (and, for collections, subfolders wrapped as Object.folder) contained in the folder; only Uuid is required as input.
338
- * @type array | undefined
339
- */
340
- items?: ApiObject[];
341
- /**
342
- * @description Folder display name.
343
- * @type string | undefined
344
- */
345
- name?: string;
346
- /**
347
- * @description UUID of the parent collection folder; empty for root folders.
348
- * @type string | undefined
349
- */
350
- parentId?: string;
351
- /**
352
- * @description Folder tinuuid (shortened UUID encoding).
353
- * @type string | undefined
354
- */
355
- tinuuid?: string;
356
- /**
357
- * @description Folder kind: \"collection\", \"selection\", or \"kit\" (see dict.FolderType).
358
- * @type string | undefined
359
- */
360
- type?: string;
361
- /**
362
- * @description Folder UUID.
363
- * @type string | undefined
364
- */
365
- uuid?: string;
366
- };
367
-
368
- declare type ApiMatCollection = {
369
- /**
370
- * @description Short hash identifier for the collection (CRC32 of its UUID), used as a compact client-facing id.
371
- * @type string | undefined
372
- */
373
- hid?: string;
374
- /**
375
- * @description Materials belonging to this collection.
376
- * @type array | undefined
377
- */
378
- items?: ApiMaterial[];
379
- /**
380
- * @type object | undefined
381
- */
382
- miniature?: ApiMiniature;
383
- /**
384
- * @description Uploaded native/downloadable model files for this collection.
385
- * @type array | undefined
386
- */
387
- models?: ApiFile[];
388
- /**
389
- * @description Material collection display name; editable via a draft.
390
- * @type string | undefined
391
- */
392
- name?: string;
393
- /**
394
- * @type object | undefined
395
- */
396
- native?: ApiNative;
397
- /**
398
- * @description Preview image files for this material collection.
399
- * @type array | undefined
400
- */
401
- previews?: ApiFile[];
402
- /**
403
- * @description Material collection UUID; server-assigned on create.
404
- * @type string | undefined
405
- */
406
- uuid?: string;
407
- };
408
-
409
- declare type ApiMaterial = {
410
- /**
411
- * @description Whether the material\'s texture uses alpha transparency.
412
- * @type boolean | undefined
413
- */
414
- alpha?: boolean;
415
- /**
416
- * @description Material display name; editable via a draft.
417
- * @type string | undefined
418
- */
419
- name?: string;
420
- /**
421
- * @type object | undefined
422
- */
423
- normalMap?: ApiFile;
424
- /**
425
- * @description Client-supplied identifier for the material, validated for uniqueness within the collection.
426
- * @type string | undefined
427
- */
428
- slug?: string;
429
- /**
430
- * @type object | undefined
431
- */
432
- texture?: ApiFile;
433
- /**
434
- * @type object | undefined
435
- */
436
- textureMro?: ApiFile;
437
- /**
438
- * @type object | undefined
439
- */
440
- texturePreview?: ApiFile;
441
- /**
442
- * @description Material UUID; client-supplied or server-assigned on create.
443
- * @type string | undefined
444
- */
445
- uuid?: string;
446
- };
447
-
448
- declare type ApiMiniature = {
449
- /**
450
- * @type object | undefined
451
- */
452
- color?: ApiMiniatureColor;
453
- /**
454
- * @type object | undefined
455
- */
456
- image?: ApiFile;
457
- };
458
-
459
- /**
460
- * Generated by Kubb (https://kubb.dev/).
461
- * Do not edit manually.
462
- */
463
- declare type ApiMiniatureColor = {
464
- /**
465
- * @description Hex RGB value of the color swatch (e.g. \"#ffffff\").
466
- * @type string | undefined
467
- */
468
- hex?: string;
469
- /**
470
- * @description Identifier of the predefined color swatch (see dict.Colors).
471
- * @type integer | undefined, int32
472
- */
473
- id?: number;
474
- /**
475
- * @description Display name of the color swatch.
476
- * @type string | undefined
477
- */
478
- name?: string;
479
- };
480
-
481
- /**
482
- * Generated by Kubb (https://kubb.dev/).
483
- * Do not edit manually.
484
- */
485
- declare type ApiModerationInfo = {
486
- /**
487
- * @description Moderator\'s free-text explanation accompanying a rejection.
488
- * @type string | undefined
489
- */
490
- comment?: string;
491
- /**
492
- * @description Machine-readable rejection reason code (see domain.RejectReasons); set when rejected.
493
- * @type string | undefined
494
- */
495
- reason?: string;
496
- /**
497
- * @description Moderation state (draft, unpublished, approved, rejected, published, etc.) - see domain.ModrState.
498
- * @type string | undefined
499
- */
500
- state?: string;
501
- };
502
-
503
- declare type ApiNative = {
504
- /**
505
- * @description Conversion error message; empty on success.
506
- * @type string | undefined
507
- */
508
- error?: string;
509
- /**
510
- * @description URL of the generated GLB file; set on successful conversion.
511
- * @type string | undefined
512
- */
513
- glbUrl?: string;
514
- /**
515
- * @type object | undefined
516
- */
517
- status?: ApiNativeStatus;
518
- /**
519
- * @description URL of the generated USDZ file; set on successful conversion.
520
- * @type string | undefined
521
- */
522
- usdzUrl?: string;
523
- };
524
-
525
- /**
526
- * Generated by Kubb (https://kubb.dev/).
527
- * Do not edit manually.
528
- */
529
- declare type ApiNativeStatus = {
530
- /**
531
- * @description Unix timestamp (as string) the state was last set/refreshed.
532
- * @type string | undefined
533
- */
534
- processedAt?: string;
535
- /**
536
- * @description Native conversion queue state (new/proc/succeed/failed); see dict.QueueState.
537
- * @type string | undefined
538
- */
539
- state?: string;
540
- };
541
-
542
- declare type ApiObject = {
543
- /**
544
- * @description Product platform types (dict.ProductType) this object is currently activated for; only populated by callers that load activations (e.g. ObjModr.Get), empty otherwise.
545
- * @type array | undefined
546
- */
547
- activatedProductTypes?: string[];
548
- /**
549
- * @description Last AI pipeline error message; empty when none.
550
- * @type string | undefined
551
- */
552
- aiError?: string;
553
- /**
554
- * @description Model-gen job UUID when object was created/updated via AI; empty for normal objects.
555
- * @type string | undefined
556
- */
557
- aiJobId?: string;
558
- /**
559
- * @description AI provider (tripo|trellis); empty for normal objects.
560
- * @type string | undefined
561
- */
562
- aiProvider?: string;
563
- /**
564
- * @description AI pipeline stage (generating|uploading_glb|converting_usdz|updating_object|awaiting_preview|ready|failed).
565
- * @type string | undefined
566
- */
567
- aiStage?: string;
568
- /**
569
- * @description Optional merchant/product brand name.
570
- * @type string | undefined
571
- */
572
- brand?: string;
573
- /**
574
- * @type object | undefined
575
- */
576
- category?: ApiCat;
577
- /**
578
- * @description Cover image files attached to the object.
579
- * @type array | undefined
580
- */
581
- covers?: ApiFile[];
582
- /**
583
- * @description Unix timestamp (as string) the object was soft-deleted; empty when not deleted.
584
- * @type string | undefined
585
- */
586
- deletedAt?: string;
587
- /**
588
- * @description Object free-text description; editable via a draft.
589
- * @type string | undefined
590
- */
591
- description?: string;
592
- /**
593
- * @description Optional outbound link (e.g. product page) shown to viewers.
594
- * @type string | undefined
595
- */
596
- destinationUrl?: string;
597
- /**
598
- * @type object | undefined
599
- */
600
- draft?: ApiDraftInfo;
601
- /**
602
- * @type object | undefined
603
- */
604
- folder?: ApiFolder;
605
- /**
606
- * @description Space-separated hashtags associated with the object (see Obj.GetHashtags/SetHashtags).
607
- * @type string | undefined
608
- */
609
- hashtags?: string;
610
- /**
611
- * @description Whether the requesting user has favorited this object.
612
- * @type boolean | undefined
613
- */
614
- isFavorite?: boolean;
615
- /**
616
- * @description Whether the object is currently hidden from any source (platform or owner); read-only summary.
617
- * @type boolean | undefined
618
- */
619
- isHidden?: boolean;
620
- /**
621
- * @description Whether the object is hidden at the owner\'s own request (dict.ObjSrcOwner).
622
- * @type boolean | undefined
623
- */
624
- isHiddenOwner?: boolean;
625
- /**
626
- * @description Whether the object is hidden platform-wide (dict.ObjSrcPlatform).
627
- * @type boolean | undefined
628
- */
629
- isHiddenPlatform?: boolean;
630
- /**
631
- * @description Whether the requesting user has liked this object.
632
- * @type boolean | undefined
633
- */
634
- isLiked?: boolean;
635
- /**
636
- * @description Whether the object is exposed on the public showcase.
637
- * @type boolean | undefined
638
- */
639
- isShowcase?: boolean;
640
- /**
641
- * @type object | undefined
642
- */
643
- kit?: ApiFolder;
644
- /**
645
- * @description Cumulative like count.
646
- * @type integer | undefined, int32
647
- */
648
- likes?: number;
649
- /**
650
- * @description URL of the object\'s main preview image (from its first material collection preview).
651
- * @type string | undefined
652
- */
653
- mainPreview?: string;
654
- /**
655
- * @description Object\'s material collections (each with previews, models, miniature, materials).
656
- * @type array | undefined
657
- */
658
- materials?: ApiMatCollection[];
659
- /**
660
- * @description Uploaded 3D model files attached directly to the object.
661
- * @type array | undefined
662
- */
663
- models?: ApiFile[];
664
- /**
665
- * @type object | undefined
666
- */
667
- moderation?: ApiModerationInfo;
668
- /**
669
- * @description Object display name; editable via a draft.
670
- * @type string | undefined
671
- */
672
- name?: string;
673
- /**
674
- * @type object | undefined
675
- */
676
- nativeStatus?: ApiNativeStatus;
677
- /**
678
- * @type object | undefined
679
- */
680
- owner?: ApiOwner;
681
- /**
682
- * @type object | undefined
683
- */
684
- permissions?: ApiPermissions;
685
- /**
686
- * @type object | undefined
687
- */
688
- policy?: ApiPolicy;
689
- /**
690
- * @type object | undefined
691
- */
692
- preview?: ApiFile;
693
- /**
694
- * @type object | undefined
695
- */
696
- price?: ApiPrice;
697
- /**
698
- * @description Explanation of why the draft/object is not ready to publish; empty when it is.
699
- * @type string | undefined
700
- */
701
- publishReadyError?: string;
702
- /**
703
- * @type object | undefined
704
- */
705
- seller?: ApiOwner;
706
- /**
707
- * @description Object tinuuid (shortened UUID encoding).
708
- * @type string | undefined
709
- */
710
- tinuuid?: string;
711
- /**
712
- * @description AR placement category (door, wall, floor, ceiling, carpet, eyeglasses, sneakers, flooring, panels, or \"all\").
713
- * @type string | undefined
714
- */
715
- type?: string;
716
- /**
717
- * @description Unix timestamp (as string) the object was last updated.
718
- * @type string | undefined
719
- */
720
- updatedAt?: string;
721
- /**
722
- * @description Upload type the object was created with (dict.ObjUploadType).
723
- * @type string | undefined
724
- */
725
- uploadType?: string;
726
- /**
727
- * @description Object UUID; server-assigned on create.
728
- * @type string | undefined
729
- */
730
- uuid?: string;
731
- /**
732
- * @description Object\'s current published version number.
733
- * @type integer | undefined, int32
734
- */
735
- version?: number;
736
- /**
737
- * @description Cumulative AR-viewer view count.
738
- * @type integer | undefined, int32
739
- */
740
- views?: number;
741
- /**
742
- * @description Cumulative showcase page view count.
743
- * @type integer | undefined, int32
744
- */
745
- viewsShowcase?: number;
746
- };
747
-
748
- declare type ApiOwner = {
749
- /**
750
- * @type object | undefined
751
- */
752
- avatar?: ApiFile;
753
- /**
754
- * @description Owner display name.
755
- * @type string | undefined
756
- */
757
- name?: string;
758
- /**
759
- * @description Owner tinuuid (shortened UUID encoding).
760
- * @type string | undefined
761
- */
762
- tinuuid?: string;
763
- /**
764
- * @description Owner username/handle.
765
- * @type string | undefined
766
- */
767
- username?: string;
768
- /**
769
- * @description Owner UUID.
770
- * @type string | undefined
771
- */
772
- uuid?: string;
773
- };
774
-
775
- /**
776
- * Generated by Kubb (https://kubb.dev/).
777
- * Do not edit manually.
778
- */
779
- declare type ApiPermissions = {
780
- /**
781
- * @description Whether the caller (moderator) can approve the object/draft.
782
- * @type boolean | undefined
783
- */
784
- canApprove?: boolean;
785
- /**
786
- * @description Whether the caller (moderator) can disable a published object.
787
- * @type boolean | undefined
788
- */
789
- canDisable?: boolean;
790
- /**
791
- * @description Whether the caller (moderator) can re-enable a disabled object.
792
- * @type boolean | undefined
793
- */
794
- canEnable?: boolean;
795
- /**
796
- * @description Whether the caller can fetch the object.
797
- * @type boolean | undefined
798
- */
799
- canFetch?: boolean;
800
- /**
801
- * @description Whether the caller can fetch the object\'s pending draft (see ObjPerms.CanFetchDraft).
802
- * @type boolean | undefined
803
- */
804
- canFetchDraft?: boolean;
805
- /**
806
- * @description Whether the caller can publish the object/draft (see ObjPerms.CanPublish).
807
- * @type boolean | undefined
808
- */
809
- canPublish?: boolean;
810
- /**
811
- * @description Whether the caller (moderator) can reject the object/draft.
812
- * @type boolean | undefined
813
- */
814
- canReject?: boolean;
815
- /**
816
- * @description Whether the caller can unpublish the object (see ObjPerms.CanUnpublish).
817
- * @type boolean | undefined
818
- */
819
- canUnpublish?: boolean;
820
- /**
821
- * @description Whether the caller can update the object (see ObjPerms.CanUpdate).
822
- * @type boolean | undefined
823
- */
824
- canUpdate?: boolean;
825
- };
826
-
827
- /**
828
- * Generated by Kubb (https://kubb.dev/).
829
- * Do not edit manually.
830
- */
831
- declare type ApiPolicy = {
832
- /**
833
- * @description Whether the owner\'s plan includes iOS App Clip support.
834
- * @type boolean | undefined
835
- */
836
- appClip?: boolean;
837
- /**
838
- * @description Whether the owner\'s plan exposes the AR view counter to the owner.
839
- * @type boolean | undefined
840
- */
841
- arViewCounter?: boolean;
842
- /**
843
- * @description Whether the owner\'s plan allows setting a destinationUrl on objects.
844
- * @type boolean | undefined
845
- */
846
- destURL?: boolean;
847
- /**
848
- * @description Whether the owner\'s plan allows hiding the Vizbl branding/logo in the viewer.
849
- * @type boolean | undefined
850
- */
851
- hideVizblLogo?: boolean;
852
- /**
853
- * @description Whether the owner\'s plan allows AR links for Instagram integration.
854
- * @type boolean | undefined
855
- */
856
- ignLinkAr?: boolean;
857
- /**
858
- * @description Whether the owner\'s plan allows redirecting to AR from Instagram integration.
859
- * @type boolean | undefined
860
- */
861
- ignRedirectAr?: boolean;
862
- /**
863
- * @description Whether the owner\'s plan allows an \"IGN\" (Instagram) viewer integration.
864
- * @type boolean | undefined
865
- */
866
- ignViewer?: boolean;
867
- /**
868
- * @description Whether the owner\'s plan allows the Instagram viewer to open as a modal.
869
- * @type boolean | undefined
870
- */
871
- ignViewerModal?: boolean;
872
- /**
873
- * @description Whether the owner\'s plan enables instant AR view (skipping intermediate steps).
874
- * @type boolean | undefined
875
- */
876
- instantArView?: boolean;
877
- /**
878
- * @description Maximum number of material collections allowed per object under the owner\'s plan.
879
- * @type integer | undefined, int32
880
- */
881
- matColsMax?: number;
882
- /**
883
- * @description Whether the owner\'s plan allows grouping objects into kit-type folders.
884
- * @type boolean | undefined
885
- */
886
- objKits?: boolean;
887
- /**
888
- * @description Whether the owner\'s plan allows tagging objects.
889
- * @type boolean | undefined
890
- */
891
- objTags?: boolean;
892
- /**
893
- * @description Whether the owner\'s plan includes a personal showcase page.
894
- * @type boolean | undefined
895
- */
896
- personalPage?: boolean;
897
- /**
898
- * @description Whether the owner\'s plan allows customizing the personal showcase page.
899
- * @type boolean | undefined
900
- */
901
- personalPageCustom?: boolean;
902
- /**
903
- * @description Whether the owner\'s plan enables the product page feature.
904
- * @type boolean | undefined
905
- */
906
- ppage?: boolean;
907
- /**
908
- * @description Whether the owner\'s plan allows team accounts/collaboration.
909
- * @type boolean | undefined
910
- */
911
- teams?: boolean;
912
- };
913
-
914
- /**
915
- * Generated by Kubb (https://kubb.dev/).
916
- * Do not edit manually.
212
+ * flags, `config` as a JSON string) and reads it from the gate:
213
+ *
214
+ * - own profile → `GET /user/me` (+ `/file/stored/read` for the images);
215
+ * - someone else's profile → `/legacy/account/Fetch` (JWT) or the public
216
+ * `GET /user/public-profile`;
217
+ * - register / deletion → `/legacy/account/Register|RequestDeletion` (the
218
+ * same handlers the old `/v1/account/*` paths are rewritten to; Register is
219
+ * the only one that still takes a display `name`).
220
+ *
221
+ * All calls go through the API client, so a custom `baseURL` must be the
222
+ * gate base, without `/v1`.
917
223
  */
918
- declare type ApiPrice = {
919
- /**
920
- * @description Price amount; unset when the object has no price.
921
- * @type number | undefined, float
922
- */
923
- amount?: number;
924
- /**
925
- * @description ISO currency code the price is denominated in; unset when the object has no price.
926
- * @type string | undefined
927
- */
928
- currency?: string;
929
- /**
930
- * @description Whether amount is an exact price (\"starting from\" otherwise); defaults to true when a price is set.
931
- * @type boolean | undefined
932
- */
933
- isExactPrice?: boolean;
224
+ declare type ApiFile = {
225
+ ext?: string;
226
+ realName?: string;
227
+ type?: string;
228
+ url?: string;
229
+ uuid?: string;
934
230
  };
935
231
 
936
232
  declare type ApiUserAccount = {
937
233
  accepted_terms?: boolean;
938
234
  app_type?: string;
939
- avatar?: ApiFile_2;
940
- background?: ApiFile_2;
235
+ avatar?: ApiFile;
236
+ background?: ApiFile;
941
237
  company?: string;
942
238
  /** Opaque user config JSON. */
943
239
  config?: string;
@@ -979,6 +275,10 @@ export declare interface AppClipWidgetEventOptions {
979
275
  widgetSessionToken?: string | null;
980
276
  }
981
277
 
278
+ /**
279
+ * In the order they are tried: WebXR wherever the browser runs immersive AR
280
+ * itself, SLAM everywhere else — iOS Safari first among them.
281
+ */
982
282
  export declare const AR_TRACKING_BACKENDS: readonly ArTrackingBackend[];
983
283
 
984
284
  export declare interface ArAnalyticsCatalogInfo {
@@ -1061,7 +361,7 @@ export declare interface ArDataProviderProps {
1061
361
  export declare type ArDataStatus = 'error' | 'loading' | 'ready';
1062
362
 
1063
363
  export declare interface ArDataValue {
1064
- catalog: ApiObject[];
364
+ catalog: CatalogObjectDtoOutput[];
1065
365
  catalogCategories: ArCatalogCategory[];
1066
366
  catalogFilters: ArCatalogFilters;
1067
367
  environmentUrl: string | null;
@@ -1071,17 +371,24 @@ export declare interface ArDataValue {
1071
371
  isFetchingNextPage: boolean;
1072
372
  isLoadingCatalogCategories: boolean;
1073
373
  metadata: ArObjectMetadata | null;
1074
- object: ApiObject | null;
1075
- owner: ApiOwner | null;
374
+ object: CatalogObjectDtoOutput | null;
375
+ owner: ArObjectOwner | null;
1076
376
  ownerAccount: ApiUserAccount | null;
1077
- resolveCatalogObjectVariant: (object: ApiObject, hid: string) => Promise<ApiObject>;
377
+ resolveCatalogObjectVariant: (object: CatalogObjectDtoOutput, hid: string) => Promise<CatalogObjectDtoOutput>;
1078
378
  setCatalogFilters: Dispatch<SetStateAction<ArCatalogFilters>>;
1079
379
  showcaseHost: string;
1080
380
  status: ArDataStatus;
1081
- variant: ApiMatCollection | null;
381
+ variant: ArObjectMaterial | null;
1082
382
  widgetSession: ArWidgetSession | null;
1083
383
  }
1084
384
 
385
+ export declare interface ArDebugOverride {
386
+ /** Runtime to pin, when the value named one. */
387
+ backend?: ArTrackingBackend;
388
+ /** Keep the in-page session instead of handing off to a native experience. */
389
+ forcesInPageSession: boolean;
390
+ }
391
+
1085
392
  export declare function ArDialog({ apiKey, hid, initialWidgetSessionToken, name, language, onAnalyticsEvent, open, defaultOpen, onOpenChange, scaleEnabled, tinuuid, ...props }: ArDialogProps): JSX.Element | null;
1086
393
 
1087
394
  export declare interface ArDialogProps extends Omit<DialogProps, 'children' | 'modal'> {
@@ -1135,11 +442,15 @@ export declare interface ArObjectDimensions {
1135
442
  width: number;
1136
443
  }
1137
444
 
445
+ declare type ArObjectMaterial = NonNullable<CatalogObjectDtoOutput['materials']>[number];
446
+
1138
447
  export declare interface ArObjectMetadata {
1139
448
  dimensions: ArObjectDimensions;
1140
449
  mechanic: ArMechanic;
1141
450
  }
1142
451
 
452
+ declare type ArObjectOwner = NonNullable<CatalogObjectDtoOutput['owner']>;
453
+
1143
454
  export declare type ArPlatform = 'ios' | 'android' | 'desktop';
1144
455
 
1145
456
  export declare type ArPlatformRoute = 'app-clip' | 'model-viewer' | 'ar';
@@ -1218,7 +529,6 @@ export declare interface ArSessionPrewarmOptions {
1218
529
  declare interface ArTenantConfig {
1219
530
  apiOrigin: string;
1220
531
  brand: ArBrand;
1221
- legacyApiOrigin: string;
1222
532
  showcaseHost: string;
1223
533
  viewerOrigin: string;
1224
534
  }
@@ -1307,13 +617,22 @@ declare type AttributeGPUType = typeof FloatType | typeof IntType;
1307
617
  * Choosing a backend means asking each runtime whether it can run here, which
1308
618
  * is async, while a scene needs its tracker the moment it renders. Resolving
1309
619
  * lazily behind the normal tracker interface keeps that choice out of the
1310
- * component: WebXR on Android, SLAM everywhere else, decided once.
620
+ * component: WebXR where the browser runs it, SLAM everywhere else, decided
621
+ * once.
1311
622
  */
1312
623
  export declare class AutoSurfaceTracker implements SurfaceTracker<unknown, XrFrameLike> {
1313
624
  private readonly options;
1314
625
  private resolution;
1315
626
  constructor(options?: CreateArTrackerOptions);
1316
627
  isSupported(): Promise<boolean>;
628
+ /**
629
+ * Starts on the first backend, and on the next one if the first cannot.
630
+ *
631
+ * A browser is trusted on whether it runs WebXR, and one that says yes may
632
+ * still lack a feature the session requires; SLAM then starts instead of the
633
+ * visitor being told AR is out of reach on a phone that runs it. A refusal is
634
+ * the visitor's answer, not the runtime's, so it is never routed around.
635
+ */
1317
636
  startSession(options?: SurfaceTrackerStartOptions): Promise<SurfaceTrackerSession<unknown, XrFrameLike>>;
1318
637
  private resolve;
1319
638
  }
@@ -2388,137 +1707,759 @@ TEventMap extends BufferGeometryEventMap = BufferGeometryEventMap,
2388
1707
  setFromPoints(points: Vector3[] | Vector2[]): this;
2389
1708
 
2390
1709
  /**
2391
- * Computes the bounding box of the geometry, and updates the {@link .boundingBox} attribute. The bounding box is
2392
- * not computed by the engine; it must be computed by your app. You may need to recompute the bounding box if the
2393
- * geometry vertices are modified.
1710
+ * Computes the bounding box of the geometry, and updates the {@link .boundingBox} attribute. The bounding box is
1711
+ * not computed by the engine; it must be computed by your app. You may need to recompute the bounding box if the
1712
+ * geometry vertices are modified.
1713
+ */
1714
+ computeBoundingBox(): void;
1715
+
1716
+ /**
1717
+ * Computes the bounding sphere of the geometry, and updates the {@link .boundingSphere} attribute. The engine
1718
+ * automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling. You
1719
+ * may need to recompute the bounding sphere if the geometry vertices are modified.
1720
+ */
1721
+ computeBoundingSphere(): void;
1722
+
1723
+ /**
1724
+ * Calculates and adds a tangent attribute to this geometry.
1725
+ * The computation is only supported for indexed geometries and if position, normal, and uv attributes are defined
1726
+ * @remarks
1727
+ * When using a tangent space normal map, prefer the MikkTSpace algorithm provided by
1728
+ * {@link BufferGeometryUtils.computeMikkTSpaceTangents} instead.
1729
+ */
1730
+ computeTangents(): void;
1731
+
1732
+ /**
1733
+ * Computes vertex normals for the given vertex data. For indexed geometries, the method sets each vertex normal to
1734
+ * be the average of the face normals of the faces that share that vertex. For non-indexed geometries, vertices are
1735
+ * not shared, and the method sets each vertex normal to be the same as the face normal.
1736
+ */
1737
+ computeVertexNormals(): void;
1738
+
1739
+ /**
1740
+ * Every normal vector in a geometry will have a magnitude of 1
1741
+ * @remarks This will correct lighting on the geometry surfaces.
1742
+ */
1743
+ normalizeNormals(): void;
1744
+
1745
+ /**
1746
+ * Return a non-index version of an indexed BufferGeometry.
1747
+ */
1748
+ toNonIndexed(): BufferGeometry;
1749
+
1750
+ /**
1751
+ * Convert the buffer geometry to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}.
1752
+ */
1753
+ toJSON(): BufferGeometryJSON;
1754
+
1755
+ /**
1756
+ * Creates a clone of this BufferGeometry
1757
+ */
1758
+ clone(): this;
1759
+
1760
+ /**
1761
+ * Copies another BufferGeometry to this BufferGeometry.
1762
+ * @param source
1763
+ */
1764
+ copy(source: BufferGeometry): this;
1765
+
1766
+ /**
1767
+ * Frees the GPU-related resources allocated by this instance.
1768
+ * @remarks Call this method whenever this instance is no longer used in your app.
1769
+ */
1770
+ dispose(): void;
1771
+ }
1772
+
1773
+ declare interface BufferGeometryEventMap {
1774
+ dispose: {};
1775
+ }
1776
+
1777
+ declare interface BufferGeometryJSON {
1778
+ metadata?: { version: number; type: string; generator: string };
1779
+
1780
+ uuid: string;
1781
+ type: string;
1782
+
1783
+ name?: string;
1784
+ userData?: Record<string, unknown>;
1785
+
1786
+ data?: {
1787
+ attributes: Record<string, BufferAttributeJSON>;
1788
+
1789
+ index?: { type: string; array: number[] };
1790
+
1791
+ morphAttributes?: Record<string, BufferAttributeJSON[]>;
1792
+ morphTargetsRelative?: boolean;
1793
+
1794
+ groups?: GeometryGroup[];
1795
+
1796
+ boundingSphere?: { center: Vector3Tuple; radius: number };
1797
+ };
1798
+ }
1799
+
1800
+ export declare function buildAppClipUrl(tinuuid: string, region: AppClipRegion): string;
1801
+
1802
+ declare const ByteType: 1010;
1803
+
1804
+ /**
1805
+ * Abstract base class for cameras. This class should always be inherited
1806
+ * when you build a new camera.
1807
+ */
1808
+ declare class Camera extends Object3D {
1809
+ /**
1810
+ * This flag can be used for type testing.
1811
+ *
1812
+ * @default true
1813
+ */
1814
+ readonly isCamera: boolean;
1815
+ /**
1816
+ * The inverse of the camera's world matrix.
1817
+ */
1818
+ matrixWorldInverse: Matrix4;
1819
+ /**
1820
+ * The camera's projection matrix.
1821
+ */
1822
+ projectionMatrix: Matrix4;
1823
+ /**
1824
+ * The inverse of the camera's projection matrix.
1825
+ */
1826
+ projectionMatrixInverse: Matrix4;
1827
+ /**
1828
+ * The coordinate system in which the camera is used.
1829
+ */
1830
+ coordinateSystem: CoordinateSystem;
1831
+ viewport?: Vector4;
1832
+ /**
1833
+ * The flag that indicates whether the camera uses a reversed depth buffer.
1834
+ *
1835
+ * @default false
1836
+ */
1837
+ get reversedDepth(): boolean;
1838
+ clone(): this;
1839
+ copy(source: Camera, recursive?: boolean): this;
1840
+ }
1841
+
1842
+ declare type CatalogObjectDtoOutput = {
1843
+ /**
1844
+ * @type string, uuid
1845
+ */
1846
+ uuid: string;
1847
+ /**
1848
+ * @type string
1849
+ */
1850
+ tinuuid: string;
1851
+ /**
1852
+ * @type string | undefined
1853
+ */
1854
+ name?: string;
1855
+ /**
1856
+ * @type string | undefined
1857
+ */
1858
+ description?: string;
1859
+ /**
1860
+ * @type string | undefined
1861
+ */
1862
+ type?: string;
1863
+ /**
1864
+ * @type string | undefined
1865
+ */
1866
+ uploadType?: string;
1867
+ /**
1868
+ * @type string | undefined
1869
+ */
1870
+ mainPreview?: string;
1871
+ /**
1872
+ * @type object | undefined
1873
+ */
1874
+ preview?: {
1875
+ /**
1876
+ * @type string | undefined
1877
+ */
1878
+ url?: string;
1879
+ /**
1880
+ * @type object | undefined
1881
+ */
1882
+ subRes?: {
1883
+ [key: string]: string;
1884
+ };
1885
+ /**
1886
+ * @type string | undefined
1887
+ */
1888
+ imgOrientation?: string;
1889
+ /**
1890
+ * @type string | undefined
1891
+ */
1892
+ slug?: string;
1893
+ /**
1894
+ * @type boolean | undefined
1895
+ */
1896
+ isClonable?: boolean;
1897
+ };
1898
+ /**
1899
+ * @type string | undefined
1900
+ */
1901
+ destinationUrl?: string;
1902
+ /**
1903
+ * @type string | undefined
1904
+ */
1905
+ brand?: string;
1906
+ /**
1907
+ * @type object
1908
+ */
1909
+ dimensions?: {
1910
+ /**
1911
+ * @maxLength 9007199254740991
1912
+ * @type integer
1913
+ */
1914
+ width: number | null;
1915
+ /**
1916
+ * @maxLength 9007199254740991
1917
+ * @type integer
1918
+ */
1919
+ height: number | null;
1920
+ /**
1921
+ * @maxLength 9007199254740991
1922
+ * @type integer
1923
+ */
1924
+ depth: number | null;
1925
+ /**
1926
+ * @type string
1927
+ */
1928
+ unit: DimensionsUnitEnumKey;
1929
+ } | null;
1930
+ /**
1931
+ * @minLength -9007199254740991
1932
+ * @maxLength 9007199254740991
1933
+ * @type integer | undefined
1934
+ */
1935
+ views?: number;
1936
+ /**
1937
+ * @minLength -9007199254740991
1938
+ * @maxLength 9007199254740991
1939
+ * @type integer | undefined
1940
+ */
1941
+ viewsShowcase?: number;
1942
+ /**
1943
+ * @minLength -9007199254740991
1944
+ * @maxLength 9007199254740991
1945
+ * @type integer | undefined
1946
+ */
1947
+ likes?: number;
1948
+ /**
1949
+ * @type string | undefined
1950
+ */
1951
+ hashtags?: string;
1952
+ /**
1953
+ * @minLength -9007199254740991
1954
+ * @maxLength 9007199254740991
1955
+ * @type integer | undefined
1956
+ */
1957
+ version?: number;
1958
+ /**
1959
+ * @type string | undefined
1960
+ */
1961
+ updatedAt?: string;
1962
+ /**
1963
+ * @type boolean | undefined
1964
+ */
1965
+ isFavorite?: boolean;
1966
+ /**
1967
+ * @type boolean | undefined
1968
+ */
1969
+ isLiked?: boolean;
1970
+ /**
1971
+ * @type boolean | undefined
1972
+ */
1973
+ isShowcase?: boolean;
1974
+ /**
1975
+ * @type boolean | undefined
2394
1976
  */
2395
- computeBoundingBox(): void;
2396
-
1977
+ isHidden?: boolean;
2397
1978
  /**
2398
- * Computes the bounding sphere of the geometry, and updates the {@link .boundingSphere} attribute. The engine
2399
- * automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling. You
2400
- * may need to recompute the bounding sphere if the geometry vertices are modified.
1979
+ * @type boolean | undefined
2401
1980
  */
2402
- computeBoundingSphere(): void;
2403
-
1981
+ isHiddenPlatform?: boolean;
2404
1982
  /**
2405
- * Calculates and adds a tangent attribute to this geometry.
2406
- * The computation is only supported for indexed geometries and if position, normal, and uv attributes are defined
2407
- * @remarks
2408
- * When using a tangent space normal map, prefer the MikkTSpace algorithm provided by
2409
- * {@link BufferGeometryUtils.computeMikkTSpaceTangents} instead.
1983
+ * @type boolean | undefined
2410
1984
  */
2411
- computeTangents(): void;
2412
-
1985
+ isHiddenOwner?: boolean;
2413
1986
  /**
2414
- * Computes vertex normals for the given vertex data. For indexed geometries, the method sets each vertex normal to
2415
- * be the average of the face normals of the faces that share that vertex. For non-indexed geometries, vertices are
2416
- * not shared, and the method sets each vertex normal to be the same as the face normal.
1987
+ * @type string | undefined
2417
1988
  */
2418
- computeVertexNormals(): void;
2419
-
1989
+ deletedAt?: string;
2420
1990
  /**
2421
- * Every normal vector in a geometry will have a magnitude of 1
2422
- * @remarks This will correct lighting on the geometry surfaces.
1991
+ * @type object | undefined
2423
1992
  */
2424
- normalizeNormals(): void;
2425
-
1993
+ price?: {
1994
+ /**
1995
+ * @type number | undefined
1996
+ */
1997
+ amount?: number;
1998
+ /**
1999
+ * @type string | undefined
2000
+ */
2001
+ currency?: string;
2002
+ /**
2003
+ * @type boolean | undefined
2004
+ */
2005
+ isExactPrice?: boolean;
2006
+ };
2426
2007
  /**
2427
- * Return a non-index version of an indexed BufferGeometry.
2008
+ * @type object | undefined
2428
2009
  */
2429
- toNonIndexed(): BufferGeometry;
2430
-
2010
+ category?: {
2011
+ /**
2012
+ * @minLength -9007199254740991
2013
+ * @maxLength 9007199254740991
2014
+ * @type integer | undefined
2015
+ */
2016
+ id?: number;
2017
+ /**
2018
+ * @type string | undefined
2019
+ */
2020
+ name?: string;
2021
+ /**
2022
+ * @type boolean | undefined
2023
+ */
2024
+ hasObjs?: boolean;
2025
+ /**
2026
+ * @type string | undefined
2027
+ */
2028
+ previewUrl?: string;
2029
+ };
2431
2030
  /**
2432
- * Convert the buffer geometry to three.js {@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 | JSON Object/Scene format}.
2031
+ * @type object | undefined
2433
2032
  */
2434
- toJSON(): BufferGeometryJSON;
2435
-
2033
+ moderation?: {
2034
+ /**
2035
+ * @type string | undefined
2036
+ */
2037
+ state?: string;
2038
+ };
2436
2039
  /**
2437
- * Creates a clone of this BufferGeometry
2040
+ * @type object | undefined
2438
2041
  */
2439
- clone(): this;
2440
-
2042
+ draft?: {
2043
+ /**
2044
+ * @minLength -9007199254740991
2045
+ * @maxLength 9007199254740991
2046
+ * @type integer | undefined
2047
+ */
2048
+ version?: number;
2049
+ /**
2050
+ * @type object | undefined
2051
+ */
2052
+ moderation?: {
2053
+ /**
2054
+ * @type string | undefined
2055
+ */
2056
+ state?: string;
2057
+ };
2058
+ };
2441
2059
  /**
2442
- * Copies another BufferGeometry to this BufferGeometry.
2443
- * @param source
2060
+ * @type array | undefined
2444
2061
  */
2445
- copy(source: BufferGeometry): this;
2446
-
2062
+ activatedProductTypes?: CatalogObjectDtoOutputActivatedProductTypesEnumKey[];
2447
2063
  /**
2448
- * Frees the GPU-related resources allocated by this instance.
2449
- * @remarks Call this method whenever this instance is no longer used in your app.
2064
+ * @type object | undefined
2450
2065
  */
2451
- dispose(): void;
2452
- }
2453
-
2454
- declare interface BufferGeometryEventMap {
2455
- dispose: {};
2456
- }
2457
-
2458
- declare interface BufferGeometryJSON {
2459
- metadata?: { version: number; type: string; generator: string };
2460
-
2461
- uuid: string;
2462
- type: string;
2463
-
2464
- name?: string;
2465
- userData?: Record<string, unknown>;
2466
-
2467
- data?: {
2468
- attributes: Record<string, BufferAttributeJSON>;
2469
-
2470
- index?: { type: string; array: number[] };
2471
-
2472
- morphAttributes?: Record<string, BufferAttributeJSON[]>;
2473
- morphTargetsRelative?: boolean;
2474
-
2475
- groups?: GeometryGroup[];
2476
-
2477
- boundingSphere?: { center: Vector3Tuple; radius: number };
2066
+ owner?: {
2067
+ /**
2068
+ * @type string, uuid
2069
+ */
2070
+ uuid: string;
2071
+ /**
2072
+ * @type string | undefined
2073
+ */
2074
+ tinuuid?: string;
2075
+ /**
2076
+ * @type string | undefined
2077
+ */
2078
+ name?: string;
2079
+ /**
2080
+ * @type string | undefined
2081
+ */
2082
+ username?: string;
2083
+ /**
2084
+ * @type object | undefined
2085
+ */
2086
+ avatar?: {
2087
+ /**
2088
+ * @type string | undefined
2089
+ */
2090
+ url?: string;
2091
+ /**
2092
+ * @type object | undefined
2093
+ */
2094
+ subRes?: {
2095
+ [key: string]: string;
2096
+ };
2097
+ /**
2098
+ * @type string | undefined
2099
+ */
2100
+ imgOrientation?: string;
2101
+ /**
2102
+ * @type string | undefined
2103
+ */
2104
+ slug?: string;
2105
+ /**
2106
+ * @type boolean | undefined
2107
+ */
2108
+ isClonable?: boolean;
2109
+ };
2478
2110
  };
2479
- }
2480
-
2481
- export declare function buildAppClipUrl(tinuuid: string, region: AppClipRegion): string;
2482
-
2483
- declare const ByteType: 1010;
2484
-
2485
- /**
2486
- * Abstract base class for cameras. This class should always be inherited
2487
- * when you build a new camera.
2488
- */
2489
- declare class Camera extends Object3D {
2490
2111
  /**
2491
- * This flag can be used for type testing.
2492
- *
2493
- * @default true
2112
+ * @type array | undefined
2494
2113
  */
2495
- readonly isCamera: boolean;
2114
+ covers?: {
2115
+ /**
2116
+ * @type string | undefined
2117
+ */
2118
+ url?: string;
2119
+ /**
2120
+ * @type object | undefined
2121
+ */
2122
+ subRes?: {
2123
+ [key: string]: string;
2124
+ };
2125
+ /**
2126
+ * @type string | undefined
2127
+ */
2128
+ imgOrientation?: string;
2129
+ /**
2130
+ * @type string | undefined
2131
+ */
2132
+ slug?: string;
2133
+ /**
2134
+ * @type boolean | undefined
2135
+ */
2136
+ isClonable?: boolean;
2137
+ }[];
2496
2138
  /**
2497
- * The inverse of the camera's world matrix.
2139
+ * @type array | undefined
2498
2140
  */
2499
- matrixWorldInverse: Matrix4;
2141
+ models?: {
2142
+ /**
2143
+ * @type string | undefined
2144
+ */
2145
+ url?: string;
2146
+ /**
2147
+ * @type object | undefined
2148
+ */
2149
+ subRes?: {
2150
+ [key: string]: string;
2151
+ };
2152
+ /**
2153
+ * @type string | undefined
2154
+ */
2155
+ imgOrientation?: string;
2156
+ /**
2157
+ * @type string | undefined
2158
+ */
2159
+ slug?: string;
2160
+ /**
2161
+ * @type boolean | undefined
2162
+ */
2163
+ isClonable?: boolean;
2164
+ }[];
2500
2165
  /**
2501
- * The camera's projection matrix.
2166
+ * @type array | undefined
2502
2167
  */
2503
- projectionMatrix: Matrix4;
2168
+ materials?: {
2169
+ /**
2170
+ * @type string | undefined
2171
+ */
2172
+ hid?: string;
2173
+ /**
2174
+ * @type string | undefined
2175
+ */
2176
+ name?: string;
2177
+ /**
2178
+ * @type object | undefined
2179
+ */
2180
+ native?: {
2181
+ /**
2182
+ * @type string | undefined
2183
+ */
2184
+ glbUrl?: string;
2185
+ /**
2186
+ * @type string | undefined
2187
+ */
2188
+ usdzUrl?: string;
2189
+ /**
2190
+ * @type string | undefined
2191
+ */
2192
+ stlUrl?: string;
2193
+ /**
2194
+ * @type object | undefined
2195
+ */
2196
+ status?: {
2197
+ /**
2198
+ * @type string | undefined
2199
+ */
2200
+ state?: string;
2201
+ /**
2202
+ * @type string | undefined
2203
+ */
2204
+ processedAt?: string;
2205
+ };
2206
+ /**
2207
+ * @type string | undefined
2208
+ */
2209
+ error?: string;
2210
+ };
2211
+ /**
2212
+ * @type array | undefined
2213
+ */
2214
+ previews?: {
2215
+ /**
2216
+ * @type string | undefined
2217
+ */
2218
+ url?: string;
2219
+ /**
2220
+ * @type object | undefined
2221
+ */
2222
+ subRes?: {
2223
+ [key: string]: string;
2224
+ };
2225
+ /**
2226
+ * @type string | undefined
2227
+ */
2228
+ imgOrientation?: string;
2229
+ /**
2230
+ * @type string | undefined
2231
+ */
2232
+ slug?: string;
2233
+ /**
2234
+ * @type boolean | undefined
2235
+ */
2236
+ isClonable?: boolean;
2237
+ }[];
2238
+ /**
2239
+ * @type array | undefined
2240
+ */
2241
+ models?: {
2242
+ /**
2243
+ * @type string | undefined
2244
+ */
2245
+ url?: string;
2246
+ /**
2247
+ * @type object | undefined
2248
+ */
2249
+ subRes?: {
2250
+ [key: string]: string;
2251
+ };
2252
+ /**
2253
+ * @type string | undefined
2254
+ */
2255
+ imgOrientation?: string;
2256
+ /**
2257
+ * @type string | undefined
2258
+ */
2259
+ slug?: string;
2260
+ /**
2261
+ * @type boolean | undefined
2262
+ */
2263
+ isClonable?: boolean;
2264
+ }[];
2265
+ /**
2266
+ * @type object | undefined
2267
+ */
2268
+ miniature?: {
2269
+ /**
2270
+ * @type object | undefined
2271
+ */
2272
+ image?: {
2273
+ /**
2274
+ * @type string | undefined
2275
+ */
2276
+ url?: string;
2277
+ /**
2278
+ * @type object | undefined
2279
+ */
2280
+ subRes?: {
2281
+ [key: string]: string;
2282
+ };
2283
+ /**
2284
+ * @type string | undefined
2285
+ */
2286
+ imgOrientation?: string;
2287
+ /**
2288
+ * @type string | undefined
2289
+ */
2290
+ slug?: string;
2291
+ /**
2292
+ * @type boolean | undefined
2293
+ */
2294
+ isClonable?: boolean;
2295
+ };
2296
+ /**
2297
+ * @type object | undefined
2298
+ */
2299
+ color?: {
2300
+ /**
2301
+ * @minLength -9007199254740991
2302
+ * @maxLength 9007199254740991
2303
+ * @type integer | undefined
2304
+ */
2305
+ id?: number;
2306
+ /**
2307
+ * @type string | undefined
2308
+ */
2309
+ name?: string;
2310
+ /**
2311
+ * @type string | undefined
2312
+ */
2313
+ hex?: string;
2314
+ };
2315
+ };
2316
+ /**
2317
+ * @type array | undefined
2318
+ */
2319
+ items?: {
2320
+ /**
2321
+ * @type string | undefined
2322
+ */
2323
+ name?: string;
2324
+ /**
2325
+ * @type string | undefined
2326
+ */
2327
+ slug?: string;
2328
+ /**
2329
+ * @type boolean | undefined
2330
+ */
2331
+ alpha?: boolean;
2332
+ /**
2333
+ * @type object | undefined
2334
+ */
2335
+ texture?: {
2336
+ /**
2337
+ * @type string | undefined
2338
+ */
2339
+ url?: string;
2340
+ /**
2341
+ * @type object | undefined
2342
+ */
2343
+ subRes?: {
2344
+ [key: string]: string;
2345
+ };
2346
+ /**
2347
+ * @type string | undefined
2348
+ */
2349
+ imgOrientation?: string;
2350
+ /**
2351
+ * @type string | undefined
2352
+ */
2353
+ slug?: string;
2354
+ /**
2355
+ * @type boolean | undefined
2356
+ */
2357
+ isClonable?: boolean;
2358
+ };
2359
+ /**
2360
+ * @type object | undefined
2361
+ */
2362
+ normalMap?: {
2363
+ /**
2364
+ * @type string | undefined
2365
+ */
2366
+ url?: string;
2367
+ /**
2368
+ * @type object | undefined
2369
+ */
2370
+ subRes?: {
2371
+ [key: string]: string;
2372
+ };
2373
+ /**
2374
+ * @type string | undefined
2375
+ */
2376
+ imgOrientation?: string;
2377
+ /**
2378
+ * @type string | undefined
2379
+ */
2380
+ slug?: string;
2381
+ /**
2382
+ * @type boolean | undefined
2383
+ */
2384
+ isClonable?: boolean;
2385
+ };
2386
+ /**
2387
+ * @type object | undefined
2388
+ */
2389
+ textureMro?: {
2390
+ /**
2391
+ * @type string | undefined
2392
+ */
2393
+ url?: string;
2394
+ /**
2395
+ * @type object | undefined
2396
+ */
2397
+ subRes?: {
2398
+ [key: string]: string;
2399
+ };
2400
+ /**
2401
+ * @type string | undefined
2402
+ */
2403
+ imgOrientation?: string;
2404
+ /**
2405
+ * @type string | undefined
2406
+ */
2407
+ slug?: string;
2408
+ /**
2409
+ * @type boolean | undefined
2410
+ */
2411
+ isClonable?: boolean;
2412
+ };
2413
+ }[];
2414
+ }[];
2504
2415
  /**
2505
- * The inverse of the camera's projection matrix.
2416
+ * @type object | undefined
2506
2417
  */
2507
- projectionMatrixInverse: Matrix4;
2418
+ kit?: {
2419
+ /**
2420
+ * @type string | undefined, uuid
2421
+ */
2422
+ uuid?: string;
2423
+ /**
2424
+ * @type string | undefined
2425
+ */
2426
+ name?: string;
2427
+ };
2508
2428
  /**
2509
- * The coordinate system in which the camera is used.
2429
+ * @type object | undefined
2510
2430
  */
2511
- coordinateSystem: CoordinateSystem;
2512
- viewport?: Vector4;
2431
+ nativeStatus?: {
2432
+ /**
2433
+ * @type string | undefined
2434
+ */
2435
+ state?: string;
2436
+ /**
2437
+ * @type string | undefined
2438
+ */
2439
+ processedAt?: string;
2440
+ };
2513
2441
  /**
2514
- * The flag that indicates whether the camera uses a reversed depth buffer.
2515
- *
2516
- * @default false
2442
+ * @type object
2517
2443
  */
2518
- get reversedDepth(): boolean;
2519
- clone(): this;
2520
- copy(source: Camera, recursive?: boolean): this;
2521
- }
2444
+ policy?: {
2445
+ [key: string]: any;
2446
+ } | null;
2447
+ };
2448
+
2449
+ declare const catalogObjectDtoOutputActivatedProductTypesEnum: {
2450
+ readonly "core-ar": "core-ar";
2451
+ readonly "core-ar-shopify": "core-ar-shopify";
2452
+ readonly wallart: "wallart";
2453
+ readonly "wallart-shopify": "wallart-shopify";
2454
+ readonly rugs: "rugs";
2455
+ readonly flooring: "flooring";
2456
+ readonly "ai-try-on": "ai-try-on";
2457
+ readonly "ai-try-on-shopify": "ai-try-on-shopify";
2458
+ readonly "view-360": "view-360";
2459
+ readonly panels: "panels";
2460
+ };
2461
+
2462
+ declare type CatalogObjectDtoOutputActivatedProductTypesEnumKey = (typeof catalogObjectDtoOutputActivatedProductTypesEnum)[keyof typeof catalogObjectDtoOutputActivatedProductTypesEnum];
2522
2463
 
2523
2464
  declare const CineonToneMapping: 3;
2524
2465
 
@@ -2951,16 +2892,21 @@ declare type CoordinateSystem =
2951
2892
  | typeof WebGPUCoordinateSystem;
2952
2893
 
2953
2894
  /**
2954
- * Picks the tracking backend for this device, falling back to the other one
2955
- * when the preferred runtime turns out to be unavailable.
2895
+ * Picks the tracking backend for this device: WebXR where the browser runs it,
2896
+ * SLAM otherwise.
2956
2897
  */
2957
- export declare function createArTracker({ backend, registry, userAgent, }?: CreateArTrackerOptions): Promise<ArTracker>;
2898
+ export declare function createArTracker(options?: CreateArTrackerOptions): Promise<ArTracker>;
2958
2899
 
2959
2900
  export declare interface CreateArTrackerOptions {
2960
2901
  /** Pin a backend instead of picking one from the device. */
2961
2902
  backend?: ArTrackingBackend;
2962
2903
  registry?: ArTrackerRegistry;
2963
- userAgent?: string;
2904
+ /**
2905
+ * Set inside an in-app browser, which gets only the runtime it brings itself.
2906
+ * SLAM needs the camera, and an app seldom hands its browser one; WebXR is
2907
+ * the browser's own, so where it answers it is the browser's to run.
2908
+ */
2909
+ webview?: boolean;
2964
2910
  }
2965
2911
 
2966
2912
  export declare function createArTrackerRegistry(): ArTrackerRegistry;
@@ -3267,6 +3213,16 @@ export declare function detectSupportedArBackends(registry?: ArTrackerRegistry):
3267
3213
 
3268
3214
  declare type DialogProps = React_2.ComponentProps<typeof DialogPrimitive.Root>
3269
3215
 
3216
+ /**
3217
+ * Generated by Kubb (https://kubb.dev/).
3218
+ * Do not edit manually.
3219
+ */
3220
+ declare const dimensionsUnitEnum: {
3221
+ readonly mm: "mm";
3222
+ };
3223
+
3224
+ declare type DimensionsUnitEnumKey = (typeof dimensionsUnitEnum)[keyof typeof dimensionsUnitEnum];
3225
+
3270
3226
  /**
3271
3227
  * Interpolant that evaluates to the sample value at the position preceding
3272
3228
  * the parameter.
@@ -3356,6 +3312,7 @@ declare class EighthWallTrackingSession implements SurfaceTrackerSession<Xr8Like
3356
3312
  private threeScene;
3357
3313
  private tracking;
3358
3314
  bridge: ArRenderBridge | null;
3315
+ readonly guessesWalls = true;
3359
3316
  constructor(nativeSession: Xr8Like, canvas: HTMLCanvasElement, mechanic: ArMechanic, onResize: () => void);
3360
3317
  /** The scene switches mechanics mid-session as objects are selected. */
3361
3318
  setMechanic(mechanic: ArMechanic): void;
@@ -3384,7 +3341,6 @@ export declare function emitArAnalyticsEvent(handler: ArAnalyticsEventHandler |
3384
3341
 
3385
3342
  declare const env: {
3386
3343
  readonly API_BASE_URL: string | undefined;
3387
- readonly NODE_API_BASE_URL: string | undefined;
3388
3344
  readonly TENANTS: {
3389
3345
  readonly arizo: {
3390
3346
  readonly VIEWER_URL: string | undefined;
@@ -3909,6 +3865,11 @@ declare interface HSL {
3909
3865
  l: number;
3910
3866
  }
3911
3867
 
3868
+ /** The one call of `navigator.xr` this question needs. */
3869
+ declare interface ImmersiveArSystemLike {
3870
+ isSessionSupported: (mode: 'immersive-ar') => Promise<boolean>;
3871
+ }
3872
+
3912
3873
  declare const IncrementStencilOp: 7682;
3913
3874
 
3914
3875
  declare const IncrementWrapStencilOp: 34055;
@@ -4434,12 +4395,6 @@ declare const IntType: 1013;
4434
4395
 
4435
4396
  declare const InvertStencilOp: 5386;
4436
4397
 
4437
- /**
4438
- * Chrome and Edge on Android are the only places native WebXR AR is solid.
4439
- * Every other browser — iOS Safari first among them — goes to SLAM.
4440
- */
4441
- export declare function isAndroidChromeOrEdge(userAgent?: string): boolean;
4442
-
4443
4398
  declare type IssueArWidgetToken = (data: {
4444
4399
  mode: 'ar-viewer';
4445
4400
  token: string;
@@ -7497,6 +7452,13 @@ declare type PixelFormatGPU =
7497
7452
  export declare interface PlacementAnchor<Frame = unknown> {
7498
7453
  delete: () => void;
7499
7454
  getPose: (frame: Frame) => SurfacePose | null;
7455
+ /**
7456
+ * True once the runtime has let go of the anchor for good — ARCore detaches
7457
+ * one it stopped tracking, typically after tracking was lost for a while —
7458
+ * so no pose will ever come from it again. A paused anchor is not detached:
7459
+ * it answers null until the runtime finds it again.
7460
+ */
7461
+ isDetached?: () => boolean;
7500
7462
  nativeAnchor?: unknown;
7501
7463
  pose: SurfacePose;
7502
7464
  }
@@ -7542,8 +7504,6 @@ declare class Plane {
7542
7504
  isIntersectionLine(l: any): any;
7543
7505
  }
7544
7506
 
7545
- export declare function preferredArBackend(userAgent?: string): ArTrackingBackend;
7546
-
7547
7507
  /**
7548
7508
  * Starts everything an AR session needs that does not need the DOM yet, from
7549
7509
  * the tap that opens the widget.
@@ -7551,9 +7511,8 @@ export declare function preferredArBackend(userAgent?: string): ArTrackingBacken
7551
7511
  * The session itself cannot start here: WebXR hands its UI over as a DOM
7552
7512
  * overlay, so it can only be requested once the surface it composites is
7553
7513
  * mounted. What can start here is everything that surface then waits on — the
7554
- * scene chunk, the SLAM engine binary, and the one permission iOS will only
7555
- * grant to a gesture — so by the time the surface exists there is nothing left
7556
- * to download and no prompt left to answer.
7514
+ * scene chunk and the SLAM engine binary — so by the time the visitor has read
7515
+ * the intro there is nothing left to download.
7557
7516
  *
7558
7517
  * Fire-and-forget by design: nothing here is required for AR to work, so a
7559
7518
  * failure is left for the session to run into and report on its own.
@@ -7975,6 +7934,8 @@ declare interface RaycasterParameters {
7975
7934
  Sprite: any;
7976
7935
  }
7977
7936
 
7937
+ export declare function readArDebugOverride(search?: string): ArDebugOverride;
7938
+
7978
7939
  declare const RED_GREEN_RGTC2_Format: 36285;
7979
7940
 
7980
7941
  declare const RED_RGTC1_Format: 36283;
@@ -8124,112 +8085,155 @@ export declare function resolveEighthWallReticleHit(input: ReticleHitInput): Ret
8124
8085
  declare const resources: {
8125
8086
  en: {
8126
8087
  translation: {
8127
- readonly title: "Augmented reality";
8128
- readonly comingSoon: "AR preview is coming soon.";
8088
+ readonly title: "Try-on";
8089
+ readonly comingSoon: "Try-on is coming soon.";
8129
8090
  readonly close: "Close";
8130
- readonly loadingModel: "Loading model… {{progress}}%";
8091
+ readonly cancelPlacement: "Cancel";
8092
+ readonly deleteObject: "Take the object away";
8093
+ readonly linkCopied: "Link copied";
8094
+ readonly share: "Share";
8095
+ readonly variant: "Variant";
8096
+ readonly addObject: "Add an object";
8097
+ readonly preparingObject: "Getting the object ready… {{progress}}%";
8098
+ readonly loadingModel: "Loading… {{progress}}%";
8099
+ readonly scan: {
8100
+ readonly help: "Nothing yet? Try more light, or step back";
8101
+ };
8102
+ readonly intro: {
8103
+ readonly action: "Turn on camera";
8104
+ readonly body: "We’ll turn on the camera, and you’ll see it right in your room.";
8105
+ readonly privacy: "The camera runs only while you’re trying it on.";
8106
+ readonly starting: "Starting…";
8107
+ readonly title: "Try this one in your room";
8108
+ };
8131
8109
  readonly android: {
8132
- readonly description: "Place the resource in your room.";
8133
- readonly title: "Live AR";
8110
+ readonly description: "Put the object in your room.";
8111
+ readonly title: "Try it on in your room";
8134
8112
  };
8135
8113
  readonly all: {
8136
- readonly anchorError: "Could not anchor the object. Move your phone and try again.";
8114
+ readonly found: "Great, surface found";
8115
+ readonly anchorError: "That did not settle. Sweep your phone around and try again.";
8116
+ readonly catalog: "Tap the plus to add another";
8137
8117
  readonly done: "Done";
8138
- readonly gestures: "Drag the object along its surface. Drag outside to rotate.";
8139
- readonly preview: "Aim at any surface and confirm the position.";
8140
- readonly relocalizing: "Point your phone at the room again.";
8141
- readonly searching: "Move your phone slowly to find a floor, wall, or ceiling.";
8142
- readonly select: "Tap the object to adjust it.";
8143
- readonly start: "Start AR";
8144
- readonly starting: "Starting…";
8118
+ readonly finish: "Tap away from the object to finish";
8119
+ readonly gestures: "Drag the object to move it. Drag beside it to turn it.";
8120
+ readonly move: "Drag the object to move it";
8121
+ readonly place: "Place here";
8122
+ readonly preview: "Aim at any surface";
8123
+ readonly relocalizing: "Show the room again";
8124
+ readonly rotate: "Drag beside the object to turn it";
8125
+ readonly scanMove: "Move your phone to scan it";
8126
+ readonly searching: "Point your phone at a surface";
8127
+ readonly select: "Tap the object to select it";
8145
8128
  };
8146
8129
  readonly catalog: {
8147
- readonly selectVariant: "Select variant";
8130
+ readonly selectVariant: "Pick a variant";
8148
8131
  readonly all: "All";
8149
8132
  readonly clear: "Clear";
8150
- readonly description: "Choose a product to place it in your room.";
8151
- readonly empty: "No products are available in this catalog.";
8152
- readonly loadingMore: "Loading more products…";
8153
- readonly noResults: "No results for “{{search}}”";
8154
- readonly noResultsHint: "Try a different search or browse all categories";
8155
- readonly open: "Open product catalog";
8156
- readonly placementFailed: "Could not load the selected material. Try again.";
8133
+ readonly description: "Pick something to try on.";
8134
+ readonly empty: "Nothing to try on here yet.";
8135
+ readonly loadingMore: "Loading more…";
8136
+ readonly noResults: "Nothing found for “{{search}}”";
8137
+ readonly noResultsHint: "Try another word, or browse every category";
8138
+ readonly open: "Add another object";
8139
+ readonly placementFailed: "That variant did not load. Try again.";
8157
8140
  readonly placing: "Placing…";
8158
- readonly productDetails: "Product details";
8141
+ readonly productDetails: "About this one";
8159
8142
  readonly searchPlaceholder: "Search";
8160
- readonly showAllItems: "Show all items";
8161
- readonly title: "Product catalog";
8162
- readonly tryInRoom: "Try it in your room";
8143
+ readonly showAllItems: "Show all";
8144
+ readonly title: "What else to try";
8145
+ readonly tryInRoom: "Try it on";
8163
8146
  readonly unnamedProduct: "Unnamed product";
8164
- readonly unnamedOwner: "Product catalog";
8165
- readonly viewOnSite: "View on site";
8147
+ readonly unnamedOwner: "Catalogue";
8148
+ readonly viewOnSite: "Open on the site";
8166
8149
  };
8167
8150
  readonly floor: {
8168
- readonly anchorError: "Could not anchor the object. Move your phone and try again.";
8169
- readonly deleteObject: "Delete object";
8151
+ readonly found: "Great, floor found";
8152
+ readonly anchorError: "That did not settle. Sweep your phone around and try again.";
8153
+ readonly catalog: "Tap the plus to add another";
8170
8154
  readonly done: "Done";
8171
- readonly gestures: "Drag the object to move it. Drag outside to rotate.";
8172
- readonly preview: "Move your phone to choose a position.";
8173
- readonly relocalizing: "Point your phone at the room again.";
8174
- readonly searching: "Move your phone slowly to find the floor.";
8175
- readonly select: "Tap the object to adjust it.";
8176
- readonly start: "Start AR";
8177
- readonly starting: "Starting…";
8155
+ readonly finish: "Tap away from the object to finish";
8156
+ readonly gestures: "Drag the object to move it. Drag beside it to turn it.";
8157
+ readonly move: "Drag the object to move it";
8158
+ readonly place: "Place here";
8159
+ readonly preview: "Aim where it should stand";
8160
+ readonly relocalizing: "Show the room again";
8161
+ readonly rotate: "Drag beside the object to turn it";
8162
+ readonly scanMove: "Move your phone to scan it";
8163
+ readonly searching: "Point your phone at the floor";
8164
+ readonly select: "Tap the object to select it";
8178
8165
  };
8179
8166
  readonly ceiling: {
8180
- readonly anchorError: "Could not anchor the object. Move your phone and try again.";
8181
- readonly calibrating: "Drag anywhere to move";
8167
+ readonly found: "Great, found the floor below it";
8168
+ readonly anchorError: "That did not settle. Sweep your phone around and try again.";
8169
+ readonly calibrating: "Fine-tune the height with the slider";
8170
+ readonly catalog: "Tap the plus to add another";
8182
8171
  readonly done: "Done";
8183
- readonly gestures: "Use the floor control or object to move. Drag outside to rotate.";
8172
+ readonly finish: "Tap away from the object to finish";
8173
+ readonly floorReady: "Pick the spot it will hang above";
8174
+ readonly gestures: "Drag the object to move it. Drag beside it to turn it.";
8175
+ readonly move: "Drag the object to move it";
8176
+ readonly place: "Done";
8177
+ readonly heightValue: "{{height}} m";
8184
8178
  readonly measuredHeight: "Ceiling {{height}} m";
8185
- readonly measureHeight: "Swipe up to measure";
8186
- readonly preview: "The saved ceiling height is applied. Confirm the position.";
8187
- readonly relocalizing: "Point your phone at the room again.";
8188
- readonly searching: "Step 1 of 3: aim at the floor below the suspension point, or at a tracked ceiling.";
8189
- readonly select: "Tap the object or floor control to adjust it.";
8190
- readonly setFloor: "Set floor point";
8191
- readonly setHeight: "Set ceiling height";
8192
- readonly start: "Start AR";
8193
- readonly starting: "Starting…";
8179
+ readonly measureHeight: "Swipe up to set the height";
8180
+ readonly preview: "We kept the height from last time — check it";
8181
+ readonly relocalizing: "Show the room again";
8182
+ readonly rotate: "Drag beside the object to turn it";
8183
+ readonly scanMove: "Sweep it slowly: the height is measured from the floor";
8184
+ readonly searching: "Point your phone at the floor below where it will hang";
8185
+ readonly select: "Tap the object to select it";
8186
+ readonly setFloor: "Place here";
8187
+ readonly setHeight: "Set the height";
8194
8188
  };
8195
8189
  readonly wall: {
8196
- readonly anchorError: "Could not anchor the resource. Move your phone and try again.";
8190
+ readonly found: "Great, wall found";
8191
+ readonly anchorError: "That did not settle. Sweep your phone around and try again.";
8192
+ readonly catalog: "Tap the plus to add another";
8197
8193
  readonly done: "Done";
8198
- readonly gestures: "Drag the resource to move it along the wall, or drag outside to rotate.";
8199
- readonly preview: "Aim at a wall. Drag to rotate, then confirm the position.";
8200
- readonly relocalizing: "Point your phone at the room again.";
8201
- readonly searching: "Move your phone slowly to find the floor or a wall.";
8202
- readonly select: "Tap the resource to adjust it.";
8203
- readonly start: "Start AR";
8204
- readonly startError: "Could not start AR. Check camera access and try again.";
8205
- readonly starting: "Starting…";
8206
- readonly unsupported: "Live AR is not supported on this device.";
8194
+ readonly finish: "Tap away from the object to finish";
8195
+ readonly gestures: "Drag the object to slide it along the wall. Drag the circle on the floor to move it down the room. Drag beside them to turn it.";
8196
+ readonly move: "Drag the object along the wall. The circle on the floor moves it down the room";
8197
+ readonly place: "Hang here";
8198
+ readonly preview: "Aim at the wall. Drag to turn it.";
8199
+ readonly relocalizing: "Show the room again";
8200
+ readonly rotate: "Drag beside the object to turn it";
8201
+ readonly scanMove: "Move your phone to scan it";
8202
+ readonly searching: "Point your phone at the wall";
8203
+ readonly select: "Tap the object to select it";
8204
+ readonly startError: "Try-on did not open. Check camera access and try again.";
8205
+ readonly unsupported: "Try-on does not work on this phone.";
8207
8206
  };
8208
8207
  readonly accessError: {
8209
- readonly 'not-found': "Object not found";
8210
- readonly unauthorized: "Invalid API key";
8211
- readonly unavailable: "Viewer temporarily unavailable";
8208
+ readonly 'not-found': "No such object";
8209
+ readonly unauthorized: "Try-on is not set up here";
8210
+ readonly unavailable: "Try-on is unavailable right now";
8212
8211
  };
8213
8212
  readonly runtimeState: {
8214
8213
  readonly cameraDenied: {
8215
- readonly body: "Allow camera access in your browser settings, then try again.";
8216
- readonly title: "Camera access is blocked";
8214
+ readonly body: "Allow the camera in your browser settings, then open try-on again.";
8215
+ readonly path: {
8216
+ readonly chrome: "Tap the icon left of the address → Permissions → Camera";
8217
+ readonly firefox: "Tap the lock icon left of the address → Camera";
8218
+ readonly safari: "Settings → Safari → Camera → Allow";
8219
+ };
8220
+ readonly title: "The camera is off";
8217
8221
  };
8218
8222
  readonly error: {
8219
- readonly body: "Close AR and try again later.";
8220
- readonly title: "Something went wrong";
8223
+ readonly body: "Close try-on and open it again.";
8224
+ readonly title: "Try-on did not open";
8221
8225
  };
8222
8226
  readonly rescan: {
8223
- readonly body: "Point your phone at the room. Your placed items will return when tracking recovers.";
8224
- readonly title: "Scan the room again";
8227
+ readonly body: "Point your phone around the room — everything you placed will come back.";
8228
+ readonly title: "Show the room again";
8225
8229
  };
8226
8230
  readonly unsupported: {
8227
- readonly body: "This device or browser does not support live AR.";
8228
- readonly title: "AR is not supported";
8231
+ readonly body: "This phone or browser does not support it.";
8232
+ readonly title: "Try-on does not work here";
8229
8233
  };
8230
8234
  readonly webview: {
8231
- readonly body: "Open this page in Chrome or Safari to use AR.";
8232
- readonly title: "Open in your browser";
8235
+ readonly body: "Open this page in Chrome or Safari: the camera is out of reach inside an app.";
8236
+ readonly title: "Open it in a browser";
8233
8237
  };
8234
8238
  };
8235
8239
  readonly data: {
@@ -8248,112 +8252,155 @@ declare const resources: {
8248
8252
  };
8249
8253
  ru: {
8250
8254
  translation: {
8251
- readonly title: "Дополненная реальность";
8252
- readonly comingSoon: "AR-просмотр скоро появится.";
8255
+ readonly title: "Примерка";
8256
+ readonly comingSoon: "Примерка скоро появится.";
8253
8257
  readonly close: "Закрыть";
8254
- readonly loadingModel: "Загрузка модели… {{progress}}%";
8258
+ readonly cancelPlacement: "Отменить";
8259
+ readonly deleteObject: "Убрать объект";
8260
+ readonly linkCopied: "Ссылка скопирована";
8261
+ readonly share: "Поделиться";
8262
+ readonly variant: "Вариант";
8263
+ readonly addObject: "Добавить объект";
8264
+ readonly preparingObject: "Подготавливаем объект… {{progress}}%";
8265
+ readonly loadingModel: "Загружаем… {{progress}}%";
8266
+ readonly scan: {
8267
+ readonly help: "Не находится? Посветите ярче или отойдите на шаг";
8268
+ };
8269
+ readonly intro: {
8270
+ readonly action: "Включить камеру";
8271
+ readonly body: "Включим камеру, и вы увидите его прямо в комнате.";
8272
+ readonly privacy: "Камера работает только во время примерки.";
8273
+ readonly starting: "Включаем…";
8274
+ readonly title: "Примерьте этот объект у себя";
8275
+ };
8255
8276
  readonly android: {
8256
- readonly description: "Разместите объект в своей комнате.";
8257
- readonly title: "Живая AR";
8277
+ readonly description: "Поставьте объект у себя в комнате.";
8278
+ readonly title: "Примерка в комнате";
8258
8279
  };
8259
8280
  readonly all: {
8260
- readonly anchorError: "Не удалось закрепить объект. Переместите телефон и попробуйте снова.";
8281
+ readonly found: "Отлично, поверхность найдена";
8282
+ readonly anchorError: "Объект не встал на место. Поводите телефоном и попробуйте ещё раз.";
8283
+ readonly catalog: "Нажмите «плюс», чтобы добавить ещё";
8261
8284
  readonly done: "Готово";
8262
- readonly gestures: "Двигайте объект по его поверхности, пустоту — для поворота.";
8263
- readonly preview: "Наведите на любую поверхность и подтвердите положение.";
8264
- readonly relocalizing: "Снова наведите телефон на комнату.";
8265
- readonly searching: "Медленно перемещайте телефон, чтобы найти пол, стену или потолок.";
8266
- readonly select: "Коснитесь объекта, чтобы настроить его.";
8267
- readonly start: "Запустить AR";
8268
- readonly starting: "Запуск…";
8285
+ readonly finish: "Коснитесь мимо объекта, чтобы закончить";
8286
+ readonly gestures: "Тяните объект, чтобы подвинуть. Проведите рядом с ним, чтобы повернуть.";
8287
+ readonly move: "Тяните объект, чтобы подвинуть";
8288
+ readonly place: "Разместить здесь";
8289
+ readonly preview: "Наведите на любую поверхность";
8290
+ readonly relocalizing: "Покажите комнату ещё раз";
8291
+ readonly rotate: "Проведите рядом с объектом, чтобы повернуть";
8292
+ readonly scanMove: "Медленно поводите по комнате";
8293
+ readonly searching: "Наведите камеру на поверхность";
8294
+ readonly select: "Коснитесь объекта, чтобы выбрать";
8269
8295
  };
8270
8296
  readonly catalog: {
8271
8297
  readonly selectVariant: "Выберите вариант";
8272
8298
  readonly all: "Все";
8273
8299
  readonly clear: "Очистить";
8274
- readonly description: "Выберите товар, чтобы разместить его в комнате.";
8275
- readonly empty: "В этом каталоге пока нет товаров.";
8276
- readonly loadingMore: "Загружаем ещё товары…";
8277
- readonly noResults: "Нет результатов для «{{search}}»";
8278
- readonly noResultsHint: "Попробуйте другой поиск или посмотрите все категории";
8279
- readonly open: "Открыть каталог товаров";
8280
- readonly placementFailed: "Не удалось загрузить выбранный материал. Попробуйте ещё раз.";
8281
- readonly placing: "Размещаем…";
8282
- readonly productDetails: "Детали товара";
8300
+ readonly description: "Выберите, что примерить.";
8301
+ readonly empty: "Здесь пока нечего примерить.";
8302
+ readonly loadingMore: "Загружаем ещё…";
8303
+ readonly noResults: "Ничего не нашли по запросу «{{search}}»";
8304
+ readonly noResultsHint: "Попробуйте другое слово или посмотрите все категории";
8305
+ readonly open: "Добавить ещё объект";
8306
+ readonly placementFailed: "Этот вариант не загрузился. Попробуйте ещё раз.";
8307
+ readonly placing: "Ставим…";
8308
+ readonly productDetails: "О товаре";
8283
8309
  readonly searchPlaceholder: "Поиск";
8284
- readonly showAllItems: "Показать все товары";
8285
- readonly title: "Каталог товаров";
8286
- readonly tryInRoom: "Посмотреть в комнате";
8310
+ readonly showAllItems: "Показать все";
8311
+ readonly title: "Что ещё примерить";
8312
+ readonly tryInRoom: "Примерить";
8287
8313
  readonly unnamedProduct: "Товар без названия";
8288
- readonly unnamedOwner: "Каталог товаров";
8314
+ readonly unnamedOwner: "Каталог";
8289
8315
  readonly viewOnSite: "Открыть на сайте";
8290
8316
  };
8291
8317
  readonly floor: {
8292
- readonly anchorError: "Не удалось закрепить объект. Переместите телефон и попробуйте снова.";
8293
- readonly deleteObject: "Удалить объект";
8318
+ readonly found: "Отлично, пол найден";
8319
+ readonly anchorError: "Объект не встал на место. Поводите телефоном и попробуйте ещё раз.";
8320
+ readonly catalog: "Нажмите «плюс», чтобы добавить ещё";
8294
8321
  readonly done: "Готово";
8295
- readonly gestures: "Тяните объект для перемещения, вне объекта — для поворота.";
8296
- readonly preview: "Перемещайте телефон, чтобы выбрать место.";
8297
- readonly relocalizing: "Снова наведите телефон на комнату.";
8298
- readonly searching: "Медленно перемещайте телефон, чтобы найти пол.";
8299
- readonly select: "Коснитесь объекта, чтобы настроить его.";
8300
- readonly start: "Запустить AR";
8301
- readonly starting: "Запуск…";
8322
+ readonly finish: "Коснитесь мимо объекта, чтобы закончить";
8323
+ readonly gestures: "Тяните объект, чтобы подвинуть. Проведите рядом с ним, чтобы повернуть.";
8324
+ readonly move: "Тяните объект, чтобы подвинуть";
8325
+ readonly place: "Поставить здесь";
8326
+ readonly preview: "Наведите, куда поставить";
8327
+ readonly relocalizing: "Покажите комнату ещё раз";
8328
+ readonly rotate: "Проведите рядом с объектом, чтобы повернуть";
8329
+ readonly scanMove: "Медленно поводите по полу";
8330
+ readonly searching: "Наведите камеру на пол";
8331
+ readonly select: "Коснитесь объекта, чтобы выбрать";
8302
8332
  };
8303
8333
  readonly ceiling: {
8304
- readonly anchorError: "Не удалось закрепить объект. Переместите телефон и попробуйте снова.";
8305
- readonly calibrating: "Проведите где угодно, чтобы переместить";
8334
+ readonly found: "Отлично, пол под объектом найден";
8335
+ readonly anchorError: "Объект не встал на место. Поводите телефоном и попробуйте ещё раз.";
8336
+ readonly calibrating: "Уточните высоту ползунком";
8337
+ readonly catalog: "Нажмите «плюс», чтобы добавить ещё";
8306
8338
  readonly done: "Готово";
8307
- readonly gestures: "Двигайте напольный контрол или объект, пустоту — для поворота.";
8339
+ readonly finish: "Коснитесь мимо объекта, чтобы закончить";
8340
+ readonly floorReady: "Укажите место, над которым будет висеть объект";
8341
+ readonly gestures: "Тяните объект, чтобы подвинуть. Проведите рядом с ним, чтобы повернуть.";
8342
+ readonly move: "Тяните объект, чтобы подвинуть";
8343
+ readonly place: "Готово";
8344
+ readonly heightValue: "{{height}} м";
8308
8345
  readonly measuredHeight: "Потолок {{height}} м";
8309
- readonly measureHeight: "Проведите вверх для измерения";
8310
- readonly preview: "Сохранённая высота потолка применена. Подтвердите позицию.";
8311
- readonly relocalizing: "Снова наведите телефон на комнату.";
8312
- readonly searching: "Шаг 1 из 3: наведите на пол под точкой подвеса или на распознанный потолок.";
8313
- readonly select: "Коснитесь объекта или напольного контрола, чтобы настроить его.";
8314
- readonly setFloor: "Задать точку на полу";
8315
- readonly setHeight: "Задать высоту потолка";
8316
- readonly start: "Запустить AR";
8317
- readonly starting: "Запуск…";
8346
+ readonly measureHeight: "Проведите вверх, чтобы задать высоту";
8347
+ readonly preview: "Высоту взяли из прошлого раза — проверьте её";
8348
+ readonly relocalizing: "Покажите комнату ещё раз";
8349
+ readonly rotate: "Проведите рядом с объектом, чтобы повернуть";
8350
+ readonly scanMove: "Медленно поводите по полу: от него отмерим высоту";
8351
+ readonly searching: "Наведите камеру на пол под местом, где повесите объект";
8352
+ readonly select: "Коснитесь объекта, чтобы выбрать";
8353
+ readonly setFloor: "Разместить здесь";
8354
+ readonly setHeight: "Задать высоту";
8318
8355
  };
8319
8356
  readonly wall: {
8320
- readonly anchorError: "Не удалось закрепить ресурс. Переместите телефон и попробуйте снова.";
8357
+ readonly found: "Отлично, стена найдена";
8358
+ readonly anchorError: "Объект не встал на место. Поводите телефоном и попробуйте ещё раз.";
8359
+ readonly catalog: "Нажмите «плюс», чтобы добавить ещё";
8321
8360
  readonly done: "Готово";
8322
- readonly gestures: "Тяните ресурс, чтобы двигать его по стене, пустое место — чтобы повернуть.";
8323
- readonly preview: "Наведите на стену. Потяните для поворота, затем подтвердите положение.";
8324
- readonly relocalizing: "Снова наведите телефон на комнату.";
8325
- readonly searching: "Медленно перемещайте телефон, чтобы найти пол или стену.";
8326
- readonly select: "Коснитесь ресурса, чтобы настроить его.";
8327
- readonly start: "Запустить AR";
8328
- readonly startError: "Не удалось запустить AR. Проверьте доступ к камере и попробуйте снова.";
8329
- readonly starting: "Запуск…";
8330
- readonly unsupported: "Живая AR не поддерживается на этом устройстве.";
8361
+ readonly finish: "Коснитесь мимо объекта, чтобы закончить";
8362
+ readonly gestures: "Тяните объект, чтобы двигать по стене. Круг на полу — чтобы перенести по комнате. Проведите рядом, чтобы повернуть.";
8363
+ readonly move: "Тяните объект вдоль стены. Круг на полу перенесёт его по комнате";
8364
+ readonly place: "Повесить здесь";
8365
+ readonly preview: "Наведите на стену. Потяните, чтобы повернуть.";
8366
+ readonly relocalizing: "Покажите комнату ещё раз";
8367
+ readonly rotate: "Проведите рядом с объектом, чтобы повернуть";
8368
+ readonly scanMove: "Медленно поводите по стене";
8369
+ readonly searching: "Наведите камеру на стену";
8370
+ readonly select: "Коснитесь объекта, чтобы выбрать";
8371
+ readonly startError: "Примерка не открылась. Проверьте доступ к камере и попробуйте ещё раз.";
8372
+ readonly unsupported: "На этом телефоне примерка не работает.";
8331
8373
  };
8332
8374
  readonly accessError: {
8333
- readonly 'not-found': "Объект не найден";
8334
- readonly unauthorized: "Неверный API-ключ";
8335
- readonly unavailable: "Просмотр временно недоступен";
8375
+ readonly 'not-found': "Такого объекта нет";
8376
+ readonly unauthorized: "Здесь примерка не настроена";
8377
+ readonly unavailable: "Примерка временно недоступна";
8336
8378
  };
8337
8379
  readonly runtimeState: {
8338
8380
  readonly cameraDenied: {
8339
- readonly body: "Разрешите доступ к камере в настройках браузера и попробуйте снова.";
8340
- readonly title: "Доступ к камере заблокирован";
8381
+ readonly body: "Разрешите камеру в настройках браузера и откройте примерку заново.";
8382
+ readonly path: {
8383
+ readonly chrome: "Нажмите значок слева от адреса → «Разрешения» → «Камера»";
8384
+ readonly firefox: "Нажмите значок замка слева от адреса → «Камера»";
8385
+ readonly safari: "Настройки → Safari → «Камера» → «Разрешить»";
8386
+ };
8387
+ readonly title: "Камера выключена";
8341
8388
  };
8342
8389
  readonly error: {
8343
- readonly body: "Закройте AR и попробуйте снова позже.";
8344
- readonly title: "Что-то пошло не так";
8390
+ readonly body: "Закройте примерку и откройте её заново.";
8391
+ readonly title: "Примерка не открылась";
8345
8392
  };
8346
8393
  readonly rescan: {
8347
- readonly body: "Наведите телефон на комнату. Размещённые товары вернутся после восстановления трекинга.";
8348
- readonly title: "Отсканируйте комнату заново";
8394
+ readonly body: "Наведите телефон на комнату — всё, что вы поставили, вернётся на место.";
8395
+ readonly title: "Покажите комнату ещё раз";
8349
8396
  };
8350
8397
  readonly unsupported: {
8351
- readonly body: "Это устройство или браузер не поддерживает живую AR.";
8352
- readonly title: "AR не поддерживается";
8398
+ readonly body: "Этот телефон или браузер её не поддерживает.";
8399
+ readonly title: "Здесь примерка не работает";
8353
8400
  };
8354
8401
  readonly webview: {
8355
- readonly body: "Откройте эту страницу в Chrome или Safari, чтобы использовать AR.";
8356
- readonly title: "Откройте во внешнем браузере";
8402
+ readonly body: "Откройте эту страницу в Chrome или Safari: внутри приложения камера недоступна.";
8403
+ readonly title: "Откройте в браузере";
8357
8404
  };
8358
8405
  };
8359
8406
  readonly data: {
@@ -8922,6 +8969,17 @@ declare const SubtractiveBlending: 3;
8922
8969
  */
8923
8970
  export declare function supportsArAppClip(navigatorInfo?: ArNavigatorInfo | null): boolean;
8924
8971
 
8972
+ /**
8973
+ * Whether the browser runs a WebXR immersive AR session, in its own words.
8974
+ *
8975
+ * Asked of the browser rather than read off its user agent. A user agent names
8976
+ * the browser, not what it can do, and the in-app browsers that do run WebXR
8977
+ * name themselves after their app: picked by name, they were sent to SLAM, or
8978
+ * out of AR altogether. Never throws — a browser that cannot answer, such as
8979
+ * one outside a secure context, cannot run a session either.
8980
+ */
8981
+ export declare function supportsImmersiveAr(xr?: ImmersiveArSystemLike | undefined): Promise<boolean>;
8982
+
8925
8983
  export declare interface SurfaceHit {
8926
8984
  kind: SurfaceKind;
8927
8985
  nativeHit?: unknown;
@@ -8960,6 +9018,13 @@ export declare interface SurfaceTrackerSession<NativeSession = unknown, Frame =
8960
9018
  createAnchor: (hit: SurfaceHit) => Promise<PlacementAnchor<Frame>>;
8961
9019
  end: () => Promise<void>;
8962
9020
  getCenterHit: (frame: Frame) => SurfaceHit | null;
9021
+ /**
9022
+ * Set by a runtime that detects no vertical planes and only guesses a wall
9023
+ * from the loose points it tracks. A plain painted wall gives it nothing to
9024
+ * guess from, so the wall mechanic assumes one in front of the camera once
9025
+ * the search has gone on too long (see `createVirtualWallHit`).
9026
+ */
9027
+ readonly guessesWalls?: boolean;
8963
9028
  isTracking: (frame: Frame) => boolean;
8964
9029
  /**
8965
9030
  * Tells the runtime which mechanic is being placed right now.