@prosopo/procaptcha-react 2.14.8 → 2.14.10

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 (193) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +1 -1
  2. package/.turbo/{turbo-build.log → turbo-build$colon$esm.log} +13 -14
  3. package/.turbo/turbo-build$colon$tsc.log +20 -20
  4. package/.turbo/turbo-build$colon$types.log +1 -0
  5. package/CHANGELOG.md +31 -0
  6. package/dist/cjs/components/button.cjs +1 -1
  7. package/dist/{components → esm/components}/button.js +1 -1
  8. package/dist/tsc/components/button.d.ts.map +1 -0
  9. package/dist/tsc/components/button.js +106 -0
  10. package/dist/tsc/components/button.js.map +1 -0
  11. package/dist/tsc/components/captchaComponent.d.ts.map +1 -0
  12. package/dist/tsc/components/captchaComponent.js +234 -0
  13. package/dist/tsc/components/captchaComponent.js.map +1 -0
  14. package/dist/tsc/components/captchaWidget.d.ts.map +1 -0
  15. package/dist/tsc/components/captchaWidget.js +213 -0
  16. package/dist/tsc/components/captchaWidget.js.map +1 -0
  17. package/dist/tsc/components/collector.d.ts.map +1 -0
  18. package/dist/tsc/components/collector.js +43 -0
  19. package/dist/tsc/components/collector.js.map +1 -0
  20. package/dist/tsc/components/index.d.ts.map +1 -0
  21. package/dist/tsc/components/index.js +8 -0
  22. package/dist/tsc/components/index.js.map +1 -0
  23. package/dist/tsc/components/modal.d.ts.map +1 -0
  24. package/dist/tsc/components/modal.js +36 -0
  25. package/dist/tsc/components/modal.js.map +1 -0
  26. package/dist/tsc/components/procaptcha.d.ts.map +1 -0
  27. package/dist/tsc/components/procaptcha.js +19 -0
  28. package/dist/tsc/components/procaptcha.js.map +1 -0
  29. package/dist/tsc/components/procaptchaWidget.d.ts.map +1 -0
  30. package/dist/tsc/components/procaptchaWidget.js +218 -0
  31. package/dist/tsc/components/procaptchaWidget.js.map +1 -0
  32. package/dist/tsc/errorSites.d.ts.map +1 -0
  33. package/dist/{errorSites.js.map → tsc/errorSites.js.map} +1 -1
  34. package/dist/tsc/index.d.ts.map +1 -0
  35. package/dist/tsc/index.js +3 -0
  36. package/dist/tsc/index.js.map +1 -0
  37. package/dist/tsc/tests/button.unit.test.d.ts.map +1 -0
  38. package/dist/{tests → tsc/tests}/button.unit.test.js +4 -0
  39. package/dist/tsc/tests/button.unit.test.js.map +1 -0
  40. package/dist/tsc/tests/captchaComponent.unit.test.d.ts.map +1 -0
  41. package/dist/tsc/tests/captchaComponent.unit.test.js.map +1 -0
  42. package/dist/tsc/tests/captchaWidget.unit.test.d.ts.map +1 -0
  43. package/dist/tsc/tests/captchaWidget.unit.test.js.map +1 -0
  44. package/dist/tsc/tests/collector.unit.test.d.ts.map +1 -0
  45. package/dist/tsc/tests/collector.unit.test.js.map +1 -0
  46. package/dist/tsc/tests/harness.d.ts.map +1 -0
  47. package/dist/tsc/tests/harness.js.map +1 -0
  48. package/dist/tsc/tests/modal.unit.test.d.ts.map +1 -0
  49. package/dist/tsc/tests/modal.unit.test.js.map +1 -0
  50. package/dist/tsc/tests/procaptcha.unit.test.d.ts.map +1 -0
  51. package/dist/tsc/tests/procaptcha.unit.test.js.map +1 -0
  52. package/dist/tsc/tests/procaptchaReact.test-d.d.ts.map +1 -0
  53. package/dist/tsc/tests/procaptchaReact.test-d.js.map +1 -0
  54. package/dist/tsc/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  55. package/dist/tsc/tests/procaptchaWidget.unit.test.js.map +1 -0
  56. package/dist/tsc/tests/render.d.ts.map +1 -0
  57. package/dist/tsc/tests/render.js.map +1 -0
  58. package/dist/tsc/tests/util.unit.test.d.ts.map +1 -0
  59. package/dist/tsc/tests/util.unit.test.js.map +1 -0
  60. package/dist/tsc/util/index.d.ts.map +1 -0
  61. package/dist/tsc/util/index.js +19 -0
  62. package/dist/tsc/util/index.js.map +1 -0
  63. package/dist/types/components/button.d.ts +9 -0
  64. package/dist/types/components/button.d.ts.map +1 -0
  65. package/dist/types/components/captchaComponent.d.ts +18 -0
  66. package/dist/types/components/captchaComponent.d.ts.map +1 -0
  67. package/dist/types/components/captchaWidget.d.ts +10 -0
  68. package/dist/types/components/captchaWidget.d.ts.map +1 -0
  69. package/dist/types/components/collector.d.ts +10 -0
  70. package/dist/types/components/collector.d.ts.map +1 -0
  71. package/dist/types/components/index.d.ts +8 -0
  72. package/dist/types/components/index.d.ts.map +1 -0
  73. package/dist/types/components/modal.d.ts +14 -0
  74. package/dist/types/components/modal.d.ts.map +1 -0
  75. package/dist/types/components/procaptcha.d.ts +7 -0
  76. package/dist/types/components/procaptcha.d.ts.map +1 -0
  77. package/dist/types/components/procaptchaWidget.d.ts +7 -0
  78. package/dist/types/components/procaptchaWidget.d.ts.map +1 -0
  79. package/dist/types/errorSites.d.ts +7 -0
  80. package/dist/types/errorSites.d.ts.map +1 -0
  81. package/dist/types/index.d.ts +3 -0
  82. package/dist/types/index.d.ts.map +1 -0
  83. package/dist/types/tests/button.unit.test.d.ts +2 -0
  84. package/dist/types/tests/button.unit.test.d.ts.map +1 -0
  85. package/dist/types/tests/captchaComponent.unit.test.d.ts +2 -0
  86. package/dist/types/tests/captchaComponent.unit.test.d.ts.map +1 -0
  87. package/dist/types/tests/captchaWidget.unit.test.d.ts +2 -0
  88. package/dist/types/tests/captchaWidget.unit.test.d.ts.map +1 -0
  89. package/dist/types/tests/collector.unit.test.d.ts +2 -0
  90. package/dist/types/tests/collector.unit.test.d.ts.map +1 -0
  91. package/dist/types/tests/harness.d.ts +14 -0
  92. package/dist/types/tests/harness.d.ts.map +1 -0
  93. package/dist/types/tests/modal.unit.test.d.ts +2 -0
  94. package/dist/types/tests/modal.unit.test.d.ts.map +1 -0
  95. package/dist/types/tests/procaptcha.unit.test.d.ts +2 -0
  96. package/dist/types/tests/procaptcha.unit.test.d.ts.map +1 -0
  97. package/dist/types/tests/procaptchaReact.test-d.d.ts +2 -0
  98. package/dist/types/tests/procaptchaReact.test-d.d.ts.map +1 -0
  99. package/dist/types/tests/procaptchaWidget.unit.test.d.ts +2 -0
  100. package/dist/types/tests/procaptchaWidget.unit.test.d.ts.map +1 -0
  101. package/dist/types/tests/render.d.ts +23 -0
  102. package/dist/types/tests/render.d.ts.map +1 -0
  103. package/dist/types/tests/util.unit.test.d.ts +2 -0
  104. package/dist/types/tests/util.unit.test.d.ts.map +1 -0
  105. package/dist/types/util/index.d.ts +10 -0
  106. package/dist/types/util/index.d.ts.map +1 -0
  107. package/package.json +16 -17
  108. package/dist/components/button.d.ts.map +0 -1
  109. package/dist/components/button.js.map +0 -1
  110. package/dist/components/captchaComponent.d.ts.map +0 -1
  111. package/dist/components/captchaComponent.js.map +0 -1
  112. package/dist/components/captchaWidget.d.ts.map +0 -1
  113. package/dist/components/captchaWidget.js.map +0 -1
  114. package/dist/components/collector.d.ts.map +0 -1
  115. package/dist/components/collector.js.map +0 -1
  116. package/dist/components/index.d.ts.map +0 -1
  117. package/dist/components/index.js.map +0 -1
  118. package/dist/components/modal.d.ts.map +0 -1
  119. package/dist/components/modal.js.map +0 -1
  120. package/dist/components/procaptcha.d.ts.map +0 -1
  121. package/dist/components/procaptcha.js.map +0 -1
  122. package/dist/components/procaptchaWidget.d.ts.map +0 -1
  123. package/dist/components/procaptchaWidget.js.map +0 -1
  124. package/dist/errorSites.d.ts.map +0 -1
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/index.js.map +0 -1
  127. package/dist/tests/button.unit.test.d.ts.map +0 -1
  128. package/dist/tests/button.unit.test.js.map +0 -1
  129. package/dist/tests/captchaComponent.unit.test.d.ts.map +0 -1
  130. package/dist/tests/captchaComponent.unit.test.js.map +0 -1
  131. package/dist/tests/captchaWidget.unit.test.d.ts.map +0 -1
  132. package/dist/tests/captchaWidget.unit.test.js.map +0 -1
  133. package/dist/tests/collector.unit.test.d.ts.map +0 -1
  134. package/dist/tests/collector.unit.test.js.map +0 -1
  135. package/dist/tests/harness.d.ts.map +0 -1
  136. package/dist/tests/harness.js.map +0 -1
  137. package/dist/tests/modal.unit.test.d.ts.map +0 -1
  138. package/dist/tests/modal.unit.test.js.map +0 -1
  139. package/dist/tests/procaptcha.unit.test.d.ts.map +0 -1
  140. package/dist/tests/procaptcha.unit.test.js.map +0 -1
  141. package/dist/tests/procaptchaReact.test-d.d.ts.map +0 -1
  142. package/dist/tests/procaptchaReact.test-d.js.map +0 -1
  143. package/dist/tests/procaptchaWidget.unit.test.d.ts.map +0 -1
  144. package/dist/tests/procaptchaWidget.unit.test.js.map +0 -1
  145. package/dist/tests/render.d.ts.map +0 -1
  146. package/dist/tests/render.js.map +0 -1
  147. package/dist/tests/util.unit.test.d.ts.map +0 -1
  148. package/dist/tests/util.unit.test.js.map +0 -1
  149. package/dist/util/index.d.ts.map +0 -1
  150. package/dist/util/index.js.map +0 -1
  151. /package/dist/{_virtual → esm/_virtual}/_rolldown/runtime.js +0 -0
  152. /package/dist/{components → esm/components}/captchaComponent.js +0 -0
  153. /package/dist/{components → esm/components}/captchaWidget.js +0 -0
  154. /package/dist/{components → esm/components}/collector.js +0 -0
  155. /package/dist/{components → esm/components}/index.js +0 -0
  156. /package/dist/{components → esm/components}/modal.js +0 -0
  157. /package/dist/{components → esm/components}/procaptcha.js +0 -0
  158. /package/dist/{components → esm/components}/procaptchaWidget.js +0 -0
  159. /package/dist/{index.js → esm/index.js} +0 -0
  160. /package/dist/{util → esm/util}/index.js +0 -0
  161. /package/dist/{components → tsc/components}/button.d.ts +0 -0
  162. /package/dist/{components → tsc/components}/captchaComponent.d.ts +0 -0
  163. /package/dist/{components → tsc/components}/captchaWidget.d.ts +0 -0
  164. /package/dist/{components → tsc/components}/collector.d.ts +0 -0
  165. /package/dist/{components → tsc/components}/index.d.ts +0 -0
  166. /package/dist/{components → tsc/components}/modal.d.ts +0 -0
  167. /package/dist/{components → tsc/components}/procaptcha.d.ts +0 -0
  168. /package/dist/{components → tsc/components}/procaptchaWidget.d.ts +0 -0
  169. /package/dist/{errorSites.d.ts → tsc/errorSites.d.ts} +0 -0
  170. /package/dist/{errorSites.js → tsc/errorSites.js} +0 -0
  171. /package/dist/{index.d.ts → tsc/index.d.ts} +0 -0
  172. /package/dist/{tests → tsc/tests}/button.unit.test.d.ts +0 -0
  173. /package/dist/{tests → tsc/tests}/captchaComponent.unit.test.d.ts +0 -0
  174. /package/dist/{tests → tsc/tests}/captchaComponent.unit.test.js +0 -0
  175. /package/dist/{tests → tsc/tests}/captchaWidget.unit.test.d.ts +0 -0
  176. /package/dist/{tests → tsc/tests}/captchaWidget.unit.test.js +0 -0
  177. /package/dist/{tests → tsc/tests}/collector.unit.test.d.ts +0 -0
  178. /package/dist/{tests → tsc/tests}/collector.unit.test.js +0 -0
  179. /package/dist/{tests → tsc/tests}/harness.d.ts +0 -0
  180. /package/dist/{tests → tsc/tests}/harness.js +0 -0
  181. /package/dist/{tests → tsc/tests}/modal.unit.test.d.ts +0 -0
  182. /package/dist/{tests → tsc/tests}/modal.unit.test.js +0 -0
  183. /package/dist/{tests → tsc/tests}/procaptcha.unit.test.d.ts +0 -0
  184. /package/dist/{tests → tsc/tests}/procaptcha.unit.test.js +0 -0
  185. /package/dist/{tests → tsc/tests}/procaptchaReact.test-d.d.ts +0 -0
  186. /package/dist/{tests → tsc/tests}/procaptchaReact.test-d.js +0 -0
  187. /package/dist/{tests → tsc/tests}/procaptchaWidget.unit.test.d.ts +0 -0
  188. /package/dist/{tests → tsc/tests}/procaptchaWidget.unit.test.js +0 -0
  189. /package/dist/{tests → tsc/tests}/render.d.ts +0 -0
  190. /package/dist/{tests → tsc/tests}/render.js +0 -0
  191. /package/dist/{tests → tsc/tests}/util.unit.test.d.ts +0 -0
  192. /package/dist/{tests → tsc/tests}/util.unit.test.js +0 -0
  193. /package/dist/{util → tsc/util}/index.d.ts +0 -0
