@nuralogix.ai/web-measurement-embedded-app 0.1.0-alpha.6 → 0.1.0-alpha.8

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.
@@ -1,23 +1,28 @@
1
1
  {
2
- "CAMERA_PERMISSION_REQUIRED_TITLE": "Se requiere permiso de cámara",
3
2
  "CAMERA_START_ERROR": "No se puede iniciar la cámara, asegúrese de que la cámara esté conectada y de que no la esté usando otra aplicación.",
4
- "CANCEL": "Cancelar",
5
- "ERR_FACE_NONE": "Mantenga su cara centrada en el contorno durante toda la medición",
6
- "ERR_MSG_SNR": "La medición del flujo sanguíneo no es fiable\nIntente que la luz le dé en la cara de manera uniforme y permanezca quieto",
7
- "ERR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "La medición falló porque se cambió la pestaña o se minimizó la ventana del navegador. Asegúrese de que la pestaña permanezca abierta y activa.",
3
+ "CENTER_YOUR_FACE": "Centre su rostro",
4
+ "FACE_NOT_DETECTED": "Cara no detectada",
8
5
  "HELP_ACCESSORIES": "Quite todos los complementos como gafas y sombreros, incluido cualquier producto de maquillaje de su cara antes de la medición.",
9
6
  "HELP_CAMERA": "Mire a la cámara y sitúe su cara dentro del círculo durante toda la medición.",
10
7
  "HELP_STAY": "Una vez comenzada la medición, permanezca quieto/a durante 30 segundos hasta que se haya completado la medición.",
11
8
  "HELP_TITLE": "Ayuda",
9
+ "LOOK_DOWN": "Mire hacia abajo",
10
+ "LOOK_UP": "Mire hacia arriba",
12
11
  "MEASURE_INSTRUCTION1": "No se mueva.",
13
12
  "MEASURE_INSTRUCTION2": "Todo está listo para comenzar\nla medición.",
14
13
  "MEASURE_INSTRUCTIONS_NO_FACE": "Ubique su rostro en el centro del círculo.",
15
- "NO_DEVICES_FOUND": "No se encontraron dispositivos",
14
+ "MOVE_BACK": "Aléjese",
15
+ "MOVE_CLOSER": "Acérquese",
16
16
  "PLEASE_WAIT": "Por favor, espere, la medición comenzará pronto…",
17
17
  "SELECT_CAMERA": "Para comenzar, seleccione una cámara",
18
18
  "START_CAMERA": "Iniciar la cámara",
19
19
  "START_MEASUREMENT": "Comenzar medición",
20
+ "TILT_YOUR_FACE_LEFT": "Incline el rostro hacia la izquierda",
21
+ "TILT_YOUR_FACE_RIGHT": "Incline el rostro hacia la derecha",
22
+ "TURN_LEFT": "Gire a la izquierda",
23
+ "TURN_RIGHT": "Gire a la derecha",
20
24
  "WAITING_FOR_RESULTS": "Esperando resultados.",
21
25
  "WARNING_CONSTRAINT_DISTANCE": "Su cara está demasiado lejos\nAcérquese más a la cámara",
22
- "WARNING_CONSTRAINT_GAZE": "Por favor, mire directamente a la cámara"
26
+ "WARNING_CONSTRAINT_GAZE": "Por favor, mire directamente a la cámara",
27
+ "WARNING_FACE_NOT_DETECTED": "Cara no detectada. Centre su cara en el marco antes de comenzar."
23
28
  }
