@incodetech/web 0.0.0-dev-20260922-d0252a78 → 0.0.0-dev-20260922-46015ab9

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.
Files changed (81) hide show
  1. package/dist/ae-signature/ae-signature.es.js +2 -2
  2. package/dist/antifraud/antifraud.es.js +1 -1
  3. package/dist/authentication/authentication.es.js +3 -3
  4. package/dist/{baseTutorial-CHzMCGsI.js → baseTutorial-DbkYUaqn.js} +1 -1
  5. package/dist/cameraOverlay-BCxI0VVz.js +2 -0
  6. package/dist/{cameraOverlayHeader-C76UBeOG.js → cameraOverlayHeader-D_ou9DR7.js} +3 -2
  7. package/dist/{cameraView-D0s48rly.js → cameraView-BrrXm3pi.js} +1 -1
  8. package/dist/certificate-issuance/certificate-issuance.es.js +2 -2
  9. package/dist/{connectionError-C2G8CadP.js → connectionError-BpCFiyxO.js} +1 -1
  10. package/dist/consent/consent.es.js +1 -1
  11. package/dist/cross-document-data-match/cross-document-data-match.es.js +1 -1
  12. package/dist/curp-validation/curp-validation.es.js +1 -1
  13. package/dist/{customFields-fN5r5a8f.js → customFields-CmEhYCzh.js} +2 -2
  14. package/dist/{customWatchlist-Gex3dK_r.js → customWatchlist-CNTtCnXx.js} +2 -2
  15. package/dist/{denied-CGmHuKMu.js → denied-BHYWuECd.js} +1 -1
  16. package/dist/document-capture/document-capture.es.js +1 -1
  17. package/dist/{documentCapture-e_0a7-a8.js → documentCapture-DSiVUNOx.js} +6 -6
  18. package/dist/documentCapture-_G67-UOB.js +2 -0
  19. package/dist/dynamic-forms/dynamic-forms.es.js +2 -2
  20. package/dist/ekyb/ekyb.es.js +1 -1
  21. package/dist/{ekybModule-CxFjxiwt.js → ekybModule-BIiPeTeO.js} +3 -3
  22. package/dist/ekybModule-BRdhEj1T.js +2 -0
  23. package/dist/ekyc/ekyc.es.js +1 -1
  24. package/dist/ekycModule-C-hymIbT.js +2 -0
  25. package/dist/{ekycModule-CUEJ1KX8.js → ekycModule-CjxLRP2g.js} +3 -3
  26. package/dist/electronic-signature/electronic-signature.es.js +1 -1
  27. package/dist/{electronic-signature-B2YjKVWX.js → electronic-signature-Djg4My1w.js} +2 -2
  28. package/dist/email/email.es.js +1 -1
  29. package/dist/{errorContent-DNEW4Icr.js → errorContent-DtXlNU51.js} +1 -1
  30. package/dist/{expiredId-D5LAeBl-.js → expiredId-PA98YIsj.js} +1 -1
  31. package/dist/extensibility.es.js +14 -14
  32. package/dist/face-match/face-match.es.js +1 -1
  33. package/dist/faceMatch-sPmO6vlz.js +2 -0
  34. package/dist/{faceMatch-DDUtXw16.js → faceMatch-vQugMDLp.js} +1 -1
  35. package/dist/field-comparison/field-comparison.es.js +1 -1
  36. package/dist/fieldComparison-Cv4GD4HG.js +2 -0
  37. package/dist/{fieldComparison-Dvr1JMlL.js → fieldComparison-DzFCY02Y.js} +2 -2
  38. package/dist/{finalSuccessScreen-CvSzGIIv.js → finalSuccessScreen-snAKHexy.js} +2 -2
  39. package/dist/fiscal-qr/fiscal-qr.es.js +6 -6
  40. package/dist/{flipAnimation-B15YZvFA.js → flipAnimation-DhQIQp5j.js} +61 -14
  41. package/dist/flow/flow.es.js +3 -3
  42. package/dist/flow/styles.css +109 -0
  43. package/dist/geolocation/geolocation.es.js +3 -3
  44. package/dist/government-validation/government-validation.es.js +1 -1
  45. package/dist/id/id.es.js +242 -34
  46. package/dist/id/styles.css +109 -0
  47. package/dist/id/styles.css.js +1 -1
  48. package/dist/id-selfie-flow/id-selfie-flow.es.js +4 -4
  49. package/dist/id-verification/id-verification.es.js +2 -2
  50. package/dist/{idOcr-BaqhOeIZ.js → idOcr-BQtJ1_KI.js} +2 -2
  51. package/dist/identity-reuse/identity-reuse.es.js +1 -1
  52. package/dist/{incodeComponent-CczO1gui.js → incodeComponent-myzNTgon.js} +1 -1
  53. package/dist/{mandatoryConsent-DGXKEFDs.js → mandatoryConsent-BvL4WCr9.js} +1 -1
  54. package/dist/{optionAccessibleLabel-DrLYCAZN.js → optionAccessibleLabel-BF_h9CxU.js} +1 -1
  55. package/dist/{permissions-DzGg4Fc0.js → permissions-B0oXKhGP.js} +2 -2
  56. package/dist/phone/phone.es.js +1 -1
  57. package/dist/{processing-DRfh5Zei.js → processing-tdGRMchn.js} +1 -1
  58. package/dist/qe-signature/qe-signature.es.js +2 -2
  59. package/dist/redirect-to-mobile/redirect-to-mobile.es.js +1 -1
  60. package/dist/{resolveApiKey-FkPYmv_R.js → resolveApiKey-CHeTCBa_.js} +13 -13
  61. package/dist/selfie/selfie.es.js +4 -4
  62. package/dist/signature/signature.es.js +2 -2
  63. package/dist/{statusPage-B0sYgTL_.js → statusPage-BqXDBq_C.js} +1 -1
  64. package/dist/themes/dark.css +3 -0
  65. package/dist/themes/light.css +3 -0
  66. package/dist/{tutorial-gvdCPC4L.js → tutorial-CVhFQpGW.js} +5 -5
  67. package/dist/types/extensibility.d.ts +9 -0
  68. package/dist/{useCaptureHelpButton-kNEyneL-.js → useCaptureHelpButton-BFtgwFjU.js} +5 -3
  69. package/dist/{verificationResult-DJXxeLz1.js → verificationResult-4WY-cpM5.js} +1 -1
  70. package/dist/video-selfie/video-selfie.es.js +4 -4
  71. package/dist/watchlist/watchlist.es.js +2 -2
  72. package/dist/{watchlistForBusiness-DjpFRmSC.js → watchlistForBusiness-vtQkBvAe.js} +2 -2
  73. package/dist/workflow/styles.css +109 -0
  74. package/dist/workflow/workflow.es.js +2 -2
  75. package/package.json +2 -2
  76. package/dist/cameraOverlay-D3zLB5n9.js +0 -2
  77. package/dist/documentCapture-R66i8Tuj.js +0 -2
  78. package/dist/ekybModule-ClkyJQmk.js +0 -2
  79. package/dist/ekycModule-B-NaJsZM.js +0 -2
  80. package/dist/faceMatch-BHagYoXQ.js +0 -2
  81. package/dist/fieldComparison-D98YhQfH.js +0 -2
