@incodetech/core 2.1.0-rc.1 → 2.1.0-rc.3
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.
- package/dist/3dAvatarProvider-ChciZmjE.esm.js +28214 -0
- package/dist/{BrowserStorageProvider-BpJM-gIl.esm.js → BrowserStorageProvider-CrrN540a.esm.js} +1 -8
- package/dist/BrowserVisibilityObserverProvider-rim9Jrz-.esm.js +25 -0
- package/dist/Face2DProvider-BeLlYBbB.esm.js +824 -0
- package/dist/FaceDetectionProvider-B78455D4.d.ts +119 -0
- package/dist/IVisibilityObserverCapability-BbWjgpiF.d.ts +12 -0
- package/dist/IWasmUtilCapability-d2XvzaCk.d.ts +145 -0
- package/dist/IpifyProvider-BRW14_uo.esm.js +51 -0
- package/dist/{OpenViduRecordingProvider-O4GjBseO.esm.js → OpenViduRecordingProvider-B_0GKkzc.esm.js} +1 -1
- package/dist/PrivacyLensProvider-hDzaDzZ6.esm.js +339 -0
- package/dist/{StreamCanvasCapture-ImiDQdVA.esm.js → StreamCanvasCapture-Bz17q4FP.esm.js} +1 -1
- package/dist/StreamCanvasCapture-DS1TOoiH.d.ts +42 -0
- package/dist/{WasmUtilProvider-BKWm8rSA.esm.js → WasmUtilProvider-ADG54T6M.esm.js} +26 -2
- package/dist/{addressSearch-DvmWXKZg.esm.js → addressSearch-DJyNTg5S.esm.js} +4 -4
- package/dist/{ae-signature-BFZta3TZ.esm.js → ae-signature-DlElqFrZ.esm.js} +1 -1
- package/dist/ae-signature.d.ts +4 -3
- package/dist/ae-signature.esm.js +10 -7
- package/dist/antifraud.d.ts +4 -3
- package/dist/antifraud.esm.js +7 -6
- package/dist/antifraudManager-BKdQoMFf.esm.js +84 -0
- package/dist/{antifraudManager-CznnhyvD.d.ts → antifraudManager-DpIvbrZP.d.ts} +2 -2
- package/dist/{antifraudStateMachine-Ccrb-Jxc.esm.js → antifraudStateMachine-C0NGnP9W.esm.js} +3 -3
- package/dist/{api-CESGtpbH.esm.js → api-DsbUi7TO.esm.js} +21 -2
- package/dist/authentication.d.ts +19 -13
- package/dist/authentication.esm.js +33 -27
- package/dist/{authenticationManager-CaiQbp-q.d.ts → authenticationManager-CdPbNS2H.d.ts} +13 -3
- package/dist/{authenticationManager-BlR6mSaG.esm.js → authenticationManager-Dtl1vcET.esm.js} +17 -8
- package/dist/{authenticationStateMachine-DkcGUMw5.esm.js → authenticationStateMachine-D-hOlg8p.esm.js} +20 -23
- package/dist/avatar.d.ts +3 -0
- package/dist/avatar.esm.js +3 -0
- package/dist/{backCameraStream-D7Wo4Nbx.esm.js → backCameraStream-ZyqrFyjO.esm.js} +3 -3
- package/dist/browser-DlFgHpoC-qLKs75Qp.esm.js +1425 -0
- package/dist/{browserSimulation-B1dWiXp7.esm.js → browserSimulation-TsSoavQv.esm.js} +153 -1216
- package/dist/camera-DUkgmYMo.esm.js +79 -0
- package/dist/camera.d.ts +7 -1
- package/dist/camera.esm.js +4 -4
- package/dist/{StreamCanvasCapture-yyl20qd9.d.ts → canvas-CJUmoXSD.d.ts} +1 -41
- package/dist/certificate-issuance.d.ts +312 -0
- package/dist/certificate-issuance.esm.js +74 -0
- package/dist/certificateIssuanceStateMachine-C07m7qtP.esm.js +127 -0
- package/dist/clientLifecycle-Ct7h9uxx.esm.js +534 -0
- package/dist/consent.d.ts +4 -3
- package/dist/consent.esm.js +7 -6
- package/dist/{consentManager-BYo9Nu1r.esm.js → consentManager-BtnPZUW4.esm.js} +30 -5
- package/dist/{consentManager-Cg5Sk2tv.d.ts → consentManager-DufVo9D9.d.ts} +55 -55
- package/dist/{consentStateMachine-BG3yL8aC.esm.js → consentStateMachine-DO2JqoZW.esm.js} +3 -3
- package/dist/cpf-ocr.d.ts +4 -3
- package/dist/cpf-ocr.esm.js +7 -6
- package/dist/{cpfOcrManager-sSKegxox.esm.js → cpfOcrManager-C4rLgKsu.esm.js} +6 -5
- package/dist/{cpfOcrManager-Dg1s_TY5.d.ts → cpfOcrManager-DqZZ94Gt.d.ts} +19 -19
- package/dist/createFaceAvatar-B8pFpy6o.d.ts +401 -0
- package/dist/createFaceAvatar-BOHDKQRq.esm.js +46 -0
- package/dist/cross-document-data-match.d.ts +2 -1
- package/dist/cross-document-data-match.esm.js +6 -5
- package/dist/curp-validation.d.ts +10 -7
- package/dist/curp-validation.esm.js +7 -6
- package/dist/{curpValidationManager-CFem6zP9.esm.js → curpValidationManager-BafobPXC.esm.js} +52 -5
- package/dist/{curpValidationManager-RttixpIc.d.ts → curpValidationManager-Co6LZAHT.d.ts} +4 -3
- package/dist/{curpValidationStateMachine-B7V_qp66.esm.js → curpValidationStateMachine-DXTPK6vI.esm.js} +3 -3
- package/dist/custom-fields.d.ts +4 -2
- package/dist/custom-fields.esm.js +49 -6
- package/dist/custom-watchlist.d.ts +2 -1
- package/dist/custom-watchlist.esm.js +27 -6
- package/dist/{customWatchlistStateMachine-HmFybXLX.esm.js → customWatchlistStateMachine-B4G3Chkx.esm.js} +3 -3
- package/dist/{deepsightLoader-8tnddNx-.esm.js → deepsightLoader-DHSVD776.esm.js} +14 -13
- package/dist/{deepsightService-CrHmvx8X.esm.js → deepsightService-CDahSjGP.esm.js} +9 -38
- package/dist/deepsightService-CMB9XjES.d.ts +69 -0
- package/dist/device.d.ts +9 -1
- package/dist/device.esm.js +5 -5
- package/dist/document-capture.d.ts +178 -177
- package/dist/document-capture.esm.js +78 -14
- package/dist/document-upload.d.ts +51 -50
- package/dist/document-upload.esm.js +10 -9
- package/dist/{documentCaptureStateMachine-CUTUzUw_.esm.js → documentCaptureStateMachine-DSOX2epf.esm.js} +7 -7
- package/dist/dynamic-forms.d.ts +4 -192
- package/dist/dynamic-forms.esm.js +8 -410
- package/dist/dynamicFormsManager-BOefZbyF.esm.js +168 -0
- package/dist/dynamicFormsManager-CUYLOj9g.d.ts +239 -0
- package/dist/dynamicFormsStateMachine-BXHcaocI.esm.js +284 -0
- package/dist/ekyb.d.ts +10 -6
- package/dist/ekyb.esm.js +62 -17
- package/dist/{ekybStateMachine-klc-AImJ.esm.js → ekybStateMachine-CCSeqjCt.esm.js} +5 -5
- package/dist/ekyc.d.ts +5 -3
- package/dist/ekyc.esm.js +55 -9
- package/dist/{ekycStateMachine-CXbpaJJn.esm.js → ekycStateMachine-DkLVTOyA.esm.js} +5 -5
- package/dist/electronic-signature.d.ts +4 -3
- package/dist/electronic-signature.esm.js +9 -6
- package/dist/{electronicSignatureManager-BaECdJ1u.esm.js → electronicSignatureManager-DjzUzqZj.esm.js} +135 -92
- package/dist/email.d.ts +5 -4
- package/dist/email.esm.js +9 -8
- package/dist/{emailManager--D5G3ChB.esm.js → emailManager-B_XzEsXH.esm.js} +47 -6
- package/dist/{emailManager-lAzDoQOs.d.ts → emailManager-fHASH6uo.d.ts} +4 -3
- package/dist/{emailStateMachine-CxTOMAjC.esm.js → emailStateMachine-fqJ42b19.esm.js} +5 -5
- package/dist/{endpoints-BeTK0Mlt.esm.js → endpoints-BzMJFAPV.esm.js} +15 -0
- package/dist/{events-Dvvriq9l.esm.js → events-CqGY1yMq.esm.js} +87 -206
- package/dist/events.d.ts +23 -16
- package/dist/events.esm.js +3 -2
- package/dist/extensibility.d.ts +37 -27
- package/dist/extensibility.esm.js +74 -57
- package/dist/externalFetch-CyhBfD-n.esm.js +22 -0
- package/dist/face-match.d.ts +2 -2
- package/dist/face-match.esm.js +6 -5
- package/dist/{faceCaptureManagerFactory-ej2j1LMr.esm.js → faceCaptureManagerFactory-2brKTzMb.esm.js} +115 -25
- package/dist/faceCaptureManagerFactory-CGKbf7zt.d.ts +400 -0
- package/dist/{faceCaptureSetup-B9t6bYze.esm.js → faceCaptureSetup-CDUVU1nl.esm.js} +97 -13
- package/dist/{faceMatchStateMachine-DeXXzSuz.esm.js → faceMatchStateMachine-DUeUjEPx.esm.js} +3 -3
- package/dist/field-comparison.d.ts +4 -3
- package/dist/field-comparison.esm.js +6 -5
- package/dist/{fieldComparisonManager-COGI2ARD.esm.js → fieldComparisonManager-B9W0a9A5.esm.js} +5 -4
- package/dist/{fieldComparisonManager-Bu5TaSr3.d.ts → fieldComparisonManager-DdLqDeB2.d.ts} +2 -2
- package/dist/fiscal-qr.d.ts +5 -3
- package/dist/fiscal-qr.esm.js +13 -12
- package/dist/flow-events.d.ts +8 -6
- package/dist/flow.d.ts +34 -16
- package/dist/flow.esm.js +53 -30
- package/dist/flowCompletionService-BIqSTZcd.d.ts +28 -0
- package/dist/flowCompletionService-qEqh_g14.esm.js +42 -0
- package/dist/{flowServices-ChgTNggJ.esm.js → flowServices-C4piblgx.esm.js} +24 -9
- package/dist/geolocation.d.ts +4 -126
- package/dist/geolocation.esm.js +8 -87
- package/dist/geolocationManager-BP2Do9O-.esm.js +123 -0
- package/dist/geolocationManager-Cs50eRlC.d.ts +156 -0
- package/dist/{geolocationStateMachine-Dvh7X0wF.esm.js → geolocationStateMachine-BYfOOOG0.esm.js} +4 -4
- package/dist/{getDeviceClass-C8Do2qYu.esm.js → getDeviceClass-DGGzzfqm.esm.js} +1 -1
- package/dist/getDeviceData-TrKM8NPh.esm.js +101 -0
- package/dist/government-validation.d.ts +4 -3
- package/dist/government-validation.esm.js +43 -8
- package/dist/{governmentValidationStateMachine-DcJ-BfsC.esm.js → governmentValidationStateMachine-CwoPPO8b.esm.js} +5 -5
- package/dist/home.d.ts +18 -15
- package/dist/home.esm.js +5 -4
- package/dist/http.d.ts +1 -0
- package/dist/http.esm.js +2 -2
- package/dist/id-ocr.d.ts +4 -625
- package/dist/id-ocr.esm.js +8 -84
- package/dist/id-verification.d.ts +28 -27
- package/dist/id-verification.esm.js +6 -5
- package/dist/id.d.ts +24 -13
- package/dist/id.esm.js +48 -33
- package/dist/idCaptureDefaults-DNJON8Xo.esm.js +188 -0
- package/dist/{idCaptureManager-ChCNmgBj.d.ts → idCaptureManager-BVdvfJys.d.ts} +47 -12
- package/dist/{idCaptureManager-D3pwWutw.esm.js → idCaptureManager-Bo9DCQSU.esm.js} +100 -15
- package/dist/{idCaptureStateMachine-B3AiDIsT.esm.js → idCaptureStateMachine-BeDidMLU.esm.js} +525 -439
- package/dist/idOcrManager-BkRDrpZu.esm.js +92 -0
- package/dist/idOcrManager-CJzrmM91.d.ts +641 -0
- package/dist/{idOcrStateMachine-CDQ5d_VM.esm.js → idOcrStateMachine-DRZc4FBl.esm.js} +5 -5
- package/dist/{idVerificationStateMachine-kRxwImzO.esm.js → idVerificationStateMachine-oqiERKpg.esm.js} +3 -3
- package/dist/identity-reuse.d.ts +4 -3
- package/dist/identity-reuse.esm.js +7 -6
- package/dist/{identityReuseManager-C6n_97dw.esm.js → identityReuseManager-Bu62LToE.esm.js} +4 -3
- package/dist/{identityReuseManager-Cww-NDtd.d.ts → identityReuseManager-TWKbXuvY.d.ts} +33 -33
- package/dist/{identityReuseStateMachine-BfE5YiEr.esm.js → identityReuseStateMachine-BmONeF6B.esm.js} +3 -3
- package/dist/{index-B5hPA0Bg.d.ts → index-DtUlD-bz.d.ts} +2 -2
- package/dist/{index-B9NysVDB.d.ts → index-Icld-cKW.d.ts} +175 -295
- package/dist/index-XTtxaahe.d.ts +93 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.esm.js +16 -12
- package/dist/{invokeOnCaptureCallback-ygByVdnn.esm.js → invokeOnCaptureCallback-v_PV_IJz.esm.js} +1 -1
- package/dist/{lib-BY67lgbq.esm.js → lib-B050WTth.esm.js} +1 -1
- package/dist/mandatory-consent.d.ts +10 -7
- package/dist/mandatory-consent.esm.js +7 -6
- package/dist/{mandatoryConsentManager-Dq6WiOZh.d.ts → mandatoryConsentManager-Bmdjo14S.d.ts} +50 -50
- package/dist/{mandatoryConsentManager-H6D18cZB.esm.js → mandatoryConsentManager-CQ3jirlZ.esm.js} +4 -3
- package/dist/{mandatoryConsentStateMachine-DtQNW1ji.esm.js → mandatoryConsentStateMachine-DkJJLHqC.esm.js} +3 -3
- package/dist/mediaRecorderOptions-C3NAkVgK.esm.js +42 -0
- package/dist/mediapipeShared-CRAKVElv.esm.js +67 -0
- package/dist/{recordingService-yRw7hfzU.esm.js → onDeviceFaceResults-DVBggeq8.esm.js} +71 -389
- package/dist/{openviduLazy-Dh14JNJc.esm.js → openviduLazy-BTOIauGP.esm.js} +2 -2
- package/dist/openviduLazy-Dov8oKfL.esm.js +3 -0
- package/dist/{permissionGuards-D0wGddy7.esm.js → permissionGuards-BR2oN573.esm.js} +1 -1
- package/dist/{permissionServices-Doec4X5L.esm.js → permissionServices-BJhGL13R.esm.js} +7 -4
- package/dist/personhood.d.ts +534 -0
- package/dist/personhood.esm.js +1494 -0
- package/dist/phone.d.ts +5 -4
- package/dist/phone.esm.js +9 -8
- package/dist/{phoneManager-fPmIBYQK.d.ts → phoneManager-BOTcjXgs.d.ts} +4 -3
- package/dist/{phoneManager-BmF-0Ez4.esm.js → phoneManager-BWlxqbyD.esm.js} +48 -6
- package/dist/{phoneStateMachine-BiV0yoEx.esm.js → phoneStateMachine-B_V9nODs.esm.js} +5 -5
- package/dist/{qe-signature-CUYPcHVo.esm.js → qe-signature-BhFnI9pT.esm.js} +1 -1
- package/dist/qe-signature.d.ts +4 -3
- package/dist/qe-signature.esm.js +10 -7
- package/dist/recordingService-m_1xCthr.esm.js +347 -0
- package/dist/redirect-to-mobile.d.ts +4 -3
- package/dist/redirect-to-mobile.esm.js +9 -7
- package/dist/{redirectToMobileManager-Dy3t7o0C.esm.js → redirectToMobileManager-BaAo9rgi.esm.js} +5 -4
- package/dist/{redirectToMobileManager-BNe3IzC_.d.ts → redirectToMobileManager-Br0KZK1G.d.ts} +2 -2
- package/dist/{redirectToMobileStateMachine-DyAdRxfP.esm.js → redirectToMobileStateMachine-DoAnf2ql.esm.js} +16 -28
- package/dist/{runChildModule-CuoHZ1cx.esm.js → runChildModule-0nQfjVVo.esm.js} +14 -24
- package/dist/selfie.d.ts +27 -14
- package/dist/selfie.esm.js +43 -30
- package/dist/{selfieManager-BNuTIGAz.esm.js → selfieManager-D_ZFERsE.esm.js} +17 -8
- package/dist/{selfieManager-C2y_t6DG.d.ts → selfieManager-R0Jw5sjb.d.ts} +13 -3
- package/dist/{selfieStateMachine-Bv99bZJE.esm.js → selfieStateMachine-CIgeeiN9.esm.js} +4 -4
- package/dist/{session-DoVb-OcB.esm.js → session-9jIfKFCc.esm.js} +3 -3
- package/dist/session.d.ts +11 -8
- package/dist/session.esm.js +16 -12
- package/dist/{sessionInitializer-DRB-hgbV.esm.js → sessionInitializer-C_TYIgyk.esm.js} +16 -109
- package/dist/{setup-BwCluiw3.d.ts → setup-CpRnXxn8.d.ts} +61 -2
- package/dist/setup-DHc6OaHm.esm.js +562 -0
- package/dist/signature.d.ts +4 -2
- package/dist/signature.esm.js +49 -6
- package/dist/{signatureStateMachine-C5qqYLRz.esm.js → signatureStateMachine-DtoiPzys.esm.js} +21 -39
- package/dist/{stats-BMNUG1AU.esm.js → stats-CYcScXcO.esm.js} +2 -2
- package/dist/stats.esm.js +3 -3
- package/dist/thumbmarkAdapter-fHBUDlAP.esm.js +1194 -0
- package/dist/tri-BG1iJsr4.esm.js +399 -0
- package/dist/tri.d.ts +2 -0
- package/dist/tri.esm-DUC01NgO.esm.js +2593 -0
- package/dist/tri.esm.js +4 -0
- package/dist/trust-graph.d.ts +4 -3
- package/dist/trust-graph.esm.js +4 -3
- package/dist/{types-NuT8ftBV.d.ts → types-BklZ_Wne.d.ts} +2 -1
- package/dist/{types-DOUhndhT.d.ts → types-BsYXnC5s.d.ts} +39 -3
- package/dist/{types-DsnEVMhr.esm.js → types-CMcxlSmH.esm.js} +2 -1
- package/dist/types-CxW2e0Ar.d.ts +132 -0
- package/dist/{types-Bj9hdFjU.d.ts → types-DgGlgyZT.d.ts} +1 -1
- package/dist/types-ElOJAGaM.esm.js +189 -0
- package/dist/urlUtils-BZqFU9rR.esm.js +16 -0
- package/dist/video-C2WIj6TS.esm.js +36 -0
- package/dist/video-selfie.d.ts +351 -0
- package/dist/video-selfie.esm.js +1509 -0
- package/dist/videoSelfieSteps-7M5vxKn-.esm.js +58 -0
- package/dist/{warmup-Dg8Lh-50.d.ts → warmup-BJZPQIiX.d.ts} +5 -1
- package/dist/wasm.d.ts +4 -3
- package/dist/wasm.esm.js +17 -13
- package/dist/watchlist-for-business.d.ts +2 -1
- package/dist/watchlist-for-business.esm.js +30 -7
- package/dist/watchlist.d.ts +2 -1
- package/dist/watchlist.esm.js +28 -6
- package/dist/{watchlistForBusinessStateMachine-DMl8j2Ov.esm.js → watchlistForBusinessStateMachine-DvEunDxs.esm.js} +3 -3
- package/dist/{watchlistStateMachine-DmQlqI6L.esm.js → watchlistStateMachine-AHXVf-TB.esm.js} +3 -3
- package/dist/workflow.d.ts +296 -103
- package/dist/workflow.esm.js +137 -74
- package/dist/{xstate.esm-C9wncMQa.esm.js → xstate.esm-Bomq1a0z.esm.js} +54 -5
- package/package.json +26 -1
- package/dist/IpifyProvider-D4LWD15E.esm.js +0 -167
- package/dist/antifraudManager-CkV4u-LE.esm.js +0 -55
- package/dist/camera-DJWm3V4g.esm.js +0 -22
- package/dist/deepsightService-Dh5P-hLf.d.ts +0 -265
- package/dist/faceCaptureManagerFactory-CjdBUS6s.d.ts +0 -721
- package/dist/flowCompletionService-BdR2cGgB.d.ts +0 -19
- package/dist/flowCompletionService-DdGojV9K.esm.js +0 -20
- package/dist/getBrowser-C8DP7oTB.esm.js +0 -8
- package/dist/openviduLazy-B8L--0oe.esm.js +0 -3
- package/dist/setup-CUO4mErT.esm.js +0 -1037
- /package/dist/{Actor-Y0_Fj-KL.d.ts → Actor-CGEelYtQ.d.ts} +0 -0
- /package/dist/{BrowserTimerProvider-DhNc_x02.esm.js → BrowserTimerProvider-CHloo0eQ.esm.js} +0 -0
- /package/dist/{ITimerCapability-CB0I1Uf2.esm.js → ITimerCapability-pltuG1E8.esm.js} +0 -0
- /package/dist/{Manager-BHn8wH8K.d.ts → Manager-CJ3G2zqi.d.ts} +0 -0
- /package/dist/{MotionSensorProvider-Bx7Mpzt0.esm.js → MotionSensorProvider-DCbId4De.esm.js} +0 -0
- /package/dist/{StateMachine-BC_nGvrc.d.ts → StateMachine-C_AY4cs7.d.ts} +0 -0
- /package/dist/{apiError-B-j-gyDx.esm.js → apiError-DNS2OCEX.esm.js} +0 -0
- /package/dist/{camera-SRBpPq2X.d.ts → camera-CNVUo-bC.d.ts} +0 -0
- /package/dist/{canvas-SKcRBxsk.esm.js → canvas-_I95hkPg.esm.js} +0 -0
- /package/dist/{chunk-CMUKZ2uL.esm.js → chunk-CIKcdghV.esm.js} +0 -0
- /package/dist/{cpf-BRzggV8G.esm.js → cpf-BKaho0j_.esm.js} +0 -0
- /package/dist/{dateUtils-AksLQmgV.esm.js → dateUtils-7-tQYRNN.esm.js} +0 -0
- /package/dist/{getDeviceClass-C0olyNFS.esm.js → getDeviceClass-DavNdcxh.esm.js} +0 -0
- /package/dist/{http-Cai3IoLS.esm.js → http-BkiUT7EB.esm.js} +0 -0
- /package/dist/{otp-CGMdUzBC.esm.js → otp-Bfnzf7I3.esm.js} +0 -0
- /package/dist/{otp-DF5A0sFx.d.ts → otp-M4iy57XY.d.ts} +0 -0
- /package/dist/{platform-SKvEfCBh.esm.js → platform-uIVQUnJP.esm.js} +0 -0
- /package/dist/{types-DvGZI7BF.d.ts → types-D_IceWxT.d.ts} +0 -0
- /package/dist/{types-ya0LN_MX.d.ts → types-Duy2rDxF.d.ts} +0 -0
|
@@ -1,412 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import "./api-DsbUi7TO.esm.js";
|
|
2
|
+
import "./events-CqGY1yMq.esm.js";
|
|
3
|
+
import "./types-ElOJAGaM.esm.js";
|
|
4
|
+
import "./endpoints-BzMJFAPV.esm.js";
|
|
5
|
+
import "./xstate.esm-Bomq1a0z.esm.js";
|
|
6
|
+
import "./dateUtils-7-tQYRNN.esm.js";
|
|
7
|
+
import { t as dynamicFormsMachine } from "./dynamicFormsStateMachine-BXHcaocI.esm.js";
|
|
8
|
+
import { t as createDynamicFormsManager } from "./dynamicFormsManager-BOefZbyF.esm.js";
|
|
6
9
|
|
|
7
|
-
//#region src/modules/dynamic-forms/dynamicFormsFields.ts
|
|
8
|
-
function getEffectiveType(question) {
|
|
9
|
-
return question.inputType ?? question.overrides ?? "TEXT";
|
|
10
|
-
}
|
|
11
|
-
const FORMAT_ERROR_KEY_BY_TYPE = {
|
|
12
|
-
PHONE: "phone.invalidPhone",
|
|
13
|
-
EMAIL: "verification.errors.emailInvalid",
|
|
14
|
-
CPF: "dynamicForms.invalidCpf"
|
|
15
|
-
};
|
|
16
|
-
function buildQuestionValidation(question) {
|
|
17
|
-
const effectiveType = getEffectiveType(question);
|
|
18
|
-
const rules = [];
|
|
19
|
-
if (!question.isOptional) rules.push({ type: "required" });
|
|
20
|
-
const formatErrorKey = FORMAT_ERROR_KEY_BY_TYPE[effectiveType];
|
|
21
|
-
if (formatErrorKey) rules.push({
|
|
22
|
-
type: "formatViaAnswerValidity",
|
|
23
|
-
errorKey: formatErrorKey
|
|
24
|
-
});
|
|
25
|
-
return rules;
|
|
26
|
-
}
|
|
27
|
-
function buildScreenFields(formScreen) {
|
|
28
|
-
return formScreen.questions.map((q) => ({
|
|
29
|
-
questionId: q.questionId,
|
|
30
|
-
inputType: getEffectiveType(q),
|
|
31
|
-
isOptional: q.isOptional ?? false,
|
|
32
|
-
validation: buildQuestionValidation(q)
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
//#endregion
|
|
37
|
-
//#region src/modules/dynamic-forms/dynamicFormsValidators.ts
|
|
38
|
-
const VALIDATORS = {
|
|
39
|
-
required: ({ value }) => value.trim().length === 0 ? "dynamicForms.fieldRequired" : void 0,
|
|
40
|
-
formatViaAnswerValidity: ({ questionId, answerValidity }, rule) => answerValidity[questionId] === false ? rule.errorKey : void 0
|
|
41
|
-
};
|
|
42
|
-
const normalizeValue = (value) => typeof value === "string" ? value : String(value ?? "");
|
|
43
|
-
function evaluateRules(input, rules) {
|
|
44
|
-
for (const rule of rules) {
|
|
45
|
-
const error = rule.type === "required" ? VALIDATORS.required(input) : VALIDATORS.formatViaAnswerValidity(input, rule);
|
|
46
|
-
if (error) return error;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/** Runs full-screen validation. Returns first failing key per field; empty = pass. */
|
|
50
|
-
function validateScreenForm(answers, fields, answerValidity) {
|
|
51
|
-
return fields.reduce((errors, field) => {
|
|
52
|
-
const error = evaluateRules({
|
|
53
|
-
value: normalizeValue(answers[field.questionId]),
|
|
54
|
-
questionId: field.questionId,
|
|
55
|
-
answerValidity
|
|
56
|
-
}, field.validation);
|
|
57
|
-
if (error) errors[field.questionId] = error;
|
|
58
|
-
return errors;
|
|
59
|
-
}, {});
|
|
60
|
-
}
|
|
61
|
-
/** Runs single-field validation (blur). Unknown `questionId` → `undefined`. */
|
|
62
|
-
function validateScreenField(answers, questionId, fields, answerValidity) {
|
|
63
|
-
const field = fields.find((f) => f.questionId === questionId);
|
|
64
|
-
if (!field) return void 0;
|
|
65
|
-
return evaluateRules({
|
|
66
|
-
value: normalizeValue(answers[questionId]),
|
|
67
|
-
questionId,
|
|
68
|
-
answerValidity
|
|
69
|
-
}, field.validation);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
//#endregion
|
|
73
|
-
//#region src/modules/dynamic-forms/dynamicFormsServices.ts
|
|
74
|
-
async function fetchForms(flowId, signal) {
|
|
75
|
-
const url = `${endpoints.moduleConfig}?id=${encodeURIComponent(flowId)}&moduleKey=DYNAMIC_FORMS`;
|
|
76
|
-
const res = await api.get(url, { signal });
|
|
77
|
-
if (!res.ok) throw new Error(`GET ${endpoints.moduleConfig} failed: ${res.status} ${res.statusText}`);
|
|
78
|
-
return res.data;
|
|
79
|
-
}
|
|
80
|
-
async function submitFormAnswer(params, signal) {
|
|
81
|
-
const res = await api.post(endpoints.dynamicFormsSubmitAnswer, {
|
|
82
|
-
questionId: params.questionId,
|
|
83
|
-
answerDetails: { singleAnswer: params.singleAnswer }
|
|
84
|
-
}, { signal });
|
|
85
|
-
if (!res.ok) throw new Error(`POST ${endpoints.dynamicFormsSubmitAnswer} failed: ${res.status} ${res.statusText}`);
|
|
86
|
-
return res.data;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
//#endregion
|
|
90
|
-
//#region src/modules/dynamic-forms/dynamicFormsStateMachine.ts
|
|
91
|
-
function transformAnswerValue(inputType, value) {
|
|
92
|
-
switch (inputType) {
|
|
93
|
-
case "CPF": return value.replace(/[-.]/g, "");
|
|
94
|
-
case "DATE": return isoDateToMs(value).toString();
|
|
95
|
-
default: return value;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const removeKey = (errors, key) => {
|
|
99
|
-
if (!errors?.[key]) return errors;
|
|
100
|
-
const next = { ...errors };
|
|
101
|
-
delete next[key];
|
|
102
|
-
return Object.keys(next).length > 0 ? next : void 0;
|
|
103
|
-
};
|
|
104
|
-
const upsertKey = (errors, key, message) => {
|
|
105
|
-
const next = { ...errors ?? {} };
|
|
106
|
-
if (message) next[key] = message;
|
|
107
|
-
else delete next[key];
|
|
108
|
-
return Object.keys(next).length > 0 ? next : void 0;
|
|
109
|
-
};
|
|
110
|
-
const dynamicFormsMachine = setup({
|
|
111
|
-
types: {
|
|
112
|
-
context: {},
|
|
113
|
-
events: {},
|
|
114
|
-
input: {}
|
|
115
|
-
},
|
|
116
|
-
actors: {
|
|
117
|
-
fetchScreens: fromPromise(async ({ input, signal }) => {
|
|
118
|
-
return fetchForms(input.flowId, signal);
|
|
119
|
-
}),
|
|
120
|
-
submitScreenAnswers: fromPromise(async ({ input, signal }) => {
|
|
121
|
-
const { screen: formScreen, answers } = input;
|
|
122
|
-
for (const question of formScreen.questions) {
|
|
123
|
-
const singleAnswer = transformAnswerValue(question.inputType ?? question.overrides ?? "TEXT", answers[question.questionId] ?? "");
|
|
124
|
-
try {
|
|
125
|
-
await submitFormAnswer({
|
|
126
|
-
questionId: question.questionId,
|
|
127
|
-
singleAnswer
|
|
128
|
-
}, signal);
|
|
129
|
-
} catch {}
|
|
130
|
-
}
|
|
131
|
-
return { success: true };
|
|
132
|
-
})
|
|
133
|
-
},
|
|
134
|
-
actions: {
|
|
135
|
-
setScreens: assign(({ event }) => {
|
|
136
|
-
const screens = event.output.screens;
|
|
137
|
-
const firstScreen = screens[0];
|
|
138
|
-
return {
|
|
139
|
-
screens,
|
|
140
|
-
answers: {},
|
|
141
|
-
currentScreenFields: firstScreen ? buildScreenFields(firstScreen) : []
|
|
142
|
-
};
|
|
143
|
-
}),
|
|
144
|
-
setAnswer: assign(({ context, event }) => {
|
|
145
|
-
const e = event;
|
|
146
|
-
return {
|
|
147
|
-
answers: {
|
|
148
|
-
...context.answers,
|
|
149
|
-
[e.questionId]: e.value
|
|
150
|
-
},
|
|
151
|
-
validationErrors: removeKey(context.validationErrors, e.questionId)
|
|
152
|
-
};
|
|
153
|
-
}),
|
|
154
|
-
setAnswerValidity: assign(({ context, event }) => {
|
|
155
|
-
const e = event;
|
|
156
|
-
return {
|
|
157
|
-
answerValidity: {
|
|
158
|
-
...context.answerValidity,
|
|
159
|
-
[e.questionId]: e.isValid
|
|
160
|
-
},
|
|
161
|
-
validationErrors: removeKey(context.validationErrors, e.questionId)
|
|
162
|
-
};
|
|
163
|
-
}),
|
|
164
|
-
validateFormField: assign(({ context, event }) => {
|
|
165
|
-
if (event.type !== "VALIDATE_FIELD") return {};
|
|
166
|
-
const message = validateScreenField(context.answers, event.questionId, context.currentScreenFields, context.answerValidity);
|
|
167
|
-
return { validationErrors: upsertKey(context.validationErrors, event.questionId, message) };
|
|
168
|
-
}),
|
|
169
|
-
computeValidationResult: assign(({ context }) => {
|
|
170
|
-
const errors = validateScreenForm(context.answers, context.currentScreenFields, context.answerValidity);
|
|
171
|
-
return { validationErrors: Object.keys(errors).length > 0 ? errors : void 0 };
|
|
172
|
-
}),
|
|
173
|
-
advanceScreen: assign(({ context }) => {
|
|
174
|
-
const nextIndex = context.currentScreenIndex + 1;
|
|
175
|
-
const nextScreen = context.screens[nextIndex];
|
|
176
|
-
return {
|
|
177
|
-
currentScreenIndex: nextIndex,
|
|
178
|
-
answers: {},
|
|
179
|
-
answerValidity: {},
|
|
180
|
-
currentScreenFields: nextScreen ? buildScreenFields(nextScreen) : [],
|
|
181
|
-
validationErrors: void 0
|
|
182
|
-
};
|
|
183
|
-
}),
|
|
184
|
-
markCompleted: assign({ result: "completed" }),
|
|
185
|
-
markSkipped: assign({ result: "skipped" })
|
|
186
|
-
},
|
|
187
|
-
guards: {
|
|
188
|
-
hasPreloadedScreens: ({ context }) => (context.config.screens?.length ?? 0) > 0,
|
|
189
|
-
hasFlowId: ({ context }) => !!context.config.flowId,
|
|
190
|
-
isLastScreen: ({ context }) => context.currentScreenIndex >= context.screens.length - 1,
|
|
191
|
-
isScreenValid: ({ context }) => Object.keys(context.validationErrors ?? {}).length === 0
|
|
192
|
-
}
|
|
193
|
-
}).createMachine({
|
|
194
|
-
id: "dynamicForms",
|
|
195
|
-
initial: "idle",
|
|
196
|
-
context: ({ input }) => {
|
|
197
|
-
const screens = input.config.screens ?? [];
|
|
198
|
-
const firstScreen = screens[0];
|
|
199
|
-
return {
|
|
200
|
-
config: input.config,
|
|
201
|
-
screens,
|
|
202
|
-
currentScreenIndex: 0,
|
|
203
|
-
answers: {},
|
|
204
|
-
answerValidity: {},
|
|
205
|
-
currentScreenFields: firstScreen ? buildScreenFields(firstScreen) : [],
|
|
206
|
-
result: null
|
|
207
|
-
};
|
|
208
|
-
},
|
|
209
|
-
states: {
|
|
210
|
-
idle: { on: { LOAD: [
|
|
211
|
-
{
|
|
212
|
-
target: "inputting",
|
|
213
|
-
guard: "hasPreloadedScreens"
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
target: "loadingScreens",
|
|
217
|
-
guard: "hasFlowId"
|
|
218
|
-
},
|
|
219
|
-
{ target: "misconfigured" }
|
|
220
|
-
] } },
|
|
221
|
-
loadingScreens: { invoke: {
|
|
222
|
-
id: "fetchScreens",
|
|
223
|
-
src: "fetchScreens",
|
|
224
|
-
input: ({ context }) => ({ flowId: context.config.flowId ?? "" }),
|
|
225
|
-
onDone: {
|
|
226
|
-
target: "inputting",
|
|
227
|
-
actions: "setScreens"
|
|
228
|
-
},
|
|
229
|
-
onError: {
|
|
230
|
-
target: "finished",
|
|
231
|
-
actions: "markSkipped"
|
|
232
|
-
}
|
|
233
|
-
} },
|
|
234
|
-
inputting: {
|
|
235
|
-
initial: "editing",
|
|
236
|
-
states: {
|
|
237
|
-
editing: { on: {
|
|
238
|
-
ANSWER_CHANGED: { actions: "setAnswer" },
|
|
239
|
-
ANSWER_VALIDITY_CHANGED: { actions: "setAnswerValidity" },
|
|
240
|
-
VALIDATE_FIELD: { actions: "validateFormField" },
|
|
241
|
-
SUBMIT: { target: "validatingSubmit" }
|
|
242
|
-
} },
|
|
243
|
-
validatingSubmit: {
|
|
244
|
-
entry: "computeValidationResult",
|
|
245
|
-
always: [{
|
|
246
|
-
guard: "isScreenValid",
|
|
247
|
-
target: "#dynamicForms.submitting"
|
|
248
|
-
}, { target: "editing" }]
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
submitting: { invoke: {
|
|
253
|
-
id: "submitScreenAnswers",
|
|
254
|
-
src: "submitScreenAnswers",
|
|
255
|
-
input: ({ context }) => ({
|
|
256
|
-
screen: context.screens[context.currentScreenIndex],
|
|
257
|
-
answers: context.answers
|
|
258
|
-
}),
|
|
259
|
-
onDone: [{
|
|
260
|
-
target: "success",
|
|
261
|
-
guard: "isLastScreen"
|
|
262
|
-
}, {
|
|
263
|
-
target: "inputting",
|
|
264
|
-
actions: "advanceScreen"
|
|
265
|
-
}],
|
|
266
|
-
onError: [{
|
|
267
|
-
target: "success",
|
|
268
|
-
guard: "isLastScreen"
|
|
269
|
-
}, {
|
|
270
|
-
target: "inputting",
|
|
271
|
-
actions: "advanceScreen"
|
|
272
|
-
}]
|
|
273
|
-
} },
|
|
274
|
-
success: { after: { 3e3: {
|
|
275
|
-
target: "finished",
|
|
276
|
-
actions: "markCompleted"
|
|
277
|
-
} } },
|
|
278
|
-
finished: { type: "final" },
|
|
279
|
-
misconfigured: { on: { CLOSE: { target: "closed" } } },
|
|
280
|
-
closed: { type: "final" }
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
//#endregion
|
|
285
|
-
//#region src/modules/dynamic-forms/dynamicFormsActor.ts
|
|
286
|
-
function createDynamicFormsActor(options) {
|
|
287
|
-
return createActor(dynamicFormsMachine, { input: { config: options.config } }).start();
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
//#endregion
|
|
291
|
-
//#region src/modules/dynamic-forms/dynamicFormsManager.ts
|
|
292
|
-
/**
|
|
293
|
-
* @module @incodetech/core/dynamic-forms
|
|
294
|
-
*
|
|
295
|
-
* Dynamic Forms module for the Incode Web SDK.
|
|
296
|
-
* Drives multi-screen forms defined by backend configuration.
|
|
297
|
-
*
|
|
298
|
-
* @example Headless usage
|
|
299
|
-
* ```typescript
|
|
300
|
-
* import { createDynamicFormsManager } from '@incodetech/core/dynamic-forms';
|
|
301
|
-
* import { setup } from '@incodetech/core';
|
|
302
|
-
*
|
|
303
|
-
* setup({ apiURL: 'https://api.example.com', token: 'your-token' });
|
|
304
|
-
*
|
|
305
|
-
* const manager = createDynamicFormsManager({
|
|
306
|
-
* config: { flowId: 'flow-123' },
|
|
307
|
-
* });
|
|
308
|
-
*
|
|
309
|
-
* manager.subscribe((state) => {
|
|
310
|
-
* if (state.status === 'inputting') {
|
|
311
|
-
* console.log('Screen:', state.currentScreen.title);
|
|
312
|
-
* }
|
|
313
|
-
* if (state.status === 'finished') {
|
|
314
|
-
* console.log('Result:', state.result); // 'completed' | 'skipped'
|
|
315
|
-
* }
|
|
316
|
-
* });
|
|
317
|
-
*
|
|
318
|
-
* manager.load();
|
|
319
|
-
* manager.stop();
|
|
320
|
-
* ```
|
|
321
|
-
*/
|
|
322
|
-
function hasNoErrors(errors) {
|
|
323
|
-
return Object.keys(errors ?? {}).length === 0;
|
|
324
|
-
}
|
|
325
|
-
function mapState(snapshot) {
|
|
326
|
-
const typedSnapshot = snapshot;
|
|
327
|
-
const { context } = typedSnapshot;
|
|
328
|
-
if (typedSnapshot.matches("idle")) return { status: "idle" };
|
|
329
|
-
if (typedSnapshot.matches("loadingScreens")) return { status: "loadingScreens" };
|
|
330
|
-
if (typedSnapshot.matches("inputting")) return {
|
|
331
|
-
status: "inputting",
|
|
332
|
-
currentScreen: context.screens[context.currentScreenIndex],
|
|
333
|
-
screenIndex: context.currentScreenIndex,
|
|
334
|
-
totalScreens: context.screens.length,
|
|
335
|
-
answers: context.answers,
|
|
336
|
-
answerValidity: context.answerValidity,
|
|
337
|
-
validationErrors: context.validationErrors,
|
|
338
|
-
canSubmit: hasNoErrors(context.validationErrors)
|
|
339
|
-
};
|
|
340
|
-
if (typedSnapshot.matches("submitting")) {
|
|
341
|
-
const currentScreen = context.screens[context.currentScreenIndex];
|
|
342
|
-
return {
|
|
343
|
-
status: "submitting",
|
|
344
|
-
screenIndex: context.currentScreenIndex,
|
|
345
|
-
totalScreens: context.screens.length,
|
|
346
|
-
currentScreen,
|
|
347
|
-
answers: context.answers,
|
|
348
|
-
answerValidity: context.answerValidity,
|
|
349
|
-
validationErrors: context.validationErrors
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
if (typedSnapshot.matches("success")) return { status: "success" };
|
|
353
|
-
if (typedSnapshot.matches("finished")) return {
|
|
354
|
-
status: "finished",
|
|
355
|
-
result: context.result
|
|
356
|
-
};
|
|
357
|
-
if (typedSnapshot.matches("misconfigured")) return { status: "misconfigured" };
|
|
358
|
-
if (typedSnapshot.matches("closed")) return { status: "closed" };
|
|
359
|
-
return { status: "idle" };
|
|
360
|
-
}
|
|
361
|
-
function createApi({ actor }) {
|
|
362
|
-
return {
|
|
363
|
-
load() {
|
|
364
|
-
actor.send({ type: "LOAD" });
|
|
365
|
-
},
|
|
366
|
-
setAnswer(questionId, value) {
|
|
367
|
-
actor.send({
|
|
368
|
-
type: "ANSWER_CHANGED",
|
|
369
|
-
questionId,
|
|
370
|
-
value
|
|
371
|
-
});
|
|
372
|
-
},
|
|
373
|
-
setAnswerValidity(questionId, isValid) {
|
|
374
|
-
actor.send({
|
|
375
|
-
type: "ANSWER_VALIDITY_CHANGED",
|
|
376
|
-
questionId,
|
|
377
|
-
isValid
|
|
378
|
-
});
|
|
379
|
-
},
|
|
380
|
-
validateField(questionId) {
|
|
381
|
-
actor.send({
|
|
382
|
-
type: "VALIDATE_FIELD",
|
|
383
|
-
questionId
|
|
384
|
-
});
|
|
385
|
-
},
|
|
386
|
-
submit() {
|
|
387
|
-
actor.send({ type: "SUBMIT" });
|
|
388
|
-
},
|
|
389
|
-
close() {
|
|
390
|
-
actor.send({ type: "CLOSE" });
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Creates a dynamic forms manager for headless or UI-driven usage.
|
|
396
|
-
*
|
|
397
|
-
* @param options - Configuration options
|
|
398
|
-
* @param options.config - Dynamic forms configuration (flowId or pre-loaded screens)
|
|
399
|
-
*
|
|
400
|
-
* @returns Dynamic forms manager with state, API methods, and subscription
|
|
401
|
-
*/
|
|
402
|
-
function createDynamicFormsManager(options) {
|
|
403
|
-
return createManager({
|
|
404
|
-
actor: createDynamicFormsActor(options),
|
|
405
|
-
mapState,
|
|
406
|
-
createApi,
|
|
407
|
-
instrumentation: createManagerInstrumentation(eventModuleNames.forms)
|
|
408
|
-
});
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
//#endregion
|
|
412
10
|
export { createDynamicFormsManager, dynamicFormsMachine };
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { n as createManagerInstrumentation, t as topLevelStateName } from "./events-CqGY1yMq.esm.js";
|
|
2
|
+
import { n as eventModuleNames } from "./types-ElOJAGaM.esm.js";
|
|
3
|
+
import { l as createManager, s as createActor } from "./xstate.esm-Bomq1a0z.esm.js";
|
|
4
|
+
import { t as dynamicFormsMachine } from "./dynamicFormsStateMachine-BXHcaocI.esm.js";
|
|
5
|
+
|
|
6
|
+
//#region src/modules/dynamic-forms/dynamicFormsActor.ts
|
|
7
|
+
function createDynamicFormsActor(options) {
|
|
8
|
+
return createActor(dynamicFormsMachine, { input: { config: options.config } }).start();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/modules/dynamic-forms/dynamicFormsManager.ts
|
|
13
|
+
/**
|
|
14
|
+
* @module @incodetech/core/dynamic-forms
|
|
15
|
+
*
|
|
16
|
+
* Dynamic Forms module for the Incode Web SDK.
|
|
17
|
+
* Drives multi-screen forms defined by backend configuration.
|
|
18
|
+
*
|
|
19
|
+
* @example Headless usage
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { createDynamicFormsManager } from '@incodetech/core/dynamic-forms';
|
|
22
|
+
* import { setup } from '@incodetech/core';
|
|
23
|
+
*
|
|
24
|
+
* setup({ apiURL: 'https://api.example.com', token: 'your-token' });
|
|
25
|
+
*
|
|
26
|
+
* const manager = createDynamicFormsManager({
|
|
27
|
+
* config: { flowId: 'flow-123' },
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* manager.subscribe((state) => {
|
|
31
|
+
* if (state.status === 'inputting') {
|
|
32
|
+
* console.log('Screen:', state.currentScreen.title);
|
|
33
|
+
* }
|
|
34
|
+
* if (state.status === 'finished') {
|
|
35
|
+
* console.log('Result:', state.result); // 'completed' | 'skipped'
|
|
36
|
+
* }
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* manager.load();
|
|
40
|
+
* manager.stop();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
function hasNoErrors(errors) {
|
|
44
|
+
return Object.keys(errors ?? {}).length === 0;
|
|
45
|
+
}
|
|
46
|
+
function hasAnyAnswer(answers) {
|
|
47
|
+
for (const value of Object.values(answers)) if (typeof value === "string" && value.length > 0) return true;
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Maps a Dynamic Forms state-machine snapshot to the exact Figma
|
|
52
|
+
* "Tracked Events" screen name. Source: Forms and Data entry Figma file
|
|
53
|
+
* (`https://www.figma.com/design/N6otHMuY2Hha5eBqRz0uC3/Forms-and-Data-entry---Latest-Designs?node-id=53-60567`).
|
|
54
|
+
* Family is `forms.*` with a single longform sub-family.
|
|
55
|
+
*
|
|
56
|
+
* `idle`, `loadingScreens`, `submitting`, `misconfigured`, and `closed` are
|
|
57
|
+
* intentionally unmapped — the Figma canvas does not define discrete
|
|
58
|
+
* tracked-event surfaces for them. They fall back to the generic
|
|
59
|
+
* `<module>.<state>` default.
|
|
60
|
+
*/
|
|
61
|
+
function getDynamicFormsScreenName(snapshot) {
|
|
62
|
+
const stateName = topLevelStateName(snapshot.value);
|
|
63
|
+
if (stateName === void 0) return void 0;
|
|
64
|
+
switch (stateName) {
|
|
65
|
+
case "inputting": return hasAnyAnswer(snapshot.context.answers) ? "forms.longform.filled" : "forms.longform.default";
|
|
66
|
+
case "success":
|
|
67
|
+
case "finished": return "forms.success";
|
|
68
|
+
default: return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function mapState(snapshot) {
|
|
72
|
+
const typedSnapshot = snapshot;
|
|
73
|
+
const { context } = typedSnapshot;
|
|
74
|
+
if (typedSnapshot.matches("idle")) return { status: "idle" };
|
|
75
|
+
if (typedSnapshot.matches("loadingScreens")) return { status: "loadingScreens" };
|
|
76
|
+
if (typedSnapshot.matches("inputting")) return {
|
|
77
|
+
status: "inputting",
|
|
78
|
+
currentScreen: context.screens[context.currentScreenIndex],
|
|
79
|
+
screenIndex: context.currentScreenIndex,
|
|
80
|
+
totalScreens: context.screens.length,
|
|
81
|
+
answers: context.answers,
|
|
82
|
+
answerValidity: context.answerValidity,
|
|
83
|
+
validationErrors: context.validationErrors,
|
|
84
|
+
canSubmit: hasNoErrors(context.validationErrors)
|
|
85
|
+
};
|
|
86
|
+
if (typedSnapshot.matches("submitting")) {
|
|
87
|
+
const currentScreen = context.screens[context.currentScreenIndex];
|
|
88
|
+
return {
|
|
89
|
+
status: "submitting",
|
|
90
|
+
screenIndex: context.currentScreenIndex,
|
|
91
|
+
totalScreens: context.screens.length,
|
|
92
|
+
currentScreen,
|
|
93
|
+
answers: context.answers,
|
|
94
|
+
answerValidity: context.answerValidity,
|
|
95
|
+
validationErrors: context.validationErrors
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (typedSnapshot.matches("success")) return { status: "success" };
|
|
99
|
+
if (typedSnapshot.matches("finished")) return {
|
|
100
|
+
status: "finished",
|
|
101
|
+
result: context.result
|
|
102
|
+
};
|
|
103
|
+
if (typedSnapshot.matches("misconfigured")) return { status: "misconfigured" };
|
|
104
|
+
if (typedSnapshot.matches("closed")) return { status: "closed" };
|
|
105
|
+
return { status: "idle" };
|
|
106
|
+
}
|
|
107
|
+
function createApi({ actor, trackElementClicked }) {
|
|
108
|
+
return {
|
|
109
|
+
load() {
|
|
110
|
+
actor.send({ type: "LOAD" });
|
|
111
|
+
},
|
|
112
|
+
setAnswer(questionId, value) {
|
|
113
|
+
actor.send({
|
|
114
|
+
type: "ANSWER_CHANGED",
|
|
115
|
+
questionId,
|
|
116
|
+
value
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
setAnswerValidity(questionId, isValid) {
|
|
120
|
+
actor.send({
|
|
121
|
+
type: "ANSWER_VALIDITY_CHANGED",
|
|
122
|
+
questionId,
|
|
123
|
+
isValid
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
validateField(questionId) {
|
|
127
|
+
actor.send({
|
|
128
|
+
type: "VALIDATE_FIELD",
|
|
129
|
+
questionId
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
submit() {
|
|
133
|
+
trackElementClicked?.("submit");
|
|
134
|
+
actor.send({ type: "SUBMIT" });
|
|
135
|
+
},
|
|
136
|
+
close() {
|
|
137
|
+
trackElementClicked?.("close");
|
|
138
|
+
actor.send({ type: "CLOSE" });
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Creates a dynamic forms manager for headless or UI-driven usage.
|
|
144
|
+
*
|
|
145
|
+
* @param options - Configuration options
|
|
146
|
+
* @param options.config - Dynamic forms configuration (flowId or pre-loaded screens)
|
|
147
|
+
*
|
|
148
|
+
* @returns Dynamic forms manager with state, API methods, and subscription
|
|
149
|
+
*/
|
|
150
|
+
function createDynamicFormsManager(options) {
|
|
151
|
+
return createManager({
|
|
152
|
+
actor: createDynamicFormsActor(options),
|
|
153
|
+
mapState,
|
|
154
|
+
createApi,
|
|
155
|
+
instrumentation: createManagerInstrumentation(eventModuleNames.forms, { getEventScreenName: getDynamicFormsScreenName })
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function createDynamicFormsManagerFromActor(actor) {
|
|
159
|
+
return createManager({
|
|
160
|
+
actor,
|
|
161
|
+
mapState,
|
|
162
|
+
createApi,
|
|
163
|
+
instrumentation: createManagerInstrumentation(eventModuleNames.forms, { getEventScreenName: getDynamicFormsScreenName })
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
//#endregion
|
|
168
|
+
export { createDynamicFormsManagerFromActor as n, createDynamicFormsManager as t };
|