@prosopo/procaptcha-common 2.11.21 → 2.11.23

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/procaptcha-common@2.11.21 build:cjs
2
+ > @prosopo/procaptcha-common@2.11.23 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -39,22 +39,23 @@ ViteCommonJSConfig: .
39
39
  vite v8.1.5 building ssr environment for production...
40
40
  Bundle build started
41
41
  
42
- 14 modules transformed.
42
+ 15 modules transformed.
43
43
  rendering chunks...
44
44
  computing gzip size...
45
45
  dist/cjs/extensionLoader.cjs 0.27 kB │ gzip: 0.16 kB
46
46
  dist/cjs/callbacks/defaultEvents.cjs 0.28 kB │ gzip: 0.16 kB
47
47
  dist/cjs/elements/form.cjs 0.62 kB │ gzip: 0.31 kB
48
48
  dist/cjs/simdReadings.cjs 0.79 kB │ gzip: 0.36 kB
49
+ dist/cjs/events/trust.cjs 0.91 kB │ gzip: 0.53 kB
49
50
  dist/cjs/elements/window.cjs 0.96 kB │ gzip: 0.54 kB
50
51
  dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
51
52
  dist/cjs/reactComponents/TestModeBanner.cjs 1.36 kB │ gzip: 0.75 kB
52
53
  dist/cjs/providers.cjs 1.54 kB │ gzip: 0.64 kB
53
- dist/cjs/index.cjs 1.97 kB │ gzip: 0.54 kB
54
54
  dist/cjs/reactComponents/Honeypot.cjs 2.03 kB │ gzip: 0.91 kB
55
- dist/cjs/reactComponents/Reload.cjs 2.89 kB │ gzip: 1.25 kB
55
+ dist/cjs/index.cjs 2.08 kB │ gzip: 0.57 kB
56
+ dist/cjs/reactComponents/Reload.cjs 2.94 kB │ gzip: 1.30 kB
56
57
  dist/cjs/state/builder.cjs 3.13 kB │ gzip: 0.84 kB
57
58
  dist/cjs/callbacks/defaultCallbacks.cjs 3.84 kB │ gzip: 1.03 kB
58
- dist/cjs/reactComponents/Checkbox.cjs 4.06 kB │ gzip: 1.59 kB
59
+ dist/cjs/reactComponents/Checkbox.cjs 5.30 kB │ gzip: 2.09 kB
59
60
 
60
- ✓ built in 93ms
61
+ ✓ built in 112ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/procaptcha-common@2.11.21 build:tsc
2
+ > @prosopo/procaptcha-common@2.11.23 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 1:57:25 PM - Projects in this build:
5
+ 7:05:21 AM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../locale/tsconfig.json
8
8
  * ../util/tsconfig.json
@@ -18,35 +18,35 @@
18
18
  * ../account/tsconfig.json
19
19
  * tsconfig.json
20
20
 
21
- 1:57:25 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
21
+ 7:05:21 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/vite-plugin-copy.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
22
22
 
23
- 1:57:25 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
23
+ 7:05:21 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
24
24
 
25
- 1:57:25 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
25
+ 7:05:21 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
26
26
 
27
- 1:57:25 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
27
+ 7:05:21 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
28
28
 
29
- 1:57:25 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
29
+ 7:05:21 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
30
30
 
31
- 1:57:25 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
31
+ 7:05:21 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
32
32
 
33
- 1:57:25 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
33
+ 7:05:21 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
34
34
 
35
- 1:57:25 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/index.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
35
+ 7:05:21 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
36
36
 
37
- 1:57:25 PM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/theme.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
37
+ 7:05:21 AM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/webComponent/createWebComponent.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
38
38
 
39
- 1:57:25 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
39
+ 7:05:21 AM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/sources/webgl.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
40
40
 
41
- 1:57:25 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
41
+ 7:05:21 AM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
42
42
 
43
- 1:57:25 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
43
+ 7:05:21 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
44
44
 
