@prosopo/procaptcha-common 2.11.17 → 2.11.18

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 (47) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +22 -20
  2. package/.turbo/turbo-build$colon$tsc.log +18 -18
  3. package/.turbo/turbo-build.log +23 -19
  4. package/CHANGELOG.md +28 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/callbacks/defaultCallbacks.js +100 -152
  7. package/dist/callbacks/defaultEvents.js +6 -6
  8. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  9. package/dist/cjs/callbacks/defaultCallbacks.cjs +100 -151
  10. package/dist/cjs/callbacks/defaultEvents.cjs +6 -6
  11. package/dist/cjs/elements/form.cjs +10 -17
  12. package/dist/cjs/elements/window.cjs +17 -15
  13. package/dist/cjs/extensionLoader.cjs +3 -25
  14. package/dist/cjs/index.cjs +29 -27
  15. package/dist/cjs/providers.cjs +29 -42
  16. package/dist/cjs/reactComponents/Checkbox.cjs +102 -121
  17. package/dist/cjs/reactComponents/Honeypot.cjs +54 -62
  18. package/dist/cjs/reactComponents/Reload.cjs +59 -80
  19. package/dist/cjs/reactComponents/TestModeBanner.cjs +31 -44
  20. package/dist/cjs/simdReadings.cjs +24 -0
  21. package/dist/cjs/state/builder.cjs +70 -83
  22. package/dist/elements/form.js +10 -18
  23. package/dist/elements/window.js +18 -17
  24. package/dist/extensionLoader.js +4 -4
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -19
  28. package/dist/index.js.map +1 -1
  29. package/dist/providers.js +29 -45
  30. package/dist/reactComponents/Checkbox.js +99 -121
  31. package/dist/reactComponents/Honeypot.js +53 -61
  32. package/dist/reactComponents/Reload.js +58 -80
  33. package/dist/reactComponents/TestModeBanner.js +30 -45
  34. package/dist/simdReadings.d.ts +6 -0
  35. package/dist/simdReadings.d.ts.map +1 -0
  36. package/dist/simdReadings.js +23 -0
  37. package/dist/simdReadings.js.map +1 -0
  38. package/dist/state/builder.js +71 -85
  39. package/dist/tests/simdReadings.test.d.ts +2 -0
  40. package/dist/tests/simdReadings.test.d.ts.map +1 -0
  41. package/dist/tests/simdReadings.test.js +76 -0
  42. package/dist/tests/simdReadings.test.js.map +1 -0
  43. package/package.json +8 -8
  44. package/src/index.ts +1 -0
  45. package/src/simdReadings.ts +45 -0
  46. package/src/tests/simdReadings.test.ts +149 -0
  47. package/tsconfig.tsbuildinfo +1 -1
