@incodetech/prizma-core-screens 0.2.4 → 0.2.12

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 (243) hide show
  1. package/dist/BiometricConsentScreen.d.ts +95 -0
  2. package/dist/BiometricConsentScreen.js +91 -0
  3. package/dist/BiometricConsentStrings.d.ts +84 -0
  4. package/dist/BiometricConsentStrings.js +31 -0
  5. package/dist/CaptureScreen.d.ts +13 -0
  6. package/dist/CaptureScreen.js +2 -2
  7. package/dist/CurpEnterScreen.d.ts +7 -0
  8. package/dist/CurpEnterScreen.js +17 -3
  9. package/dist/CurpGenerateScreen.d.ts +8 -0
  10. package/dist/CurpGenerateScreen.js +28 -13
  11. package/dist/CurpLayout.css +8 -34
  12. package/dist/CurpStrings.d.ts +16 -2
  13. package/dist/DemoScreensLayout.css +16 -0
  14. package/dist/DemoScreensRedirectScreen.d.ts +6 -1
  15. package/dist/DemoScreensRedirectScreen.js +3 -2
  16. package/dist/DemoScreensStrings.d.ts +5 -0
  17. package/dist/DigitalIdUploadErrorScreen.d.ts +31 -0
  18. package/dist/DigitalIdUploadErrorScreen.js +26 -0
  19. package/dist/DigitalIdUploadFileTooLargeScreen.d.ts +27 -0
  20. package/dist/DigitalIdUploadFileTooLargeScreen.js +21 -0
  21. package/dist/DigitalIdUploadReviewScreen.d.ts +57 -0
  22. package/dist/DigitalIdUploadReviewScreen.js +44 -0
  23. package/dist/DigitalIdUploadStrings.d.ts +64 -0
  24. package/dist/DigitalIdUploadStrings.js +19 -0
  25. package/dist/DigitalIdUploadTutorialScreen.d.ts +28 -0
  26. package/dist/DigitalIdUploadTutorialScreen.js +23 -0
  27. package/dist/DocumentCaptureIllustration.d.ts +1 -1
  28. package/dist/EkybAddressDetailsScreen.d.ts +7 -0
  29. package/dist/EkybAddressDetailsScreen.js +25 -7
  30. package/dist/EkybBusinessDetailsScreen.d.ts +6 -0
  31. package/dist/EkybBusinessDetailsScreen.js +23 -6
  32. package/dist/EkybCountryScreen.d.ts +13 -5
  33. package/dist/EkybCountryScreen.js +41 -10
  34. package/dist/EkybOwnersScreen.d.ts +8 -0
  35. package/dist/EkybOwnersScreen.js +26 -3
  36. package/dist/EkybStrings.d.ts +32 -10
  37. package/dist/EkycCountryCatalog.d.ts +4 -1
  38. package/dist/EkycCountryCatalog.js +5 -3
  39. package/dist/EkycCountryFormScreen.d.ts +12 -3
  40. package/dist/EkycCountryFormScreen.js +28 -10
  41. package/dist/EkycDetailsScreen.d.ts +7 -0
  42. package/dist/EkycDetailsScreen.js +21 -4
  43. package/dist/EkycStrings.d.ts +14 -2
  44. package/dist/ElectronicSignatureLayout.css +6 -0
  45. package/dist/EmailInputStrings.d.ts +11 -1
  46. package/dist/EmailInputVerifyScreen.d.ts +7 -0
  47. package/dist/EmailInputVerifyScreen.js +17 -3
  48. package/dist/ErrorScreensScreen.d.ts +5 -2
  49. package/dist/ErrorScreensScreen.js +15 -4
  50. package/dist/ErrorScreensStrings.d.ts +17 -2
  51. package/dist/ErrorScreensStrings.js +18 -10
  52. package/dist/FaceCaptureCapturingScreen.d.ts +63 -0
  53. package/dist/FaceCaptureCapturingScreen.js +62 -2
  54. package/dist/FaceCaptureLayout.css +69 -4
  55. package/dist/FaceCaptureStrings.d.ts +23 -0
  56. package/dist/FaceMatchComparisonScreen.d.ts +3 -3
  57. package/dist/FaceMatchLayout.css +21 -12
  58. package/dist/FormScreen.css +30 -0
  59. package/dist/FormScreen.d.ts +28 -0
  60. package/dist/FormScreen.js +3 -2
  61. package/dist/FormsLongFormScreen.d.ts +8 -0
  62. package/dist/FormsLongFormScreen.js +34 -13
  63. package/dist/FormsStrings.d.ts +11 -1
  64. package/dist/GeolocationBrowserStepsScreen.d.ts +6 -2
  65. package/dist/GeolocationBrowserStepsScreen.js +7 -3
  66. package/dist/GeolocationStrings.d.ts +3 -0
  67. package/dist/IdCaptureLayout.css +205 -2
  68. package/dist/IdCaptureStageScreen.d.ts +47 -0
  69. package/dist/IdCaptureStageScreen.js +39 -3
  70. package/dist/IdCaptureStrings.d.ts +19 -0
  71. package/dist/ListScreen.d.ts +21 -0
  72. package/dist/ListScreen.js +7 -2
  73. package/dist/LoaderScreen.d.ts +7 -5
  74. package/dist/LoaderScreen.js +7 -5
  75. package/dist/LoadersStrings.d.ts +18 -5
  76. package/dist/OcrReviewErrorScreen.d.ts +30 -0
  77. package/dist/OcrReviewErrorScreen.js +24 -0
  78. package/dist/OcrReviewLayout.css +24 -0
  79. package/dist/OcrReviewLoadingScreen.d.ts +25 -0
  80. package/dist/OcrReviewLoadingScreen.js +19 -0
  81. package/dist/OcrReviewScreen.d.ts +76 -0
  82. package/dist/OcrReviewScreen.js +65 -0
  83. package/dist/OcrReviewStrings.d.ts +47 -0
  84. package/dist/OcrReviewStrings.js +17 -0
  85. package/dist/OcrReviewSuccessScreen.d.ts +30 -0
  86. package/dist/OcrReviewSuccessScreen.js +24 -0
  87. package/dist/PermissionsAllowScreen.d.ts +8 -11
  88. package/dist/PermissionsAllowScreen.js +8 -11
  89. package/dist/PermissionsAskScreen.d.ts +41 -0
  90. package/dist/PermissionsAskScreen.js +43 -0
  91. package/dist/PermissionsBrowserStepsScreen.d.ts +9 -2
  92. package/dist/PermissionsBrowserStepsScreen.js +12 -3
  93. package/dist/PermissionsLayout.css +47 -0
  94. package/dist/PermissionsStrings.d.ts +20 -9
  95. package/dist/PermissionsStrings.js +10 -4
  96. package/dist/PhoneInputLayout.css +10 -9
  97. package/dist/PhoneInputOtpScreen.d.ts +8 -0
  98. package/dist/PhoneInputOtpScreen.js +26 -19
  99. package/dist/PhoneInputStrings.d.ts +22 -4
  100. package/dist/PhoneInputVerifyScreen.d.ts +8 -0
  101. package/dist/PhoneInputVerifyScreen.js +36 -7
  102. package/dist/QualifiedSignatureAcceptScreen.js +6 -1
  103. package/dist/QualifiedSignatureDocumentScreen.d.ts +17 -10
  104. package/dist/QualifiedSignatureDocumentScreen.js +22 -17
  105. package/dist/QualifiedSignatureLayout.css +76 -0
  106. package/dist/QualifiedSignatureResultScreen.d.ts +16 -13
  107. package/dist/QualifiedSignatureResultScreen.js +17 -18
  108. package/dist/QualifiedSignatureStrings.d.ts +19 -2
  109. package/dist/ResultScreen.d.ts +8 -0
  110. package/dist/ResultScreen.js +14 -3
  111. package/dist/ReusabilityCredentialSelectionScreen.d.ts +95 -0
  112. package/dist/ReusabilityCredentialSelectionScreen.js +94 -0
  113. package/dist/ReusabilityLayout.css +241 -0
  114. package/dist/ReusabilityPrivacyPolicyScreen.d.ts +55 -0
  115. package/dist/ReusabilityPrivacyPolicyScreen.js +44 -0
  116. package/dist/ReusabilityStrings.d.ts +85 -0
  117. package/dist/ReusabilityStrings.js +37 -0
  118. package/dist/ReviewScreen.d.ts +38 -12
  119. package/dist/ReviewScreen.js +41 -8
  120. package/dist/ScreenLayout.css +382 -6
  121. package/dist/ScreenNav.css +8 -0
  122. package/dist/ScreenNav.d.ts +15 -2
  123. package/dist/ScreenNav.js +10 -3
  124. package/dist/VideoSelfieErrorScreen.js +1 -1
  125. package/dist/VideoSelfieIdCaptureScreen.d.ts +10 -3
  126. package/dist/VideoSelfieIdCaptureScreen.js +45 -14
  127. package/dist/VideoSelfieLayout.css +467 -34
  128. package/dist/VideoSelfieSelfieCaptureScreen.d.ts +44 -27
  129. package/dist/VideoSelfieSelfieCaptureScreen.js +65 -39
  130. package/dist/VideoSelfieSpeakScreen.js +19 -2
  131. package/dist/VideoSelfieStrings.d.ts +82 -13
  132. package/dist/VideoSelfieTurnHeadScreen.d.ts +51 -0
  133. package/dist/VideoSelfieTurnHeadScreen.js +66 -0
  134. package/dist/VideoSelfieTutorialScreen.d.ts +9 -0
  135. package/dist/VideoSelfieTutorialScreen.js +22 -5
  136. package/dist/VideoSelfieWaveScreen.d.ts +53 -0
  137. package/dist/VideoSelfieWaveScreen.js +62 -0
  138. package/dist/ViewfinderScreen.css +36 -0
  139. package/dist/WatchlistBusinessFormScreen.d.ts +11 -7
  140. package/dist/WatchlistBusinessFormScreen.js +27 -13
  141. package/dist/WatchlistBusinessStrings.d.ts +21 -7
  142. package/dist/flows.d.ts +8 -0
  143. package/dist/flows.js +17 -0
  144. package/dist/index.d.ts +19 -1
  145. package/dist/index.js +14 -0
  146. package/dist/styles.css +3 -0
  147. package/dist/types.d.ts +3 -1
  148. package/package.json +79 -3
  149. package/samples/video-selfie-camera-wide.jpg +0 -0
  150. package/samples/video-selfie-room-wide.jpg +0 -0
  151. package/samples/video-selfie-room.png +0 -0
  152. package/src/BiometricConsentScreen.tsx +192 -0
  153. package/src/BiometricConsentStrings.ts +119 -0
  154. package/src/CaptureScreen.tsx +17 -0
  155. package/src/CurpEnterScreen.tsx +21 -4
  156. package/src/CurpGenerateScreen.tsx +46 -22
  157. package/src/CurpLayout.css +8 -34
  158. package/src/CurpStrings.ts +22 -2
  159. package/src/DemoScreensLayout.css +16 -0
  160. package/src/DemoScreensRedirectScreen.tsx +14 -6
  161. package/src/DemoScreensStrings.ts +5 -0
  162. package/src/DigitalIdUploadErrorScreen.tsx +83 -0
  163. package/src/DigitalIdUploadFileTooLargeScreen.tsx +67 -0
  164. package/src/DigitalIdUploadReviewScreen.tsx +119 -0
  165. package/src/DigitalIdUploadStrings.ts +88 -0
  166. package/src/DigitalIdUploadTutorialScreen.tsx +59 -0
  167. package/src/DocumentCaptureIllustration.tsx +1 -1
  168. package/src/EkybAddressDetailsScreen.tsx +32 -4
  169. package/src/EkybBusinessDetailsScreen.tsx +23 -5
  170. package/src/EkybCountryScreen.tsx +45 -7
  171. package/src/EkybOwnersScreen.tsx +34 -3
  172. package/src/EkybStrings.ts +34 -10
  173. package/src/EkycCountryCatalog.ts +9 -4
  174. package/src/EkycCountryFormScreen.tsx +51 -12
  175. package/src/EkycDetailsScreen.tsx +22 -1
  176. package/src/EkycStrings.ts +14 -2
  177. package/src/ElectronicSignatureLayout.css +6 -0
  178. package/src/EmailInputStrings.ts +12 -1
  179. package/src/EmailInputVerifyScreen.tsx +21 -4
  180. package/src/ErrorScreensScreen.tsx +15 -4
  181. package/src/ErrorScreensStrings.ts +37 -12
  182. package/src/FaceCaptureCapturingScreen.tsx +102 -13
  183. package/src/FaceCaptureLayout.css +69 -4
  184. package/src/FaceCaptureStrings.ts +24 -0
  185. package/src/FaceMatchComparisonScreen.tsx +3 -3
  186. package/src/FaceMatchLayout.css +21 -12
  187. package/src/FormScreen.css +30 -0
  188. package/src/FormScreen.tsx +34 -0
  189. package/src/FormsLongFormScreen.tsx +41 -13
  190. package/src/FormsStrings.ts +12 -1
  191. package/src/GeolocationBrowserStepsScreen.tsx +6 -3
  192. package/src/GeolocationStrings.ts +3 -0
  193. package/src/IdCaptureLayout.css +205 -2
  194. package/src/IdCaptureStageScreen.tsx +75 -0
  195. package/src/IdCaptureStrings.ts +19 -0
  196. package/src/ListScreen.tsx +58 -10
  197. package/src/LoaderScreen.tsx +7 -5
  198. package/src/LoadersStrings.ts +18 -5
  199. package/src/OcrReviewErrorScreen.tsx +53 -0
  200. package/src/OcrReviewLayout.css +24 -0
  201. package/src/OcrReviewLoadingScreen.tsx +48 -0
  202. package/src/OcrReviewScreen.tsx +190 -0
  203. package/src/OcrReviewStrings.ts +69 -0
  204. package/src/OcrReviewSuccessScreen.tsx +52 -0
  205. package/src/PermissionsAllowScreen.tsx +9 -10
  206. package/src/PermissionsAskScreen.tsx +105 -0
  207. package/src/PermissionsBrowserStepsScreen.tsx +11 -3
  208. package/src/PermissionsLayout.css +47 -0
  209. package/src/PermissionsStrings.ts +42 -12
  210. package/src/PhoneInputLayout.css +10 -9
  211. package/src/PhoneInputOtpScreen.tsx +23 -3
  212. package/src/PhoneInputStrings.ts +23 -4
  213. package/src/PhoneInputVerifyScreen.tsx +41 -5
  214. package/src/QualifiedSignatureAcceptScreen.tsx +12 -1
  215. package/src/QualifiedSignatureDocumentScreen.tsx +31 -19
  216. package/src/QualifiedSignatureLayout.css +76 -0
  217. package/src/QualifiedSignatureResultScreen.tsx +28 -26
  218. package/src/QualifiedSignatureStrings.ts +19 -2
  219. package/src/ResultScreen.tsx +33 -2
  220. package/src/ReusabilityCredentialSelectionScreen.tsx +246 -0
  221. package/src/ReusabilityLayout.css +241 -0
  222. package/src/ReusabilityPrivacyPolicyScreen.tsx +109 -0
  223. package/src/ReusabilityStrings.ts +127 -0
  224. package/src/ReviewScreen.tsx +96 -27
  225. package/src/ScreenLayout.css +382 -6
  226. package/src/ScreenNav.css +8 -0
  227. package/src/ScreenNav.tsx +35 -5
  228. package/src/VideoSelfieErrorScreen.tsx +1 -1
  229. package/src/VideoSelfieIdCaptureScreen.tsx +125 -31
  230. package/src/VideoSelfieLayout.css +467 -34
  231. package/src/VideoSelfieSelfieCaptureScreen.tsx +110 -57
  232. package/src/VideoSelfieSpeakScreen.tsx +34 -15
  233. package/src/VideoSelfieStrings.ts +89 -14
  234. package/src/VideoSelfieTurnHeadScreen.tsx +162 -0
  235. package/src/VideoSelfieTutorialScreen.tsx +45 -23
  236. package/src/VideoSelfieWaveScreen.tsx +143 -0
  237. package/src/ViewfinderScreen.css +36 -0
  238. package/src/WatchlistBusinessFormScreen.tsx +35 -16
  239. package/src/WatchlistBusinessStrings.ts +21 -7
  240. package/src/flows.ts +25 -0
  241. package/src/index.ts +88 -3
  242. package/src/styles.css +3 -0
  243. package/src/types.ts +3 -1
