alphavalid-sdk 0.0.24 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,46 +1,134 @@
1
- export type AlphaValidFeedbackMessage = 'Inicializando câmera...' | 'Centralize seu rosto' | 'Aproxime o rosto' | 'Afaste o rosto' | 'Ajuste a iluminação' | 'Apenas 1 rosto por vez' | 'Rosto detectado' | 'Pronto para capturar' | 'Olhe para a câmera' | 'Olhe para cima' | 'Olhe para baixo' | 'Olhe para a esquerda' | 'Olhe para a direita' | 'Aproxime (zoom in)' | 'Afaste (zoom out)' | 'Pisque';
2
- export type AlphaValidChallengeType = 'lookForward' | 'lookUp' | 'lookDown' | 'lookLeft' | 'lookRight' | 'zoomIn' | 'zoomOut' | 'blink';
1
+ export type AlphaValidChallengeType = 'lookForward' | 'lookUp' | 'lookDown' | 'lookLeft' | 'lookRight' | 'zoomIn' | 'zoomOut' | 'blink' | 'cheese' | 'openMouth' | 'mouthWidth';
2
+ /** Um passo de desafio (liveness) na sequência configurada. */
3
3
  export interface AlphaValidChallengeStep {
4
+ /** Tipo do desafio a ser executado pelo usuário. */
4
5
  type: AlphaValidChallengeType;
5
- /** optional per-step timeout (ms). If omitted, no timeout is enforced by the SDK. */
6
+ /** Timeout (ms) opcional para este step. Ao estourar, o step é reiniciado/reativado. */
6
7
  timeoutMs?: number;
7
8
  }
