@verbb/formie-browser 1.0.0 → 1.0.2

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 (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/chunks/address-finder-CQW81kY0.js +37 -0
  3. package/dist/chunks/bpoint-D8OjLmsn.js +26 -0
  4. package/dist/chunks/calculations-BqZsENCq.js +147 -0
  5. package/dist/chunks/captcha-eu-DIa6aUWz.js +34 -0
  6. package/dist/chunks/checkbox-radio-BI-UjgMF.js +136 -0
  7. package/dist/chunks/conditions-BVl6jTYo.js +433 -0
  8. package/dist/chunks/date-picker-69TgvErA.js +4994 -0
  9. package/dist/chunks/eway-1GPxH6DU.js +74 -0
  10. package/dist/chunks/file-upload-BDZZftgL.js +281 -0
  11. package/dist/chunks/friendly-captcha-v1-DA2QPKA3.js +33 -0
  12. package/dist/chunks/friendly-captcha-v2-BorOWiz_.js +38 -0
  13. package/dist/chunks/go-cardless-DwBgERcA.js +24 -0
  14. package/dist/chunks/google-address-BcTBncyS.js +162 -0
  15. package/dist/chunks/hcaptcha-BchdVCqq.js +56 -0
  16. package/dist/chunks/hidden-D8RqSPt7.js +31 -0
  17. package/dist/chunks/index-BEsfee-D.js +1839 -0
  18. package/dist/chunks/index-BP7Unm5Y.js +863 -0
  19. package/dist/chunks/index-C1ZOKiAi.js +4229 -0
  20. package/dist/chunks/loqate-nXuTX7In.js +55 -0
  21. package/dist/chunks/mollie-qdCynQCd.js +24 -0
  22. package/dist/chunks/moneris-BNEA-laO.js +101 -0
  23. package/dist/chunks/opayo-BJtXOkuK.js +122 -0
  24. package/dist/chunks/paddle-D72Pa8kr.js +60 -0
  25. package/dist/chunks/paypal-Cqt2bned.js +100 -0
  26. package/dist/chunks/payway-BjCqsc0H.js +56 -0
  27. package/dist/chunks/phone-country-K9pYAlzM.js +3765 -0
  28. package/dist/chunks/place-kit-Dg6f_UoM.js +42 -0
  29. package/dist/chunks/placekit-autocomplete.esm-LAwfbPZl.js +1299 -0
  30. package/dist/chunks/recaptcha-enterprise--VYAeeqz.js +71 -0
  31. package/dist/chunks/recaptcha-shared-PSIEEEe1.js +15 -0
  32. package/dist/chunks/recaptcha-v2-checkbox-atBNe5ml.js +41 -0
  33. package/dist/chunks/recaptcha-v2-invisible-DnBufNPT.js +59 -0
  34. package/dist/chunks/recaptcha-v3-CF6O8rDj.js +28 -0
  35. package/dist/chunks/repeater-CB7Yojvx.js +124 -0
  36. package/dist/chunks/rich-text-nAV_SQZo.js +304 -0
  37. package/dist/chunks/scripts-BkAAux0i.js +36 -0
  38. package/dist/chunks/sdk-3SicTWby.js +1559 -0
  39. package/dist/chunks/shared-DGqeMvcJ.js +80 -0
  40. package/dist/chunks/signature-BT6CsQ6n.js +550 -0
  41. package/dist/chunks/snaptcha-C7qQo02f.js +8 -0
  42. package/dist/chunks/square-C5AH3trb.js +46 -0
  43. package/dist/chunks/stripe-EJK0RyUv.js +202 -0
  44. package/dist/chunks/styles-C3aqgtek.js +21 -0
  45. package/dist/chunks/summary-DC_ipXCU.js +126 -0
  46. package/dist/chunks/table-BEAI99qo.js +95 -0
  47. package/dist/chunks/text-limit-Blgq5G-G.js +135 -0
  48. package/dist/chunks/turnstile-_uCRwnU-.js +59 -0
  49. package/dist/chunks/utils-BntI3W4S.js +6149 -0
  50. package/dist/index.js +39 -3205
  51. package/package.json +5 -5
  52. package/src/js/modules/fields/file-upload.ts +1 -1
  53. package/src/js/modules/fields/repeater.ts +1 -1
  54. package/src/js/modules/fields/rich-text.ts +2 -2
  55. package/src/js/modules/fields/signature.ts +1 -1
  56. package/src/js/modules/fields/summary.ts +1 -1
  57. package/src/js/modules/fields/table.ts +1 -1
  58. package/src/js/modules/fields/text-limit.ts +1 -1
  59. package/src/js/modules/payments/paypal.ts +1 -1
  60. package/src/js/modules/payments/payway.ts +1 -1
  61. package/src/js/modules/payments/stripe.ts +1 -1
  62. package/dist/chunks/address-finder-DfMCiW89.js +0 -47
  63. package/dist/chunks/api-CbqEMQT5.js +0 -181
  64. package/dist/chunks/api-DE7LfK-R.js +0 -960
  65. package/dist/chunks/api-DOfDzYC_.js +0 -538
  66. package/dist/chunks/async-B3DUf1GZ.js +0 -26
  67. package/dist/chunks/bpoint-Ciy3yY9Q.js +0 -34
  68. package/dist/chunks/calculations-CkYAqO_-.js +0 -197
  69. package/dist/chunks/captcha-eu-DnOWhMwr.js +0 -43
  70. package/dist/chunks/checkbox-radio-0x7Tc0br.js +0 -197
  71. package/dist/chunks/chunk-K6L4z4UQ.js +0 -24
  72. package/dist/chunks/conditions-4fXKhEJS.js +0 -609
  73. package/dist/chunks/date-picker-B6iZkjHS.js +0 -6204
  74. package/dist/chunks/debug-KnZeKYBI.js +0 -39
  75. package/dist/chunks/dist-D09GnXMW.js +0 -2663
  76. package/dist/chunks/event-names-DamGPtXR.js +0 -51
  77. package/dist/chunks/eway-DEAYcwT0.js +0 -86
  78. package/dist/chunks/field-references.keys-BpBZ_quS.js +0 -24
  79. package/dist/chunks/field-references.resolver-Ba6xhiJC.js +0 -183
  80. package/dist/chunks/file-upload-Bh63PQSE.js +0 -430
  81. package/dist/chunks/friendly-captcha-v1-CqO4WVre.js +0 -40
  82. package/dist/chunks/friendly-captcha-v2-CyykcJcM.js +0 -47
  83. package/dist/chunks/friendly-challenge-Dg8XkStd.js +0 -1101
  84. package/dist/chunks/go-cardless-CuND59rR.js +0 -26
  85. package/dist/chunks/google-address--uR8WDSm.js +0 -208
  86. package/dist/chunks/hcaptcha-CmaFUesv.js +0 -72
  87. package/dist/chunks/hidden-CYnZYple.js +0 -36
  88. package/dist/chunks/http-18nn97DZ.js +0 -29
  89. package/dist/chunks/i18n-vUh-KGiH.js +0 -55
  90. package/dist/chunks/loqate-BICNJlVK.js +0 -97
  91. package/dist/chunks/mollie-DwlsgHZ1.js +0 -26
  92. package/dist/chunks/moneris-B_IFZFTx.js +0 -159
  93. package/dist/chunks/opayo-U2x_TOII.js +0 -192
  94. package/dist/chunks/paddle-BqXFrc79.js +0 -75
  95. package/dist/chunks/paypal-Cn_DYGDb.js +0 -121
  96. package/dist/chunks/payway-Rnq796eC.js +0 -75
  97. package/dist/chunks/phone-country-B6Me4lK0.js +0 -3317
  98. package/dist/chunks/place-kit-ldUl-u9w.js +0 -56
  99. package/dist/chunks/placekit-autocomplete.esm-D-lGeaZl.js +0 -1771
  100. package/dist/chunks/recaptcha-enterprise-DPJNyv1X.js +0 -72
  101. package/dist/chunks/recaptcha-shared-DTI4qWVR.js +0 -22
  102. package/dist/chunks/recaptcha-v2-checkbox-zFjpvJ5c.js +0 -49
  103. package/dist/chunks/recaptcha-v2-invisible-CnYtkNvz.js +0 -62
  104. package/dist/chunks/recaptcha-v3-EAlWhnkX.js +0 -33
  105. package/dist/chunks/repeater-CXD1eLSn.js +0 -151
  106. package/dist/chunks/rich-text-DkmZRhGj.js +0 -442
  107. package/dist/chunks/scripts-BGD_iU_6.js +0 -41
  108. package/dist/chunks/sdk-B7u9fTlP.js +0 -2103
  109. package/dist/chunks/shared-DC6_1u8X.js +0 -85
  110. package/dist/chunks/signature-E9KyYXS1.js +0 -765
  111. package/dist/chunks/snaptcha-CCDunGeb.js +0 -8
  112. package/dist/chunks/square-BLqK51rS.js +0 -61
  113. package/dist/chunks/stripe-B8gHpZNC.js +0 -273
  114. package/dist/chunks/styles-BIh6g7V_.js +0 -22
  115. package/dist/chunks/summary-EcNE0cvg.js +0 -191
  116. package/dist/chunks/table-yxEDL6kA.js +0 -124
  117. package/dist/chunks/text-limit-D0H_Ca2c.js +0 -179
  118. package/dist/chunks/theme-classes-vSHpdCUO.js +0 -59
  119. package/dist/chunks/turnstile-DP0bdR7T.js +0 -68
  120. package/dist/chunks/utils-ByrEVYrJ.js +0 -49584
@@ -1,430 +0,0 @@
1
- import { a as getFormStateEventName, i as getFileUploadEventName } from "./event-names-DamGPtXR.js";
2
- import { t as requestJson } from "./http-18nn97DZ.js";
3
- import { t as ensureModuleStyles } from "./styles-BIh6g7V_.js";
4
- import { c as retainFormValidators, i as getModuleFieldTarget, s as releaseFormValidators, t as dispatchFieldEvent } from "./shared-DC6_1u8X.js";
5
- //#region src/css/theme/fields/_file.css?inline
6
- var _file_default = "@layer formie-theme{.formie-file-input{padding:var(--formie-space-1);line-height:var(--formie-line-height-base);cursor:pointer}.formie-file-input::file-selector-button{appearance:none;padding:calc(var(--formie-control-padding-y) - 1px) var(--formie-space-2);min-height:calc(var(--formie-control-height) - (var(--formie-space-1) * 2));border:var(--formie-border-width) solid var(--formie-color-border);border-radius:calc(var(--formie-radius-sm) - 1px);background:var(--formie-color-surface-subtle);color:var(--formie-color-heading);font-weight:var(--formie-font-weight-normal);font-size:var(--formie-font-size-xs);white-space:nowrap;cursor:pointer;margin-inline-end:var(--formie-space-2);line-height:1.1;transition:border-color .15s,background-color .15s,color .15s,box-shadow .15s}.formie-file-input::-webkit-file-upload-button{appearance:none;padding:calc(var(--formie-control-padding-y) - 1px) var(--formie-space-2);min-height:calc(var(--formie-control-height) - (var(--formie-space-1) * 2));border:var(--formie-border-width) solid var(--formie-color-border);border-radius:calc(var(--formie-radius-sm) - 1px);background:var(--formie-color-surface-subtle);color:var(--formie-color-heading);font-weight:var(--formie-font-weight-normal);font-size:var(--formie-font-size-xs);white-space:nowrap;cursor:pointer;margin-inline-end:var(--formie-space-2);line-height:1.1;transition:border-color .15s,background-color .15s,color .15s,box-shadow .15s}.formie-file-input:hover::file-selector-button{border-color:color-mix(in srgb, var(--formie-color-border) 70%, var(--formie-color-heading) 30%);background:var(--formie-color-surface-muted)}.formie-file-input:hover::-webkit-file-upload-button{border-color:color-mix(in srgb, var(--formie-color-border) 70%, var(--formie-color-heading) 30%);background:var(--formie-color-surface-muted)}.formie-file-input:focus{outline:0}.formie-file-input:focus-visible::file-selector-button{border-color:var(--formie-color-focus-ring)}.formie-file-input:focus-visible::-webkit-file-upload-button{border-color:var(--formie-color-focus-ring)}.formie-field-has-error .formie-file-input::file-selector-button{border-color:var(--formie-color-danger)}.formie-field-has-error .formie-file-input::-webkit-file-upload-button{border-color:var(--formie-color-danger)}.formie-file-summary{padding:var(--formie-file-summary-padding);gap:var(--formie-gap-file-summary);border:var(--formie-border-width) solid var(--formie-color-border);border-radius:var(--formie-radius-sm)}.formie-file-summary-container{padding-left:var(--formie-list-indent);margin:0}}";
7
- //#endregion
8
- //#region src/js/modules/fields/file-upload.ts
9
- var INPUT_SELECTOR = "input[type=\"file\"][data-formie-file-input]";
10
- var FILE_UPLOAD_EVENT = getFileUploadEventName("uploaded");
11
- var FORM_RESET_EVENT = getFormStateEventName("reset");
12
- var FILE_UPLOAD_KEY_ATTR = "data-formie-file-upload-key";
13
- var HYDRATE_ENDPOINT_ATTR = "data-formie-file-upload-hydrate-endpoint";
14
- var HIDDEN_INPUT_ANCHOR_ATTR = "data-formie-file-upload-anchor";
15
- var HIDDEN_INPUT_VALUE_ATTR = "data-formie-file-upload-asset-id";
16
- var FILE_VALIDATORS = [
17
- "fileLimit",
18
- "fileSizeMinLimit",
19
- "fileSizeMaxLimit"
20
- ];
21
- var VALIDATOR_SCOPE = "file-upload";
22
- var MODULE_ID = "file-upload";
23
- ensureModuleStyles(MODULE_ID, [_file_default]);
24
- function isRecord(value) {
25
- return !!value && typeof value === "object" && !Array.isArray(value);
26
- }
27
- function toPositiveInt(value) {
28
- const parsed = Number(value);
29
- return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
30
- }
31
- function toTrimmedString(value) {
32
- return typeof value === "string" ? value.trim() : "";
33
- }
34
- function getFieldHandle(field) {
35
- return field.getAttribute("data-formie-field-handle")?.trim() || "";
36
- }
37
- function getFileValueName(input) {
38
- return input.name.endsWith("[]") ? input.name.slice(0, -2) : input.name;
39
- }
40
- function getUploadedAssetInputName(input) {
41
- return `${getFileValueName(input)}[]`;
42
- }
43
- function getFileUploadKey(input) {
44
- return input.getAttribute(FILE_UPLOAD_KEY_ATTR)?.trim() || input.getAttribute("data-formie-input-id")?.trim() || "";
45
- }
46
- function getHiddenInputs(field) {
47
- return Array.from(field.querySelectorAll("input[type=\"hidden\"]")).filter((input) => {
48
- return input instanceof HTMLInputElement;
49
- });
50
- }
51
- function getUploadedAssetInputs(field, input) {
52
- const assetInputName = getUploadedAssetInputName(input);
53
- return getHiddenInputs(field).filter((hiddenInput) => {
54
- return hiddenInput.name === assetInputName && hiddenInput.value.trim() !== "";
55
- });
56
- }
57
- function ensureUploadedAssetAnchor(field, input) {
58
- const anchorName = getFileValueName(input);
59
- const existingAnchor = getHiddenInputs(field).find((hiddenInput) => {
60
- return hiddenInput.hasAttribute(HIDDEN_INPUT_ANCHOR_ATTR) || hiddenInput.name === anchorName && hiddenInput.value === "";
61
- });
62
- if (existingAnchor) {
63
- existingAnchor.setAttribute(HIDDEN_INPUT_ANCHOR_ATTR, "true");
64
- existingAnchor.name = anchorName;
65
- existingAnchor.value = "";
66
- return existingAnchor;
67
- }
68
- const anchor = document.createElement("input");
69
- anchor.type = "hidden";
70
- anchor.name = anchorName;
71
- anchor.value = "";
72
- anchor.setAttribute(HIDDEN_INPUT_ANCHOR_ATTR, "true");
73
- input.insertAdjacentElement("afterend", anchor);
74
- return anchor;
75
- }
76
- function normalizeUploadedAsset(candidate) {
77
- if (Array.isArray(candidate)) return null;
78
- const directId = toPositiveInt(candidate);
79
- if (directId) return {
80
- assetId: directId,
81
- filename: ""
82
- };
83
- if (!isRecord(candidate)) return null;
84
- const assetId = toPositiveInt(candidate.assetId ?? candidate.id ?? candidate.value);
85
- const filename = toTrimmedString(candidate.filename ?? candidate.title ?? candidate.label ?? candidate.name);
86
- const url = toTrimmedString(candidate.url) || null;
87
- if (!assetId && !filename) return null;
88
- return {
89
- assetId,
90
- filename,
91
- url
92
- };
93
- }
94
- function normalizeUploadedAssets(candidate) {
95
- if (!Array.isArray(candidate)) {
96
- const singleAsset = normalizeUploadedAsset(candidate);
97
- return singleAsset ? [singleAsset] : [];
98
- }
99
- return candidate.flatMap((entry) => {
100
- if (Array.isArray(entry)) return normalizeUploadedAssets(entry);
101
- const asset = normalizeUploadedAsset(entry);
102
- return asset ? [asset] : [];
103
- });
104
- }
105
- function readSummaryItems(summaryRoot) {
106
- if (!summaryRoot) return [];
107
- return Array.from(summaryRoot.querySelectorAll("[data-formie-file-summary-item]")).map((item) => {
108
- return {
109
- assetId: null,
110
- filename: item.textContent?.trim() || ""
111
- };
112
- }).filter((asset) => {
113
- return asset.filename !== "";
114
- });
115
- }
116
- function readUploadedAssetsFromHiddenInputs(field, input) {
117
- return getUploadedAssetInputs(field, input).map((hiddenInput) => {
118
- return {
119
- assetId: toPositiveInt(hiddenInput.value),
120
- filename: ""
121
- };
122
- }).filter((asset) => {
123
- return asset.assetId !== null;
124
- });
125
- }
126
- function mergeUploadedAssets(assetIds, summaryItems) {
127
- if (!assetIds.length) return summaryItems;
128
- return assetIds.map((asset, index) => {
129
- return {
130
- assetId: asset.assetId,
131
- filename: summaryItems[index]?.filename || ""
132
- };
133
- });
134
- }
135
- function normalizeFilenameList(filenames) {
136
- return filenames.map((filename) => {
137
- return filename.trim().toLowerCase();
138
- }).filter(Boolean);
139
- }
140
- function matchesPendingFiles(uploadedAssets, pendingFiles) {
141
- const uploadedFilenames = normalizeFilenameList(uploadedAssets.map((asset) => {
142
- return asset.filename;
143
- }));
144
- const normalizedPendingFiles = normalizeFilenameList(pendingFiles);
145
- if (!uploadedFilenames.length || !normalizedPendingFiles.length) return false;
146
- return uploadedFilenames.every((filename) => {
147
- return normalizedPendingFiles.includes(filename);
148
- });
149
- }
150
- function registerValidators(form) {
151
- retainFormValidators(form, VALIDATOR_SCOPE, (validator) => {
152
- validator.addValidator("fileLimit", ({ input }) => {
153
- const limit = parseInt(input.getAttribute("data-formie-file-limit") || "", 10);
154
- if (input.type !== "file" || !limit || !("files" in input) || !input.files?.length) return true;
155
- return input.files.length <= limit;
156
- }, ({ input, t }) => {
157
- return t("Choose up to {files} files.", { files: input.getAttribute("data-formie-file-limit") || "" });
158
- });
159
- validator.addValidator("fileSizeMinLimit", ({ input }) => {
160
- const sizeBytes = parseFloat(input.getAttribute("data-formie-size-min-limit") || "") * 1e3 * 1e3;
161
- if (input.type !== "file" || !sizeBytes || !("files" in input) || !input.files?.length) return true;
162
- return Array.from(input.files).every((file) => {
163
- return file.size >= sizeBytes;
164
- });
165
- }, ({ input, t }) => {
166
- return t("File must be larger than {filesize} MB.", { filesize: input.getAttribute("data-formie-size-min-limit") || "" });
167
- });
168
- validator.addValidator("fileSizeMaxLimit", ({ input }) => {
169
- const sizeBytes = parseFloat(input.getAttribute("data-formie-size-max-limit") || "") * 1e3 * 1e3;
170
- if (input.type !== "file" || !sizeBytes || !("files" in input) || !input.files?.length) return true;
171
- return Array.from(input.files).every((file) => {
172
- return file.size <= sizeBytes;
173
- });
174
- }, ({ input, t }) => {
175
- return t("File must be smaller than {filesize} MB.", { filesize: input.getAttribute("data-formie-size-max-limit") || "" });
176
- });
177
- });
178
- }
179
- function unregisterValidators(form) {
180
- releaseFormValidators(form, VALIDATOR_SCOPE, FILE_VALIDATORS);
181
- }
182
- function ensureSummaryRoot(field, input) {
183
- const existingSummary = field.querySelector("[data-formie-file-summary]");
184
- if (existingSummary) return existingSummary;
185
- const summary = document.createElement("div");
186
- summary.className = "formie-file-summary";
187
- summary.setAttribute("data-formie-file-summary", "true");
188
- input.insertAdjacentElement("afterend", summary);
189
- return summary;
190
- }
191
- function renderSummary(state) {
192
- const items = state.pendingFiles.length ? state.pendingFiles : state.uploadedAssets.map((asset) => {
193
- return asset.filename || (asset.assetId ? `Asset #${asset.assetId}` : "");
194
- }).filter(Boolean);
195
- const existingSummary = state.summaryRoot || state.field.querySelector("[data-formie-file-summary]");
196
- if (!items.length) {
197
- if (existingSummary) {
198
- existingSummary.replaceChildren();
199
- existingSummary.hidden = true;
200
- }
201
- state.summaryRoot = existingSummary;
202
- return;
203
- }
204
- const summaryRoot = existingSummary || ensureSummaryRoot(state.field, state.input);
205
- if (!summaryRoot) return;
206
- summaryRoot.hidden = false;
207
- state.summaryRoot = summaryRoot;
208
- const list = document.createElement("ul");
209
- list.className = "formie-file-summary-container";
210
- list.setAttribute("data-formie-file-summary-container", "true");
211
- items.forEach((filename) => {
212
- const item = document.createElement("li");
213
- item.className = "formie-file-summary-item";
214
- item.setAttribute("data-formie-file-summary-item", "true");
215
- item.textContent = filename;
216
- list.appendChild(item);
217
- });
218
- summaryRoot.replaceChildren(list);
219
- }
220
- function updateUploadedAssetInputs(field, input, uploadedAssets) {
221
- let insertionPoint = ensureUploadedAssetAnchor(field, input);
222
- const anchorName = getUploadedAssetInputName(input);
223
- getUploadedAssetInputs(field, input).forEach((hiddenInput) => {
224
- hiddenInput.remove();
225
- });
226
- uploadedAssets.forEach((asset) => {
227
- if (!asset.assetId) return;
228
- const hiddenInput = document.createElement("input");
229
- hiddenInput.type = "hidden";
230
- hiddenInput.name = anchorName;
231
- hiddenInput.value = String(asset.assetId);
232
- hiddenInput.setAttribute(HIDDEN_INPUT_VALUE_ATTR, "true");
233
- insertionPoint.insertAdjacentElement("afterend", hiddenInput);
234
- insertionPoint = hiddenInput;
235
- });
236
- input.value = "";
237
- }
238
- async function hydrateUploadedAssets(field, input, uploadedAssets) {
239
- const assetIds = uploadedAssets.map((asset) => {
240
- return asset.assetId;
241
- }).filter((assetId) => {
242
- return assetId !== null;
243
- });
244
- if (!assetIds.length) return uploadedAssets;
245
- const hydrateEndpoint = input.getAttribute(HYDRATE_ENDPOINT_ATTR)?.trim() || "/actions/formie/file-upload/hydrate";
246
- const body = new FormData();
247
- assetIds.forEach((assetId) => {
248
- body.append("assetIds[]", String(assetId));
249
- });
250
- const hydratedAssets = normalizeUploadedAssets((await requestJson(hydrateEndpoint, {
251
- method: "POST",
252
- body
253
- })).assets);
254
- if (!hydratedAssets.length) return uploadedAssets;
255
- const hydratedMap = new Map(hydratedAssets.map((asset) => {
256
- return [asset.assetId, asset];
257
- }));
258
- return uploadedAssets.map((asset) => {
259
- if (!asset.assetId || !hydratedMap.has(asset.assetId)) return asset;
260
- const hydratedAsset = hydratedMap.get(asset.assetId);
261
- return {
262
- assetId: asset.assetId,
263
- filename: hydratedAsset.filename || asset.filename,
264
- url: hydratedAsset.url ?? asset.url
265
- };
266
- });
267
- }
268
- function getUploadedAssetsFromEvent(event, matcher) {
269
- const detail = event.detail;
270
- if (!isRecord(detail)) return [];
271
- const detailFieldHandle = toTrimmedString(detail.fieldHandle);
272
- const detailInputKey = toTrimmedString(detail.inputKey);
273
- const detailInputName = toTrimmedString(detail.inputName ?? detail.name);
274
- const nestedData = isRecord(detail.data) ? detail.data : null;
275
- const nestedFieldHandle = toTrimmedString(nestedData?.fieldHandle);
276
- const nestedInputKey = toTrimmedString(nestedData?.inputKey);
277
- const nestedInputName = toTrimmedString(nestedData?.inputName ?? nestedData?.name);
278
- const candidates = [];
279
- let matchedByInputKey = false;
280
- let matchedByInputName = false;
281
- let matchedByFieldHandle = false;
282
- if (detailInputKey !== "" && detailInputKey === matcher.inputKey) {
283
- matchedByInputKey = true;
284
- candidates.push(detail.assets, detail.assetIds, detail.data);
285
- }
286
- if (detailInputName !== "" && detailInputName === matcher.inputName) {
287
- matchedByInputName = true;
288
- candidates.push(detail.assets, detail.assetIds, detail.data);
289
- }
290
- if (detailFieldHandle === matcher.fieldHandle) {
291
- matchedByFieldHandle = true;
292
- candidates.push(detail.assets, detail.assetIds, detail.data);
293
- }
294
- if (nestedData) {
295
- const nestedAssetCandidates = [
296
- nestedData.assets,
297
- nestedData.assetIds,
298
- nestedData.uploadedAssets,
299
- nestedData.data
300
- ];
301
- if (nestedInputKey !== "" && nestedInputKey === matcher.inputKey) {
302
- matchedByInputKey = true;
303
- candidates.push(...nestedAssetCandidates);
304
- }
305
- if (nestedInputName !== "" && nestedInputName === matcher.inputName) {
306
- matchedByInputName = true;
307
- candidates.push(...nestedAssetCandidates);
308
- }
309
- if (nestedFieldHandle === matcher.fieldHandle) {
310
- matchedByFieldHandle = true;
311
- candidates.push(...nestedAssetCandidates);
312
- }
313
- }
314
- [
315
- detail.assets,
316
- detail.assetIds,
317
- detail.data
318
- ].forEach((value) => {
319
- if (!isRecord(value)) return;
320
- if (matcher.inputKey && matcher.inputKey in value) {
321
- matchedByInputKey = true;
322
- candidates.push(value[matcher.inputKey]);
323
- }
324
- if (matcher.inputName in value) {
325
- matchedByInputName = true;
326
- candidates.push(value[matcher.inputName]);
327
- }
328
- if (matcher.fieldHandle in value) candidates.push(value[matcher.fieldHandle]);
329
- });
330
- for (const candidate of candidates) {
331
- const uploadedAssets = normalizeUploadedAssets(candidate);
332
- if (!uploadedAssets.length) continue;
333
- if (matchedByInputKey || matchedByInputName || matchedByFieldHandle || matchesPendingFiles(uploadedAssets, matcher.pendingFiles)) return uploadedAssets;
334
- }
335
- return [];
336
- }
337
- var fileUploadModule = {
338
- id: MODULE_ID,
339
- kind: "field",
340
- match: (ctx) => {
341
- return !!ctx.target.querySelector(INPUT_SELECTOR);
342
- },
343
- setup: async (ctx) => {
344
- const field = getModuleFieldTarget(ctx);
345
- const scope = field || ctx.target;
346
- const inputs = Array.from(scope.querySelectorAll(INPUT_SELECTOR)).filter((input) => {
347
- return input instanceof HTMLInputElement;
348
- });
349
- const form = ctx.form;
350
- registerValidators(form);
351
- const unbinds = inputs.map((input) => {
352
- if (!(field instanceof HTMLElement)) return () => {};
353
- const state = {
354
- field,
355
- input,
356
- summaryRoot: ensureSummaryRoot(field, input),
357
- uploadedAssets: mergeUploadedAssets(readUploadedAssetsFromHiddenInputs(field, input), readSummaryItems(field.querySelector("[data-formie-file-summary]"))),
358
- pendingFiles: [],
359
- hydrationToken: 0
360
- };
361
- const syncPendingFiles = () => {
362
- state.pendingFiles = Array.from(input.files || []).map((file) => {
363
- return file.name;
364
- });
365
- renderSummary(state);
366
- };
367
- const syncUploadedAssets = async (uploadedAssets) => {
368
- state.hydrationToken += 1;
369
- const hydrationToken = state.hydrationToken;
370
- state.pendingFiles = [];
371
- state.uploadedAssets = uploadedAssets;
372
- updateUploadedAssetInputs(field, input, uploadedAssets);
373
- renderSummary(state);
374
- try {
375
- const hydratedAssets = await hydrateUploadedAssets(field, input, uploadedAssets);
376
- if (hydrationToken !== state.hydrationToken) return;
377
- state.uploadedAssets = hydratedAssets;
378
- renderSummary(state);
379
- dispatchFieldEvent(field, MODULE_ID, "uploaded-assets-sync", {
380
- fileUpload: field,
381
- assets: hydratedAssets
382
- });
383
- } catch (error) {
384
- console.error("[formie] Failed to hydrate uploaded file details.", error);
385
- }
386
- };
387
- const resetUploadedAssets = () => {
388
- state.hydrationToken += 1;
389
- state.pendingFiles = [];
390
- state.uploadedAssets = [];
391
- updateUploadedAssetInputs(field, input, []);
392
- renderSummary(state);
393
- };
394
- const uploadedAssetHandler = (event) => {
395
- const fieldHandle = getFieldHandle(field);
396
- if (!fieldHandle) return;
397
- const uploadedAssets = getUploadedAssetsFromEvent(event, {
398
- fieldHandle,
399
- inputKey: getFileUploadKey(input),
400
- inputName: input.name,
401
- pendingFiles: state.pendingFiles
402
- });
403
- if (!uploadedAssets.length) return;
404
- syncUploadedAssets(uploadedAssets);
405
- };
406
- const resetHandler = () => {
407
- resetUploadedAssets();
408
- };
409
- input.addEventListener("change", syncPendingFiles);
410
- form?.addEventListener(FILE_UPLOAD_EVENT, uploadedAssetHandler);
411
- form?.addEventListener(FORM_RESET_EVENT, resetHandler);
412
- renderSummary(state);
413
- return () => {
414
- input.removeEventListener("change", syncPendingFiles);
415
- form?.removeEventListener(FILE_UPLOAD_EVENT, uploadedAssetHandler);
416
- form?.removeEventListener(FORM_RESET_EVENT, resetHandler);
417
- };
418
- });
419
- await ctx.emit("formie:module:file-upload:init", { count: inputs.length });
420
- return { destroy: () => {
421
- unbinds.forEach((unbind) => {
422
- unbind();
423
- });
424
- unregisterValidators(form);
425
- ctx.emit("formie:module:file-upload:destroy", {});
426
- } };
427
- }
428
- };
429
- //#endregion
430
- export { fileUploadModule };
@@ -1,40 +0,0 @@
1
- import { t as defineCaptchaModule } from "./api-DOfDzYC_.js";
2
- //#region src/js/modules/captchas/friendly-captcha-v1.ts
3
- var friendlyCaptchaV1Module = defineCaptchaModule({
4
- id: "friendly-captcha-v1",
5
- defaultPlaceholderSelector: "[data-friendly-captcha-placeholder]",
6
- defaultTokenFieldNames: ["frc-captcha-solution"],
7
- load: async () => {
8
- return import("./friendly-challenge-Dg8XkStd.js");
9
- },
10
- mount: ({ api, container, provider, services }) => {
11
- return new api.WidgetInstance(container, {
12
- sitekey: provider.siteKey || "",
13
- startMode: provider.startMode || "none",
14
- language: provider.language || "en",
15
- solutionFieldName: "frc-captcha-solution",
16
- doneCallback: (token) => {
17
- if (typeof token === "string" && token.trim() !== "") services.tokens.write(token.trim());
18
- services.errors.clear();
19
- },
20
- errorCallback: () => {
21
- services.tokens.clear();
22
- }
23
- });
24
- },
25
- screen: async ({ widget, placeholder, services, stageCtx }) => {
26
- if (services.tokens.has()) return;
27
- await widget.start();
28
- if (!await services.tokens.wait()) {
29
- const message = services.errors.getDefaultMessage();
30
- services.errors.show(message, placeholder);
31
- stageCtx.abort(message);
32
- }
33
- },
34
- unmount: ({ widget, services }) => {
35
- widget.destroy();
36
- services.tokens.clear();
37
- }
38
- });
39
- //#endregion
40
- export { friendlyCaptchaV1Module };
@@ -1,47 +0,0 @@
1
- import { t as defineCaptchaModule } from "./api-DOfDzYC_.js";
2
- //#region src/js/modules/captchas/friendly-captcha-v2.ts
3
- var friendlyCaptchaV2Module = defineCaptchaModule({
4
- id: "friendly-captcha-v2",
5
- defaultPlaceholderSelector: "[data-friendly-captcha-placeholder]",
6
- defaultTokenFieldNames: ["frc-captcha-response"],
7
- load: async () => {
8
- return import("./sdk-B7u9fTlP.js");
9
- },
10
- mount: ({ api, container, provider, services }) => {
11
- const widget = new api.FriendlyCaptchaSDK().createWidget({
12
- element: container,
13
- sitekey: provider.siteKey || "",
14
- formFieldName: "frc-captcha-response",
15
- language: provider.language,
16
- startMode: provider.startMode || "none"
17
- });
18
- widget.addEventListener("frc:widget.complete", (event) => {
19
- const detail = event.detail;
20
- if (typeof detail?.response === "string" && detail.response.trim() !== "") services.tokens.write(detail.response.trim());
21
- services.errors.clear();
22
- });
23
- widget.addEventListener("frc:widget.expire", () => {
24
- services.tokens.clear();
25
- services.errors.clear();
26
- });
27
- widget.addEventListener("frc:widget.error", (event) => {
28
- if (event.detail?.error) services.tokens.clear();
29
- });
30
- return widget;
31
- },
32
- screen: async ({ widget, placeholder, services, stageCtx }) => {
33
- if (services.tokens.has()) return;
34
- widget.start();
35
- if (!await services.tokens.wait()) {
36
- const message = services.errors.getDefaultMessage();
37
- services.errors.show(message, placeholder);
38
- stageCtx.abort(message);
39
- }
40
- },
41
- unmount: ({ widget, services }) => {
42
- widget.destroy();
43
- services.tokens.clear();
44
- }
45
- });
46
- //#endregion
47
- export { friendlyCaptchaV2Module };