@prosopo/procaptcha-react 2.11.3 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +15 -15
  2. package/.turbo/turbo-build$colon$tsc.log +22 -22
  3. package/.turbo/turbo-build.log +16 -15
  4. package/CHANGELOG.md +79 -0
  5. package/dist/cjs/components/button.cjs +98 -0
  6. package/dist/cjs/components/captchaComponent.cjs +225 -0
  7. package/dist/cjs/components/captchaWidget.cjs +210 -0
  8. package/dist/cjs/components/collector.cjs +49 -0
  9. package/dist/cjs/components/index.cjs +15 -6
  10. package/dist/cjs/components/modal.cjs +39 -0
  11. package/dist/cjs/components/procaptcha.cjs +23 -0
  12. package/dist/cjs/components/procaptchaWidget.cjs +166 -0
  13. package/dist/cjs/index.cjs +15 -6
  14. package/dist/cjs/util/index.cjs +6 -4
  15. package/dist/components/button.d.ts +9 -0
  16. package/dist/components/button.d.ts.map +1 -0
  17. package/dist/components/button.js +98 -0
  18. package/dist/components/button.js.map +1 -0
  19. package/dist/components/{CaptchaComponent.d.ts → captchaComponent.d.ts} +5 -3
  20. package/dist/components/captchaComponent.d.ts.map +1 -0
  21. package/dist/components/captchaComponent.js +225 -0
  22. package/dist/components/captchaComponent.js.map +1 -0
  23. package/dist/components/{CaptchaWidget.d.ts → captchaWidget.d.ts} +3 -2
  24. package/dist/components/captchaWidget.d.ts.map +1 -0
  25. package/dist/components/captchaWidget.js +210 -0
  26. package/dist/components/captchaWidget.js.map +1 -0
  27. package/dist/components/collector.d.ts +5 -4
  28. package/dist/components/collector.d.ts.map +1 -1
  29. package/dist/components/collector.js +46 -24
  30. package/dist/components/collector.js.map +1 -1
  31. package/dist/components/index.d.ts +7 -5
  32. package/dist/components/index.d.ts.map +1 -1
  33. package/dist/components/index.js +8 -4
  34. package/dist/components/index.js.map +1 -1
  35. package/dist/components/modal.d.ts +14 -0
  36. package/dist/components/modal.d.ts.map +1 -0
  37. package/dist/components/modal.js +39 -0
  38. package/dist/components/modal.js.map +1 -0
  39. package/dist/components/procaptcha.d.ts +7 -0
  40. package/dist/components/procaptcha.d.ts.map +1 -0
  41. package/dist/components/procaptcha.js +22 -0
  42. package/dist/components/procaptcha.js.map +1 -0
  43. package/dist/components/procaptchaWidget.d.ts +7 -0
  44. package/dist/components/procaptchaWidget.d.ts.map +1 -0
  45. package/dist/components/procaptchaWidget.js +166 -0
  46. package/dist/components/procaptchaWidget.js.map +1 -0
  47. package/dist/index.js +8 -4
  48. package/dist/tests/button.unit.test.d.ts.map +1 -1
  49. package/dist/tests/button.unit.test.js +99 -50
  50. package/dist/tests/button.unit.test.js.map +1 -1
  51. package/dist/tests/captchaComponent.unit.test.d.ts.map +1 -1
  52. package/dist/tests/captchaComponent.unit.test.js +35 -13
  53. package/dist/tests/captchaComponent.unit.test.js.map +1 -1
  54. package/dist/tests/captchaWidget.unit.test.d.ts.map +1 -1
  55. package/dist/tests/captchaWidget.unit.test.js +125 -12
  56. package/dist/tests/captchaWidget.unit.test.js.map +1 -1
  57. package/dist/tests/collector.unit.test.d.ts.map +1 -1
  58. package/dist/tests/collector.unit.test.js +43 -10
  59. package/dist/tests/collector.unit.test.js.map +1 -1
  60. package/dist/tests/harness.d.ts +2 -0
  61. package/dist/tests/harness.d.ts.map +1 -1
  62. package/dist/tests/harness.js +7 -0
  63. package/dist/tests/harness.js.map +1 -1
  64. package/dist/tests/modal.unit.test.d.ts.map +1 -1
  65. package/dist/tests/modal.unit.test.js +45 -16
  66. package/dist/tests/modal.unit.test.js.map +1 -1
  67. package/dist/tests/procaptcha.unit.test.d.ts.map +1 -1
  68. package/dist/tests/procaptcha.unit.test.js +37 -15
  69. package/dist/tests/procaptcha.unit.test.js.map +1 -1
  70. package/dist/tests/procaptchaReact.test-d.js +8 -6
  71. package/dist/tests/procaptchaReact.test-d.js.map +1 -1
  72. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -1
  73. package/dist/tests/procaptchaWidget.unit.test.js +121 -96
  74. package/dist/tests/procaptchaWidget.unit.test.js.map +1 -1
  75. package/dist/tests/render.d.ts +6 -7
  76. package/dist/tests/render.d.ts.map +1 -1
  77. package/dist/tests/render.js +23 -30
  78. package/dist/tests/render.js.map +1 -1
  79. package/dist/util/index.d.ts +8 -7
  80. package/dist/util/index.d.ts.map +1 -1
  81. package/dist/util/index.js +6 -4
  82. package/dist/util/index.js.map +1 -1
  83. package/package.json +9 -14
  84. package/vite.test.config.ts +1 -2
  85. package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
  86. package/dist/cjs/components/Button.cjs +0 -81
  87. package/dist/cjs/components/CaptchaComponent.cjs +0 -171
  88. package/dist/cjs/components/CaptchaWidget.cjs +0 -129
  89. package/dist/cjs/components/Modal.cjs +0 -35
  90. package/dist/cjs/components/Procaptcha.cjs +0 -7
  91. package/dist/cjs/components/ProcaptchaWidget.cjs +0 -168
  92. package/dist/components/Button.d.ts +0 -11
  93. package/dist/components/Button.d.ts.map +0 -1
  94. package/dist/components/Button.js +0 -81
  95. package/dist/components/Button.js.map +0 -1
  96. package/dist/components/CaptchaComponent.d.ts.map +0 -1
  97. package/dist/components/CaptchaComponent.js +0 -171
  98. package/dist/components/CaptchaComponent.js.map +0 -1
  99. package/dist/components/CaptchaWidget.d.ts.map +0 -1
  100. package/dist/components/CaptchaWidget.js +0 -129
  101. package/dist/components/CaptchaWidget.js.map +0 -1
  102. package/dist/components/Modal.d.ts +0 -13
  103. package/dist/components/Modal.d.ts.map +0 -1
  104. package/dist/components/Modal.js +0 -33
  105. package/dist/components/Modal.js.map +0 -1
  106. package/dist/components/Procaptcha.d.ts +0 -4
  107. package/dist/components/Procaptcha.d.ts.map +0 -1
  108. package/dist/components/Procaptcha.js +0 -7
  109. package/dist/components/Procaptcha.js.map +0 -1
  110. package/dist/components/ProcaptchaWidget.d.ts +0 -4
  111. package/dist/components/ProcaptchaWidget.d.ts.map +0 -1
  112. package/dist/components/ProcaptchaWidget.js +0 -168
  113. package/dist/components/ProcaptchaWidget.js.map +0 -1
  114. package/dist/tests/setup.d.ts +0 -5
  115. package/dist/tests/setup.d.ts.map +0 -1
  116. package/dist/tests/setup.js +0 -3
  117. package/dist/tests/setup.js.map +0 -1
