@zappar/zappar-cv 3.12.0 → 3.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,8 +18,8 @@ npm i @zappar/zappar-cv
18
18
 
19
19
  You can use our CDN from within your HTML:
20
20
  ```
21
- <script src="https://libs.zappar.com/zappar-cv/3.12.0/zappar-cv.js"></script>
21
+ <script src="https://libs.zappar.com/zappar-cv/3.14.1/zappar-cv.js"></script>
22
22
  ```
23
23
 
24
24
  Or you can download and host our standalone JavaScript bundle:
25
- [https://libs.zappar.com/zappar-cv/3.12.0/zappar-cv.zip](https://libs.zappar.com/zappar-cv/3.12.0/zappar-cv.zip)
25
+ [https://libs.zappar.com/zappar-cv/3.14.1/zappar-cv.zip](https://libs.zappar.com/zappar-cv/3.14.1/zappar-cv.zip)
@@ -47,4 +47,5 @@ export interface Additional {
47
47
  cookies_permitted: (p: boolean) => void;
48
48
  world_tracker_points_data_matrix(wt: zappar_world_tracker_t, screenWidth: number, screenHeight: number, mirror: boolean): Float32Array;
49
49
  in_app_clip: () => boolean;
50
+ webxr_camera_source_dom_overlay_element_set: (element: Element | null) => void;
50
51
  }
@@ -0,0 +1 @@
1
+ export declare const chromeSettingsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16px\" viewBox=\"0 -960 960 960\" width=\"16px\" fill=\"white\"><path d=\"M696-144q-60.48 0-102.24-41.76T552-288q0-60.48 41.76-102.24T696-432q60.48 0 102.24 41.76T840-288q0 60.48-41.76 102.24T696-144Zm.12-72Q726-216 747-237.12q21-21.12 21-51T746.88-339q-21.12-21-51-21T645-338.88q-21 21.12-21 51T645.12-237q21.12 21 51 21ZM168-252v-72h312v72H168Zm96-276q-60.48 0-102.24-41.76T120-672q0-60.48 41.76-102.24T264-816q60.48 0 102.24 41.76T408-672q0 60.48-41.76 102.24T264-528Zm.12-72Q294-600 315-621.12q21-21.12 21-51T314.88-723q-21.12-21-51-21T213-722.88q-21 21.12-21 51T213.12-621q21.12 21 51 21ZM480-636v-72h312v72H480Zm216 348ZM264-672Z\"/></svg>";
@@ -0,0 +1 @@
1
+ export const chromeSettingsIcon = `<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 -960 960 960" width="16px" fill="white"><path d="M696-144q-60.48 0-102.24-41.76T552-288q0-60.48 41.76-102.24T696-432q60.48 0 102.24 41.76T840-288q0 60.48-41.76 102.24T696-144Zm.12-72Q726-216 747-237.12q21-21.12 21-51T746.88-339q-21.12-21-51-21T645-338.88q-21 21.12-21 51T645.12-237q21.12 21 51 21ZM168-252v-72h312v72H168Zm96-276q-60.48 0-102.24-41.76T120-672q0-60.48 41.76-102.24T264-816q60.48 0 102.24 41.76T408-672q0 60.48-41.76 102.24T264-528Zm.12-72Q294-600 315-621.12q21-21.12 21-51T314.88-723q-21.12-21-51-21T213-722.88q-21 21.12-21 51T213.12-621q21.12 21 51 21ZM480-636v-72h312v72H480Zm216 348ZM264-672Z"/></svg>`;
package/lib/native.js CHANGED
@@ -996,7 +996,7 @@ export function initialize(opts) {
996
996
  }
997
997
  mat4.multiply(res, cameraPose, res);
998
998
  return res;
999
- }, html_element_source_create: (pipeline, elm) => HTMLElementSource.createVideoElementSource(pipeline, elm), html_element_source_start: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.start(); }, html_element_source_pause: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.pause(); }, html_element_source_destroy: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.destroy(); }, sequence_source_create: p => SequenceSource.create(p), sequence_source_load_from_memory: (o, data) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.loadFromMemory(data); }, sequence_source_pause: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.pause(); }, sequence_source_start: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.start(); }, sequence_source_max_playback_fps_set: (o, fps) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.maxPlaybackFpsSet(fps); }, sequence_source_time_set: (o, t) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.setTime(t); }, sequence_source_destroy: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.destroy(); }, permission_granted_all: permissionGrantedAll, permission_granted_camera: permissionGrantedCamera, permission_granted_motion: permissionGrantedMotion, permission_denied_any: permissionDeniedAny, permission_denied_camera: permissionDeniedCamera, permission_denied_motion: permissionDeniedMotion, permission_request_motion: permissionRequestMotion, permission_request_camera: permissionRequestCamera, permission_request_all: permissionRequestAll, permission_request_ui: permissionRequestUI, permission_request_ui_promise: permissionRequestUI, permission_denied_ui: permissionDeniedUI, browser_incompatible: compatibility.incompatible, browser_incompatible_ui: compatibility.incompatible_ui, in_app_clip: () => BridgedCameraSource.IsSupported(), log_level_set: l => {
999
+ }, html_element_source_create: (pipeline, elm) => HTMLElementSource.createVideoElementSource(pipeline, elm), html_element_source_start: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.start(); }, html_element_source_pause: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.pause(); }, html_element_source_destroy: o => { var _a; return (_a = HTMLElementSource.getVideoElementSource(o)) === null || _a === void 0 ? void 0 : _a.destroy(); }, sequence_source_create: p => SequenceSource.create(p), sequence_source_load_from_memory: (o, data) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.loadFromMemory(data); }, sequence_source_pause: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.pause(); }, sequence_source_start: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.start(); }, sequence_source_max_playback_fps_set: (o, fps) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.maxPlaybackFpsSet(fps); }, sequence_source_time_set: (o, t) => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.setTime(t); }, sequence_source_destroy: o => { var _a; return (_a = SequenceSource.get(o)) === null || _a === void 0 ? void 0 : _a.destroy(); }, permission_granted_all: permissionGrantedAll, permission_granted_camera: permissionGrantedCamera, permission_granted_motion: permissionGrantedMotion, permission_denied_any: permissionDeniedAny, permission_denied_camera: permissionDeniedCamera, permission_denied_motion: permissionDeniedMotion, permission_request_motion: permissionRequestMotion, permission_request_camera: permissionRequestCamera, permission_request_all: permissionRequestAll, permission_request_ui: permissionRequestUI, permission_request_ui_promise: permissionRequestUI, permission_denied_ui: permissionDeniedUI, browser_incompatible: compatibility.incompatible, browser_incompatible_ui: compatibility.incompatible_ui, in_app_clip: () => BridgedCameraSource.IsSupported(), webxr_camera_source_dom_overlay_element_set: elm => WebXRCameraSource.setDomOverlayElement(elm), log_level_set: l => {
1000
1000
  setLogLevel(l);
1001
1001
  c.impl.log_level_set(l);
1002
1002
  }, cookies_permitted: p => {
package/lib/permission.js CHANGED
@@ -247,9 +247,9 @@ function permissionDeniedUIIOS(options) {
247
247
  }
248
248
  </style>
249
249
  <div class="zappar-inner">
250
- <div class="zappar-title">${(_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Permission is Needed'}</div>
251
- <div class="zappar-text">${(_c = (_b = options === null || options === void 0 ? void 0 : options.descriptionIOS) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.description) !== null && _c !== void 0 ? _c : "Permission to access your device's camera and motion sensors is necessary for this experience. Please reload the page to try again."}</div>
252
- <button id="zappar-permission-reload-button">${(_d = options === null || options === void 0 ? void 0 : options.button) !== null && _d !== void 0 ? _d : 'Reload'}</button>
250
+ <div class="zappar-title">${(_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : tr(STRINGS.PermissionDeniedTitle)}</div>
251
+ <div class="zappar-text">${(_c = (_b = options === null || options === void 0 ? void 0 : options.descriptionIOS) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.description) !== null && _c !== void 0 ? _c : tr(STRINGS.PermissionDeniedDescriptionIOS)}</div>
252
+ <button id="zappar-permission-reload-button">${(_d = options === null || options === void 0 ? void 0 : options.button) !== null && _d !== void 0 ? _d : tr(STRINGS.PermissionDeniedButton)}</button>
253
253
  </div>
254
254
  `;
255
255
  document.body.append(div);
@@ -299,9 +299,9 @@ function permissionDeniedUIChrome(options) {
299
299
  }
300
300
  </style>
301
301
  <div class="zappar-inner">
302
- <div class="zappar-title">${(_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Permission is Needed'}</div>
303
- <div class="zappar-text">${(_c = (_b = options === null || options === void 0 ? void 0 : options.descriptionChrome) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.description) !== null && _c !== void 0 ? _c : `Permission to access your device's camera and motion sensors is necessary for this experience.<br/><br/>To grant access, please tap the <svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 -960 960 960" width="16px" fill="white"><path d="M696-144q-60.48 0-102.24-41.76T552-288q0-60.48 41.76-102.24T696-432q60.48 0 102.24 41.76T840-288q0 60.48-41.76 102.24T696-144Zm.12-72Q726-216 747-237.12q21-21.12 21-51T746.88-339q-21.12-21-51-21T645-338.88q-21 21.12-21 51T645.12-237q21.12 21 51 21ZM168-252v-72h312v72H168Zm96-276q-60.48 0-102.24-41.76T120-672q0-60.48 41.76-102.24T264-816q60.48 0 102.24 41.76T408-672q0 60.48-41.76 102.24T264-528Zm.12-72Q294-600 315-621.12q21-21.12 21-51T314.88-723q-21.12-21-51-21T213-722.88q-21 21.12-21 51T213.12-621q21.12 21 51 21ZM480-636v-72h312v72H480Zm216 348ZM264-672Z"/></svg> button in the address bar of your browser, then "Permissions", and finally "Reset permissions". You can then reload the page to try again.`}</div>
304
- <button id="zappar-permission-reload-button">${(_d = options === null || options === void 0 ? void 0 : options.button) !== null && _d !== void 0 ? _d : 'Reload'}</button>
302
+ <div class="zappar-title">${(_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : tr(STRINGS.PermissionDeniedTitle)}</div>
303
+ <div class="zappar-text">${(_c = (_b = options === null || options === void 0 ? void 0 : options.descriptionChrome) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.description) !== null && _c !== void 0 ? _c : tr(STRINGS.PermissionDeniedDescriptionChrome)}</div>
304
+ <button id="zappar-permission-reload-button">${(_d = options === null || options === void 0 ? void 0 : options.button) !== null && _d !== void 0 ? _d : tr(STRINGS.PermissionDeniedButton)}</button>
305
305
  </div>
306
306
  `;
307
307
  document.body.append(div);
package/lib/profile.js CHANGED
@@ -11,8 +11,8 @@ export let profile = {
11
11
  showGyroPermissionsWarningIfNecessary: false,
12
12
  showSafariPermissionsResetIfNecessary: false,
13
13
  requestHighFrameRate: false,
14
- videoWidth: 1280,
15
- videoHeight: 720,
14
+ videoWidth: 640,
15
+ videoHeight: 480,
16
16
  videoElementInDOM: false,
17
17
  preferMediaStreamTrackProcessorCamera: false,
18
18
  preferImageBitmapCamera: false,
@@ -47,4 +47,5 @@ export interface Additional {
47
47
  cookies_permitted: (p: boolean) => void;
48
48
  world_tracker_points_data_matrix(wt: zappar_world_tracker_t, screenWidth: number, screenHeight: number, mirror: boolean): Float32Array;
49
49
  in_app_clip: () => boolean;
50
+ webxr_camera_source_dom_overlay_element_set: (element: Element | null) => void;
50
51
  }
@@ -0,0 +1 @@
1
+ export declare const chromeSettingsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16px\" viewBox=\"0 -960 960 960\" width=\"16px\" fill=\"white\"><path d=\"M696-144q-60.48 0-102.24-41.76T552-288q0-60.48 41.76-102.24T696-432q60.48 0 102.24 41.76T840-288q0 60.48-41.76 102.24T696-144Zm.12-72Q726-216 747-237.12q21-21.12 21-51T746.88-339q-21.12-21-51-21T645-338.88q-21 21.12-21 51T645.12-237q21.12 21 51 21ZM168-252v-72h312v72H168Zm96-276q-60.48 0-102.24-41.76T120-672q0-60.48 41.76-102.24T264-816q60.48 0 102.24 41.76T408-672q0 60.48-41.76 102.24T264-528Zm.12-72Q294-600 315-621.12q21-21.12 21-51T314.88-723q-21.12-21-51-21T213-722.88q-21 21.12-21 51T213.12-621q21.12 21 51 21ZM480-636v-72h312v72H480Zm216 348ZM264-672Z\"/></svg>";
package/lib/src/tr.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export declare enum STRINGS {
2
2
  PermissionTitle = 0,
3
3
  PermissionDescription = 1,
4
- PermissionButton = 2
4
+ PermissionButton = 2,
5
+ PermissionDeniedTitle = 3,
6
+ PermissionDeniedDescriptionChrome = 4,
7
+ PermissionDeniedDescriptionIOS = 5,
8
+ PermissionDeniedButton = 6
5
9
  }
6
10
  export declare function tr(str: STRINGS): string;
@@ -1 +1 @@
1
- export declare const VERSION = "3.12.0";
1
+ export declare const VERSION = "3.14.1";
@@ -58,6 +58,8 @@ export declare class WebXRCameraSource extends Source {
58
58
  private _customAnchors;
59
59
  private _groundH;
60
60
  static IsSupported(): boolean;
61
+ private static _domOverlayElement;
62
+ static setDomOverlayElement(element: Element | null): void;
61
63
  constructor(_impl: zappar_camera_source_t, _pipeline: zappar_pipeline_t);
62
64
  destroy(): void;
63
65
  setProfile(p: camera_profile_t): void;
package/lib/tr.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export declare enum STRINGS {
2
2
  PermissionTitle = 0,
3
3
  PermissionDescription = 1,
4
- PermissionButton = 2
4
+ PermissionButton = 2,
5
+ PermissionDeniedTitle = 3,
6
+ PermissionDeniedDescriptionChrome = 4,
7
+ PermissionDeniedDescriptionIOS = 5,
8
+ PermissionDeniedButton = 6
5
9
  }
6
10
  export declare function tr(str: STRINGS): string;
package/lib/tr.js CHANGED
@@ -1,8 +1,13 @@
1
+ import { chromeSettingsIcon } from "./chromesettingsicon";
1
2
  export var STRINGS;
2
3
  (function (STRINGS) {
3
4
  STRINGS[STRINGS["PermissionTitle"] = 0] = "PermissionTitle";
4
5
  STRINGS[STRINGS["PermissionDescription"] = 1] = "PermissionDescription";
5
6
  STRINGS[STRINGS["PermissionButton"] = 2] = "PermissionButton";
7
+ STRINGS[STRINGS["PermissionDeniedTitle"] = 3] = "PermissionDeniedTitle";
8
+ STRINGS[STRINGS["PermissionDeniedDescriptionChrome"] = 4] = "PermissionDeniedDescriptionChrome";
9
+ STRINGS[STRINGS["PermissionDeniedDescriptionIOS"] = 5] = "PermissionDeniedDescriptionIOS";
10
+ STRINGS[STRINGS["PermissionDeniedButton"] = 6] = "PermissionDeniedButton";
6
11
  })(STRINGS || (STRINGS = {}));
7
12
  function parseLanguage(inp) {
8
13
  const [lang, locale] = inp.toLowerCase().split("-");
@@ -16,13 +21,32 @@ export function tr(str) {
16
21
  case STRINGS.PermissionTitle: return "Ya casi...";
17
22
  case STRINGS.PermissionDescription: return "Para brindar esta experiencia de realidad aumentada, necesitamos acceso a la cámara y los sensores de movimiento de su dispositivo.";
18
23
  case STRINGS.PermissionButton: return "Permitir acceso";
24
+ case STRINGS.PermissionDeniedTitle: return "Se Necesita Permiso";
25
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Es necesario el permiso para acceder a la cámara y los sensores de movimiento de su dispositivo para esta experiencia.<br/><br/>Para otorgar acceso, toque el botón ${chromeSettingsIcon} en la barra de direcciones de su navegador, luego "Permisos" y finalmente "Restablecer permisos". Luego puede recargar la página para intentarlo de nuevo.`;
26
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Es necesario el permiso para acceder a la cámara y los sensores de movimiento de su dispositivo para esta experiencia. Recargue la página para intentarlo de nuevo.";
27
+ case STRINGS.PermissionDeniedButton: return "Recargar";
28
+ }
29
+ break;
30
+ case "ca":
31
+ switch (str) {
32
+ case STRINGS.PermissionTitle: return "Ja gairebé hi som...";
33
+ case STRINGS.PermissionDescription: return "Per oferir aquesta experiència immersiva, necessitem accedir a la càmera i als sensors de moviment del teu dispositiu.";
34
+ case STRINGS.PermissionButton: return "Permet l'accés";
35
+ case STRINGS.PermissionDeniedTitle: return "Cal permís";
36
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Cal permís per accedir a la càmera i als sensors de moviment del teu dispositiu per a aquesta experiència.<br/><br/>Per concedir l'accés, toca el botó ${chromeSettingsIcon} a la barra d'adreces del navegador, després "Permisos" i finalment "Restableix els permisos". Després podràs tornar a carregar la pàgina per provar-ho de nou.`;
37
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Cal permís per accedir a la càmera i als sensors de moviment del teu dispositiu per a aquesta experiència. Torna a carregar la pàgina per provar-ho de nou.";
38
+ case STRINGS.PermissionDeniedButton: return "Torna a carregar";
19
39
  }
20
40
  break;
21
41
  case "de":
22
42
  switch (str) {
23
- case STRINGS.PermissionTitle: return "Fast am Ziel..";
43
+ case STRINGS.PermissionTitle: return "Fast am Ziel...";
24
44
  case STRINGS.PermissionDescription: return "Um dir dieses Augmented Reality Erlebnis zu liefern, brauchen wir Zugriff auf die Kamera und Bewegungssensoren deines Gerätes.";
25
45
  case STRINGS.PermissionButton: return "Gewähre Zugriff";
46
+ case STRINGS.PermissionDeniedTitle: return "Berechtigung Erforderlich";
47
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Die Berechtigung zum Zugriff auf die Kamera und Bewegungssensoren deines Geräts ist für diese Erfahrung erforderlich.<br/><br/>Um den Zugriff zu gewähren, tippe bitte auf die Schaltfläche ${chromeSettingsIcon} in der Adressleiste deines Browsers, dann auf "Berechtigungen" und schließlich auf "Berechtigungen zurücksetzen". Du kannst dann die Seite neu laden, um es erneut zu versuchen.`;
48
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Die Berechtigung zum Zugriff auf die Kamera und Bewegungssensoren deines Geräts ist für diese Erfahrung erforderlich. Bitte lade die Seite neu, um es erneut zu versuchen.";
49
+ case STRINGS.PermissionDeniedButton: return "Neu laden";
26
50
  }
27
51
  break;
28
52
  case "pt":
@@ -30,6 +54,296 @@ export function tr(str) {
30
54
  case STRINGS.PermissionTitle: return "Está quase!";
31
55
  case STRINGS.PermissionDescription: return "Esta experiência de realidade aumentada precisa de acesso à câmera e aos sensores de movimento deste dispositivo.";
32
56
  case STRINGS.PermissionButton: return "Permitir acesso";
57
+ case STRINGS.PermissionDeniedTitle: return "Permissão Necessária";
58
+ case STRINGS.PermissionDeniedDescriptionChrome: return `A permissão para acessar a câmera e os sensores de movimento do seu dispositivo é necessária para esta experiência.<br/><br/>Para conceder acesso, toque no botão ${chromeSettingsIcon} na barra de endereços do seu navegador, depois em "Permissões" e, por fim, em "Redefinir permissões". Você pode então recarregar a página para tentar novamente.`;
59
+ case STRINGS.PermissionDeniedDescriptionIOS: return "A permissão para acessar a câmera e os sensores de movimento do seu dispositivo é necessária para esta experiência. Recarregue a página para tentar novamente.";
60
+ case STRINGS.PermissionDeniedButton: return "Recarregar";
61
+ }
62
+ break;
63
+ case "fr":
64
+ switch (str) {
65
+ case STRINGS.PermissionTitle: return "Presque là...";
66
+ case STRINGS.PermissionDescription: return "Pour vous offrir cette expérience immersive, nous avons besoin d'accéder à la caméra et aux capteurs de mouvement de votre appareil.";
67
+ case STRINGS.PermissionButton: return "Autoriser l'accès";
68
+ case STRINGS.PermissionDeniedTitle: return "Autorisation Requise";
69
+ case STRINGS.PermissionDeniedDescriptionChrome: return `La permission d'accéder à la caméra et aux capteurs de mouvement de votre appareil est nécessaire pour cette expérience.<br/><br/>Pour accorder l'accès, appuyez sur le bouton ${chromeSettingsIcon} dans la barre d'adresse de votre navigateur, puis sur "Autorisations", et enfin sur "Réinitialiser les autorisations". Vous pouvez ensuite recharger la page pour réessayer.`;
70
+ case STRINGS.PermissionDeniedDescriptionIOS: return "La permission d'accéder à la caméra et aux capteurs de mouvement de votre appareil est nécessaire pour cette expérience. Veuillez recharger la page pour réessayer.";
71
+ case STRINGS.PermissionDeniedButton: return "Recharger";
72
+ }
73
+ break;
74
+ case "ja":
75
+ switch (str) {
76
+ case STRINGS.PermissionTitle: return "もうすぐです...";
77
+ case STRINGS.PermissionDescription: return "この没入型体験を提供するために、デバイスのカメラとモーションセンサーへのアクセスが必要です。";
78
+ case STRINGS.PermissionButton: return "アクセスを許可";
79
+ case STRINGS.PermissionDeniedTitle: return "許可が必要です";
80
+ case STRINGS.PermissionDeniedDescriptionChrome: return `この体験にはデバイスのカメラとモーションセンサーへのアクセス許可が必要です。<br/><br/>アクセスを許可するには、ブラウザのアドレスバーにある${chromeSettingsIcon}ボタンをタップし、「権限」、「権限をリセット」の順にタップしてください。その後、ページを再読み込みして再試行できます。`;
81
+ case STRINGS.PermissionDeniedDescriptionIOS: return "この体験にはデバイスのカメラとモーションセンサーへのアクセス許可が必要です。ページを再読み込みして再試行してください。";
82
+ case STRINGS.PermissionDeniedButton: return "再読み込み";
83
+ }
84
+ break;
85
+ case "ko":
86
+ switch (str) {
87
+ case STRINGS.PermissionTitle: return "거의 다 왔습니다...";
88
+ case STRINGS.PermissionDescription: return "이 몰입형 경험을 제공하기 위해 기기의 카메라와 모션 센서에 대한 접근 권한이 필요합니다.";
89
+ case STRINGS.PermissionButton: return "접근 허용";
90
+ case STRINGS.PermissionDeniedTitle: return "권한이 필요합니다";
91
+ case STRINGS.PermissionDeniedDescriptionChrome: return `이 경험을 위해 기기의 카메라와 모션 센서에 접근하기 위한 권한이 필요합니다.<br/><br/>접근을 허용하려면 브라우저 주소창의 ${chromeSettingsIcon} 버튼을 탭한 후 "권한", "권한 재설정" 순으로 탭하세요. 그런 다음 페이지를 새로 고침하여 다시 시도할 수 있습니다.`;
92
+ case STRINGS.PermissionDeniedDescriptionIOS: return "이 경험을 위해 기기의 카메라와 모션 센서에 접근하기 위한 권한이 필요합니다. 페이지를 새로 고침하여 다시 시도하세요.";
93
+ case STRINGS.PermissionDeniedButton: return "새로 고침";
94
+ }
95
+ break;
96
+ case "zh":
97
+ switch (str) {
98
+ case STRINGS.PermissionTitle: return "即将完成...";
99
+ case STRINGS.PermissionDescription: return "为了提供这种沉浸式体验,我们需要访问您设备的摄像头和运动传感器。";
100
+ case STRINGS.PermissionButton: return "授予访问权限";
101
+ case STRINGS.PermissionDeniedTitle: return "需要权限";
102
+ case STRINGS.PermissionDeniedDescriptionChrome: return `访问您设备的摄像头和运动传感器的权限对于此体验是必要的。<br/><br/>要授予访问权限,请点击浏览器地址栏中的 ${chromeSettingsIcon} 按钮,然后点击"权限",最后点击"重置权限"。您可以重新加载页面再次尝试。`;
103
+ case STRINGS.PermissionDeniedDescriptionIOS: return "访问您设备的摄像头和运动传感器的权限对于此体验是必要的。请重新加载页面再次尝试。";
104
+ case STRINGS.PermissionDeniedButton: return "重新加载";
105
+ }
106
+ break;
107
+ case "ar":
108
+ switch (str) {
109
+ case STRINGS.PermissionTitle: return "اقتربنا...";
110
+ case STRINGS.PermissionDescription: return "لتوفير هذه التجربة الغامرة، نحتاج إلى الوصول إلى كاميرا جهازك وأجهزة استشعار الحركة.";
111
+ case STRINGS.PermissionButton: return "منح الوصول";
112
+ case STRINGS.PermissionDeniedTitle: return "الإذن مطلوب";
113
+ case STRINGS.PermissionDeniedDescriptionChrome: return `إذن الوصول إلى كاميرا جهازك وأجهزة استشعار الحركة ضروري لهذه التجربة.<br/><br/>لمنح الوصول، اضغط على زر ${chromeSettingsIcon} في شريط عنوان متصفحك، ثم "الأذونات"، وأخيراً "إعادة تعيين الأذونات". يمكنك بعد ذلك إعادة تحميل الصفحة للمحاولة مرة أخرى.`;
114
+ case STRINGS.PermissionDeniedDescriptionIOS: return "إذن الوصول إلى كاميرا جهازك وأجهزة استشعار الحركة ضروري لهذه التجربة. يرجى إعادة تحميل الصفحة للمحاولة مرة أخرى.";
115
+ case STRINGS.PermissionDeniedButton: return "إعادة تحميل";
116
+ }
117
+ break;
118
+ case "hi":
119
+ switch (str) {
120
+ case STRINGS.PermissionTitle: return "लगभग हो गया...";
121
+ case STRINGS.PermissionDescription: return "यह इमर्सिव अनुभव प्रदान करने के लिए, हमें आपके डिवाइस के कैमरे और मोशन सेंसर तक पहुंच की आवश्यकता है।";
122
+ case STRINGS.PermissionButton: return "पहुंच प्रदान करें";
123
+ case STRINGS.PermissionDeniedTitle: return "अनुमति आवश्यक है";
124
+ case STRINGS.PermissionDeniedDescriptionChrome: return `इस अनुभव के लिए आपके डिवाइस के कैमरे और मोशन सेंसर तक पहुंचने की अनुमति आवश्यक है।<br/><br/>पहुंच प्रदान करने के लिए, अपने ब्राउज़र के एड्रेस बार में ${chromeSettingsIcon} बटन पर टैप करें, फिर "अनुमतियां" और अंत में "अनुमतियां रीसेट करें"। आप फिर से प्रयास करने के लिए पृष्ठ को पुनः लोड कर सकते हैं।`;
125
+ case STRINGS.PermissionDeniedDescriptionIOS: return "इस अनुभव के लिए आपके डिवाइस के कैमरे और मोशन सेंसर तक पहुंचने की अनुमति आवश्यक है। कृपया पुनः प्रयास करने के लिए पृष्ठ को पुनः लोड करें।";
126
+ case STRINGS.PermissionDeniedButton: return "पुनः लोड करें";
127
+ }
128
+ break;
129
+ case "it":
130
+ switch (str) {
131
+ case STRINGS.PermissionTitle: return "Ci siamo quasi...";
132
+ case STRINGS.PermissionDescription: return "Per offrirti questa esperienza immersiva, abbiamo bisogno di accedere alla fotocamera e ai sensori di movimento del tuo dispositivo.";
133
+ case STRINGS.PermissionButton: return "Consenti accesso";
134
+ case STRINGS.PermissionDeniedTitle: return "Autorizzazione necessaria";
135
+ case STRINGS.PermissionDeniedDescriptionChrome: return `L'autorizzazione per accedere alla fotocamera e ai sensori di movimento del tuo dispositivo è necessaria per questa esperienza.<br/><br/>Per concedere l'accesso, tocca il pulsante ${chromeSettingsIcon} nella barra degli indirizzi del tuo browser, poi "Autorizzazioni" e infine "Reimposta autorizzazioni". Puoi quindi ricaricare la pagina per riprovare.`;
136
+ case STRINGS.PermissionDeniedDescriptionIOS: return "L'autorizzazione per accedere alla fotocamera e ai sensori di movimento del tuo dispositivo è necessaria per questa esperienza. Ricarica la pagina per riprovare.";
137
+ case STRINGS.PermissionDeniedButton: return "Ricarica";
138
+ }
139
+ break;
140
+ case "nl":
141
+ switch (str) {
142
+ case STRINGS.PermissionTitle: return "Bijna klaar...";
143
+ case STRINGS.PermissionDescription: return "Om deze meeslepende ervaring te bieden, hebben we toegang nodig tot de camera en bewegingssensoren van uw apparaat.";
144
+ case STRINGS.PermissionButton: return "Toegang verlenen";
145
+ case STRINGS.PermissionDeniedTitle: return "Toestemming vereist";
146
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Toestemming voor toegang tot de camera en bewegingssensoren van uw apparaat is noodzakelijk voor deze ervaring.<br/><br/>Om toegang te verlenen, tik op de ${chromeSettingsIcon} knop in de adresbalk van uw browser, dan "Machtigingen" en ten slotte "Machtigingen resetten". U kunt vervolgens de pagina opnieuw laden om het opnieuw te proberen.`;
147
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Toestemming voor toegang tot de camera en bewegingssensoren van uw apparaat is noodzakelijk voor deze ervaring. Herlaad de pagina om het opnieuw te proberen.";
148
+ case STRINGS.PermissionDeniedButton: return "Herladen";
149
+ }
150
+ break;
151
+ case "ru":
152
+ switch (str) {
153
+ case STRINGS.PermissionTitle: return "Почти готово...";
154
+ case STRINGS.PermissionDescription: return "Для обеспечения этого иммерсивного опыта нам необходим доступ к камере и датчикам движения вашего устройства.";
155
+ case STRINGS.PermissionButton: return "Разрешить доступ";
156
+ case STRINGS.PermissionDeniedTitle: return "Требуется разрешение";
157
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Для этого опыта необходимо разрешение на доступ к камере и датчикам движения вашего устройства.<br/><br/>Чтобы предоставить доступ, нажмите кнопку ${chromeSettingsIcon} в адресной строке браузера, затем «Разрешения» и «Сбросить разрешения». После этого перезагрузите страницу, чтобы повторить попытку.`;
158
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Для этого опыта необходимо разрешение на доступ к камере и датчикам движения вашего устройства. Перезагрузите страницу, чтобы повторить попытку.";
159
+ case STRINGS.PermissionDeniedButton: return "Перезагрузить";
160
+ }
161
+ break;
162
+ case "tr":
163
+ switch (str) {
164
+ case STRINGS.PermissionTitle: return "Neredeyse tamam...";
165
+ case STRINGS.PermissionDescription: return "Bu sürükleyici deneyimi sunmak için cihazınızın kamerasına ve hareket sensörlerine erişmemiz gerekiyor.";
166
+ case STRINGS.PermissionButton: return "Erişime izin ver";
167
+ case STRINGS.PermissionDeniedTitle: return "İzin gerekli";
168
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Bu deneyim için cihazınızın kamerasına ve hareket sensörlerine erişim izni gereklidir.<br/><br/>Erişim vermek için tarayıcınızın adres çubuğundaki ${chromeSettingsIcon} düğmesine dokunun, ardından "İzinler" ve son olarak "İzinleri sıfırla" seçeneklerine dokunun. Daha sonra tekrar denemek için sayfayı yeniden yükleyebilirsiniz.`;
169
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Bu deneyim için cihazınızın kamerasına ve hareket sensörlerine erişim izni gereklidir. Tekrar denemek için lütfen sayfayı yeniden yükleyin.";
170
+ case STRINGS.PermissionDeniedButton: return "Yeniden yükle";
171
+ }
172
+ break;
173
+ case "id":
174
+ switch (str) {
175
+ case STRINGS.PermissionTitle: return "Hampir selesai...";
176
+ case STRINGS.PermissionDescription: return "Untuk memberikan pengalaman imersif ini, kami memerlukan akses ke kamera dan sensor gerak perangkat Anda.";
177
+ case STRINGS.PermissionButton: return "Berikan akses";
178
+ case STRINGS.PermissionDeniedTitle: return "Izin diperlukan";
179
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Izin untuk mengakses kamera dan sensor gerak perangkat Anda diperlukan untuk pengalaman ini.<br/><br/>Untuk memberikan akses, ketuk tombol ${chromeSettingsIcon} di bilah alamat browser Anda, lalu "Izin", dan terakhir "Setel ulang izin". Anda kemudian dapat memuat ulang halaman untuk mencoba lagi.`;
180
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Izin untuk mengakses kamera dan sensor gerak perangkat Anda diperlukan untuk pengalaman ini. Muat ulang halaman untuk mencoba lagi.";
181
+ case STRINGS.PermissionDeniedButton: return "Muat ulang";
182
+ }
183
+ break;
184
+ case "th":
185
+ switch (str) {
186
+ case STRINGS.PermissionTitle: return "เกือบเสร็จแล้ว...";
187
+ case STRINGS.PermissionDescription: return "เพื่อมอบประสบการณ์สมจริงนี้ เราต้องการเข้าถึงกล้องและเซ็นเซอร์การเคลื่อนไหวของอุปกรณ์คุณ";
188
+ case STRINGS.PermissionButton: return "อนุญาตการเข้าถึง";
189
+ case STRINGS.PermissionDeniedTitle: return "จำเป็นต้องได้รับอนุญาต";
190
+ case STRINGS.PermissionDeniedDescriptionChrome: return `จำเป็นต้องได้รับอนุญาตในการเข้าถึงกล้องและเซ็นเซอร์การเคลื่อนไหวของอุปกรณ์คุณสำหรับประสบการณ์นี้<br/><br/>หากต้องการอนุญาตการเข้าถึง แตะปุ่ม ${chromeSettingsIcon} ในแถบที่อยู่ของเบราว์เซอร์คุณ จากนั้นแตะ "สิทธิ์" และสุดท้าย "รีเซ็ตสิทธิ์" จากนั้นคุณสามารถโหลดหน้าใหม่เพื่อลองอีกครั้ง`;
191
+ case STRINGS.PermissionDeniedDescriptionIOS: return "จำเป็นต้องได้รับอนุญาตในการเข้าถึงกล้องและเซ็นเซอร์การเคลื่อนไหวของอุปกรณ์คุณสำหรับประสบการณ์นี้ กรุณาโหลดหน้าใหม่เพื่อลองอีกครั้ง";
192
+ case STRINGS.PermissionDeniedButton: return "โหลดใหม่";
193
+ }
194
+ break;
195
+ case "vi":
196
+ switch (str) {
197
+ case STRINGS.PermissionTitle: return "Gần xong rồi...";
198
+ case STRINGS.PermissionDescription: return "Để cung cấp trải nghiệm sống động này, chúng tôi cần quyền truy cập vào camera và cảm biến chuyển động của thiết bị bạn.";
199
+ case STRINGS.PermissionButton: return "Cấp quyền truy cập";
200
+ case STRINGS.PermissionDeniedTitle: return "Cần có quyền";
201
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Cần có quyền truy cập vào camera và cảm biến chuyển động của thiết bị bạn cho trải nghiệm này.<br/><br/>Để cấp quyền truy cập, hãy nhấn vào nút ${chromeSettingsIcon} trên thanh địa chỉ của trình duyệt, sau đó nhấn "Quyền" và cuối cùng là "Đặt lại quyền". Sau đó bạn có thể tải lại trang để thử lại.`;
202
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Cần có quyền truy cập vào camera và cảm biến chuyển động của thiết bị bạn cho trải nghiệm này. Vui lòng tải lại trang để thử lại.";
203
+ case STRINGS.PermissionDeniedButton: return "Tải lại";
204
+ }
205
+ break;
206
+ case "pl":
207
+ switch (str) {
208
+ case STRINGS.PermissionTitle: return "Prawie gotowe...";
209
+ case STRINGS.PermissionDescription: return "Aby zapewnić to immersyjne doświadczenie, potrzebujemy dostępu do kamery i czujników ruchu Twojego urządzenia.";
210
+ case STRINGS.PermissionButton: return "Zezwól na dostęp";
211
+ case STRINGS.PermissionDeniedTitle: return "Wymagane zezwolenie";
212
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Zezwolenie na dostęp do kamery i czujników ruchu Twojego urządzenia jest konieczne dla tego doświadczenia.<br/><br/>Aby udzielić dostępu, dotknij przycisku ${chromeSettingsIcon} na pasku adresu przeglądarki, następnie wybierz "Uprawnienia" i na końcu "Resetuj uprawnienia". Następnie możesz ponownie załadować stronę, aby spróbować ponownie.`;
213
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Zezwolenie na dostęp do kamery i czujników ruchu Twojego urządzenia jest konieczne dla tego doświadczenia. Proszę przeładować stronę, aby spróbować ponownie.";
214
+ case STRINGS.PermissionDeniedButton: return "Przeładuj";
215
+ }
216
+ break;
217
+ case "sv":
218
+ switch (str) {
219
+ case STRINGS.PermissionTitle: return "Nästan där...";
220
+ case STRINGS.PermissionDescription: return "För att ge dig denna upplevelse behöver vi tillgång till din enhets kamera och rörelsesensorer.";
221
+ case STRINGS.PermissionButton: return "Ge åtkomst";
222
+ case STRINGS.PermissionDeniedTitle: return "Tillstånd krävs";
223
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Tillstånd att komma åt din enhets kamera och rörelsesensorer krävs för denna upplevelse.<br/><br/>För att ge åtkomst, tryck på ${chromeSettingsIcon}-knappen i webbläsarens adressfält, sedan "Behörigheter" och slutligen "Återställ behörigheter". Du kan sedan ladda om sidan och försöka igen.`;
224
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Tillstånd att komma åt din enhets kamera och rörelsesensorer krävs för denna upplevelse. Ladda om sidan och försöka igen.";
225
+ case STRINGS.PermissionDeniedButton: return "Ladda om";
226
+ }
227
+ break;
228
+ case "no":
229
+ switch (str) {
230
+ case STRINGS.PermissionTitle: return "Nesten der...";
231
+ case STRINGS.PermissionDescription: return "For å gi deg denne opplevelsen trenger vi tilgang til kameraet og bevegelsessensorene på enheten din.";
232
+ case STRINGS.PermissionButton: return "Gi tilgang";
233
+ case STRINGS.PermissionDeniedTitle: return "Tillatelse kreves";
234
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Tillatelse til å få tilgang til kameraet og bevegelsessensorene på enheten din er nødvendig for denne opplevelsen.<br/><br/>For å gi tilgang, trykk på ${chromeSettingsIcon}-knappen i adressefeltet i nettleseren din, deretter "Tillatelser" og til slutt "Tilbakestill tillatelser". Du kan deretter laste inn siden på nytt for å prøve igjen.`;
235
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Tillatelse til å få tilgang til kameraet og bevegelsessensorene på enheten din er nødvendig for denne opplevelsen. Last inn siden på nytt for å prøve igjen.";
236
+ case STRINGS.PermissionDeniedButton: return "Last inn på nytt";
237
+ }
238
+ break;
239
+ case "da":
240
+ switch (str) {
241
+ case STRINGS.PermissionTitle: return "Næsten der...";
242
+ case STRINGS.PermissionDescription: return "For at give dig denne oplevelse har vi brug for adgang til din enheds kamera og bevægelsessensorer.";
243
+ case STRINGS.PermissionButton: return "Giv adgang";
244
+ case STRINGS.PermissionDeniedTitle: return "Tilladelse er nødvendig";
245
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Tilladelse til at få adgang til din enheds kamera og bevægelsessensorer er nødvendig for denne oplevelse.<br/><br/>For at give adgang, tryk på ${chromeSettingsIcon}-knappen i adresselinjen i din browser, derefter "Tilladelser" og til sidst "Nulstil tilladelser". Du kan derefter genindlæse siden for at prøve igen.`;
246
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Tilladelse til at få adgang til din enheds kamera og bevægelsessensorer er nødvendig for denne oplevelse. Genindlæs siden for at prøve igen.";
247
+ case STRINGS.PermissionDeniedButton: return "Genindlæs";
248
+ }
249
+ break;
250
+ case "fi":
251
+ switch (str) {
252
+ case STRINGS.PermissionTitle: return "Melkein valmis...";
253
+ case STRINGS.PermissionDescription: return "Tarjotaksemme tämän mukaansatempaavan kokemuksen tarvitsemme pääsyn laitteesi kameraan ja liiketunnistimiin.";
254
+ case STRINGS.PermissionButton: return "Myönnä pääsy";
255
+ case STRINGS.PermissionDeniedTitle: return "Lupa vaaditaan";
256
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Lupa laitteesi kameran ja liiketunnistimien käyttöön on välttämätön tätä kokemusta varten.<br/><br/>Myöntääksesi pääsyn, napauta ${chromeSettingsIcon}-painiketta selaimesi osoitepalkissa, sitten "Luvat" ja lopuksi "Nollaa luvat". Voit sitten ladata sivun uudelleen yrittääksesi uudelleen.`;
257
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Lupa laitteesi kameran ja liiketunnistimien käyttöön on välttämätön tätä kokemusta varten. Lataa sivu uudelleen yrittääksesi uudelleen.";
258
+ case STRINGS.PermissionDeniedButton: return "Lataa uudelleen";
259
+ }
260
+ break;
261
+ case "cs":
262
+ switch (str) {
263
+ case STRINGS.PermissionTitle: return "Už skoro...";
264
+ case STRINGS.PermissionDescription: return "Abychom vám mohli poskytnout tento pohlcující zážitek, potřebujeme přístup ke kameře a pohybovým senzorům vašeho zařízení.";
265
+ case STRINGS.PermissionButton: return "Udělit přístup";
266
+ case STRINGS.PermissionDeniedTitle: return "Je vyžadováno oprávnění";
267
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Pro tento zážitek je nutné oprávnění k přístupu ke kameře a pohybovým senzorům vašeho zařízení.<br/><br/>Chcete-li udělit přístup, klepněte na tlačítko ${chromeSettingsIcon} v adresním řádku prohlížeče, poté na "Oprávnění" a nakonec na "Obnovit oprávnění". Poté můžete stránku znovu načíst a zkusit to znovu.`;
268
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Pro tento zážitek je nutné oprávnění k přístupu ke kameře a pohybovým senzorům vašeho zařízení. Prosím, znovu načtěte stránku a zkuste to znovu.";
269
+ case STRINGS.PermissionDeniedButton: return "Znovu načíst";
270
+ }
271
+ break;
272
+ case "hu":
273
+ switch (str) {
274
+ case STRINGS.PermissionTitle: return "Már majdnem...";
275
+ case STRINGS.PermissionDescription: return "Ahhoz, hogy ezt a magával ragadó élményt nyújthassuk, hozzáférésre van szükségünk az eszköze kamerájához és mozgásérzékelőihez.";
276
+ case STRINGS.PermissionButton: return "Hozzáférés engedélyezése";
277
+ case STRINGS.PermissionDeniedTitle: return "Engedély szükséges";
278
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Az eszköze kamerájához és mozgásérzékelőihez való hozzáférés engedélye szükséges ehhez az élményhez.<br/><br/>A hozzáférés megadásához érintse meg a böngésző címsorában lévő ${chromeSettingsIcon} gombot, majd az "Engedélyek", végül az "Engedélyek visszaállítása" lehetőséget. Ezután újratöltheti az oldalt, hogy újra próbálkozzon.`;
279
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Az eszköze kamerájához és mozgásérzékelőihez való hozzáférés engedélye szükséges ehhez az élményhez. Kérjük, töltse újra az oldalt, hogy újra próbálkozzon.";
280
+ case STRINGS.PermissionDeniedButton: return "Újratöltés";
281
+ }
282
+ break;
283
+ case "el":
284
+ switch (str) {
285
+ case STRINGS.PermissionTitle: return "Σχεδόν εκεί...";
286
+ case STRINGS.PermissionDescription: return "Για να σας προσφέρουμε αυτήν την εμπειρία, χρειαζόμαστε πρόσβαση στην κάμερα και τους αισθητήρες κίνησης της συσκευής σας.";
287
+ case STRINGS.PermissionButton: return "Παροχή πρόσβασης";
288
+ case STRINGS.PermissionDeniedTitle: return "Απαιτείται άδεια";
289
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Η άδεια πρόσβασης στην κάμερα και τους αισθητήρες κίνησης της συσκευής σας είναι απαραίτητη για αυτήν την εμπειρία.<br/><br/>Για να παρέχετε πρόσβαση, πατήστε το κουμπί ${chromeSettingsIcon} στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας, μετά "Άδειες" και τέλος "Επαναφορά αδειών". Στη συνέχεια μπορείτε να φορτώσετε ξανά τη σελίδα για να δοκιμάσετε ξανά.`;
290
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Η άδεια πρόσβασης στην κάμερα και τους αισθητήρες κίνησης της συσκευής σας είναι απαραίτητη για αυτήν την εμπειρία. Παρακαλώ φορτώστε ξανά τη σελίδα για να δοκιμάσετε ξανά.";
291
+ case STRINGS.PermissionDeniedButton: return "Επαναφόρτωση";
292
+ }
293
+ break;
294
+ case "ro":
295
+ switch (str) {
296
+ case STRINGS.PermissionTitle: return "Aproape gata...";
297
+ case STRINGS.PermissionDescription: return "Pentru a vă oferi această experiență captivantă, avem nevoie de acces la camera și senzorii de mișcare ai dispozitivului dvs.";
298
+ case STRINGS.PermissionButton: return "Acordați acces";
299
+ case STRINGS.PermissionDeniedTitle: return "Este necesară permisiunea";
300
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Permisiunea de a accesa camera și senzorii de mișcare ai dispozitivului dvs. este necesară pentru această experiență.<br/><br/>Pentru a acorda acces, atingeți butonul ${chromeSettingsIcon} din bara de adrese a browserului dvs., apoi "Permisiuni" și în final "Resetați permisiunile". Puteți apoi reîncărca pagina pentru a încerca din nou.`;
301
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Permisiunea de a accesa camera și senzorii de mișcare ai dispozitivului dvs. este necesară pentru această experiență. Vă rugăm să reîncărcați pagina pentru a încerca din nou.";
302
+ case STRINGS.PermissionDeniedButton: return "Reîncărcați";
303
+ }
304
+ break;
305
+ case "uk":
306
+ switch (str) {
307
+ case STRINGS.PermissionTitle: return "Майже готово...";
308
+ case STRINGS.PermissionDescription: return "Щоб забезпечити цей захоплюючий досвід, нам потрібен доступ до камери та датчиків руху вашого пристрою.";
309
+ case STRINGS.PermissionButton: return "Надати доступ";
310
+ case STRINGS.PermissionDeniedTitle: return "Потрібен дозвіл";
311
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Для цього досвіду необхідний дозвіл на доступ до камери та датчиків руху вашого пристрою.<br/><br/>Щоб надати доступ, натисніть кнопку ${chromeSettingsIcon} в адресному рядку браузера, потім «Дозволи» і «Скинути дозволи». Після цього перезавантажте сторінку, щоб спробувати ще раз.`;
312
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Для цього досвіду необхідний дозвіл на доступ до камери та датчиків руху вашого пристрою. Будь ласка, перезавантажте сторінку, щоб спробувати ще раз.";
313
+ case STRINGS.PermissionDeniedButton: return "Перезавантажити";
314
+ }
315
+ break;
316
+ case "he":
317
+ switch (str) {
318
+ case STRINGS.PermissionTitle: return "כמעט שם...";
319
+ case STRINGS.PermissionDescription: return "כדי לספק חוויה סוחפת זו, אנו זקוקים לגישה למצלמה ולחיישני התנועה של המכשיר שלך.";
320
+ case STRINGS.PermissionButton: return "אשר גישה";
321
+ case STRINGS.PermissionDeniedTitle: return "נדרשת הרשאה";
322
+ case STRINGS.PermissionDeniedDescriptionChrome: return `נדרשת הרשאה לגישה למצלמה ולחיישני התנועה של המכשיר שלך לחוויה זו.<br/><br/>כדי לאשר גישה, הקש על כפתור ${chromeSettingsIcon} בסרגל הכתובות של הדפדפן שלך, לאחר מכן "הרשאות" ולבסוף "אפס הרשאות". לאחר מכן תוכל לטעון מחדש את הדף כדי לנסות שוב.`;
323
+ case STRINGS.PermissionDeniedDescriptionIOS: return "נדרשת הרשאה לגישה למצלמה ולחיישני התנועה של המכשיר שלך לחוויה זו. אנא טען מחדש את הדף כדי לנסות שוב.";
324
+ case STRINGS.PermissionDeniedButton: return "טען מחדש";
325
+ }
326
+ break;
327
+ case "ms":
328
+ switch (str) {
329
+ case STRINGS.PermissionTitle: return "Hampir selesai...";
330
+ case STRINGS.PermissionDescription: return "Untuk memberikan pengalaman imersif ini, kami memerlukan akses kepada kamera dan penderia gerakan peranti anda.";
331
+ case STRINGS.PermissionButton: return "Berikan akses";
332
+ case STRINGS.PermissionDeniedTitle: return "Kebenaran diperlukan";
333
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Kebenaran untuk mengakses kamera dan penderia gerakan peranti anda diperlukan untuk pengalaman ini.<br/><br/>Untuk memberikan akses, ketik butang ${chromeSettingsIcon} di bar alamat pelayar anda, kemudian "Kebenaran", dan akhirnya "Tetapkan semula kebenaran". Anda kemudian boleh memuatkan semula halaman untuk mencuba lagi.`;
334
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Kebenaran untuk mengakses kamera dan penderia gerakan peranti anda diperlukan untuk pengalaman ini. Sila muatkan semula halaman untuk mencuba lagi.";
335
+ case STRINGS.PermissionDeniedButton: return "Muat semula";
336
+ }
337
+ break;
338
+ case "tl":
339
+ switch (str) {
340
+ case STRINGS.PermissionTitle: return "Malapit na...";
341
+ case STRINGS.PermissionDescription: return "Upang maibigay ang karanasang ito, kailangan namin ng access sa camera at motion sensors ng iyong device.";
342
+ case STRINGS.PermissionButton: return "Bigyan ng access";
343
+ case STRINGS.PermissionDeniedTitle: return "Kailangan ng pahintulot";
344
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Kailangan ng pahintulot para ma-access ang camera at motion sensors ng iyong device para sa karanasang ito.<br/><br/>Upang bigyan ng access, i-tap ang ${chromeSettingsIcon} na button sa address bar ng iyong browser, pagkatapos ay "Mga Pahintulot", at sa wakas ay "I-reset ang mga pahintulot". Maaari mong i-reload ang pahina upang subukang muli.`;
345
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Kailangan ng pahintulot para ma-access ang camera at motion sensors ng iyong device para sa karanasang ito. Mangyaring i-reload ang pahina upang subukang muli.";
346
+ case STRINGS.PermissionDeniedButton: return "I-reload";
33
347
  }
34
348
  break;
35
349
  }
@@ -37,6 +351,10 @@ export function tr(str) {
37
351
  case STRINGS.PermissionTitle: return "Almost there...";
38
352
  case STRINGS.PermissionDescription: return "In order to provide this immersive experience, we need access to your device's camera and motion sensors.";
39
353
  case STRINGS.PermissionButton: return "Grant Access";
354
+ case STRINGS.PermissionDeniedTitle: return "Permission is Needed";
355
+ case STRINGS.PermissionDeniedDescriptionChrome: return `Permission to access your device's camera and motion sensors is necessary for this experience.<br/><br/>To grant access, please tap the ${chromeSettingsIcon} button in the address bar of your browser, then "Permissions", and finally "Reset permissions". You can then reload the page to try again.`;
356
+ case STRINGS.PermissionDeniedDescriptionIOS: return "Permission to access your device's camera and motion sensors is necessary for this experience. Please reload the page to try again.";
357
+ case STRINGS.PermissionDeniedButton: return "Reload";
40
358
  }
41
359
  return "";
42
360
  }
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "3.12.0";
1
+ export declare const VERSION = "3.14.1";
package/lib/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "3.12.0";
1
+ export const VERSION = "3.14.1";
@@ -58,6 +58,8 @@ export declare class WebXRCameraSource extends Source {
58
58
  private _customAnchors;
59
59
  private _groundH;
60
60
  static IsSupported(): boolean;
61
+ private static _domOverlayElement;
62
+ static setDomOverlayElement(element: Element | null): void;
61
63
  constructor(_impl: zappar_camera_source_t, _pipeline: zappar_pipeline_t);
62
64
  destroy(): void;
63
65
  setProfile(p: camera_profile_t): void;
@@ -16,7 +16,7 @@ import { zcout } from "./loglevel";
16
16
  import { deleteCameraSource } from "./camera-source-map";
17
17
  import { mat4, vec3, quat } from "gl-matrix";
18
18
  import { ImageBlitGl } from "./image-blit-gl";
19
- import { permissionRequestUI } from "./permission";
19
+ import { permissionDeniedUI, permissionRequestUI } from "./permission";
20
20
  const _circleBoundary = new Float32Array(32 * 2);
21
21
  for (let i = 0; i < 32; i++) {
22
22
  const angle = (i / 32) * 2 * Math.PI;
@@ -53,8 +53,8 @@ export class WebXRCameraSource extends Source {
53
53
  this._rawCameraWidth = 320;
54
54
  this._rawCameraHeight = 240;
55
55
  this._profile = camera_profile_t.DEFAULT;
56
- this._preferredWidth = profile.videoWidth;
57
- this._preferredHeight = profile.videoHeight;
56
+ this._preferredWidth = Math.max(profile.videoWidth, 1280);
57
+ this._preferredHeight = Math.max(profile.videoHeight, 720);
58
58
  this._permissionRequestShown = false;
59
59
  this._planeHitTestSource = null;
60
60
  this._customAnchorSetRequests = new Map();
@@ -352,6 +352,9 @@ export class WebXRCameraSource extends Source {
352
352
  return false;
353
353
  return true;
354
354
  }
355
+ static setDomOverlayElement(element) {
356
+ WebXRCameraSource._domOverlayElement = element;
357
+ }
355
358
  destroy() {
356
359
  this.pause();
357
360
  deleteCameraSource(this._impl);
@@ -360,8 +363,8 @@ export class WebXRCameraSource extends Source {
360
363
  this._profile = p;
361
364
  }
362
365
  setPreferredResolution(w, h) {
363
- this._preferredWidth = w;
364
- this._preferredHeight = h;
366
+ this._preferredWidth = Math.max(w, 1280);
367
+ this._preferredHeight = Math.max(h, 720);
365
368
  }
366
369
  _stop() {
367
370
  if (!this._xrSession)
@@ -456,7 +459,7 @@ export class WebXRCameraSource extends Source {
456
459
  return;
457
460
  }
458
461
  _syncCamera() {
459
- var _a, _b, _c;
462
+ var _a, _b, _c, _d;
460
463
  return __awaiter(this, void 0, void 0, function* () {
461
464
  if (this._isPaused) {
462
465
  if (this._xrSession)
@@ -478,7 +481,8 @@ export class WebXRCameraSource extends Source {
478
481
  }
479
482
  if (navigator.xr) {
480
483
  try {
481
- const session = yield navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['dom-overlay', 'camera-access', 'hit-test', 'anchors'], domOverlay: { root: document.documentElement } });
484
+ const overlayElement = (_b = WebXRCameraSource._domOverlayElement) !== null && _b !== void 0 ? _b : document.documentElement;
485
+ const session = yield navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['dom-overlay', 'camera-access', 'hit-test', 'anchors'], domOverlay: { root: overlayElement } });
482
486
  const refSpace = yield session.requestReferenceSpace('local');
483
487
  this._xrViewerSpace = yield session.requestReferenceSpace('viewer');
484
488
  this._xrWebGLLayer = new XRWebGLLayer(session, this._offscreenContext);
@@ -491,16 +495,17 @@ export class WebXRCameraSource extends Source {
491
495
  this._xrGlBinding = new XRWebGLBinding(session, this._offscreenContext);
492
496
  // Create a reference space that is a ray pointing down [0, -0.3] in normalized device coordinates
493
497
  const offsetRay = new XRRay(new DOMPointReadOnly(0, 0, 0), { x: 0, y: -0.3, z: -1, w: 0 });
494
- (_c = (_b = session.requestHitTestSource) === null || _b === void 0 ? void 0 : _b.call(session, {
498
+ (_d = (_c = session.requestHitTestSource) === null || _c === void 0 ? void 0 : _c.call(session, {
495
499
  space: this._xrViewerSpace,
496
500
  offsetRay: offsetRay,
497
501
  entityTypes: ['plane']
498
- })) === null || _c === void 0 ? void 0 : _c.then((hitTestSource) => {
502
+ })) === null || _d === void 0 ? void 0 : _d.then((hitTestSource) => {
499
503
  this._planeHitTestSource = hitTestSource;
500
504
  });
501
505
  }
502
506
  catch (ex) {
503
- console.log('Exception starting immersive-ar session');
507
+ permissionDeniedUI();
508
+ console.log('Exception starting immersive-ar session', ex);
504
509
  }
505
510
  }
506
511
  });
@@ -592,3 +597,4 @@ export class WebXRCameraSource extends Source {
592
597
  return false;
593
598
  }
594
599
  }
600
+ WebXRCameraSource._domOverlayElement = null;
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zappar/zappar-cv",
3
- "version": "3.12.0",
3
+ "version": "3.14.1",
4
4
  "description": "Zappar's core computer vision library, supporting image, face and world tracking.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",