@incodetech/web 0.0.0-dev-20260625-a43ee3be → 0.0.0-dev-20260626-da30041d

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 (41) hide show
  1. package/dist/ae-signature/ae-signature.es.js +1 -1
  2. package/dist/ae-signature/styles.css +57 -45
  3. package/dist/base.css +33 -21
  4. package/dist/certificate-issuance/certificate-issuance.es.js +1 -1
  5. package/dist/document-capture/document-capture.es.js +1 -1
  6. package/dist/documentCapture-CIo4u9dy.js +2 -0
  7. package/dist/{documentCapture-DuTiCr2O.js → documentCapture-CYclogp7.js} +2 -2
  8. package/dist/{dynamicForms-Dg03VDc-.js → dynamicForms-BQv-wsBl.js} +1 -1
  9. package/dist/ekyb/ekyb.es.js +1 -1
  10. package/dist/{ekybModule-odKnH4xP.js → ekybModule-CEb7KvEp.js} +1 -1
  11. package/dist/ekybModule-UEW1CfUF.js +2 -0
  12. package/dist/electronic-signature/electronic-signature.es.js +1 -1
  13. package/dist/{electronic-signature-h1sAGg7l.js → electronic-signature-BZ5w_RAk.js} +24 -16
  14. package/dist/email/email.es.js +1 -1
  15. package/dist/{emailInput-jW_fAjDF.js → emailInput-DAuSH3Cg.js} +1 -1
  16. package/dist/{expiredId-D17oN5K2.js → expiredId-0GUaIbV1.js} +2 -2
  17. package/dist/{extensibility-oDoAc5X4.js → extensibility-BAAGWrEk.js} +7 -3
  18. package/dist/extensibility.es.js +1 -1
  19. package/dist/field-comparison/field-comparison.es.js +1 -1
  20. package/dist/{fieldComparison-BSXcMoVf.js → fieldComparison-CS_pL3oH.js} +1 -1
  21. package/dist/fieldComparison-DwbYI5GV.js +2 -0
  22. package/dist/fiscal-qr/fiscal-qr.es.js +1 -1
  23. package/dist/flow/flow.es.js +1 -1
  24. package/dist/flow/styles.css +57 -45
  25. package/dist/governmentValidation/governmentValidation.es.js +1 -1
  26. package/dist/id/id.es.js +4 -3
  27. package/dist/id-verification/id-verification.es.js +1 -1
  28. package/dist/{idOcr-CwDFZQb7.js → idOcr-XA2Xs3h-.js} +1 -1
  29. package/dist/{pdfViewer-BewML6eg.js → pdfViewer-bx59Lwwt.js} +55 -18
  30. package/dist/qe-signature/qe-signature.es.js +1 -1
  31. package/dist/redirect-to-mobile/redirect-to-mobile.es.js +1 -1
  32. package/dist/signature/signature.es.js +1 -1
  33. package/dist/themes/dark.css +16 -0
  34. package/dist/themes/light.css +16 -0
  35. package/dist/types/extensibility.d.ts +4 -0
  36. package/dist/{useModuleLoader-BjEwQ4zY.js → useModuleLoader-D2dAsd4A.js} +6 -6
  37. package/dist/workflow/workflow.es.js +1 -1
  38. package/package.json +2 -2
  39. package/dist/documentCapture-WX3SLX90.js +0 -2
  40. package/dist/ekybModule-B8aNb_qO.js +0 -2
  41. package/dist/fieldComparison-Cd6XNMdV.js +0 -2
@@ -7859,6 +7859,18 @@
7859
7859
  margin-top: auto;
7860
7860
  }
7861
7861
 
7862
+ .IncodeElectronicSignature .IncodeSrOnly {
7863
+ clip-path: inset(50%);
7864
+ white-space: nowrap;
7865
+ border-width: 0;
7866
+ width: 1px;
7867
+ height: 1px;
7868
+ margin: -1px;
7869
+ padding: 0;
7870
+ position: absolute;
7871
+ overflow: hidden;
7872
+ }
7873
+
7862
7874
  .IncodeElectronicSignature .IncodePageContent {
7863
7875
  min-height: var(--spacing-0, var(--spacing-none, 0px));
7864
7876
  padding-top: var(--spacing-32, var(--spacing-32, 32px));
@@ -7870,14 +7882,14 @@
7870
7882
  }
7871
7883
 
7872
7884
  .IncodeElectronicSignature .IncodePageTitleContainer {
7873
- max-width: 600px;
7885
+ max-width: var(--electronic-signature-title-max-w);
7874
7886
  }
7875
7887
 
7876
7888
  .IncodeElectronicSignature .IncodePageFooter {
7877
7889
  padding-top: var(--spacing-16, var(--spacing-16, 16px));
7878
7890
  }
7879
7891
 