45
- 1:57:25 PM - Project '../account/tsconfig.json' is out of date because output file '../account/tsconfig.tsbuildinfo' does not exist
45
+ 7:05:21 AM - Project '../account/tsconfig.json' is out of date because output file '../account/tsconfig.tsbuildinfo' does not exist
46
46
 
47
- 1:57:25 PM - Building project '/home/runner/work/captcha/captcha/packages/account/tsconfig.json'...
47
+ 7:05:21 AM - Building project '/home/runner/work/captcha/captcha/packages/account/tsconfig.json'...
48
48
 
49
- 1:57:28 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
49
+ 7:05:27 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
50
50
 
51
- 1:57:28 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-common/tsconfig.json'...
51
+ 7:05:27 AM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-common/tsconfig.json'...
52
52
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/procaptcha-common@2.11.21 build
2
+ > @prosopo/procaptcha-common@2.11.23 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/procaptcha-common@2.11.21 build:cross-env
6
+ > @prosopo/procaptcha-common@2.11.23 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -43,7 +43,7 @@ ViteEsmConfig: .
43
43
  vite v8.1.5 building ssr environment for production...
44
44
  Bundle build started
45
45
  
46
- 14 modules transformed.
46
+ 15 modules transformed.
47
47
  rendering chunks...
48
48
  computing gzip size...
49
49
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
@@ -51,14 +51,15 @@ dist/callbacks/defaultEvents.js 0.23 kB │ gzip: 0.15 kB
51
51
  dist/extensionLoader.js 0.25 kB │ gzip: 0.16 kB
52
52
  dist/elements/form.js 0.56 kB │ gzip: 0.30 kB
53
53
  dist/simdReadings.js 0.72 kB │ gzip: 0.35 kB
54
+ dist/events/trust.js 0.89 kB │ gzip: 0.52 kB
54
55
  dist/elements/window.js 0.91 kB │ gzip: 0.53 kB
55
- dist/index.js 1.20 kB │ gzip: 0.42 kB
56
56
  dist/reactComponents/TestModeBanner.js 1.23 kB │ gzip: 0.71 kB
57
+ dist/index.js 1.27 kB │ gzip: 0.44 kB
57
58
  dist/providers.js 1.41 kB │ gzip: 0.62 kB
58
59
  dist/reactComponents/Honeypot.js 1.86 kB │ gzip: 0.89 kB
59
- dist/reactComponents/Reload.js 2.64 kB │ gzip: 1.22 kB
60
+ dist/reactComponents/Reload.js 2.69 kB │ gzip: 1.26 kB
60
61
  dist/state/builder.js 3.09 kB │ gzip: 0.84 kB
61
- dist/reactComponents/Checkbox.js 3.62 kB │ gzip: 1.51 kB
62
62
  dist/callbacks/defaultCallbacks.js 3.64 kB │ gzip: 1.00 kB
63
+ dist/reactComponents/Checkbox.js 4.77 kB │ gzip: 2.01 kB
63
64
 
64
65
  ✓ built in 77ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # @prosopo/procaptcha-common
2
2
 
