@prosopo/procaptcha-common 2.13.2 → 2.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +2 -2
- package/.turbo/turbo-build$colon$tsc.log +18 -18
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +24 -0
- package/dist/cjs/reactComponents/ChallengeSurface.cjs +12 -30
- package/dist/reactComponents/ChallengeSurface.d.ts +0 -1
- package/dist/reactComponents/ChallengeSurface.d.ts.map +1 -1
- package/dist/reactComponents/ChallengeSurface.js +12 -30
- package/dist/reactComponents/ChallengeSurface.js.map +1 -1
- package/dist/tests/challengeSurfaceRender.unit.test.js +12 -0
- package/dist/tests/challengeSurfaceRender.unit.test.js.map +1 -1
- package/package.json +5 -5
- package/src/reactComponents/ChallengeSurface.tsx +17 -41
- package/src/tests/challengeSurfaceRender.unit.test.tsx +23 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-common@2.13.
|
|
2
|
+
> @prosopo/procaptcha-common@2.13.3 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -57,7 +57,7 @@ dist/cjs/index.cjs 2.45 kB │ gzip: 0.63 kB
|
|
|
57
57
|
dist/cjs/reactComponents/Reload.cjs 2.94 kB │ gzip: 1.30 kB
|
|
58
58
|
dist/cjs/state/builder.cjs 3.13 kB │ gzip: 0.84 kB
|
|
59
59
|
dist/cjs/callbacks/defaultCallbacks.cjs 3.84 kB │ gzip: 1.03 kB
|
|
60
|
+
dist/cjs/reactComponents/ChallengeSurface.cjs 5.12 kB │ gzip: 1.87 kB
|
|
60
61
|
dist/cjs/reactComponents/Checkbox.cjs 5.39 kB │ gzip: 2.12 kB
|
|
61
|
-
dist/cjs/reactComponents/ChallengeSurface.cjs 5.84 kB │ gzip: 2.07 kB
|
|
62
62
|
|
|
63
63
|
[32m✓ built in 87ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-common@2.13.
|
|
2
|
+
> @prosopo/procaptcha-common@2.13.3 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
1:49:05 PM - 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
|
-
|
|
21
|
+
1:49:05 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'
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
1:49:05 PM - 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
|
-
|
|
25
|
+
1:49:05 PM - 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
|
-
|
|
27
|
+
1:49:05 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
1:49:05 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'
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
1:49:06 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'
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
1:49:06 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/batches.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
1:49:06 PM - 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
|
-
|
|
37
|
+
1:49:06 PM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/webComponent/createWidget.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
1:49:06 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
1:49:06 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/merkle.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
1:49:06 PM - 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
|
-
|
|
45
|
+
1:49:06 PM - Project '../account/tsconfig.json' is out of date because output file '../account/tsconfig.tsbuildinfo' does not exist
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
1:49:06 PM - Building project '/home/runner/work/captcha/captcha/packages/account/tsconfig.json'...
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
1:49:09 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
1:49:09 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-common/tsconfig.json'...
|
|
52
52
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-common@2.13.
|
|
2
|
+
> @prosopo/procaptcha-common@2.13.3 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/procaptcha-common@2.13.
|
|
6
|
+
> @prosopo/procaptcha-common@2.13.3 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -61,7 +61,7 @@ dist/reactComponents/Honeypot.js 1.86 kB │ gzip: 0.89 kB
|
|
|
61
61
|
dist/reactComponents/Reload.js 2.69 kB │ gzip: 1.26 kB
|
|
62
62
|
dist/state/builder.js 3.09 kB │ gzip: 0.84 kB
|
|
63
63
|
dist/callbacks/defaultCallbacks.js 3.64 kB │ gzip: 1.00 kB
|
|
64
|
+
dist/reactComponents/ChallengeSurface.js 4.81 kB │ gzip: 1.79 kB
|
|
64
65
|
dist/reactComponents/Checkbox.js 4.87 kB │ gzip: 2.04 kB
|
|
65
|
-
dist/reactComponents/ChallengeSurface.js 5.52 kB │ gzip: 1.99 kB
|
|
66
66
|
|
|
67
|
-
[32m✓ built in
|
|
67
|
+
[32m✓ built in 98ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @prosopo/procaptcha-common
|
|
2
2
|
|
|
3
|
+
## 2.13.3
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- 124784f: Stop the image captcha losing its instruction line and top row of images on mobile.
|
|
7
|
+
|
|
8
|
+
On iOS the challenge panel was being shifted up by 100% of its own height, so
|
|
9
|
+
anything taller than half the screen ran off the top with no way to scroll back
|
|
10
|
+
to it. Users saw nine images and a Next button but no "Select all containing
|
|
11
|
+
..." prompt, which made the challenge unsolvable.
|
|
12
|
+
|
|
13
|
+
The lift was compensating for the layer underneath it being sized with
|
|
14
|
+
`100vh` — on iOS Safari that is the height the page would have if the browser
|
|
15
|
+
toolbars retracted, so the centring box was taller than the visible area and
|
|
16
|
+
pushed the panel down under the bottom bar. Sizing that box with `100dvh`
|
|
17
|
+
instead centres correctly on its own, so the lift is gone. The panel is now
|
|
18
|
+
centred as a flex item and capped at the viewport height, scrolling when it
|
|
19
|
+
does not fit rather than overflowing off both edges.
|
|
20
|
+
- Updated dependencies [0d479f9]
|
|
21
|
+
- Updated dependencies [477b4e7]
|
|
22
|
+
- Updated dependencies [e4d6f06]
|
|
23
|
+
- @prosopo/load-balancer@2.10.43
|
|
24
|
+
- @prosopo/types@5.8.2
|
|
25
|
+
- @prosopo/account@2.8.91
|
|
26
|
+
|
|
3
27
|
## 2.13.2
|
|
4
28
|
### Patch Changes
|
|
5
29
|
|
|
@@ -7,25 +7,7 @@ let react_dom = require("react-dom");
|
|
|
7
7
|
//#region src/reactComponents/ChallengeSurface.tsx
|
|
8
8
|
var SURFACE_Z_INDEX = 2147483646;
|
|
9
9
|
var CONTENT_Z_INDEX = 2147483647;
|
|
10
|
-
var
|
|
11
|
-
var IOS_LIFT_CSS = `
|
|
12
|
-
.prosopo-challenge-content--ios-lift {
|
|
13
|
-
transform: translate(-50%, -50%);
|
|
14
|
-
}
|
|
15
|
-
@supports (-webkit-touch-callout: none) {
|
|
16
|
-
.prosopo-challenge-content--ios-lift {
|
|
17
|
-
transform: translate(-50%, -100%);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
`;
|
|
21
|
-
var ensureIosLiftStyles = () => {
|
|
22
|
-
if (typeof document === "undefined") return;
|
|
23
|
-
if (document.getElementById(IOS_LIFT_STYLE_ID)) return;
|
|
24
|
-
const style = document.createElement("style");
|
|
25
|
-
style.id = IOS_LIFT_STYLE_ID;
|
|
26
|
-
style.textContent = IOS_LIFT_CSS;
|
|
27
|
-
document.head.appendChild(style);
|
|
28
|
-
};
|
|
10
|
+
var POPUP_EDGE_GAP_PX = 8;
|
|
29
11
|
var FLOAT_GAP_PX = 8;
|
|
30
12
|
var useIsomorphicLayoutEffect = typeof window === "undefined" ? react.useEffect : react.useLayoutEffect;
|
|
31
13
|
/**
|
|
@@ -42,7 +24,7 @@ var computeFloatPosition = (anchorRect, panelHeight, scrollX, scrollY) => ({
|
|
|
42
24
|
left: anchorRect.left + scrollX
|
|
43
25
|
});
|
|
44
26
|
var ChallengeSurface = react.default.memo((props) => {
|
|
45
|
-
const { show, children, placement = _prosopo_types.PlacementEnum.popup, anchor, scrim = "none", onDismiss,
|
|
27
|
+
const { show, children, placement = _prosopo_types.PlacementEnum.popup, anchor, scrim = "none", onDismiss, className } = props;
|
|
46
28
|
const contentRef = (0, react.useRef)(null);
|
|
47
29
|
const [floatPosition, setFloatPosition] = (0, react.useState)(null);
|
|
48
30
|
const isFloating = placement === _prosopo_types.PlacementEnum.float && !!anchor;
|
|
@@ -104,9 +86,6 @@ var ChallengeSurface = react.default.memo((props) => {
|
|
|
104
86
|
anchor,
|
|
105
87
|
onDismiss
|
|
106
88
|
]);
|
|
107
|
-
(0, react.useEffect)(() => {
|
|
108
|
-
if (popupIosLift && !isFloating) ensureIosLiftStyles();
|
|
109
|
-
}, [popupIosLift, isFloating]);
|
|
110
89
|
if (typeof document === "undefined") return null;
|
|
111
90
|
const layerStyle = isFloating ? {
|
|
112
91
|
position: "absolute",
|
|
@@ -124,7 +103,9 @@ var ChallengeSurface = react.default.memo((props) => {
|
|
|
124
103
|
display: show ? "flex" : "none",
|
|
125
104
|
alignItems: "center",
|
|
126
105
|
justifyContent: "center",
|
|
127
|
-
minHeight: "
|
|
106
|
+
minHeight: "100dvh",
|
|
107
|
+
padding: `${POPUP_EDGE_GAP_PX}px`,
|
|
108
|
+
boxSizing: "border-box",
|
|
128
109
|
backgroundColor: scrim === "dim" && show ? "rgba(0, 0, 0, 0.4)" : "transparent",
|
|
129
110
|
transition: "background-color 0.3s ease"
|
|
130
111
|
};
|
|
@@ -136,12 +117,13 @@ var ChallengeSurface = react.default.memo((props) => {
|
|
|
136
117
|
left: `${floatPosition?.left ?? 0}px`,
|
|
137
118
|
visibility: floatPosition ? "visible" : "hidden"
|
|
138
119
|
} : {
|
|
139
|
-
position: "
|
|
140
|
-
top: "50%",
|
|
141
|
-
left: "50%",
|
|
142
|
-
transform: popupIosLift ? void 0 : "translate(-50%, -50%)",
|
|
120
|
+
position: "relative",
|
|
143
121
|
zIndex: CONTENT_Z_INDEX,
|
|
144
|
-
boxSizing: "border-box"
|
|
122
|
+
boxSizing: "border-box",
|
|
123
|
+
maxWidth: "100%",
|
|
124
|
+
maxHeight: "100%",
|
|
125
|
+
overflowY: "auto",
|
|
126
|
+
overscrollBehavior: "contain"
|
|
145
127
|
};
|
|
146
128
|
return (0, react_dom.createPortal)(/* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("div", {
|
|
147
129
|
className: [
|
|
@@ -152,7 +134,7 @@ var ChallengeSurface = react.default.memo((props) => {
|
|
|
152
134
|
style: layerStyle,
|
|
153
135
|
children: /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("div", {
|
|
154
136
|
ref: contentRef,
|
|
155
|
-
className:
|
|
137
|
+
className: "prosopo-challenge-content",
|
|
156
138
|
style: contentStyle,
|
|
157
139
|
children
|
|
158
140
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChallengeSurface.d.ts","sourceRoot":"","sources":["../../src/reactComponents/ChallengeSurface.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,EAEb,KAAK,SAAS,EAMd,MAAM,OAAO,CAAC;AAUf,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1C,UAAU,qBAAqB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ChallengeSurface.d.ts","sourceRoot":"","sources":["../../src/reactComponents/ChallengeSurface.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,EAEb,KAAK,SAAS,EAMd,MAAM,OAAO,CAAC;AAUf,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1C,UAAU,qBAAqB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,UAAU,aAAa;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACb;AAWD,QAAA,MAAM,oBAAoB,eACb,OAAO,eACN,MAAM,WACV,MAAM,WACN,MAAM,KACb,aAKD,CAAC;AAEH,QAAA,MAAM,gBAAgB,oCAAsB,qBAAqB,8BA6K/D,CAAC;AAIH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -5,25 +5,7 @@ import { createPortal } from "react-dom";
|
|
|
5
5
|
//#region src/reactComponents/ChallengeSurface.tsx
|
|
6
6
|
var SURFACE_Z_INDEX = 2147483646;
|
|
7
7
|
var CONTENT_Z_INDEX = 2147483647;
|
|
8
|
-
var
|
|
9
|
-
var IOS_LIFT_CSS = `
|
|
10
|
-
.prosopo-challenge-content--ios-lift {
|
|
11
|
-
transform: translate(-50%, -50%);
|
|
12
|
-
}
|
|
13
|
-
@supports (-webkit-touch-callout: none) {
|
|
14
|
-
.prosopo-challenge-content--ios-lift {
|
|
15
|
-
transform: translate(-50%, -100%);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
`;
|
|
19
|
-
var ensureIosLiftStyles = () => {
|
|
20
|
-
if (typeof document === "undefined") return;
|
|
21
|
-
if (document.getElementById(IOS_LIFT_STYLE_ID)) return;
|
|
22
|
-
const style = document.createElement("style");
|
|
23
|
-
style.id = IOS_LIFT_STYLE_ID;
|
|
24
|
-
style.textContent = IOS_LIFT_CSS;
|
|
25
|
-
document.head.appendChild(style);
|
|
26
|
-
};
|
|
8
|
+
var POPUP_EDGE_GAP_PX = 8;
|
|
27
9
|
var FLOAT_GAP_PX = 8;
|
|
28
10
|
var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
29
11
|
/**
|
|
@@ -40,7 +22,7 @@ var computeFloatPosition = (anchorRect, panelHeight, scrollX, scrollY) => ({
|
|
|
40
22
|
left: anchorRect.left + scrollX
|
|
41
23
|
});
|
|
42
24
|
var ChallengeSurface = React.memo((props) => {
|
|
43
|
-
const { show, children, placement = PlacementEnum.popup, anchor, scrim = "none", onDismiss,
|
|
25
|
+
const { show, children, placement = PlacementEnum.popup, anchor, scrim = "none", onDismiss, className } = props;
|
|
44
26
|
const contentRef = useRef(null);
|
|
45
27
|
const [floatPosition, setFloatPosition] = useState(null);
|
|
46
28
|
const isFloating = placement === PlacementEnum.float && !!anchor;
|
|
@@ -102,9 +84,6 @@ var ChallengeSurface = React.memo((props) => {
|
|
|
102
84
|
anchor,
|
|
103
85
|
onDismiss
|
|
104
86
|
]);
|
|
105
|
-
useEffect(() => {
|
|
106
|
-
if (popupIosLift && !isFloating) ensureIosLiftStyles();
|
|
107
|
-
}, [popupIosLift, isFloating]);
|
|
108
87
|
if (typeof document === "undefined") return null;
|
|
109
88
|
const layerStyle = isFloating ? {
|
|
110
89
|
position: "absolute",
|
|
@@ -122,7 +101,9 @@ var ChallengeSurface = React.memo((props) => {
|
|
|
122
101
|
display: show ? "flex" : "none",
|
|
123
102
|
alignItems: "center",
|
|
124
103
|
justifyContent: "center",
|
|
125
|
-
minHeight: "
|
|
104
|
+
minHeight: "100dvh",
|
|
105
|
+
padding: `${POPUP_EDGE_GAP_PX}px`,
|
|
106
|
+
boxSizing: "border-box",
|
|
126
107
|
backgroundColor: scrim === "dim" && show ? "rgba(0, 0, 0, 0.4)" : "transparent",
|
|
127
108
|
transition: "background-color 0.3s ease"
|
|
128
109
|
};
|
|
@@ -134,12 +115,13 @@ var ChallengeSurface = React.memo((props) => {
|
|
|
134
115
|
left: `${floatPosition?.left ?? 0}px`,
|
|
135
116
|
visibility: floatPosition ? "visible" : "hidden"
|
|
136
117
|
} : {
|
|
137
|
-
position: "
|
|
138
|
-
top: "50%",
|
|
139
|
-
left: "50%",
|
|
140
|
-
transform: popupIosLift ? void 0 : "translate(-50%, -50%)",
|
|
118
|
+
position: "relative",
|
|
141
119
|
zIndex: CONTENT_Z_INDEX,
|
|
142
|
-
boxSizing: "border-box"
|
|
120
|
+
boxSizing: "border-box",
|
|
121
|
+
maxWidth: "100%",
|
|
122
|
+
maxHeight: "100%",
|
|
123
|
+
overflowY: "auto",
|
|
124
|
+
overscrollBehavior: "contain"
|
|
143
125
|
};
|
|
144
126
|
return createPortal(/* @__PURE__ */ jsx("div", {
|
|
145
127
|
className: [
|
|
@@ -150,7 +132,7 @@ var ChallengeSurface = React.memo((props) => {
|
|
|
150
132
|
style: layerStyle,
|
|
151
133
|
children: /* @__PURE__ */ jsx("div", {
|
|
152
134
|
ref: contentRef,
|
|
153
|
-
className:
|
|
135
|
+
className: "prosopo-challenge-content",
|
|
154
136
|
style: contentStyle,
|
|
155
137
|
children
|
|
156
138
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChallengeSurface.js","sourceRoot":"","sources":["../../src/reactComponents/ChallengeSurface.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,EAGb,WAAW,EACX,SAAS,EACT,eAAe,EACf,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ChallengeSurface.js","sourceRoot":"","sources":["../../src/reactComponents/ChallengeSurface.tsx"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,18 @@ describe("popup", () => {
|
|
|
47
47
|
expect(layer()?.style.display).toBe("flex");
|
|
48
48
|
expect(layer()?.style.pointerEvents).toBe("");
|
|
49
49
|
});
|
|
50
|
+
it("keeps a tall challenge inside the viewport rather than clipping its top", () => {
|
|
51
|
+
render({ placement: PlacementEnum.popup });
|
|
52
|
+
const style = content()?.style;
|
|
53
|
+
expect(style?.position).not.toBe("absolute");
|
|
54
|
+
expect(style?.transform).toBe("");
|
|
55
|
+
expect(style?.maxHeight).toBe("100%");
|
|
56
|
+
expect(style?.overflowY).toBe("auto");
|
|
57
|
+
});
|
|
58
|
+
it("sizes the layer to the visible viewport, not the retracted-toolbar one", () => {
|
|
59
|
+
render({ placement: PlacementEnum.popup });
|
|
60
|
+
expect(layer()?.style.minHeight).toBe("100dvh");
|
|
61
|
+
});
|
|
50
62
|
it("ignores an outside click", () => {
|
|
51
63
|
const onDismiss = vi.fn();
|
|
52
64
|
render({ placement: PlacementEnum.popup, onDismiss });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challengeSurfaceRender.unit.test.js","sourceRoot":"","sources":["../../src/tests/challengeSurfaceRender.unit.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"challengeSurfaceRender.unit.test.js","sourceRoot":"","sources":["../../src/tests/challengeSurfaceRender.unit.test.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/procaptcha-common",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.3",
|
|
4
4
|
"author": "PROSOPO LIMITED <info@prosopo.io>",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@emotion/react": "11.14.0",
|
|
36
36
|
"@emotion/styled": "11.14.1",
|
|
37
|
-
"@prosopo/account": "2.8.
|
|
38
|
-
"@prosopo/load-balancer": "2.10.
|
|
39
|
-
"@prosopo/types": "5.8.
|
|
37
|
+
"@prosopo/account": "2.8.91",
|
|
38
|
+
"@prosopo/load-balancer": "2.10.43",
|
|
39
|
+
"@prosopo/types": "5.8.2",
|
|
40
40
|
"@prosopo/widget-skeleton": "2.8.7",
|
|
41
41
|
"react": "19.2.8",
|
|
42
42
|
"react-dom": "19.2.8"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@prosopo/config": "3.3.
|
|
45
|
+
"@prosopo/config": "3.3.16",
|
|
46
46
|
"@types/jsdom": "30.0.0",
|
|
47
47
|
"@types/node": "22.10.2",
|
|
48
48
|
"@types/react": "19.2.18",
|
|
@@ -42,37 +42,13 @@ interface ChallengeSurfaceProps {
|
|
|
42
42
|
scrim?: SurfaceScrim;
|
|
43
43
|
/** Called on Escape, and on an outside click when floating. */
|
|
44
44
|
onDismiss?: () => void;
|
|
45
|
-
/** Lifts the popup content on iOS, where Safari's bottom bar overlaps a centred dialog. */
|
|
46
|
-
popupIosLift?: boolean;
|
|
47
45
|
className?: string;
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
const SURFACE_Z_INDEX = 2147483646;
|
|
51
49
|
const CONTENT_Z_INDEX = 2147483647;
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
const IOS_LIFT_STYLE_ID = "prosopo-challenge-surface-ios-lift";
|
|
55
|
-
|
|
56
|
-
const IOS_LIFT_CSS = `
|
|
57
|
-
.prosopo-challenge-content--ios-lift {
|
|
58
|
-
transform: translate(-50%, -50%);
|
|
59
|
-
}
|
|
60
|
-
@supports (-webkit-touch-callout: none) {
|
|
61
|
-
.prosopo-challenge-content--ios-lift {
|
|
62
|
-
transform: translate(-50%, -100%);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
`;
|
|
66
|
-
|
|
67
|
-
const ensureIosLiftStyles = (): void => {
|
|
68
|
-
if (typeof document === "undefined") return;
|
|
69
|
-
if (document.getElementById(IOS_LIFT_STYLE_ID)) return;
|
|
70
|
-
|
|
71
|
-
const style = document.createElement("style");
|
|
72
|
-
style.id = IOS_LIFT_STYLE_ID;
|
|
73
|
-
style.textContent = IOS_LIFT_CSS;
|
|
74
|
-
document.head.appendChild(style);
|
|
75
|
-
};
|
|
51
|
+
const POPUP_EDGE_GAP_PX = 8;
|
|
76
52
|
|
|
77
53
|
const FLOAT_GAP_PX = 8;
|
|
78
54
|
|
|
@@ -113,7 +89,6 @@ const ChallengeSurface = React.memo((props: ChallengeSurfaceProps) => {
|
|
|
113
89
|
anchor,
|
|
114
90
|
scrim = "none",
|
|
115
91
|
onDismiss,
|
|
116
|
-
popupIosLift = false,
|
|
117
92
|
className,
|
|
118
93
|
} = props;
|
|
119
94
|
|
|
@@ -198,10 +173,6 @@ const ChallengeSurface = React.memo((props: ChallengeSurfaceProps) => {
|
|
|
198
173
|
return () => document.removeEventListener("pointerdown", onPointerDown);
|
|
199
174
|
}, [show, isFloating, anchor, onDismiss]);
|
|
200
175
|
|
|
201
|
-
useEffect(() => {
|
|
202
|
-
if (popupIosLift && !isFloating) ensureIosLiftStyles();
|
|
203
|
-
}, [popupIosLift, isFloating]);
|
|
204
|
-
|
|
205
176
|
if (typeof document === "undefined") return null;
|
|
206
177
|
|
|
207
178
|
const layerStyle: CSSProperties = isFloating
|
|
@@ -227,7 +198,12 @@ const ChallengeSurface = React.memo((props: ChallengeSurfaceProps) => {
|
|
|
227
198
|
display: show ? "flex" : "none",
|
|
228
199
|
alignItems: "center",
|
|
229
200
|
justifyContent: "center",
|
|
230
|
-
|
|
201
|
+
// `dvh`, not `vh`: on iOS Safari `100vh` is the toolbar-retracted
|
|
202
|
+
// height, which would make this box taller than the visible area and
|
|
203
|
+
// centre the challenge underneath the bottom bar.
|
|
204
|
+
minHeight: "100dvh",
|
|
205
|
+
padding: `${POPUP_EDGE_GAP_PX}px`,
|
|
206
|
+
boxSizing: "border-box",
|
|
231
207
|
backgroundColor:
|
|
232
208
|
scrim === "dim" && show ? "rgba(0, 0, 0, 0.4)" : "transparent",
|
|
233
209
|
transition: "background-color 0.3s ease",
|
|
@@ -244,13 +220,17 @@ const ChallengeSurface = React.memo((props: ChallengeSurfaceProps) => {
|
|
|
244
220
|
visibility: floatPosition ? "visible" : "hidden",
|
|
245
221
|
}
|
|
246
222
|
: {
|
|
247
|
-
|
|
248
|
-
top:
|
|
249
|
-
|
|
250
|
-
//
|
|
251
|
-
|
|
223
|
+
// Centred as a flex item by the layer rather than by
|
|
224
|
+
// `top/left: 50%` and a translate. An out-of-flow panel taller than
|
|
225
|
+
// the viewport overflows off both edges and its top is unreachable;
|
|
226
|
+
// in flow it is bounded by `maxHeight` and scrolls instead.
|
|
227
|
+
position: "relative",
|
|
252
228
|
zIndex: CONTENT_Z_INDEX,
|
|
253
229
|
boxSizing: "border-box",
|
|
230
|
+
maxWidth: "100%",
|
|
231
|
+
maxHeight: "100%",
|
|
232
|
+
overflowY: "auto",
|
|
233
|
+
overscrollBehavior: "contain",
|
|
254
234
|
};
|
|
255
235
|
|
|
256
236
|
return createPortal(
|
|
@@ -266,11 +246,7 @@ const ChallengeSurface = React.memo((props: ChallengeSurfaceProps) => {
|
|
|
266
246
|
>
|
|
267
247
|
<div
|
|
268
248
|
ref={contentRef}
|
|
269
|
-
className=
|
|
270
|
-
popupIosLift && !isFloating
|
|
271
|
-
? "prosopo-challenge-content prosopo-challenge-content--ios-lift"
|
|
272
|
-
: "prosopo-challenge-content"
|
|
273
|
-
}
|
|
249
|
+
className="prosopo-challenge-content"
|
|
274
250
|
style={contentStyle}
|
|
275
251
|
>
|
|
276
252
|
{children}
|
|
@@ -100,6 +100,29 @@ describe("popup", () => {
|
|
|
100
100
|
expect(layer()?.style.pointerEvents).toBe("");
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
+
it("keeps a tall challenge inside the viewport rather than clipping its top", () => {
|
|
104
|
+
// A panel taller than the viewport used to be translated out of flow by
|
|
105
|
+
// its own full height, putting the instruction ("Select all containing
|
|
106
|
+
// ...") and the first row of images above the top of the screen with no
|
|
107
|
+
// way to scroll back to them. In flow it is bounded and scrolls instead.
|
|
108
|
+
render({ placement: PlacementEnum.popup });
|
|
109
|
+
|
|
110
|
+
const style = content()?.style;
|
|
111
|
+
expect(style?.position).not.toBe("absolute");
|
|
112
|
+
expect(style?.transform).toBe("");
|
|
113
|
+
expect(style?.maxHeight).toBe("100%");
|
|
114
|
+
expect(style?.overflowY).toBe("auto");
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("sizes the layer to the visible viewport, not the retracted-toolbar one", () => {
|
|
118
|
+
// `100vh` on iOS Safari is the toolbar-retracted height. Forcing the
|
|
119
|
+
// centring box to it put the challenge's lower half under the bottom bar,
|
|
120
|
+
// which is what the removed translate hack was compensating for.
|
|
121
|
+
render({ placement: PlacementEnum.popup });
|
|
122
|
+
|
|
123
|
+
expect(layer()?.style.minHeight).toBe("100dvh");
|
|
124
|
+
});
|
|
125
|
+
|
|
103
126
|
it("ignores an outside click", () => {
|
|
104
127
|
const onDismiss = vi.fn();
|
|
105
128
|
render({ placement: PlacementEnum.popup, onDismiss });
|