@incodetech/web 0.0.0-dev-20260715-a93e8b97 → 0.0.0-dev-20260715-dcc78bcd

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.
@@ -4009,6 +4009,51 @@
4009
4009
  }
4010
4010
  }
4011
4011
 
4012
+ @media (min-width: 40rem) {
4013
+ .incode-container {
4014
+ max-width: 40rem;
4015
+ }
4016
+ }
4017
+
4018
+ @media (min-width: 48rem) {
4019
+ .incode-container {
4020
+ max-width: 48rem;
4021
+ }
4022
+ }
4023
+
4024
+ @media (min-width: 64rem) {
4025
+ .incode-container {
4026
+ max-width: 64rem;
4027
+ }
4028
+ }
4029
+
4030
+ @media (min-width: 80rem) {
4031
+ .incode-container {
4032
+ max-width: 80rem;
4033
+ }
4034
+ }
4035
+
4036
+ @media (min-width: 96rem) {
4037
+ .incode-container {
4038
+ max-width: 96rem;
4039
+ }
4040
+ }
4041
+
4042
+ @media (min-width: 48rem) {
4043
+ .incode-container {
4044
+ max-height: var(--incode-page-max-h);
4045
+ max-width: var(--incode-page-max-w);
4046
+ }
4047
+
4048
+ @media not all and (min-width: 80rem) {
4049
+ @media (orientation: landscape) {
4050
+ .incode-container {
4051
+ max-height: var(--incode-page-max-h-landscape);
4052
+ }
4053
+ }
4054
+ }
4055
+ }
4056
+
4012
4057
  .incode-container {
4013
4058
  width: 100%;
4014
4059
  }
@@ -4334,6 +4379,8 @@
4334
4379
  animation-fill-mode: both;
4335
4380
  animation: fadeIn var(--motion-fade-in-duration, .7s) ease-out;
4336
4381
  animation-fill-mode: both;
4382
+ animation: fadeIn var(--motion-fade-in-duration, .7s) ease-out;
4383
+ animation-fill-mode: both;
4337
4384
  }
4338
4385
 
4339
4386
  .resize {
@@ -4813,6 +4860,11 @@
4813
4860
  font-weight: var(--typography-button-m-underlined-weight);
4814
4861
  line-height: var(--typography-button-m-underlined-line-height);
4815
4862
  letter-spacing: var(--typography-button-m-underlined-letter-spacing);
4863
+ font-family: var(--typography-button-family);
4864
+ font-size: var(--typography-button-m-underlined-size);
4865
+ font-weight: var(--typography-button-m-underlined-weight);
4866
+ line-height: var(--typography-button-m-underlined-line-height);
4867
+ letter-spacing: var(--typography-button-m-underlined-letter-spacing);
4816
4868
  text-decoration-line: underline;
4817
4869
  text-decoration-style: solid;
4818
4870
  text-decoration-thickness: auto;
@@ -9315,6 +9367,52 @@
9315
9367
  container-type: inline-size;
9316
9368
  }
9317
9369
 
9370
+ .IncodeVideoSelfieSwitchingCameraPage {
9371
+ background-color: var(--color-surface-neutral-900-static, var(--surface-neutral-900-static));
9372
+ }
9373
+
9374
+ .IncodeVideoSelfieSwitchingCameraPage .IncodePageInner {
9375
+ padding: var(--spacing-0, var(--spacing-none, 0px));
9376
+ }
9377
+
9378
+ .IncodeVideoSelfieSwitchingCameraPage .IncodePageContent {
9379
+ flex: 1;
9380
+ position: relative;
9381
+ }
9382
+
9383
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCamera {
9384
+ width: 100%;
9385
+ height: 100%;
9386
+ padding-inline: var(--spacing-24, var(--spacing-24, 24px));
9387
+ flex-direction: column;
9388
+ justify-content: center;
9389
+ align-items: center;
9390
+ display: flex;
9391
+ position: relative;
9392
+ }
9393
+
9394
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraContent {
9395
+ align-items: center;
9396
+ gap: var(--spacing-16, var(--spacing-16, 16px));
9397
+ text-align: center;
9398
+ flex-direction: column;
9399
+ display: flex;
9400
+ }
9401
+
9402
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraIcon {
9403
+ width: var(--spacing-40, var(--spacing-40, 40px));
9404
+ height: var(--spacing-40, var(--spacing-40, 40px));
9405
+ }
9406
+
9407
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraTitle {
9408
+ font-family: var(--typography-headline-family);
9409
+ font-size: var(--typography-headline-h2-size);
9410
+ font-weight: var(--typography-headline-h2-weight);
9411
+ line-height: var(--typography-headline-h2-line-height);
9412
+ letter-spacing: var(--typography-headline-h2-letter-spacing);
9413
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
9414
+ }
9415
+
9318
9416
  .IncodeVideoSelfieTutorialPage .IncodePageContent {
9319
9417
  min-height: var(--spacing-0, var(--spacing-none, 0px));
9320
9418
  }