@@ -0,0 +1,53 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import { type PrizmaScreenShellProps } from './ScreenShell';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { VideoSelfieDocumentType, VideoSelfieStrings } from './VideoSelfieStrings';
5
+ import './ScreenLayout.css';
6
+ import './ViewfinderScreen.css';
7
+ import './VideoSelfieLayout.css';
8
+ /** The three beats the `👋 Wave` band draws. */
9
+ export type VideoSelfieWaveStage = 'waiting' | 'ready' | 'success';
10
+ export interface VideoSelfieWaveScreenProps extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
11
+ /** Module copy — this screen reads `selfieCapture.wave`. */
12
+ strings: VideoSelfieStrings;
13
+ /** Which beat to render. Default `waiting`. */
14
+ stage?: VideoSelfieWaveStage;
15
+ /** Which document the journey collects — the Stepper's own `documentType`. */
16
+ documentType?: VideoSelfieDocumentType;
17
+ /** Live camera feed (<video>) or sample still (<img>), full-bleed behind
18
+ * the ring. */
19
+ camera?: ReactNode;
20
+ screenId?: string;
21
+ overrides?: PrizmaScreenOverrides;
22
+ onAction?: PrizmaScreenActionHandler;
23
+ }
24
+ /**
25
+ * Video Selfie — the hand-wave beat of the liveness sequence (Archetype D,
26
+ * GUIDELINES.md §6-D; always dark). NEW 2026-09-30, from the `👋 Wave` band of
27
+ * the full-flow frames; like the head turns, it had no screen at all.
28
+ *
29
+ * The composition is the liveness ring with the spoken steps' card under it:
30
+ * the feed runs full-bleed, the ring frames the face, and Core's Modal asks
31
+ * for the gesture with a CTA that only lights up once the stage has seen it
32
+ * (the frames' "5 second delay" note between the two). The verdict beat is the
33
+ * ring's own positive treatment plus the module's "Looking good!" — the SAME
34
+ * copy and the same mark `8.2` uses, because it is the same answer.
35
+ *
36
+ * The scrim/panel positioning is the recipe Document Capture's method sheet
37
+ * established (DEVIATIONS #DC-30): Core's safe presenter portals to
38
+ * `document.body`, which would escape the 390×844 frame and the host's
39
+ * `transform: scale()`, so the screen owns the panel and Core owns the card.
40
+ * The card is pinned back to LIGHT inside the dark shell for the reason
41
+ * `VideoSelfieSpeakScreen` documents (#VS-10).
42
+ *
43
+ * The hand that sweeps across the face is Core's, not this screen's:
44
+ * `PrizmaSelfieCapture` grew a `hint="wave"` axis on 2026-09-30 (owner: "we
45
+ * need the hand wave"), the face counterpart of `PrizmaIdCapture`'s animated
46
+ * hand hint, so the art and the choreography live where every other capture
47
+ * gesture already lives. The screen only says WHEN: the hand runs while the
48
+ * stage is waiting and stops the moment the wave has landed, which is the
49
+ * frames' own "5 second delay · Remove animation (Accessibility)" note.
50
+ * DEVIATIONS #VS-21.
51
+ */
52
+ export declare const VideoSelfieWaveScreen: React.ForwardRefExoticComponent<VideoSelfieWaveScreenProps & React.RefAttributes<HTMLDivElement>>;
53
+ export default VideoSelfieWaveScreen;
@@ -0,0 +1,62 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaModalContent } from '@incodetech/prizma-core-web/modal';
5
+ import { PrizmaSelfieCapture } from '@incodetech/prizma-core-web/selfie-capture';
6
+ import { PrizmaStepper } from '@incodetech/prizma-core-web/stepper';
7
+ import { PrizmaScreenShell } from './ScreenShell';
8
+ import './ScreenLayout.css';
9
+ import './ViewfinderScreen.css';
10
+ import './VideoSelfieLayout.css';
11
+ /**
12
+ * Video Selfie — the hand-wave beat of the liveness sequence (Archetype D,
13
+ * GUIDELINES.md §6-D; always dark). NEW 2026-09-30, from the `👋 Wave` band of
14
+ * the full-flow frames; like the head turns, it had no screen at all.
15
+ *
16
+ * The composition is the liveness ring with the spoken steps' card under it:
17
+ * the feed runs full-bleed, the ring frames the face, and Core's Modal asks
18
+ * for the gesture with a CTA that only lights up once the stage has seen it
19
+ * (the frames' "5 second delay" note between the two). The verdict beat is the
20
+ * ring's own positive treatment plus the module's "Looking good!" — the SAME
21
+ * copy and the same mark `8.2` uses, because it is the same answer.
22
+ *
23
+ * The scrim/panel positioning is the recipe Document Capture's method sheet
24
+ * established (DEVIATIONS #DC-30): Core's safe presenter portals to
25
+ * `document.body`, which would escape the 390×844 frame and the host's
26
+ * `transform: scale()`, so the screen owns the panel and Core owns the card.
27
+ * The card is pinned back to LIGHT inside the dark shell for the reason
28
+ * `VideoSelfieSpeakScreen` documents (#VS-10).
29
+ *
30
+ * The hand that sweeps across the face is Core's, not this screen's:
31
+ * `PrizmaSelfieCapture` grew a `hint="wave"` axis on 2026-09-30 (owner: "we
32
+ * need the hand wave"), the face counterpart of `PrizmaIdCapture`'s animated
33
+ * hand hint, so the art and the choreography live where every other capture
34
+ * gesture already lives. The screen only says WHEN: the hand runs while the
35
+ * stage is waiting and stops the moment the wave has landed, which is the
36
+ * frames' own "5 second delay · Remove animation (Accessibility)" note.
37
+ * DEVIATIONS #VS-21.
38
+ */
39
+ export const VideoSelfieWaveScreen = forwardRef(({ strings, stage = 'waiting', documentType = 'id', camera, screenId = `video-selfie-wave-${stage}`, overrides, onAction, className, ...shell }, ref) => {
40
+ const slice = strings.selfieCapture.wave;
41
+ const seen = stage === 'success';
42
+ return (_jsxs(PrizmaScreenShell, { ref: ref, dark: true, "data-pcs-overlay": "window", className: className, ...shell, children: [_jsx("div", { className: "prizma-viewfinder__surface", children: camera }), _jsx("div", { className: "video-selfie-stepper", children: _jsx(PrizmaStepper, { steps: 7, currentState: 5, documentType: documentType, completedValueText: strings.stepperCompletedLabel }) }), _jsx("div", { className: [
43
+ 'prizma-viewfinder__content',
44
+ overrides?.align === 'left' ? 'prizma-viewfinder__content--left' : '',
45
+ ]
46
+ .filter(Boolean)
47
+ .join(' '), children: _jsx("div", { className: "video-selfie-band video-selfie-band--ring", children: _jsx(PrizmaSelfieCapture, { mode: "overlay", scrim: true, state: seen ? 'success' : 'filled',
48
+ /* The hand demonstrates the gesture only while the stage is
49
+ still waiting for it. On `ready` the wave has landed and the
50
+ CTA lights up instead — the frames drop the animation at
51
+ exactly that beat. */
52
+ hint: stage === 'waiting' ? 'wave' : undefined, showFeedback: false, statusLabels: { success: strings.selfieCapture.successLabel } }) }) }), seen ? null : (_jsx("div", { "data-prizma-theme": "light", className: "video-selfie-sheet-panel", children: _jsx(PrizmaModalContent, { title: slice.instruction, showCloseIcon: false, buttonGroupProps: {
53
+ orientation: 'vertical-v1',
54
+ showPrimary: true,
55
+ showSecondary: false,
56
+ primaryLabel: slice.doneLabel,
57
+ primaryDisabled: stage !== 'ready',
58
+ onPrimaryClick: () => onAction?.({ type: 'cta', screenId }),
59
+ } }) }))] }));
60
+ });
61
+ VideoSelfieWaveScreen.displayName = 'VideoSelfieWaveScreen';
62
+ export default VideoSelfieWaveScreen;
@@ -13,6 +13,42 @@
13
13
  object-fit: cover;