@@ -0,0 +1,213 @@
1
+ import { ProsopoError } from "@prosopo/common";
2
+ import { Teardown, activationOf, applyStyles, clearElement, createControl, createElement, createSvgElement, threeColumnBasis, wrapRandomly, } from "@prosopo/procaptcha-common";
3
+ import { darkTheme, lightTheme, randomInt, } from "@prosopo/widget-skeleton";
4
+ const getHash = (item) => {
5
+ if (!item.hash) {
6
+ throw new ProsopoError({
7
+ code: "INVALID_DATA",
8
+ errorSite: "PREA-1",
9
+ message: "missing item hash",
10
+ context: { item },
11
+ });
12
+ }
13
+ return item.hash;
14
+ };
15
+ const cellStyle = (gap) => ({
16
+ flexGrow: 1,
17
+ flexBasis: threeColumnBasis(gap),
18
+ boxSizing: "border-box",
19
+ });
20
+ const MIN_GRID_GAP = 8;
21
+ const MAX_GRID_GAP = 15;
22
+ const GRID_PADDING_JITTER = 4;
23
+ const MIN_WRAPPER_DEPTH = 0;
24
+ const MAX_WRAPPER_DEPTH = 2;
25
+ const CHECK_ICON_PATH = "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z";
26
+ const retrySrc = (url) => url.includes("token=")
27
+ ? url
28
+ : `${url}${url.includes("?") ? "&" : "?"}retry=${Date.now()}`;
29
+ const themeOf = (themeColor) => "light" === themeColor ? lightTheme : darkTheme;
30
+ const generateMetrics = (theme) => ({
31
+ gap: randomInt(MIN_GRID_GAP, MAX_GRID_GAP),
32
+ paddingTop: Math.max(0, theme.spacing.unit + randomInt(-GRID_PADDING_JITTER, GRID_PADDING_JITTER)),
33
+ paddingBottom: Math.max(0, theme.spacing.unit + randomInt(-GRID_PADDING_JITTER, GRID_PADDING_JITTER)),
34
+ });
35
+ const gridStyle = (metrics) => ({
36
+ width: "100%",
37
+ height: "100%",
38
+ display: "flex",
39
+ flexDirection: "row",
40
+ flexWrap: "wrap",
41
+ justifyContent: "space-between",
42
+ paddingTop: `${metrics.paddingTop}px`,
43
+ paddingBottom: `${metrics.paddingBottom}px`,
44
+ gap: `${metrics.gap}px`,
45
+ });
46
+ const selectionStyle = (theme, selected) => ({
47
+ borderRadius: selected ? theme.shape.tileSelected : theme.shape.tile,
48
+ transform: selected ? "scale(0.9)" : "none",
49
+ });
50
+ export const 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) {
83
+ image.removeAttribute("src");
84
+ image.src = retrySrc(item.data);
85
+ }
86
+ });
87
+ const icon = createSvgElement("svg", {
88
+ style: {
89
+ backgroundColor: theme.palette.checkbox.fill,
90
+ display: "block",
91
+ width: "34px",
92
+ height: "34px",
93
+ padding: "7px",
94
+ borderRadius: "50%",
95
+ boxSizing: "border-box",
96
+ transition: "fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms",
97
+ userSelect: "none",
98
+ fill: theme.palette.checkbox.tick,
99
+ },
100
+ attributes: {
101
+ focusable: "false",
102
+ "aria-hidden": "true",
103
+ viewBox: "0 0 24 24",
104
+ },
105
+ children: [
106
+ createSvgElement("path", { attributes: { d: CHECK_ICON_PATH } }),
107
+ ],
108
+ });
109
+ const overlay = createElement("div", {
110
+ style: {
111
+ position: "absolute",
112
+ top: 0,
113
+ left: 0,
114
+ bottom: 0,
115
+ right: 0,
116
+ height: "100%",
117
+ width: "100%",
118
+ display: "flex",
119
+ alignItems: "center",
120
+ justifyContent: "center",
121
+ backgroundColor: theme.palette.overlay,
122
+ borderRadius: theme.shape.tileSelected,
123
+ visibility: "hidden",
124
+ },
125
+ children: [icon],
126
+ });
127
+ const clickable = createControl(teardown, {
128
+ style: {
129
+ position: "relative",
130
+ cursor: "pointer",
131
+ height: "100%",
132
+ width: "100%",
133
+ padding: 0,
134
+ margin: 0,
135
+ border: "none",
136
+ background: "none",
137
+ appearance: "none",
138
+ display: "block",
139
+ },
140
+ children: [image, overlay],
141
+ onActivate: (event) => {
142
+ const { x, y, inputMethod } = activationOf(event);
143
+ props.onClick(hash, x, y, inputMethod);
144
+ },
145
+ });
146
+ teardown.addEventListener(clickable, "focus", () => {
147
+ focusedHash = clickable.matches(":focus-visible") ? hash : null;
148
+ applyFocusRing();
149
+ });
150
+ teardown.addEventListener(clickable, "blur", () => {
151
+ focusedHash = null;
152
+ applyFocusRing();
153
+ });
154
+ const cell = createElement("div", {
155
+ style: cellStyle(metrics.gap),
156
+ children: [clickable],
157
+ });
158
+ grid.appendChild(wrapRandomly(cell, MIN_WRAPPER_DEPTH, MAX_WRAPPER_DEPTH));
159
+ return { hash, image, overlay, clickable };
160
+ };
161
+ const applyFocusRing = () => {
162
+ const theme = themeOf(props.themeColor);
163
+ for (const tile of tiles) {
164
+ applyStyles(tile.clickable, focusedHash === tile.hash
165
+ ? {
166
+ outline: `3px solid ${theme.palette.primary.main}`,
167
+ outlineOffset: "2px",
168
+ }
169
+ : { outline: "none", outlineOffset: undefined });
170
+ }
171
+ };
172
+ const rebuild = () => {
173
+ teardown.run();
174
+ teardown = new Teardown();
175
+ clearElement(grid);
176
+ applyStyles(grid, gridStyle(metrics));
177
+ tiles = props.challenge.items.map(buildTile);
178
+ renderedChallenge = props.challenge;
179
+ };
180
+ const applySelection = () => {
181
+ const theme = themeOf(props.themeColor);
182
+ for (const tile of tiles) {
183
+ const selected = props.solution.some((entry) => entry[0] === tile.hash);
184
+ applyStyles(tile.image, selectionStyle(theme, selected));
185
+ applyStyles(tile.overlay, {
186
+ visibility: selected ? "visible" : "hidden",
187
+ });
188
+ tile.clickable.setAttribute("aria-pressed", String(selected));
189
+ }
190
+ };
191
+ rebuild();
192
+ applySelection();
193
+ applyFocusRing();
194
+ container.appendChild(grid);
195
+ return {
196
+ update: (nextProps) => {
197
+ const needsRebuild = nextProps.challenge !== renderedChallenge ||
198
+ nextProps.themeColor !== props.themeColor;
199
+ props = nextProps;
200
+ if (needsRebuild) {
201
+ focusedHash = null;
202
+ rebuild();
203
+ }
204
+ applySelection();
205
+ applyFocusRing();
206
+ },
207
+ destroy: () => {
208
+ teardown.run();
209
+ grid.parentNode?.removeChild(grid);
210
+ },
211
+ };
212
+ };
213
+ //# sourceMappingURL=captchaWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captchaWidget.js","sourceRoot":"","sources":["../../../src/components/captchaWidget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,43 @@
1
+ import { startCollector } from "@prosopo/procaptcha";
2
+ import { createElement } from "@prosopo/procaptcha-common";
3
+ const arrayUpdater = (target) => {
4
+ return (update) => {
5
+ const next = "function" === typeof update ? update([...target]) : [...update];
6
+ target.length = 0;
7
+ target.push(...next);
8
+ };
9
+ };
10
+ export const mountCollector = (container, initialProps) => {
11
+ let props = initialProps;
12
+ const mouseEvents = [];
13
+ const touchEvents = [];
14
+ const keyboardEvents = [];
15
+ const root = createElement("div");
16
+ container.appendChild(root);
17
+ startCollector(arrayUpdater(mouseEvents), arrayUpdater(touchEvents), arrayUpdater(keyboardEvents), root);
18
+ let lastAccount;
19
+ let lastOnProcessData;
20
+ const emit = () => {
21
+ if (props.account === lastAccount &&
22
+ props.onProcessData === lastOnProcessData) {
23
+ return;
24
+ }
25
+ lastAccount = props.account;
26
+ lastOnProcessData = props.onProcessData;
27
+ if (props.account) {
28
+ props.onProcessData({ mouseEvents, touchEvents, keyboardEvents });
29
+ }
30
+ };
31
+ emit();
32
+ return {
33
+ update: (nextProps) => {
34
+ props = nextProps;
35
+ emit();
36
+ },
37
+ destroy: () => {
38
+ root.parentNode?.removeChild(root);
39
+ },
40
+ };
41
+ };
42
+ export default mountCollector;
43
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,8 @@
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";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,UAAU,CAAC;IAE5D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC9B;AAQD,eAAO,MAAM,UAAU,iBAAkB,UAAU,KAAG,cA4CrD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { applyStyles, createElement, mountChallengeSurface, wrapRandomly, } from "@prosopo/procaptcha-common";
2
+ import { randomToken } from "@prosopo/widget-skeleton";
3
+ const MIN_WRAPPER_DEPTH = 1;
4
+ const MAX_WRAPPER_DEPTH = 3;
5
+ export const mountModal = (initialProps) => {
6
+ const inner = createElement("div", { className: randomToken() });
7
+ applyStyles(inner, {
8
+ width: "100%",
9
+ maxWidth: "500px",
10
+ maxHeight: "100%",
11
+ marginLeft: "auto",
12
+ marginRight: "auto",
13
+ backgroundColor: "transparent",
14
+ border: "none",
15
+ borderRadius: "28px",
16
+ boxSizing: "border-box",
17
+ });
18
+ const outerClassName = randomToken();
19
+ const surfaceProps = (props) => ({
20
+ show: props.show,
21
+ placement: props.placement,
22
+ anchor: props.anchor,
23
+ onDismiss: props.onDismiss,
24
+ scrim: "none",
25
+ className: outerClassName,
26
+ dialogLabel: props.dialogLabel,
27
+ });
28
+ const surface = mountChallengeSurface(surfaceProps(initialProps));
29
+ surface.content.appendChild(wrapRandomly(inner, MIN_WRAPPER_DEPTH, MAX_WRAPPER_DEPTH));
30
+ return {
31
+ content: inner,
32
+ update: (props) => surface.update(surfaceProps(props)),
33
+ destroy: () => surface.destroy(),
34
+ };
35
+ };
36
+ //# sourceMappingURL=modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../../../src/components/modal.ts"],"names":[],"mappings":"AAcA,OAAO,EAEN,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,YAAY,GACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAevD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAK5B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAwB,EAAkB,EAAE;IACtE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAEjE,WAAW,CAAC,KAAK,EAAE;QAMlB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM;QACnB,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,YAAY;KACvB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,EAAE,CAAC;IAErC,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,MAAe;QACtB,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAA8B,qBAAqB,CAC/D,YAAY,CAAC,YAAY,CAAC,CAC1B,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,WAAW,CAC1B,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CACzD,CAAC;IAEF,OAAO;QACN,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;KAChC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.d.ts","sourceRoot":"","sources":["../../../src/components/procaptcha.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAOvC,MAAM,MAAM,iBAAiB,GAAG,CAC/B,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,eAAe,KAClB,sBAAsB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,iBAAiB,CACE,CAAC;AAOpE,eAAO,MAAM,eAAe,cAChB,WAAW,SACf,eAAe,KACpB,sBAkBF,CAAC"}
@@ -0,0 +1,19 @@
1
+ export const loadProcaptcha = async () => (await import("./procaptchaWidget.js")).mountProcaptchaImageWidget;
2
+ export const mountProcaptcha = (container, props) => {
3
+ let destroyed = false;
4
+ let inner;
5
+ void loadProcaptcha().then((mount) => {
6
+ if (destroyed) {
7
+ return;
8
+ }
9
+ inner = mount(container, props);
10
+ });
11
+ return {
12
+ destroy: () => {
13
+ destroyed = true;
14
+ inner?.destroy();
15
+ inner = undefined;
16
+ },
17
+ };
18
+ };
19
+ //# sourceMappingURL=procaptcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptcha.js","sourceRoot":"","sources":["../../../src/components/procaptcha.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAgC,EAAE,CACpE,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAOpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,SAAsB,EACtB,KAAsB,EACG,EAAE;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAyC,CAAC;IAE9C,KAAK,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAwB,EAAE,EAAE;QACvD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO;QACR,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,EAAE,OAAO,EAAE,CAAC;YACjB,KAAK,GAAG,SAAS,CAAC;QACnB,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.d.ts","sourceRoot":"","sources":["../../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"AAgCA,OAAO,EAEN,KAAK,eAAe,EAEpB,MAAM,gBAAgB,CAAC;AAWxB,MAAM,WAAW,sBAAsB;IACtC,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,0BAA0B,cAC3B,WAAW,SACf,eAAe,KACpB,sBAyRF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,218 @@
1
+ import { createTranslator, loadI18next, localiseError } from "@prosopo/locale";
2
+ import { Manager } from "@prosopo/procaptcha";
3
+ import { Teardown, activationOf, audioAlternativeOffer, createElement, createProcaptchaState, createRenderScheduler, isEventTrusted, mountCheckbox, mountHoneypot, mountTestModeBanner, } from "@prosopo/procaptcha-common";
4
+ import { ProcaptchaConfigSchema, } from "@prosopo/types";
5
+ import { darkTheme, lightTheme } from "@prosopo/widget-skeleton";
6
+ import { mountCaptchaComponent, } from "./captchaComponent.js";
7
+ import { mountModal } from "./modal.js";
8
+ const PROCAPTCHA_EXECUTE_EVENT = "procaptcha:execute";
9
+ export const mountProcaptchaImageWidget = (container, props) => {
10
+ const teardown = new Teardown();
11
+ const config = ProcaptchaConfigSchema.parse(props.config);
12
+ const frictionlessState = props.frictionlessState;
13
+ const i18n = props.i18n;
14
+ const callbacks = props.callbacks || {};
15
+ const translator = createTranslator(i18n);
16
+ const isInvisible = "invisible" === config.mode;
17
+ const store = createProcaptchaState();
18
+ if (props.startShowRetry) {
19
+ store.update({ answeredIncorrectly: true });
20
+ }
21
+ let loading = false;
22
+ let lastError = store.state.error;
23
+ let lastCoords = null;
24
+ let sessionInvalidatedFired = false;
25
+ let honeypot;
26
+ let captcha;
27
+ let checkbox;
28
+ const delegatesReload = Boolean(props.onReload);
29
+ const manager = Manager(config, store.state, store.update, callbacks, frictionlessState, () => honeypot?.getValue(), delegatesReload
30
+ ? (x, y) => props.onReload?.(x, y, { refresh: true })
31
+ : undefined);
32
+ const root = createElement("div", {
33
+ className: isInvisible ? undefined : "image-captcha",
34
+ });
35
+ container.appendChild(root);
36
+ if (frictionlessState?.hp) {
37
+ honeypot = mountHoneypot(root, { encodedQuestion: frictionlessState.hp });
38
+ }
39
+ const modalProps = () => ({
40
+ show: store.state.showModal,
41
+ placement: config.placement,
42
+ anchor: props.container,
43
+ onDismiss: manager.cancel,
44
+ dialogLabel: translator.t("WIDGET.IMAGE_DIALOG_LABEL", {
45
+ defaultValue: "Image challenge",
46
+ }),
47
+ });
48
+ const modal = mountModal(modalProps());
49
+ const emptyChallenge = createElement("div", { text: "No challenge set." });
50
+ const banner = isInvisible
51
+ ? undefined
52
+ : mountTestModeBanner(root, { siteKey: config.account.address ?? "" });
53
+ const captchaProps = (challenge) => ({
54
+ challenge,
55
+ index: store.state.index,
56
+ solutions: store.state.solutions,
57
+ onSubmit: manager.submit,
58
+ onCancel: manager.cancel,
59
+ onClick: manager.select,
60
+ onNext: manager.nextRound,
61
+ onReload: manager.reload,
62
+ themeColor: config.theme ?? "light",
63
+ translator,
64
+ audioAlternative: audioAlternativeOffer(props, translator.isReady() ? translator.t("WIDGET.AUDIO_ALTERNATIVE") : ""),
65
+ });
66
+ const renderModal = () => {
67
+ modal.update(modalProps());
68
+ const challenge = store.state.challenge;
69
+ if (undefined !== challenge) {
70
+ emptyChallenge.parentNode?.removeChild(emptyChallenge);
71
+ if (undefined === captcha) {
72
+ captcha = mountCaptchaComponent(modal.content, captchaProps(challenge));
73
+ }
74
+ else {
75
+ captcha.update(captchaProps(challenge));
76
+ }
77
+ return;
78
+ }
79
+ captcha?.destroy();
80
+ captcha = undefined;
81
+ if (!isInvisible && emptyChallenge.parentNode !== modal.content) {
82
+ modal.content.appendChild(emptyChallenge);
83
+ }
84
+ };
85
+ const runErrorEffect = () => {
86
+ if (store.state.error === lastError) {
87
+ return;
88
+ }
89
+ lastError = store.state.error;
90
+ if (!store.state.error) {
91
+ return;
92
+ }
93
+ loading = false;
94
+ if (store.state.error.code !== "NO_SESSION_FOUND") {
95
+ return;
96
+ }
97
+ const willRecover = (props.onSessionInvalidated && !sessionInvalidatedFired) ||
98
+ undefined !== frictionlessState;
99
+ if (willRecover) {
100
+ loading = true;
101
+ store.update({ error: undefined });
102
+ }
103
+ if (props.onSessionInvalidated && !sessionInvalidatedFired) {
104
+ sessionInvalidatedFired = true;
105
+ props.onSessionInvalidated(lastCoords?.x, lastCoords?.y);
106
+ return;
107
+ }
108
+ if (frictionlessState) {
109
+ const timer = setTimeout(() => {
110
+ frictionlessState.restart();
111
+ }, 100);
112
+ teardown.add(() => clearTimeout(timer));
113
+ }
114
+ };
115
+ const render = () => {
116
+ runErrorEffect();
117
+ renderModal();
118
+ checkbox?.update(checkboxProps());
119
+ };
120
+ const scheduler = createRenderScheduler(render);
121
+ const checkboxProps = () => ({
122
+ theme: "light" === props.config.theme ? lightTheme : darkTheme,
123
+ checked: store.state.isHuman,
124
+ labelText: translator.isReady() ? translator.t("WIDGET.I_AM_HUMAN") : "",
125
+ error: store.state.error
126
+ ? localiseError(translator.i18n, store.state.error)
127
+ : undefined,
128
+ notice: store.state.answeredIncorrectly
129
+ ? translator.t("WIDGET.PUZZLE.RETRY")
130
+ : undefined,
131
+ loadingText: translator.t("WIDGET.CHECKING", {
132
+ defaultValue: "Checking that you are human",
133
+ }),
134
+ loading,
135
+ onChange: async (event) => {
136
+ if (!isEventTrusted(event)) {
137
+ return;
138
+ }
139
+ if (loading) {
140
+ return;
141
+ }
142
+ loading = true;
143
+ scheduler.schedule();
144
+ const { x, y, inputMethod } = activationOf(event);
145
+ lastCoords = { x, y };
146
+ try {
147
+ await manager.start(x, y, inputMethod);
148
+ }
149
+ catch (error) {
150
+ console.error("Error starting verification:", error);
151
+ }
152
+ finally {
153
+ loading = false;
154
+ scheduler.schedule();
155
+ }
156
+ },
157
+ });
158
+ if (!isInvisible) {
159
+ checkbox = mountCheckbox(root, checkboxProps());
160
+ }
161
+ teardown.add(scheduler.cancel);
162
+ teardown.add(store.subscribe(scheduler.schedule));
163
+ teardown.add(translator.subscribe(scheduler.schedule));
164
+ const handleExecute = () => {
165
+ store.update({ showModal: true });
166
+ if (!store.state.challenge) {
167
+ console.log("No challenge set, attempting to start verification");
168
+ try {
169
+ void manager.start();
170
+ }
171
+ catch (error) {
172
+ console.error("Error starting verification:", error);
173
+ }
174
+ }
175
+ };
176
+ teardown.addEventListener(document, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
177
+ if (props.container) {
178
+ teardown.addEventListener(props.container, PROCAPTCHA_EXECUTE_EVENT, handleExecute);
179
+ }
180
+ if (config.language) {
181
+ if (i18n) {
182
+ if (i18n.language !== config.language) {
183
+ void i18n.changeLanguage(config.language);
184
+ }
185
+ }
186
+ else {
187
+ void loadI18next(false, config.language);
188
+ }
189
+ }
190
+ if (props.autoStart) {
191
+ loading = true;
192
+ const coords = props.startCoords;
193
+ lastCoords = coords ?? null;
194
+ scheduler.schedule();
195
+ const clearLoading = () => {
196
+ loading = false;
197
+ scheduler.schedule();
198
+ };
199
+ manager
200
+ .start(coords?.x ?? 0, coords?.y ?? 0)
201
+ .then(clearLoading, clearLoading);
202
+ }
203
+ render();
204
+ return {
205
+ destroy: () => {
206
+ manager.dispose();
207
+ teardown.run();
208
+ captcha?.destroy();
209
+ modal.destroy();
210
+ checkbox?.destroy();
211
+ banner?.destroy();
212
+ honeypot?.destroy();
213
+ root.parentNode?.removeChild(root);
214
+ },
215
+ };
216
+ };
217
+ export default mountProcaptchaImageWidget;
218
+ //# sourceMappingURL=procaptchaWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procaptchaWidget.js","sourceRoot":"","sources":["../../../src/components/procaptchaWidget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorSites.d.ts","sourceRoot":"","sources":["../../src/errorSites.ts"],"names":[],"mappings":"AAcA,OAAO,QAAQ,iBAAiB,CAAC;IAChC,UAAU,UAAU;QACnB,QAAQ,EAAE,IAAI,CAAC;KACf;CACD;AAED,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errorSites.js","sourceRoot":"","sources":["../src/errorSites.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"errorSites.js","sourceRoot":"","sources":["../../src/errorSites.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./components/index.js";
2
+ export * from "./util/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/button.unit.test.ts"],"names":[],"mappings":""}
@@ -47,6 +47,10 @@ afterEach(() => {
47
47
  vi.unstubAllGlobals();
48
48
  });
49
49
  describe("what the button renders", () => {
50
+ test("is at least 44px tall, so a fingertip can hit it", () => {
51
+ const element = render({ text: "Next" });
52
+ expect(Number.parseFloat(element.style.minHeight)).toBeGreaterThanOrEqual(44);
53
+ });
50
54
  test("shows its text and labels itself with it", () => {
51
55
  const element = render({ text: "Submit" });
52
56
  expect(element.textContent).toBe("Submit");