@@ -1,32 +1,42 @@
1
1
  {
2
- "CAMERA_PERMISSION_REQUIRED_TITLE": "Autorisation requise pour utiliser la caméra",
3
2
  "CAMERA_START_ERROR": "Impossible de démarrer la caméra. Veuillez vous assurer que la caméra est connectée et qu’elle n’est pas utilisée par une autre application.",
4
3
  "CANCEL": "Annuler",
5
- "ERR_FACE_NONE": "Veuillez garder votre visage centré dans le contour pendant toute la mesure",
4
+ "CENTER_YOUR_FACE": "Centrez votre visage",
6
5
  "ERROR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "La mesure a échoué car l’onglet a été changé ou la fenêtre du navigateur a été minimisée. Veuillez vous assurer que l’onglet reste ouvert et actif.",
6
+ "ERR_FACE_NONE": "Veuillez garder votre visage centré dans le contour pendant toute la mesure",
7
+ "ERR_LOADING_CONFIGURATIONS": "Vous ne pouvez pas accéder à ce service en raison d'une erreur de chargement de la configuration. Veuillez contacter votre administrateur système pour obtenir de l'aide.",
7
8
  "ERR_MSG_SNR": "Le mesure du flux sanguin n'est pas fiable.\nVeuillez rester immobile et ajuster l'éclairage afin que la lumière soit uniformément répartie sur votre visage",
8
9
  "ERR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "La mesure a échoué car l’onglet a été changé ou la fenêtre du navigateur a été minimisée. Veuillez vous assurer que l’onglet reste ouvert et actif.",
10
+ "FACE_NOT_DETECTED": "Visage non détecté",
9
11
  "HELP_ACCESSORIES": "Veuillez retirer tous les accessoires de votre visage avant la mesure, par exemple des lunettes, un chapeau ou le maquillage.",
10
12
  "HELP_CAMERA": "Veuillez faire face à l'appareil photo et positionner votre visage dans le cercle pendant toute la durée de la mesure.",
11
13
  "HELP_STAY": "Lorsque la mesure a commencé, gardez la même position pendant 30 secondes, jusqu'à la fin de l'opération.",
12
14
  "HELP_TITLE": "Aide",
15
+ "LOOK_DOWN": "Baissez les yeux",
16
+ "LOOK_UP": "Levez les yeux",
13
17
  "MEASURE_INSTRUCTIONS_NO_FACE": "Veuillez centrer votre visage dans le cercle",
18
+ "MOVE_BACK": "Reculez",
19
+ "MOVE_CLOSER": "Rapprochez-vous",
14
20
  "NO_DEVICES_FOUND": "Aucun appareil détecté",
15
- "STOP_CAMERA": "Arrêter la caméra",
16
- "WEB_BTN_SELECT_CAMERA": "Sélectionner une caméra pour commencer",
17
- "WEB_BTN_START_CAMERA": "Démarrer la caméra",
18
- "WEB_CAMERA_START_ERROR": "Impossible de démarrer la caméra. Veuillez vous assurer que la caméra est connectée et qu’elle n’est pas utilisée par une autre application.",
19
- "WEB_CAMERA_PERMISSION_REQUIRED_TITLE": "Autorisation requise pour utiliser la caméra",
20
- "WEB_PLEASE_WAIT": "Veuillez patienter, la mesure va bientôt commencer…",
21
- "WEB_MEASURE_INSTRUCTIONS_NO_FACE": "Veuillez centrer votre visage dans le cercle",
22
21
  "PLEASE_HOLD_STILL": "Veuillez rester immobile",
23
22
  "PLEASE_WAIT": "Veuillez patienter, la mesure va bientôt commencer…",
23
+ "READY_TO_MEASURE": "Prêt à mesurer",
24
24
  "SELECT_CAMERA": "Sélectionner une caméra pour commencer",
25
25
  "START_CAMERA": "Démarrer la caméra",
26
26
  "START_MEASUREMENT": "Démarrer la mesure",
27
+ "STOP_CAMERA": "Arrêter la caméra",
28
+ "TILT_YOUR_FACE_LEFT": "Inclinez votre visage vers la gauche",
29
+ "TILT_YOUR_FACE_RIGHT": "Inclinez votre visage vers la droite",
30
+ "TURN_LEFT": "Tournez la tête à gauche",
31
+ "TURN_RIGHT": "Tournez la tête à droite",
27
32
  "WAITING_FOR_RESULTS": "Dans l’attente des résultats",
28
- "READY_TO_MEASURE": "Prêt à mesurer",
29
33
  "WARNING_CONSTRAINT_DISTANCE": "Votre visage est trop éloigné. Essayez de vous rapprocher de la caméra",
30
34
  "WARNING_CONSTRAINT_GAZE": "Veuillez regarder directement l'appareil photo",
31
- "ERR_LOADING_CONFIGURATIONS": "Vous ne pouvez pas accéder à ce service en raison d'une erreur de chargement de la configuration. Veuillez contacter votre administrateur système pour obtenir de l'aide."
32
- }
35
+ "WARNING_FACE_NOT_DETECTED": "Visage non détecté. Centrez votre visage dans le cadre avant de commencer.",
36
+ "WEB_BTN_SELECT_CAMERA": "Sélectionner une caméra pour commencer",
37
+ "WEB_BTN_START_CAMERA": "Démarrer la caméra",
38
+ "WEB_CAMERA_PERMISSION_REQUIRED_TITLE": "Autorisation requise pour utiliser la caméra",
39
+ "WEB_CAMERA_START_ERROR": "Impossible de démarrer la caméra. Veuillez vous assurer que la caméra est connectée et qu’elle n’est pas utilisée par une autre application.",
40
+ "WEB_MEASURE_INSTRUCTIONS_NO_FACE": "Veuillez centrer votre visage dans le cercle",
41
+ "WEB_PLEASE_WAIT": "Veuillez patienter, la mesure va bientôt commencer…"
42
+ }
@@ -1,23 +1,28 @@
1
1
  {
2
- "CAMERA_PERMISSION_REQUIRED_TITLE": "È necessaria l'autorizzazione per l’uso della telecamera",
3
2
  "CAMERA_START_ERROR": "Impossibile avviare la fotocamera, assicurati che sia correttamente collegata e che non la stia utilizzando nessun'altra applicazione.",
4
- "CANCEL": "Indietro",
5
- "ERR_FACE_NONE": "Per favore mantieni il viso all'interno del contorno per tutta la durata della misurazione ",
6
- "ERR_MSG_SNR": "La misurazione del flusso sanguigno non è affidabile Per favore cerca di stare fermo e di far cadere la luce sul volto in maniera uniforme",
7
- "ERR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "La misurazione non è riuscita perché la scheda è stata cambiata o la finestra del browser è stata minimizzata. Assicurati che la scheda rimanga aperta e attiva.",
3
+ "CENTER_YOUR_FACE": "Centra il viso",
4
+ "FACE_NOT_DETECTED": "Volto non rilevato",
8
5
  "HELP_ACCESSORIES": "Prima della misurazione togliere tutti gli accessori come occhiali e cappelli, compresi i prodotti di make up dal viso.",
9
6
  "HELP_CAMERA": "Posizionarsi davanti alla fotocamera con il viso all'interno del cerchio per tutta la durata della misurazione.",
10
7
  "HELP_STAY": "Iniziata la misurazione, rimanere in posizione per 30 secondi fino al completamento della misurazione.",
11
8
  "HELP_TITLE": "Guida",
9
+ "LOOK_DOWN": "Guarda in basso",
10
+ "LOOK_UP": "Guarda in alto",
12
11
  "MEASURE_INSTRUCTION1": "Sei pregato di rimanere immobile",
13
12
  "MEASURE_INSTRUCTION2": "Pronto per iniziare la misurazione",
14
13
  "MEASURE_INSTRUCTIONS_NO_FACE": "Centra il tuo volto nel cerchio",
15
- "NO_DEVICES_FOUND": "Nessun dispositivo trovato",
14
+ "MOVE_BACK": "Fai un passo indietro",
15
+ "MOVE_CLOSER": "Avvicinati",
16
16
  "PLEASE_WAIT": "Per favore, aspetta, la misurazione inizierà presto…",
17
17
  "SELECT_CAMERA": "Selezionare una fotocamera per iniziare",
18
18
  "START_CAMERA": "Avviare Fotocamera",
19
19
  "START_MEASUREMENT": "Inizia la misurazione",
20
+ "TILT_YOUR_FACE_LEFT": "Inclina il viso a sinistra",
21
+ "TILT_YOUR_FACE_RIGHT": "Inclina il viso a destra",
22
+ "TURN_LEFT": "Gira a sinistra",
23
+ "TURN_RIGHT": "Gira a destra",
20
24
  "WAITING_FOR_RESULTS": "In attesa dei risultati",
21
25
  "WARNING_CONSTRAINT_DISTANCE": "Il tuo volto è troppo lontano\nPer favore avvicinati alla fotocamera",
22
- "WARNING_CONSTRAINT_GAZE": "Per favore guarda direttamente in camera"
26
+ "WARNING_CONSTRAINT_GAZE": "Per favore guarda direttamente in camera",
27
+ "WARNING_FACE_NOT_DETECTED": "Volto non rilevato. Centra il tuo volto nell'inquadratura prima di iniziare."
23
28
  }
