@verbb/formie-browser 1.0.5 → 1.0.7

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 (98) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/chunks/{address-finder-yXU5yMjG.js → address-finder-k7_BXaRe.js} +1 -1
  3. package/dist/chunks/{api-DMK8NSUI.js → api-BUb6P-xu.js} +57 -51
  4. package/dist/chunks/{api-CmwLRq_n.js → api-DztsCJ4r.js} +178 -170
  5. package/dist/chunks/{bpoint-DSjqRv63.js → bpoint-2qDxlKD9.js} +1 -1
  6. package/dist/chunks/{calculations-CgVJcQ2P.js → calculations-CeDgB9jt.js} +13 -13
  7. package/dist/chunks/{captcha-eu-CWJb64_j.js → captcha-eu-CGm8Lbrj.js} +2 -2
  8. package/dist/chunks/{conditions-CZ3FU5QO.js → conditions-B6_nzpeE.js} +97 -85
  9. package/dist/chunks/dist-BQ4a9hmy.js +2659 -0
  10. package/dist/chunks/{eway-D3ctTbEk.js → eway-CImXrB4g.js} +2 -2
  11. package/dist/chunks/{friendly-captcha-v1-ByXzENYZ.js → friendly-captcha-v1-C_2reOXr.js} +1 -1
  12. package/dist/chunks/{friendly-captcha-v2-BPdlmhQu.js → friendly-captcha-v2-CLSAbkqx.js} +1 -1
  13. package/dist/chunks/{go-cardless-BwASSYSK.js → go-cardless-Bz7HHtH0.js} +1 -1
  14. package/dist/chunks/{google-address-OhKilPWE.js → google-address-BH3Zhi06.js} +1 -1
  15. package/dist/chunks/{hcaptcha-CdCd9oEi.js → hcaptcha-CGLAmgjO.js} +2 -2
  16. package/dist/chunks/{loqate-Cp2zvwpE.js → loqate-CJPzBmSm.js} +1 -1
  17. package/dist/chunks/{mollie-COG-ko2D.js → mollie-BtnB3KGh.js} +1 -1
  18. package/dist/chunks/{moneris-CMH8PlRc.js → moneris-Bd4vUk8b.js} +1 -1
  19. package/dist/chunks/{opayo-D2jsR5vh.js → opayo-B-eRIXo-.js} +4 -4
  20. package/dist/chunks/{paddle-DxF88RfC.js → paddle-BUFeEU4d.js} +2 -2
  21. package/dist/chunks/{paypal-b5pnwrA2.js → paypal-8Euw7Hrn.js} +2 -2
  22. package/dist/chunks/{payway-BJYu9DIR.js → payway-dV0SzJxy.js} +2 -2
  23. package/dist/chunks/{recaptcha-enterprise-BSwi8IVX.js → recaptcha-enterprise-XPId5-bS.js} +19 -20
  24. package/dist/chunks/{recaptcha-shared-B4zAescW.js → recaptcha-shared-CLYJvojk.js} +15 -3
  25. package/dist/chunks/{recaptcha-v2-checkbox-CnDQmsKa.js → recaptcha-v2-checkbox-Cy-0PEPc.js} +2 -2
  26. package/dist/chunks/{recaptcha-v2-invisible-Cz5uIlp-.js → recaptcha-v2-invisible-BwRH540O.js} +2 -2
  27. package/dist/chunks/recaptcha-v3-No4Ykrhk.js +28 -0
  28. package/dist/chunks/rich-text-D0sb8bmX.js +349 -0
  29. package/dist/chunks/scripts-CbQ7agX3.js +30 -0
  30. package/dist/chunks/{signature-CpgqHCEx.js → signature-xz4QO7CR.js} +107 -34
  31. package/dist/chunks/{snaptcha-vz1RnZ15.js → snaptcha-DKx98oon.js} +1 -1
  32. package/dist/chunks/{square-BP8RWAKB.js → square-reyJukb7.js} +2 -2
  33. package/dist/chunks/{stripe-MihN63uC.js → stripe-BC-2PBvY.js} +2 -2
  34. package/dist/chunks/{text-limit-B09elPDB.js → text-limit-DbgEFHLO.js} +1 -1
  35. package/dist/chunks/{turnstile-D_Pi1CKM.js → turnstile-DJakPzQD.js} +3 -3
  36. package/dist/chunks/upload-manager-BpqWSHmU.js +2558 -0
  37. package/dist/css/theme/_buttons.css +16 -0
  38. package/dist/css/theme/_tokens.css +2 -0
  39. package/dist/css/theme/fields/_signature.css +19 -0
  40. package/dist/css/theme/fields/_upload-manager.css +279 -0
  41. package/dist/index.js +629 -578
  42. package/dist/js/core/create-formie-client.d.ts.map +1 -1
  43. package/dist/js/core/error-aria-live.d.ts +6 -0
  44. package/dist/js/core/error-aria-live.d.ts.map +1 -0
  45. package/dist/js/core/submit-result-state.d.ts.map +1 -1
  46. package/dist/js/core/submit-result-ui.d.ts.map +1 -1
  47. package/dist/js/modules/captchas/factories.d.ts.map +1 -1
  48. package/dist/js/modules/captchas/host.d.ts +1 -0
  49. package/dist/js/modules/captchas/host.d.ts.map +1 -1
  50. package/dist/js/modules/captchas/recaptcha-enterprise.d.ts.map +1 -1
  51. package/dist/js/modules/captchas/recaptcha-shared.d.ts +1 -0
  52. package/dist/js/modules/captchas/recaptcha-shared.d.ts.map +1 -1
  53. package/dist/js/modules/captchas/recaptcha-v3.d.ts.map +1 -1
  54. package/dist/js/modules/captchas/turnstile.d.ts.map +1 -1
  55. package/dist/js/modules/fields/conditions/effects.d.ts.map +1 -1
  56. package/dist/js/modules/fields/index.d.ts.map +1 -1
  57. package/dist/js/modules/fields/signature.d.ts.map +1 -1
  58. package/dist/js/modules/fields/upload-manager.d.ts +3 -0
  59. package/dist/js/modules/fields/upload-manager.d.ts.map +1 -0
  60. package/dist/js/utils/form-started-at.d.ts +2 -0
  61. package/dist/js/utils/form-started-at.d.ts.map +1 -0
  62. package/dist/js/utils/scripts.d.ts.map +1 -1
  63. package/dist/js/utils/unload-warning.d.ts.map +1 -1
  64. package/dist/js/validation/enter-key-guard.d.ts +2 -0
  65. package/dist/js/validation/enter-key-guard.d.ts.map +1 -0
  66. package/dist/js/validation/types.d.ts +1 -0
  67. package/dist/js/validation/types.d.ts.map +1 -1
  68. package/dist/js/validation/validator.d.ts.map +1 -1
  69. package/package.json +4 -2
  70. package/src/css/theme/_buttons.css +16 -0
  71. package/src/css/theme/_tokens.css +2 -0
  72. package/src/css/theme/fields/_signature.css +19 -0
  73. package/src/css/theme/fields/_upload-manager.css +279 -0
  74. package/src/js/core/create-formie-client.ts +7 -0
  75. package/src/js/core/error-aria-live.ts +45 -0
  76. package/src/js/core/submit-result-state.ts +4 -0
  77. package/src/js/core/submit-result-ui.ts +8 -4
  78. package/src/js/modules/captchas/factories.ts +4 -0
  79. package/src/js/modules/captchas/host.ts +14 -2
  80. package/src/js/modules/captchas/recaptcha-enterprise.ts +14 -11
  81. package/src/js/modules/captchas/recaptcha-shared.ts +14 -0
  82. package/src/js/modules/captchas/recaptcha-v3.ts +7 -4
  83. package/src/js/modules/captchas/turnstile.ts +9 -3
  84. package/src/js/modules/fields/conditions/effects.ts +42 -0
  85. package/src/js/modules/fields/index.ts +1 -0
  86. package/src/js/modules/fields/signature.ts +199 -15
  87. package/src/js/modules/fields/upload-manager.ts +1277 -0
  88. package/src/js/utils/form-started-at.ts +25 -0
  89. package/src/js/utils/scripts.ts +16 -0
  90. package/src/js/utils/unload-warning.ts +1 -0
  91. package/src/js/validation/enter-key-guard.ts +63 -0
  92. package/src/js/validation/types.ts +1 -0
  93. package/src/js/validation/validator.ts +14 -5
  94. package/src/vendor.d.ts +1 -1
  95. package/dist/chunks/dist-BF5GU3_9.js +0 -2674
  96. package/dist/chunks/recaptcha-v3-BtbbP111.js +0 -27
  97. package/dist/chunks/rich-text-Cv8ADyk-.js +0 -349
  98. package/dist/chunks/scripts-6CYSUGKQ.js +0 -24