@@ -1,3 +1,5 @@
1
+ import type { Translator } from "@prosopo/locale";
2
+ import { type Component } from "@prosopo/procaptcha-common";
1
3
  import type { CaptchaResponseBody } from "@prosopo/types";
2
4
  export interface CaptchaComponentProps {
3
5
  challenge: CaptchaResponseBody;
@@ -9,7 +11,7 @@ export interface CaptchaComponentProps {
9
11
  onNext: () => void;
10
12
  onReload: () => void;
11
13
  themeColor: "light" | "dark";
14
+ translator: Translator;
12
15
  }
13
- declare const CaptchaComponent: ({ challenge, index, solutions, onSubmit, onCancel, onClick, onNext, onReload, themeColor, }: CaptchaComponentProps) => import("@emotion/react/jsx-runtime").JSX.Element;
14
- export default CaptchaComponent;
15
- //# sourceMappingURL=CaptchaComponent.d.ts.map
16
+ export declare const mountCaptchaComponent: (container: HTMLElement, initialProps: CaptchaComponentProps) => Component<CaptchaComponentProps>;
17
+ //# sourceMappingURL=captchaComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captchaComponent.d.ts","sourceRoot":"","sources":["../../src/components/captchaComponent.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACN,KAAK,SAAS,EAQd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAY1D,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IACxC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CACvB;AAmED,eAAO,MAAM,qBAAqB,cACtB,WAAW,gBACR,qBAAqB,KACjC,SAAS,CAAC,qBAAqB,CA2MjC,CAAC"}
@@ -0,0 +1,225 @@
1
+ import addDataAttr from "../util/index.js";
2
+ import { mountButton } from "./button.js";
3
+ import { mountCaptchaWidget } from "./captchaWidget.js";
4
+ import { applyAttributes, applyStyles, createElement, mountReloadButton, threeColumnBasis, wrapRandomly } from "@prosopo/procaptcha-common";
5
+ import { darkTheme, lightTheme, randomInt } from "@prosopo/widget-skeleton";
6
+ import { at } from "@prosopo/util";
7
+ //#region src/components/captchaComponent.ts
8
+ var outerStyle = (theme) => ({
9
+ overflowX: "auto",
10
+ overflowY: "auto",
11
+ maxWidth: "500px",
12
+ maxHeight: "100%",
13
+ display: "flex",
14
+ flexDirection: "column",
15
+ border: `1px solid ${theme.palette.border}`,
16
+ boxShadow: theme.elevation.card,
17
+ borderRadius: theme.shape.card,
18
+ backgroundColor: theme.palette.background.default,
19
+ userSelect: "none",
20
+ touchAction: "none",
21
+ overscrollBehavior: "none"
22
+ });
23
+ var promptStyle = (theme) => ({
24
+ ...theme.typography.titleMedium,
25
+ color: theme.palette.primaryContainer.contrastText,
26
+ margin: 0
27
+ });
28
+ var hintStyle = (theme) => ({
29
+ ...theme.typography.bodyMedium,
30
+ color: theme.palette.onSurfaceVariant,
31
+ margin: "4px 0 0 0"
32
+ });
33
+ var targetStyle = (theme) => ({
34
+ color: theme.palette.titleAccent,
35
+ fontWeight: 700
36
+ });
37
+ var columnStyle = (gap) => ({
38
+ position: "relative",
39
+ flexGrow: 1,
40
+ flexBasis: threeColumnBasis(gap)
41
+ });
42
+ var SPACING_JITTER = 4;
43
+ var MIN_CONTROL_GAP = 6;
44
+ var MAX_CONTROL_GAP = 14;
45
+ var HEADER_PADDING_Y = 12;
46
+ var HEADER_PADDING_X = 14;
47
+ var HEADER_PADDING_JITTER = 3;
48
+ var MIN_WRAPPER_DEPTH = 0;
49
+ var MAX_WRAPPER_DEPTH = 2;
50
+ var decoy = (element) => wrapRandomly(element, MIN_WRAPPER_DEPTH, MAX_WRAPPER_DEPTH);
51
+ /** A spacing token moved by a few pixels, never below zero. */
52
+ var jittered = (base, jitter = SPACING_JITTER) => Math.max(0, base + randomInt(-jitter, jitter));
53
+ var mountCaptchaComponent = (container, initialProps) => {
54
+ let props = initialProps;
55
+ const themeOf = (themeColor) => "light" === themeColor ? lightTheme : darkTheme;
56
+ const currentCaptcha = () => at(props.challenge.captchas, props.index, { noWrap: true });
57
+ const currentSolution = () => at(props.solutions, props.index, { noWrap: true });
58
+ const isLastRound = () => props.index >= props.challenge.captchas.length - 1;
59
+ const theme = themeOf(props.themeColor);
60
+ const controlGap = randomInt(MIN_CONTROL_GAP, MAX_CONTROL_GAP);
61
+ const column = columnStyle(controlGap);
62
+ const targetLabel = createElement("span", { style: targetStyle(theme) });
63
+ const promptText = createElement("p", {
64
+ style: promptStyle(theme),
65
+ attributes: addDataAttr({ dev: { cy: "captcha-prompt" } })
66
+ });
67
+ const hintText = createElement("p", { style: hintStyle(theme) });
68
+ const header = createElement("div", {
69
+ style: {
70
+ padding: `${jittered(HEADER_PADDING_Y, HEADER_PADDING_JITTER)}px ${jittered(HEADER_PADDING_X, HEADER_PADDING_JITTER)}px`,
71
+ fontFamily: theme.font.fontFamily
72
+ },
73
+ children: [decoy(promptText), decoy(hintText)]
74
+ });
75
+ const headerBar = createElement("div", {
76
+ style: {
77
+ backgroundColor: theme.palette.primaryContainer.main,
78
+ borderRadius: theme.shape.header,
79
+ width: "100%",
80
+ marginTop: `${jittered(theme.spacing.unit)}px`
81
+ },
82
+ children: [decoy(header)]
83
+ });
84
+ const headerRow = createElement("div", {
85
+ style: {
86
+ display: "flex",
87
+ alignItems: "center",
88
+ width: "100%"
89
+ },
90
+ children: [decoy(headerBar)]
91
+ });
92
+ const gridHost = createElement("div", {
93
+ style: { overflow: "hidden" },
94
+ attributes: addDataAttr({ dev: { cy: `captcha-${props.index}` } })
95
+ });
96
+ const cancelHost = createElement("div", { style: column });
97
+ const reloadHost = createElement("div", { style: column });
98
+ const nextHost = createElement("div", { style: column });
99
+ const controls = createElement("div", {
100
+ style: {
101
+ width: "100%",
102
+ height: "100%",
103
+ display: "flex",
104
+ flexDirection: "row",
105
+ justifyContent: "space-between",
106
+ gap: `${controlGap}px`
107
+ },
108
+ children: [
109
+ decoy(cancelHost),
110
+ decoy(reloadHost),
111
+ decoy(nextHost)
112
+ ]
113
+ });
114
+ const controlsRow = createElement("div", {
115
+ style: {
116
+ display: "flex",
117
+ alignItems: "center",
118
+ justifyContent: "space-between",
119
+ lineHeight: 1.75,
120
+ padding: `${jittered(theme.spacing.unit)}px 0 ${jittered(theme.spacing.unit * 2)}px 0`
121
+ },
122
+ children: [decoy(controls)]
123
+ });
124
+ const inner = createElement("div", {
125
+ style: {
126
+ backgroundColor: theme.palette.background.default,
127
+ display: "flex",
128
+ flexDirection: "column",
129
+ minWidth: "300px",
130
+ marginLeft: `${jittered(theme.spacing.unit)}px`,
131
+ marginRight: `${jittered(theme.spacing.unit)}px`,
132
+ justifyContent: "center"
133
+ },
134
+ children: [
135
+ decoy(headerRow),
136
+ decoy(gridHost),
137
+ decoy(controlsRow)
138
+ ]
139
+ });
140
+ const root = createElement("div", {
141
+ style: outerStyle(theme),
142
+ attributes: addDataAttr({ dev: { cy: "captcha-panel" } }),
143
+ children: [decoy(inner)]
144
+ });
145
+ const grid = mountCaptchaWidget(gridHost, {
146
+ challenge: currentCaptcha(),
147
+ solution: currentSolution(),
148
+ onClick: props.onClick,
149
+ themeColor: props.themeColor
150
+ });
151
+ const cancelButton = mountButton(cancelHost, {
152
+ themeColor: props.themeColor,
153
+ buttonType: "cancel",
154
+ onClick: () => props.onCancel(),
155
+ text: props.translator.t("WIDGET.CANCEL")
156
+ });
157
+ const reloadButton = mountReloadButton(reloadHost, {
158
+ themeColor: props.themeColor,
159
+ onReload: () => props.onReload()
160
+ });
161
+ const nextButton = mountButton(nextHost, {
162
+ themeColor: props.themeColor,
163
+ buttonType: "next",
164
+ onClick: () => isLastRound() ? props.onSubmit() : props.onNext(),
165
+ text: props.translator.t("WIDGET.SUBMIT")
166
+ });
167
+ const render = () => {
168
+ const activeTheme = themeOf(props.themeColor);
169
+ applyStyles(root, outerStyle(activeTheme));
170
+ applyStyles(inner, { backgroundColor: activeTheme.palette.background.default });
171
+ applyStyles(headerBar, {
172
+ backgroundColor: activeTheme.palette.primaryContainer.main,
173
+ borderRadius: activeTheme.shape.header
174
+ });
175
+ applyStyles(header, { fontFamily: activeTheme.font.fontFamily });
176
+ applyStyles(promptText, promptStyle(activeTheme));
177
+ applyStyles(hintText, hintStyle(activeTheme));
178
+ applyStyles(targetLabel, targetStyle(activeTheme));
179
+ const t = props.translator.t;
180
+ targetLabel.textContent = `${currentCaptcha().target} `;
181
+ promptText.textContent = `${t("WIDGET.SELECT_ALL")}:\u00a0`;
182
+ promptText.appendChild(targetLabel);
183
+ hintText.textContent = t("WIDGET.IF_NONE_CLICK_NEXT");
184
+ applyAttributes(gridHost, addDataAttr({ dev: { cy: `captcha-${props.index}` } }));
185
+ grid.update({
186
+ challenge: currentCaptcha(),
187
+ solution: currentSolution(),
188
+ onClick: props.onClick,
189
+ themeColor: props.themeColor
190
+ });
191
+ cancelButton.update({
192
+ themeColor: props.themeColor,
193
+ buttonType: "cancel",
194
+ onClick: () => props.onCancel(),
195
+ text: t("WIDGET.CANCEL")
196
+ });
197
+ reloadButton.update({
198
+ themeColor: props.themeColor,
199
+ onReload: () => props.onReload()
200
+ });
201
+ nextButton.update({
202
+ themeColor: props.themeColor,
203
+ buttonType: "next",
204
+ onClick: () => isLastRound() ? props.onSubmit() : props.onNext(),
205
+ text: isLastRound() ? t("WIDGET.SUBMIT") : t("WIDGET.NEXT")
206
+ });
207
+ };
208
+ render();
209
+ container.appendChild(root);
210
+ return {
211
+ update: (nextProps) => {
212
+ props = nextProps;
213
+ render();
214
+ },
215
+ destroy: () => {
216
+ grid.destroy();
217
+ cancelButton.destroy();
218
+ reloadButton.destroy();
219
+ nextButton.destroy();
220
+ root.parentNode?.removeChild(root);
221
+ }
222
+ };
223
+ };
224
+ //#endregion
225
+ export { mountCaptchaComponent };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captchaComponent.js","sourceRoot":"","sources":["../../src/components/captchaComponent.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type Component } from "@prosopo/procaptcha-common";
1
2
  import type { Captcha } from "@prosopo/types";
