@prosopo/procaptcha-react 2.11.3 → 2.13.0

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 (117) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +15 -15
  2. package/.turbo/turbo-build$colon$tsc.log +22 -22
  3. package/.turbo/turbo-build.log +16 -15
  4. package/CHANGELOG.md +79 -0
  5. package/dist/cjs/components/button.cjs +98 -0
  6. package/dist/cjs/components/captchaComponent.cjs +225 -0
  7. package/dist/cjs/components/captchaWidget.cjs +210 -0
  8. package/dist/cjs/components/collector.cjs +49 -0
  9. package/dist/cjs/components/index.cjs +15 -6
  10. package/dist/cjs/components/modal.cjs +39 -0
  11. package/dist/cjs/components/procaptcha.cjs +23 -0
  12. package/dist/cjs/components/procaptchaWidget.cjs +166 -0
  13. package/dist/cjs/index.cjs +15 -6
  14. package/dist/cjs/util/index.cjs +6 -4
  15. package/dist/components/button.d.ts +9 -0
  16. package/dist/components/button.d.ts.map +1 -0
  17. package/dist/components/button.js +98 -0
  18. package/dist/components/button.js.map +1 -0
  19. package/dist/components/{CaptchaComponent.d.ts → captchaComponent.d.ts} +5 -3
  20. package/dist/components/captchaComponent.d.ts.map +1 -0
  21. package/dist/components/captchaComponent.js +225 -0
  22. package/dist/components/captchaComponent.js.map +1 -0
  23. package/dist/components/{CaptchaWidget.d.ts → captchaWidget.d.ts} +3 -2
  24. package/dist/components/captchaWidget.d.ts.map +1 -0
  25. package/dist/components/captchaWidget.js +210 -0
  26. package/dist/components/captchaWidget.js.map +1 -0
  27. package/dist/components/collector.d.ts +5 -4
  28. package/dist/components/collector.d.ts.map +1 -1
  29. package/dist/components/collector.js +46 -24
  30. package/dist/components/collector.js.map +1 -1
  31. package/dist/components/index.d.ts +7 -5
  32. package/dist/components/index.d.ts.map +1 -1
  33. package/dist/components/index.js +8 -4
  34. package/dist/components/index.js.map +1 -1
  35. package/dist/components/modal.d.ts +14 -0
  36. package/dist/components/modal.d.ts.map +1 -0
  37. package/dist/components/modal.js +39 -0
  38. package/dist/components/modal.js.map +1 -0
  39. package/dist/components/procaptcha.d.ts +7 -0
  40. package/dist/components/procaptcha.d.ts.map +1 -0
  41. package/dist/components/procaptcha.js +22 -0
  42. package/dist/components/procaptcha.js.map +1 -0
  43. package/dist/components/procaptchaWidget.d.ts +7 -0
  44. package/dist/components/procaptchaWidget.d.ts.map +1 -0
  45. package/dist/components/procaptchaWidget.js +166 -0
  46. package/dist/components/procaptchaWidget.js.map +1 -0
  47. package/dist/index.js +8 -4
  48. package/dist/tests/button.unit.test.d.ts.map +1 -1
  49. package/dist/tests/button.unit.test.js +99 -50
  50. package/dist/tests/button.unit.test.js.map +1 -1
  51. package/dist/tests/captchaComponent.unit.test.d.ts.map +1 -1
  52. package/dist/tests/captchaComponent.unit.test.js +35 -13
  53. package/dist/tests/captchaComponent.unit.test.js.map +1 -1
  54. package/dist/tests/captchaWidget.unit.test.d.ts.map +1 -1
  55. package/dist/tests/captchaWidget.unit.test.js +125 -12
  56. package/dist/tests/captchaWidget.unit.test.js.map +1 -1
  57. package/dist/tests/collector.unit.test.d.ts.map +1 -1
  58. package/dist/tests/collector.unit.test.js +43 -10
  59. package/dist/tests/collector.unit.test.js.map +1 -1
  60. package/dist/tests/harness.d.ts +2 -0
  61. package/dist/tests/harness.d.ts.map +1 -1
  62. package/dist/tests/harness.js +7 -0
  63. package/dist/tests/harness.js.map +1 -1
  64. package/dist/tests/modal.unit.test.d.ts.map +1 -1
  65. package/dist/tests/modal.unit.test.js +45 -16
  66. package/dist/tests/modal.unit.test.js.map +1 -1
  67. package/dist/tests/procaptcha.unit.test.d.ts.map +1 -1
  68. package/dist/tests/procaptcha.unit.test.js +37 -15
  69. package/dist/tests/procaptcha.unit.test.js.map +1 -1
  70. package/dist/tests/procaptchaReact.test-d.js +8 -6
  71. package/dist/tests/procaptchaReact.test-d.js.map +1 -1
  72. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -1
  73. package/dist/tests/procaptchaWidget.unit.test.js +121 -96
  74. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -1
  75. package/dist/tests/render.d.ts +6 -7
  76. package/dist/tests/render.d.ts.map +1 -1
  77. package/dist/tests/render.js +23 -30
  78. package/dist/tests/render.js.map +1 -1
  79. package/dist/util/index.d.ts +8 -7
  80. package/dist/util/index.d.ts.map +1 -1
  81. package/dist/util/index.js +6 -4
  82. package/dist/util/index.js.map +1 -1
  83. package/package.json +9 -14
  84. package/vite.test.config.ts +1 -2
  85. package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
  86. package/dist/cjs/components/Button.cjs +0 -81
  87. package/dist/cjs/components/CaptchaComponent.cjs +0 -171
  88. package/dist/cjs/components/CaptchaWidget.cjs +0 -129
  89. package/dist/cjs/components/Modal.cjs +0 -35
  90. package/dist/cjs/components/Procaptcha.cjs +0 -7
  91. package/dist/cjs/components/ProcaptchaWidget.cjs +0 -168
  92. package/dist/components/Button.d.ts +0 -11
  93. package/dist/components/Button.d.ts.map +0 -1
  94. package/dist/components/Button.js +0 -81
  95. package/dist/components/Button.js.map +0 -1
  96. package/dist/components/CaptchaComponent.d.ts.map +0 -1
  97. package/dist/components/CaptchaComponent.js +0 -171
  98. package/dist/components/CaptchaComponent.js.map +0 -1
  99. package/dist/components/CaptchaWidget.d.ts.map +0 -1
  100. package/dist/components/CaptchaWidget.js +0 -129
  101. package/dist/components/CaptchaWidget.js.map +0 -1
  102. package/dist/components/Modal.d.ts +0 -13
  103. package/dist/components/Modal.d.ts.map +0 -1
  104. package/dist/components/Modal.js +0 -33
  105. package/dist/components/Modal.js.map +0 -1
  106. package/dist/components/Procaptcha.d.ts +0 -4
  107. package/dist/components/Procaptcha.d.ts.map +0 -1
  108. package/dist/components/Procaptcha.js +0 -7
  109. package/dist/components/Procaptcha.js.map +0 -1
  110. package/dist/components/ProcaptchaWidget.d.ts +0 -4
  111. package/dist/components/ProcaptchaWidget.d.ts.map +0 -1
  112. package/dist/components/ProcaptchaWidget.js +0 -168
  113. package/dist/components/ProcaptchaWidget.js.map +0 -1
  114. package/dist/tests/setup.d.ts +0 -5
  115. package/dist/tests/setup.d.ts.map +0 -1
  116. package/dist/tests/setup.js +0 -3
  117. package/dist/tests/setup.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import type { Component } from "@prosopo/procaptcha-common";