@@ -1,23 +1,28 @@
1
1
  {
2
- "CAMERA_PERMISSION_REQUIRED_TITLE": "カメラ権限が必要です",
3
2
  "CAMERA_START_ERROR": "カメラを起動できません。カメラが接続されており、別のアプリケーションによって使用中でないことを確認してください。",
4
- "CANCEL": "キャンセル",
5
- "ERR_FACE_NONE": "測定中は枠線内の中心に顔を配置したままにしてください",
6
- "ERR_MSG_SNR": "血流の測定結果の信頼性を確保できませんでした\n身体を動かさずに、ユーザーの顔全体が均等に照らされるようにしてください",
7
- "ERR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "タブが切り替えられたか、ブラウザのウィンドウが最小化されたため、測定に失敗しました。タブが開いたままでアクティブであることを確認してください。",
3
+ "CENTER_YOUR_FACE": "顔を中央に合わせてください",
4
+ "FACE_NOT_DETECTED": "顔が検出されません",
8
5
  "HELP_ACCESSORIES": "メガネや帽子などのアクセサリを外し、お顔の化粧を落としてから測定してください。",
9
6
  "HELP_CAMERA": "カメラに顔を向け、測定中は顔が円の中に収まるように位置を合わせてください。",
10
7
  "HELP_STAY": "測定が開始したら、測定が完了するまで30秒間は動かないでください。",
11
8
  "HELP_TITLE": "ヘルプ",
9
+ "LOOK_DOWN": "下を見てください",
10
+ "LOOK_UP": "上を見てください",
12
11
  "MEASURE_INSTRUCTION1": "身体を動かさないでください",
13
12
  "MEASURE_INSTRUCTION2": "測定準備完了",
14
13
  "MEASURE_INSTRUCTIONS_NO_FACE": "顔の位置を円の中心に合わせてください",
15
- "NO_DEVICES_FOUND": "デバイスが見つかりません",
14
+ "MOVE_BACK": "後ろに下がってください",
15
+ "MOVE_CLOSER": "もう少し近づいてください",
16
16
  "PLEASE_WAIT": "お待ちください、測定がまもなく開始されます…",
17
17
  "SELECT_CAMERA": "カメラを選択して開始",
18
18
  "START_CAMERA": "カメラを起動",
19
19
  "START_MEASUREMENT": "測定を開始する",
20
+ "TILT_YOUR_FACE_LEFT": "顔を左に傾けてください",
21
+ "TILT_YOUR_FACE_RIGHT": "顔を右に傾けてください",
22
+ "TURN_LEFT": "左を向いてください",
23
+ "TURN_RIGHT": "右を向いてください",
20
24
  "WAITING_FOR_RESULTS": "結果が出るまで待機しています",
21
25
  "WARNING_CONSTRAINT_DISTANCE": "顔が離れすぎています\nカメラにもっと近付いてみてください",
22
- "WARNING_CONSTRAINT_GAZE": "カメラの方を真っ直ぐ見てください"
26
+ "WARNING_CONSTRAINT_GAZE": "カメラの方を真っ直ぐ見てください",
27
+ "WARNING_FACE_NOT_DETECTED": "顔が検出されません。開始前にフレーム内で顔を中央に配置してください。"
23
28
  }