9
+ /**
10
+ * Opções de validação/liveness.
11
+ *
12
+ * Notas importantes:
13
+ * - Se `challenges` for informado, a sequência é executada exatamente como definida.
14
+ * - O SDK não “injeta” `lookForward` automaticamente entre steps; se quiser, inclua como step explícito.
15
+ * - Alguns desafios requerem landmarks (ex.: `blink`); o SDK solicita landmarks automaticamente quando há um step ativo.
16
+ */
8
17
  export interface AlphaValidLivenessOptions {
9
- /** Enables/disables enforcing that the face is looking forward (frontal-ish). Default: true */
18
+ /**
19
+ * Força look-forward como regra global (para todos os frames).
20
+ * Recomendação: prefira usar `challenges: [{ type: 'lookForward' }]` quando quiser um passo explícito.
21
+ */
10
22
  requireLookForward?: boolean;
11
- /** Optional challenge sequence. If provided, the user must complete all steps before capture is marked as valid. */
23
+ /** Sequência opcional de desafios. Quando presente, determina o progresso de `state.challenge`. */
12
24
  challenges?: AlphaValidChallengeStep[];
13
- /** How strict are heuristics (0..1). Higher is stricter. Default: 0.5 */
25
+ /** 0..1: controla sensibilidade geral (quando omitido, defaults internos são derivados). */
14
26
  strictness?: number;
27
+ /** 0..1. Maior = mais tolerante no lookForward (mais fácil passar). */
28
+ lookForwardTolerance?: number;
29
+ /** Tolerância (normalizada) de centralização para lookForward usando bbox/centerX. */
30
+ lookForwardCenterTol?: number;
15
31
  /**
16
- * Optional: tolerance for look-forward check (0..1). Higher is more tolerant (easier to pass).
17
- * If omitted, it is derived from `strictness`.
32
+ * Tolerância de yaw para lookForward quando `yawProxy` (landmarks) está disponível.
33
+ * Menor = mais estrito. Default é derivado de `strictness`.
18
34
  */
19
- lookForwardTolerance?: number;
35
+ lookForwardYawTol?: number;
20
36
  /**
21
- * Optional: minimum frontal face box ratio (width/height) required to consider the pose frontal.
22
- * Lower values are more permissive (but may accept profile). If omitted, computed from strictness.
37
+ * Período de graça (ms) após o rosto desaparecer antes de emitir FACE_NOT_FOUND.
38
+ * Durante essa janela, landmarks no overlay podem ser ocultados para evitar pontos “stale”.
39
+ * Default: 900
23
40
  */
24
- minFrontalRatio?: number;
41
+ faceLostGraceMs?: number;
25
42
  /**
26
- * Optional: maximum horizontal offset allowed for look-forward (0..1) relative to center.
27
- * Higher values are more permissive. If omitted, computed from strictness/tolerance.
43
+ * LookForward via geometria boca/mandíbula.
44
+ * Se informado, pode ter precedência sobre yawProxy/centerX dependendo da implementação.
45
+ * Unidades: pixels do frame de vídeo.
28
46
  */
29
- lookForwardCenterTol?: number;
30
- /** Optional: minimum normalized inter-eye distance required to evaluate look-forward robustly. Default: 0.06 */
31
- minEyeDistance?: number;
32
- /** Optional: maximum allowed eye symmetry error. Lower = stricter. Default: derived from strictness. */
33
- maxEyeSymmetryError?: number;
34
- /** Optional: threshold for lookLeft/lookRight centerX offset. If omitted, derived from strictness. */
47
+ lookForwardJawMouthDistMinPx?: number;
48
+ lookForwardJawMouthDistMaxPx?: number;
49
+ /** Tolerância (0..1, normalizado) para o eixo Y da boca vs jawMid ser considerado neutro. */
50
+ lookForwardMouthVsJawMidYAbsTol?: number;
51
+ /**
52
+ * Por quanto tempo (ms) o lookForward deve permanecer ok para ser aceito como stepOk.
53
+ * Default: 1000
54
+ */
55
+ lookForwardHoldMs?: number;
56
+ /** Tolerância para lookLeft/lookRight quando usando sinais simples (centerX etc). */
35
57
  lookSideTol?: number;
36
- /** Optional: threshold for lookUp/lookDown face center offset. If omitted, derived from strictness. */
58
+ /** Tolerância para lookUp/lookDown quando usando sinais simples (centerY/box). */
37
59
  lookUpDownTol?: number;
38
- /** Optional: face area threshold (normalized) to satisfy zoomIn. If omitted, derived from strictness. */
39
60
  zoomInMinArea?: number;
40
- /** Optional: face area threshold (normalized) to satisfy zoomOut. If omitted, derived from strictness. */
41
61
  zoomOutMaxArea?: number;
42
- /** Optional: blink eye-open probability threshold. Lower = more permissive. Default: 0.35 */
62
+ /**
63
+ * Threshold de “olhos fechados” para blink.
64
+ * Observação: como os valores de eye open prob aqui normalmente não chegam a 0, o default é mais alto.
65
+ * Default: 0.65 (mais sensível)
66
+ */
43
67
  blinkClosedThreshold?: number;
68
+ /** Threshold de “olhos abertos” para armar o blink (evita completar com olhos semicerrados). */
69
+ blinkOpenThreshold?: number;
70
+ /** Tempo mínimo (ms) que um challenge deve permanecer válido para ser aceito. Default: 150 */
71
+ challengeMinHoldMs?: number;
72
+ /** Delay mínimo (ms) depois de completar um challenge antes que o próximo possa completar. Default: 400 */
73
+ challengeCooldownMs?: number;
74
+ /**
75
+ * Threshold (delta) para sorriso (cheese).
76
+ *
77
+ * Quando `cheeseUseBaseline === true` (default), o SDK calcula um baseline do usuário (boca neutra)
78
+ * e considera “sorrindo” quando:
79
+ * `mouthSmileRatio >= (cheeseBaseline + cheeseThreshold)`
80
+ *
81
+ * Menor = mais sensível.
82
+ * Default: 0.05 (delta acima do baseline, mais sensível)
83
+ */
84
+ cheeseThreshold?: number;
85
+ /**
86
+ * Se `true` (default), calibra um baseline de sorriso por usuário (boca neutra) e valida por delta.
87
+ * Se `false`, valida por threshold absoluto (sem baseline).
88
+ * Default: true
89
+ */
90
+ cheeseUseBaseline?: boolean;
91
+ /**
92
+ * Janela (ms) para coletar baseline neutro do sorriso após iniciar ou ao entrar no step `cheese`.
93
+ * Default: 1200
94
+ */
95
+ cheeseBaselineWindowMs?: number;
96
+ /**
97
+ * Quantidade mínima de amostras para aceitar um baseline.
98
+ * Default: 8
99
+ */
100
+ cheeseBaselineMinSamples?: number;
101
+ /** Threshold (0..1) para boca aberta. Maior = exige abrir mais. Default: 0.5 (mais permissivo) */
102
+ openMouthThreshold?: number;
103
+ /** Progresso (0..1) para aceitar pose challenges. Default: 0.65 */
104
+ poseProgressAccept?: number;
105
+ /** Por quanto tempo (ms) pode reutilizar o último status bom durante head-turns quando a detecção oscila. Default: 900 */
106
+ poseGraceMs?: number;
107
+ /** Define a semântica esquerda/direita quando o preview é espelhado. Default: 'mirrored'. */
108
+ mirrorMode?: 'mirrored' | 'raw';
109
+ /**
110
+ * Threshold (ratio) para assimetria boca<->mandíbula em lookLeft/lookRight quando `poseProgressSource` usa mouthJaw.
111
+ * Default: 0.12 (≈12%).
112
+ */
113
+ lookSideRatioThr?: number;
114
+ /** Delta absoluto mínimo (ratio/unidade interna) entre lados em mouthJaw para evitar passar por jitter. Default: 0.10 */
115
+ lookSideAbsDeltaThr?: number;
116
+ /**
117
+ * Seleciona qual sinal será usado para computar progresso de pose.
118
+ * - 'auto' (default): yawProxy -> mouthJaw -> centerX
119
+ * - 'yawProxy': landmarks yawProxy (fallback p/ centerX)
120
+ * - 'mouthJaw': assimetria mouth<->jaw (fallback p/ centerX)
121
+ * - 'centerX': apenas bbox/centerX
122
+ */
123
+ poseProgressSource?: 'auto' | 'yawProxy' | 'mouthJaw' | 'centerX';
124
+ /** Thresholds absolutos para validação estrita via mouthJaw. */
125
+ lookSideNearThr?: number;
126
+ lookSideFarThr?: number;
127
+ /**
128
+ * Quanto tempo (ms) o usuário deve manter lookForward quando ele aparece como gate neutro no fluxo.
129
+ * Default: 350
130
+ */
131
+ neutralHoldMs?: number;
44
132
  }