@@ -1,88 +1,75 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const buildUpdateState = (state, onStateUpdate) => (nextState) => {
4
- Object.assign(state, nextState);
5
- onStateUpdate(nextState);
1
+ //#region src/state/builder.ts
2
+ var buildUpdateState = (state, onStateUpdate) => (nextState) => {
3
+ Object.assign(state, nextState);
4
+ onStateUpdate(nextState);
6
5
  };
7
- const useRefAsState = (useRef, defaultValue) => {
8
- const ref = useRef(defaultValue);
9
- const setter = (value2) => {
10
- ref.current = value2;
11
- };
12
- const value = ref.current;
13
- return [value, setter];
6
+ /**
7
+ * Wrap a ref to be the same format as useState.
8
+ * @param useRef the useRef function from react
9
+ * @param defaultValue the default value if the state is not already initialised
10
+ * @returns a ref in the same format as a state, e.g. [value, setValue]
11
+ */
12
+ var useRefAsState = (useRef, defaultValue) => {
13
+ const ref = useRef(defaultValue);
14
+ const setter = (value) => {
15
+ ref.current = value;
16
+ };
17
+ return [ref.current, setter];
14
18
  };
15
- const useProcaptcha = (useState, useRef) => {
16
- const [isHuman, setIsHuman] = useState(false);
17
- const [index, setIndex] = useState(0);
18
- const [solutions, setSolutions] = useState(
19
- []
20
- );
21
- const [captchaApi, setCaptchaApi] = useRefAsState(useRef, void 0);
22
- const [showModal, setShowModal] = useState(false);
23
- const [challenge, setChallenge] = useState(
24
- void 0
25
- );
26
- const [loading, setLoading] = useState(false);
27
- const [account, setAccount] = useState(void 0);
28
- const [dappAccount, setDappAccount] = useState(void 0);
29
- const [submission, setSubmission] = useRefAsState(useRef, void 0);
30
- const [timeout, setTimeout] = useRefAsState(
31
- useRef,
32
- void 0
33
- );
34
- const [successfullChallengeTimeout, setSuccessfullChallengeTimeout] = useRefAsState(useRef, void 0);
35
- const [sendData, setSendData] = useState(false);
36
- const [attemptCount, setAttemptCount] = useState(0);
37
- const [error, setError] = useState(void 0);
38
- const [sessionId, setSessionId] = useState(void 0);
39
- return [
40
- // the state
41
- {
42
- isHuman,
43
- index,
44
- solutions,
45
- captchaApi,
46
- showModal,
47
- challenge,
48
- loading,
49
- account,
50
- dappAccount,
51
- submission,
52
- timeout,
53
- successfullChallengeTimeout,
54
- sendData,
55
- attemptCount,
56
- error,
57
- sessionId
58
- },
59
- // and method to update the state
60
- (nextState) => {
61
- if (nextState.account !== void 0) setAccount(nextState.account);
62
- if (nextState.isHuman !== void 0) setIsHuman(nextState.isHuman);
63
- if (nextState.index !== void 0) setIndex(nextState.index);
64
- if (nextState.solutions !== void 0)
65
- setSolutions(nextState.solutions.slice());
66
- if (nextState.captchaApi !== void 0)
67
- setCaptchaApi(nextState.captchaApi);
68
- if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
69
- if (nextState.challenge !== void 0) setChallenge(nextState.challenge);
70
- if (nextState.loading !== void 0) setLoading(nextState.loading);
71
- if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
72
- if (nextState.dappAccount !== void 0)
73
- setDappAccount(nextState.dappAccount);
74
- if (nextState.submission !== void 0)
75
- setSubmission(nextState.submission);
76
- if (nextState.timeout !== void 0) setTimeout(nextState.timeout);
77
- if (nextState.successfullChallengeTimeout !== void 0)
78
- setSuccessfullChallengeTimeout(nextState.timeout);
79
- if (nextState.sendData !== void 0) setSendData(nextState.sendData);
80
- if (nextState.attemptCount !== void 0)
81
- setAttemptCount(nextState.attemptCount);
82
- if (nextState.error !== void 0) setError(nextState.error);
83
- if (nextState.sessionId !== void 0) setSessionId(nextState.sessionId);
84
- }
85
- ];
19
+ var useProcaptcha = (useState, useRef) => {
20
+ const [isHuman, setIsHuman] = useState(false);
21
+ const [index, setIndex] = useState(0);
22
+ const [solutions, setSolutions] = useState([]);
23
+ const [captchaApi, setCaptchaApi] = useRefAsState(useRef, void 0);
24
+ const [showModal, setShowModal] = useState(false);
25
+ const [challenge, setChallenge] = useState(void 0);
26
+ const [loading, setLoading] = useState(false);
27
+ const [account, setAccount] = useState(void 0);
28
+ const [dappAccount, setDappAccount] = useState(void 0);
29
+ const [submission, setSubmission] = useRefAsState(useRef, void 0);
30
+ const [timeout, setTimeout] = useRefAsState(useRef, void 0);
31
+ const [successfullChallengeTimeout, setSuccessfullChallengeTimeout] = useRefAsState(useRef, void 0);
32
+ const [sendData, setSendData] = useState(false);
33
+ const [attemptCount, setAttemptCount] = useState(0);
34
+ const [error, setError] = useState(void 0);
35
+ const [sessionId, setSessionId] = useState(void 0);
36
+ return [{
37
+ isHuman,
38
+ index,
39
+ solutions,
40
+ captchaApi,
41
+ showModal,
42
+ challenge,
43
+ loading,
44
+ account,
45
+ dappAccount,
46
+ submission,
47
+ timeout,
48
+ successfullChallengeTimeout,
49
+ sendData,
50
+ attemptCount,
51
+ error,
52
+ sessionId
53
+ }, (nextState) => {
54
+ if (nextState.account !== void 0) setAccount(nextState.account);
55
+ if (nextState.isHuman !== void 0) setIsHuman(nextState.isHuman);
56
+ if (nextState.index !== void 0) setIndex(nextState.index);
57
+ if (nextState.solutions !== void 0) setSolutions(nextState.solutions.slice());
58
+ if (nextState.captchaApi !== void 0) setCaptchaApi(nextState.captchaApi);
59
+ if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
60
+ if (nextState.challenge !== void 0) setChallenge(nextState.challenge);
61
+ if (nextState.loading !== void 0) setLoading(nextState.loading);
62
+ if (nextState.showModal !== void 0) setShowModal(nextState.showModal);
63
+ if (nextState.dappAccount !== void 0) setDappAccount(nextState.dappAccount);
64
+ if (nextState.submission !== void 0) setSubmission(nextState.submission);
65
+ if (nextState.timeout !== void 0) setTimeout(nextState.timeout);
66
+ if (nextState.successfullChallengeTimeout !== void 0) setSuccessfullChallengeTimeout(nextState.timeout);
67
+ if (nextState.sendData !== void 0) setSendData(nextState.sendData);
68
+ if (nextState.attemptCount !== void 0) setAttemptCount(nextState.attemptCount);
69
+ if (nextState.error !== void 0) setError(nextState.error);
70
+ if (nextState.sessionId !== void 0) setSessionId(nextState.sessionId);
71
+ }];
86
72
  };
73
+ //#endregion
87
74
  exports.buildUpdateState = buildUpdateState;
88
75
  exports.useProcaptcha = useProcaptcha;
@@ -1,22 +1,14 @@
1
1
  import { ApiParams } from "@prosopo/types";
2
+ //#region src/elements/form.ts
2
3
  function getParentForm(widgetElement) {
3
- const parentForm = widgetElement.closest("form");
4
- if (parentForm) {
5
- return parentForm;
6
- }
7
- const rootWidgetNode = widgetElement.getRootNode();
8
- if (rootWidgetNode instanceof ShadowRoot) {
9
- return rootWidgetNode.host.closest("form");
10
- }
11
- return null;
4
+ const parentForm = widgetElement.closest("form");
5
+ if (parentForm) return parentForm;
6
+ const rootWidgetNode = widgetElement.getRootNode();
7
+ if (rootWidgetNode instanceof ShadowRoot) return rootWidgetNode.host.closest("form");
8
+ return null;
12
9
  }
13
- const removeProcaptchaResponse = () => {
14
- const element = Array.from(
15
- document.getElementsByName(ApiParams.procaptchaResponse)
16
- );
17
- element.map((el) => el.remove());
18
- };
19
- export {
20
- getParentForm,
21
- removeProcaptchaResponse
10
+ var removeProcaptchaResponse = () => {
11
+ Array.from(document.getElementsByName(ApiParams.procaptchaResponse)).map((el) => el.remove());
22
12
  };
13
+ //#endregion
14
+ export { getParentForm, removeProcaptchaResponse };
@@ -1,19 +1,20 @@
1
- const getWindowCallback = (callbackName) => {
2
- const fn = window[callbackName.replace("window.", "")];
3
- if (typeof fn !== "function") {
4
- throw new Error(
5
- `Callback ${callbackName} is not defined on the window object`
6
- );
7
- }
8
- return fn;
1
+ //#region src/elements/window.ts
2
+ var getWindowCallback = (callbackName) => {
3
+ const fn = window[callbackName.replace("window.", "")];
4
+ if (typeof fn !== "function") throw new Error(`Callback ${callbackName} is not defined on the window object`);
5
+ return fn;
9
6
  };
10
- const isSecureBrowserContext = () => {
11
- if (typeof window === "undefined") {
12
- return true;
13
- }
14
- return window.isSecureContext === true;
15
- };
16
- export {
17
- getWindowCallback,
18
- isSecureBrowserContext
7
+ /**
8
+ * Procaptcha depends on secure-context-only browser APIs (e.g. SubtleCrypto)
9
+ * to run a challenge. These are unavailable when the widget is served over
10
+ * plain HTTP, which otherwise surfaces as a cryptic provider-selection
11
+ * failure. The browser already treats HTTPS and localhost as secure contexts,
12
+ * so this only flags genuine HTTP origins. Non-browser (SSR) environments are
13
+ * treated as secure since the HTTP restriction does not apply there.
14
+ */
15
+ var isSecureBrowserContext = () => {
16
+ if (typeof window === "undefined") return true;
17
+ return window.isSecureContext === true;
19
18
  };
19
+ //#endregion
20
+ export { getWindowCallback, isSecureBrowserContext };
@@ -1,4 +1,4 @@
1
- const ExtensionLoader = async (web2) => web2 ? (await import("@prosopo/account/extension/ExtensionWeb2")).default : (await import("@prosopo/account/extension/ExtensionWeb3")).default;
2
- export {
3
- ExtensionLoader
4
- };
1
+ //#region src/extensionLoader.ts
2
+ var ExtensionLoader = async (web2) => web2 ? (await import("@prosopo/account/extension/ExtensionWeb2")).default : (await import("@prosopo/account/extension/ExtensionWeb3")).default;
3
+ //#endregion
4
+ export { ExtensionLoader };
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from "./state/builder.js";
3
3
  export * from "./callbacks/defaultCallbacks.js";
4
4
  export * from "./callbacks/defaultEvents.js";
5
5
  export * from "./extensionLoader.js";
6
+ export * from "./simdReadings.js";
6
7
  export * from "./elements/window.js";
7
8
  export * from "./reactComponents/Reload.js";
8
9
  export * from "./reactComponents/Checkbox.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC"}
package/dist/index.js CHANGED
@@ -1,28 +1,13 @@
1
+ import "./_virtual/_rolldown/runtime.js";
1
2
  import { getProcaptchaRandomActiveProvider, getRetryDelayMs, pickIpMode, providerRetry } from "./providers.js";
2
3
  import { buildUpdateState, useProcaptcha } from "./state/builder.js";
4
+ import { getWindowCallback, isSecureBrowserContext } from "./elements/window.js";
3
5
  import { getDefaultCallbacks, setUserCallbacks } from "./callbacks/defaultCallbacks.js";
4
6
  import { getDefaultEvents } from "./callbacks/defaultEvents.js";
5
7
  import { ExtensionLoader } from "./extensionLoader.js";
6
- import { getWindowCallback, isSecureBrowserContext } from "./elements/window.js";
8
+ import { SIMD_READINGS_SUBMIT_TIMEOUT_MS, getSimdReadingsForSubmit } from "./simdReadings.js";
7
9
  import { ReloadButton } from "./reactComponents/Reload.js";
8
10
  import { Checkbox } from "./reactComponents/Checkbox.js";
9
11
  import { Honeypot } from "./reactComponents/Honeypot.js";
10
12
  import { TestModeBanner } from "./reactComponents/TestModeBanner.js";
11
- export {
12
- Checkbox,
13
- ExtensionLoader,
14
- Honeypot,
15
- ReloadButton,
16
- TestModeBanner,
17
- buildUpdateState,
18
- getDefaultCallbacks,
19
- getDefaultEvents,
20
- getProcaptchaRandomActiveProvider,
21
- getRetryDelayMs,
22
- getWindowCallback,
23
- isSecureBrowserContext,
24
- pickIpMode,
25
- providerRetry,
26
- setUserCallbacks,
27
- useProcaptcha
28
- };
13
+ export { Checkbox, ExtensionLoader, Honeypot, ReloadButton, SIMD_READINGS_SUBMIT_TIMEOUT_MS, TestModeBanner, buildUpdateState, getDefaultCallbacks, getDefaultEvents, getProcaptchaRandomActiveProvider, getRetryDelayMs, getSimdReadingsForSubmit, getWindowCallback, isSecureBrowserContext, pickIpMode, providerRetry, setUserCallbacks, useProcaptcha };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC"}
package/dist/providers.js CHANGED
@@ -1,50 +1,34 @@
1
1
  import { getRandomActiveProvider, getRandomProviderFromList } from "@prosopo/load-balancer";
2
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3
- const pickIpMode = (flags) => {
4
- if (flags?.ipv4) return "ipv4";
5
- if (flags?.ipv6) return "ipv6";
6
- return void 0;
2
+ //#region src/providers.ts
3
+ var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
4
+ var pickIpMode = (flags) => {
5
+ if (flags?.ipv4) return "ipv4";
6
+ if (flags?.ipv6) return "ipv6";
7
7
  };
8
- const getProcaptchaRandomActiveProvider = async (defaultEnvironment, ipMode, retryContext) => {
9
- if (!retryContext || retryContext.attempt <= 1) {
10
- return getRandomActiveProvider(defaultEnvironment, ipMode);
11
- }
12
- return getRandomProviderFromList(
13
- defaultEnvironment,
14
- ipMode,
15
- retryContext.excludeUrl
16
- );
8
+ var getProcaptchaRandomActiveProvider = async (defaultEnvironment, ipMode, retryContext) => {
9
+ if (!retryContext || retryContext.attempt <= 1) return getRandomActiveProvider(defaultEnvironment, ipMode);
10
+ return getRandomProviderFromList(defaultEnvironment, ipMode, retryContext.excludeUrl);
17
11
  };
18
- const RETRY_BASE_DELAY_MS = 500;
19
- const RETRY_MAX_DELAY_MS = 1e4;
20
- const getRetryDelayMs = (attemptCount, random = Math.random) => {
21
- const safeAttempt = Math.max(0, Math.floor(attemptCount));
22
- const cappedDelay = Math.min(
23
- RETRY_MAX_DELAY_MS,
24
- RETRY_BASE_DELAY_MS * 2 ** safeAttempt
25
- );
26
- return Math.round(random() * cappedDelay);
12
+ var RETRY_BASE_DELAY_MS = 500;
13
+ var RETRY_MAX_DELAY_MS = 1e4;
14
+ var getRetryDelayMs = (attemptCount, random = Math.random) => {
15
+ const cappedDelay = Math.min(RETRY_MAX_DELAY_MS, RETRY_BASE_DELAY_MS * 2 ** Math.max(0, Math.floor(attemptCount)));
16
+ return Math.round(random() * cappedDelay);
27
17
  };
28
- const providerRetry = async (currentFn, retryFn, stateReset, attemptCount, retryMax, backoffMs = getRetryDelayMs(attemptCount)) => {
29
- try {
30
- await currentFn();
31
- } catch (err) {
32
- if (attemptCount >= retryMax) {
33
- console.error(err);
34
- console.error(
35
- `Max retries (${attemptCount} of ${retryMax}) reached, aborting`
36
- );
37
- return stateReset();
38
- }
39
- console.error(err);
40
- stateReset();
41
- await sleep(backoffMs);
42
- await retryFn();
43
- }
44
- };
45
- export {
46
- getProcaptchaRandomActiveProvider,
47
- getRetryDelayMs,
48
- pickIpMode,
49
- providerRetry
18
+ var providerRetry = async (currentFn, retryFn, stateReset, attemptCount, retryMax, backoffMs = getRetryDelayMs(attemptCount)) => {
19
+ try {
20
+ await currentFn();
21
+ } catch (err) {
22
+ if (attemptCount >= retryMax) {
23
+ console.error(err);
24
+ console.error(`Max retries (${attemptCount} of ${retryMax}) reached, aborting`);
25
+ return stateReset();
26
+ }
27
+ console.error(err);
28
+ stateReset();
29
+ await sleep(backoffMs);
30
+ await retryFn();
31
+ }
50
32
  };
33
+ //#endregion
34
+ export { getProcaptchaRandomActiveProvider, getRetryDelayMs, pickIpMode, providerRetry };
@@ -1,9 +1,10 @@
1
- import { jsxs, jsx } from "@emotion/react/jsx-runtime";
1
+ import { WIDGET_CHECKBOX_SPINNER_CSS_CLASS } from "@prosopo/widget-skeleton";
2
+ import { useMemo, useState } from "react";
3
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
2
4
  import { css } from "@emotion/react";
3
5
  import styled from "@emotion/styled";
4
- import { WIDGET_CHECKBOX_SPINNER_CSS_CLASS } from "@prosopo/widget-skeleton";
5
- import { useState, useMemo } from "react";
6
- const checkboxBefore = css`{
6
+ //#region src/reactComponents/Checkbox.tsx
7
+ var checkboxBefore = css`{
7
8
  &:before {
8
9
  content: '""';
9
10
  position: absolute;
@@ -11,43 +12,33 @@ const checkboxBefore = css`{
11
12
  width: 100%;
12
13
  }
13
14
  }`;
14
- const baseStyle = {
15
- width: "28px",
16
- height: "28px",
17
- minWidth: "14px",
18
- minHeight: "14px",
19
- top: "auto",
20
- left: "auto",
21
- opacity: "1",
22
- borderRadius: "12.5%",
23
- appearance: "none",
24
- cursor: "pointer",
25
- margin: "0",
26
- borderStyle: "solid",
27
- borderWidth: "1px"
15
+ var baseStyle = {
16
+ width: "28px",
17
+ height: "28px",
18
+ minWidth: "14px",
19
+ minHeight: "14px",
20
+ top: "auto",
21
+ left: "auto",
22
+ opacity: "1",
23
+ borderRadius: "12.5%",
24
+ appearance: "none",
25
+ cursor: "pointer",
26
+ margin: "0",
27
+ borderStyle: "solid",
28
+ borderWidth: "1px"
28
29
  };
29
- const ID_LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
30
- const FAQ_LINK = process.env.PROSOPO_DOCS_URL ? `${new URL(`${process.env.PROSOPO_DOCS_URL}/en/basics/faq/`).href}/` : "https://docs.prosopo.io/en/basics/faq/";
31
- const generateRandomId = () => {
32
- return Array.from(
33
- { length: 8 },
34
- () => ID_LETTERS[Math.floor(Math.random() * ID_LETTERS.length)]
35
- ).join("");
30
+ var ID_LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
31
+ var FAQ_LINK = process.env.PROSOPO_DOCS_URL ? `${new URL(`${process.env.PROSOPO_DOCS_URL}/en/basics/faq/`).href}/` : "https://docs.prosopo.io/en/basics/faq/";
32
+ var generateRandomId = () => {
33
+ return Array.from({ length: 8 }, () => ID_LETTERS[Math.floor(Math.random() * ID_LETTERS.length)]).join("");
36
34
  };
37
- const Checkbox = ({
38
- theme,
39
- onChange,
40
- checked,
41
- labelText,
42
- error,
43
- loading
44
- }) => {
45
- const checkboxStyleBase = {
46
- ...baseStyle,
47
- border: `1px solid ${theme.palette.background.contrastText}`
48
- };
49
- const [hover, setHover] = useState(false);
50
- const ResponsiveLabel = styled.label`
35
+ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
36
+ const checkboxStyleBase = {
37
+ ...baseStyle,
38
+ border: `1px solid ${theme.palette.background.contrastText}`
39
+ };
40
+ const [hover, setHover] = useState(false);
41
+ const ResponsiveLabel = styled.label`
51
42
  color: ${theme.palette.background.contrastText};
52
43
  position: relative;
53
44
  display: flex !important;
@@ -71,86 +62,73 @@ const Checkbox = ({
71
62
  font-size: 16px;
72
63
  }
73
64
  `;
74
- const checkboxStyle = useMemo(() => {
75
- return {
76
- ...checkboxStyleBase,
77
- borderColor: hover ? theme.palette.background.contrastText : theme.palette.border,
78
- appearance: checked ? "auto" : "none",
79
- flex: 1,
80
- margin: "15px",
81
- minWidth: "28px",
82
- minHeight: "28px"
83
- };
84
- }, [hover, theme, checked]);
85
- const id = generateRandomId();
86
- return /* @__PURE__ */ jsxs(
87
- "span",
88
- {
89
- style: {
90
- display: "inline-flex",
91
- alignItems: "center",
92
- minHeight: "58px"
93
- },
94
- children: [
95
- loading ? /* @__PURE__ */ jsx(
96
- "div",
97
- {
98
- className: WIDGET_CHECKBOX_SPINNER_CSS_CLASS,
99
- "aria-label": "Loading spinner"
100
- }
101
- ) : /* @__PURE__ */ jsx(
102
- "input",
103
- {
104
- name: id,
105
- id,
106
- onMouseEnter: () => setHover(true),
107
- onMouseLeave: () => setHover(false),
108
- css: checkboxBefore,
109
- type: "checkbox",
110
- "aria-live": "assertive",
111
- "aria-label": labelText,
112
- onKeyDown: (e) => {
113
- if (!e.isTrusted) {
114
- return;
115
- }
116
- if (e.key === "Enter") {
117
- e.preventDefault();
118
- e.stopPropagation();
119
- setHover(false);
120
- onChange(e);
121
- }
122
- },
123
- onChange: (e) => {
124
- if (!e.isTrusted) {
125
- return;
126
- }
127
- e.preventDefault();
128
- e.stopPropagation();
129
- setHover(false);
130
- onChange(e);
131
- },
132
- checked,
133
- style: checkboxStyle,
134
- disabled: error !== void 0,
135
- className: loading ? "prosopo-checkbox__loading-spinner" : "",
136
- "data-cy": "captcha-checkbox"
137
- }
138
- ),
139
- error ? /* @__PURE__ */ jsx(ResponsiveLabel, { htmFor: id, children: /* @__PURE__ */ jsx(
140
- "a",
141
- {
142
- css: {
143
- color: theme.palette.error.main
144
- },
145
- href: FAQ_LINK,
146
- children: error
147
- }
148
- ) }) : /* @__PURE__ */ jsx(ResponsiveLabel, { htmFor: id, children: labelText })
149
- ]
150
- }
151
- );
152
- };
153
- export {
154
- Checkbox,
155
- Checkbox as default
65
+ const checkboxStyle = useMemo(() => {
66
+ return {
67
+ ...checkboxStyleBase,
68
+ borderColor: hover ? theme.palette.background.contrastText : theme.palette.border,
69
+ appearance: checked ? "auto" : "none",
70
+ flex: 1,
71
+ margin: "15px",
72
+ minWidth: "28px",
73
+ minHeight: "28px"
74
+ };
75
+ }, [
76
+ hover,
77
+ theme,
78
+ checked
79
+ ]);
80
+ const id = generateRandomId();
81
+ return /* @__PURE__ */ jsxs("span", {
82
+ style: {
83
+ display: "inline-flex",
84
+ alignItems: "center",
85
+ minHeight: "58px"
86
+ },
87
+ children: [loading ? /* @__PURE__ */ jsx("div", {
88
+ className: WIDGET_CHECKBOX_SPINNER_CSS_CLASS,
89
+ "aria-label": "Loading spinner"
90
+ }) : /* @__PURE__ */ jsx("input", {
91
+ name: id,
92
+ id,
93
+ onMouseEnter: () => setHover(true),
94
+ onMouseLeave: () => setHover(false),
95
+ css: checkboxBefore,
96
+ type: "checkbox",
97
+ "aria-live": "assertive",
98
+ "aria-label": labelText,
99
+ onKeyDown: (e) => {
100
+ if (!e.isTrusted) return;
101
+ if (e.key === "Enter") {
102
+ e.preventDefault();
103
+ e.stopPropagation();
104
+ setHover(false);
105
+ onChange(e);
106
+ }
107
+ },
108
+ onChange: (e) => {
109
+ if (!e.isTrusted) return;
110
+ e.preventDefault();
111
+ e.stopPropagation();
112
+ setHover(false);
113
+ onChange(e);
114
+ },
115
+ checked,
116
+ style: checkboxStyle,
117
+ disabled: error !== void 0,
118
+ className: loading ? "prosopo-checkbox__loading-spinner" : "",
119
+ "data-cy": "captcha-checkbox"
120
+ }), error ? /* @__PURE__ */ jsx(ResponsiveLabel, {
121
+ htmFor: id,
122
+ children: /* @__PURE__ */ jsx("a", {
123
+ css: { color: theme.palette.error.main },
124
+ href: FAQ_LINK,
125
+ children: error
126
+ })
127
+ }) : /* @__PURE__ */ jsx(ResponsiveLabel, {
128
+ htmFor: id,
129
+ children: labelText
130
+ })]
131
+ });
156
132
  };
133
+ //#endregion
134
+ export { Checkbox, Checkbox as default };