@@ -1,10 +1,10 @@
1
1
  import { o as useTranslation, t as setThemeUiConfig, u as readStoredLanguage } from "../uiConfig-CDCUh723.js";
2
2
  import { _ as y, a as P, c as A, f as d, s as z, u as T, v as u } from "../vendor-preact-C0jX1Cbq.js";
3
- import { C as withSessionExpiry, S as useManager, a as ResolvedConfigProvider, d as TransitionSpinner, s as TerminalErrorPage, t as IncodeComponent } from "../incodeComponent-CczO1gui.js";
3
+ import { C as useManager, a as ResolvedConfigProvider, d as TransitionSpinner, s as TerminalErrorPage, t as IncodeComponent, w as withSessionExpiry } from "../incodeComponent-myzNTgon.js";
4
4
  import { b as ErrorIcon } from "../icons-WqhnqLRy.js";
5
- import { t as StatusPage } from "../statusPage-B0sYgTL_.js";
5
+ import { t as StatusPage } from "../statusPage-BqXDBq_C.js";
6
6
  import { t as registerIncodeModuleElement } from "../incodeModule-Br_gGyha.js";
7
- import { a as LAZY_UI_MODULES, c as initializeFlowManager, f as warmupWasmIfNeeded, i as HEADLESS_FLOW_MODULE_KEYS, l as preloadFirstModule, m as resolveSessionLanguage, n as extractIncodeStatus, o as createFlowManager, r as UnsupportedModule, s as fetchTheme, t as resolveApiKey, u as preloadHomeScreen } from "../resolveApiKey-FkPYmv_R.js";
7
+ import { a as LAZY_UI_MODULES, c as initializeFlowManager, f as warmupWasmIfNeeded, i as HEADLESS_FLOW_MODULE_KEYS, l as preloadFirstModule, m as resolveSessionLanguage, n as extractIncodeStatus, o as createFlowManager, r as UnsupportedModule, s as fetchTheme, t as resolveApiKey, u as preloadHomeScreen } from "../resolveApiKey-CHeTCBa_.js";
8
8
  import { i as usePrefetchNextModule, n as useModuleLoader, r as useModulePreloader } from "../useModuleLoader-DpcbSKBH.js";
9
9
  import { bootstrapSession, refreshQrUrlUuid } from "@incodetech/core/session";
10
10
  import { getNextRequiredWasmPipelines } from "@incodetech/core/flow";
@@ -1789,6 +1789,115 @@
1789
1789
  min-height: var(--id-capture-hint-svg-size);
1790
1790
  }
1791
1791
 
1792
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraContent {
1793
+ opacity: 0;
1794
+ width: 100%;
1795
+ height: 100%;
1796
+ animation: incodePermissionInCameraReveal var(--id-tutorial-to-permission-transition-duration) ease-out var(--id-permission-in-camera-reveal-delay) forwards;
1797
+ flex-direction: column;
1798
+ align-items: center;
1799
+ display: flex;
1800
+ }
1801
+
1802
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraReservedFooter {
1803
+ visibility: hidden;
1804
+ }
1805
+
1806
+ @media (prefers-reduced-motion: reduce) {
1807
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraContent {
1808
+ animation-duration: 1ms;
1809
+ animation-delay: 0s;
1810
+ }
1811
+ }
1812
+
1813
+ @keyframes incodePermissionInCameraReveal {
1814
+ from {
1815
+ opacity: 0;
1816
+ }
1817
+
1818
+ to {
1819
+ opacity: 1;
1820
+ }
1821
+ }
1822
+
1823
+ .IncodeComponent .IncodePermissionInCameraFlowStage {
1824
+ width: 100%;
1825
+ height: 100%;
1826
+ position: relative;
1827
+ }
1828
+
1829
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowCaptureLayer, .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayer, .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayer {
1830
+ inset: var(--spacing-0, var(--spacing-none, 0px));
1831
+ position: absolute;
1832
+ }
1833
+
1834
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowCaptureLayer {
1835
+ z-index: 10;
1836
+ }
1837
+
1838
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayer {
1839
+ z-index: 20;
1840
+ }
1841
+
1842
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayer {
1843
+ z-index: 30;
1844
+ }
1845
+
1846
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayerExiting {
1847
+ pointer-events: none;
1848
+ animation: incodePermissionInCameraToCaptureExit var(--id-permission-in-camera-to-capture-transition-duration) ease-in var(--id-permission-in-camera-to-capture-transition-duration) forwards;
1849
+ }
1850
+
1851
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayerExiting .IncodePermissionInCameraHeading {
1852
+ animation: incodePermissionInCameraHeadingExit var(--id-permission-in-camera-to-capture-transition-duration) ease-in forwards;
1853
+ }
1854
+
1855
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayerExiting {
1856
+ pointer-events: none;
1857
+ animation: incodeTutorialToPermissionInCameraExit var(--id-tutorial-to-permission-transition-duration) ease-in forwards;
1858
+ }
1859
+
1860
+ @media (prefers-reduced-motion: reduce) {
1861
+ .IncodeComponent .IncodePermissionInCameraFlowPermissionLayerExiting {
1862
+ animation-duration: 1ms;
1863
+ animation-delay: 0s;
1864
+ }
1865
+
1866
+ .IncodeComponent .IncodePermissionInCameraFlowPermissionLayerExiting .IncodePermissionInCameraHeading, .IncodeComponent .IncodePermissionInCameraFlowTutorialLayerExiting {
1867
+ animation-duration: 1ms;
1868
+ }
1869
+ }
1870
+
1871
+ @keyframes incodeTutorialToPermissionInCameraExit {
1872
+ from {
1873
+ opacity: 1;
1874
+ }
1875
+
1876
+ to {
1877
+ opacity: 0;
1878
+ }
1879
+ }
1880
+
1881
+ @keyframes incodePermissionInCameraHeadingExit {
1882
+ from {
1883
+ opacity: 1;
1884
+ }
1885
+
1886
+ to {
1887
+ opacity: 0;
1888
+ }
1889
+ }
1890
+
1891
+ @keyframes incodePermissionInCameraToCaptureExit {
1892
+ from {
1893
+ opacity: 1;
1894
+ }
1895
+
1896
+ to {
1897
+ opacity: 0;
1898
+ }
1899
+ }
1900
+
1792
1901
  .IncodeIdProcessingPage .IncodePageInner {
1793
1902
  padding: var(--spacing-0, var(--spacing-none, 0px));
1794
1903
  }