@@ -1,23 +1,28 @@
1
1
  {
2
- "CAMERA_PERMISSION_REQUIRED_TITLE": "É necessária permissão para câmara",
3
2
  "CAMERA_START_ERROR": "Não é possível iniciar a câmara, certifique-se de que a câmara está ligada e não está a ser utilizada por outra aplicação.",
4
- "CANCEL": "Cancelar",
5
- "ERR_FACE_NONE": "Mantenha o seu rosto no centro, dentro dos limites traçados, durante a medição",
6
- "ERR_MSG_SNR": "A medição do fluxo sanguíneo não foi fiável\nTente fazer com que a luz incida uniformemente em todo o seu rosto enquanto se mantém imóvel",
7
- "ERR_TAB_SWITCHED_OR_WINDOW_MINIMIZED": "A medição falhou porque o separador foi trocado ou a janela do navegador foi minimizada. Certifique-se de que o separador permanece aberto e ativo.",
3
+ "CENTER_YOUR_FACE": "Centre o seu rosto",
4
+ "FACE_NOT_DETECTED": "Rosto não detectado",
8
5
  "HELP_ACCESSORIES": "Remova todos os acessórios, tais como óculos e chapéus, incluindo todos os produtos de maquilhagem do seu rosto, antes de medir.",
9
6
  "HELP_CAMERA": "Olhe para a câmara e posicione o seu rosto dentro do círculo durante a medição.",
10
7
  "HELP_STAY": "Assim que a medição começar, mantenha a sua posição durante 30 segundos até que a medição seja concluída.",
11
8
  "HELP_TITLE": "Ajuda",
9
+ "LOOK_DOWN": "Olhe para baixo",
10
+ "LOOK_UP": "Olhe para cima",
12
11
  "MEASURE_INSTRUCTION1": "Não se mexa",
13
12
  "MEASURE_INSTRUCTION2": "Pronto para realizar a medição",
14
13
  "MEASURE_INSTRUCTIONS_NO_FACE": "Centre a sua cara no círculo",
15
- "NO_DEVICES_FOUND": "Nenhum dispositivo encontrado",
14
+ "MOVE_BACK": "Afaste-se",
15
+ "MOVE_CLOSER": "Aproxime-se",
16
16
  "PLEASE_WAIT": "Por favor, espere, a medição começará em breve…",
17
17
  "SELECT_CAMERA": "Selecionar câmara para começar",
18
18
  "START_CAMERA": "Iniciar câmara",
19
19
  "START_MEASUREMENT": "Iniciar medição",
20
+ "TILT_YOUR_FACE_LEFT": "Incline o rosto para a esquerda",
21
+ "TILT_YOUR_FACE_RIGHT": "Incline o rosto para a direita",
22
+ "TURN_LEFT": "Vire à esquerda",
23
+ "TURN_RIGHT": "Vire à direita",
20
24
  "WAITING_FOR_RESULTS": "À espera de resultados",
21
25
  "WARNING_CONSTRAINT_DISTANCE": "O seu rosto está demasiado longe\nTente aproximar-se da câmara",
22
- "WARNING_CONSTRAINT_GAZE": "Olhe diretamente para a câmara"
26
+ "WARNING_CONSTRAINT_GAZE": "Olhe diretamente para a câmara",
27
+ "WARNING_FACE_NOT_DETECTED": "Rosto não detectado. Centre o seu rosto na moldura antes de começar."
23
28
  }
package/dist/stylex.css CHANGED
@@ -1,4 +1,12 @@
1
1
  @layer priority1 {
2
+ .border-x7vd2ds {
3
+ border: 1px solid #dee2e6;
4
+ }
5
+
6
+ .border-x1gs6z28 {
7
+ border: none;
8
+ }
9
+
2
10
  .margin-x1rz42sk {
3
11
  margin: .5rem auto;
4
12
  }
@@ -18,9 +26,25 @@
18
26
  .padding-x7gbtqy {
19
27
  padding: .5rem;
20
28
  }
29
+
30
+ .padding-xc7ga6q {
31
+ padding: 12px;
32
+ }
33
+
34
+ .padding-x1qhigcl {
35
+ padding: 20px;
36
+ }
37
+
38
+ .padding-x1ff1495 {
39
+ padding: 8px 16px;
40
+ }
21
41
  }
22
42
 
23
43
  @layer priority2 {
44
+ .borderRadius-x12oqio5 {
45
+ border-radius: 4px;
46
+ }
47
+
24
48
  .gap-x13z6uf9 {
25
49
  gap: .5rem;
26
50
  }
@@ -29,6 +53,10 @@
29
53
  margin-inline: auto;
30
54
  }
31
55
 
56
+ .overflow-xysyzu8 {
57
+ overflow: auto;
58
+ }
59
+
32
60
  .overflow-xb3r6kr {
33
61
  overflow: hidden;
34
62
  }
@@ -39,6 +67,14 @@
39
67
  align-items: center;
40
68
  }
41
69
 
70
+ .backgroundColor-x1lh7yn1 {
71
+ background-color: #007bff;
72
+ }
73
+
74
+ .backgroundColor-xmiktxe {
75
+ background-color: #f8f9fa;
76
+ }
77
+
42
78
  .backgroundColor-x12peec7 {
43
79
  background-color: #fff;
44
80
  }
@@ -47,10 +83,26 @@
47
83
  box-sizing: border-box;
48
84
  }
49
85
 
86
+ .color-x36lisw {
87
+ color: #6c757d;
88
+ }
89
+
90
+ .color-x10bj97 {
91
+ color: #dc3545;
92
+ }
93
+
94
+ .color-x1awj2ng {
95
+ color: #fff;
96
+ }
97
+
50
98
  .containerType-xpqogu8 {
51
99
  container-type: size;
52
100
  }
53
101
 
102
+ .cursor-x1ypdohk {
103
+ cursor: pointer;
104
+ }
105
+
54
106
  .display-x78zum5 {
55
107
  display: flex;
56
108
  }
@@ -63,6 +115,18 @@
63
115
  flex-grow: 1;
64
116
  }
65
117
 
118
+ .fontFamily-x6n8kwa {
119
+ font-family: system-ui, -apple-system, sans-serif;
120
+ }
121
+
122
+ .fontSize-xfifm61 {
123
+ font-size: 12px;
124
+ }
125
+
126
+ .fontSize-xif65rj {
127
+ font-size: 14px;
128
+ }
129
+
66
130
  .justifyContent-xl56j7k {
67
131
  justify-content: center;
68
132
  }