2
+ import type { PlacementType } from "@prosopo/types";
3
+ export interface ModalProps {
4
+ show: boolean;
5
+ placement?: PlacementType;
6
+ anchor?: HTMLElement | null;
7
+ onDismiss?: () => void;
8
+ dialogLabel?: string;
9
+ }
10
+ export interface ModalComponent extends Component<ModalProps> {
11
+ readonly content: HTMLElement;
12
+ }
13
+ export declare const mountModal: (initialProps: ModalProps) => ModalComponent;
14
+ //# sourceMappingURL=modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../src/components/modal.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,UAAU,CAAC;IAE5D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC9B;AAQD,eAAO,MAAM,UAAU,iBAAkB,UAAU,KAAG,cAqCrD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { applyStyles, createElement, mountChallengeSurface, wrapRandomly } from "@prosopo/procaptcha-common";
2
+ import { randomToken } from "@prosopo/widget-skeleton";
3
+ //#region src/components/modal.ts
4
+ var MIN_WRAPPER_DEPTH = 1;
5
+ var MAX_WRAPPER_DEPTH = 3;
6
+ /**
7
+ * The image captcha's dialog frame; positioning lives in `ChallengeSurface`.
8
+ */
9
+ var mountModal = (initialProps) => {
10
+ const inner = createElement("div", { className: randomToken() });
11
+ applyStyles(inner, {
12
+ maxWidth: "500px",
13
+ maxHeight: "100%",
14
+ backgroundColor: "transparent",
15
+ border: "none",
16
+ borderRadius: "28px",
17
+ alignSelf: "center",
18
+ boxSizing: "border-box"
19
+ });
20
+ const outerClassName = randomToken();
21
+ const surfaceProps = (props) => ({
22
+ show: props.show,
23
+ placement: props.placement,
24
+ anchor: props.anchor,
25
+ onDismiss: props.onDismiss,
26
+ scrim: "none",
27
+ className: outerClassName,
28
+ dialogLabel: props.dialogLabel
29
+ });
30
+ const surface = mountChallengeSurface(surfaceProps(initialProps));
31
+ surface.content.appendChild(wrapRandomly(inner, MIN_WRAPPER_DEPTH, MAX_WRAPPER_DEPTH));
32
+ return {
33
+ content: inner,
34
+ update: (props) => surface.update(surfaceProps(props)),
35
+ destroy: () => surface.destroy()
36
+ };
37
+ };
38
+ //#endregion
39
+ export { mountModal };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../../src/components/modal.ts"],"names":[],"mappings":"AAcA,OAAO,EAEN,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,YAAY,GACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAevD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAK5B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAwB,EAAkB,EAAE;IACtE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAEjE,WAAW,CAAC,KAAK,EAAE;QAClB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,YAAY;KACvB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,EAAE,CAAC;IAErC,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,MAAe;QACtB,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAA8B,qBAAqB,CAC/D,YAAY,CAAC,YAAY,CAAC,CAC1B,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,WAAW,CAC1B,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CACzD,CAAC;IAEF,OAAO;QACN,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KAChC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProcaptchaProps } from "@prosopo/types";
2
+ import type { ProcaptchaWidgetHandle } from "./procaptchaWidget.js";
3
+ export type { ProcaptchaWidgetHandle };
4
+ export type ProcaptchaMountFn = (container: HTMLElement, props: ProcaptchaProps) => ProcaptchaWidgetHandle;
5
+ export declare const loadProcaptcha: () => Promise<ProcaptchaMountFn>;
6
+ export declare const mountProcaptcha: (container: HTMLElement, props: ProcaptchaProps) => ProcaptchaWidgetHandle;
7
+ //# sourceMappingURL=procaptcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.d.ts","sourceRoot":"","sources":["../../src/components/procaptcha.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAOvC,MAAM,MAAM,iBAAiB,GAAG,CAC/B,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,eAAe,KAClB,sBAAsB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,iBAAiB,CACE,CAAC;AAOpE,eAAO,MAAM,eAAe,cAChB,WAAW,SACf,eAAe,KACpB,sBAkBF,CAAC"}
@@ -0,0 +1,22 @@
1
+ //#region src/components/procaptcha.ts
2
+ var loadProcaptcha = async () => (await import("./procaptchaWidget.js")).mountProcaptchaImageWidget;
3
+ /**
4
+ * Mount without awaiting the chunk. Nothing renders until the import lands,
5
+ * matching `<Suspense>` with no fallback; destroying before then cancels the
6
+ * mount rather than leaving an orphan behind.
7
+ */
8
+ var mountProcaptcha = (container, props) => {
9
+ let destroyed = false;
10
+ let inner;
11
+ loadProcaptcha().then((mount) => {
12
+ if (destroyed) return;
13
+ inner = mount(container, props);
14
+ });
15
+ return { destroy: () => {
16
+ destroyed = true;
17
+ inner?.destroy();
18
+ inner = void 0;
19
+ } };
20
+ };
21
+ //#endregion
22
+ export { loadProcaptcha, mountProcaptcha };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.js","sourceRoot":"","sources":["../../src/components/procaptcha.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAgC,EAAE,CACpE,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAOpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAsB,EACtB,KAAsB,EACG,EAAE;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAyC,CAAC;IAE9C,KAAK,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAwB,EAAE,EAAE;QACvD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO;QACR,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,EAAE,OAAO,EAAE,CAAC;YACjB,KAAK,GAAG,SAAS,CAAC;QACnB,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ProcaptchaProps } from "@prosopo/types";
2
+ export interface ProcaptchaWidgetHandle {
3
+ destroy(): void;
4
+ }
5
+ export declare const mountProcaptchaImageWidget: (container: HTMLElement, props: ProcaptchaProps) => ProcaptchaWidgetHandle;
6
+ export default mountProcaptchaImageWidget;
7
+ //# sourceMappingURL=procaptchaWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"AA8BA,OAAO,EAEN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,MAAM,WAAW,sBAAsB;IACtC,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,0BAA0B,cAC3B,WAAW,SACf,eAAe,KACpB,sBAuQF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,166 @@
1
+ import "../_virtual/_rolldown/runtime.js";
2
+ import { mountModal } from "./modal.js";
3
+ import { mountCaptchaComponent } from "./captchaComponent.js";
4
+ import { Teardown, createElement, createProcaptchaState, createRenderScheduler, isEventTrusted, mountCheckbox, mountHoneypot, mountTestModeBanner } from "@prosopo/procaptcha-common";
5
+ import { darkTheme, lightTheme } from "@prosopo/widget-skeleton";
6
+ import { Manager } from "@prosopo/procaptcha";
7
+ import { createTranslator, loadI18next } from "@prosopo/locale";
8
+ import { ProcaptchaConfigSchema } from "@prosopo/types";
9
+ //#region src/components/procaptchaWidget.ts
10
+ var PROCAPTCHA_EXECUTE_EVENT = "procaptcha:execute";
11
+ var mountProcaptchaImageWidget = (container, props) => {
12
+ const teardown = new Teardown();
13
+ const config = ProcaptchaConfigSchema.parse(props.config);
14
+ const frictionlessState = props.frictionlessState;
15
+ const i18n = props.i18n;
16
+ const callbacks = props.callbacks || {};
17
+ const translator = createTranslator(i18n);
18
+ const isInvisible = "invisible" === config.mode;
19
+ const store = createProcaptchaState();
20
+ let loading = false;
21
+ let lastError = store.state.error;
22
+ let lastCoords = null;
23
+ let sessionInvalidatedFired = false;
24
+ let honeypot;
25
+ let captcha;
26
+ let checkbox;
27
+ const delegatesReload = Boolean(props.onReload);
28
+ const manager = Manager(config, store.state, store.update, callbacks, frictionlessState, () => honeypot?.getValue(), delegatesReload ? (x, y) => props.onReload?.(x, y) : void 0);
29
+ const root = createElement("div", { className: isInvisible ? void 0 : "image-captcha" });
30
+ container.appendChild(root);
31
+ if (frictionlessState?.hp) honeypot = mountHoneypot(root, { encodedQuestion: frictionlessState.hp });
32
+ const modalProps = () => ({
33
+ show: store.state.showModal,
34
+ placement: config.placement,
35
+ anchor: props.container,
36
+ onDismiss: manager.cancel,
37
+ dialogLabel: translator.t("WIDGET.IMAGE_DIALOG_LABEL", { defaultValue: "Image challenge" })
38
+ });
39
+ const modal = mountModal(modalProps());
40
+ const emptyChallenge = createElement("div", { text: "No challenge set." });
41
+ const banner = isInvisible ? void 0 : mountTestModeBanner(root, { siteKey: config.account.address ?? "" });
42
+ const captchaProps = (challenge) => ({
43
+ challenge,
44
+ index: store.state.index,
45
+ solutions: store.state.solutions,
46
+ onSubmit: manager.submit,
47
+ onCancel: manager.cancel,
48
+ onClick: manager.select,
49
+ onNext: manager.nextRound,
50
+ onReload: manager.reload,
51
+ themeColor: config.theme ?? "light",
52
+ translator
53
+ });
54
+ const renderModal = () => {
55
+ modal.update(modalProps());
56
+ const challenge = store.state.challenge;
57
+ if (void 0 !== challenge) {
58
+ emptyChallenge.parentNode?.removeChild(emptyChallenge);
59
+ if (void 0 === captcha) captcha = mountCaptchaComponent(modal.content, captchaProps(challenge));
60
+ else captcha.update(captchaProps(challenge));
61
+ return;
62
+ }
63
+ captcha?.destroy();
64
+ captcha = void 0;
65
+ if (!isInvisible && emptyChallenge.parentNode !== modal.content) modal.content.appendChild(emptyChallenge);
66
+ };
67
+ const runErrorEffect = () => {
68
+ if (store.state.error === lastError) return;
69
+ lastError = store.state.error;
70
+ if (!store.state.error) return;
71
+ loading = false;
72
+ if ("CAPTCHA.NO_SESSION_FOUND" !== store.state.error.key) return;
73
+ if (props.onSessionInvalidated && !sessionInvalidatedFired) {
74
+ sessionInvalidatedFired = true;
75
+ props.onSessionInvalidated(lastCoords?.x, lastCoords?.y);
76
+ return;
77
+ }
78
+ if (frictionlessState) {
79
+ const timer = setTimeout(() => {
80
+ frictionlessState.restart();
81
+ }, 100);
82
+ teardown.add(() => clearTimeout(timer));
83
+ }
84
+ };
85
+ const render = () => {
86
+ runErrorEffect();
87
+ renderModal();
88
+ checkbox?.update(checkboxProps());
89
+ };
90
+ const scheduler = createRenderScheduler(render);
91
+ const checkboxProps = () => ({
92
+ theme: "light" === props.config.theme ? lightTheme : darkTheme,
93
+ checked: store.state.isHuman,
94
+ labelText: translator.isReady() ? translator.t("WIDGET.I_AM_HUMAN") : "",
95
+ error: store.state.error?.message,
96
+ loadingText: translator.t("WIDGET.CHECKING", { defaultValue: "Checking that you are human" }),
97
+ loading,
98
+ onChange: async (event) => {
99
+ if (!isEventTrusted(event)) return;
100
+ if (loading) return;
101
+ loading = true;
102
+ scheduler.schedule();
103
+ let x = 0;
104
+ let y = 0;
105
+ if ("clientX" in event && "clientY" in event) {
106
+ x = event.clientX;
107
+ y = event.clientY;
108
+ }
109
+ lastCoords = {
110
+ x,
111
+ y
112
+ };
113
+ try {
114
+ await manager.start(x, y);
115
+ } catch (error) {
116
+ console.error("Error starting verification:", error);
117
+ } finally {
118
+ loading = false;
119
+ scheduler.schedule();
120
+ }
121
+ }
122
+ });
123
+ if (!isInvisible) checkbox = mountCheckbox(root, checkboxProps());
124
+ teardown.add(scheduler.cancel);
125
+ teardown.add(store.subscribe(scheduler.schedule));
126
+ teardown.add(translator.subscribe(scheduler.schedule));
127
+ const handleExecute = () => {
128
+ store.update({ showModal: true });
129
+ if (!store.state.challenge) {
130
+ console.log("No challenge set, attempting to start verification");
131
+ try {
132
+ manager.start();
133
+ } catch (error) {
134
+ console.error("Error starting verification:", error);
135
+ }
136
+ }
137
+ };
138
+ teardown.addEventListener(document, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
139
+ if (props.container) teardown.addEventListener(props.container, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
140
+ if (config.language) if (i18n) {
141
+ if (i18n.language !== config.language) i18n.changeLanguage(config.language);
142
+ } else loadI18next(false, config.language);
143
+ if (props.autoStart) {
144
+ loading = true;
145
+ const coords = props.startCoords;
146
+ lastCoords = coords ?? null;
147
+ scheduler.schedule();
148
+ const clearLoading = () => {
149
+ loading = false;
150
+ scheduler.schedule();
151
+ };
152
+ manager.start(coords?.x ?? 0, coords?.y ?? 0).then(clearLoading, clearLoading);
153
+ }
154
+ render();
155
+ return { destroy: () => {
156
+ teardown.run();
157
+ captcha?.destroy();
158
+ modal.destroy();
159
+ checkbox?.destroy();
160
+ banner?.destroy();
161
+ honeypot?.destroy();
162
+ root.parentNode?.removeChild(root);
163
+ } };
164
+ };
165
+ //#endregion
166
+ export { mountProcaptchaImageWidget as default, mountProcaptchaImageWidget };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.js","sourceRoot":"","sources":["../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import "./_virtual/_rolldown/runtime.js";
2
- import { CaptchaWidget } from "./components/CaptchaWidget.js";
3
- import ProcaptchaWidget from "./components/ProcaptchaWidget.js";
4
- import Procaptcha from "./components/Procaptcha.js";
5
- export { CaptchaWidget, Procaptcha, ProcaptchaWidget };
2
+ import { mountButton } from "./components/button.js";
3
+ import { mountModal } from "./components/modal.js";
4
+ import { mountCaptchaWidget } from "./components/captchaWidget.js";
5
+ import { mountCaptchaComponent } from "./components/captchaComponent.js";
6
+ import mountCollector from "./components/collector.js";
7
+ import mountProcaptchaImageWidget from "./components/procaptchaWidget.js";
8
+ import { loadProcaptcha, mountProcaptcha } from "./components/procaptcha.js";
9
+ export { loadProcaptcha, mountButton, mountCaptchaComponent, mountCaptchaWidget, mountCollector, mountModal, mountProcaptcha, mountProcaptchaImageWidget };
@@ -1 +1 @@
1
- {"version":3,"file":"button.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/button.unit.test.tsx"],"names":[],"mappings":""}
1
+ {"version":3,"file":"button.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/button.unit.test.ts"],"names":[],"mappings":""}
@@ -1,93 +1,129 @@
1
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
1
  import { darkTheme, lightTheme, withAlpha } from "@prosopo/widget-skeleton";