@@ -1,10 +1,10 @@
1
1
  import { a as Trans, o as useTranslation } from "../uiConfig-CDCUh723.js";
2
2
  import { S as k, v as u } from "../vendor-preact-C0jX1Cbq.js";
3
- import { S as useManager, b as useModuleTerminalCallbacks, c as Page, i as withStandaloneModuleBootstrap, t as IncodeComponent } from "../incodeComponent-CczO1gui.js";
3
+ import { C as useManager, c as Page, i as withStandaloneModuleBootstrap, t as IncodeComponent, x as useModuleTerminalCallbacks } from "../incodeComponent-myzNTgon.js";
4
4
  import { t as Spacer } from "../spacer-DpwHVn_F.js";
5
5
  import { x as Button } from "../icons-WqhnqLRy.js";
6
- import { t as VerificationResult } from "../verificationResult-DJXxeLz1.js";
7
- import { t as ConnectionError } from "../connectionError-C2G8CadP.js";
6
+ import { t as VerificationResult } from "../verificationResult-4WY-cpM5.js";
7
+ import { t as ConnectionError } from "../connectionError-BpCFiyxO.js";
8
8
  import { t as NumberedStep } from "../numberedStep-C8e_uPaz.js";
9
9
  import { t as registerIncodeModuleElement } from "../incodeModule-Br_gGyha.js";
10
10
  import { getBrowser, getDeviceClass } from "@incodetech/core/device";
@@ -1,6 +1,6 @@
1
1
  import { o as useTranslation } from "../uiConfig-CDCUh723.js";
2
2
  import { v as u } from "../vendor-preact-C0jX1Cbq.js";
3
- import { S as useManager, b as useModuleTerminalCallbacks, c as Page, d as TransitionSpinner, i as withStandaloneModuleBootstrap, t as IncodeComponent } from "../incodeComponent-CczO1gui.js";
3
+ import { C as useManager, c as Page, d as TransitionSpinner, i as withStandaloneModuleBootstrap, t as IncodeComponent, x as useModuleTerminalCallbacks } from "../incodeComponent-myzNTgon.js";
4
4
  import { t as registerIncodeModuleElement } from "../incodeModule-Br_gGyha.js";
5
5
  import { createGovernmentValidationManager } from "@incodetech/core/government-validation";
6
6
  //#region src/modules/government-validation/governmentIncodeLogo.tsx
package/dist/id/id.es.js CHANGED
@@ -1,18 +1,20 @@
1
1
  import { o as useTranslation } from "../uiConfig-CDCUh723.js";
2
2
  import { S as k, _ as y, a as P, c as A, f as d, h as q, s as z, u as T, v as u } from "../vendor-preact-C0jX1Cbq.js";
3
- import { S as useManager, _ as useIsMobileDeviceWidth, b as useModuleTerminalCallbacks, c as Page, d as TransitionSpinner, f as useFeatureManagement, i as withStandaloneModuleBootstrap, l as VerifiedByIncodeLogo, m as useTimeoutHandle, o as useHasResolvedConfig, t as IncodeComponent } from "../incodeComponent-CczO1gui.js";
3
+ import { C as useManager, c as Page, d as TransitionSpinner, f as useFeatureManagement, h as useTimeoutHandle, i as withStandaloneModuleBootstrap, l as VerifiedByIncodeLogo, m as useAnimationSignal, o as useHasResolvedConfig, p as usePresence, t as IncodeComponent, v as useIsMobileDeviceWidth, x as useModuleTerminalCallbacks } from "../incodeComponent-myzNTgon.js";
4
4
  import { d as cn, i as preloadAnimations, r as AnimatedAsset, s as Asset, t as Spacer } from "../spacer-DpwHVn_F.js";
5
5
  import { o as TypographyP, t as Title } from "../typography-C5JjJJg7.js";
6
6
  import { a as LockIcon, b as ErrorIcon, r as SuccessIcon, x as Button } from "../icons-WqhnqLRy.js";
7
7
  import { t as AutoFocusTitle } from "../autoFocusTitle-L-5SobO2.js";
8
- import { t as Processing } from "../processing-DRfh5Zei.js";
8
+ import { t as Processing } from "../processing-tdGRMchn.js";
9
9
  import { t as Modal } from "../modal-rmddy1AH.js";