3
+ ## 2.11.23
4
+ ### Patch Changes
5
+
6
+ - 729349e: Run the cypress suite in firefox as well as chrome whenever the PR is a release
7
+ PR, via a new cypress-firefox workflow. cypress.yml is untouched.
8
+
9
+ The trusted-event checks scattered across the widget components now go through a
10
+ single `isEventTrusted()` helper in `@prosopo/procaptcha-common`. Behaviour is
11
+ unchanged: it still returns early for synthetic input, unless the bundle was
12
+ built with `PROSOPO_ALLOW_UNTRUSTED_EVENTS=1`, which only the firefox CI leg
13
+ sets. Production builds pin the define to `false`, so the branch is folded away
14
+ at build time and the allowance cannot reach a shipped bundle.
15
+
16
+ The allowance exists because cypress-real-events dispatches input over the chrome
17
+ devtools protocol, which cypress exposes for chromium browsers only — on firefox
18
+ the specs fall back to cypress' own synthetic clicks.
19
+ - b525956: Refresh the captcha widget appearance with a Material 3 theme across the widget-skeleton, procaptcha-common, procaptcha-react and procaptcha-puzzle packages.
20
+
21
+ - Split the single tinted surface into M3 surface roles: the widget now sits on a white `surface` (surfaceContainerLowest) and the challenge dialog on `surfaceContainerHigh`.
22
+ - Removed all drop shadows. Separation comes from surface roles and outlines; hover and drag feedback use M3 state layers and outline rings instead.
23
+ - Added shared `typography` (label large / title medium / body medium) and `stateLayer` (8%/10%/10%) tokens, and aligned the shape scale to M3 steps.
24
+ - Buttons: M3 label-large type, 40dp height, spec padding, state-layer hover in place of a brightness filter, and no resting elevation on the filled variant.
25
+ - Added the missing focus indicators (3dp outline, 2dp offset, keyboard-only) to the checkbox, buttons and reload control.
26
+ - Secondary dialog text now uses the `onSurfaceVariant` role rather than reduced opacity.
27
+ - Updated dependencies [16dbab0]
28
+ - Updated dependencies [b525956]
29
+ - Updated dependencies [063e69d]
30
+ - Updated dependencies [8a4d6ad]
31
+ - @prosopo/types@5.0.3
32
+ - @prosopo/widget-skeleton@2.8.6
33
+ - @prosopo/account@2.8.69
34
+ - @prosopo/load-balancer@2.10.20
35
+
36
+ ## 2.11.22
37
+ ### Patch Changes
38
+
39
+ - Updated dependencies [d6cb841]
40
+ - @prosopo/types@5.0.2
41
+ - @prosopo/account@2.8.68
42
+ - @prosopo/load-balancer@2.10.19
43
+
3
44
  ## 2.11.21
4
45
  ### Patch Changes
5
46
 
@@ -0,0 +1,20 @@
1
+ //#region src/events/trust.ts
2
+ /**
3
+ * Whether an event came from a real user rather than a script.
4
+ *
5
+ * The widget acts only on trusted input: a synthetic event is precisely how a
6
+ * bot drives a page, so honouring one would hand over the captcha for free.
7
+ *
8
+ * The single exception is the firefox cypress leg. cypress can only dispatch
9
+ * trusted input through the chrome devtools protocol, which it exposes for
10
+ * chromium browsers only, so on firefox every spec clicks synthetically.
11
+ * Building with PROSOPO_ALLOW_UNTRUSTED_EVENTS=1 opens the gate for that leg.
12
+ * Production builds pin the constant to false and the branch folds away, so
13
+ * the allowance cannot reach a shipped bundle.
14
+ */
15
+ function isEventTrusted(event) {
16
+ if (event.isTrusted) return true;
17
+ return typeof __PROSOPO_ALLOW_UNTRUSTED_EVENTS__ !== "undefined" && __PROSOPO_ALLOW_UNTRUSTED_EVENTS__;
18
+ }
19
+ //#endregion
20
+ exports.isEventTrusted = isEventTrusted;
@@ -1,5 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_providers = require("./providers.cjs");
3
+ const require_trust = require("./events/trust.cjs");
3
4
  const require_builder = require("./state/builder.cjs");
4
5
  const require_window = require("./elements/window.cjs");
5
6
  const require_defaultCallbacks = require("./callbacks/defaultCallbacks.cjs");
@@ -23,6 +24,7 @@ exports.getProcaptchaRandomActiveProvider = require_providers.getProcaptchaRando
23
24
  exports.getRetryDelayMs = require_providers.getRetryDelayMs;
24
25
  exports.getSimdReadingsForSubmit = require_simdReadings.getSimdReadingsForSubmit;
25
26
  exports.getWindowCallback = require_window.getWindowCallback;
27
+ exports.isEventTrusted = require_trust.isEventTrusted;
26
28
  exports.isSecureBrowserContext = require_window.isSecureBrowserContext;
27
29
  exports.pickIpMode = require_providers.pickIpMode;
28
30
  exports.providerRetry = require_providers.providerRetry;