14
14
  }
15
15
 
16
+ /* ── A feed has an ASPECT, and the plate has to match it ─────────────────────
17
+ * `object-fit: cover` is right for a live feed and wrong for a still: a phone
18
+ * plate is 390 x 844, and covering a 1440 x 820 browser window scales it 3.7x,
19
+ * so the subject fills the window and her face lands nowhere near the capture
20
+ * ring (Camila, 2026-10-09: "the image is now too zoomed in because full screen
21
+ * is not good for this image ratio"). A real desktop webcam does not hand the
22
+ * page a portrait frame; it hands it a landscape one.
23
+ *
24
+ * So the HOST may supply two plates and the viewfinder picks the one whose
25
+ * shape fits the shell it is actually being drawn at:
26
+ *
27
+ * <div className="prizma-viewfinder__surface">
28
+ * <img data-pcs-plate="tall" src={portrait} alt="" />
29
+ * <img data-pcs-plate="wide" src={landscape} alt="" />
30
+ * </div>
31
+ *
32
+ * Supply one and nothing changes — an untagged `<img>` or `<video>` is shown at
33
+ * every shape, which is every existing caller. A CONTAINER query, not a media
34
+ * one, for the reason `ScreenLayout.css` gives on the capture notice: the
35
+ * browser viewport is not the screen, and in Core Lab a 390 shell sits inside a
36
+ * 1400px window. The line is square: anything wider than it is tall takes the
37
+ * landscape plate. */
38
+ .prizma-viewfinder__surface > [data-pcs-plate='wide'] {
39
+ display: none;
40
+ }
41
+
42
+ @container pcs-screen (min-aspect-ratio: 1 / 1) {
43
+ .prizma-viewfinder__surface > [data-pcs-plate='tall'] {
44
+ display: none;
45
+ }
46
+
47
+ .prizma-viewfinder__surface > [data-pcs-plate='wide'] {
48
+ display: block;
49
+ }
50
+ }
51
+
16
52
  .prizma-viewfinder__content {
17
53
  position: relative;
18
54
  z-index: 1;
@@ -21,8 +21,9 @@ export interface WatchlistBusinessFormScreenProps extends Omit<PrizmaFormScreenP
21
21
  * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
22
22
  *
23
23
  * ONE screen for both purple form sections (`watchlist.default` and
24
- * `watchlist.filled`): measured against the 390 frames they share an identical
25
- * skeleton — nav → Title (H2, no subtitle) → Spacing/32 → Country dropdown,
24
+ * `watchlist.filled`), plus the `emptyError` state the GUIDELINES §6-E
25
+ * empty-submit rule adds (Elena 2026-09-30, see note 3): measured against the 390 frames they share an identical
26
+ * skeleton — nav → Title (H2 + the "fields marked with *" H5) → Spacing/32 → Country dropdown,
26
27
  * Business Name and Tax ID at Spacing/16 → primary CTA → tag — and differ ONLY