10
- import { t as VerificationResult } from "../verificationResult-DJXxeLz1.js";
11
- import { r as ProgressBar } from "../useCaptureHelpButton-kNEyneL-.js";
12
- import { a as IdNoAttempts, c as canFlipCapturedCard, d as CAMERA_PERMISSION_UX, f as CONTINUING_TUTORIAL_PHASES, g as PERMISSION_DIALOG_STATUS, h as ID_CAPTURE_STATUS, i as Capture, l as CaptureFrame, m as ID_CAPTURE_LOADING_PHASE, n as Chooser, o as IdExpired, p as EXPERIMENT_LIFECYCLE_STATUS, r as Tutorial, s as IdError, t as FlipAnimation, u as useIdExperiment } from "../flipAnimation-B15YZvFA.js";
10
+ import { t as VerificationResult } from "../verificationResult-4WY-cpM5.js";
11
+ import { n as CaptureFooter, r as ProgressBar } from "../useCaptureHelpButton-BFtgwFjU.js";
12
+ import { _ as ID_CAPTURE_LOADING_PHASE, a as CaptureAutoFocusProvider, c as IdExpired, d as CaptureFrame, f as useIdExperiment, g as EXPERIMENT_LIFECYCLE_STATUS, h as CONTINUING_TUTORIAL_PHASES, i as Capture, l as IdError, m as CAMERA_WARMUP_LOADING_PHASES, n as Chooser, o as getCaptureFrameTitle, p as CAMERA_PERMISSION_UX, r as Tutorial, s as IdNoAttempts, t as FlipAnimation, u as canFlipCapturedCard, v as ID_CAPTURE_STATUS, y as PERMISSION_DIALOG_STATUS } from "../flipAnimation-DhQIQp5j.js";
13
13
  import { t as BottomSheet } from "../bottomSheet-CoP3FqnD.js";
14
- import { i as SvgReloadIcon, n as SvgCheckV2Icon, r as SvgPersonCardIcon } from "../denied-CGmHuKMu.js";
15
- import { n as PermissionsDialog, t as Permissions } from "../permissions-DzGg4Fc0.js";
14
+ import { n as CameraFrame, t as CameraView } from "../cameraView-BrrXm3pi.js";
15
+ import { n as CameraOverlay, t as CameraOverlayHeader } from "../cameraOverlayHeader-D_ou9DR7.js";
16
+ import { i as SvgReloadIcon, n as SvgCheckV2Icon, r as SvgPersonCardIcon } from "../denied-BHYWuECd.js";
17
+ import { n as PermissionsDialog, t as Permissions } from "../permissions-B0oXKhGP.js";
16
18
  import { t as PdfViewer } from "../pdfViewer-S-XOG4NK.js";
17
19
  import { t as registerIncodeModuleElement } from "../incodeModule-Br_gGyha.js";
18
20
  import { t as SvgIdBackOfCard } from "../id-back-of-card-B6EcmiCs.js";