@@ -1,4 +1,5 @@
1
1
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_trust = require("../events/trust.cjs");
2
3
  let _prosopo_widget_skeleton = require("@prosopo/widget-skeleton");
3
4
  let react = require("react");
4
5
  let _emotion_react_jsx_runtime = require("@emotion/react/jsx-runtime");
@@ -14,20 +15,26 @@ var checkboxBefore = _emotion_react.css`{
14
15
  width: 100%;
15
16
  }
16
17
  }`;
18
+ var checkboxForcedColors = _emotion_react.css`
19
+ @media (forced-colors: active) {
20
+ appearance: auto !important;
21
+ background-image: none !important;
22
+ }
23
+ `;
24
+ var CHECKBOX_SIZE = "28px";
17
25
  var baseStyle = {
18
- width: "28px",
19
- height: "28px",
20
- minWidth: "14px",
21
- minHeight: "14px",
26
+ width: CHECKBOX_SIZE,
27
+ height: CHECKBOX_SIZE,
28
+ minWidth: CHECKBOX_SIZE,
29
+ minHeight: CHECKBOX_SIZE,
22
30
  top: "auto",
23
31
  left: "auto",
24
32
  opacity: "1",
25
- borderRadius: "12.5%",
26
33
  appearance: "none",
27
34
  cursor: "pointer",
28
35
  margin: "0",
29
36
  borderStyle: "solid",
30
- borderWidth: "1px"
37
+ borderWidth: "2px"
31
38
  };
32
39
  var ID_LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
33
40
  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/";
@@ -35,13 +42,17 @@ var generateRandomId = () => {
35
42
  return Array.from({ length: 8 }, () => ID_LETTERS[Math.floor(Math.random() * ID_LETTERS.length)]).join("");
36
43
  };
37
44
  var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
38
- const checkboxStyleBase = {
39
- ...baseStyle,
40
- border: `1px solid ${theme.palette.background.contrastText}`
41
- };
42
45
  const [hover, setHover] = (0, react.useState)(false);
46
+ const checkboxFocus = (0, react.useMemo)(() => _emotion_react.css`
47
+ &:focus-visible {
48
+ outline: 3px solid ${theme.palette.primary.main};
49
+ outline-offset: 2px;
50
+ }
51
+ `, [theme]);
43
52
  const ResponsiveLabel = _emotion_styled.default.label`
44
- color: ${theme.palette.background.contrastText};
53
+ /* The label sits on the widget surface, so it takes onSurface — not the
54
+ dialog container's on-colour. */
55
+ color: ${theme.palette.onSurface};
45
56
  position: relative;
46
57
  display: flex !important;
47
58
  cursor: pointer;
@@ -65,14 +76,20 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
65
76
  }
66
77
  `;
