@prosopo/procaptcha-puzzle 2.10.51 → 2.10.53
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 +7 -7
- package/.turbo/turbo-build$colon$tsc.log +19 -19
- package/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +21 -0
- package/dist/cjs/components/ProcaptchaWidget.cjs +3 -2
- package/dist/cjs/components/PuzzleCanvas.cjs +114 -24
- package/dist/components/ProcaptchaWidget.d.ts.map +1 -1
- package/dist/components/ProcaptchaWidget.js +3 -2
- package/dist/components/ProcaptchaWidget.js.map +1 -1
- package/dist/components/PuzzleCanvas.d.ts +4 -3
- package/dist/components/PuzzleCanvas.d.ts.map +1 -1
- package/dist/components/PuzzleCanvas.js +114 -24
- package/dist/components/PuzzleCanvas.js.map +1 -1
- package/dist/tests/managerHarness.js +3 -3
- package/dist/tests/managerHarness.js.map +1 -1
- package/dist/tests/procaptchaPuzzle.test-d.js +6 -4
- package/dist/tests/procaptchaPuzzle.test-d.js.map +1 -1
- package/dist/tests/procaptchaWidget.unit.test.js +6 -3
- package/dist/tests/procaptchaWidget.unit.test.js.map +1 -1
- package/dist/tests/puzzleCanvas.unit.test.js +4 -3
- package/dist/tests/puzzleCanvas.unit.test.js.map +1 -1
- package/package.json +5 -5
- package/src/components/ProcaptchaWidget.tsx +3 -2
- package/src/components/PuzzleCanvas.tsx +108 -32
- package/src/tests/managerHarness.ts +3 -3
- package/src/tests/procaptchaPuzzle.test-d.ts +7 -5
- package/src/tests/procaptchaWidget.unit.test.ts +12 -7
- package/src/tests/puzzleCanvas.unit.test.ts +7 -5
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-puzzle@2.10.
|
|
2
|
+
> @prosopo/procaptcha-puzzle@2.10.53 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -46,10 +46,10 @@ Bundle build started
|
|
|
46
46
|
✓ 6 modules transformed.
|
|
47
47
|
rendering chunks...
|
|
48
48
|
computing gzip size...
|
|
49
|
-
dist/cjs/index.cjs
|
|
50
|
-
dist/cjs/components/ProcaptchaPuzzle.cjs
|
|
51
|
-
dist/cjs/components/ProcaptchaWidget.cjs
|
|
52
|
-
dist/cjs/
|
|
53
|
-
dist/cjs/
|
|
49
|
+
dist/cjs/index.cjs 0.22 kB │ gzip: 0.15 kB
|
|
50
|
+
dist/cjs/components/ProcaptchaPuzzle.cjs 0.52 kB │ gzip: 0.27 kB
|
|
51
|
+
dist/cjs/components/ProcaptchaWidget.cjs 7.05 kB │ gzip: 1.96 kB
|
|
52
|
+
dist/cjs/services/Manager.cjs 9.00 kB │ gzip: 2.48 kB
|
|
53
|
+
dist/cjs/components/PuzzleCanvas.cjs 10.36 kB │ gzip: 2.95 kB
|
|
54
54
|
|
|
55
|
-
[32m✓ built in
|
|
55
|
+
[32m✓ built in 75ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-puzzle@2.10.
|
|
2
|
+
> @prosopo/procaptcha-puzzle@2.10.53 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
12:13:08 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../locale/tsconfig.json
|
|
8
8
|
* ../util/tsconfig.json
|
|
@@ -20,37 +20,37 @@
|
|
|
20
20
|
* ../procaptcha-common/tsconfig.json
|
|
21
21
|
* tsconfig.json
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
12:13:08 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'
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
12:13:08 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
12:13:08 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
12:13:08 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
|
+
12:13:08 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
|
+
12:13:08 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
12:13:08 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
12:13:08 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
12:13:08 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'
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
12:13:08 PM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/constants.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
12:13:08 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
12:13:08 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
12:13:08 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/pair/decode.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
12:13:08 PM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/index.ts' is older than output '../account/tsconfig.tsbuildinfo'
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
12:13:08 PM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/extensionLoader.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
12:13:08 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
12:13:08 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-puzzle/tsconfig.json'...
|
|
56
56
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-puzzle@2.10.
|
|
2
|
+
> @prosopo/procaptcha-puzzle@2.10.53 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/procaptcha-puzzle@2.10.
|
|
6
|
+
> @prosopo/procaptcha-puzzle@2.10.53 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -53,8 +53,8 @@ computing gzip size...
|
|
|
53
53
|
dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
|
|
54
54
|
dist/index.js 0.14 kB │ gzip: 0.11 kB
|
|
55
55
|
dist/components/ProcaptchaPuzzle.js 0.38 kB │ gzip: 0.24 kB
|
|
56
|
-
dist/components/ProcaptchaWidget.js 6.
|
|
57
|
-
dist/components/PuzzleCanvas.js 7.76 kB │ gzip: 2.37 kB
|
|
56
|
+
dist/components/ProcaptchaWidget.js 6.54 kB │ gzip: 1.94 kB
|
|
58
57
|
dist/services/Manager.js 8.48 kB │ gzip: 2.44 kB
|
|
58
|
+
dist/components/PuzzleCanvas.js 9.86 kB │ gzip: 2.92 kB
|
|
59
59
|
|
|
60
|
-
[32m✓ built in
|
|
60
|
+
[32m✓ built in 64ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @prosopo/procaptcha-puzzle
|
|
2
2
|
|
|
3
|
+
## 2.10.53
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [ae475a5]
|
|
7
|
+
- @prosopo/types@5.2.2
|
|
8
|
+
- @prosopo/api@4.0.10
|
|
9
|
+
- @prosopo/procaptcha-common@2.11.30
|
|
10
|
+
|
|
11
|
+
## 2.10.52
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 35f640f: Render puzzle captcha imagery on the provider instead of sending the answer to the client.
|
|
15
|
+
|
|
16
|
+
The challenge used to carry `targetX`/`targetY` and the widget drew the target box straight from them, so any HTTP client could echo the coordinates back as its solution and pass without a browser. The provider now synthesises a background procedurally, cuts the notch into the pixels, and returns the background and piece as data URIs; the target and the tolerance never leave the server.
|
|
17
|
+
|
|
18
|
+
Backgrounds come from the new `@prosopo/puzzle-assets` package and are single-use — reusing one across two challenges would let an attacker diff the composites and recover both notch positions.
|
|
19
|
+
- Updated dependencies [35f640f]
|
|
20
|
+
- @prosopo/types@5.2.1
|
|
21
|
+
- @prosopo/api@4.0.9
|
|
22
|
+
- @prosopo/procaptcha-common@2.11.29
|
|
23
|
+
|
|
3
24
|
## 2.10.51
|
|
4
25
|
### Patch Changes
|
|
5
26
|
|
|
@@ -142,8 +142,9 @@ var Procaptcha = (props) => {
|
|
|
142
142
|
showPuzzleOverlay && /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)(require_PuzzleCanvas.PuzzleCanvas, {
|
|
143
143
|
originX: challengeData.originX,
|
|
144
144
|
originY: challengeData.originY,
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
background: challengeData.background,
|
|
146
|
+
piece: challengeData.piece,
|
|
147
|
+
pieceSize: challengeData.pieceSize,
|
|
147
148
|
onComplete: handlePuzzleComplete,
|
|
148
149
|
showRetry,
|
|
149
150
|
submitting: puzzlePhase === "submitting",
|
|
@@ -3,8 +3,6 @@ let _emotion_react_jsx_runtime = require("@emotion/react/jsx-runtime");
|
|
|
3
3
|
//#region src/components/PuzzleCanvas.tsx
|
|
4
4
|
var CONTAINER_WIDTH = 300;
|
|
5
5
|
var CONTAINER_HEIGHT = 200;
|
|
6
|
-
var TARGET_SIZE = 30;
|
|
7
|
-
var PIECE_SIZE = 24;
|
|
8
6
|
var SHAKE_KEYFRAMES = `
|
|
9
7
|
@keyframes prosopo-puzzle-shake {
|
|
10
8
|
0%, 100% { transform: translateX(0); }
|
|
@@ -12,10 +10,11 @@ var SHAKE_KEYFRAMES = `
|
|
|
12
10
|
20%, 40%, 60%, 80% { transform: translateX(4px); }
|
|
13
11
|
}
|
|
14
12
|
`;
|
|
15
|
-
var PuzzleCanvas = ({ originX, originY,
|
|
13
|
+
var PuzzleCanvas = ({ originX, originY, background, piece, pieceSize, onComplete, showRetry, submitting, theme }) => {
|
|
16
14
|
const [posX, setPosX] = (0, react.useState)(originX);
|
|
17
15
|
const [posY, setPosY] = (0, react.useState)(originY);
|
|
18
16
|
const isDragging = (0, react.useRef)(false);
|
|
17
|
+
const [dragging, setDragging] = (0, react.useState)(false);
|
|
19
18
|
const puzzleEvents = (0, react.useRef)([]);
|
|
20
19
|
const containerRef = (0, react.useRef)(null);
|
|
21
20
|
const offsetRef = (0, react.useRef)({
|
|
@@ -72,6 +71,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
72
71
|
const handleEndEvent = (0, react.useCallback)(() => {
|
|
73
72
|
if (!isDragging.current) return;
|
|
74
73
|
isDragging.current = false;
|
|
74
|
+
setDragging(false);
|
|
75
75
|
const currentEvents = [...puzzleEvents.current];
|
|
76
76
|
const lastEvent = currentEvents[currentEvents.length - 1];
|
|
77
77
|
onComplete(lastEvent ? lastEvent.x : originX, lastEvent ? lastEvent.y : originY, currentEvents);
|
|
@@ -113,6 +113,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
113
113
|
const handlePieceMouseDown = (0, react.useCallback)((event) => {
|
|
114
114
|
if (submitting) return;
|
|
115
115
|
isDragging.current = true;
|
|
116
|
+
setDragging(true);
|
|
116
117
|
puzzleEvents.current = [];
|
|
117
118
|
const containerOffset = getContainerOffset();
|
|
118
119
|
offsetRef.current = {
|
|
@@ -130,6 +131,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
130
131
|
const touch = event.touches[0];
|
|
131
132
|
if (touch) {
|
|
132
133
|
isDragging.current = true;
|
|
134
|
+
setDragging(true);
|
|
133
135
|
puzzleEvents.current = [];
|
|
134
136
|
const containerOffset = getContainerOffset();
|
|
135
137
|
offsetRef.current = {
|
|
@@ -147,7 +149,18 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
147
149
|
const headerBorderColor = showRetry ? theme.palette.error.main : "transparent";
|
|
148
150
|
const headerTextColor = showRetry ? theme.palette.error.main : theme.palette.onSurface;
|
|
149
151
|
const puzzleAreaBg = `linear-gradient(135deg, ${theme.palette.surface} 0%, ${theme.palette.primaryContainer.main} 50%, ${theme.palette.surface} 100%)`;
|
|
150
|
-
const
|
|
152
|
+
const deltaX = posX - originX;
|
|
153
|
+
const deltaY = posY - originY;
|
|
154
|
+
const dragDistance = Math.hypot(deltaX, deltaY);
|
|
155
|
+
const PARALLAX_FACTOR = .08;
|
|
156
|
+
const bgTranslateX = dragging ? -deltaX * PARALLAX_FACTOR : 0;
|
|
157
|
+
const bgTranslateY = dragging ? -deltaY * PARALLAX_FACTOR : 0;
|
|
158
|
+
const bgScale = dragging ? 1.03 : 1;
|
|
159
|
+
const hueShift = dragging ? Math.max(-18, Math.min(18, deltaX * .12)) : 0;
|
|
160
|
+
const satBoost = dragging ? 1 + Math.min(.25, dragDistance * .0035) : 1;
|
|
161
|
+
const brightness = dragging ? 1 - Math.min(.06, dragDistance * 8e-4) : 1;
|
|
162
|
+
const bgFilter = `hue-rotate(${hueShift.toFixed(2)}deg) saturate(${satBoost.toFixed(3)}) brightness(${brightness.toFixed(3)})`;
|
|
163
|
+
const bgTransform = `translate(${bgTranslateX.toFixed(2)}px, ${bgTranslateY.toFixed(2)}px) scale(${bgScale.toFixed(3)})`;
|
|
151
164
|
return /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsxs)("div", {
|
|
152
165
|
style: {
|
|
153
166
|
position: "fixed",
|
|
@@ -201,33 +214,110 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
201
214
|
pointerEvents: submitting ? "none" : "auto",
|
|
202
215
|
transition: "opacity 0.2s ease"
|
|
203
216
|
},
|
|
204
|
-
children: [/* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("div", {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
217
|
+
children: [/* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("div", {
|
|
218
|
+
style: {
|
|
219
|
+
position: "absolute",
|
|
220
|
+
left: `-${CONTAINER_WIDTH}px`,
|
|
221
|
+
top: `-${CONTAINER_HEIGHT}px`,
|
|
222
|
+
width: `${CONTAINER_WIDTH * 3}px`,
|
|
223
|
+
height: `${CONTAINER_HEIGHT * 3}px`,
|
|
224
|
+
pointerEvents: "none",
|
|
225
|
+
userSelect: "none",
|
|
226
|
+
transform: bgTransform,
|
|
227
|
+
transformOrigin: "center center",
|
|
228
|
+
filter: bgFilter,
|
|
229
|
+
transition: dragging ? "none" : "transform 0.35s cubic-bezier(0.22, 1, 0.36, 1), filter 0.35s ease",
|
|
230
|
+
willChange: "transform, filter"
|
|
231
|
+
},
|
|
232
|
+
children: [
|
|
233
|
+
[
|
|
234
|
+
0,
|
|
235
|
+
0,
|
|
236
|
+
-1,
|
|
237
|
+
-1
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
1,
|
|
241
|
+
0,
|
|
242
|
+
1,
|
|
243
|
+
-1
|
|
244
|
+
],
|
|
245
|
+
[
|
|
246
|
+
2,
|
|
247
|
+
0,
|
|
248
|
+
-1,
|
|
249
|
+
-1
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
0,
|
|
253
|
+
1,
|
|
254
|
+
-1,
|
|
255
|
+
1
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
1,
|
|
259
|
+
1,
|
|
260
|
+
1,
|
|
261
|
+
1
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
2,
|
|
265
|
+
1,
|
|
266
|
+
-1,
|
|
267
|
+
1
|
|
268
|
+
],
|
|
269
|
+
[
|
|
270
|
+
0,
|
|
271
|
+
2,
|
|
272
|
+
-1,
|
|
273
|
+
-1
|
|
274
|
+
],
|
|
275
|
+
[
|
|
276
|
+
1,
|
|
277
|
+
2,
|
|
278
|
+
1,
|
|
279
|
+
-1
|
|
280
|
+
],
|
|
281
|
+
[
|
|
282
|
+
2,
|
|
283
|
+
2,
|
|
284
|
+
-1,
|
|
285
|
+
-1
|
|
286
|
+
]
|
|
287
|
+
].map(([col, row, sx, sy]) => {
|
|
288
|
+
const key = `${col}-${row}`;
|
|
289
|
+
return /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("img", {
|
|
290
|
+
src: background,
|
|
291
|
+
alt: "",
|
|
292
|
+
draggable: false,
|
|
293
|
+
style: {
|
|
294
|
+
position: "absolute",
|
|
295
|
+
left: `${(col ?? 0) * CONTAINER_WIDTH}px`,
|
|
296
|
+
top: `${(row ?? 0) * CONTAINER_HEIGHT}px`,
|
|
297
|
+
width: `${CONTAINER_WIDTH}px`,
|
|
298
|
+
height: `${CONTAINER_HEIGHT}px`,
|
|
299
|
+
transform: `scale(${sx}, ${sy})`,
|
|
300
|
+
pointerEvents: "none",
|
|
301
|
+
userSelect: "none"
|
|
302
|
+
}
|
|
303
|
+
}, key);
|
|
304
|
+
})
|
|
305
|
+
}), /* @__PURE__ */ (0, _emotion_react_jsx_runtime.jsx)("div", {
|
|
215
306
|
...process.env.NODE_ENV !== "production" && { "data-cy": "prosopo-puzzle-piece" },
|
|
216
307
|
onMouseDown: handlePieceMouseDown,
|
|
217
308
|
onTouchStart: handlePieceTouchStart,
|
|
218
309
|
style: {
|
|
219
310
|
position: "absolute",
|
|
220
|
-
left: `${posX -
|
|
221
|
-
top: `${posY -
|
|
222
|
-
width: `${
|
|
223
|
-
height: `${
|
|
224
|
-
|
|
225
|
-
|
|
311
|
+
left: `${posX - pieceSize / 2}px`,
|
|
312
|
+
top: `${posY - pieceSize / 2}px`,
|
|
313
|
+
width: `${pieceSize}px`,
|
|
314
|
+
height: `${pieceSize}px`,
|
|
315
|
+
backgroundImage: `url(${piece})`,
|
|
316
|
+
backgroundSize: "100% 100%",
|
|
226
317
|
touchAction: "none",
|
|
227
318
|
cursor: submitting ? "default" : isDragging.current ? "grabbing" : "grab",
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
transition: isDragging.current ? "none" : "outline 0.2s ease, left 0.3s ease, top 0.3s ease"
|
|
319
|
+
filter: isDragging.current ? "drop-shadow(0 4px 10px rgba(0, 0, 0, 0.45))" : "drop-shadow(0 2px 5px rgba(0, 0, 0, 0.35))",
|
|
320
|
+
transition: isDragging.current ? "none" : "filter 0.2s ease, left 0.3s ease, top 0.3s ease"
|
|
231
321
|
}
|
|
232
322
|
})]
|
|
233
323
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,QAAA,MAAM,UAAU,UAAW,eAAe,
|
|
1
|
+
{"version":3,"file":"ProcaptchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,QAAA,MAAM,UAAU,UAAW,eAAe,qDA4QzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -143,8 +143,9 @@ var Procaptcha = (props) => {
|
|
|
143
143
|
showPuzzleOverlay && /* @__PURE__ */ jsx(PuzzleCanvas, {
|
|
144
144
|
originX: challengeData.originX,
|
|
145
145
|
originY: challengeData.originY,
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
background: challengeData.background,
|
|
147
|
+
piece: challengeData.piece,
|
|
148
|
+
pieceSize: challengeData.pieceSize,
|
|
148
149
|
onComplete: handlePuzzleComplete,
|
|
149
150
|
showRetry,
|
|
150
151
|
submitting: puzzlePhase === "submitting",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcaptchaWidget.js","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProcaptchaWidget.js","sourceRoot":"","sources":["../../src/components/ProcaptchaWidget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,14 @@ import type { Theme } from "@prosopo/widget-skeleton";
|
|
|
3
3
|
interface PuzzleCanvasProps {
|
|
4
4
|
originX: number;
|
|
5
5
|
originY: number;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
background: string;
|
|
7
|
+
piece: string;
|
|
8
|
+
pieceSize: number;
|
|
8
9
|
onComplete: (finalX: number, finalY: number, puzzleEvents: PuzzleEvent[]) => void;
|
|
9
10
|
showRetry: boolean;
|
|
10
11
|
submitting: boolean;
|
|
11
12
|
theme: Theme;
|
|
12
13
|
}
|
|
13
|
-
export declare const PuzzleCanvas: ({ originX, originY,
|
|
14
|
+
export declare const PuzzleCanvas: ({ originX, originY, background, piece, pieceSize, onComplete, showRetry, submitting, theme, }: PuzzleCanvasProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
14
15
|
export {};
|
|
15
16
|
//# sourceMappingURL=PuzzleCanvas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PuzzleCanvas.d.ts","sourceRoot":"","sources":["../../src/components/PuzzleCanvas.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGtD,UAAU,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PuzzleCanvas.d.ts","sourceRoot":"","sources":["../../src/components/PuzzleCanvas.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGtD,UAAU,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,EAAE,KACvB,IAAI,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;CACb;AAaD,eAAO,MAAM,YAAY,kGAUtB,iBAAiB,qDAwXnB,CAAC"}
|
|
@@ -3,8 +3,6 @@ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
|
|
|
3
3
|
//#region src/components/PuzzleCanvas.tsx
|
|
4
4
|
var CONTAINER_WIDTH = 300;
|
|
5
5
|
var CONTAINER_HEIGHT = 200;
|
|
6
|
-
var TARGET_SIZE = 30;
|
|
7
|
-
var PIECE_SIZE = 24;
|
|
8
6
|
var SHAKE_KEYFRAMES = `
|
|
9
7
|
@keyframes prosopo-puzzle-shake {
|
|
10
8
|
0%, 100% { transform: translateX(0); }
|
|
@@ -12,10 +10,11 @@ var SHAKE_KEYFRAMES = `
|
|
|
12
10
|
20%, 40%, 60%, 80% { transform: translateX(4px); }
|
|
13
11
|
}
|
|
14
12
|
`;
|
|
15
|
-
var PuzzleCanvas = ({ originX, originY,
|
|
13
|
+
var PuzzleCanvas = ({ originX, originY, background, piece, pieceSize, onComplete, showRetry, submitting, theme }) => {
|
|
16
14
|
const [posX, setPosX] = useState(originX);
|
|
17
15
|
const [posY, setPosY] = useState(originY);
|
|
18
16
|
const isDragging = useRef(false);
|
|
17
|
+
const [dragging, setDragging] = useState(false);
|
|
19
18
|
const puzzleEvents = useRef([]);
|
|
20
19
|
const containerRef = useRef(null);
|
|
21
20
|
const offsetRef = useRef({
|
|
@@ -72,6 +71,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
72
71
|
const handleEndEvent = useCallback(() => {
|
|
73
72
|
if (!isDragging.current) return;
|
|
74
73
|
isDragging.current = false;
|
|
74
|
+
setDragging(false);
|
|
75
75
|
const currentEvents = [...puzzleEvents.current];
|
|
76
76
|
const lastEvent = currentEvents[currentEvents.length - 1];
|
|
77
77
|
onComplete(lastEvent ? lastEvent.x : originX, lastEvent ? lastEvent.y : originY, currentEvents);
|
|
@@ -113,6 +113,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
113
113
|
const handlePieceMouseDown = useCallback((event) => {
|
|
114
114
|
if (submitting) return;
|
|
115
115
|
isDragging.current = true;
|
|
116
|
+
setDragging(true);
|
|
116
117
|
puzzleEvents.current = [];
|
|
117
118
|
const containerOffset = getContainerOffset();
|
|
118
119
|
offsetRef.current = {
|
|
@@ -130,6 +131,7 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
130
131
|
const touch = event.touches[0];
|
|
131
132
|
if (touch) {
|
|
132
133
|
isDragging.current = true;
|
|
134
|
+
setDragging(true);
|
|
133
135
|
puzzleEvents.current = [];
|
|
134
136
|
const containerOffset = getContainerOffset();
|
|
135
137
|
offsetRef.current = {
|
|
@@ -147,7 +149,18 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
147
149
|
const headerBorderColor = showRetry ? theme.palette.error.main : "transparent";
|
|
148
150
|
const headerTextColor = showRetry ? theme.palette.error.main : theme.palette.onSurface;
|
|
149
151
|
const puzzleAreaBg = `linear-gradient(135deg, ${theme.palette.surface} 0%, ${theme.palette.primaryContainer.main} 50%, ${theme.palette.surface} 100%)`;
|
|
150
|
-
const
|
|
152
|
+
const deltaX = posX - originX;
|
|
153
|
+
const deltaY = posY - originY;
|
|
154
|
+
const dragDistance = Math.hypot(deltaX, deltaY);
|
|
155
|
+
const PARALLAX_FACTOR = .08;
|
|
156
|
+
const bgTranslateX = dragging ? -deltaX * PARALLAX_FACTOR : 0;
|
|
157
|
+
const bgTranslateY = dragging ? -deltaY * PARALLAX_FACTOR : 0;
|
|
158
|
+
const bgScale = dragging ? 1.03 : 1;
|
|
159
|
+
const hueShift = dragging ? Math.max(-18, Math.min(18, deltaX * .12)) : 0;
|
|
160
|
+
const satBoost = dragging ? 1 + Math.min(.25, dragDistance * .0035) : 1;
|
|
161
|
+
const brightness = dragging ? 1 - Math.min(.06, dragDistance * 8e-4) : 1;
|
|
162
|
+
const bgFilter = `hue-rotate(${hueShift.toFixed(2)}deg) saturate(${satBoost.toFixed(3)}) brightness(${brightness.toFixed(3)})`;
|
|
163
|
+
const bgTransform = `translate(${bgTranslateX.toFixed(2)}px, ${bgTranslateY.toFixed(2)}px) scale(${bgScale.toFixed(3)})`;
|
|
151
164
|
return /* @__PURE__ */ jsxs("div", {
|
|
152
165
|
style: {
|
|
153
166
|
position: "fixed",
|
|
@@ -201,33 +214,110 @@ var PuzzleCanvas = ({ originX, originY, targetX, targetY, onComplete, showRetry,
|
|
|
201
214
|
pointerEvents: submitting ? "none" : "auto",
|
|
202
215
|
transition: "opacity 0.2s ease"
|
|
203
216
|
},
|
|
204
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
217
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
218
|
+
style: {
|
|
219
|
+
position: "absolute",
|
|
220
|
+
left: `-${CONTAINER_WIDTH}px`,
|
|
221
|
+
top: `-${CONTAINER_HEIGHT}px`,
|
|
222
|
+
width: `${CONTAINER_WIDTH * 3}px`,
|
|
223
|
+
height: `${CONTAINER_HEIGHT * 3}px`,
|
|
224
|
+
pointerEvents: "none",
|
|
225
|
+
userSelect: "none",
|
|
226
|
+
transform: bgTransform,
|
|
227
|
+
transformOrigin: "center center",
|
|
228
|
+
filter: bgFilter,
|
|
229
|
+
transition: dragging ? "none" : "transform 0.35s cubic-bezier(0.22, 1, 0.36, 1), filter 0.35s ease",
|
|
230
|
+
willChange: "transform, filter"
|
|
231
|
+
},
|
|
232
|
+
children: [
|
|
233
|
+
[
|
|
234
|
+
0,
|
|
235
|
+
0,
|
|
236
|
+
-1,
|
|
237
|
+
-1
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
1,
|
|
241
|
+
0,
|
|
242
|
+
1,
|
|
243
|
+
-1
|
|
244
|
+
],
|
|
245
|
+
[
|
|
246
|
+
2,
|
|
247
|
+
0,
|
|
248
|
+
-1,
|
|
249
|
+
-1
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
0,
|
|
253
|
+
1,
|
|
254
|
+
-1,
|
|
255
|
+
1
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
1,
|
|
259
|
+
1,
|
|
260
|
+
1,
|
|
261
|
+
1
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
2,
|
|
265
|
+
1,
|
|
266
|
+
-1,
|
|
267
|
+
1
|
|
268
|
+
],
|
|
269
|
+
[
|
|
270
|
+
0,
|
|
271
|
+
2,
|
|
272
|
+
-1,
|
|
273
|
+
-1
|
|
274
|
+
],
|
|
275
|
+
[
|
|
276
|
+
1,
|
|
277
|
+
2,
|
|
278
|
+
1,
|
|
279
|
+
-1
|
|
280
|
+
],
|
|
281
|
+
[
|
|
282
|
+
2,
|
|
283
|
+
2,
|
|
284
|
+
-1,
|
|
285
|
+
-1
|
|
286
|
+
]
|
|
287
|
+
].map(([col, row, sx, sy]) => {
|
|
288
|
+
const key = `${col}-${row}`;
|
|
289
|
+
return /* @__PURE__ */ jsx("img", {
|
|
290
|
+
src: background,
|
|
291
|
+
alt: "",
|
|
292
|
+
draggable: false,
|
|
293
|
+
style: {
|
|
294
|
+
position: "absolute",
|
|
295
|
+
left: `${(col ?? 0) * CONTAINER_WIDTH}px`,
|
|
296
|
+
top: `${(row ?? 0) * CONTAINER_HEIGHT}px`,
|
|
297
|
+
width: `${CONTAINER_WIDTH}px`,
|
|
298
|
+
height: `${CONTAINER_HEIGHT}px`,
|
|
299
|
+
transform: `scale(${sx}, ${sy})`,
|
|
300
|
+
pointerEvents: "none",
|
|
301
|
+
userSelect: "none"
|
|
302
|
+
}
|
|
303
|
+
}, key);
|
|
304
|
+
})
|
|
305
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
215
306
|
...process.env.NODE_ENV !== "production" && { "data-cy": "prosopo-puzzle-piece" },
|
|
216
307
|
onMouseDown: handlePieceMouseDown,
|
|
217
308
|
onTouchStart: handlePieceTouchStart,
|
|
218
309
|
style: {
|
|
219
310
|
position: "absolute",
|
|
220
|
-
left: `${posX -
|
|
221
|
-
top: `${posY -
|
|
222
|
-
width: `${
|
|
223
|
-
height: `${
|
|
224
|
-
|
|
225
|
-
|
|
311
|
+
left: `${posX - pieceSize / 2}px`,
|
|
312
|
+
top: `${posY - pieceSize / 2}px`,
|
|
313
|
+
width: `${pieceSize}px`,
|
|
314
|
+
height: `${pieceSize}px`,
|
|
315
|
+
backgroundImage: `url(${piece})`,
|
|
316
|
+
backgroundSize: "100% 100%",
|
|
226
317
|
touchAction: "none",
|
|
227
318
|
cursor: submitting ? "default" : isDragging.current ? "grabbing" : "grab",
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
transition: isDragging.current ? "none" : "outline 0.2s ease, left 0.3s ease, top 0.3s ease"
|
|
319
|
+
filter: isDragging.current ? "drop-shadow(0 4px 10px rgba(0, 0, 0, 0.45))" : "drop-shadow(0 2px 5px rgba(0, 0, 0, 0.35))",
|
|
320
|
+
transition: isDragging.current ? "none" : "filter 0.2s ease, left 0.3s ease, top 0.3s ease"
|
|
231
321
|
}
|
|
232
322
|
})]
|
|
233
323
|
})]
|