@@ -79,6 +143,14 @@
79
143
  position: relative;
80
144
  }
81
145
 
146
+ .textAlign-x2b8uid {
147
+ text-align: center;
148
+ }
149
+
150
+ .textAlign-xdpxx8g {
151
+ text-align: left;
152
+ }
153
+
82
154
  .transform-xuuh30 {
83
155
  transform: translateX(-50%);
84
156
  }
@@ -97,14 +169,42 @@
97
169
  left: 50%;
98
170
  }
99
171
 
172
+ .marginBottom-x1yztbdb {
173
+ margin-bottom: 16px;
174
+ }
175
+
176
+ .marginBottom-x1hq5gj4 {
177
+ margin-bottom: 24px;
178
+ }
179
+
180
+ .marginBottom-x1e56ztr {
181
+ margin-bottom: 8px;
182
+ }
183
+
100
184
  .marginTop-x1mjqqkp {
101
185
  margin-top: .5rem;
102
186
  }
103
187
 
188
+ .marginTop-xqui205 {
189
+ margin-top: 24px;
190
+ }
191
+
104
192
  .marginTop-x1hpjnmm {
105
193
  margin-top: 3rem;
106
194
  }
107
195
 
196
+ .maxWidth-x1j9u4d2 {
197
+ max-width: 400px;
198
+ }
199
+
200
+ .maxWidth-xrlsmeg {
201
+ max-width: 600px;
202
+ }
203
+
204
+ .minHeight-xg6iff7 {
205
+ min-height: 100vh;
206
+ }
207
+
108
208
  .minHeight-xe8gcm {
109
209
  min-height: 3rem;
110
210
  }
package/lib/index.d.ts CHANGED
@@ -918,7 +918,6 @@ declare const measurementEmbeddedAppEvents: {
918
918
  readonly RESULTS: "results";
919
919
  readonly ERROR: "error";
920
920
  readonly WEBHOOK: "webhook";
921
- readonly CANCEL: "cancel";
922
921
  };