7880
- .IncodeElectronicSignatureUploadBody {
7892
+ .IncodeElectronicSignature .IncodeElectronicSignatureUploadBody {
7881
7893
  min-height: var(--spacing-0, var(--spacing-none, 0px));
7882
7894
  flex-direction: column;
7883
7895
  flex: 1;
@@ -7887,25 +7899,25 @@
7887
7899
  container-type: size;
7888
7900
  }
7889
7901
 
7890
- .IncodeElectronicSignatureIllustration {
7902
+ .IncodeElectronicSignature .IncodeElectronicSignatureIllustration {
7891
7903
  aspect-ratio: 1;
7904
+ width: var(--electronic-signature-illustration-max-w);
7892
7905
  border-radius: var(--radius-full, var(--border-radius-full));
7893
7906
  background-color: var(--color-surface-brand-50, var(--surface-brand-50));
7894
7907
  justify-content: center;
7895
7908
  align-items: center;
7896
- width: min(100cqw, 100cqh - 32px, 297px);
7897
7909
  display: flex;
7898
7910
  overflow: visible;
7899
7911
  }
7900
7912
 
7901
- .IncodeElectronicSignatureIllustration svg {
7902
- --tw-translate-y: calc(3% * -1);
7903
- width: 80%;
7913
+ .IncodeElectronicSignature .IncodeElectronicSignatureIllustration svg {
7904
7914
  height: auto;
7915
+ width: var(--electronic-signature-illustration-svg-w);
7916
+ --tw-translate-y: calc(var(--electronic-signature-illustration-svg-shift) * -1);
7905
7917
  translate: var(--tw-translate-x) var(--tw-translate-y);
7906
7918
  }
7907
7919
 
7908
- .IncodeElectronicSignatureFileInput {
7920
+ .IncodeElectronicSignature .IncodeElectronicSignatureFileInput {
7909
7921
  opacity: 0;
7910
7922
  width: 1px;
7911
7923
  height: 1px;
@@ -7913,13 +7925,13 @@
7913
7925
  overflow: hidden;
7914
7926
  }
7915
7927
 
7916
- .IncodeElectronicSignatureReviewBody {
7928
+ .IncodeElectronicSignature .IncodeElectronicSignatureReviewBody {
7917
7929
  min-height: var(--spacing-0, var(--spacing-none, 0px));
7930
+ width: 100%;
7931
+ max-width: var(--incode-form-max-w);
7918
7932
  justify-content: center;
7919
7933
  align-items: center;
7920
7934
  gap: var(--spacing-16, var(--spacing-16, 16px));
7921
- width: 100%;
7922
- max-width: 420px;
7923
7935
  padding-inline: var(--spacing-48, var(--spacing-48, 48px));
7924
7936
  flex-direction: column;
7925
7937
  flex: 1;
@@ -7927,7 +7939,7 @@
7927
7939
  display: flex;
7928
7940
  }
7929
7941
 
7930
- .IncodeElectronicSignatureReviewCard {
7942
+ .IncodeElectronicSignature .IncodeElectronicSignatureReviewCard {
7931
7943
  min-height: var(--spacing-0, var(--spacing-none, 0px));
7932
7944
  align-items: center;
7933
7945
  gap: var(--spacing-24, var(--spacing-24, 24px));
@@ -7943,28 +7955,28 @@
7943
7955
  display: flex;
7944
7956
  }
7945
7957
 
7946
- .IncodeElectronicSignatureDocPreview {
7958
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocPreview {
7947
7959
  pointer-events: none;
7948
7960
  aspect-ratio: 113 / 150;
7949
- max-height: 150px;
7961
+ max-height: var(--electronic-signature-doc-preview-max-h);
7950
7962
  min-height: var(--spacing-0, var(--spacing-none, 0px));
7963
+ border-radius: var(--electronic-signature-doc-preview-radius);
7951
7964
  border-style: var(--tw-border-style);
7952
7965
  border-width: 1px;
7953
7966
  border-color: var(--color-border-neutral-100, var(--border-neutral-100));
7954
7967
  background-color: var(--color-surface-neutral-0, var(--surface-neutral-0));
7955
- border-radius: 6px;
7956
7968
  flex: 1;
7957
7969
  position: relative;
7958
7970
  overflow: hidden;
7959
7971
  }
7960
7972
 
7961
- .IncodeElectronicSignatureDocPreviewObject {
7973
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocPreviewObject {
7962
7974
  width: 100%;
7963
7975
  height: 100%;
7964
7976
  display: block;
7965
7977
  }
7966
7978
 
7967
- .IncodeElectronicSignatureDocName {
7979
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocName {
7968
7980
  text-align: center;
7969
7981
  font-family: var(--typography-headline-family);
7970
7982
  font-size: var(--typography-headline-h5-size);
@@ -7975,7 +7987,7 @@
7975
7987
  flex-shrink: 0;
7976
7988
  }
7977
7989
 
7978
- .IncodeElectronicSignatureEncrypted {
7990
+ .IncodeElectronicSignature .IncodeElectronicSignatureEncrypted {
7979
7991
  justify-content: center;
7980
7992
  align-items: center;
7981
7993
  gap: var(--spacing-4, var(--spacing-4, 4px));
@@ -7989,20 +8001,20 @@
7989
8001
  display: flex;
7990
8002
  }
7991
8003
 
7992
- .IncodeElectronicSignatureEncryptedIcon {
8004
+ .IncodeElectronicSignature .IncodeElectronicSignatureEncryptedIcon {
7993
8005
  width: var(--spacing-16, var(--spacing-16, 16px));
7994
8006
  height: var(--spacing-16, var(--spacing-16, 16px));
7995
8007
  color: var(--color-icon-neutral-500, var(--icon-neutral-500));
7996
8008
  }
7997
8009
 
7998
- .IncodeElectronicSignatureSigningTop {
8010
+ .IncodeElectronicSignature .IncodeElectronicSignatureSigningTop {
7999
8011
  flex-direction: column;
8000
8012
  flex-shrink: 0;
8001
8013
  align-items: center;
8002
8014
  display: flex;
8003
8015
  }
8004
8016
 
8005
- .IncodeElectronicSignatureSigningBottom {
8017
+ .IncodeElectronicSignature .IncodeElectronicSignatureSigningBottom {
8006
8018
  min-height: var(--spacing-0, var(--spacing-none, 0px));
8007
8019
  justify-content: flex-end;
8008
8020
  align-items: center;
@@ -8013,14 +8025,14 @@
8013
8025
  display: flex;
8014
8026
  }
8015
8027
 
8016
- .IncodeElectronicSignatureDocContainer {
8028
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocContainer {
8029
+ width: 100%;
8030
+ max-width: var(--incode-form-max-w);
8017
8031
  border-radius: var(--radius-medium, var(--border-radius-medium));
8018
8032
  border-style: var(--tw-border-style);
8019
8033
  border-width: 1px;
8020
8034
  border-color: var(--color-border-neutral-100, var(--border-neutral-100));
8021
8035
  background-color: var(--color-surface-neutral-50, var(--surface-neutral-50));
8022
- width: 100%;
8023
- max-width: 420px;
8024
8036
  padding-inline: var(--spacing-24, var(--spacing-24, 24px));
8025
8037
  padding-block: var(--spacing-8, var(--spacing-8, 8px));
8026
8038
  flex-direction: column;
@@ -8031,16 +8043,16 @@
8031
8043
  overflow: clip;
8032
8044
  }
8033
8045
 
8034
- .IncodeElectronicSignatureDocRow {
8046
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocRow {
8047
+ height: var(--electronic-signature-doc-row-h);
8035
8048
  flex-shrink: 0;
8036
8049
  justify-content: space-between;
8037
8050
  align-items: center;
8038
8051
  width: 100%;
8039
- height: 56px;
8040
8052
  display: flex;
8041
8053
  }
8042
8054
 
8043
- .IncodeElectronicSignatureDocRowName {
8055
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocRowName {
8044
8056
  font-family: var(--typography-button-family);
8045
8057
  font-size: var(--typography-button-m-size);
8046
8058
  font-weight: var(--typography-button-m-weight);
@@ -8049,24 +8061,24 @@
8049
8061
  color: var(--color-text-body-primary, var(--text-body-800-primary));
8050
8062
  }
8051
8063
 
8052
- .IncodeElectronicSignatureDocRowAction {
8064
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocRowAction {
8053
8065
  width: auto;
8054
8066
  max-width: none;
8055
8067
  height: auto;
8056
8068
  padding: var(--spacing-0, var(--spacing-none, 0px));
8057
8069
  }
8058
8070
 
8059
- .IncodeElectronicSignatureConsents {
8071
+ .IncodeElectronicSignature .IncodeElectronicSignatureConsents {
8060
8072
  min-height: var(--spacing-0, var(--spacing-none, 0px));
8073
+ width: 100%;
8074
+ max-width: var(--incode-form-max-w);
8061
8075
  gap: var(--spacing-4, var(--spacing-4, 4px));
8062
8076
  flex-direction: column;
8063
- width: 100%;
8064
- max-width: 420px;
8065
8077
  display: flex;
8066
8078
  overflow: auto;
8067
8079
  }
8068
8080
 
8069
- .IncodeElectronicSignatureConsents .IncodeCheckbox {
8081
+ .IncodeElectronicSignature .IncodeElectronicSignatureConsents .IncodeCheckbox {
8070
8082
  border-radius: var(--radius-medium, var(--border-radius-medium));
8071
8083
  background-color: var(--color-surface-brand-50, var(--surface-brand-50));
8072
8084
  width: 100%;
@@ -8074,7 +8086,7 @@
8074
8086
  padding-block: var(--spacing-20, var(--spacing-20, 20px));
8075
8087
  }
8076
8088
 
8077
- .IncodeElectronicSignatureConsents .IncodeCheckboxText {
8089
+ .IncodeElectronicSignature .IncodeElectronicSignatureConsents .IncodeCheckboxText {
8078
8090
  font-family: var(--typography-checkbox-radio-family);
8079
8091
  font-size: var(--typography-checkbox-radio-s-size);
8080
8092
  font-weight: var(--typography-checkbox-radio-s-weight);
@@ -8082,17 +8094,17 @@
8082
8094
  letter-spacing: var(--typography-checkbox-radio-s-letter-spacing);
8083
8095
  }
8084
8096
 
8085
- .IncodeElectronicSignatureConsents a {
8097
+ .IncodeElectronicSignature .IncodeElectronicSignatureConsents a {
8086
8098
  color: var(--color-text-link-default, var(--text-link-default));
8087
8099
  text-decoration-line: underline;
8088
8100
  }
8089
8101
 
8090
- .IncodeElectronicSignatureSuccess .IncodePageContent {
8102
+ .IncodeElectronicSignature.IncodeElectronicSignatureSuccess .IncodePageContent {
8091
8103
  padding-top: var(--spacing-0, var(--spacing-none, 0px));
8092
8104
  justify-content: center;
8093
8105
  }
8094
8106
 
8095
- .IncodeElectronicSignatureSuccessCenter {
8107
+ .IncodeElectronicSignature .IncodeElectronicSignatureSuccessCenter {
8096
8108
  justify-content: center;
8097
8109
  align-items: center;
8098
8110
  gap: var(--spacing-16, var(--spacing-16, 16px));
@@ -8101,7 +8113,7 @@
8101
8113
  display: flex;
8102
8114
  }
8103
8115
 
8104
- .IncodeElectronicSignatureSuccessTitle {
8116
+ .IncodeElectronicSignature .IncodeElectronicSignatureSuccessTitle {
8105
8117
  text-align: center;
8106
8118
  font-family: var(--typography-headline-family);
8107
8119
  font-size: var(--typography-headline-h3-size);
@@ -8111,7 +8123,7 @@
8111
8123
  color: var(--color-text-body-primary, var(--text-body-800-primary));
8112
8124
  }
8113
8125
 
8114
- .IncodeElectronicSignatureDownloadLink {
8126
+ .IncodeElectronicSignature .IncodeElectronicSignatureDownloadLink {
8115
8127
  text-align: center;
8116
8128
  font-family: var(--typography-button-family);
8117
8129
  font-size: var(--typography-button-m-size);
@@ -8122,33 +8134,33 @@
8122
8134
  text-decoration-line: underline;
8123
8135
  }
8124
8136
 
8125
- .IncodeElectronicSignatureFooter {
8137
+ .IncodeElectronicSignature .IncodeElectronicSignatureFooter {
8138
+ width: 100%;
8139
+ max-width: var(--incode-form-max-w);
8126
8140
  justify-content: center;
8127
8141
  align-items: center;
8128
8142
  gap: var(--spacing-16, var(--spacing-16, 16px));
8129
8143
  flex-direction: column;
8130
8144
  flex-shrink: 0;
8131
8145
  align-self: center;
8132
- width: 100%;
8133
- max-width: 420px;
8134
8146
  display: flex;
8135
8147
  }
8136
8148
 
8137
- .IncodeElectronicSignatureDocViewHeader {
8149
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocViewHeader {
8138
8150
  z-index: 10;
8139
8151
  height: var(--page-header-height);
8140
- margin-top: calc(-1 * var(--page-header-height));
8152
+ margin-top: var(--electronic-signature-doc-view-header-offset);
8141
8153
  align-self: flex-start;
8142
8154
  align-items: center;
8143
8155
  display: flex;
8144
8156
  position: relative;
8145
8157
  }
8146
8158
 
8147
- .IncodeElectronicSignatureBackButton {
8159
+ .IncodeElectronicSignature .IncodeElectronicSignatureBackButton {
8148
8160
  color: var(--color-text-body-primary, var(--text-body-800-primary));
8149
8161
  }
8150
8162
 
8151
- .IncodeElectronicSignatureDocViewer {
8163
+ .IncodeElectronicSignature .IncodeElectronicSignatureDocViewer {
8152
8164
  min-height: var(--spacing-0, var(--spacing-none, 0px));
8153
8165
  border-style: var(--tw-border-style);
8154
8166
  border-width: var(--border-width-none, var(--primitive-border-width-0));
@@ -4,7 +4,7 @@ import { c as useManager, o as useModuleTerminalCallbacks } from "../hooks-Da_yP
4
4
  import { t as IncodeComponent } from "../incodeComponent-Cmi1rlWs.js";
5
5
  import { r as Spacer } from "../loadingIcon-B0ysgiNq.js";
6
6
  import { t as Page } from "../page-DidH_RkX.js";
7
- import "../extensibility-oDoAc5X4.js";
7
+ import "../extensibility-BAAGWrEk.js";
8
8
  import { t as AutoFocusTitle } from "../autoFocusTitle-CuRu2lPg.js";
9
9
  import { t as VerificationResult } from "../verificationResult-B6PBXbp9.js";
10
10
  import { t as OtpInput } from "../otpInput-Q_kzSZeD.js";
package/dist/id/id.es.js CHANGED
@@ -4,7 +4,7 @@ import { c as useManager, o as useModuleTerminalCallbacks } from "../hooks-Da_yP
4
4
  import { t as IncodeComponent } from "../incodeComponent-Cmi1rlWs.js";
5
5
  import { n as cn } from "../loadingIcon-B0ysgiNq.js";
6
6
  import { t as Page } from "../page-DidH_RkX.js";
7
- import { a as IdNoAttempts, i as Capture, n as Chooser, o as IdExpired, r as Tutorial, s as IdError, t as FlipAnimation, y as ProgressBar } from "../extensibility-oDoAc5X4.js";
7
+ import { a as IdNoAttempts, i as Capture, n as Chooser, o as IdExpired, r as Tutorial, s as IdError, t as FlipAnimation, y as ProgressBar } from "../extensibility-BAAGWrEk.js";
8
8
  import { t as Spinner } from "../spinner-BRNNKqPN.js";
9
9
  import "../spinner-zRaUjXtH.js";
10
10
  import { t as TransitionSpinner } from "../transitionSpinner-4rPkt-KM.js";
@@ -14,7 +14,7 @@ import { t as ErrorIcon } from "../errorIcon-BA4T6iy-.js";
14
14
  import { s as ChevronRightIcon } from "../icons-CJJbIpBq.js";
15
15
  import { t as SuccessIcon } from "../successIcon-B5mGvdx1.js";
16
16
  import { a as Lottie, o as ErrorContent, r as Permissions } from "../tutorial-lK0cKQhw.js";
17
- import { t as PdfViewer } from "../pdfViewer-BewML6eg.js";
17
+ import { t as PdfViewer } from "../pdfViewer-bx59Lwwt.js";
18
18
  import { t as registerIncodeModuleElement } from "../incodeModule-M8DszCee.js";
19
19
  import { t as id_laser_v_default } from "../id-laser-v-Dj_RN_s9.js";
20
20
  import { t as Tabs } from "../tabs-DUkWjBGk.js";
@@ -969,7 +969,8 @@ var IdContent = ({ config, manager: externalManager, onFinish, onError }) => {
969
969
  if (state.status === "processing") return /* @__PURE__ */ u(Processing, {});
970
970
  if (state.status === "expired") return /* @__PURE__ */ u(IdExpired, {
971
971
  manager,
972
- attemptsRemaining: state.attemptsRemaining
972
+ attemptsRemaining: state.attemptsRemaining,
973
+ isBackSide: state.currentMode === "back"
973
974
  });
974
975
  if (state.status === "expiredExhausted") return /* @__PURE__ */ u(IdNoAttempts, { manager });
975
976
  if (state.status === "finished" || state.status === "closed") return null;
@@ -2,7 +2,7 @@ import { v as u } from "../vendor-preact-DThS2ZQ_.js";
2
2
  import { c as useManager, o as useModuleTerminalCallbacks } from "../hooks-Da_yP_Dr.js";
3
3
  import { t as IncodeComponent } from "../incodeComponent-Cmi1rlWs.js";
4
4
  import { t as Spinner } from "../spinner-BRNNKqPN.js";
5
- import { t as ExpiredId } from "../expiredId-D17oN5K2.js";
5
+ import { t as ExpiredId } from "../expiredId-0GUaIbV1.js";
6
6
  import { t as registerIncodeModuleElement } from "../incodeModule-M8DszCee.js";
7
7
  import { createIdVerificationManager } from "@incodetech/core/id-verification";
8
8
  //#region src/modules/id-verification/id-verification.tsx
@@ -3,7 +3,7 @@ import { d as T, v as u } from "./vendor-preact-DThS2ZQ_.js";
3
3
  import { c as useManager, o as useModuleTerminalCallbacks } from "./hooks-Da_yP_Dr.js";
4
4
  import { t as IncodeComponent } from "./incodeComponent-Cmi1rlWs.js";
5
5
  import { t as Page } from "./page-DidH_RkX.js";
6
- import "./extensibility-oDoAc5X4.js";
6
+ import "./extensibility-BAAGWrEk.js";
7
7
  import { t as Button } from "./button-Ch5-QgHB.js";
8
8
  import { t as VerificationResult } from "./verificationResult-B6PBXbp9.js";
9
9
  import { t as InputComposed } from "./inputComposed-C1R2LAa3.js";
@@ -24,6 +24,15 @@ async function renderPage(page, canvas, targetWidth) {
24
24
  }).promise;
25
25
  }
26
26
  /**
27
+ * Extracts the page's text as a single readable string. `getTextContent`
28
+ * returns positioned glyph runs (`TextItem`) interleaved with structural
29
+ * markers (`TextMarkedContent`, which carry no `str`); we keep only the former
30
+ * and honour `hasEOL` so logical line breaks survive into the reading order.
31
+ */
32
+ async function extractPageText(page) {
33
+ return (await page.getTextContent()).items.map((item) => "str" in item ? item.str + (item.hasEOL ? "\n" : "") : "").join("").trim();
34
+ }
35
+ /**
27
36
  * PDF viewer that renders directly onto `<canvas>` via `pdfjs-dist`.
28
37
  *
29
38
  * We deliberately avoid the browser's native PDF viewer for both modes:
@@ -41,11 +50,23 @@ async function renderPage(page, canvas, targetWidth) {
41
50
  * `pdfjs-dist` itself is dynamically `import()`-ed so it doesn't land in the
42
51
  * main bundle; consumers that never render a PDF pay zero download cost.
43
52
  * Thumbnail and full-view callers share the same async chunk.
53
+ *
54
+ * Accessibility: a `<canvas>` is opaque to assistive technology, so the
55
+ * rendered pages are grouped under a single `role="img"` + `aria-label`
56
+ * (a short summary). On its own that fails WCAG 1.1.1 / 1.4.5 for a document
57
+ * the user must actually read — pixels are an image of text with no reading
58
+ * path. In `full` mode we therefore also extract each page's real text via
59
+ * `getTextContent()` into a visually-hidden, AT-readable layer alongside the
60
+ * canvases. `thumbnail` mode stays a labelled preview (no text layer): it is a
61
+ * decorative first-page glance whose `aria-label` is the file name.
44
62
  */
45
63
  var PdfViewer = ({ url, mode = "full", "aria-label": ariaLabel, className, onError }) => {
46
64
  const containerRef = A(null);
47
65
  const pagesRef = A(null);
66
+ const textRef = A(null);
48
67
  const [status, setStatus] = d("loading");
68
+ const onErrorRef = A(onError);
69
+ onErrorRef.current = onError;
49
70
  y(() => {
50
71
  let cancelled = false;
51
72
  let loadingTask = null;
@@ -58,28 +79,41 @@ var PdfViewer = ({ url, mode = "full", "aria-label": ariaLabel, className, onErr
58
79
  if (cancelled) return;
59
80
  const container = containerRef.current;
60
81
  const pagesHost = pagesRef.current;
82
+ const textHost = textRef.current;
61
83
  if (!container || !pagesHost) return;
62
84
  pagesHost.innerHTML = "";
85
+ if (textHost) textHost.innerHTML = "";
63
86
  loadingTask = pdfjs.getDocument({ url });
64
87
  pdfDoc = await loadingTask.promise;
65
88
  if (cancelled) return;
89
+ const includeTextLayer = mode === "full";
66
90
  const pageCount = mode === "thumbnail" ? 1 : pdfDoc.numPages;
67
91
  const fallbackWidth = mode === "thumbnail" ? 113 : 320;
68
92
  const targetWidth = container.clientWidth || fallbackWidth;
69
93
  for (let pageNumber = 1; pageNumber <= pageCount; pageNumber++) {
70
94
  if (cancelled) return;
71
95
  const page = await pdfDoc.getPage(pageNumber);
72
- const canvas = window.document.createElement("canvas");
96
+ const canvas = document.createElement("canvas");
73
97
  canvas.className = "IncodePdfViewerCanvas";
74
98
  pagesHost.appendChild(canvas);
75
99
  await renderPage(page, canvas, targetWidth);
100
+ if (includeTextLayer && textHost) {
101
+ const pageText = await extractPageText(page);
102
+ if (cancelled) return;
103
+ if (pageText) {
104
+ const pageTextEl = document.createElement("div");
105
+ pageTextEl.className = "IncodePdfViewerTextPage";
106
+ pageTextEl.textContent = pageText;
107
+ textHost.appendChild(pageTextEl);
108
+ }
109
+ }
76
110
  page.cleanup();
77
111
  }
78
112
  if (!cancelled) setStatus("ready");
79
113
  } catch (error) {
80
114
  if (cancelled) return;
81
115
  setStatus("error");
82
- onError?.(error);
116
+ onErrorRef.current?.(error);
83
117
  }
84
118
  })();
85
119
  return () => {
@@ -87,27 +121,30 @@ var PdfViewer = ({ url, mode = "full", "aria-label": ariaLabel, className, onErr
87
121
  loadingTask?.destroy();
88
122
  pdfDoc?.destroy();
89
123
  };
90
- }, [
91
- url,
92
- mode,
93
- onError
94
- ]);
124
+ }, [url, mode]);
95
125
  return /* @__PURE__ */ u("div", {
96
126
  ref: containerRef,
97
127
  class: cn("IncodePdfViewer", mode === "thumbnail" ? "IncodePdfViewerThumbnail" : "IncodePdfViewerFull", className),
98
- role: "img",
99
- "aria-label": ariaLabel,
100
128
  "aria-busy": status === "loading",
101
- children: [/* @__PURE__ */ u("div", {
102
- ref: pagesRef,
103
- class: "IncodePdfViewerPages"
104
- }), status === "loading" && /* @__PURE__ */ u("div", {
105
- class: "IncodePdfViewerStatus",
106
- children: /* @__PURE__ */ u(Spinner, {
107
- size: "small",
108
- fullScreen: false
129
+ children: [
130
+ /* @__PURE__ */ u("div", {
131
+ ref: pagesRef,
132
+ class: "IncodePdfViewerPages",
133
+ role: "img",
134
+ "aria-label": ariaLabel
135
+ }),
136
+ /* @__PURE__ */ u("div", {
137
+ ref: textRef,
138
+ class: "IncodePdfViewerTextLayer"
139
+ }),
140
+ status === "loading" && /* @__PURE__ */ u("div", {
141
+ class: "IncodePdfViewerStatus",
142
+ children: /* @__PURE__ */ u(Spinner, {
143
+ size: "small",
144
+ fullScreen: false
145
+ })
109
146
  })
110
- })]
147
+ ]
111
148
  });
112
149
  };
113
150
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { v as u } from "../vendor-preact-DThS2ZQ_.js";
2
- import { n as ElectronicSignature } from "../electronic-signature-h1sAGg7l.js";
2
+ import { n as ElectronicSignature } from "../electronic-signature-BZ5w_RAk.js";
3
3
  import { t as registerIncodeModuleElement } from "../incodeModule-M8DszCee.js";
4
4
  //#region src/modules/qe-signature/qe-signature.tsx
5
5
  var QeSignature = ({ config, onFinish, onError }) => {
@@ -6,7 +6,7 @@ import { t as IncodeComponent } from "../incodeComponent-Cmi1rlWs.js";
6
6
  import { r as Spacer } from "../loadingIcon-B0ysgiNq.js";
7
7
  import { t as incode_logo_default } from "../incode-logo-57XFniXU.js";
8
8
  import { n as VerifiedByIncodeLogo, r as usePageUiConfig } from "../page-DidH_RkX.js";
9
- import "../extensibility-oDoAc5X4.js";
9
+ import "../extensibility-BAAGWrEk.js";
10
10
  import { t as TransitionSpinner } from "../transitionSpinner-4rPkt-KM.js";
11
11
  import { t as Button } from "../button-Ch5-QgHB.js";
12
12
  import "../icons-CJJbIpBq.js";
@@ -4,7 +4,7 @@ import { c as useManager, o as useModuleTerminalCallbacks } from "../hooks-Da_yP
4
4
  import { t as IncodeComponent } from "../incodeComponent-Cmi1rlWs.js";
5
5
  import { r as Spacer } from "../loadingIcon-B0ysgiNq.js";
6
6
  import { t as Page } from "../page-DidH_RkX.js";
7
- import "../extensibility-oDoAc5X4.js";
7
+ import "../extensibility-BAAGWrEk.js";
8
8
  import { t as Button } from "../button-Ch5-QgHB.js";
9
9
  import { t as VerificationResult } from "../verificationResult-B6PBXbp9.js";
10
10
  import { t as registerIncodeModuleElement } from "../incodeModule-M8DszCee.js";
@@ -1220,6 +1220,22 @@
1220
1220
  --redirect-phone-input-country-code-width: 130px;
1221
1221
  --redirect-qr-wrapper-border-radius: 21px;
1222
1222
 
1223
+ /* electronic signature */
1224
+ --electronic-signature-title-max-w: 600px;
1225
+ --electronic-signature-illustration-max-w: min(
1226
+ 100cqw,
1227
+ calc(100cqh - 32px),
1228
+ 297px
1229
+ );
1230
+ --electronic-signature-illustration-svg-w: 80%;
1231
+ --electronic-signature-illustration-svg-shift: 3%;
1232
+ --electronic-signature-doc-preview-max-h: 150px;
1233
+ --electronic-signature-doc-preview-radius: 6px;
1234
+ --electronic-signature-doc-row-h: 56px;
1235
+ --electronic-signature-doc-view-header-offset: calc(
1236
+ -1 * var(--page-header-height)
1237
+ );
1238
+
1223
1239
  /* digital ID upload */
1224
1240
  --digital-id-preview-w: 156px;
1225
1241
  --digital-id-preview-h: 221px;
@@ -1220,6 +1220,22 @@
1220
1220
  --redirect-phone-input-country-code-width: 130px;
1221
1221
  --redirect-qr-wrapper-border-radius: 21px;
1222
1222
 
1223
+ /* electronic signature */
1224
+ --electronic-signature-title-max-w: 600px;
1225
+ --electronic-signature-illustration-max-w: min(
1226
+ 100cqw,
1227
+ calc(100cqh - 32px),
1228
+ 297px
1229
+ );
1230
+ --electronic-signature-illustration-svg-w: 80%;
1231
+ --electronic-signature-illustration-svg-shift: 3%;
1232
+ --electronic-signature-doc-preview-max-h: 150px;
1233
+ --electronic-signature-doc-preview-radius: 6px;
1234
+ --electronic-signature-doc-row-h: 56px;
1235
+ --electronic-signature-doc-view-header-offset: calc(
1236
+ -1 * var(--page-header-height)
1237
+ );
1238
+
1223
1239
  /* digital ID upload */
1224
1240
  --digital-id-preview-w: 156px;
1225
1241
  --digital-id-preview-h: 221px;
@@ -403,6 +403,9 @@ declare type IdErrorProps = {
403
403
  * wires `idCaptureManager.retryCapture()` and forwards the
404
404
  * `attemptsRemaining` counter into the shared `<ExpiredId>` primitive.
405
405
  *
406
+ * `isBackSide` triggers the Figma `1-9-11-id-documenterror` subtitle
407
+ * ("Use a different ID from the accepted list") when the back side expired.
408
+ *
406
409
  * Workflow's verify-side node uses its own wrapper in the `id-verification`
407
410
  * module that passes only `onContinue` (no attempts concept), matching the
408
411
  * legacy SDK 1 `Workflow.tsx → ProcessId.jsx → ExpiredId` one-shot Continue
@@ -413,6 +416,7 @@ export declare const IdExpired: FC<IdExpiredProps>;
413
416
  declare type IdExpiredProps = {
414
417
  manager: IdCaptureManager;
415
418
  attemptsRemaining: number;
419
+ isBackSide?: boolean;
416
420
  };
417
421
 
418
422
  export declare const IdFlipAnimation: FC<FlipAnimationProps>;
@@ -295,14 +295,14 @@ var LAZY_UI_MODULES = {
295
295
  INE_VALIDATION: () => import("./governmentValidation/governmentValidation.es.js").then((m) => m.GovernmentValidation),
296
296
  GEOLOCATION: () => import("./geolocation/geolocation.es.js").then((m) => m.Geolocation),
297
297
  EXTERNAL_VERIFICATION: () => import("./ekycModule-BIbj7hr1.js").then((m) => m.EkycModule),
298
- EKYB: () => import("./ekybModule-B8aNb_qO.js").then((m) => m.EkybModule),
299
- DOCUMENT_CAPTURE: () => import("./documentCapture-WX3SLX90.js").then((m) => m.DocumentCapture),
300
- ADDRESS: () => import("./documentCapture-WX3SLX90.js").then((m) => m.DocumentCapture),
298
+ EKYB: () => import("./ekybModule-UEW1CfUF.js").then((m) => m.EkybModule),
299
+ DOCUMENT_CAPTURE: () => import("./documentCapture-CIo4u9dy.js").then((m) => m.DocumentCapture),
300
+ ADDRESS: () => import("./documentCapture-CIo4u9dy.js").then((m) => m.DocumentCapture),
301
301
  COMBINED_CONSENT: () => import("./consent/consent.es.js").then((m) => m.Consent),
302
302
  MANDATORY_CONSENT: () => import("./mandatoryConsent-DOQ0DKgM.js").then((m) => m.MandatoryConsent),
303
303
  ML_CONSENT: () => import("./mandatoryConsent-DOQ0DKgM.js").then((m) => m.MandatoryConsent),
304
304
  SIGNATURE: () => import("./signature/signature.es.js").then((m) => m.Signature),
305
- ID_OCR: () => import("./idOcr-CwDFZQb7.js").then((m) => m.IdOcr),
305
+ ID_OCR: () => import("./idOcr-XA2Xs3h-.js").then((m) => m.IdOcr),
306
306
  CPF_OCR: () => import("./cpfOcr-BJOYoITy.js").then((m) => m.CpfOcr),
307
307
  ANTIFRAUD: () => import("./antifraud/antifraud.es.js").then((m) => m.Antifraud),
308
308
  CUSTOM_FIELDS: () => import("./customFields-BQ4scZfL.js").then((m) => m.CustomFields),
@@ -312,9 +312,9 @@ var LAZY_UI_MODULES = {
312
312
  AE_SIGNATURE: () => import("./ae-signature/ae-signature.es.js").then((m) => m.AeSignature),
313
313
  QE_SIGNATURE: () => import("./qe-signature/qe-signature.es.js").then((m) => m.QeSignature),
314
314
  CROSS_DOCUMENT_DATA_MATCH: () => import("./cross-document-data-match/cross-document-data-match.es.js").then((m) => m.CrossDocumentDataMatch),
315
- DYNAMIC_FORMS: () => import("./dynamicForms-Dg03VDc-.js").then((m) => m.DynamicForms),
315
+ DYNAMIC_FORMS: () => import("./dynamicForms-BQv-wsBl.js").then((m) => m.DynamicForms),
316
316
  CERTIFICATE_ISSUANCE: () => import("./certificate-issuance/certificate-issuance.es.js").then((m) => m.CertificateIssuance),
317
- FIELD_COMPARISON: () => import("./fieldComparison-Cd6XNMdV.js").then((m) => m.FieldComparison),
317
+ FIELD_COMPARISON: () => import("./fieldComparison-DwbYI5GV.js").then((m) => m.FieldComparison),
318
318
  FISCAL_QR: () => import("./fiscal-qr/fiscal-qr.es.js").then((m) => m.FiscalQr)
319
319
  };
320
320
  function loadHomeScreen() {
@@ -7,7 +7,7 @@ import { t as Page } from "../page-DidH_RkX.js";
7
7
  import { t as TransitionSpinner } from "../transitionSpinner-4rPkt-KM.js";
8
8
  import { t as AutoFocusTitle } from "../autoFocusTitle-CuRu2lPg.js";
9
9
  import { t as registerIncodeModuleElement } from "../incodeModule-M8DszCee.js";
10
- import { a as resolveApiKey, g as setupSDK, i as HEADLESS_WORKFLOW_MODULE_KEYS, l as LAZY_UI_MODULES, o as extractIncodeStatus, s as UnsupportedModule, t as useModuleLoader, v as fetchAndApplyTheme, y as TerminalErrorPage } from "../useModuleLoader-BjEwQ4zY.js";
10
+ import { a as resolveApiKey, g as setupSDK, i as HEADLESS_WORKFLOW_MODULE_KEYS, l as LAZY_UI_MODULES, o as extractIncodeStatus, s as UnsupportedModule, t as useModuleLoader, v as fetchAndApplyTheme, y as TerminalErrorPage } from "../useModuleLoader-D2dAsd4A.js";
11
11
  import { resolveWasmConfig, upgradeToWasmHttpClient, warmupWasm } from "@incodetech/core/wasm";
12
12
  import { getDeviceClass } from "@incodetech/core/device";
13
13
  import { classifyScoreStatus } from "@incodetech/core/flow";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incodetech/web",
3
- "version": "0.0.0-dev-20260625-a43ee3be",
3
+ "version": "0.0.0-dev-20260626-da30041d",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/IncodeTechnologies/incode-web-sdk.git"
@@ -264,7 +264,7 @@
264
264
  "qrcode": "^1.5.4",
265
265
  "signature_pad": "^5.1.3",
266
266
  "tailwindcss": "^4.1.17",
267
- "@incodetech/core": "0.0.0-dev-20260625-a43ee3be"
267
+ "@incodetech/core": "0.0.0-dev-20260626-da30041d"
268
268
  },
269
269
  "devDependencies": {
270
270
  "@microsoft/api-extractor": "^7.53.3",
@@ -1,2 +0,0 @@
1
- import { t as DocumentCapture } from "./documentCapture-DuTiCr2O.js";
2
- export { DocumentCapture };
@@ -1,2 +0,0 @@
1
- import { t as EkybModule } from "./ekybModule-odKnH4xP.js";
2
- export { EkybModule };