27
28
  * in field content and whether the CTA is live.
28
29
  *
@@ -37,11 +38,14 @@ export interface WatchlistBusinessFormScreenProps extends Omit<PrizmaFormScreenP
37
38
  * and Core's `readOnly`, the other way to make a field inert, paints the
38
39
  * DISABLED grey surface on states Figma draws white (DEVIATIONS #PI-6).
39
40
  * Neither section greys anything, so `disabled` is set nowhere.
40
- * 3. The CTA state comes from the SECTION, not from the values: Figma greys
41
- * "Continue" on `default` and lights it on `filled` — and `filled` leaves Tax
42
- * ID empty, which is how we know the tax identifier does not gate the lookup
43
- * (DEVIATIONS #WB-2). Deriving `ctaDisabled` from the values would have
44
- * disagreed with the design.
41
+ * 3. The CTA state comes from the SECTION, not from the values. Under the
42
+ * GUIDELINES §6-E empty-submit rule (Elena 2026-09-30) "Continue" is live
43
+ * on the resting `default` form, so the user can press it, and greys ONLY
44
+ * on `emptyError`, the state that press leads to: Country and Business
45
+ * Name render empty (no placeholder) in Core's error state with
46
+ * `requiredError`. Tax ID never errors — `filled` leaves it empty with the
47
+ * CTA live, which is how we know it does not gate the lookup (DEVIATIONS
48
+ * #WB-2).
45
49
  * 4. The country flag is Core's canonical raster (24×18, radius 2) in the
46
50
  * dropdown's LEADING slot — `PrizmaCountryFlag` composed into
47
51
  * `PrizmaDropdown.renderLeading`, which exists for exactly this case and
@@ -11,8 +11,9 @@ import './ScreenLayout.css';
11
11
  * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
12
12
  *
13
13
  * ONE screen for both purple form sections (`watchlist.default` and
14
- * `watchlist.filled`): measured against the 390 frames they share an identical
15
- * skeleton — nav → Title (H2, no subtitle) → Spacing/32 → Country dropdown,
14
+ * `watchlist.filled`), plus the `emptyError` state the GUIDELINES §6-E
15
+ * empty-submit rule adds (Elena 2026-09-30, see note 3): measured against the 390 frames they share an identical
16
+ * skeleton — nav → Title (H2 + the "fields marked with *" H5) → Spacing/32 → Country dropdown,
16
17
  * Business Name and Tax ID at Spacing/16 → primary CTA → tag — and differ ONLY
17
18
  * in field content and whether the CTA is live.
18
19
  *
@@ -27,11 +28,14 @@ import './ScreenLayout.css';
27
28
  * and Core's `readOnly`, the other way to make a field inert, paints the
28
29
  * DISABLED grey surface on states Figma draws white (DEVIATIONS #PI-6).
29
30
  * Neither section greys anything, so `disabled` is set nowhere.
30
- * 3. The CTA state comes from the SECTION, not from the values: Figma greys
31
- * "Continue" on `default` and lights it on `filled` — and `filled` leaves Tax
32
- * ID empty, which is how we know the tax identifier does not gate the lookup
33
- * (DEVIATIONS #WB-2). Deriving `ctaDisabled` from the values would have
34
- * disagreed with the design.
31
+ * 3. The CTA state comes from the SECTION, not from the values. Under the
32
+ * GUIDELINES §6-E empty-submit rule (Elena 2026-09-30) "Continue" is live
33
+ * on the resting `default` form, so the user can press it, and greys ONLY
34
+ * on `emptyError`, the state that press leads to: Country and Business
35
+ * Name render empty (no placeholder) in Core's error state with
36
+ * `requiredError`. Tax ID never errors — `filled` leaves it empty with the
37
+ * CTA live, which is how we know it does not gate the lookup (DEVIATIONS
38
+ * #WB-2).
35
39
  * 4. The country flag is Core's canonical raster (24×18, radius 2) in the
36
40
  * dropdown's LEADING slot — `PrizmaCountryFlag` composed into
37
41
  * `PrizmaDropdown.renderLeading`, which exists for exactly this case and
@@ -49,21 +53,29 @@ import './ScreenLayout.css';
49
53
  */
50
54
  export const WatchlistBusinessFormScreen = forwardRef(({ strings, state = 'default', countries = [], values, screenId = `watchlist-business-form-${state}`, overrides, onAction, ...shell }, ref) => {
51
55
  const copy = strings.form;
52
- // `default` draws the CTA greyed, `filled` draws it live. The section is the
53
- // spec, not the field contents (see note 3 above).
54
- const empty = state === 'default';
56
+ // The CTA greys only after an empty submit; the resting form keeps it live
57
+ // so that submit can happen. The section is the spec, not the field
58
+ // contents (see note 3 above).
59
+ const emptyError = state === 'emptyError';
60
+ const errorText = emptyError ? strings.requiredError : undefined;
55
61
  // The label is the country NAME only. The flag is not part of it — it rides
56
62
  // the dropdown's leading slot below, where Core paints the raster.
57
63
  const options = countries.map((c) => ({
58
64
  value: c.value,
59
65
  label: c.label,
60
66
  }));
61
- return (_jsxs(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, ctaDisabled: empty, ctaLoadingLabel: copy.ctaLoadingLabel,
67
+ return (_jsxs(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, ctaDisabled: emptyError, ctaLoadingLabel: copy.ctaLoadingLabel,
62
68
  /* Figma draws no verified tag on either form section, but GUIDELINES §1
63
69
  and the standing owner rule (#F-30, #PI-8) keep header AND footer on
64
70
  every non-capture screen — so nothing shifts between the form, the
65
71
  spinner and the verdict. DEVIATIONS #WB-1. */
66
- verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: [_jsx(PrizmaDropdown, { label: copy.country.label, placeholder: copy.country.placeholder, options: options, defaultValue: values?.country ?? null,
72
+ verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: [_jsx(PrizmaDropdown, { label: copy.country.label,
73
+ /* Country and Business Name are required and marked (Elena,
74
+ 2026-09-30); the H5 explains the asterisk. */
75
+ required: true, requiredHint: strings.requiredHint,
76
+ /* The empty-submit error draws the field with nothing in it, as the
77
+ `FormsFieldScreen` `emptyError` precedent does. */
78
+ placeholder: emptyError ? undefined : copy.country.placeholder, options: options, defaultValue: emptyError ? null : (values?.country ?? null), error: emptyError, errorText: errorText,
67
79
  /* A country catalogue is long enough that Core's own search bar is
68
80
  the right behaviour; no purple section draws the menu open, so
69
81
  nothing about its appearance is being invented here. */
@@ -79,7 +91,9 @@ export const WatchlistBusinessFormScreen = forwardRef(({ strings, state = 'defau
79
91
  dialCode: '',
80
92
  flag: match.flag ?? '',
81
93
  } })) : null;
82
- } }), _jsx(PrizmaTextField, { label: copy.businessName.label, placeholder: copy.businessName.placeholder, autoComplete: "organization", defaultValue: values?.businessName ?? '' }), _jsx(PrizmaTextField, { label: copy.taxId.label, placeholder: copy.taxId.placeholder, autoComplete: "off", autoCapitalize: "characters", spellCheck: false, defaultValue: values?.taxId ?? '' })] }));
94
+ } }), _jsx(PrizmaTextField, { label: copy.businessName.label, required: true, requiredHint: strings.requiredHint, placeholder: emptyError ? undefined : copy.businessName.placeholder, autoComplete: "organization", defaultValue: emptyError ? '' : (values?.businessName ?? ''), error: emptyError, errorText: errorText }), _jsx(PrizmaTextField, { label: copy.taxId.label, placeholder: copy.taxId.placeholder, autoComplete: "off", autoCapitalize: "characters", spellCheck: false,
95
+ /* Optional (#WB-2): an empty submit leaves it clean. */
96
+ defaultValue: emptyError ? '' : (values?.taxId ?? '') })] }));
83
97
  });