67
78
  const checkboxStyle = (0, react.useMemo)(() => {
79
+ const checkImage = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='${encodeURIComponent(theme.palette.checkbox.tick)}' d='M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E")`;
80
+ const stateLayerColor = checked ? theme.palette.checkbox.fill : theme.palette.onSurface;
68
81
  return {
69
- ...checkboxStyleBase,
70
- borderColor: hover ? theme.palette.background.contrastText : theme.palette.border,
71
- appearance: checked ? "auto" : "none",
72
- flex: 1,
82
+ ...baseStyle,
73
83
  margin: "15px",
74
- minWidth: "28px",
75
- minHeight: "28px"
84
+ borderRadius: theme.shape.checkbox,
85
+ borderColor: checked ? theme.palette.checkbox.fill : theme.palette.checkbox.border,
86
+ backgroundColor: checked ? theme.palette.checkbox.fill : theme.palette.surface,
87
+ backgroundImage: checked ? checkImage : "none",
88
+ backgroundRepeat: "no-repeat",
89
+ backgroundPosition: "center",
90
+ backgroundSize: "20px 20px",
91
+ boxShadow: hover ? `0 0 0 10px ${(0, _prosopo_widget_skeleton.withAlpha)(stateLayerColor, theme.stateLayer.hover)}` : "none",
92
+ transition: "background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease"
76
93
  };
77
94
  }, [
78
95
  hover,
@@ -94,12 +111,16 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
94
111
  id,
95
112
  onMouseEnter: () => setHover(true),
96
113
  onMouseLeave: () => setHover(false),
97
- css: checkboxBefore,
114
+ css: [
115
+ checkboxBefore,
116
+ checkboxForcedColors,
117
+ checkboxFocus
118
+ ],
98
119
  type: "checkbox",
99
120
  "aria-live": "assertive",
100
121
  "aria-label": labelText,
101
122
  onKeyDown: (e) => {
102
- if (!e.isTrusted) return;
123
+ if (!require_trust.isEventTrusted(e)) return;
103
124
  if (e.key === "Enter") {
104
125
  e.preventDefault();
105
126
  e.stopPropagation();
@@ -108,7 +129,7 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
108
129
  }
109
130
  },
110
131
  onChange: (e) => {
111
- if (!e.isTrusted) return;
132
+ if (!require_trust.isEventTrusted(e)) return;
112
133
  e.preventDefault();
113
134
  e.stopPropagation();
114
135
  setHover(false);
@@ -4,32 +4,36 @@ let _emotion_react_jsx_runtime = require("@emotion/react/jsx-runtime");
4
4
  //#region src/reactComponents/Reload.tsx
5
5
  var buttonStyleBase = {
6
6
  border: "none",
7
- paddingTop: "6px",
8
- paddingBottom: "6px",
7
+ padding: "8px",
9
8
  cursor: "pointer",
10
- height: "39px",
11
- width: "39px",
9
+ height: "40px",
10
+ width: "40px",
12
11
  borderRadius: "50%",
13
12
  display: "flex"
14
13
  };
15
14
  var ReloadButton = ({ themeColor, onReload }) => {
16
15
  const theme = (0, react.useMemo)(() => themeColor === "light" ? _prosopo_widget_skeleton.lightTheme : _prosopo_widget_skeleton.darkTheme, [themeColor]);
17
16
  const [hover, setHover] = (0, react.useState)(false);
17
+ const [focusVisible, setFocusVisible] = (0, react.useState)(false);
18
18
  const buttonStyle = (0, react.useMemo)(() => {
19
19
  return {
20
20
  ...buttonStyleBase,
21
- backgroundColor: theme.palette.background.default,
22
- color: hover ? theme.palette.primary.contrastText : theme.palette.background.contrastText,
23
- border: `1px solid ${theme.palette.grey[500]}`,
24
- borderRadius: "50%",
25
- transition: "background-color 0.3s",
26
- boxShadow: `0px 1px 3px 0px ${theme.palette.grey[500]}`,
21
+ ...focusVisible ? {
22
+ outline: `3px solid ${theme.palette.primary.main}`,
23
+ outlineOffset: "2px"
24
+ } : {},
25
+ backgroundColor: hover ? theme.palette.primaryContainer.hover : theme.palette.primaryContainer.main,
26
+ color: theme.palette.primaryContainer.contrastText,
27
+ transition: "background-color 0.25s",
27
28
  justifyContent: "center",
28
29
  alignItems: "center",
29
- margin: "0 auto",
30
- backgroundColor: hover ? theme.palette.grey[700] : theme.palette.background.default
30
+ margin: "0 auto"
31
31
  };
32
- }, [hover, theme]);
32
+ }, [
33
+ hover,
34
+ theme,
35
+ focusVisible
36
+ ]);
33
37
  return /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("button", {
34
38
  className: "reload-button",
35
39
  "aria-label": "Reload",
@@ -37,13 +41,15 @@ var ReloadButton = ({ themeColor, onReload }) => {
37
41
  style: buttonStyle,
38
42
  onMouseEnter: () => setHover(true),
39
43
  onMouseLeave: () => setHover(false),
44
+ onFocus: (e) => setFocusVisible(e.target.matches(":focus-visible")),
45
+ onBlur: () => setFocusVisible(false),
40
46
  onClick: (e) => {
41
47
  e.preventDefault();
42
48
  onReload();
43
49
  },
44
50
  children: /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsxs)("svg", {
45
- width: "16px",
46
- height: "16px",
51
+ width: "24px",
52
+ height: "24px",
47
53
  viewBox: "0 0 16 16",
48
54
  version: "1.1",
49
55
  xmlns: "http://www.w3.org/2000/svg",
@@ -51,7 +57,7 @@ var ReloadButton = ({ themeColor, onReload }) => {
51
57
  style: { display: "flex" },
52
58
  children: [/* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("title", { children: "reload" }), /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("path", {
53
59
  shapeRendering: "optimizeQuality",
54
- fill: hover ? theme.palette.primary.contrastText : theme.palette.grey[700],
60
+ fill: theme.palette.primaryContainer.contrastText,
55
61
  transform: "scale(0.0416)",
56
62
  d: "M234.666667,149.333333 L234.666667,106.666667 L314.564847,106.664112 C287.579138,67.9778918 242.745446,42.6666667 192,42.6666667 C109.525477,42.6666667 42.6666667,109.525477 42.6666667,192 C42.6666667,274.474523 109.525477,341.333333 192,341.333333 C268.201293,341.333333 331.072074,284.258623 340.195444,210.526102 L382.537159,215.817985 C370.807686,310.617565 289.973536,384 192,384 C85.961328,384 1.42108547e-14,298.038672 1.42108547e-14,192 C1.42108547e-14,85.961328 85.961328,1.42108547e-14 192,1.42108547e-14 C252.316171,1.42108547e-14 306.136355,27.8126321 341.335366,71.3127128 L341.333333,1.42108547e-14 L384,1.42108547e-14 L384,149.333333 L234.666667,149.333333 Z"
57
63
  })]
@@ -0,0 +1,5 @@
1
+ export interface TrustableEvent {
2
+ readonly isTrusted: boolean;
3
+ }
4
+ export declare function isEventTrusted(event: TrustableEvent): boolean;
5
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/events/trust.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC5B;AAeD,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAQ7D"}
@@ -0,0 +1,20 @@
1
+ //#region src/events/trust.ts
2
+ /**
3
+ * Whether an event came from a real user rather than a script.
4
+ *
5
+ * The widget acts only on trusted input: a synthetic event is precisely how a
6
+ * bot drives a page, so honouring one would hand over the captcha for free.
7
+ *
8
+ * The single exception is the firefox cypress leg. cypress can only dispatch
9
+ * trusted input through the chrome devtools protocol, which it exposes for
10
+ * chromium browsers only, so on firefox every spec clicks synthetically.
11
+ * Building with PROSOPO_ALLOW_UNTRUSTED_EVENTS=1 opens the gate for that leg.
12
+ * Production builds pin the constant to false and the branch folds away, so
13
+ * the allowance cannot reach a shipped bundle.
14
+ */
15
+ function isEventTrusted(event) {
16
+ if (event.isTrusted) return true;
17
+ return typeof __PROSOPO_ALLOW_UNTRUSTED_EVENTS__ !== "undefined" && __PROSOPO_ALLOW_UNTRUSTED_EVENTS__;
18
+ }
19
+ //#endregion
20
+ export { isEventTrusted };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/events/trust.ts"],"names":[],"mappings":"AAqCA,MAAM,UAAU,cAAc,CAAC,KAAqB;IACnD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,CACN,OAAO,kCAAkC,KAAK,WAAW;QACzD,kCAAkC,CAClC,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./providers.js";
2
+ export * from "./events/trust.js";
2
3
  export * from "./state/builder.js";
3
4
  export * from "./callbacks/defaultCallbacks.js";
4
5
  export * from "./callbacks/defaultEvents.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,mBAAmB,CAAC;AAClC,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,mBAAmB,CAAC;AAClC,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,5 +1,6 @@
1
1
  import "./_virtual/_rolldown/runtime.js";
2
2
  import { getProcaptchaRandomActiveProvider, getRetryDelayMs, pickIpMode, providerRetry } from "./providers.js";
3
+ import { isEventTrusted } from "./events/trust.js";
3
4
  import { buildUpdateState, useProcaptcha } from "./state/builder.js";
4
5
  import { getWindowCallback, isSecureBrowserContext } from "./elements/window.js";
5
6
  import { getDefaultCallbacks, setUserCallbacks } from "./callbacks/defaultCallbacks.js";
@@ -10,4 +11,4 @@ import { ReloadButton } from "./reactComponents/Reload.js";
10
11
  import { Checkbox } from "./reactComponents/Checkbox.js";
11
12
  import { Honeypot } from "./reactComponents/Honeypot.js";
12
13
  import { TestModeBanner } from "./reactComponents/TestModeBanner.js";
13
- export { Checkbox, ExtensionLoader, Honeypot, ReloadButton, SIMD_READINGS_SUBMIT_TIMEOUT_MS, TestModeBanner, buildUpdateState, getDefaultCallbacks, getDefaultEvents, getProcaptchaRandomActiveProvider, getRetryDelayMs, getSimdReadingsForSubmit, getWindowCallback, isSecureBrowserContext, pickIpMode, providerRetry, setUserCallbacks, useProcaptcha };
14
+ export { Checkbox, ExtensionLoader, Honeypot, ReloadButton, SIMD_READINGS_SUBMIT_TIMEOUT_MS, TestModeBanner, buildUpdateState, getDefaultCallbacks, getDefaultEvents, getProcaptchaRandomActiveProvider, getRetryDelayMs, getSimdReadingsForSubmit, getWindowCallback, isEventTrusted, 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,mBAAmB,CAAC;AAClC,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,mBAAmB,CAAC;AAClC,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/reactComponents/Checkbox.tsx"],"names":[],"mappings":"AAgBA,OAAO,EACN,KAAK,KAAK,EAEV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,KAAK,oBAAoB,EAEzB,KAAK,EAAE,EAGP,MAAM,OAAO,CAAC;AAEf,UAAU,aAAc,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACtE,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB;AA4CD,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAyHtC,CAAC;AACF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/reactComponents/Checkbox.tsx"],"names":[],"mappings":"AAgBA,OAAO,EACN,KAAK,KAAK,EAGV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,KAAK,oBAAoB,EAEzB,KAAK,EAAE,EAGP,MAAM,OAAO,CAAC;AAGf,UAAU,aAAc,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACtE,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB;AA0DD,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAsJtC,CAAC;AACF,eAAe,QAAQ,CAAC"}
@@ -1,4 +1,5 @@
1
- import { WIDGET_CHECKBOX_SPINNER_CSS_CLASS } from "@prosopo/widget-skeleton";
1
+ import { isEventTrusted } from "../events/trust.js";
2
+ import { WIDGET_CHECKBOX_SPINNER_CSS_CLASS, withAlpha } from "@prosopo/widget-skeleton";
2
3
  import { useMemo, useState } from "react";
3
4
  import { jsx, jsxs } from "@emotion/react/jsx-runtime";
4
5
  import { css } from "@emotion/react";
@@ -12,20 +13,26 @@ var checkboxBefore = css`{
12
13
  width: 100%;
13
14
  }
14
15
  }`;
16
+ var checkboxForcedColors = css`
17
+ @media (forced-colors: active) {
18
+ appearance: auto !important;
19
+ background-image: none !important;
20
+ }
21
+ `;
22
+ var CHECKBOX_SIZE = "28px";
15
23
  var baseStyle = {
16
- width: "28px",
17
- height: "28px",
18
- minWidth: "14px",
19
- minHeight: "14px",
24
+ width: CHECKBOX_SIZE,
25
+ height: CHECKBOX_SIZE,
26
+ minWidth: CHECKBOX_SIZE,
27
+ minHeight: CHECKBOX_SIZE,
20
28
  top: "auto",
21
29
  left: "auto",
22
30
  opacity: "1",
23
- borderRadius: "12.5%",
24
31
  appearance: "none",
25
32
  cursor: "pointer",
26
33
  margin: "0",
27
34
  borderStyle: "solid",
28
- borderWidth: "1px"
35
+ borderWidth: "2px"
29
36
  };
30
37
  var ID_LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
31
38
  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/";
@@ -33,13 +40,17 @@ var generateRandomId = () => {
33
40
  return Array.from({ length: 8 }, () => ID_LETTERS[Math.floor(Math.random() * ID_LETTERS.length)]).join("");
34
41
  };
35
42
  var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
36
- const checkboxStyleBase = {
37
- ...baseStyle,
38
- border: `1px solid ${theme.palette.background.contrastText}`
39
- };
40
43
  const [hover, setHover] = useState(false);
44
+ const checkboxFocus = useMemo(() => css`
45
+ &:focus-visible {
46
+ outline: 3px solid ${theme.palette.primary.main};
47
+ outline-offset: 2px;
48
+ }
49
+ `, [theme]);
41
50
  const ResponsiveLabel = styled.label`
42
- color: ${theme.palette.background.contrastText};
51
+ /* The label sits on the widget surface, so it takes onSurface — not the
52
+ dialog container's on-colour. */
53
+ color: ${theme.palette.onSurface};
43
54
  position: relative;
44
55
  display: flex !important;
45
56
  cursor: pointer;
@@ -63,14 +74,20 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
63
74
  }
64
75
  `;
65
76
  const checkboxStyle = useMemo(() => {
77
+ const checkImage = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='${encodeURIComponent(theme.palette.checkbox.tick)}' d='M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E")`;
78
+ const stateLayerColor = checked ? theme.palette.checkbox.fill : theme.palette.onSurface;
66
79
  return {
67
- ...checkboxStyleBase,
68
- borderColor: hover ? theme.palette.background.contrastText : theme.palette.border,
69
- appearance: checked ? "auto" : "none",
70
- flex: 1,
80
+ ...baseStyle,
71
81
  margin: "15px",
72
- minWidth: "28px",
73
- minHeight: "28px"
82
+ borderRadius: theme.shape.checkbox,
83
+ borderColor: checked ? theme.palette.checkbox.fill : theme.palette.checkbox.border,
84
+ backgroundColor: checked ? theme.palette.checkbox.fill : theme.palette.surface,
85
+ backgroundImage: checked ? checkImage : "none",
86
+ backgroundRepeat: "no-repeat",
87
+ backgroundPosition: "center",
88
+ backgroundSize: "20px 20px",
89
+ boxShadow: hover ? `0 0 0 10px ${withAlpha(stateLayerColor, theme.stateLayer.hover)}` : "none",
90
+ transition: "background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease"
74
91
  };
75
92
  }, [
76
93
  hover,
@@ -92,12 +109,16 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
92
109
  id,
93
110
  onMouseEnter: () => setHover(true),
94
111
  onMouseLeave: () => setHover(false),
95
- css: checkboxBefore,
112
+ css: [
113
+ checkboxBefore,
114
+ checkboxForcedColors,
115
+ checkboxFocus
116
+ ],
96
117
  type: "checkbox",
97
118
  "aria-live": "assertive",
98
119
  "aria-label": labelText,
99
120
  onKeyDown: (e) => {
100
- if (!e.isTrusted) return;
121
+ if (!isEventTrusted(e)) return;
101
122
  if (e.key === "Enter") {
102
123
  e.preventDefault();
103
124
  e.stopPropagation();
@@ -106,7 +127,7 @@ var Checkbox = ({ theme, onChange, checked, labelText, error, loading }) => {
106
127
  }
107
128
  },
108
129
  onChange: (e) => {
109
- if (!e.isTrusted) return;
130
+ if (!isEventTrusted(e)) return;
110
131
  e.preventDefault();
111
132
  e.stopPropagation();
112
133
  setHover(false);
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/reactComponents/Checkbox.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/reactComponents/Checkbox.tsx"],"names":[],"mappings":"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"}