package/CHANGELOG.md CHANGED
@@ -2,6 +2,31 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.0.7 - 2026-06-18
6
+
7
+ ### Added
8
+ - Add configurable `aria-live` behaviour for field and form validation errors via the plugin `errorAriaLive` setting (`polite`, `assertive`, or `off`). Live validation while typing always uses polite announcements. ([#2505](https://github.com/verbb/formie/issues/2505))
9
+
10
+ ### Fixed
11
+ - Skip validation for fields disabled by conditional logic, and disable conditionally hidden submit/next buttons so Enter no longer triggers hidden actions. ([#2727](https://github.com/verbb/formie/issues/2727), [#1136](https://github.com/verbb/formie/issues/1136), [Discussion #1628](https://github.com/verbb/formie/discussions/1628))
12
+ - Initialise captcha placeholders immediately when multipage forms change page via tabs or Ajax **Next**, so providers mount on the visible page before submit. ([#1893](https://github.com/verbb/formie/issues/1893))
13
+ - Tear down Cloudflare Turnstile widgets with `remove()` during remounts and apply CSP nonces to dynamically loaded captcha scripts where available. ([#2535](https://github.com/verbb/formie/issues/2535))
14
+ - Wait for reCAPTCHA Enterprise readiness before executing score/policy challenges on multipage navigation. ([#2224](https://github.com/verbb/formie/issues/2224))
15
+
16
+ ## 1.0.6 - 2026-06-14
17
+
18
+ ### Added
19
+
20
+ - Add the `upload-manager` field module for File Upload **Upload Manager (Advanced)** fields, powered by Uppy (`@uppy/core` + `@uppy/xhr-upload`). Supports drag-and-drop, async staged uploads to Formie upload endpoints, transfer progress with server-processing feedback, remove, hidden asset ID sync, hydration for saved submissions and drafts, up/down reorder controls, and repeater row binding.
21
+
22
+ ### Changed
23
+
24
+ - Run stale pending File Upload cleanup during Craft garbage collection.
25
+
26
+ ### Fixed
27
+
28
+ - Fix Signature field initialization on multi-page forms, conditional fields, and late layout by retrying canvas sizing, watching visibility changes, and surfacing accurate status messages when canvas support or init fails. ([#2708](https://github.com/verbb/formie/issues/2708))
29
+
5
30
  ## 1.0.5 - 2026-06-12
6
31
 
7
32
  ### Added
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./event-names-BCI2FLD8.js";
2
2
  import { t } from "./api-sPqGbOww.js";
3
- import { r as n } from "./scripts-6CYSUGKQ.js";
3
+ import { r as n } from "./scripts-CbQ7agX3.js";
4
4
  //#region src/js/modules/address/address-finder.ts
5
5
  var r = "FORMIE_ADDRESS_FINDER_SCRIPT", i = t({
6
6
  id: "address-finder",
@@ -54,52 +54,52 @@ var g = new Set([
54
54
  "formie:page:navigate",
55
55
  "formie:page:navigate:after",
56
56
  "formie:submit:result"
57
- ];
58
- function y(e, t, n) {
57
+ ], y = new Set(["formie:page:navigate", "formie:page:navigate:after"]);
58
+ function b(e, t, n) {
59
59
  return e.addEventListener(t, n), () => {
60
60
  e.removeEventListener(t, n);
61
61
  };
62
62
  }
63
- function b(e, t) {
63
+ function x(e, t) {
64
64
  return e instanceof HTMLElement && e.matches(t) ? [e, ...Array.from(e.querySelectorAll(t))] : Array.from(e.querySelectorAll(t));
65
65
  }
66
- function x(e) {
66
+ function S(e) {
67
67
  if (!(e instanceof HTMLElement) || !e.isConnected || e.hidden || e.closest("[hidden]") || e.closest("[data-formie-page-hidden]") || e.closest("[aria-hidden=\"true\"]")) return !1;
68
68
  let t = window.getComputedStyle(e);
69
- return t.display !== "none" && t.visibility !== "hidden";
69
+ return t.display !== "none" && t.visibility !== "hidden" && e.getClientRects().length > 0;
70
70
  }
71
- function S(e, t) {
72
- let n = b(e, t);
73
- return n.find((e) => x(e)) || n[0] || null;
71
+ function C(e, t) {
72
+ let n = x(e, t);
73
+ return n.find((e) => S(e)) || n[0] || null;
74
74
  }
75
- function C(e) {
75
+ function w(e) {
76
76
  e.innerHTML = "";
77
77
  let t = document.createElement("div");
78
78
  return e.appendChild(t), t;
79
79
  }
80
- function w(e) {
80
+ function T(e) {
81
81
  e?.querySelector(_)?.remove();
82
82
  }
83
- function T(e, t, r) {
83
+ function E(e, t, r) {
84
84
  if (!e) return;
85
- w(e);
85
+ T(e);
86
86
  let i = document.createElement("div");
87
87
  i.setAttribute("data-formie-captcha-error-container", ""), i.setAttribute("aria-live", "polite"), i.setAttribute("aria-atomic", "true"), n(i, r || e, "fieldErrors");
88
88
  let a = document.createElement("div");
89
89
  a.setAttribute("data-formie-captcha-error", ""), a.setAttribute("role", "alert"), n(a, r || e, "fieldError"), a.textContent = t, i.appendChild(a), e.appendChild(i);
90
90
  }
91
- function E(e) {
91
+ function D(e) {
92
92
  let t = e instanceof CustomEvent ? e.detail : null;
93
93
  return !t || typeof t != "object" ? null : t;
94
94
  }
95
- function D(e, t) {
95
+ function O(e, t) {
96
96
  if (!e?.captchas || typeof e.captchas != "object") return null;
97
97
  let n = e.captchas[t];
98
98
  return !n || typeof n != "object" ? null : n;
99
99
  }
100
- function O(e, t, n, r) {
100
+ function k(e, t, n, r) {
101
101
  let i = /* @__PURE__ */ new Set(), o = () => {
102
- let a = b(e, t), o = new Set(a.filter((e) => x(e)));
102
+ let a = x(e, t), o = new Set(a.filter((e) => S(e)));
103
103
  a.forEach((e) => {
104
104
  o.has(e) && !i.has(e) && (i.add(e), n(e));
105
105
  }), Array.from(i).forEach((e) => {
@@ -120,9 +120,13 @@ function O(e, t, n, r) {
120
120
  "data-formie-page-hidden"
121
121
  ]
122
122
  });
123
- let l = [y(window, "resize", () => {
123
+ let l = [b(window, "resize", () => {
124
124
  s();
125
- }), ...v.map((t) => y(e, t, () => {
125
+ }), ...v.map((t) => b(e, t, () => {
126
+ if (y.has(t)) {
127
+ o();
128
+ return;
129
+ }
126
130
  s();
127
131
  }))];
128
132
  return o(), {
@@ -134,16 +138,17 @@ function O(e, t, n, r) {
134
138
  }), i.clear();
135
139
  },
136
140
  reconcile: s,
137
- getVisible: () => b(e, t).filter((e) => x(e))
141
+ reconcileImmediate: o,
142
+ getVisible: () => x(e, t).filter((e) => S(e))
138
143
  };
139
144
  }
140
- function k(e, t) {
145
+ function A(e, t) {
141
146
  return (typeof t.handle == "string" && t.handle.trim() !== "" ? t.handle.trim() : "") || e;
142
147
  }
143
- function A(e, t, { defaultPlaceholderSelector: n, defaultTokenFieldNames: i = [], defaultWaitForValueMs: a = o }) {
148
+ function j(e, t, { defaultPlaceholderSelector: n, defaultTokenFieldNames: i = [], defaultWaitForValueMs: a = o }) {
144
149
  let s = t || {}, c = Object.entries(s).reduce((e, [t, n]) => (g.has(t) || (e[t] = n), e), {}), l = i.map(String).filter(Boolean), u = Number(a), d = typeof s.placeholderSelector == "string" && s.placeholderSelector.trim() !== "" ? s.placeholderSelector.trim() : n, f = typeof s.errorMessage == "string" && s.errorMessage.trim() !== "" ? s.errorMessage.trim() : r("Captcha challenge must be completed."), p = typeof s.sessionKey == "string" && s.sessionKey.trim() !== "" ? s.sessionKey.trim() : null, m = typeof s.value == "string" ? s.value : null;
145
150
  return {
146
- handle: k(e, s),
151
+ handle: A(e, s),
147
152
  ui: {
148
153
  placeholderSelector: d,
149
154
  errorMessage: f
@@ -157,27 +162,27 @@ function A(e, t, { defaultPlaceholderSelector: n, defaultTokenFieldNames: i = []
157
162
  provider: c
158
163
  };
159
164
  }
160
- function j(e, t) {
165
+ function M(e, t) {
161
166
  let n = e.form || e.root, r = t.ui.placeholderSelector, i = t.handle;
162
167
  return {
163
168
  form: e.form,
164
169
  root: e.root,
165
170
  placeholder: {
166
- query: () => b(e.root, r),
167
- getPrimary: () => S(e.root, r),
168
- observe: (t, n) => O(e.root, r, t, n),
169
- createContainer: (e) => C(e),
171
+ query: () => x(e.root, r),
172
+ getPrimary: () => C(e.root, r),
173
+ observe: (t, n) => k(e.root, r, t, n),
174
+ createContainer: (e) => w(e),
170
175
  clear: (e) => {
171
- e && (w(e), e.innerHTML = "");
176
+ e && (T(e), e.innerHTML = "");
172
177
  }
173
178
  },
174
179
  errors: {
175
180
  getDefaultMessage: () => t.ui.errorMessage,
176
181
  show: (n, i) => {
177
- T(i || S(e.root, r), n || t.ui.errorMessage, e.form || e.root);
182
+ E(i || C(e.root, r), n || t.ui.errorMessage, e.form || e.root);
178
183
  },
179
184
  clear: (t) => {
180
- w(t || S(e.root, r));
185
+ T(t || C(e.root, r));
181
186
  }
182
187
  },
183
188
  tokens: {
@@ -200,8 +205,8 @@ function j(e, t) {
200
205
  refresh: {
201
206
  providerHandle: i,
202
207
  onTokensRefreshed: (t) => {
203
- let n = ["formie:refresh-tokens:after", "formie:refresh-tokens:refreshed"].map((n) => y(e.root, n, (e) => {
204
- let n = D(E(e), i);
208
+ let n = ["formie:refresh-tokens:after", "formie:refresh-tokens:refreshed"].map((n) => b(e.root, n, (e) => {
209
+ let n = O(D(e), i);
205
210
  n && t(n);
206
211
  }));
207
212
  return () => {
@@ -212,31 +217,31 @@ function j(e, t) {
212
217
  }
213
218
  },
214
219
  events: {
215
- onRoot: (t, n) => y(e.root, t, n),
216
- onForm: (t, n) => e.form ? y(e.form, t, n) : () => {}
220
+ onRoot: (t, n) => b(e.root, t, n),
221
+ onForm: (t, n) => e.form ? b(e.form, t, n) : () => {}
217
222
  }
218
223
  };
219
224
  }
220
225
  //#endregion
221
226
  //#region src/js/modules/captchas/factories.ts
222
- var M = t("captchas");
223
- function N({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [], defaultWaitForValueMs: r = o, setup: i }) {
227
+ var N = t("captchas");
228
+ function P({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [], defaultWaitForValueMs: r = o, setup: i }) {
224
229
  return {
225
230
  id: e,
226
231
  kind: "captcha",
227
232
  match: () => !0,
228
233
  setup: async (a) => {
229
- let o = A(e, a.options || {}, {
234
+ let o = j(e, a.options || {}, {
230
235
  defaultPlaceholderSelector: t,
231
236
  defaultTokenFieldNames: n,
232
237
  defaultWaitForValueMs: r
233
238
  });
234
- M.log("Setup module.", {
239
+ N.log("Setup module.", {
235
240
  moduleId: e,
236
241
  placeholderSelector: o.ui.placeholderSelector,
237
242
  tokenFieldNames: o.transport.tokenFieldNames
238
243
  });
239
- let s = j(a, o);
244
+ let s = M(a, o);
240
245
  return i({
241
246
  ...a,
242
247
  options: o,
@@ -245,8 +250,8 @@ function N({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [
245
250
  }
246
251
  };
247
252
  }
248
- function P({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [], defaultWaitForValueMs: r = o }) {
249
- return N({
253
+ function F({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [], defaultWaitForValueMs: r = o }) {
254
+ return P({
250
255
  id: e,
251
256
  defaultPlaceholderSelector: t,
252
257
  defaultTokenFieldNames: n,
@@ -258,7 +263,7 @@ function P({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [
258
263
  container: e
259
264
  }));
260
265
  }, l = t.placeholder.observe((t) => {
261
- a = t, M.log("Passive placeholder visible.", { moduleId: e }), c(t);
266
+ a = t, N.log("Passive placeholder visible.", { moduleId: e }), c(t);
262
267
  }, (e) => {
263
268
  a === e && (a = t.placeholder.getPrimary()), e.innerHTML = "";
264
269
  });
@@ -277,7 +282,7 @@ function P({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [
277
282
  let s = o ? [o] : n.transport.tokenFieldNames;
278
283
  if (s.length !== 0 && !await h(r, s, n.transport.waitForValueMs)) {
279
284
  let n = t.errors.getDefaultMessage();
280
- t.errors.show(n, a), M.warn("Passive captcha missing token.", {
285
+ t.errors.show(n, a), N.warn("Passive captcha missing token.", {
281
286
  moduleId: e,
282
287
  tokenFieldNames: s
283
288
  }), i.abort(n);
@@ -287,13 +292,13 @@ function P({ id: e, defaultPlaceholderSelector: t, defaultTokenFieldNames: n = [
287
292
  }
288
293
  });
289
294
  }
290
- function F(t) {
291
- return N({
295
+ function I(t) {
296
+ return P({
292
297
  id: t.id,
293
298
  defaultPlaceholderSelector: t.defaultPlaceholderSelector,
294
299
  defaultTokenFieldNames: t.defaultTokenFieldNames,
295
300
  setup: async (n) => {
296
- let r = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = n.services.placeholder.getPrimary(), s = !1, c = null, l = async () => (c ||= (M.log("Loading captcha provider API.", { moduleId: t.id }), t.load(n)), c), u = async (e) => {
301
+ let r = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = n.services.placeholder.getPrimary(), s = !1, c = null, l = async () => (c ||= (N.log("Loading captcha provider API.", { moduleId: t.id }), t.load(n)), c), u = async (e) => {
297
302
  let r = i.get(e);
298
303
  if (n.services.errors.clear(e), !r) {
299
304
  e.innerHTML = "";
@@ -307,7 +312,7 @@ function F(t) {
307
312
  services: n.services,
308
313
  options: n.options,
309
314
  provider: n.options.provider
310
- }), i.delete(e), e.innerHTML = "", n.services.tokens.clear(), M.log("Unmounted captcha placeholder widget.", { moduleId: t.id }), o === e && (o = n.services.placeholder.getPrimary());
315
+ }), i.delete(e), e.innerHTML = "", n.services.tokens.clear(), N.log("Unmounted captcha placeholder widget.", { moduleId: t.id }), o === e && (o = n.services.placeholder.getPrimary());
311
316
  }, d = async (e) => {
312
317
  if (s || i.has(e) || a.has(e)) return;
313
318
  let r = (async () => {
@@ -321,7 +326,7 @@ function F(t) {
321
326
  options: n.options,
322
327
  provider: n.options.provider
323
328
  });
324
- i.set(e, c), o = e, M.log("Mounted captcha placeholder widget.", { moduleId: t.id });
329
+ i.set(e, c), o = e, N.log("Mounted captcha placeholder widget.", { moduleId: t.id });
325
330
  })().finally(() => {
326
331
  a.delete(e);
327
332
  });
@@ -375,6 +380,7 @@ function F(t) {
375
380
  },
376
381
  onBeforeStage: async (e) => {
377
382
  if (e.stage !== "screen" || e.action !== "submit") return;
383
+ f.reconcileImmediate();
378
384
  let r = f.getVisible();
379
385
  if (r.length === 0) return;
380
386
  let a = r.find((e) => e === o) || r[0];
@@ -382,7 +388,7 @@ function F(t) {
382
388
  let s = i.get(a);
383
389
  if (!s) {
384
390
  let r = n.services.errors.getDefaultMessage();
385
- n.services.errors.show(r, a), M.warn("Captcha widget unavailable at screen stage.", { moduleId: t.id }), e.abort(r);
391
+ n.services.errors.show(r, a), N.warn("Captcha widget unavailable at screen stage.", { moduleId: t.id }), e.abort(r);
386
392
  return;
387
393
  }
388
394
  let c = await l();
@@ -402,6 +408,6 @@ function F(t) {
402
408
  }
403
409
  //#endregion
404
410
  //#region src/js/modules/captchas/api.ts
405
- var I = F, L = P;
411
+ var L = I, R = F;
406
412
  //#endregion
407
- export { s as a, l as i, L as n, c as o, u as r, I as t };
413
+ export { s as a, l as i, R as n, c as o, u as r, L as t };