45
133
  export type AlphaValidErrorCode = 'CAMERA_PERMISSION_DENIED' | 'CAMERA_NOT_FOUND' | 'CAMERA_NOT_READABLE' | 'CAMERA_OVERCONSTRAINED' | 'CAMERA_NOT_SUPPORTED' | 'CAMERA_UNKNOWN' | 'MODEL_LOAD_FAILED' | 'MODEL_LOAD_TIMEOUT';
46
134
  export interface AlphaValidSdkError {
@@ -49,70 +137,215 @@ export interface AlphaValidSdkError {
49
137
  cause?: unknown;
50
138
  }
51
139
  export type AlphaValidStatus = 'idle' | 'initializing' | 'running' | 'ready' | 'error';
52
- export type AlphaValidFeedbackCode = 'INITIALIZING' | 'FACE_NOT_FOUND' | 'MULTIPLE_FACES' | 'FACE_TOO_FAR' | 'FACE_TOO_CLOSE' | 'FACE_OFF_CENTER' | 'LOOK_FORWARD' | 'LOOK_UP' | 'LOOK_DOWN' | 'LOOK_LEFT' | 'LOOK_RIGHT' | 'ZOOM_IN' | 'ZOOM_OUT' | 'BLINK' | 'READY';
140
+ export type AlphaValidFeedbackCode = 'INITIALIZING' | 'FACE_NOT_FOUND' | 'MULTIPLE_FACES' | 'FACE_TOO_FAR' | 'FACE_TOO_CLOSE' | 'FACE_OFF_CENTER' | 'LOOK_FORWARD' | 'LOOK_UP' | 'LOOK_DOWN' | 'LOOK_LEFT' | 'LOOK_RIGHT' | 'ZOOM_IN' | 'ZOOM_OUT' | 'BLINK' | 'CHEESE' | 'OPEN_MOUTH' | 'READY';
141
+ export type AlphaValidFeedbackMessage = 'Inicializando câmera...' | 'Centralize seu rosto' | 'Aproxime o rosto' | 'Afaste o rosto' | 'Ajuste a iluminação' | 'Apenas 1 rosto por vez' | 'Rosto detectado' | 'Pronto para capturar' | 'Olhe para a câmera' | 'Olhe para cima' | 'Olhe para baixo' | 'Olhe para a esquerda' | 'Olhe para a direita' | 'Aproxime-se da câmera' | 'Afaste-se da câmera' | 'Pisque' | 'Sorria' | 'Abra a boca';
53
142
  export type AlphaValidFeedback = {
54
143
  code: AlphaValidFeedbackCode;
55
- message: string;
144
+ message: AlphaValidFeedbackMessage | string;
56
145
  };
146
+ export interface AlphaValidState {
147
+ /** Estado de alto nível do SDK (idle/initializing/running/ready/error). */
148
+ status: AlphaValidStatus;
149
+ /** Feedback atual (código + mensagem) para UX. */
150
+ feedback: AlphaValidFeedback;
151
+ /** Alias textual para UX (atualmente igual a feedback.message). */
152
+ message: string;
153
+ /** Indica se o SDK considera o frame pronto para captura (após liveness, se configurado). */
154
+ isReadyToCapture: boolean;
155
+ /** Progresso de desafios (quando `liveness.challenges` está ativo). */
156
+ challenge?: {
157
+ enabled: boolean;
158
+ /** Índice atual na lista de desafios (0..total). */
159
+ index: number;
160
+ /** Total de passos configurados. */
161
+ total: number;
162
+ /** Step atual (quando ainda não completou todos). */
163
+ current?: AlphaValidChallengeType;
164
+ /** True quando não há step ativo (sequência concluída). */
165
+ completed: boolean;
166
+ };
167
+ /** Informações de debug (opcionais) para diagnóstico e overlay. */
168
+ debug?: {
169
+ faces?: number;
170
+ centerX?: number;
171
+ box?: {
172
+ x: number;
173
+ y: number;
174
+ width: number;
175
+ height: number;
176
+ };
177
+ eyeDist?: number;
178
+ yawProxy?: number;
179
+ leftEyeOpenProb?: number;
180
+ rightEyeOpenProb?: number;
181
+ /** Qual sinal foi usado para o progresso de pose (yawProxy | mouthJaw | centerX). */
182
+ poseProgressSource?: 'yawProxy' | 'mouthJaw' | 'centerX';
183
+ /** Debug interno do motor de validação/feedback (thresholds, razões, valores intermediários). */
184
+ fb?: any;
185
+ /** 0..1 progressos para desafios de pose. */
186
+ progress?: {
187
+ lookLeft?: number;
188
+ lookRight?: number;
189
+ lookUp?: number;
190
+ lookDown?: number;
191
+ };
192
+ /** Sorriso (cheese): width/height da boca (heurística). */
193
+ mouthSmileRatio?: number;
194
+ /** Sorriso (cheese): baseline neutro (por usuário/sessão), quando `cheeseUseBaseline` está habilitado. */
195
+ cheeseBaseline?: number;
196
+ /** Sorriso (cheese): alvo calculado (baseline + delta) quando aplicável. */
197
+ cheeseTarget?: number;
198
+ /** Tempo (ms) que o lookForward deve ser mantido para ser aceito. */
199
+ lookForwardHoldMs?: number;
200
+ /** Tempo (ms) já mantido dentro dos critérios principais do lookForward. */
201
+ lookForwardHeldMs?: number;
202
+ /** Timestamp (ms) do início do hold do lookForward (ou null se não está segurando). */
203
+ lookForwardOkSince?: number | null;
204
+ /** 0..1: progresso do hold do challenge atual (para UX/overlay). */
205
+ challengeHoldProgress?: number;
206
+ };
207
+ }
57
208
  export interface AlphaValidStartOptions {
58
- container: HTMLElement;
59
- /** Called when the camera stream is attached and video can play. */
209
+ /**
210
+ * Container onde o SDK vai montar o vídeo e (opcionalmente) o overlay.
211
+ * Se omitido, usa o elemento com id 'cameraContainer'.
212
+ */
213
+ container?: HTMLElement;
214
+ /** Preset de liveness de alto nivel (sem precisar mexer em todos os thresholds). */
215
+ livenessPreset?: 'easy' | 'normal' | 'strict';
216
+ /** Callback chamado quando câmera/overlay (se houver) estão prontos e modelos foram carregados. */
60
217
  onReady?: () => void;
61
- /** Called frequently as face detection runs, to guide the user. */
218
+ /** Callback leve: emite o feedback atual (ideal para textos/UI do app). */
62
219
  onFeedback?: (feedback: AlphaValidFeedback) => void;
63
- /** Called on errors (permission denied, no camera, etc). */
220
+ /** Callback de erro normalizado. */
64
221
  onError?: (error: AlphaValidSdkError) => void;
65
- /** Optional: enable/disable overlay guide (default true). */
222
+ /** Controla se o overlay deve ser renderizado. Default: true (quando `uiMode` não é headless). */
66
223
  overlay?: boolean;
67
- /** Optional: circle size ratio (0-1). Default 0.72 of the smallest side. */
224
+ /** Proporção do círculo guia (0..1). Default: 0.72 */
68
225
  guideCircleRatio?: number;
69
- /** How often to run face detection (ms). Default 200. */
226
+ /** Intervalo (ms) entre detecções. Default: 50 */
70
227
  detectionIntervalMs?: number;
71
- /**
72
- * Base URL where face-api.js models are served from.
73
- * Recommended (Vite/Ionic): copy this package's `/models` into your app `public/alphavalid-models`
74
- * so they are served at `/alphavalid-models`.
75
- *
76
- * Example: modelsPath: '/alphavalid-models'
77
- */
228
+ /** Caminho público (URL) de onde os models do face-api serão carregados. Default: '/alphavalid-models' */
78
229
  modelsPath?: string;
79
- /** Liveness/pose/challenge options (all heuristic-based for MVP). */
230
+ /** Opções de liveness/heurísticas e sequência de desafios. */
80
231
  liveness?: AlphaValidLivenessOptions;
81
- /** Optional: called when internal state changes (useful to enable/disable capture button). */
82
- onStateChange?: (state: AlphaValidState) => void;
83
232
  /**
84
- * UI mode:
85
- * - 'default' (default): SDK attaches the video element and renders the built-in overlay.
86
- * - 'headless': SDK attaches only the video element and runs validations, without overlay.
233
+ * Exige um "lookForward" válido (checar se está olhando para a câmera) no momento de habilitar captura.
234
+ * - Quando true, o botão de captura (manual) habilita se o usuário estiver alinhado/olhando para frente.
235
+ * - Quando true, o autoCapture dispara se o usuário estiver alinhado/olhando para frente.
236
+ *
237
+ * Observação: esta validação é intencionalmente simples e independente da pipeline de challenges.
238
+ * Default: false
87
239
  */
88
- uiMode?: 'default' | 'headless';
89
- /** Optional: called with the created <video> element after camera starts. */
90
- onVideo?: (video: HTMLVideoElement) => void;
91
- /** Optional: timeout for loading ML models (ms). Default: 15000 */
92
- modelLoadTimeoutMs?: number;
93
- /** Optional: enable debug rendering/features. */
240
+ requireLookForwardForCapture?: boolean;
241
+ /**
242
+ * Callback completo do estado (status + debug + challenge progress). */
243
+ onStateChange?: (state: AlphaValidState) => void;
244
+ /** Modo UI: 'headless' desabilita overlay. */
245
+ uiMode?: 'default' | 'headless' | 'Mobile';
246
+ /** Debug do SDK. */
94
247
  debug?: {
95
- /** Draw landmark points (eyes) on top of the video/overlay. Default: false */
248
+ /** Se true, solicita landmarks ao detector e desenha no overlay (custo maior). */
96
249
  drawLandmarks?: boolean;
250
+ /**
251
+ * Toggles finos para o desenho de landmarks no overlay.
252
+ * Se omitido, `drawLandmarks` controla tudo (comportamento antigo).
253
+ */
254
+ draw?: {
255
+ /** Mostra pontos/centros dos olhos. */
256
+ eyes?: boolean;
257
+ /** Mostra polilinha/pontos da boca. */
258
+ mouth?: boolean;
259
+ /** Mostra nariz (ponta + linha) quando disponível. */
260
+ nose?: boolean;
261
+ /** Mostra a jaw line (polilinha). */
262
+ jaw?: boolean;
263
+ /** Mostra linhas/labels mouth<->jaw (diagnóstico). */
264
+ mouthJaw?: boolean;
265
+ /** Mostra/oculta as linhas de debug do sorriso (cheese) no painel do overlay. */
266
+ cheese?: boolean;
267
+ };
268
+ /**
269
+ * Campo extra para flags customizadas de debug (ex: showOverlayTable).
270
+ */
271
+ extra?: any;
272
+ };
273
+ /**
274
+ * Auto-capture embutido: espera `READY` + estabilidade, captura 1x e chama `onCapture`.
275
+ * Útil para evitar duplicar lógica de estabilidade no app consumidor.
276
+ */
277
+ autoCapture?: {
278
+ enabled?: boolean;
279
+ /** Tempo mínimo (ms) que o rosto deve ficar estável antes de capturar. Default: 650 */
280
+ stableMs?: number;
281
+ /** Mensagem exibida enquanto segura estabilidade (quando aplicável). */
282
+ holdStillMessage?: string;
283
+ /** Callback disparado com o Blob (JPEG) assim que capturar. */
284
+ onCapture?: (blob: Blob) => void;
285
+ };
286
+ /**
287
+ * Botão de captura manual gerenciado pelo SDK.
288
+ * - Default: enabled (true)
289
+ * - Quando `autoCapture.enabled === false`, o SDK pode exibir um botão para o usuário capturar.
290
+ */
291
+ captureButton?: {
292
+ enabled?: boolean;
293
+ /** Texto do botão. Default: 'Capturar imagem' */
294
+ text?: string;
295
+ /** Cor de fundo (CSS color). Default: '#00bcd4' */
296
+ color?: string;
297
+ };
298
+ /**
299
+ * Callback chamado após uma captura (manual ou auto), antes de finalizar o fluxo.
300
+ * Recebe o blob da foto e ações para retomar ou confirmar.
301
+ */
302
+ onPreview?: (blob: Blob, actions: {
303
+ retake: () => void;
304
+ confirm: () => void;
305
+ }) => void;
306
+ /**
307
+ * Ativa o preview "fácil" gerenciado pelo SDK (UI + botões OK/Recapturar).
308
+ * - Só será aplicado quando `uiMode === 'Mobile'`.
309
+ * - Quando true, o SDK mostra o preview após qualquer captura (manual ou auto)
310
+ * e resolve OK/Recapturar internamente.
311
+ */
312
+ userPreview?: boolean;
313
+ /**
314
+ * Callback disparado quando o usuário confirma (OK) no `userPreview`.
315
+ * Observação: só é chamado quando `userPreview === true`.
316
+ */
317
+ onUserPreviewConfirm?: (blob: Blob) => void;
318
+ /** Texto do botão OK no preview (default: 'OK'). */
319
+ previewOkText?: string;
320
+ /** Texto do botão "Tirar outra" no preview (default: 'Tirar outra'). */
321
+ previewRetakeText?: string;
322
+ /**
323
+ * Loader do SDK (overlay com GIF enquanto inicializa a câmera/models).
324
+ * - Default: enabled (true)
325
+ * - O GIF default é `/images/alphaloader.gif` (mesmo do demo)
326
+ */
327
+ loader?: {
328
+ enabled?: boolean;
329
+ /** URL do gif/imagem do loader. */
330
+ src?: string;
331
+ /** Tamanho (px). Default: 120 */
332
+ sizePx?: number;
333
+ /** Tempo mínimo visível (ms). Default: 900 */
334
+ minVisibleMs?: number;
97
335
  };
98
336
  }
99
337
  export interface FaceDetectionStatus {
100
338
  faces: number;
101
- /** Face box normalized [0..1] relative to video square viewport. */
102
339
  box?: {
103
340
  x: number;
104
341
  y: number;
105
342
  width: number;
106
343
  height: number;
107
344
  };
108
- /** simple heuristic: face center x normalized (0..1). */
109
345
  centerX?: number;
110
- /** Relative face area (width*height) in normalized coordinates. */
111
346
  area?: number;
112
- /** Eye aspect ratio heuristic (if landmarks enabled). */
113
347
  leftEyeOpenProb?: number;
114
348
  rightEyeOpenProb?: number;
115
- /** Eye centers (normalized) if landmarks enabled */
116
349
  leftEyeCenter?: {
117
350
  x: number;
118
351
  y: number;
@@ -121,9 +354,33 @@ export interface FaceDetectionStatus {
121
354
  x: number;
122
355
  y: number;
123
356
  };
124
- /** Inter-eye distance normalized relative to max(videoWidth, videoHeight) */
125
357
  eyeDist?: number;
126
- /** Eye landmark points (6 points each), normalized, if landmarks enabled */
358
+ /** Best-effort yaw proxy from landmarks: (noseX - eyeMidX) / interOcularDistance. */
359
+ yawProxy?: number;
360
+ /** Mouth corners (normalized video space). */
361
+ mouthLeft?: {
362
+ x: number;
363
+ y: number;
364
+ };
365
+ mouthRight?: {
366
+ x: number;
367
+ y: number;
368
+ };
369
+ /** Jaw side points (normalized video space). */
370
+ jawLeft?: {
371
+ x: number;
372
+ y: number;
373
+ };
374
+ jawRight?: {
375
+ x: number;
376
+ y: number;
377
+ };
378
+ /** Distances between mouth corners and jaw sides, normalized by inter-ocular distance (scale invariant). */
379
+ mouthJawLeftDist?: number;
380
+ mouthJawRightDist?: number;
381
+ /** Absolute distances (in pixels of the underlying video frame). */
382
+ mouthJawLeftDistPx?: number;
383
+ mouthJawRightDistPx?: number;
127
384
  leftEyePoints?: Array<{
128
385
  x: number;
129
386
  y: number;
@@ -132,29 +389,47 @@ export interface FaceDetectionStatus {
132
389
  x: number;
133
390
  y: number;
134
391
  }>;
135
- /**
136
- * Indicates which method produced the pose metrics.
137
- * - 'landmarks': faceLandmark68TinyNet successfully produced landmarks.
138
- * - 'bbox': landmarks were not used/available; only bounding-box heuristics apply.
139
- */
140
- poseSource?: 'landmarks' | 'bbox';
141
- }
142
- export interface AlphaValidState {
143
- /** Engine status */
144
- status: AlphaValidStatus;
145
- /** Current feedback (code + message) */
146
- feedback: AlphaValidFeedback;
147
- /** Compatibility: current feedback message */
148
- message: string;
149
- /** Whether the current frame is acceptable for capture (all rules + challenges satisfied). */
150
- isReadyToCapture: boolean;
151
- /** Challenge progress (if enabled). */
152
- challenge?: {
153
- enabled: boolean;
154
- index: number;
155
- total: number;
156
- current?: AlphaValidChallengeType;
157
- completed: boolean;
392
+ noseTip?: {
393
+ x: number;
394
+ y: number;
395
+ };
396
+ nosePoints?: Array<{
397
+ x: number;
398
+ y: number;
399
+ }>;
400
+ mouthPoints?: Array<{
401
+ x: number;
402
+ y: number;
403
+ }>;
404
+ jawPoints?: Array<{
405
+ x: number;
406
+ y: number;
407
+ }>;
408
+ jawCenter?: {
409
+ x: number;
410
+ y: number;
411
+ };
412
+ /** Pontos centrais do lábio superior (51) e inferior (57) (normalized video space). */
413
+ mouthUpper?: {
414
+ x: number;
415
+ y: number;
416
+ };
417
+ mouthLower?: {
418
+ x: number;
419
+ y: number;
158
420
  };
421
+ /** Distância vertical absoluta (px) e normalizada por eyeDist entre lábio superior e inferior. */
422
+ mouthOpenPx?: number;
423
+ mouthOpenNorm?: number;
424
+ /** Jaw top points (normalized video space). */
425
+ jawTopL?: {
426
+ x: number;
427
+ y: number;
428
+ };
429
+ jawTopR?: {
430
+ x: number;
431
+ y: number;
432
+ };
433
+ poseSource?: 'landmarks' | 'bbox';
159
434
  }
160
435
  //# sourceMappingURL=sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/types/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/types/sdk.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAC/B,aAAa,GACb,QAAQ,GACR,UAAU,GACV,UAAU,GACV,WAAW,GACX,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,WAAW,GACX,YAAY,CAAC;AAEjB,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,IAAI,EAAE,uBAAuB,CAAC;IAC9B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mGAAmG;IACnG,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAEvC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAEtC,6FAA6F;IAC7F,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,gGAAgG;IAChG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,8FAA8F;IAC9F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,2GAA2G;IAC3G,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,0HAA0H;IAC1H,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAEhC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,yHAAyH;IACzH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAElE,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAC3B,0BAA0B,GAC1B,kBAAkB,GAClB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvF,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,OAAO,CAAC;AAEZ,MAAM,MAAM,yBAAyB,GACjC,yBAAyB,GACzB,sBAAsB,GACtB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,wBAAwB,GACxB,iBAAiB,GACjB,sBAAsB,GACtB,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,QAAQ,GACR,QAAQ,GACR,aAAa,CAAC;AAElB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAAC;CAC7C,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,MAAM,EAAE,gBAAgB,CAAC;IAEzB,kDAAkD;IAClD,QAAQ,EAAE,kBAAkB,CAAC;IAE7B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAEhB,6FAA6F;IAC7F,gBAAgB,EAAE,OAAO,CAAC;IAE1B,uEAAuE;IACvE,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,oDAAoD;QACpD,KAAK,EAAE,MAAM,CAAC;QACd,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,qDAAqD;QACrD,OAAO,CAAC,EAAE,uBAAuB,CAAC;QAClC,2DAA2D;QAC3D,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF,mEAAmE;IACnE,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAE1B,qFAAqF;QACrF,kBAAkB,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;QAEzD,iGAAiG;QACjG,EAAE,CAAC,EAAE,GAAG,CAAC;QAET,6CAA6C;QAC7C,QAAQ,CAAC,EAAE;YACT,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QAEF,2DAA2D;QAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;QAEzB,0GAA0G;QAC1G,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,4EAA4E;QAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;QAEtB,qEAAqE;QACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,4EAA4E;QAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,uFAAuF;QACvF,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAEnC,oEAAoE;QACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE9C,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEpD,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAE9C,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAErC;;;;;;;OAOG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC;4EACwE;IACxE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjD,8CAA8C;IAC9C,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAE3C,oBAAoB;IACpB,KAAK,CAAC,EAAE;QACN,kFAAkF;QAClF,aAAa,CAAC,EAAE,OAAO,CAAC;QAExB;;;WAGG;QACH,IAAI,CAAC,EAAE;YACL,uCAAuC;YACvC,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,uCAAuC;YACvC,KAAK,CAAC,EAAE,OAAO,CAAC;YAChB,sDAAsD;YACtD,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,qCAAqC;YACrC,GAAG,CAAC,EAAE,OAAO,CAAC;YACd,sDAAsD;YACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;YAEnB,iFAAiF;YACjF,MAAM,CAAC,EAAE,OAAO,CAAC;SAClB,CAAC;QACF;;WAEG;QACH,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,CAAC;IAEF;;;OAGG;IACH,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,uFAAuF;QACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,wEAAwE;QACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,+DAA+D;QAC/D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;KAClC,CAAC;IAEF;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iDAAiD;QACjD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mDAAmD;QACnD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAEvF;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAE5C,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,mCAAmC;QACnC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,iCAAiC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,8CAA8C;QAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,cAAc,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,SAAS,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtC,gDAAgD;IAChD,OAAO,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpC,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErC,uFAAuF;IACvF,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,+CAA+C;IAC/C,OAAO,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,OAAO,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEnC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export declare function ensureBaseStyles(container?: HTMLElement): void;
2
+ //# sourceMappingURL=baseStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseStyles.d.ts","sourceRoot":"","sources":["../../src/ui/baseStyles.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,WAAW,QAsDvD"}
@@ -0,0 +1,13 @@
1
+ export type CaptureButtonUiHandle = {
2
+ show: () => void;
3
+ hide: () => void;
4
+ dispose: () => void;
5
+ setEnabled: (enabled: boolean) => void;
6
+ };
7
+ export declare function createCaptureButtonCoxinhaUi(params: {
8
+ container: HTMLElement;
9
+ text?: string;
10
+ color?: string;
11
+ onClick: () => void;
12
+ }): CaptureButtonUiHandle;
13
+ //# sourceMappingURL=captureButtonCoxinha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureButtonCoxinha.d.ts","sourceRoot":"","sources":["../../src/ui/captureButtonCoxinha.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC,CAAC;AAOF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,SAAS,EAAE,WAAW,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,qBAAqB,CAsDxB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=containerStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerStyles.d.ts","sourceRoot":"","sources":["../../src/ui/containerStyles.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export interface LoaderHandle {
2
+ show(): void;
3
+ hide(): void;
4
+ dispose(): void;
5
+ }
6
+ export interface LoaderOptions {
7
+ /** Image URL for the loader (gif). */
8
+ src?: string;
9
+ /** Size in pixels. */
10
+ sizePx?: number;
11
+ /** Minimum visible time in ms (prevents flicker). */
12
+ minVisibleMs?: number;
13
+ }
14
+ export declare function createCameraLoader(container: HTMLElement, opts?: LoaderOptions): LoaderHandle;
15
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/ui/loader.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,GAAE,aAAkB,GAAG,YAAY,CA2EjG"}