3
2
  import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
- import Button from "../components/Button.js";
5
- import { asRgb, fire, fireAndReturn, mount } from "./render.js";
3
+ import { mountButton } from "../components/button.js";
4
+ import { asRgb, fire, fireAndReturn, mount, styleSnapshot, } from "./render.js";
6
5
  let mounted;
6
+ let button;
7
7
  const onClick = vi.fn();
8
- const render = (props = {}) => {
9
- mounted.render(_jsx(Button, { themeColor: props.themeColor ?? "light", buttonType: props.buttonType ?? "next", text: props.text ?? "Next", onClick: onClick }));
10
- const button = mounted.container.querySelector("button");
11
- if (!button)
12
- throw new Error("expected a button to be rendered");
13
- return button;
8
+ const props = (overrides = {}) => ({
9
+ themeColor: overrides.themeColor ?? "light",
10
+ buttonType: overrides.buttonType ?? "next",
11
+ text: overrides.text ?? "Next",
12
+ onClick,
13
+ });
14
+ const render = (overrides = {}) => {
15
+ if (button) {
16
+ button.update(props(overrides));
17
+ }
18
+ else {
19
+ button = mountButton(mounted.container, props(overrides));
20
+ }
21
+ const element = mounted.container.firstElementChild;
22
+ if (!(element instanceof HTMLElement)) {
23
+ throw new Error("expected an action to be rendered");
24
+ }
25
+ return element;
26
+ };
27
+ const renderAs = (kind, overrides = {}) => {
28
+ const draws = vi
29
+ .spyOn(Math, "random")
30
+ .mockReturnValue("button" === kind ? 0 : 0.99);
31
+ try {
32
+ return render(overrides);
33
+ }
34
+ finally {
35
+ draws.mockRestore();
36
+ }
14
37
  };
15
38
  beforeEach(() => {
16
39
  vi.clearAllMocks();
17
40
  process.env.NODE_ENV = "test";
18
41
  mounted = mount();
42
+ button = undefined;
19
43
  });
20
44
  afterEach(() => {
45
+ button?.destroy();
21
46
  mounted.unmount();
22
47
  });
23
48
  describe("what the button renders", () => {
24
49
  test("shows its text and labels itself with it", () => {
25
- const button = render({ text: "Submit" });
26
- expect(button.textContent).toBe("Submit");
27
- expect(button.getAttribute("aria-label")).toBe("Submit");
50
+ const element = render({ text: "Submit" });
51
+ expect(element.textContent).toBe("Submit");
52
+ expect(element.getAttribute("aria-label")).toBe("Submit");
28
53
  });
29
54
  test("renders an empty label without falling over", () => {
30
- const button = render({ text: "" });
31
- expect(button.textContent).toBe("");
55
+ const element = render({ text: "" });
56
+ expect(element.textContent).toBe("");
32
57
  });
33
58
  test("carries the test hook naming its role", () => {
34
- const button = render({ buttonType: "cancel" });
35
- expect(button.getAttribute("data-cy")).toBe("button-cancel");
59
+ const element = render({ buttonType: "cancel" });
60
+ expect(element.getAttribute("data-cy")).toBe("button-cancel");
36
61
  });
37
62
  test("drops the test hook in a production build", () => {
38
63
  process.env.NODE_ENV = "production";
39
- const button = render({ buttonType: "cancel" });
40
- expect(button.getAttribute("data-cy")).toBeNull();
64
+ const element = render({ buttonType: "cancel" });
65
+ expect(element.getAttribute("data-cy")).toBeNull();
66
+ });
67
+ test("is a plain button when it is a button", () => {
68
+ const element = renderAs("button");
69
+ expect(element.tagName).toBe("BUTTON");
70
+ expect(element.getAttribute("type")).toBe("button");
71
+ });
72
+ test("is a tabbable button by role when it is not a button", () => {
73
+ const element = renderAs("generic");
74
+ expect(element.tagName).toBe("DIV");
75
+ expect(element.getAttribute("role")).toBe("button");
76
+ expect(element.getAttribute("tabindex")).toBe("0");
41
77
  });
42
78
  });
43
79
  describe("theming", () => {
44
80
  test("is a borderless pill, not an outlined box", () => {
45
- const button = render();
46
- expect(button.style.borderRadius).toBe(lightTheme.shape.button);
47
- expect(button.style.borderColor).toBe("");
48
- expect(button.style.borderWidth).toBe("");
81
+ const element = render();
82
+ expect(element.style.borderRadius).toBe(lightTheme.shape.button);
83
+ expect(element.style.borderColor).toBe("");
84
+ expect(element.style.borderWidth).toBe("");
49
85
  });
50
86
  test("a cancel button is transparent until it is hovered", () => {
51
- const button = render({ buttonType: "cancel" });
52
- expect(button.style.backgroundColor).toBe("transparent");
87
+ const element = render({ buttonType: "cancel" });
88
+ expect(element.style.backgroundColor).toBe("transparent");
53
89
  });
54
90
  test("a next button is filled with the brand primary", () => {
55
- const button = render({ buttonType: "next" });
56
- expect(button.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
91
+ const element = render({ buttonType: "next" });
92
+ expect(element.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
57
93
  });
58
94
  test("a dark next button takes its fill from the dark theme", () => {
59
- const button = render({ buttonType: "next", themeColor: "dark" });
60
- expect(button.style.backgroundColor).toBe(asRgb(darkTheme.palette.primary.main));
95
+ const element = render({ buttonType: "next", themeColor: "dark" });
96
+ expect(element.style.backgroundColor).toBe(asRgb(darkTheme.palette.primary.main));
61
97
  });
62
98
  test("hovering a cancel button reveals the primary state layer", () => {
63
- const button = render({ buttonType: "cancel" });
64
- fire(button, "mouseover");
65
- expect(button.style.backgroundColor).toBe(withAlpha(lightTheme.palette.primary.main, lightTheme.stateLayer.hover));
99
+ const element = render({ buttonType: "cancel" });
100
+ fire(element, "mouseenter");
101
+ expect(element.style.backgroundColor).toBe(withAlpha(lightTheme.palette.primary.main, lightTheme.stateLayer.hover));
66
102
  });
67
103
  test("hovering a next button composites a state layer over its fill", () => {
68
- const button = render({ buttonType: "next" });
69
- fire(button, "mouseover");
70
- expect(button.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
71
- expect(button.style.boxShadow).toContain(withAlpha(lightTheme.palette.primary.contrastText, lightTheme.stateLayer.hover));
104
+ const element = render({ buttonType: "next" });
105
+ fire(element, "mouseenter");
106
+ expect(element.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
107
+ expect(element.style.boxShadow).toContain(withAlpha(lightTheme.palette.primary.contrastText, lightTheme.stateLayer.hover));
72
108
  });
73
109
  test("leaving the button drops the state layer again", () => {
74
- const button = render({ buttonType: "next" });
75
- fire(button, "mouseover");
76
- fire(button, "mouseout");
77
- expect(button.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
78
- expect(button.style.boxShadow).not.toContain("inset");
110
+ const element = render({ buttonType: "next" });
111
+ fire(element, "mouseenter");
112
+ fire(element, "mouseleave");
113
+ expect(element.style.backgroundColor).toBe(asRgb(lightTheme.palette.primary.main));
114
+ expect(element.style.boxShadow).not.toContain("inset");
79
115
  });
80
116
  test("a filled button keeps its on-primary text throughout", () => {
81
- const button = render();
82
- expect(button.style.color).toBe(asRgb(lightTheme.palette.primary.contrastText));
83
- fire(button, "mouseover");
84
- expect(button.style.color).toBe(asRgb(lightTheme.palette.primary.contrastText));
117
+ const element = render();
118
+ expect(element.style.color).toBe(asRgb(lightTheme.palette.primary.contrastText));
119
+ fire(element, "mouseenter");
120
+ expect(element.style.color).toBe(asRgb(lightTheme.palette.primary.contrastText));
85
121
  });
86
122
  test("re-rendering with the same theme keeps the styling stable", () => {
87
- const button = render({ themeColor: "dark" });
88
- const before = button.getAttribute("style");
123
+ const element = render({ themeColor: "dark" });
124
+ const before = styleSnapshot(element);
89
125
  render({ themeColor: "dark" });
90
- expect(button.getAttribute("style")).toBe(before);
126
+ expect(styleSnapshot(element)).toEqual(before);
91
127
  });
92
128
  });
93
129
  describe("clicking", () => {
@@ -108,10 +144,23 @@ describe("clicking", () => {
108
144
  expect(event.defaultPrevented).toBe(false);
109
145
  });
110
146
  test("every click is reported, not just the first", () => {
111
- const button = render();
112
- fire(button, "click");
113
- fire(button, "click");
147
+ const element = render();
148
+ fire(element, "click");
149
+ fire(element, "click");
114
150
  expect(onClick).toHaveBeenCalledTimes(2);
115
151
  });
152
+ test("Enter and Space call the handler when it is not a button", () => {
153
+ const element = renderAs("generic");
154
+ fire(element, "keydown", { key: "Enter" });
155
+ fire(element, "keydown", { key: " " });
156
+ expect(onClick).toHaveBeenCalledTimes(2);
157
+ });
158
+ test("a destroyed button stops listening", () => {
159
+ const element = render();
160
+ button?.destroy();
161
+ button = undefined;
162
+ element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
163
+ expect(onClick).not.toHaveBeenCalled();
164
+ });
116
165
  });
117
166
  //# sourceMappingURL=button.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.unit.test.js","sourceRoot":"","sources":["../../src/tests/button.unit.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"button.unit.test.js","sourceRoot":"","sources":["../../src/tests/button.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"captchaComponent.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/captchaComponent.unit.test.tsx"],"names":[],"mappings":""}
1
+ {"version":3,"file":"captchaComponent.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/captchaComponent.unit.test.ts"],"names":[],"mappings":""}