@@ -9398,126 +9496,104 @@
9398
9496
  .IncodeVsStepsHeader {
9399
9497
  inset-inline: var(--spacing-0, var(--spacing-none, 0px));
9400
9498
  top: var(--spacing-0, var(--spacing-none, 0px));
9401
- z-index: 60;
9499
+ gap: var(--spacing-2, var(--spacing-2, 2px));
9402
9500
  width: 100%;
9403
- height: 65px;
9404
- color: var(--color-white, #fff);
9501
+ padding-inline: var(--spacing-24, var(--spacing-24, 24px));
9502
+ padding-top: var(--spacing-24, var(--spacing-24, 24px));
9503
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
9504
+ z-index: var(--video-selfie-chrome-z-index);
9405
9505
  background-color: #0000;
9406
- gap: 5px;
9407
- padding-inline: 15px;
9408
9506
  list-style-type: none;
9409
9507
  display: flex;
9410
9508
  position: absolute;
9411
9509
  }
9412
9510
 
9413
9511
  .IncodeVsStepsHeader .IncodeVsStepsHeaderStep {
9414
- flex: 1;
9415
- justify-content: center;
9416
- align-items: flex-end;
9512
+ align-items: center;
9513
+ gap: var(--spacing-8, var(--spacing-8, 8px));
9417
9514
  width: 100%;
9418
- height: 100%;
9419
- padding-bottom: 10px;
9515
+ height: var(--video-selfie-stepper-height);
9516
+ flex-direction: column;
9517
+ flex: 1;
9420
9518
  display: flex;
9421
9519
  position: relative;
9422
9520
  }
9423
9521
 
9424
9522
  .IncodeVsStepsHeader .IncodeVsStepsHeaderStep img {
9425
- width: 32px;
9523
+ width: var(--spacing-32, var(--spacing-32, 32px));
9524
+ height: var(--spacing-32, var(--spacing-32, 32px));
9426
9525
  }
9427
9526
 
9428
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStep:after {
9429
- content: "";
9430
- opacity: .2;
9431
- background: currentColor;
9432
- border-radius: 5px;
9527
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderPill {
9528
+ border-radius: var(--radius-full, var(--border-radius-full));
9529
+ background-color: var(--color-surface-neutral-200, var(--surface-neutral-200));
9433
9530
  width: 100%;
9434
- height: 3px;
9435
- position: absolute;
9436
- top: 7px;
9437
- left: 0;
9531
+ height: var(--video-selfie-stepper-pill-height);
9532
+ opacity: .25;
9533
+ transition: opacity .3s ease-in-out;
9438
9534
  }
9439
9535
 
9440
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStepActive:after {
9441
- opacity: .4;
9442
- height: 5px;
9443
- top: 6px;
9536
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCompleted .IncodeVsStepsHeaderPill {
9537
+ opacity: .5;
9444
9538
  }
9445
9539
 
9446
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCurrent:after {
9540
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCurrent .IncodeVsStepsHeaderPill {
9447
9541
  opacity: 1;
9448
- top: 6px;
9449
9542
  }
9450
9543
 
9451
- .IncodeVsStepsHeader.IncodeVsStepsHeaderFinished .IncodeVsStepsHeaderStep:after {
9544
+ .IncodeVsStepsHeader.IncodeVsStepsHeaderFinished .IncodeVsStepsHeaderPill {
9545
+ background-color: var(--border-status-positive-static);
9452
9546
  opacity: 1;
9453
- background: #0cd5a2;
9454
- height: 5px;
9455
- top: 6px;
9456
9547
  }
9457
9548
 
9458
- .IncodeVsSelfieMask {
9459
- z-index: 50;
9460
- border: 6.9px solid #fff;
9461
- border-radius: 50%;
9462
- width: 90cqw;
9463
- height: 90cqw;
9464
- transition: border-color .3s ease-in-out;
9549
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMask {
9550
+ border-radius: var(--radius-full, var(--border-radius-full));
9551
+ z-index: var(--video-selfie-mask-z-index);
9552
+ width: 86cqw;
9553
+ height: 86cqw;
9554
+ box-shadow: var(--video-selfie-mask-vignette-shadow);
9465
9555
  position: absolute;
9466
- top: 50%;
9556
+ top: calc(50% - 7cqw);
9467
9557
  left: 50%;
9468
9558
  transform: translate(-50%, -50%);
9469
- box-shadow: 0 0 0 99999px #0009;
9470
9559
  }
9471
9560
 
9472
- .IncodeVsSelfieMaskLoading {
9473
- border-color: #0093fd;
9474
- }
9475
-
9476
- .IncodeVsSelfieMaskCapturing {
9477
- border-color: #0cd5a2;
9478
- }
9479
-
9480
- .IncodeVsSelfieMaskError {
9481
- border-color: #ff5c6f;
9482
- }
9483
-
9484
- .IncodeVsSelfieMask .IncodeVsSelfieMaskFrame {
9485
- width: auto;
9486
- max-width: none;
9487
- height: calc(85cqw - 40px);
9561
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMask .IncodeVsSelfieMaskRing {
9562
+ inset: var(--spacing-0, var(--spacing-none, 0px));
9563
+ width: 100%;
9564
+ height: 100%;
9488
9565
  position: absolute;
9489
- top: 50%;
9490
- left: 50%;
9491
- transform: translate(-50%, -50%);
9566
+ overflow: visible;
9492
9567
  }
9493
9568
 
9494
- .IncodeVsSelfieMaskText {
9495
- z-index: 60;
9496
- text-align: center;
9497
- color: #fff;
9498
- flex-direction: column;
9569
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskFeedback {
9570
+ inset-inline: var(--spacing-0, var(--spacing-none, 0px));
9499
9571
  align-items: center;
9572
+ gap: var(--spacing-16, var(--spacing-16, 16px));
9573
+ text-align: center;
9500
9574
  width: 100%;
9501
- max-width: 80%;
9502
- margin: 0 auto;
9503
- font-size: 1.25rem;
9504
- font-weight: 700;
9505
- line-height: 1.4;
9575
+ z-index: var(--video-selfie-chrome-z-index);
9576
+ max-width: var(--video-selfie-feedback-max-width);
9577
+ flex-direction: column;
9578
+ margin-inline: auto;
9506
9579
  display: flex;
9507
9580
  position: absolute;
9508
- top: calc(50% + 45cqw + 24px);
9509
- left: 0;
9510
- right: 0;
9581
+ top: calc(50% + 36cqw + 40px);
9511
9582
  }
9512
9583
 
9513
- .IncodeVsSelfieMaskTextCapturing {
9514
- color: #0cd5a2;
9584
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskIcon {
9585
+ width: var(--spacing-32, var(--spacing-32, 32px));
9586
+ height: var(--spacing-32, var(--spacing-32, 32px));
9515
9587
  }
9516
9588
 
9517
- .IncodeVsSelfieMaskText img {
9518
- width: 2rem;
9519
- height: 2rem;
9520
- margin-bottom: 8px;
9589
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskText {
9590
+ margin: var(--spacing-0, var(--spacing-none, 0px));
9591
+ font-family: var(--typography-headline-family);
9592
+ font-size: var(--typography-headline-h2-size);
9593
+ font-weight: var(--typography-headline-h2-weight);
9594
+ line-height: var(--typography-headline-h2-line-height);
9595
+ letter-spacing: var(--typography-headline-h2-letter-spacing);
9596
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
9521
9597
  }
9522
9598
 
9523
9599
  .IncodeVsIdMask {
@@ -1253,6 +1253,12 @@
1253
1253
  --digital-id-file-name-max-w: 200px;
1254
1254
  --digital-id-progress-bar-w: 164px;
1255
1255
  --digital-id-progress-bar-h: 8px;
1256
+ --video-selfie-mask-vignette-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.6);
1257
+ --video-selfie-feedback-max-width: 80%;
1258
+ --video-selfie-stepper-height: 45px;
1259
+ --video-selfie-stepper-pill-height: 5px;
1260
+ --video-selfie-mask-z-index: 50;
1261
+ --video-selfie-chrome-z-index: 60;
1256
1262
  }
1257
1263
  [data-incode-theme='dark'] {
1258
1264
  /* Surface / Neutral */
@@ -1253,4 +1253,10 @@
1253
1253
  --digital-id-file-name-max-w: 200px;
1254
1254
  --digital-id-progress-bar-w: 164px;
1255
1255
  --digital-id-progress-bar-h: 8px;
1256
+ --video-selfie-mask-vignette-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.6);
1257
+ --video-selfie-feedback-max-width: 80%;
1258
+ --video-selfie-stepper-height: 45px;
1259
+ --video-selfie-stepper-pill-height: 5px;
1260
+ --video-selfie-mask-z-index: 50;
1261
+ --video-selfie-chrome-z-index: 60;
1256
1262
  }
@@ -585,6 +585,51 @@
585
585
  }
586
586
  }
587
587
 
588
+ @media (min-width: 40rem) {
589
+ .incode-container {
590
+ max-width: 40rem;
591
+ }
592
+ }
593
+
594
+ @media (min-width: 48rem) {
595
+ .incode-container {
596
+ max-width: 48rem;
597
+ }
598
+ }
599
+
600
+ @media (min-width: 64rem) {
601
+ .incode-container {
602
+ max-width: 64rem;
603
+ }
604
+ }
605
+
606
+ @media (min-width: 80rem) {
607
+ .incode-container {
608
+ max-width: 80rem;
609
+ }
610
+ }
611
+
612
+ @media (min-width: 96rem) {
613
+ .incode-container {
614
+ max-width: 96rem;
615
+ }
616
+ }
617
+
618
+ @media (min-width: 48rem) {
619
+ .incode-container {
620
+ max-height: var(--incode-page-max-h);
621
+ max-width: var(--incode-page-max-w);
622
+ }
623
+
624
+ @media not all and (min-width: 80rem) {
625
+ @media (orientation: landscape) {
626
+ .incode-container {
627
+ max-height: var(--incode-page-max-h-landscape);
628
+ }
629
+ }
630
+ }
631
+ }
632
+
588
633
  .incode-container {
589
634
  width: 100%;
590
635
  }
@@ -758,6 +803,8 @@
758
803
  animation-fill-mode: both;
759
804
  animation: fadeIn var(--motion-fade-in-duration, .7s) ease-out;
760
805
  animation-fill-mode: both;
806
+ animation: fadeIn var(--motion-fade-in-duration, .7s) ease-out;
807
+ animation-fill-mode: both;
761
808
  }
762
809
 
763
810
  .resize {
@@ -857,6 +904,11 @@
857
904
  font-weight: var(--typography-button-m-underlined-weight);
858
905
  line-height: var(--typography-button-m-underlined-line-height);
859
906
  letter-spacing: var(--typography-button-m-underlined-letter-spacing);
907
+ font-family: var(--typography-button-family);
908
+ font-size: var(--typography-button-m-underlined-size);
909
+ font-weight: var(--typography-button-m-underlined-weight);
910
+ line-height: var(--typography-button-m-underlined-line-height);
911
+ letter-spacing: var(--typography-button-m-underlined-letter-spacing);
860
912
  text-decoration-line: underline;
861
913
  text-decoration-style: solid;
862
914
  text-decoration-thickness: auto;
@@ -1076,6 +1128,52 @@
1076
1128
  container-type: inline-size;
1077
1129
  }
1078
1130
 
1131
+ .IncodeVideoSelfieSwitchingCameraPage {
1132
+ background-color: var(--color-surface-neutral-900-static, var(--surface-neutral-900-static));
1133
+ }
1134
+
1135
+ .IncodeVideoSelfieSwitchingCameraPage .IncodePageInner {
1136
+ padding: var(--spacing-0, var(--spacing-none, 0px));
1137
+ }
1138
+
1139
+ .IncodeVideoSelfieSwitchingCameraPage .IncodePageContent {
1140
+ flex: 1;
1141
+ position: relative;
1142
+ }
1143
+
1144
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCamera {
1145
+ width: 100%;
1146
+ height: 100%;
1147
+ padding-inline: var(--spacing-24, var(--spacing-24, 24px));
1148
+ flex-direction: column;
1149
+ justify-content: center;
1150
+ align-items: center;
1151
+ display: flex;
1152
+ position: relative;
1153
+ }
1154
+
1155
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraContent {
1156
+ align-items: center;
1157
+ gap: var(--spacing-16, var(--spacing-16, 16px));
1158
+ text-align: center;
1159
+ flex-direction: column;
1160
+ display: flex;
1161
+ }
1162
+
1163
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraIcon {
1164
+ width: var(--spacing-40, var(--spacing-40, 40px));
1165
+ height: var(--spacing-40, var(--spacing-40, 40px));
1166
+ }
1167
+
1168
+ .IncodeVideoSelfieSwitchingCameraPage .IncodeVideoSelfieSwitchingCameraTitle {
1169
+ font-family: var(--typography-headline-family);
1170
+ font-size: var(--typography-headline-h2-size);
1171
+ font-weight: var(--typography-headline-h2-weight);
1172
+ line-height: var(--typography-headline-h2-line-height);
1173
+ letter-spacing: var(--typography-headline-h2-letter-spacing);
1174
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
1175
+ }
1176
+
1079
1177
  .IncodeVideoSelfieTutorialPage .IncodePageContent {
1080
1178
  min-height: var(--spacing-0, var(--spacing-none, 0px));
1081
1179
  }
@@ -1159,126 +1257,104 @@
1159
1257
  .IncodeVsStepsHeader {
1160
1258
  inset-inline: var(--spacing-0, var(--spacing-none, 0px));
1161
1259
  top: var(--spacing-0, var(--spacing-none, 0px));
1162
- z-index: 60;
1260
+ gap: var(--spacing-2, var(--spacing-2, 2px));
1163
1261
  width: 100%;
1164
- height: 65px;
1165
- color: var(--color-white, #fff);
1262
+ padding-inline: var(--spacing-24, var(--spacing-24, 24px));
1263
+ padding-top: var(--spacing-24, var(--spacing-24, 24px));
1264
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
1265
+ z-index: var(--video-selfie-chrome-z-index);
1166
1266
  background-color: #0000;
1167
- gap: 5px;
1168
- padding-inline: 15px;
1169
1267
  list-style-type: none;
1170
1268
  display: flex;
1171
1269
  position: absolute;
1172
1270
  }
1173
1271
 
1174
1272
  .IncodeVsStepsHeader .IncodeVsStepsHeaderStep {
1175
- flex: 1;
1176
- justify-content: center;
1177
- align-items: flex-end;
1273
+ align-items: center;
1274
+ gap: var(--spacing-8, var(--spacing-8, 8px));
1178
1275
  width: 100%;
1179
- height: 100%;
1180
- padding-bottom: 10px;
1276
+ height: var(--video-selfie-stepper-height);
1277
+ flex-direction: column;
1278
+ flex: 1;
1181
1279
  display: flex;
1182
1280
  position: relative;
1183
1281
  }
1184
1282
 
1185
1283
  .IncodeVsStepsHeader .IncodeVsStepsHeaderStep img {
1186
- width: 32px;
1284
+ width: var(--spacing-32, var(--spacing-32, 32px));
1285
+ height: var(--spacing-32, var(--spacing-32, 32px));
1187
1286
  }
1188
1287
 
1189
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStep:after {
1190
- content: "";
1191
- opacity: .2;
1192
- background: currentColor;
1193
- border-radius: 5px;
1288
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderPill {
1289
+ border-radius: var(--radius-full, var(--border-radius-full));
1290
+ background-color: var(--color-surface-neutral-200, var(--surface-neutral-200));
1194
1291
  width: 100%;
1195
- height: 3px;
1196
- position: absolute;
1197
- top: 7px;
1198
- left: 0;
1292
+ height: var(--video-selfie-stepper-pill-height);
1293
+ opacity: .25;
1294
+ transition: opacity .3s ease-in-out;
1199
1295
  }
1200
1296
 
1201
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStepActive:after {
1202
- opacity: .4;
1203
- height: 5px;
1204
- top: 6px;
1297
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCompleted .IncodeVsStepsHeaderPill {
1298
+ opacity: .5;
1205
1299
  }
1206
1300
 
1207
- .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCurrent:after {
1301
+ .IncodeVsStepsHeader .IncodeVsStepsHeaderStepCurrent .IncodeVsStepsHeaderPill {
1208
1302
  opacity: 1;
1209
- top: 6px;
1210
1303
  }
1211
1304
 
1212
- .IncodeVsStepsHeader.IncodeVsStepsHeaderFinished .IncodeVsStepsHeaderStep:after {
1305
+ .IncodeVsStepsHeader.IncodeVsStepsHeaderFinished .IncodeVsStepsHeaderPill {
1306
+ background-color: var(--border-status-positive-static);
1213
1307
  opacity: 1;
1214
- background: #0cd5a2;
1215
- height: 5px;
1216
- top: 6px;
1217
1308
  }
1218
1309
 
1219
- .IncodeVsSelfieMask {
1220
- z-index: 50;
1221
- border: 6.9px solid #fff;
1222
- border-radius: 50%;
1223
- width: 90cqw;
1224
- height: 90cqw;
1225
- transition: border-color .3s ease-in-out;
1310
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMask {
1311
+ border-radius: var(--radius-full, var(--border-radius-full));
1312
+ z-index: var(--video-selfie-mask-z-index);
1313
+ width: 86cqw;
1314
+ height: 86cqw;
1315
+ box-shadow: var(--video-selfie-mask-vignette-shadow);
1226
1316
  position: absolute;
1227
- top: 50%;
1317
+ top: calc(50% - 7cqw);
1228
1318
  left: 50%;
1229
1319
  transform: translate(-50%, -50%);
1230
- box-shadow: 0 0 0 99999px #0009;
1231
- }
1232
-
1233
- .IncodeVsSelfieMaskLoading {
1234
- border-color: #0093fd;
1235
1320
  }
1236
1321
 
1237
- .IncodeVsSelfieMaskCapturing {
1238
- border-color: #0cd5a2;
1239
- }
1240
-
1241
- .IncodeVsSelfieMaskError {
1242
- border-color: #ff5c6f;
1243
- }
1244
-
1245
- .IncodeVsSelfieMask .IncodeVsSelfieMaskFrame {
1246
- width: auto;
1247
- max-width: none;
1248
- height: calc(85cqw - 40px);
1322
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMask .IncodeVsSelfieMaskRing {
1323
+ inset: var(--spacing-0, var(--spacing-none, 0px));
1324
+ width: 100%;
1325
+ height: 100%;
1249
1326
  position: absolute;
1250
- top: 50%;
1251
- left: 50%;
1252
- transform: translate(-50%, -50%);
1327
+ overflow: visible;
1253
1328
  }
1254
1329
 
1255
- .IncodeVsSelfieMaskText {
1256
- z-index: 60;
1257
- text-align: center;
1258
- color: #fff;
1259
- flex-direction: column;
1330
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskFeedback {
1331
+ inset-inline: var(--spacing-0, var(--spacing-none, 0px));
1260
1332
  align-items: center;
1333
+ gap: var(--spacing-16, var(--spacing-16, 16px));
1334
+ text-align: center;
1261
1335
  width: 100%;
1262
- max-width: 80%;
1263
- margin: 0 auto;
1264
- font-size: 1.25rem;
1265
- font-weight: 700;
1266
- line-height: 1.4;
1336
+ z-index: var(--video-selfie-chrome-z-index);
1337
+ max-width: var(--video-selfie-feedback-max-width);
1338
+ flex-direction: column;
1339
+ margin-inline: auto;
1267
1340
  display: flex;
1268
1341
  position: absolute;
1269
- top: calc(50% + 45cqw + 24px);
1270
- left: 0;
1271
- right: 0;
1342
+ top: calc(50% + 36cqw + 40px);
1272
1343
  }
1273
1344
 
1274
- .IncodeVsSelfieMaskTextCapturing {
1275
- color: #0cd5a2;
1345
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskIcon {
1346
+ width: var(--spacing-32, var(--spacing-32, 32px));
1347
+ height: var(--spacing-32, var(--spacing-32, 32px));
1276
1348
  }
1277
1349
 
1278
- .IncodeVsSelfieMaskText img {
1279
- width: 2rem;
1280
- height: 2rem;
1281
- margin-bottom: 8px;
1350
+ .IncodeVideoSelfieOverlay .IncodeVsSelfieMaskText {
1351
+ margin: var(--spacing-0, var(--spacing-none, 0px));
1352
+ font-family: var(--typography-headline-family);
1353
+ font-size: var(--typography-headline-h2-size);
1354
+ font-weight: var(--typography-headline-h2-weight);
1355
+ line-height: var(--typography-headline-h2-line-height);
1356
+ letter-spacing: var(--typography-headline-h2-letter-spacing);
1357
+ color: var(--color-text-body-0-static, var(--text-body-0-static));
1282
1358
  }
1283
1359
 
1284
1360
  .IncodeVsIdMask {
@@ -7,6 +7,7 @@ import { t as Page } from "../page-DidH_RkX.js";
7
7
  import { t as Title } from "../typography-BZIpjo97.js";
8
8
  import { t as TransitionSpinner } from "../transitionSpinner-CuNCqHNi.js";
9
9
  import { t as Button } from "../button-Dz6AsbmF.js";
10
+ import { t as AutoFocusTitle } from "../autoFocusTitle-uXtAKBTO.js";
10
11
  import { n as CameraFrame, t as CameraView } from "../cameraView-DIEzM5ru.js";
11
12
  import { i as Permissions } from "../capture-D3ke7s8S.js";
12
13
  import { t as registerIncodeModuleElement } from "../incodeModule-B-4_3JrK.js";
@@ -159,51 +160,80 @@ var VideoSelfieTutorial = ({ config, onStart, isLoading }) => {
159
160
  });
160
161
  };
161
162
  //#endregion
162
- //#region src/modules/video-selfie/assets/face-frame.svg
163
- var face_frame_default = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='336'%20height='518'%20viewBox='0%200%20336%20518'%3e%3cpath%20fill='none'%20fill-rule='evenodd'%20stroke='%23FFF'%20stroke-dasharray='7.139999675750732,19.03999967575073'%20stroke-width='9.044'%20d='M168%20513.392c76.83%200%20162.893-113.92%20162.893-254.447S280.236%204.498%20168%204.498%205.107%20118.418%205.107%20258.945%2091.17%20513.392%20168%20513.392z'/%3e%3c/svg%3e";
164
- //#endregion
165
163
  //#region src/modules/video-selfie/assets/failVideoselfieSolid.svg
166
164
  var failVideoselfieSolid_default = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20width='64'%20height='64'%20viewBox='0%200%2064%2064'%20fill='none'%20version='1.1'%20id='svg2'%20sodipodi:docname='fail_videoselfie_solid.svg'%20inkscape:version='1.3%20(0e150ed,%202023-07-21)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3cdefs%20id='defs2'%20/%3e%3csodipodi:namedview%20id='namedview2'%20pagecolor='%23ffffff'%20bordercolor='%23000000'%20borderopacity='0.25'%20inkscape:showpageshadow='2'%20inkscape:pageopacity='0.0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23d1d1d1'%20inkscape:zoom='3.6875'%20inkscape:cx='31.864407'%20inkscape:cy='32'%20inkscape:window-width='3840'%20inkscape:window-height='2107'%20inkscape:window-x='0'%20inkscape:window-y='25'%20inkscape:window-maximized='1'%20inkscape:current-layer='svg2'%20/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M45%208.5C44.1716%208.5%2043.5%209.17157%2043.5%2010C43.5%2010.8284%2044.1716%2011.5%2045%2011.5H52C52.1326%2011.5%2052.2598%2011.5527%2052.3536%2011.6464C52.4473%2011.7402%2052.5%2011.8674%2052.5%2012V19C52.5%2019.8284%2053.1716%2020.5%2054%2020.5C54.8284%2020.5%2055.5%2019.8284%2055.5%2019V12C55.5%2011.0717%2055.1313%2010.1815%2054.4749%209.52513C53.8185%208.86875%2052.9283%208.5%2052%208.5H45ZM55.5%2045C55.5%2044.1716%2054.8284%2043.5%2054%2043.5C53.1716%2043.5%2052.5%2044.1716%2052.5%2045V52C52.5%2052.1326%2052.4473%2052.2598%2052.3536%2052.3536C52.2598%2052.4473%2052.1326%2052.5%2052%2052.5H45C44.1716%2052.5%2043.5%2053.1716%2043.5%2054C43.5%2054.8284%2044.1716%2055.5%2045%2055.5H52C52.9283%2055.5%2053.8185%2055.1313%2054.4749%2054.4749C55.1313%2053.8185%2055.5%2052.9283%2055.5%2052V45ZM10%2043.5C10.8284%2043.5%2011.5%2044.1716%2011.5%2045V52C11.5%2052.1326%2011.5527%2052.2598%2011.6464%2052.3536C11.7402%2052.4473%2011.8674%2052.5%2012%2052.5H19C19.8284%2052.5%2020.5%2053.1716%2020.5%2054C20.5%2054.8284%2019.8284%2055.5%2019%2055.5H12C11.0717%2055.5%2010.1815%2055.1313%209.52513%2054.4749C8.86875%2053.8185%208.5%2052.9283%208.5%2052V45C8.5%2044.1716%209.17157%2043.5%2010%2043.5ZM12%208.5C11.0717%208.5%2010.1815%208.86875%209.52513%209.52513C8.86875%2010.1815%208.5%2011.0717%208.5%2012V19C8.5%2019.8284%209.17157%2020.5%2010%2020.5C10.8284%2020.5%2011.5%2019.8284%2011.5%2019V12C11.5%2011.8674%2011.5527%2011.7402%2011.6464%2011.6464C11.7402%2011.5527%2011.8674%2011.5%2012%2011.5H19C19.8284%2011.5%2020.5%2010.8284%2020.5%2010C20.5%209.17157%2019.8284%208.5%2019%208.5H12Z'%20fill='%23FF5C6F'%20id='path1'%20style='fill:%23ff5c6f;fill-opacity:1'%20/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M41.4142%2025.4142C42.1953%2024.6332%2042.1953%2023.3668%2041.4142%2022.5858C40.6332%2021.8047%2039.3668%2021.8047%2038.5858%2022.5858L32%2029.1716L25.4142%2022.5858C24.6332%2021.8047%2023.3668%2021.8047%2022.5858%2022.5858C21.8047%2023.3668%2021.8047%2024.6332%2022.5858%2025.4142L29.1716%2032L22.5858%2038.5858C21.8047%2039.3668%2021.8047%2040.6332%2022.5858%2041.4142C23.3668%2042.1953%2024.6332%2042.1953%2025.4142%2041.4142L32%2034.8284L38.5858%2041.4142C39.3668%2042.1953%2040.6332%2042.1953%2041.4142%2041.4142C42.1953%2040.6332%2042.1953%2039.3668%2041.4142%2038.5858L34.8284%2032L41.4142%2025.4142Z'%20fill='white'%20id='path2'%20style='fill:%23ff5c6f;fill-opacity:1'%20/%3e%3c/svg%3e";
167
165
  //#endregion
168
- //#region src/modules/video-selfie/assets/success-selfie.svg
169
- var success_selfie_default = "data:image/svg+xml,%3csvg%20width='48'%20height='48'%20viewBox='0%200%2048%2048'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M44.2413%2012.0554L40.5562%208.27767C40.0509%207.75929%2039.4364%207.5%2038.714%207.5C37.991%207.5%2037.3765%207.75929%2036.8712%208.27767L19.0955%2026.5278L11.129%2018.3332C10.6231%2017.8146%2010.009%2017.5556%209.28662%2017.5556C8.5638%2017.5556%207.94965%2017.8146%207.44379%2018.3332L3.7587%2022.111C3.25284%2022.6295%203%2023.2593%203%2024.0002C3%2024.7405%203.25284%2025.3709%203.7587%2025.8893L13.5676%2035.9445L17.2529%2039.7222C17.7585%2040.241%2018.3728%2040.5%2019.0955%2040.5C19.8178%2040.5%2020.4322%2040.2403%2020.938%2039.7222L24.6233%2035.9445L44.2413%2015.8334C44.7467%2015.3149%2045%2014.6852%2045%2013.9443C45.0004%2013.2038%2044.7467%2012.574%2044.2413%2012.0554Z'%20fill='%230CD5A2'/%3e%3c/svg%3e";
166
+ //#region src/modules/video-selfie/assets/check-circle.svg
167
+ var check_circle_default = "data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='16'%20cy='16'%20r='16'%20fill='%23189F60'/%3e%3cpath%20d='M10.5%2016.4L14.3%2020.2L21.5%2012'%20stroke='white'%20stroke-width='2.4'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e";
170
168
  //#endregion
171
169
  //#region src/modules/video-selfie/selfieMask.tsx
172
170
  /**
173
- * Port of V1's `SelfieMask`: a fullscreen circular cut-out (dark vignette via
174
- * box-shadow) with the face-frame guide inside and a status line below. Border
175
- * + text color track {@link BorderState} (idle → white, loading → blue,
176
- * success → green, error → red).
171
+ * Gradient stops for the 9px ring, keyed by variant (verified against the
172
+ * Figma ring SVGs). A single stop repeated renders as a solid stroke.
177
173
  */
178
- var SelfieMask = ({ borderState = "idle", message }) => {
179
- const isError = borderState === "error";
180
- const isSuccess = borderState === "success";
174
+ var RING_GRADIENT = {
175
+ idle: ["var(--border-neutral-100-static)", "var(--border-neutral-100-static)"],
176
+ processing: ["var(--border-brand-500)", "var(--surface-neutral-0-static)"],
177
+ success: ["var(--border-status-positive-static)", "var(--surface-neutral-0-static)"],
178
+ error: ["var(--border-status-negative-static)", "var(--border-status-negative-static)"]
179
+ };
180
+ /**
181
+ * Selfie capture mask (latest design): a fullscreen circular cut-out (dark
182
+ * vignette via box-shadow) framed by a chunky 9px gradient ring, with a status
183
+ * line — and, per state, a spinner or a success check — below it. The ring
184
+ * gradient tracks the {@link SelfieMaskVariant}: idle neutral, processing blue,
185
+ * success green, error red.
186
+ */
187
+ var SelfieMask = ({ variant = "idle", message }) => {
188
+ const [fromColor, toColor] = RING_GRADIENT[variant];
189
+ const gradientId = `IncodeVsSelfieRing-${variant}`;
181
190
  return /* @__PURE__ */ u(k, { children: [/* @__PURE__ */ u("div", {
182
- class: cn("IncodeVsSelfieMask", {
183
- IncodeVsSelfieMaskLoading: borderState === "loading",
184
- IncodeVsSelfieMaskCapturing: isSuccess,
185
- IncodeVsSelfieMaskError: isError
186
- }),
191
+ class: "IncodeVsSelfieMask",
187
192
  "aria-hidden": "true",
188
- children: /* @__PURE__ */ u("img", {
189
- src: face_frame_default,
190
- alt: "",
191
- class: "IncodeVsSelfieMaskFrame"
193
+ children: /* @__PURE__ */ u("svg", {
194
+ class: "IncodeVsSelfieMaskRing",
195
+ viewBox: "0 0 335 335",
196
+ fill: "none",
197
+ xmlns: "http://www.w3.org/2000/svg",
198
+ children: [/* @__PURE__ */ u("circle", {
199
+ cx: "167.5",
200
+ cy: "167.5",
201
+ r: "163",
202
+ stroke: `url(#${gradientId})`,
203
+ "stroke-width": "9"
204
+ }), /* @__PURE__ */ u("defs", { children: /* @__PURE__ */ u("linearGradient", {
205
+ id: gradientId,
206
+ x1: "27.7485",
207
+ y1: "34.8117",
208
+ x2: "246.205",
209
+ y2: "290.602",
210
+ gradientUnits: "userSpaceOnUse",
211
+ children: [/* @__PURE__ */ u("stop", { "stop-color": fromColor }), /* @__PURE__ */ u("stop", {
212
+ offset: "1",
213
+ "stop-color": toColor
214
+ })]
215
+ }) })]
192
216
  })
193
- }), /* @__PURE__ */ u("p", {
194
- class: cn("IncodeVsSelfieMaskText", { IncodeVsSelfieMaskTextCapturing: isSuccess }),
217
+ }), /* @__PURE__ */ u("div", {
218
+ class: "IncodeVsSelfieMaskFeedback",
195
219
  role: "region",
196
220
  "aria-live": "polite",
197
221
  children: [
198
- isError ? /* @__PURE__ */ u("img", {
199
- src: failVideoselfieSolid_default,
200
- alt: ""
222
+ variant === "processing" ? /* @__PURE__ */ u(LoadingIcon, { size: 64 }) : null,
223
+ variant === "success" ? /* @__PURE__ */ u("img", {
224
+ src: check_circle_default,
225
+ alt: "",
226
+ class: "IncodeVsSelfieMaskIcon"
201
227
  }) : null,
202
- isSuccess ? /* @__PURE__ */ u("img", {
203
- src: success_selfie_default,
204
- alt: ""
228
+ variant === "error" ? /* @__PURE__ */ u("img", {
229
+ src: failVideoselfieSolid_default,
230
+ alt: "",
231
+ class: "IncodeVsSelfieMaskIcon"
205
232
  }) : null,
206
- message
233
+ /* @__PURE__ */ u("p", {
234
+ class: "IncodeVsSelfieMaskText",
235
+ children: message
236
+ })
207
237
  ]
208
238
  })] });
209
239
  };
@@ -658,11 +688,12 @@ var STEP_ICONS = {
658
688
  speech: consent_default
659
689
  };
660
690
  /**
661
- * Port of V1's `StepsHeader`: a full-width segmented progress bar fixed to the
662
- * top of the capture screen, overlaid transparently on the live camera. Each
663
- * step is a segment with a thin white progress line and an icon — the current
664
- * step shows its module icon, completed steps show a check. When every step is
665
- * done the lines turn green.
691
+ * Port of V1's `StepsHeader`, restyled to the latest design: a full-width
692
+ * segmented "ticket" fixed to the top of the capture screen, overlaid
693
+ * transparently on the live camera. Each step is a pill segment with a 32px
694
+ * icon below it the current step shows its module icon at full opacity,
695
+ * completed steps show a check (half opacity), upcoming steps are faded. When
696
+ * every step is done the pills turn green.
666
697
  */
667
698
  var StepsHeader = ({ steps, currentIndex }) => {
668
699
  const { t } = useTranslation();
@@ -672,13 +703,15 @@ var StepsHeader = ({ steps, currentIndex }) => {
672
703
  "aria-label": t("videoSelfie.progressSteps", { defaultValue: "Progress steps" }),
673
704
  children: steps.map((step, index) => {
674
705
  const isCurrent = index === currentIndex && !isFinished;
675
- const isActive = index <= currentIndex && !isFinished;
676
706
  const isCompleted = index < currentIndex && !isFinished;
677
707
  const label = t(`videoSelfie.step.${step}`);
678
708
  return /* @__PURE__ */ u("li", {
679
- class: cn("IncodeVsStepsHeaderStep", isActive && "IncodeVsStepsHeaderStepActive", isCurrent && "IncodeVsStepsHeaderStepCurrent"),
709
+ class: cn("IncodeVsStepsHeaderStep", isCompleted && "IncodeVsStepsHeaderStepCompleted", isCurrent && "IncodeVsStepsHeaderStepCurrent"),
680
710
  "aria-current": isCurrent ? "step" : void 0,
681
- children: isFinished ? /* @__PURE__ */ u("img", {
711
+ children: [/* @__PURE__ */ u("span", {
712
+ class: "IncodeVsStepsHeaderPill",
713
+ "aria-hidden": "true"
714
+ }), isFinished ? /* @__PURE__ */ u("img", {
682
715
  src: green_check_default,
683
716
  alt: label
684
717
  }) : isCompleted ? /* @__PURE__ */ u("img", {
@@ -687,12 +720,46 @@ var StepsHeader = ({ steps, currentIndex }) => {
687
720
  }) : isCurrent ? /* @__PURE__ */ u("img", {
688
721
  src: STEP_ICONS[step],
689
722
  alt: label
690
- }) : null
723
+ }) : null]
691
724
  }, step);
692
725
  })
693
726
  });
694
727
  };
695
728
  //#endregion
729
+ //#region src/modules/video-selfie/assets/switch-camera.svg
730
+ var switch_camera_default = "data:image/svg+xml,%3csvg%20preserveAspectRatio='none'%20width='100%25'%20height='100%25'%20overflow='visible'%20style='display:%20block;'%20viewBox='0%200%2040%2040'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='icon%20frame'%3e%3cpath%20id='Vector'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M19.9983%2028.7492C18.4366%2028.7492%2016.9316%2028.1808%2015.7616%2027.1458C15.45%2026.8725%2015.2966%2026.4625%2015.3483%2026.0508C15.4%2025.6408%2015.6533%2025.2825%2016.0216%2025.0942L18.56%2023.8058C19.1783%2023.4942%2019.9283%2023.7392%2020.2416%2024.3558C20.5533%2024.9708%2020.3083%2025.7242%2019.6916%2026.0358L19.3716%2026.1992C19.5766%2026.2325%2019.7866%2026.2492%2019.9983%2026.2492C22.1516%2026.2492%2023.905%2024.4975%2023.905%2022.3425C23.905%2021.6525%2024.465%2021.0925%2025.155%2021.0925C25.845%2021.0925%2026.405%2021.6525%2026.405%2022.3425C26.405%2025.8758%2023.53%2028.7492%2019.9983%2028.7492ZM13.5933%2022.3408C13.5933%2018.8108%2016.4666%2015.9375%2019.9983%2015.9375C21.5616%2015.9375%2023.0683%2016.5058%2024.2366%2017.5392C24.5466%2017.8125%2024.7%2018.2242%2024.6483%2018.6342C24.5966%2019.0442%2024.3433%2019.4025%2023.975%2019.5892L21.4383%2020.8775C20.8216%2021.1942%2020.0716%2020.9458%2019.7566%2020.3308C19.445%2019.7142%2019.69%2018.9625%2020.3066%2018.6492L20.625%2018.4875C20.4183%2018.4542%2020.21%2018.4375%2019.9983%2018.4375C17.845%2018.4375%2016.0933%2020.1875%2016.0933%2022.3408C16.0933%2023.0308%2015.5333%2023.5908%2014.8433%2023.5908C14.1533%2023.5908%2013.5933%2023.0308%2013.5933%2022.3408ZM29.9266%2011.4192C29.3233%2011.3958%2028.76%2011.1425%2028.3566%2010.7208C28.2816%2010.6375%2027.9833%2010.2675%2027.2933%208.9725C26.4966%207.48583%2024.9583%206.5625%2023.275%206.5625H16.755C15.0983%206.5625%2013.5716%207.46417%2012.7683%208.91417C12.0433%2010.2308%2011.74%2010.6208%2011.66%2010.7092C11.24%2011.1475%2010.675%2011.4025%2010.1033%2011.4275C6.83497%2011.4275%204.16997%2014.0875%204.16664%2017.3575V26.7608C4.16664%2030.9942%207.60997%2034.4392%2011.8433%2034.4392H28.1566C32.39%2034.4392%2035.8333%2030.9942%2035.8333%2026.7608V17.3542C35.8333%2014.0808%2033.17%2011.4192%2029.9266%2011.4192Z'%20fill='var(--fill-0,%20white)'/%3e%3c/g%3e%3c/svg%3e";
731
+ //#endregion
732
+ //#region src/modules/video-selfie/switchingCameraScreen.tsx
733
+ var SwitchingCameraScreen = ({ steps, currentIndex, facing }) => {
734
+ const { t } = useTranslation();
735
+ const title = facing === "user" ? t("videoSelfie.switchingToFront") : t("videoSelfie.switchingToBack");
736
+ return /* @__PURE__ */ u(Page, {
737
+ hideHeader: true,
738
+ hideFooterBranding: true,
739
+ className: "IncodeVideoSelfieSwitchingCameraPage",
740
+ children: /* @__PURE__ */ u("div", {
741
+ class: "IncodeVideoSelfieSwitchingCamera",
742
+ children: [/* @__PURE__ */ u(StepsHeader, {
743
+ steps,
744
+ currentIndex
745
+ }), /* @__PURE__ */ u("div", {
746
+ class: "IncodeVideoSelfieSwitchingCameraContent",
747
+ role: "status",
748
+ "aria-live": "polite",
749
+ children: [/* @__PURE__ */ u("img", {
750
+ src: switch_camera_default,
751
+ alt: "",
752
+ "aria-hidden": true,
753
+ class: "IncodeVideoSelfieSwitchingCameraIcon"
754
+ }), /* @__PURE__ */ u(AutoFocusTitle, {
755
+ className: "IncodeVideoSelfieSwitchingCameraTitle",
756
+ children: title
757
+ })]
758
+ })]
759
+ })
760
+ });
761
+ };
762
+ //#endregion
696
763
  //#region src/modules/video-selfie/video-selfie.tsx
697
764
  /**
698
765
  * How long the "show the front / back" ID instruction stays pinned on screen
@@ -702,7 +769,7 @@ var StepsHeader = ({ steps, currentIndex }) => {
702
769
  var ID_INSTRUCTION_DWELL_MS = 3e3;
703
770
  /** Maps the recording status + live detection feedback to a border state. */
704
771
  var getBorderState = (state) => {
705
- if (state.status === "starting" || state.status === "switchingCamera") return "loading";
772
+ if (state.status === "starting") return "loading";
706
773
  switch (state.detectionStatus) {
707
774
  case "success": return "success";
708
775
  case "error": return "error";
@@ -712,6 +779,20 @@ var getBorderState = (state) => {
712
779
  default: return "idle";
713
780
  }
714
781
  };
782
+ /**
783
+ * Maps the live detection feedback to the selfie mask's visual state. Only
784
+ * `capturing` reads as the blue "processing" ring (spinner + "Processing…");
785
+ * all other live-detection guidance shows the neutral idle ring, matching the
786
+ * latest design's "look at your front camera" screen.
787
+ */
788
+ var getSelfieVariant = (detectionStatus) => {
789
+ switch (detectionStatus) {
790
+ case "success": return "success";
791
+ case "error": return "error";
792
+ case "capturing": return "processing";
793
+ default: return "idle";
794
+ }
795
+ };
715
796
  var VideoSelfieContent = ({ config, onFinish, onError }) => {
716
797
  const { t } = useTranslation();
717
798
  const cameraWarmer = T(() => config ? createVideoSelfieCameraWarmer(config) : null, [config]);
@@ -769,13 +850,18 @@ var VideoSelfieContent = ({ config, onFinish, onError }) => {
769
850
  });
770
851
  if (state.status === "finished" || state.status === "error" || state.status === "aborted") return null;
771
852
  if (state.status === "finalizing") return /* @__PURE__ */ u(TransitionSpinner, {});
853
+ if (state.status === "switchingCamera") return /* @__PURE__ */ u(SwitchingCameraScreen, {
854
+ steps,
855
+ currentIndex: state.stepIndex,
856
+ facing: facingModeForStep(state.step ?? "selfie")
857
+ });
772
858
  const isFrontCamera = facingModeForStep(step) === "user";
773
859
  const borderState = getBorderState(state);
774
860
  const detectionStatus = state.detectionStatus;
775
861
  const idMode = step === "backId" ? "back" : "front";
776
862
  const stepLabel = t(`videoSelfie.step.${step}`);
777
863
  const maskMessage = () => {
778
- if (detectionStatus === "success") return t("videoSelfie.allGood");
864
+ if (detectionStatus === "success") return t("videoSelfie.lookingGood");
779
865
  if (detectionStatus === "capturing") return t("common.processing");
780
866
  if (detectionStatus === "error") return t("common.tryAgain");
781
867
  if (isFrontCamera) switch (detectionStatus) {
@@ -808,7 +894,7 @@ var VideoSelfieContent = ({ config, onFinish, onError }) => {
808
894
  onDone: () => manager.nextStep()
809
895
  });
810
896
  return isFrontCamera ? /* @__PURE__ */ u(SelfieMask, {
811
- borderState,
897
+ variant: getSelfieVariant(detectionStatus),
812
898
  message: maskMessage()
813
899
  }) : /* @__PURE__ */ u(IdMask, {
814
900
  borderState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incodetech/web",
3
- "version": "0.0.0-dev-20260715-a93e8b97",
3
+ "version": "0.0.0-dev-20260715-dcc78bcd",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/IncodeTechnologies/incode-web-sdk.git"
@@ -291,7 +291,7 @@
291
291
  "qrcode": "^1.5.4",
292
292
  "signature_pad": "^5.1.3",
293
293
  "tailwindcss": "^4.1.17",
294
- "@incodetech/core": "0.0.0-dev-20260715-a93e8b97"
294
+ "@incodetech/core": "0.0.0-dev-20260715-dcc78bcd"
295
295
  },
296
296
  "devDependencies": {
297
297
  "@microsoft/api-extractor": "^7.53.3",