923
922
  interface AppSettings {
924
923
  token: string;
@@ -927,11 +926,7 @@ interface AppSettings {
927
926
  }
928
927
  type SupportedLanguage = 'en' | 'ja' | 'cn' | 'es' | 'pt' | 'it' | 'fr' | 'de' | 'br';
929
928
  interface Config {
930
- constraints?: {
931
- distanceConstraintsEnabled?: boolean;
932
- directionConstraintsEnabled?: boolean;
933
- movementConstraintsEnabled?: boolean;
934
- };
929
+ checkConstraints?: boolean;
935
930
  cameraFacingMode?: 'user' | 'environment';
936
931
  cameraAutoStart?: boolean;
937
932
  measurementAutoStart?: boolean;
@@ -947,12 +942,15 @@ interface MeasurementEmbeddedAppOptions {
947
942
  profile: Profile;
948
943
  language?: SupportedLanguage;
949
944
  config?: Config;
945
+ apiUrl?: string;
950
946
  loadError?: (error: string) => void;
951
947
  }
952
948
  interface MeasurementEmbedded {
953
949
  init(options: MeasurementEmbeddedAppOptions): void;
954
950
  destroy(): void;
951
+ cancel(): void;
955
952
  setTheme(theme: 'light' | 'dark'): void;
953
+ setLanguage(language: SupportedLanguage): void;
956
954
  on: {
957
955
  /**
958
956
  * when measurement results are received
@@ -969,14 +967,11 @@ interface MeasurementEmbedded {
969
967
  * @param {webhook} WebhookEvent - webhook event
970
968
  */
971
969
  webhook: ((webhook: WebhookEvent) => void) | null;
972
- /**
973
- * when measurement is cancelled
974
- */
975
- cancel: (() => void) | null;
976
970
  };
977
971
  }
978
972
  interface MeasurementEmbeddedAppError {
979
- error: keyof typeof measurementError;
973
+ code: ErrorCodes;
974
+ message: string;
980
975
  }
981
976
  declare const webhookEventSeverity: {
982
977
  readonly INFO: "INFO";
@@ -998,14 +993,74 @@ declare const webhookEvent: {
998
993
  readonly WEBSOCKET_DISCONNECTED: "WEBSOCKET_DISCONNECTED";
999
994
  readonly PAGE_VISIBILITY_CHANGE: "PAGE_VISIBILITY_CHANGE";
1000
995
  };
996
+ declare const webhookEvents: {
997
+ readonly CAMERA_STARTED: {
998
+ readonly event: "CAMERA_STARTED";
999
+ readonly level: "INFO";
1000
+ };
1001
+ readonly APP_LOADED: {
1002
+ readonly event: "APP_LOADED";
1003
+ readonly level: "INFO";
1004
+ };
1005
+ readonly MEASUREMENT_STARTED: {
1006
+ readonly event: "MEASUREMENT_STARTED";
1007
+ readonly level: "INFO";
1008
+ };
1009
+ readonly MEASUREMENT_COMPLETED: {
1010
+ readonly event: "MEASUREMENT_COMPLETED";
1011
+ readonly level: "INFO";
1012
+ };
1013
+ readonly CAMERA_PERMISSION_DENIED: {
1014
+ readonly event: "CAMERA_PERMISSION_DENIED";
1015
+ readonly level: "ERROR";
1016
+ };
1017
+ readonly CAMERA_PERMISSION_GRANTED: {
1018
+ readonly event: "CAMERA_PERMISSION_GRANTED";
1019
+ readonly level: "INFO";
1020
+ };
1021
+ readonly INTERMEDIATE_RESULTS: {
1022
+ readonly event: "INTERMEDIATE_RESULTS";
1023
+ readonly level: "INFO";
1024
+ };
1025
+ readonly RESULTS_RECEIVED: {
1026
+ readonly event: "RESULTS_RECEIVED";
1027
+ readonly level: "INFO";
1028
+ };
1029
+ readonly MEASUREMENT_CANCELED: {
1030
+ readonly event: "MEASUREMENT_CANCELED";
1031
+ readonly level: "WARN";
1032
+ };
1033
+ readonly CONSTRAINT_VIOLATION: {
1034
+ readonly event: "CONSTRAINT_VIOLATION";
1035
+ readonly level: "ERROR";
1036
+ };
1037
+ readonly PAGE_UNLOADED: {
1038
+ readonly event: "PAGE_UNLOADED";
1039
+ readonly level: "INFO";
1040
+ };
1041
+ readonly WEBSOCKET_DISCONNECTED: {
1042
+ readonly event: "WEBSOCKET_DISCONNECTED";
1043
+ readonly level: "WARN";
1044
+ };
1045
+ readonly PAGE_VISIBILITY_CHANGE: {
1046
+ readonly event: "PAGE_VISIBILITY_CHANGE";
1047
+ readonly level: "INFO";
1048
+ };
1049
+ };
1001
1050
  interface WebhookEvent {
1002
1051
  event: keyof typeof webhookEvent;
1003
1052
  level: keyof typeof webhookEventSeverity;
1004
1053
  }
1005
- declare const measurementError: {
1006
- readonly WORKER_ERROR: "WORKER_ERROR";
1007
- readonly PROFILE_INFO_NOT_SET: "PROFILE_INFO_NOT_SET";
1008
- };
1054
+ declare enum ErrorCodes {
1055
+ CAMERA_PERMISSION_DENIED = "CAMERA_PERMISSION_DENIED",
1056
+ WORKER_ERROR = "WORKER_ERROR",
1057
+ PROFILE_INFO_NOT_SET = "PROFILE_INFO_NOT_SET",
1058
+ NO_DEVICES_FOUND = "NO_DEVICES_FOUND",
1059
+ PAGE_NOT_VISIBLE = "PAGE_NOT_VISIBLE",
1060
+ CAMERA_START_FAILED = "CAMERA_START_FAILED",
1061
+ MEASUREMENT_LOW_SNR = "MEASUREMENT_LOW_SNR"
1062
+ }
1063
+ type MeasurementErrorCodes = ErrorCodes.WORKER_ERROR | ErrorCodes.PROFILE_INFO_NOT_SET;
1009
1064
 
1010
1065
  declare class MeasurementEmbeddedApp implements MeasurementEmbedded {
1011
1066
  #private;
@@ -1025,17 +1080,14 @@ declare class MeasurementEmbeddedApp implements MeasurementEmbedded {
1025
1080
  * @param {webhook} WebhookEvent - webhook event
1026
1081
  */
1027
1082
  webhook: ((webhook: WebhookEvent) => void) | null;
1028
- /**
1029
- * when measurement is cancelled
1030
- */
1031
- cancel: (() => void) | null;
1032
1083
  };
1033
1084
  constructor();
1034
1085
  init(options: MeasurementEmbeddedAppOptions): void;
1035
1086
  destroy(): void;
1036
1087
  setTheme(theme: 'light' | 'dark'): void;
1037
1088
  setLanguage(language: SupportedLanguage): void;
1089
+ cancel(): void;
1038
1090
  }
1039
1091
 
1040
- export { MeasurementEmbeddedApp as default, faceAttributeValue, measurementEmbeddedAppEvents, measurementError };
1041
- export type { AppSettings, DfxPointId, MeasurementEmbeddedAppOptions, Point, Profile, Results };
1092
+ export { ErrorCodes, MeasurementEmbeddedApp as default, faceAttributeValue, measurementEmbeddedAppEvents, webhookEvents };
1093
+ export type { AppSettings, DfxPointId, MeasurementEmbeddedAppError, MeasurementEmbeddedAppOptions, MeasurementErrorCodes, Point, Profile, Results };
package/lib/index.mjs CHANGED
@@ -1 +1 @@
1
- const h={RESULTS:"results",ERROR:"error",WEBHOOK:"webhook",CANCEL:"cancel"},S={DESTROY:"destroy",SET_THEME:"setTheme",SET_LANGUAGE:"setLanguage"},D={WORKER_ERROR:"WORKER_ERROR",PROFILE_INFO_NOT_SET:"PROFILE_INFO_NOT_SET"};var L=o=>{throw TypeError(o)},f=(o,e,n)=>e.has(o)||L("Cannot "+n),t=(o,e,n)=>(f(o,e,"read from private field"),n?n.call(o):e.get(o)),p=(o,e,n)=>e.has(o)?L("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(o):e.set(o,n),M=(o,e,n,r)=>(f(o,e,"write to private field"),e.set(o,n),n),i,l,c,s;const v=class a{constructor(e){p(this,s),M(this,s,new Int32Array(e))}lock(){for(;;){if(Atomics.compareExchange(t(this,s),t(a,c),t(a,l),t(a,i))==t(a,l))return;Atomics.wait(t(this,s),t(a,c),t(a,i))}}unlock(){if(Atomics.compareExchange(t(this,s),t(a,c),t(a,i),t(a,l))!=t(a,i))throw new Error("Tried to unlock while not holding the mutex");Atomics.notify(t(this,s),t(a,c))}AsyncLock(e){const n=this;async function r(){for(;;){if(Atomics.compareExchange(t(n,s),t(a,c),t(a,l),t(a,i))==t(a,l)){e(),n.unlock();return}await Atomics.waitAsync(t(n,s),t(a,c),t(a,i)).value}}r()}};i=new WeakMap,l=new WeakMap,c=new WeakMap,s=new WeakMap,p(v,i,1),p(v,l,0),p(v,c,0);const $={SEX_NOT_PROVIDED:1,SEX_ASSIGNED_MALE_AT_BIRTH:2,SEX_ASSIGNED_FEMALE_AT_BIRTH:3,DIABETES_NONE:4,DIABETES_TYPE1:5,DIABETES_TYPE2:6,SMOKER_TRUE:0,SMOKER_FALSE:1,BLOOD_PRESSURE_MEDICATION_TRUE:1,BLOOD_PRESSURE_MEDICATION_FALSE:0},b=document.documentElement.style.overflow;class x{#e=document.createElement("div");#t=document.createElement("div");on={results:null,error:null,webhook:null,cancel:null};constructor(){this.#e.style.height="100%"}init(e){const{container:n,appPath:r,settings:O,profile:T,config:y,loadError:u,top:_=0,language:C}=e;this.#t=n,Object.assign(n.style,{position:"fixed",top:_,left:"0",width:"100vw",height:`calc(100vh - ${_})`}),document.body.appendChild(n);const m=n.attachShadow({mode:"open"});document.documentElement.style.overflow="hidden";const w="app",R=document.createElement("link");R.rel="stylesheet",R.href=`${r}/stylex.css`,m.appendChild(R);const A=document.createElement("link");A.rel="stylesheet",A.href=`${r}/${w}.css`,m.appendChild(A);const g=d=>{this.on.results&&this.on.results({...d.detail})},k=d=>{this.on.error&&this.on.error({...d.detail})},I=d=>{this.on.webhook&&this.on.webhook({...d.detail})},N=()=>{this.on.cancel&&this.on.cancel()};this.#e.addEventListener(h.RESULTS,g),this.#e.addEventListener(h.ERROR,k),this.#e.addEventListener(h.WEBHOOK,I),this.#e.addEventListener(h.CANCEL,N),m.appendChild(this.#e);const E=document.createElement("script");E.type="module",E.src=`${r}/${w}.mjs`,E.onload=()=>{import(E.src).then(d=>{d.app.init(this.#e,r,O,T,y,C)}).catch(()=>{u&&u("Failed to initialize Measurement Embedded React app")})},E.onerror=()=>{u&&u("Failed to load the measurement embedded app script")},m.appendChild(E)}destroy(){const e=new CustomEvent("measurement-embedded-app-action",{detail:{action:S.DESTROY,data:{}}});this.#e.dispatchEvent(e),document.documentElement.style.overflow=b,this.#t&&document.body.contains(this.#t)&&document.body.removeChild(this.#t)}setTheme(e){const n=new CustomEvent("measurement-embedded-app-action",{detail:{action:S.SET_THEME,data:{theme:e}}});this.#e.dispatchEvent(n)}setLanguage(e){const n=new CustomEvent("measurement-embedded-app-action",{detail:{action:S.SET_LANGUAGE,data:{language:e}}});this.#e.dispatchEvent(n)}}export{x as default,$ as faceAttributeValue,h as measurementEmbeddedAppEvents,D as measurementError};
1
+ const c={RESULTS:"results",ERROR:"error",WEBHOOK:"webhook"},a={INFO:"INFO",WARN:"WARN",ERROR:"ERROR"},A={CAMERA_STARTED:"CAMERA_STARTED",APP_LOADED:"APP_LOADED",MEASUREMENT_STARTED:"MEASUREMENT_STARTED",MEASUREMENT_COMPLETED:"MEASUREMENT_COMPLETED",CAMERA_PERMISSION_DENIED:"CAMERA_PERMISSION_DENIED",CAMERA_PERMISSION_GRANTED:"CAMERA_PERMISSION_GRANTED",INTERMEDIATE_RESULTS:"INTERMEDIATE_RESULTS",RESULTS_RECEIVED:"RESULTS_RECEIVED",MEASUREMENT_CANCELED:"MEASUREMENT_CANCELED",CONSTRAINT_VIOLATION:"CONSTRAINT_VIOLATION",PAGE_UNLOADED:"PAGE_UNLOADED",WEBSOCKET_DISCONNECTED:"WEBSOCKET_DISCONNECTED",PAGE_VISIBILITY_CHANGE:"PAGE_VISIBILITY_CHANGE"},y={CAMERA_STARTED:{event:A.CAMERA_STARTED,level:a.INFO},APP_LOADED:{event:A.APP_LOADED,level:a.INFO},MEASUREMENT_STARTED:{event:A.MEASUREMENT_STARTED,level:a.INFO},MEASUREMENT_COMPLETED:{event:A.MEASUREMENT_COMPLETED,level:a.INFO},CAMERA_PERMISSION_DENIED:{event:A.CAMERA_PERMISSION_DENIED,level:a.ERROR},CAMERA_PERMISSION_GRANTED:{event:A.CAMERA_PERMISSION_GRANTED,level:a.INFO},INTERMEDIATE_RESULTS:{event:A.INTERMEDIATE_RESULTS,level:a.INFO},RESULTS_RECEIVED:{event:A.RESULTS_RECEIVED,level:a.INFO},MEASUREMENT_CANCELED:{event:A.MEASUREMENT_CANCELED,level:a.WARN},CONSTRAINT_VIOLATION:{event:A.CONSTRAINT_VIOLATION,level:a.ERROR},PAGE_UNLOADED:{event:A.PAGE_UNLOADED,level:a.INFO},WEBSOCKET_DISCONNECTED:{event:A.WEBSOCKET_DISCONNECTED,level:a.WARN},PAGE_VISIBILITY_CHANGE:{event:A.PAGE_VISIBILITY_CHANGE,level:a.INFO}},r={DESTROY:"destroy",CANCEL:"cancel",SET_THEME:"setTheme",SET_LANGUAGE:"setLanguage"};var v=(E=>(E.CAMERA_PERMISSION_DENIED="CAMERA_PERMISSION_DENIED",E.WORKER_ERROR="WORKER_ERROR",E.PROFILE_INFO_NOT_SET="PROFILE_INFO_NOT_SET",E.NO_DEVICES_FOUND="NO_DEVICES_FOUND",E.PAGE_NOT_VISIBLE="PAGE_NOT_VISIBLE",E.CAMERA_START_FAILED="CAMERA_START_FAILED",E.MEASUREMENT_LOW_SNR="MEASUREMENT_LOW_SNR",E))(v||{}),m=E=>{throw TypeError(E)},L=(E,e,n)=>e.has(E)||m("Cannot "+n),t=(E,e,n)=>(L(E,e,"read from private field"),n?n.call(E):e.get(E)),I=(E,e,n)=>e.has(E)?m("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(E):e.set(E,n),F=(E,e,n,l)=>(L(E,e,"write to private field"),e.set(E,n),n),R,T,i,s;const h=class o{constructor(e){I(this,s),F(this,s,new Int32Array(e))}lock(){for(;;){if(Atomics.compareExchange(t(this,s),t(o,i),t(o,T),t(o,R))==t(o,T))return;Atomics.wait(t(this,s),t(o,i),t(o,R))}}unlock(){if(Atomics.compareExchange(t(this,s),t(o,i),t(o,R),t(o,T))!=t(o,R))throw new Error("Tried to unlock while not holding the mutex");Atomics.notify(t(this,s),t(o,i))}AsyncLock(e){const n=this;async function l(){for(;;){if(Atomics.compareExchange(t(n,s),t(o,i),t(o,T),t(o,R))==t(o,T)){e(),n.unlock();return}await Atomics.waitAsync(t(n,s),t(o,i),t(o,R)).value}}l()}};R=new WeakMap,T=new WeakMap,i=new WeakMap,s=new WeakMap,I(h,R,1),I(h,T,0),I(h,i,0);const k={SEX_NOT_PROVIDED:1,SEX_ASSIGNED_MALE_AT_BIRTH:2,SEX_ASSIGNED_FEMALE_AT_BIRTH:3,DIABETES_NONE:4,DIABETES_TYPE1:5,DIABETES_TYPE2:6,SMOKER_TRUE:0,SMOKER_FALSE:1,BLOOD_PRESSURE_MEDICATION_TRUE:1,BLOOD_PRESSURE_MEDICATION_FALSE:0},B=document.documentElement.style.overflow;class W{#e=document.createElement("div");#E=document.createElement("div");on={results:null,error:null,webhook:null};constructor(){this.#e.style.height="100%"}init(e){const{container:n,appPath:l,settings:M,profile:C,config:P,loadError:d,top:p=0,language:U,apiUrl:w="api.deepaffex.ai"}=e;this.#E=n,Object.assign(n.style,{position:"fixed",top:p,left:"0",width:"100vw",height:`calc(100vh - ${p})`}),document.body.appendChild(n);const N=n.attachShadow({mode:"open"});document.documentElement.style.overflow="hidden";const u="app",O=document.createElement("link");O.rel="stylesheet",O.href=`${l}/stylex.css`,N.appendChild(O);const D=document.createElement("link");D.rel="stylesheet",D.href=`${l}/${u}.css`,N.appendChild(D);const f=S=>{this.on.results&&this.on.results({...S.detail})},G=S=>{this.on.error&&this.on.error({...S.detail})},V=S=>{this.on.webhook&&this.on.webhook({...S.detail})};this.#e.addEventListener(c.RESULTS,f),this.#e.addEventListener(c.ERROR,G),this.#e.addEventListener(c.WEBHOOK,V),N.appendChild(this.#e);const _=document.createElement("script");_.type="module",_.src=`${l}/${u}.mjs`,_.onload=()=>{import(_.src).then(S=>{S.app.init(this.#e,l,M,C,w,P,U)}).catch(()=>{d&&d("Failed to initialize Measurement Embedded React app")})},_.onerror=()=>{d&&d("Failed to load the measurement embedded app script")},N.appendChild(_)}destroy(){const e=new CustomEvent("measurement-embedded-app-action",{detail:{action:r.DESTROY,data:{}}});this.#e.dispatchEvent(e),document.documentElement.style.overflow=B,this.#E&&document.body.contains(this.#E)&&document.body.removeChild(this.#E)}setTheme(e){const n=new CustomEvent("measurement-embedded-app-action",{detail:{action:r.SET_THEME,data:{theme:e}}});this.#e.dispatchEvent(n)}setLanguage(e){const n=new CustomEvent("measurement-embedded-app-action",{detail:{action:r.SET_LANGUAGE,data:{language:e}}});this.#e.dispatchEvent(n)}cancel(){const e=new CustomEvent("measurement-embedded-app-action",{detail:{action:r.CANCEL,data:{}}});this.#e.dispatchEvent(e)}}export{v as ErrorCodes,W as default,k as faceAttributeValue,c as measurementEmbeddedAppEvents,y as webhookEvents};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralogix.ai/web-measurement-embedded-app",
3
- "version": "0.1.0-alpha.6",
3
+ "version": "0.1.0-alpha.8",
4
4
  "description": "Web Measurement Embedded App",
5
5
  "contributors": [
6
6
  "Hamed Hassanzadeh Amin",