2
3
  export interface CaptchaWidgetProps {
3
4
  challenge: Captcha;
@@ -5,5 +6,5 @@ export interface CaptchaWidgetProps {
5
6
  onClick: (hash: string, x: number, y: number) => void;
6
7
  themeColor: "light" | "dark";
7
8
  }
8
- export declare const CaptchaWidget: ({ challenge, solution, onClick, themeColor, }: CaptchaWidgetProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
- //# sourceMappingURL=CaptchaWidget.d.ts.map
9
+ export declare const mountCaptchaWidget: (container: HTMLElement, initialProps: CaptchaWidgetProps) => Component<CaptchaWidgetProps>;
10
+ //# sourceMappingURL=captchaWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captchaWidget.d.ts","sourceRoot":"","sources":["../../src/components/captchaWidget.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,SAAS,EAUd,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,gBAAgB,CAAC;AAQ1D,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AA4FD,eAAO,MAAM,kBAAkB,cACnB,WAAW,gBACR,kBAAkB,KAC9B,SAAS,CAAC,kBAAkB,CAsN9B,CAAC"}
@@ -0,0 +1,210 @@
1
+ import { Teardown, applyStyles, clearElement, createControl, createElement, createSvgElement, threeColumnBasis, wrapRandomly } from "@prosopo/procaptcha-common";
2
+ import { darkTheme, lightTheme, randomInt } from "@prosopo/widget-skeleton";
3
+ import { ProsopoDatasetError } from "@prosopo/common";
4
+ //#region src/components/captchaWidget.ts
5
+ var getHash = (item) => {
6
+ if (!item.hash) throw new ProsopoDatasetError("CAPTCHA.MISSING_ITEM_HASH", { context: { item } });
7
+ return item.hash;
8
+ };
9
+ var cellStyle = (gap) => ({
10
+ flexGrow: 1,
11
+ flexBasis: threeColumnBasis(gap),
12
+ boxSizing: "border-box"
13
+ });
14
+ var MIN_GRID_GAP = 8;
15
+ var MAX_GRID_GAP = 15;
16
+ var GRID_PADDING_JITTER = 4;
17
+ var MIN_WRAPPER_DEPTH = 0;
18
+ var MAX_WRAPPER_DEPTH = 2;
19
+ var CHECK_ICON_PATH = "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z";
20
+ var themeOf = (themeColor) => "light" === themeColor ? lightTheme : darkTheme;
21
+ /** Drawn once per mounted grid, so tile centres move between page loads. */
22
+ var generateMetrics = (theme) => ({
23
+ gap: randomInt(MIN_GRID_GAP, MAX_GRID_GAP),
24
+ paddingTop: Math.max(0, theme.spacing.unit + randomInt(-GRID_PADDING_JITTER, GRID_PADDING_JITTER)),
25
+ paddingBottom: Math.max(0, theme.spacing.unit + randomInt(-GRID_PADDING_JITTER, GRID_PADDING_JITTER))
26
+ });
27
+ var gridStyle = (metrics) => ({
28
+ width: "100%",
29
+ height: "100%",
30
+ display: "flex",
31
+ flexDirection: "row",
32
+ flexWrap: "wrap",
33
+ justifyContent: "space-between",
34
+ paddingTop: `${metrics.paddingTop}px`,
35
+ paddingBottom: `${metrics.paddingBottom}px`,
36
+ gap: `${metrics.gap}px`
37
+ });
38
+ var selectionStyle = (theme, selected) => ({
39
+ borderRadius: selected ? theme.shape.tileSelected : theme.shape.tile,
40
+ transform: selected ? "scale(0.9)" : "none"
41
+ });
42
+ /**
43
+ * The selectable image grid.
44
+ *
45
+ * Tiles are rebuilt only when the round's `Captcha` changes identity. Every
46
+ * other update just flips overlay visibility — re-creating `<img>` elements on
47
+ * each selection would restart the image loads and flash the grid, which is the
48
+ * one place the old React reconciler was earning its keep.
49
+ */
50
+ var mountCaptchaWidget = (container, initialProps) => {
51
+ let teardown = new Teardown();
52
+ let props = initialProps;
53
+ let renderedChallenge;
54
+ let tiles = [];
55
+ let focusedHash = null;
56
+ const metrics = generateMetrics(themeOf(initialProps.themeColor));
57
+ const grid = createElement("div", { style: gridStyle(metrics) });
58
+ const buildTile = (item, index) => {
59
+ const hash = getHash(item);
60
+ const theme = themeOf(props.themeColor);
61
+ const image = createElement("img", {
62
+ style: {
63
+ width: "100%",
64
+ display: "block",
65
+ objectFit: "cover",
66
+ aspectRatio: "1/1",
67
+ height: "auto",
68
+ overflow: "hidden",
69
+ borderStyle: "solid",
70
+ borderWidth: "1px",
71
+ borderColor: theme.palette.tile.border,
72
+ transition: "transform 200ms cubic-bezier(0.2, 0, 0, 1), border-radius 200ms"
73
+ },
74
+ attributes: {
75
+ src: item.data,
76
+ alt: `Captcha image ${index + 1}`
77
+ }
78
+ });
79
+ teardown.addEventListener(image, "error", () => {
80
+ const retryCount = Number(image.dataset.retryCount ?? "0") + 1;
81
+ image.dataset.retryCount = String(retryCount);
82
+ if (retryCount <= 3) image.src = `${item.data}?retry=${Date.now()}`;
83
+ });
84
+ const icon = createSvgElement("svg", {
85
+ style: {
86
+ backgroundColor: theme.palette.checkbox.fill,
87
+ display: "block",
88
+ width: "34px",
89
+ height: "34px",
90
+ padding: "7px",
91
+ borderRadius: "50%",
92
+ boxSizing: "border-box",
93
+ transition: "fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
94
+ userSelect: "none",
95
+ fill: theme.palette.checkbox.tick
96
+ },
97
+ attributes: {
98
+ focusable: "false",
99
+ "aria-hidden": "true",
100
+ viewBox: "0 0 24 24"
101
+ },
102
+ children: [createSvgElement("path", { attributes: { d: CHECK_ICON_PATH } })]
103
+ });
104
+ const overlay = createElement("div", {
105
+ style: {
106
+ position: "absolute",
107
+ top: 0,
108
+ left: 0,
109
+ bottom: 0,
110
+ right: 0,
111
+ height: "100%",
112
+ width: "100%",
113
+ display: "flex",
114
+ alignItems: "center",
115
+ justifyContent: "center",
116
+ backgroundColor: theme.palette.overlay,
117
+ borderRadius: theme.shape.tileSelected,
118
+ visibility: "hidden"
119
+ },
120
+ children: [icon]
121
+ });
122
+ const clickable = createControl(teardown, {
123
+ style: {
124
+ position: "relative",
125
+ cursor: "pointer",
126
+ height: "100%",
127
+ width: "100%",
128
+ padding: 0,
129
+ margin: 0,
130
+ border: "none",
131
+ background: "none",
132
+ appearance: "none",
133
+ display: "block"
134
+ },
135
+ children: [image, overlay],
136
+ onActivate: (event) => {
137
+ const fromPointer = "clientX" in event;
138
+ props.onClick(hash, fromPointer ? event.clientX : 0, fromPointer ? event.clientY : 0);
139
+ }
140
+ });
141
+ teardown.addEventListener(clickable, "focus", () => {
142
+ focusedHash = clickable.matches(":focus-visible") ? hash : null;
143
+ applyFocusRing();
144
+ });
145
+ teardown.addEventListener(clickable, "blur", () => {
146
+ focusedHash = null;
147
+ applyFocusRing();
148
+ });
149
+ const cell = createElement("div", {
150
+ style: cellStyle(metrics.gap),
151
+ children: [clickable]
152
+ });
153
+ grid.appendChild(wrapRandomly(cell, MIN_WRAPPER_DEPTH, MAX_WRAPPER_DEPTH));
154
+ return {
155
+ hash,
156
+ image,
157
+ overlay,
158
+ clickable
159
+ };
160
+ };
161
+ const applyFocusRing = () => {
162
+ const theme = themeOf(props.themeColor);
163
+ for (const tile of tiles) applyStyles(tile.clickable, focusedHash === tile.hash ? {
164
+ outline: `3px solid ${theme.palette.primary.main}`,
165
+ outlineOffset: "2px"
166
+ } : {
167
+ outline: "none",
168
+ outlineOffset: void 0
169
+ });
170
+ };
171
+ const rebuild = () => {
172
+ teardown.run();
173
+ teardown = new Teardown();
174
+ clearElement(grid);
175
+ applyStyles(grid, gridStyle(metrics));
176
+ tiles = props.challenge.items.map(buildTile);
177
+ renderedChallenge = props.challenge;
178
+ };
179
+ const applySelection = () => {
180
+ const theme = themeOf(props.themeColor);
181
+ for (const tile of tiles) {
182
+ const selected = props.solution.some((entry) => entry[0] === tile.hash);
183
+ applyStyles(tile.image, selectionStyle(theme, selected));
184
+ applyStyles(tile.overlay, { visibility: selected ? "visible" : "hidden" });
185
+ tile.clickable.setAttribute("aria-pressed", String(selected));
186
+ }
187
+ };
188
+ rebuild();
189
+ applySelection();
190
+ applyFocusRing();
191
+ container.appendChild(grid);
192
+ return {
193
+ update: (nextProps) => {
194
+ const needsRebuild = nextProps.challenge !== renderedChallenge || nextProps.themeColor !== props.themeColor;
195
+ props = nextProps;
196
+ if (needsRebuild) {
197
+ focusedHash = null;
198
+ rebuild();
199
+ }
200
+ applySelection();
201
+ applyFocusRing();
202
+ },
203
+ destroy: () => {
204
+ teardown.run();
205
+ grid.parentNode?.removeChild(grid);
206
+ }
207
+ };
208
+ };
209
+ //#endregion
210
+ export { mountCaptchaWidget };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captchaWidget.js","sourceRoot":"","sources":["../../src/components/captchaWidget.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import { type Component } from "@prosopo/procaptcha-common";
1
2
  import type { Account, StoredEvents } from "@prosopo/types";
2
- type CollectorProps = {
3
+ export interface CollectorProps {
3
4
  onProcessData: (data: StoredEvents) => void;
4
5
  sendData: boolean;
5
6
  account: Account | undefined;
6
- };
7
- declare const Collector: ({ onProcessData, sendData, account }: CollectorProps) => import("@emotion/react/jsx-runtime").JSX.Element;
8
- export default Collector;
7
+ }
8
+ export declare const mountCollector: (container: HTMLElement, initialProps: CollectorProps) => Component<CollectorProps>;
9
+ export default mountCollector;
9
10
  //# sourceMappingURL=collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/components/collector.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,OAAO,EAIP,YAAY,EACZ,MAAM,gBAAgB,CAAC;AAGxB,KAAK,cAAc,GAAG;IACrB,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,SAAS,yCAA0C,cAAc,qDAgCtE,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/components/collector.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EACX,OAAO,EAIP,YAAY,EACZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAkBD,eAAO,MAAM,cAAc,cACf,WAAW,gBACR,cAAc,KAC1B,SAAS,CAAC,cAAc,CAoD1B,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,26 +1,48 @@
1
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
1
+ import { createElement } from "@prosopo/procaptcha-common";
2
2
  import { startCollector } from "@prosopo/procaptcha";
3
- import { useEffect, useRef, useState } from "react";
4
- const Collector = ({ onProcessData, sendData, account }) => {
5
- const [mouseEvents, setStoredMouseEvents] = useState([]);
6
- const [touchEvents, setStoredTouchEvents] = useState([]);
7
- const [keyboardEvents, setStoredKeyboardEvents] = useState([]);
8
- const ref = useRef(null);
9
- useEffect(() => {
10
- if (ref?.current) {
11
- startCollector(setStoredMouseEvents, setStoredTouchEvents, setStoredKeyboardEvents, ref.current);
12
- }
13
- }, []);
14
- useEffect(() => {
15
- const userEvents = {
16
- mouseEvents,
17
- touchEvents,
18
- keyboardEvents,
19
- };
20
- if (account)
21
- onProcessData(userEvents);
22
- }, [onProcessData, account]);
23
- return _jsx("div", { ref: ref });
3
+ //#region src/components/collector.ts
4
+ /**
5
+ * `startCollector` speaks the React setState shape (value or updater fn), so
6
+ * this adapts a plain array to it rather than changing the collector's
7
+ * signature — it is shared with the direct-consumer entry points.
8
+ */
9
+ var arrayUpdater = (target) => {
10
+ return (update) => {
11
+ const next = "function" === typeof update ? update([...target]) : [...update];
12
+ target.length = 0;
13
+ target.push(...next);
14
+ };
24
15
  };
25
- export default Collector;
26
- //# sourceMappingURL=collector.js.map
16
+ var mountCollector = (container, initialProps) => {
17
+ let props = initialProps;
18
+ const mouseEvents = [];
19
+ const touchEvents = [];
20
+ const keyboardEvents = [];
21
+ const root = createElement("div");
22
+ container.appendChild(root);
23
+ startCollector(arrayUpdater(mouseEvents), arrayUpdater(touchEvents), arrayUpdater(keyboardEvents), root);
24
+ let lastAccount;
25
+ let lastOnProcessData;
26
+ const emit = () => {
27
+ if (props.account === lastAccount && props.onProcessData === lastOnProcessData) return;
28
+ lastAccount = props.account;
29
+ lastOnProcessData = props.onProcessData;
30
+ if (props.account) props.onProcessData({
31
+ mouseEvents,
32
+ touchEvents,
33
+ keyboardEvents
34
+ });
35
+ };
36
+ emit();
37
+ return {
38
+ update: (nextProps) => {
39
+ props = nextProps;
40
+ emit();
41
+ },
42
+ destroy: () => {
43
+ root.parentNode?.removeChild(root);
44
+ }
45
+ };
46
+ };
47
+ //#endregion
48
+ export { mountCollector as default, mountCollector };
@@ -1 +1 @@
1
- {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/components/collector.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,OAAO,EAAyB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQ3E,MAAM,SAAS,GAAG,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAkB,EAAE,EAAE;IAC1E,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAC9E,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAExD,EAAE,CAAC,CAAC;IAEN,MAAM,GAAG,GACR,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YAClB,cAAc,CACb,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,GAAG,CAAC,OAAO,CACX,CAAC;QACH,CAAC;IACF,CAAC,EAAE,EAAE,CAAC,CAAC;IAGP,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,UAAU,GAAG;YAClB,WAAW;YACX,WAAW;YACX,cAAc;SACd,CAAC;QACF,IAAI,OAAO;YAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7B,OAAO,cAAK,GAAG,EAAE,GAAG,GAAI,CAAC;AAC1B,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/components/collector.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAkB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAsB3E,MAAM,YAAY,GAAG,CAAI,MAAW,EAAmB,EAAE;IACxD,OAAO,CAAC,MAAsC,EAAE,EAAE;QACjD,MAAM,IAAI,GACT,UAAU,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,SAAsB,EACtB,YAA4B,EACA,EAAE;IAC9B,IAAI,KAAK,GAAG,YAAY,CAAC;IACzB,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,MAAM,cAAc,GAA2B,EAAE,CAAC;IAElD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAE5B,cAAc,CACb,YAAY,CAAC,WAAW,CAAC,EACzB,YAAY,CAAC,WAAW,CAAC,EACzB,YAAY,CAAC,cAAc,CAAC,EAC5B,IAAI,CACJ,CAAC;IAKF,IAAI,WAAgC,CAAC;IACrC,IAAI,iBAA8D,CAAC;IAEnE,MAAM,IAAI,GAAG,GAAG,EAAE;QACjB,IACC,KAAK,CAAC,OAAO,KAAK,WAAW;YAC7B,KAAK,CAAC,aAAa,KAAK,iBAAiB,EACxC,CAAC;YACF,OAAO;QACR,CAAC;QACD,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5B,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;QACnE,CAAC;IACF,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;IAEP,OAAO;QACN,MAAM,EAAE,CAAC,SAAyB,EAAE,EAAE;YACrC,KAAK,GAAG,SAAS,CAAC;YAClB,IAAI,EAAE,CAAC;QACR,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YAMb,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,6 +1,8 @@
1
- export * from "./CaptchaWidget.js";
2
- export * from "./CaptchaComponent.js";
3
- export { default as ProcaptchaWidget } from "./ProcaptchaWidget.js";
4
- export { default as Procaptcha } from "./Procaptcha.js";
5
- export * from "./Procaptcha.js";
1
+ export * from "./button.js";
2
+ export * from "./modal.js";
3
+ export * from "./captchaWidget.js";
4
+ export * from "./captchaComponent.js";
5
+ export * from "./collector.js";
6
+ export * from "./procaptchaWidget.js";
7
+ export * from "./procaptcha.js";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAaA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
@@ -1,4 +1,8 @@
1
- import { CaptchaWidget } from "./CaptchaWidget.js";
2
- import ProcaptchaWidget from "./ProcaptchaWidget.js";
3
- import Procaptcha from "./Procaptcha.js";
4
- export { CaptchaWidget, Procaptcha, ProcaptchaWidget };
1
+ import { mountButton } from "./button.js";
2
+ import { mountModal } from "./modal.js";
3
+ import { mountCaptchaWidget } from "./captchaWidget.js";
4
+ import { mountCaptchaComponent } from "./captchaComponent.js";
5
+ import mountCollector from "./collector.js";
6
+ import mountProcaptchaImageWidget from "./procaptchaWidget.js";
7
+ import { loadProcaptcha, mountProcaptcha } from "./procaptcha.js";
8
+ export { loadProcaptcha, mountButton, mountCaptchaComponent, mountCaptchaWidget, mountCollector, mountModal, mountProcaptcha, mountProcaptchaImageWidget };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAaA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAaA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}