@@ -1131,14 +1133,22 @@ function createSlots({ manager, stage, howItWorksOpen, onOpenHowItWorks, onClose
1131
1133
  var TutorialWithPermissions = ({ manager, stage }) => {
1132
1134
  const { t } = useTranslation();
1133
1135
  const [howItWorksOpen, setHowItWorksOpen] = d(false);
1136
+ const [isAdvancing, setIsAdvancing] = d(false);
1134
1137
  const isHowItWorks = stage.ux.id === CAMERA_PERMISSION_UX.HOW_IT_WORKS;
1135
- const isCtaLoading = stage.tutorialPhase !== null ? CONTINUING_TUTORIAL_PHASES.has(stage.tutorialPhase) || stage.ux.id === CAMERA_PERMISSION_UX.PENDING : true;
1138
+ const isPermissionUxPending = stage.ux.id === CAMERA_PERMISSION_UX.PENDING;
1139
+ const isCtaLoading = stage.tutorialPhase !== null ? CONTINUING_TUTORIAL_PHASES.has(stage.tutorialPhase) || isPermissionUxPending || isAdvancing : true;
1136
1140
  const requestPermissionFromTutorial = () => manager.requestPermission();
1137
1141
  function handleContinue() {
1142
+ if (isAdvancing) return;
1138
1143
  if (isHowItWorks) {
1139
1144
  requestPermissionFromTutorial();
1140
1145
  return;
1141
1146
  }
1147
+ if (stage.ux.id === CAMERA_PERMISSION_UX.PERMISSION_IN_CAMERA) {
1148
+ setIsAdvancing(true);
1149
+ manager.continueToPermission();
1150
+ return;
1151
+ }
1142
1152
  manager.nextStep();
1143
1153
  }
1144
1154
  const slots = createSlots({
@@ -1168,6 +1178,158 @@ var TutorialWithPermissions = ({ manager, stage }) => {
1168
1178
  ] });
1169
1179
  };
1170
1180
  //#endregion
1181
+ //#region src/modules/id/permissionInCamera/permissionInCamera.tsx
1182
+ var PERMISSION_IN_CAMERA_REVEAL_ANIMATION_NAME = "incodePermissionInCameraReveal";
1183
+ var PERMISSION_IN_CAMERA_REVEAL_WATCHDOG_MS = 1500;
1184
+ var PermissionInCamera = ({ manager, state }) => {
1185
+ const { t } = useTranslation();
1186
+ const [shellReady, setShellReady] = d(false);
1187
+ const requestedAutomaticallyRef = A(false);
1188
+ const hasRenderedRequestingRef = A(false);
1189
+ const permissionStatus = state.status === "permissions" ? state.permissionStatus : void 0;
1190
+ const canRequest = permissionStatus === "idle" || permissionStatus === "motionOnly";
1191
+ if (permissionStatus === "requesting") hasRenderedRequestingRef.current = true;
1192
+ y(() => {
1193
+ if (!shellReady || !canRequest || state.requiresMotionPermissionUserGesture || requestedAutomaticallyRef.current) return;
1194
+ requestedAutomaticallyRef.current = true;
1195
+ manager.requestPermission({ trigger: "automatic" });
1196
+ }, [
1197
+ canRequest,
1198
+ manager,
1199
+ shellReady,
1200
+ state.requiresMotionPermissionUserGesture
1201
+ ]);
1202
+ const handleShellAnimationEnd = useAnimationSignal({
1203
+ active: !shellReady,
1204
+ animationName: PERMISSION_IN_CAMERA_REVEAL_ANIMATION_NAME,
1205
+ timeoutMs: PERMISSION_IN_CAMERA_REVEAL_WATCHDOG_MS,
1206
+ onComplete: () => setShellReady(true)
1207
+ });
1208
+ const automaticRequestReturnedToAskable = requestedAutomaticallyRef.current && hasRenderedRequestingRef.current && canRequest;
1209
+ if (canRequest && (automaticRequestReturnedToAskable || state.requiresMotionPermissionUserGesture)) return /* @__PURE__ */ u(Permissions, {
1210
+ manager,
1211
+ permissionStatus
1212
+ });
1213
+ return /* @__PURE__ */ u(Page, {
1214
+ hideHeader: true,
1215
+ hideFooterBranding: true,
1216
+ className: "IncodeIdCapturePage IncodePermissionInCameraPage",
1217
+ "data-testid": "permission-in-camera",
1218
+ "data-permission-status": permissionStatus,
1219
+ children: /* @__PURE__ */ u(CameraView, {
1220
+ stream: void 0,
1221
+ children: /* @__PURE__ */ u(CameraOverlay, {
1222
+ className: "IncodeCaptureOverlayId",
1223
+ children: /* @__PURE__ */ u("div", {
1224
+ class: "IncodePermissionInCameraContent",
1225
+ onAnimationEnd: handleShellAnimationEnd,
1226
+ children: [
1227
+ /* @__PURE__ */ u("div", {
1228
+ class: "IncodeCaptureTopSection",
1229
+ children: /* @__PURE__ */ u(CameraOverlayHeader, {
1230
+ title: getCaptureFrameTitle(t, state.currentMode),
1231
+ subtitle: t("idv2.capture.permissionInCamera.subtitle"),
1232
+ titleId: "permission-in-camera-heading",
1233
+ className: "IncodePermissionInCameraHeading",
1234
+ autoFocusTitle: shellReady
1235
+ })
1236
+ }),
1237
+ /* @__PURE__ */ u(CameraFrame, {
1238
+ variant: "locked",
1239
+ orientation: "horizontal",
1240
+ className: cn(state.currentMode === "passport" && "IncodeCaptureFramePassport")
1241
+ }),
1242
+ /* @__PURE__ */ u("div", {
1243
+ class: "IncodeSrOnly",
1244
+ "aria-live": "polite",
1245
+ "aria-atomic": "true",
1246
+ children: permissionStatus === "requesting" ? t("common.holdOnASec") : ""
1247
+ }),
1248
+ /* @__PURE__ */ u(CaptureFooter, {
1249
+ className: "IncodePermissionInCameraReservedFooter",
1250
+ onOpenHelp: () => void 0,
1251
+ hideActions: true,
1252
+ inactive: true
1253
+ })
1254
+ ]
1255
+ })
1256
+ })
1257
+ })
1258
+ });
1259
+ };
1260
+ //#endregion
1261
+ //#region src/modules/id/permissionInCamera/permissionInCameraFlowTransition.tsx
1262
+ var PERMISSION_IN_CAMERA_TO_CAPTURE_EXIT_ANIMATION_NAME = "incodePermissionInCameraToCaptureExit";
1263
+ var PERMISSION_IN_CAMERA_TO_CAPTURE_EXIT_WATCHDOG_MS = 1e3;
1264
+ /**
1265
+ * Coordinates the complete Tutorial -> PermissionInCamera -> Capture visual
1266
+ * flow. Core still advances synchronously; this component retains each
1267
+ * outgoing screen only for its visual and accessibility handoff.
1268
+ */
1269
+ var PermissionInCameraFlowTransition = ({ manager, tutorialStage, permissionState, captureState }) => {
1270
+ const lastTutorialStageRef = A(null);
1271
+ const lastPermissionStateRef = A(null);
1272
+ const permissionIsMounted = permissionState !== null;
1273
+ const tutorialOwnsScreen = tutorialStage !== null && !permissionIsMounted;
1274
+ if (tutorialOwnsScreen) lastTutorialStageRef.current = tutorialStage;
1275
+ if (permissionState) lastPermissionStateRef.current = permissionState;
1276
+ const tutorialPresence = usePresence({
1277
+ present: tutorialOwnsScreen,
1278
+ animationName: PERMISSION_IN_CAMERA_REVEAL_ANIMATION_NAME,
1279
+ timeoutMs: PERMISSION_IN_CAMERA_REVEAL_WATCHDOG_MS,
1280
+ skipExit: !permissionIsMounted
1281
+ });
1282
+ const captureIsMounted = captureState !== null;
1283
+ const permissionPresence = usePresence({
1284
+ present: permissionIsMounted,
1285
+ animationName: PERMISSION_IN_CAMERA_TO_CAPTURE_EXIT_ANIMATION_NAME,
1286
+ timeoutMs: PERMISSION_IN_CAMERA_TO_CAPTURE_EXIT_WATCHDOG_MS,
1287
+ skipExit: !captureIsMounted
1288
+ });
1289
+ const isTutorialHandoff = permissionIsMounted && tutorialPresence.phase === "exiting";
1290
+ const isCaptureHandoff = captureIsMounted && permissionPresence.phase === "exiting";
1291
+ const retainedTutorialStage = tutorialPresence.isRendered ? lastTutorialStageRef.current : null;
1292
+ const retainedPermissionState = permissionPresence.isRendered ? lastPermissionStateRef.current : null;
1293
+ const handlePermissionAnimationEnd = (event) => {
1294
+ tutorialPresence.onAnimationEnd(event);
1295
+ permissionPresence.onAnimationEnd(event);
1296
+ };
1297
+ return /* @__PURE__ */ u("div", {
1298
+ class: "IncodePermissionInCameraFlowStage",
1299
+ children: [
1300
+ captureState ? /* @__PURE__ */ u("div", {
1301
+ class: "IncodePermissionInCameraFlowCaptureLayer",
1302
+ "aria-hidden": isCaptureHandoff || void 0,
1303
+ inert: isCaptureHandoff || void 0,
1304
+ children: /* @__PURE__ */ u(CaptureAutoFocusProvider, {
1305
+ enabled: !isCaptureHandoff,
1306
+ children: /* @__PURE__ */ u(Capture, {
1307
+ manager,
1308
+ state: captureState
1309
+ })
1310
+ })
1311
+ }, "capture") : null,
1312
+ retainedPermissionState ? /* @__PURE__ */ u("div", {
1313
+ class: cn("IncodePermissionInCameraFlowPermissionLayer", isCaptureHandoff && "IncodePermissionInCameraFlowPermissionLayerExiting"),
1314
+ "aria-hidden": isTutorialHandoff || void 0,
1315
+ inert: isTutorialHandoff || void 0,
1316
+ onAnimationEnd: handlePermissionAnimationEnd,
1317
+ children: /* @__PURE__ */ u(PermissionInCamera, {
1318
+ manager,
1319
+ state: retainedPermissionState
1320
+ })
1321
+ }, "permission") : null,
1322
+ retainedTutorialStage ? /* @__PURE__ */ u("div", {
1323
+ class: cn("IncodePermissionInCameraFlowTutorialLayer", tutorialPresence.phase === "exiting" && "IncodePermissionInCameraFlowTutorialLayerExiting"),
1324
+ children: /* @__PURE__ */ u(TutorialWithPermissions, {
1325
+ manager,
1326
+ stage: retainedTutorialStage
1327
+ })
1328
+ }, "tutorial") : null
1329
+ ]
1330
+ });
1331
+ };
1332
+ //#endregion
1171
1333
  //#region src/modules/id/experiments/useCameraPermissionUx.ts
1172
1334
  /** Permission surfaces the treatment can alter — the dialog ones, not the full-screen ones. */
1173
1335
  function isPermissionDialogSurface(state) {
@@ -1200,20 +1362,26 @@ function getCameraPermissionExperimentContext(state) {
1200
1362
  if (!isCameraDocumentType(state.selectedDocumentType)) return;
1201
1363
  return { tutorialEnabled: state.status === ID_CAPTURE_STATUS.TUTORIAL ? true : state.tutorialEnabled };
1202
1364
  }
1203
- function isCameraPermissionTreatmentSurface(state) {
1204
- if (state.status === ID_CAPTURE_STATUS.TUTORIAL) return true;
1205
- if (isPermissionsIdleBlip(state)) return state.tutorialEnabled;
1206
- return isPermissionDialogSurface(state) && state.tutorialEnabled;
1365
+ function resolveCameraPermissionSurface(state) {
1366
+ if (state.status === ID_CAPTURE_STATUS.TUTORIAL) return "tutorialBacked";
1367
+ if (state.status === ID_CAPTURE_STATUS.LOADING) {
1368
+ if (!state.tutorialEnabled) return "none";
1369
+ if (isPermissionsIdleBlip(state)) return "tutorialBacked";
1370
+ return CAMERA_WARMUP_LOADING_PHASES.has(state.phase) ? "permissionInCameraOnly" : "none";
1371
+ }
1372
+ if (isPermissionDialogSurface(state)) return state.tutorialEnabled ? "tutorialBacked" : "none";
1373
+ return "none";
1207
1374
  }
1208
- function collapseCameraPermissionUx(showHowItWorks, showPermissionSheet) {
1375
+ function collapseCameraPermissionUx(showHowItWorks, showPermissionSheet, showPermissionInCamera) {
1209
1376
  if (showHowItWorks) return { id: CAMERA_PERMISSION_UX.HOW_IT_WORKS };
1210
1377
  if (showPermissionSheet) return { id: CAMERA_PERMISSION_UX.PERMISSION_SHEET };
1378
+ if (showPermissionInCamera) return { id: CAMERA_PERMISSION_UX.PERMISSION_IN_CAMERA };
1211
1379
  return { id: CAMERA_PERMISSION_UX.CONTROL };
1212
1380
  }
1213
1381
  function useCameraPermissionUx(state) {
1214
1382
  const experimentContext = getCameraPermissionExperimentContext(state);
1215
1383
  const experimentEnabled = experimentContext !== void 0;
1216
- const onTreatmentSurface = experimentEnabled && isCameraPermissionTreatmentSurface(state);
1384
+ const surface = experimentEnabled ? resolveCameraPermissionSurface(state) : "none";
1217
1385
  const howItWorksExperiment = useIdExperiment({
1218
1386
  key: "cameraPermissionHowItWorks",
1219
1387
  enabled: experimentEnabled,
@@ -1224,9 +1392,15 @@ function useCameraPermissionUx(state) {
1224
1392
  enabled: experimentEnabled,
1225
1393
  conditions: experimentContext
1226
1394
  });
1227
- if (!onTreatmentSurface) return { id: CAMERA_PERMISSION_UX.CONTROL };
1228
- if (howItWorksExperiment.status === EXPERIMENT_LIFECYCLE_STATUS.PENDING || permissionSheetExperiment.status === EXPERIMENT_LIFECYCLE_STATUS.PENDING) return { id: CAMERA_PERMISSION_UX.PENDING };
1229
- return collapseCameraPermissionUx(howItWorksExperiment.params.showHowItWorks, permissionSheetExperiment.params.showPermissionSheet);
1395
+ const permissionInCameraExperiment = useIdExperiment({
1396
+ key: "cameraPermissionInCamera",
1397
+ enabled: experimentEnabled,
1398
+ conditions: experimentContext
1399
+ });
1400
+ if (surface === "none") return { id: CAMERA_PERMISSION_UX.CONTROL };
1401
+ if (howItWorksExperiment.status === EXPERIMENT_LIFECYCLE_STATUS.PENDING || permissionSheetExperiment.status === EXPERIMENT_LIFECYCLE_STATUS.PENDING || permissionInCameraExperiment.status === EXPERIMENT_LIFECYCLE_STATUS.PENDING) return { id: CAMERA_PERMISSION_UX.PENDING };
1402
+ const onTutorialBackedSurface = surface === "tutorialBacked";
1403
+ return collapseCameraPermissionUx(onTutorialBackedSurface && howItWorksExperiment.params.showHowItWorks, onTutorialBackedSurface && permissionSheetExperiment.params.showPermissionSheet, permissionInCameraExperiment.params.showPermissionInCamera);
1230
1404
  }
1231
1405
  //#endregion
1232
1406
  //#region src/modules/id/useIdTutorialWithPermissionsUxStage.ts
@@ -1243,16 +1417,7 @@ function isDialogBackdropStatus(ux, permissionStatus) {
1243
1417
  if (ux.id === CAMERA_PERMISSION_UX.PERMISSION_SHEET) return permissionStatus === PERMISSION_DIALOG_STATUS.IDLE || permissionStatus === PERMISSION_DIALOG_STATUS.MOTION_ONLY || permissionStatus === PERMISSION_DIALOG_STATUS.REQUESTING;
1244
1418
  return false;
1245
1419
  }
1246
- /**
1247
- * Resolves when `TutorialWithPermissions` should render instead of the plain
1248
- * tutorial or permissions screens.
1249
- *
1250
- * - Default (non-experimental): `state.status === 'tutorial'`.
1251
- * - Camera-permission experiment: permissions dialog with tutorial backdrop
1252
- * when `tutorialEnabled` and the treatment is not control.
1253
- */
1254
- function useIdTutorialWithPermissionsUxStage(state) {
1255
- const ux = useCameraPermissionUx(state);
1420
+ function resolveIdTutorialWithPermissionsUxStage(state, ux) {
1256
1421
  if (state.status === ID_CAPTURE_STATUS.LOADING && state.phase === "permissionsIdle" && state.tutorialEnabled && ux.id !== CAMERA_PERMISSION_UX.CONTROL && ux.id !== CAMERA_PERMISSION_UX.PENDING) return {
1257
1422
  documentType: state.selectedDocumentType,
1258
1423
  mode: state.currentMode,
@@ -1277,8 +1442,46 @@ function useIdTutorialWithPermissionsUxStage(state) {
1277
1442
  return null;
1278
1443
  }
1279
1444
  //#endregion
1445
+ //#region src/modules/id/useIdPermissionExperience.ts
1446
+ function isCameraWarmupState(state) {
1447
+ return state.status === "loading" && CAMERA_WARMUP_LOADING_PHASES.has(state.phase);
1448
+ }
1449
+ function resolvePermissionInCameraState(state, cameraPermissionUx, wasPermissionInCameraVisible) {
1450
+ if (cameraPermissionUx.id !== CAMERA_PERMISSION_UX.PERMISSION_IN_CAMERA) return null;
1451
+ if (isPermissionDialogSurface(state)) return state;
1452
+ if (state.status === "loading" && state.phase === "permissionsIdle") return state;
1453
+ if (wasPermissionInCameraVisible && isCameraWarmupState(state)) return state;
1454
+ return null;
1455
+ }
1456
+ /**
1457
+ * Centralizes the ID permission experiments' presentation decisions. The
1458
+ * module dispatcher consumes typed surfaces and does not need to know which
1459
+ * permission/loading substates belong to IDC-03 or retain handoff history.
1460
+ */
1461
+ function useIdPermissionExperience(state) {
1462
+ const cameraPermissionUx = useCameraPermissionUx(state);
1463
+ const tutorialWithPermissionsUxStage = resolveIdTutorialWithPermissionsUxStage(state, cameraPermissionUx);
1464
+ const wasPermissionInCameraVisibleRef = A(false);
1465
+ const permissionInCameraFlowActiveRef = A(false);
1466
+ const permissionInCameraState = resolvePermissionInCameraState(state, cameraPermissionUx, wasPermissionInCameraVisibleRef.current);
1467
+ const isPermissionInCameraVisible = permissionInCameraState !== null;
1468
+ if (isPermissionInCameraVisible) permissionInCameraFlowActiveRef.current = true;
1469
+ else if (state.status !== "capture") permissionInCameraFlowActiveRef.current = false;
1470
+ const permissionInCameraCaptureState = state.status === "capture" && permissionInCameraFlowActiveRef.current ? state : null;
1471
+ y(() => {
1472
+ wasPermissionInCameraVisibleRef.current = isPermissionInCameraVisible;
1473
+ }, [isPermissionInCameraVisible]);
1474
+ return {
1475
+ cameraPermissionUx,
1476
+ tutorialWithPermissionsUxStage,
1477
+ permissionInCameraState,
1478
+ permissionInCameraCaptureState,
1479
+ isPreparingCameraLoader: state.status === "loading" && permissionInCameraState === null && tutorialWithPermissionsUxStage?.ux.id !== CAMERA_PERMISSION_UX.PERMISSION_SHEET
1480
+ };
1481
+ }
1482
+ //#endregion
1280
1483
  //#region src/modules/id/id.tsx
1281
- var MandatoryConsent = z(() => import("../mandatoryConsent-DGXKEFDs.js").then((module) => ({ default: module.MandatoryConsent })));
1484
+ var MandatoryConsent = z(() => import("../mandatoryConsent-BvL4WCr9.js").then((module) => ({ default: module.MandatoryConsent })));
1282
1485
  var IdContent = ({ config, manager: externalManager, onFinish, onError }) => {
1283
1486
  usePreloadDisplayFont();
1284
1487
  y(() => {
@@ -1298,13 +1501,22 @@ var IdContent = ({ config, manager: externalManager, onFinish, onError }) => {
1298
1501
  onFinish,
1299
1502
  onError
1300
1503
  });
1301
- const tutorialWithPermissionsUxStage = useIdTutorialWithPermissionsUxStage(state);
1302
- const isPreparingCameraLoader = state.status === "loading" && tutorialWithPermissionsUxStage?.ux.id !== CAMERA_PERMISSION_UX.PERMISSION_SHEET;
1504
+ const { tutorialWithPermissionsUxStage, permissionInCameraState, permissionInCameraCaptureState, isPreparingCameraLoader } = useIdPermissionExperience(state);
1303
1505
  const { params: darkCameraLoadingParams } = useIdExperiment({
1304
1506
  key: "darkCameraLoading",
1305
1507
  enabled: isPreparingCameraLoader
1306
1508
  });
1307
1509
  if (state.status === "idle") return /* @__PURE__ */ u(TransitionSpinner, { renderMode: "spinnerOnly" });
1510
+ if (tutorialWithPermissionsUxStage?.ux.id === CAMERA_PERMISSION_UX.PERMISSION_IN_CAMERA || permissionInCameraState !== null || permissionInCameraCaptureState !== null) return /* @__PURE__ */ u(PermissionInCameraFlowTransition, {
1511
+ manager,
1512
+ tutorialStage: tutorialWithPermissionsUxStage,
1513
+ permissionState: permissionInCameraState,
1514
+ captureState: permissionInCameraCaptureState
1515
+ });
1516
+ if (tutorialWithPermissionsUxStage) return /* @__PURE__ */ u(TutorialWithPermissions, {
1517
+ manager,
1518
+ stage: tutorialWithPermissionsUxStage
1519
+ });
1308
1520
  if (isPreparingCameraLoader) return /* @__PURE__ */ u(TransitionSpinner, {
1309
1521
  titleKey: "loadingCircle.holdOn",
1310
1522
  subtitleKey: "loadingCircle.preparingCamera",
@@ -1315,10 +1527,6 @@ var IdContent = ({ config, manager: externalManager, onFinish, onError }) => {
1315
1527
  state
1316
1528
  });
1317
1529
  if (state.status === "ageVerification") return /* @__PURE__ */ u(AgeVerification, { manager });
1318
- if (tutorialWithPermissionsUxStage) return /* @__PURE__ */ u(TutorialWithPermissions, {
1319
- manager,
1320
- stage: tutorialWithPermissionsUxStage
1321
- });
1322
1530
  if (state.status === "permissions") return /* @__PURE__ */ u(Permissions, {
1323
1531
  manager,
1324
1532
  permissionStatus: state.permissionStatus
@@ -860,6 +860,115 @@
860
860
  min-height: var(--id-capture-hint-svg-size);
861
861
  }
862
862
 
863
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraContent {
864
+ opacity: 0;
865
+ width: 100%;
866
+ height: 100%;
867
+ animation: incodePermissionInCameraReveal var(--id-tutorial-to-permission-transition-duration) ease-out var(--id-permission-in-camera-reveal-delay) forwards;
868
+ flex-direction: column;
869
+ align-items: center;
870
+ display: flex;
871
+ }
872
+
873
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraReservedFooter {
874
+ visibility: hidden;
875
+ }
876
+
877
+ @media (prefers-reduced-motion: reduce) {
878
+ .IncodeComponent .IncodePermissionInCameraPage .IncodePermissionInCameraContent {
879
+ animation-duration: 1ms;
880
+ animation-delay: 0s;
881
+ }
882
+ }
883
+
884
+ @keyframes incodePermissionInCameraReveal {
885
+ from {
886
+ opacity: 0;
887
+ }
888
+
889
+ to {
890
+ opacity: 1;
891
+ }
892
+ }
893
+
894
+ .IncodeComponent .IncodePermissionInCameraFlowStage {
895
+ width: 100%;
896
+ height: 100%;
897
+ position: relative;
898
+ }
899
+
900
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowCaptureLayer, .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayer, .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayer {
901
+ inset: var(--spacing-0, var(--spacing-none, 0px));
902
+ position: absolute;
903
+ }
904
+
905
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowCaptureLayer {
906
+ z-index: 10;
907
+ }
908
+
909
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayer {
910
+ z-index: 20;
911
+ }
912
+
913
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayer {
914
+ z-index: 30;
915
+ }
916
+
917
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayerExiting {
918
+ pointer-events: none;
919
+ animation: incodePermissionInCameraToCaptureExit var(--id-permission-in-camera-to-capture-transition-duration) ease-in var(--id-permission-in-camera-to-capture-transition-duration) forwards;
920
+ }
921
+
922
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowPermissionLayerExiting .IncodePermissionInCameraHeading {
923
+ animation: incodePermissionInCameraHeadingExit var(--id-permission-in-camera-to-capture-transition-duration) ease-in forwards;
924
+ }
925
+
926
+ .IncodeComponent .IncodePermissionInCameraFlowStage > .IncodePermissionInCameraFlowTutorialLayerExiting {
927
+ pointer-events: none;
928
+ animation: incodeTutorialToPermissionInCameraExit var(--id-tutorial-to-permission-transition-duration) ease-in forwards;
929
+ }
930
+
931
+ @media (prefers-reduced-motion: reduce) {
932
+ .IncodeComponent .IncodePermissionInCameraFlowPermissionLayerExiting {
933
+ animation-duration: 1ms;
934
+ animation-delay: 0s;
935
+ }
936
+
937
+ .IncodeComponent .IncodePermissionInCameraFlowPermissionLayerExiting .IncodePermissionInCameraHeading, .IncodeComponent .IncodePermissionInCameraFlowTutorialLayerExiting {
938
+ animation-duration: 1ms;
939
+ }
940
+ }
941
+
942
+ @keyframes incodeTutorialToPermissionInCameraExit {
943
+ from {
944
+ opacity: 1;
945
+ }
946
+
947
+ to {
948
+ opacity: 0;
949
+ }
950
+ }
951
+
952
+ @keyframes incodePermissionInCameraHeadingExit {
953
+ from {
954
+ opacity: 1;
955
+ }
956
+
957
+ to {
958
+ opacity: 0;
959
+ }
960
+ }
961
+
962
+ @keyframes incodePermissionInCameraToCaptureExit {
963
+ from {
964
+ opacity: 1;
965
+ }
966
+
967
+ to {
968
+ opacity: 0;
969
+ }
970
+ }
971
+
863
972
  .IncodeIdProcessingPage .IncodePageInner {
864
973
  padding: var(--spacing-0, var(--spacing-none, 0px));
865
974
  }