84
98
  WatchlistBusinessFormScreen.displayName = 'WatchlistBusinessFormScreen';
85
99
  export default WatchlistBusinessFormScreen;
@@ -4,15 +4,18 @@
4
4
  * in field content and whether the CTA is live, which is exactly what
5
5
  * GUIDELINES §6-E means by "states are separate screens sharing the identical
6
6
  * layout":
7
- * - `default` — every field empty (the country dropdown on its placeholder),
8
- * CTA greyed
9
- * - `filled` — country selected and business name typed, CTA live
7
+ * - `default` — every field empty (the country dropdown on its placeholder),
8
+ * CTA live so the user can press it (GUIDELINES §6-E empty-submit rule)
9
+ * - `filled` — country selected and business name typed, CTA live
10
+ * - `emptyError` — the user pressed the CTA with the form empty: Country and
11
+ * Business Name render empty in Core's error state with `requiredError`,
12
+ * Tax ID stays clean, CTA greyed (Elena 2026-09-30)
10
13
  *
11
14
  * Note what `filled` does NOT do: it leaves **Tax ID empty** and still enables
12
15
  * the CTA, so the tax identifier is optional and does not gate the lookup
13
- * (DEVIATIONS #WB-2).
16
+ * (DEVIATIONS #WB-2). That is also why `emptyError` leaves Tax ID alone.
14
17
  */
15
- export type WatchlistBusinessFormState = 'default' | 'filled';
18
+ export type WatchlistBusinessFormState = 'default' | 'filled' | 'emptyError';
16
19
  /**
17
20
  * One selectable country of registration. Runtime data, never copy — the host
18
21
  * owns the catalogue (a full ISO list is not a string table), exactly as Phone
@@ -58,11 +61,22 @@ export interface WatchlistBusinessStrings {
58
61
  verifiedLabel: string;
59
62
  /** Accessible name for the logo nav row. */
60
63
  navLabel?: string;
61
- /** watchlist.{default,filled} */
64
+ /**
65
+ * The error row the REQUIRED fields (Country, Business Name) show on the
66
+ * `emptyError` form state ("This field is required"). Maps to the SDK's
67
+ * `dynamicForms.fieldRequired` key. GUIDELINES §6-E empty-submit rule.
68
+ */
69
+ requiredError: string;
70
+ /**
71
+ * Required-field marker ("*"), passed to Core's own `requiredHint` prop on
72
+ * Country and Business Name (Elena, 2026-09-30).
73
+ */
74
+ requiredHint?: string;
75
+ /** watchlist.{default,filled,emptyError} */
62
76
  form: {
63
77
  /** H2 ("Watchlist for business"). */
64
78
  title: string;
65
- /** H5 — the purple sections draw none, kept for hosts that want one. */
79
+ /** H5 ("All fields marked with * are required."), explains the asterisk. */
66
80
  subtitle?: string;
67
81
  country: WatchlistBusinessFieldStrings & {
68
82
  /** Search placeholder inside the open menu. */
package/dist/flows.d.ts CHANGED
@@ -20,6 +20,10 @@ export interface FaceCaptureFlowVariant {
20
20
  ctaLoading?: boolean;
21
21
  /** FaceCaptureCapturingScreen — which of the 15 `capturing.*` sections. */
22
22
  state?: FaceCaptureCapturingState;
23
+ /** FaceCaptureCapturingScreen — raise the "Need more time?" offer over the
24
+ * feed. A modifier of `state`, not one of the fifteen: the fallback timer
25
+ * runs underneath whichever guidance is showing. */
26
+ extendTime?: boolean;
23
27
  /** FaceCaptureLoadingScreen — `loading.uploading` vs `loading.processing`. */
24
28
  stage?: 'uploading' | 'processing';
25
29
  /** FaceCaptureResultErrorScreen — the `*Exhausted` half of the error pairs. */
@@ -167,6 +171,10 @@ export interface IdCaptureFlowVariant {
167
171
  vertical?: boolean;
168
172
  /** IdCaptureStageScreen — which stage section. */
169
173
  state?: IdCaptureStageState;
174
+ /** IdCaptureStageScreen — raise the "Need more time?" offer over the feed.
175
+ * A modifier of `state`, not one of the eleven: the fallback timer runs
176
+ * underneath whichever stage is showing. */
177
+ extendTime?: boolean;
170
178
  /** IdCaptureStageScreen — the `*-manual` sections. */
171
179
  manual?: boolean;
172
180
  /** IdCaptureResultScreen — which verdict section. */
package/dist/flows.js CHANGED
@@ -79,6 +79,14 @@ export const faceCaptureFlow = [
79
79
  /** The off-path screens: manual capture (offered when auto-capture is turned
80
80
  * off or gives up), the two error verdicts, and the connectivity error. */
81
81
  export const faceCaptureBranches = [
82
+ {
83
+ // A branch, not a step: it only appears when accessibility mode is ON for
84
+ // the flow AND the fallback timer is 20 s from expiring. It returns to the
85
+ // capturing states it came from, so it never "follows" anything.
86
+ screenId: 'face-capture-capturing-extend-time',
87
+ component: FaceCaptureCapturingScreen,
88
+ variant: { state: 'alignFace', extendTime: true },
89
+ },
82
90
  {
83
91
  screenId: 'face-capture-manual-capture',
84
92
  component: FaceCaptureManualCaptureScreen,
@@ -442,6 +450,15 @@ export const idCaptureBranches = [
442
450
  screenId: 'id-capture-age-verification',
443
451
  component: IdCaptureAgeVerificationScreen,
444
452
  },
453
+ {
454
+ // A branch, not a step: it only appears when accessibility mode is ON for
455
+ // the flow AND the 30 s fallback timer is 20 s from expiring. It returns
456
+ // to the hint stage it came from, so it never "follows" anything — the
457
+ // same shape as Face Capture's `capturing-extend-time`.
458
+ screenId: 'id-capture-front-extend-time',
459
+ component: IdCaptureStageScreen,
460
+ variant: { state: 'hint', extendTime: true },
461
+ },
445
462
  {
446
463
  screenId: 'id-capture-front-manual',
447
464
  component: IdCaptureStageScreen,
package/dist/index.d.ts CHANGED
@@ -33,6 +33,11 @@ export { DocumentCaptureConfirmImageScreen, type DocumentCaptureConfirmImageScre
33
33
  export { DocumentCaptureConfirmUploadScreen, type DocumentCaptureConfirmUploadScreenProps, } from './DocumentCaptureConfirmUploadScreen';
34
34
  export { DocumentCaptureGenericErrorScreen, type DocumentCaptureGenericErrorScreenProps, } from './DocumentCaptureGenericErrorScreen';
35
35
  export { DocumentCaptureNoConnectionScreen, type DocumentCaptureNoConnectionScreenProps, } from './DocumentCaptureNoConnectionScreen';
36
+ export { type DigitalIdUploadStrings, type DigitalIdUploadConfirmStage, } from './DigitalIdUploadStrings';
37
+ export { DigitalIdUploadTutorialScreen, type DigitalIdUploadTutorialScreenProps, } from './DigitalIdUploadTutorialScreen';
38
+ export { DigitalIdUploadReviewScreen, type DigitalIdUploadReviewScreenProps, } from './DigitalIdUploadReviewScreen';
39
+ export { DigitalIdUploadErrorScreen, type DigitalIdUploadErrorScreenProps, } from './DigitalIdUploadErrorScreen';
40
+ export { DigitalIdUploadFileTooLargeScreen, type DigitalIdUploadFileTooLargeScreenProps, } from './DigitalIdUploadFileTooLargeScreen';
36
41
  export { type IdCaptureStrings, type IdCaptureDocumentType, type IdCaptureSide, type IdCaptureStageState, type IdCaptureFeedbackKind, type IdCaptureFeedbackCopy, type IdCaptureListRow, } from './IdCaptureStrings';
37
42
  export { IdCaptureDocumentSelectionScreen, type IdCaptureDocumentSelectionScreenProps, } from './IdCaptureDocumentSelectionScreen';
38
43
  export { IdCaptureAgeVerificationScreen, type IdCaptureAgeVerificationScreenProps, } from './IdCaptureAgeVerificationScreen';
@@ -89,6 +94,11 @@ export { FormsLongFormScreen, type FormsLongFormScreenProps } from './FormsLongF
89
94
  export { FormsSuccessScreen, type FormsSuccessScreenProps } from './FormsSuccessScreen';
90
95
  export { type DataSharingConsentState, type DataSharingConsentItemStrings, type DataSharingConsentStrings, } from './DataSharingConsentStrings';
91
96
  export { DataSharingConsentConsentScreen, type DataSharingConsentConsentScreenProps } from './DataSharingConsentConsentScreen';
97
+ export { type BiometricConsentState, type BiometricConsentStrings, } from './BiometricConsentStrings';
98
+ export { BiometricConsentScreen, type BiometricConsentScreenProps } from './BiometricConsentScreen';
99
+ export { type ReusabilityDocumentType, type ReusableCredential, type ReusabilityStrings, } from './ReusabilityStrings';
100
+ export { ReusabilityCredentialSelectionScreen, REUSABILITY_SCAN_NEW, type ReusabilitySelection, type ReusabilityCredentialSelectionScreenProps, } from './ReusabilityCredentialSelectionScreen';
101
+ export { ReusabilityPrivacyPolicyScreen, type ReusabilityPrivacyPolicyScreenProps } from './ReusabilityPrivacyPolicyScreen';
92
102
  export { type EkycDetailsState, type EkycLicenseState, type EkycLicenseStateOption, type EkycDetailsValues, type EkycLicenseValues, type EkycStrings, type EkycCountryValues, } from './EkycStrings';
93
103
  export { EKYC_COUNTRY_CATALOG, ekycCountryVariant, type EkycCountryVariant, type EkycCountryStep, type EkycField, type EkycFieldKey, type EkycFieldKind, } from './EkycCountryCatalog';
94
104
  export { EkycCountryFormScreen, type EkycCountryFormScreenProps } from './EkycCountryFormScreen';
@@ -109,7 +119,7 @@ export { type WatchlistBusinessFormState, type WatchlistBusinessCountry, type Wa
109
119
  export { WatchlistBusinessFormScreen, type WatchlistBusinessFormScreenProps } from './WatchlistBusinessFormScreen';
110
120
  export { WatchlistBusinessProcessingScreen, type WatchlistBusinessProcessingScreenProps } from './WatchlistBusinessProcessingScreen';
111
121
  export { WatchlistBusinessSuccessScreen, type WatchlistBusinessSuccessScreenProps } from './WatchlistBusinessSuccessScreen';
112
- export { type VideoSelfieDocumentType, type VideoSelfieTutorialRow, type VideoSelfieTutorialRowKind, type VideoSelfieFeedbackKind, type VideoSelfieIdSide, type VideoSelfieIdErrorSeverity, type VideoSelfieSpeakFamily, type VideoSelfieStepsOs, type VideoSelfieStepsStrings, type VideoSelfieSpeakStrings, type VideoSelfieStrings, } from './VideoSelfieStrings';
122
+ export { type VideoSelfieDocumentType, type VideoSelfieTutorialRow, type VideoSelfieTutorialRowKind, type VideoSelfieFeedbackKind, type VideoSelfieIdSide, type VideoSelfieConditionCopy, type VideoSelfieIdCondition, type VideoSelfieIdErrorReason, type VideoSelfieIdErrorSeverity, type VideoSelfieTurnDirection, type VideoSelfieSpeakFamily, type VideoSelfieStepsOs, type VideoSelfieStepsStrings, type VideoSelfieSpeakStrings, type VideoSelfieStrings, } from './VideoSelfieStrings';
113
123
  export { VideoSelfieCameraStepsScreen, type VideoSelfieCameraStepsScreenProps } from './VideoSelfieCameraStepsScreen';
114
124
  export { VideoSelfieErrorScreen, type VideoSelfieErrorVariant, type VideoSelfieErrorScreenProps, } from './VideoSelfieErrorScreen';
115
125
  export { VideoSelfieFlipCameraScreen, type VideoSelfieFlipCameraScreenProps } from './VideoSelfieFlipCameraScreen';
@@ -123,6 +133,8 @@ export { VideoSelfieSelfieCaptureScreen, type VideoSelfieSelfieState, type Video
123
133
  export { VideoSelfieSpeakScreen, type VideoSelfieSpeakStage, type VideoSelfieSpeakScreenProps, } from './VideoSelfieSpeakScreen';
124
134
  export { VideoSelfieSuccessScreen, type VideoSelfieSuccessScreenProps } from './VideoSelfieSuccessScreen';
125
135
  export { VideoSelfieTutorialScreen, type VideoSelfieTutorialScreenProps } from './VideoSelfieTutorialScreen';
136
+ export { VideoSelfieTurnHeadScreen, type VideoSelfieTurnStage, type VideoSelfieTurnHeadScreenProps, } from './VideoSelfieTurnHeadScreen';
137
+ export { VideoSelfieWaveScreen, type VideoSelfieWaveStage, type VideoSelfieWaveScreenProps, } from './VideoSelfieWaveScreen';
126
138
  export { type NfcDocumentType, type NfcIssueKind, type NfcIssueStrings, type NfcHeadingStrings, type NfcStrings, } from './NfcStrings';
127
139
  export { NfcCommonIssuesScreen, type NfcCommonIssuesScreenProps } from './NfcCommonIssuesScreen';
128
140
  export { NfcErrorScreen, type NfcErrorVariant, type NfcErrorScreenProps, } from './NfcErrorScreen';
@@ -133,7 +145,13 @@ export { NfcSuccessScreen, type NfcSuccessScreenProps } from './NfcSuccessScreen
133
145
  export { NfcSymbolScreen, type NfcSymbolScreenProps } from './NfcSymbolScreen';
134
146
  export { NfcTryAgainScreen, type NfcTryAgainStep, type NfcTryAgainScreenProps, } from './NfcTryAgainScreen';
135
147
  export { NfcTutorialScreen, type NfcTutorialScreenProps } from './NfcTutorialScreen';
148
+ export { type OcrReviewState, type OcrReviewStrings, } from './OcrReviewStrings';
149
+ export { OcrReviewScreen, type OcrReviewScreenProps } from './OcrReviewScreen';
150
+ export { OcrReviewLoadingScreen, type OcrReviewLoadingScreenProps } from './OcrReviewLoadingScreen';
151
+ export { OcrReviewSuccessScreen, type OcrReviewSuccessScreenProps } from './OcrReviewSuccessScreen';
152
+ export { OcrReviewErrorScreen, type OcrReviewErrorScreenProps } from './OcrReviewErrorScreen';
136
153
  export { type PermissionsStrings, type PermissionsCapability, type PermissionsReasonRow, type PermissionsBrowser, type PermissionsStepKind, type PermissionsStep, type PermissionsBrowserSteps, } from './PermissionsStrings';
154
+ export { PermissionsAskScreen, type PermissionsAskScreenProps, } from './PermissionsAskScreen';
137
155
  export { PermissionsRequiredScreen, type PermissionsRequiredScreenProps, } from './PermissionsRequiredScreen';
138
156
  export { PermissionsAllowScreen, type PermissionsAllowScreenProps, } from './PermissionsAllowScreen';
139
157
  export { PermissionsBrowserStepsScreen, type PermissionsBrowserStepsScreenProps, } from './PermissionsBrowserStepsScreen';
package/dist/index.js CHANGED
@@ -35,6 +35,10 @@ export { DocumentCaptureConfirmImageScreen, } from './DocumentCaptureConfirmImag
35
35
  export { DocumentCaptureConfirmUploadScreen, } from './DocumentCaptureConfirmUploadScreen';
36
36
  export { DocumentCaptureGenericErrorScreen, } from './DocumentCaptureGenericErrorScreen';
37
37
  export { DocumentCaptureNoConnectionScreen, } from './DocumentCaptureNoConnectionScreen';
38
+ export { DigitalIdUploadTutorialScreen, } from './DigitalIdUploadTutorialScreen';
39
+ export { DigitalIdUploadReviewScreen, } from './DigitalIdUploadReviewScreen';
40
+ export { DigitalIdUploadErrorScreen, } from './DigitalIdUploadErrorScreen';
41
+ export { DigitalIdUploadFileTooLargeScreen, } from './DigitalIdUploadFileTooLargeScreen';
38
42
  export { IdCaptureDocumentSelectionScreen, } from './IdCaptureDocumentSelectionScreen';
39
43
  export { IdCaptureAgeVerificationScreen, } from './IdCaptureAgeVerificationScreen';
40
44
  export { IdCaptureTutorialScreen, } from './IdCaptureTutorialScreen';
@@ -82,6 +86,9 @@ export { FormsFieldScreen } from './FormsFieldScreen';
82
86
  export { FormsLongFormScreen } from './FormsLongFormScreen';
83
87
  export { FormsSuccessScreen } from './FormsSuccessScreen';
84
88
  export { DataSharingConsentConsentScreen } from './DataSharingConsentConsentScreen';
89
+ export { BiometricConsentScreen } from './BiometricConsentScreen';
90
+ export { ReusabilityCredentialSelectionScreen, REUSABILITY_SCAN_NEW, } from './ReusabilityCredentialSelectionScreen';
91
+ export { ReusabilityPrivacyPolicyScreen } from './ReusabilityPrivacyPolicyScreen';
85
92
  export { EKYC_COUNTRY_CATALOG, ekycCountryVariant, } from './EkycCountryCatalog';
86
93
  export { EkycCountryFormScreen } from './EkycCountryFormScreen';
87
94
  export { EkycDetailsScreen } from './EkycDetailsScreen';
@@ -112,6 +119,8 @@ export { VideoSelfieSelfieCaptureScreen, } from './VideoSelfieSelfieCaptureScree
112
119
  export { VideoSelfieSpeakScreen, } from './VideoSelfieSpeakScreen';
113
120
  export { VideoSelfieSuccessScreen } from './VideoSelfieSuccessScreen';
114
121
  export { VideoSelfieTutorialScreen } from './VideoSelfieTutorialScreen';
122
+ export { VideoSelfieTurnHeadScreen, } from './VideoSelfieTurnHeadScreen';
123
+ export { VideoSelfieWaveScreen, } from './VideoSelfieWaveScreen';
115
124
  export { NfcCommonIssuesScreen } from './NfcCommonIssuesScreen';
116
125
  export { NfcErrorScreen, } from './NfcErrorScreen';
117
126
  export { NfcProcessingScreen } from './NfcProcessingScreen';
@@ -121,6 +130,11 @@ export { NfcSuccessScreen } from './NfcSuccessScreen';
121
130
  export { NfcSymbolScreen } from './NfcSymbolScreen';
122
131
  export { NfcTryAgainScreen, } from './NfcTryAgainScreen';
123
132
  export { NfcTutorialScreen } from './NfcTutorialScreen';
133
+ export { OcrReviewScreen } from './OcrReviewScreen';
134
+ export { OcrReviewLoadingScreen } from './OcrReviewLoadingScreen';
135
+ export { OcrReviewSuccessScreen } from './OcrReviewSuccessScreen';
136
+ export { OcrReviewErrorScreen } from './OcrReviewErrorScreen';
137
+ export { PermissionsAskScreen, } from './PermissionsAskScreen';
124
138
  export { PermissionsRequiredScreen, } from './PermissionsRequiredScreen';
125
139
  export { PermissionsAllowScreen, } from './PermissionsAllowScreen';
126
140
  export { PermissionsBrowserStepsScreen, } from './PermissionsBrowserStepsScreen';
package/dist/styles.css CHANGED
@@ -25,8 +25,11 @@
25
25
  @import './FormsLayout.css';
26
26
  @import './IdCaptureLayout.css';
27
27
  @import './NfcLayout.css';
28
+ @import './OcrReviewLayout.css';
29
+ @import './PermissionsLayout.css';
28
30
  @import './PhoneInputLayout.css';
29
31
  @import './QualifiedSignatureLayout.css';
32
+ @import './ReusabilityLayout.css';
30
33
  @import './ScreenLayout.css';
31
34
  @import './ScreenNav.css';
32
35
  @import './ScreenShell.css';
package/dist/types.d.ts CHANGED
@@ -10,7 +10,9 @@ import type { ReactNode } from 'react';
10
10
  * they collapsed into one indistinguishable event. DEVIATIONS #PI-10.
11
11
  */
12
12
  export interface PrizmaScreenAction {
13
- type: 'cta' | 'secondary' | 'tertiary' | 'auto' | 'help';
13
+ /** `back` — the nav's back chevron, on the screens that opt into one
14
+ * (`PrizmaScreenNav.backLabel`). */
15
+ type: 'cta' | 'secondary' | 'tertiary' | 'auto' | 'help' | 'back';
14
16
  /** Stable per-screen identifier, e.g. `face-capture-tutorial`. */
15
17
  screenId?: string;
16
18
  }