@verbb/formie-vue 1.0.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.
package/dist/index.js ADDED
@@ -0,0 +1,1246 @@
1
+ import { FORMIE_HTML_EVENT_NAMES as e, createFormieClient as t } from "@verbb/formie-browser";
2
+ import { computed as n, defineComponent as r, h as i, inject as a, onBeforeUnmount as o, onMounted as s, provide as c, ref as l, shallowRef as u, watch as d } from "vue";
3
+ import { FRONTEND_CLIENT_EVENT_NAMES as f, compositePartDefinitions as p, createFrontendFormInstance as m, createGraphqlFrontendTransport as h, createRepeaterRowValue as g, createRestFrontendTransport as _, isCompositeField as v, isFileField as y, isKnownFrontendFieldType as b, isRepeatableField as x, loadFrontendEnvelope as S, loadGraphqlFrontendEnvelope as ee, repeaterRowDefinitions as te } from "@verbb/formie-core";
4
+ //#region src/stable.ts
5
+ function C(e, t) {
6
+ if (e == null) return String(e);
7
+ if (typeof e == "string") return JSON.stringify(e);
8
+ if (typeof e == "number" || typeof e == "boolean") return String(e);
9
+ if (typeof e == "function") return "[function]";
10
+ if (typeof File < "u" && e instanceof File) return `[file:${e.name}:${e.size}:${e.type}]`;
11
+ if (typeof Blob < "u" && e instanceof Blob) return `[blob:${e.size}:${e.type}]`;
12
+ if (Array.isArray(e)) return `[${e.map((e) => C(e, t)).join(",")}]`;
13
+ if (typeof e == "object") {
14
+ if (t.has(e)) return "[circular]";
15
+ t.add(e);
16
+ let n = Object.entries(e).sort(([e], [t]) => e.localeCompare(t)).map(([e, n]) => `${JSON.stringify(e)}:${C(n, t)}`);
17
+ return t.delete(e), `{${n.join(",")}}`;
18
+ }
19
+ return JSON.stringify(String(e));
20
+ }
21
+ function w(e) {
22
+ return C(e, /* @__PURE__ */ new WeakSet());
23
+ }
24
+ //#endregion
25
+ //#region src/definition-form.ts
26
+ var T = Symbol("formie-definition-context"), E = {
27
+ field: {
28
+ type: Object,
29
+ required: !0
30
+ },
31
+ value: {
32
+ type: null,
33
+ default: void 0
34
+ },
35
+ errors: {
36
+ type: Array,
37
+ default: () => []
38
+ },
39
+ errorKey: {
40
+ type: String,
41
+ required: !0
42
+ },
43
+ disabled: {
44
+ type: Boolean,
45
+ default: !1
46
+ },
47
+ hidden: {
48
+ type: Boolean,
49
+ default: !1
50
+ },
51
+ setValue: {
52
+ type: Function,
53
+ required: !0
54
+ }
55
+ };
56
+ function D() {
57
+ let e = a(T);
58
+ if (!e) throw Error("Formie definition composables must be used within a client-rendered <FormieForm>.");
59
+ return e;
60
+ }
61
+ function O(e) {
62
+ return "definition" in e;
63
+ }
64
+ async function k(e) {
65
+ return O(e) ? e.definition : e.transport === "graphql" ? ee({
66
+ endpoint: e.endpoint,
67
+ formHandle: e.formHandle,
68
+ siteId: e.siteId
69
+ }) : S({
70
+ endpoint: e.endpoint,
71
+ formHandle: e.formHandle,
72
+ siteId: e.siteId
73
+ });
74
+ }
75
+ function ne(e) {
76
+ let t = O(e) ? e.transport : {
77
+ type: e.transport,
78
+ endpoint: e.endpoint,
79
+ formHandle: e.formHandle,
80
+ siteId: e.siteId
81
+ };
82
+ return t.type === "graphql" ? h(t) : _(t);
83
+ }
84
+ function re(e) {
85
+ return e.pages.flatMap((e) => e.rows).flatMap((e) => e.fields);
86
+ }
87
+ function A(e) {
88
+ if (b(e.type)) return e.type;
89
+ let t = typeof e.input.fieldKind == "string" ? e.input.fieldKind : null;
90
+ return t === "text" ? "single-line-text" : t === "textarea" ? "multi-line-text" : t === "boolean" ? "agree" : t === "file" ? "file" : e.type;
91
+ }
92
+ function ie(e, t, n) {
93
+ let r = new Set(e.moduleRefs || []);
94
+ return t.modules.find((e) => r.has(e.id) && e.capability === n) || null;
95
+ }
96
+ function j(e, t, n, r) {
97
+ if (!n) return null;
98
+ let a = e.slots.value[t];
99
+ return a ? i(a, {
100
+ slotKey: t,
101
+ attributes: r
102
+ }, { default: () => [n] }) : n;
103
+ }
104
+ var M = r({
105
+ name: "FormieVueDefaultErrorSummary",
106
+ props: { errors: {
107
+ type: Array,
108
+ required: !0
109
+ } },
110
+ setup(e) {
111
+ return () => e.errors.length === 0 ? null : i("div", { class: "formie-vue-errors" }, [i("ul", null, e.errors.map((e, t) => i("li", { key: `${e}:${t}` }, e)))]);
112
+ }
113
+ }), N = r({
114
+ name: "FormieVueDefaultField",
115
+ props: {
116
+ field: {
117
+ type: Object,
118
+ required: !0
119
+ },
120
+ errors: {
121
+ type: Array,
122
+ required: !0
123
+ }
124
+ },
125
+ setup(e, t) {
126
+ let n = D();
127
+ return () => {
128
+ let r = t.slots.default?.() || [];
129
+ return i("div", {
130
+ class: "formie-vue-field",
131
+ "data-field-type": e.field.type
132
+ }, [
133
+ e.field.label ? j(n, "label", i("label", { class: "formie-vue-label" }, e.field.label), { class: "formie-vue-label" }) : null,
134
+ e.field.instructions ? j(n, "instructions", i("div", { class: "formie-vue-description" }, e.field.instructions), { class: "formie-vue-description" }) : null,
135
+ j(n, "input", i("div", { class: "formie-vue-input" }, r), { class: "formie-vue-input" }),
136
+ e.errors.length > 0 ? j(n, "errors", i("ul", { class: "formie-vue-field-errors" }, e.errors.map((e, t) => i("li", { key: `${e}:${t}` }, e))), { class: "formie-vue-field-errors" }) : null
137
+ ]);
138
+ };
139
+ }
140
+ }), P = r({
141
+ name: "FormieVueDefaultForm",
142
+ props: {
143
+ definition: {
144
+ type: Object,
145
+ required: !0
146
+ },
147
+ session: {
148
+ type: Object,
149
+ required: !0
150
+ },
151
+ state: {
152
+ type: Object,
153
+ required: !0
154
+ },
155
+ className: {
156
+ type: String,
157
+ default: void 0
158
+ },
159
+ onSubmit: {
160
+ type: Function,
161
+ required: !0
162
+ }
163
+ },
164
+ setup(e, t) {
165
+ return () => i("form", {
166
+ class: e.className,
167
+ onSubmit: (t) => {
168
+ t.preventDefault(), e.onSubmit();
169
+ },
170
+ "data-formie-definition": e.definition.handle,
171
+ "data-formie-render-id": e.session.tokens.render
172
+ }, t.slots.default?.() || []);
173
+ }
174
+ }), F = r({
175
+ name: "FormieVueDefaultPage",
176
+ props: {
177
+ page: {
178
+ type: Object,
179
+ required: !0
180
+ },
181
+ state: {
182
+ type: Object,
183
+ required: !0
184
+ }
185
+ },
186
+ setup(e, t) {
187
+ return () => i("section", {
188
+ "data-page-id": e.page.id,
189
+ class: "formie-vue-page"
190
+ }, t.slots.default?.() || []);
191
+ }
192
+ }), I = r({
193
+ name: "FormieVueSignatureFieldInput",
194
+ props: E,
195
+ setup(e) {
196
+ let t = D(), r = l(null), a = u(null), c = l(null), f = n(() => ie(e.field, t.state.value?.definition || { modules: [] }, "draw-signature")?.config), p = n(() => {
197
+ let e = f.value?.options;
198
+ return typeof e?.backgroundColor == "string" ? e.backgroundColor : "#ffffff";
199
+ }), m = n(() => {
200
+ let e = f.value?.options;
201
+ return typeof e?.penColor == "string" ? e.penColor : "#000000";
202
+ }), h = n(() => {
203
+ let e = f.value?.options;
204
+ return Number(e?.penWeight ?? 2) || 2;
205
+ }), g = n(() => typeof e.value == "string" ? e.value : ""), _ = !1, v = () => void 0, y = () => void 0;
206
+ return s(() => {
207
+ (async () => {
208
+ try {
209
+ let t = r.value;
210
+ if (!t) return;
211
+ let { default: n } = await import("./signature_pad-69C-Dgt3.js");
212
+ if (_) return;
213
+ let i = new n(t, {
214
+ backgroundColor: p.value,
215
+ penColor: m.value,
216
+ minWidth: h.value,
217
+ maxWidth: h.value
218
+ }), o = () => {
219
+ let e = typeof window > "u" ? 1 : Math.max(window.devicePixelRatio || 1, 1), n = Math.max(1, Math.floor(t.clientWidth || 480)), r = t.getContext("2d");
220
+ t.width = n * e, t.height = 192 * e, t.style.height = "192px", r && (r.setTransform(1, 0, 0, 1, 0, 0), r.scale(e, e)), i.clear();
221
+ }, s = () => {
222
+ e.setValue(i.isEmpty() ? "" : i.toDataURL());
223
+ };
224
+ o(), i.addEventListener?.("endStroke", s), v = () => {
225
+ i.removeEventListener?.("endStroke", s);
226
+ }, typeof window < "u" && (window.addEventListener("resize", o), y = () => {
227
+ window.removeEventListener("resize", o);
228
+ }), a.value = i, c.value = null;
229
+ } catch (e) {
230
+ _ || (c.value = e.message || "Unable to load signature support.");
231
+ }
232
+ })();
233
+ }), o(() => {
234
+ _ = !0, v(), y(), a.value = null;
235
+ }), d(g, (e) => {
236
+ let t = a.value;
237
+ if (t) {
238
+ if (!e) {
239
+ t.isEmpty() || t.clear();
240
+ return;
241
+ }
242
+ try {
243
+ t.fromDataURL(e);
244
+ } catch {}
245
+ }
246
+ }, { immediate: !0 }), () => i("div", { class: "formie-vue-signature" }, [
247
+ i("canvas", {
248
+ key: "canvas",
249
+ ref: r,
250
+ "data-formie-signature-canvas": !0,
251
+ style: e.disabled ? { pointerEvents: "none" } : void 0
252
+ }),
253
+ i("button", {
254
+ key: "clear",
255
+ type: "button",
256
+ disabled: e.disabled,
257
+ "data-formie-signature-clear": !0,
258
+ onClick: () => {
259
+ a.value?.clear(), e.setValue("");
260
+ }
261
+ }, "Clear"),
262
+ c.value ? i("div", {
263
+ key: "error",
264
+ class: "formie-vue-unsupported"
265
+ }, c.value) : null
266
+ ]);
267
+ }
268
+ }), L = r({
269
+ name: "FormieVueCompositeFieldInput",
270
+ props: E,
271
+ setup(e) {
272
+ let t = D();
273
+ return () => {
274
+ let n = t.state.value;
275
+ if (!n) return null;
276
+ let r = p(e.field), a = e.value && typeof e.value == "object" ? e.value : {};
277
+ return r.length === 0 ? i("div", { class: "formie-vue-unsupported" }, `Unsupported field type: ${e.field.type}`) : i("div", { class: "formie-vue-name-grid" }, r.filter((e) => e.meta?.hidden !== !0).map((t) => {
278
+ let r = `${e.errorKey}.${t.handle}`;
279
+ return i(z, {
280
+ key: `${e.field.id}:${t.handle}`,
281
+ field: t,
282
+ value: a[t.handle],
283
+ errors: n.errors.fields[r] || [],
284
+ errorKey: r,
285
+ disabled: e.disabled || t.meta?.disabled === !0,
286
+ hidden: !1,
287
+ setValue(n) {
288
+ e.setValue({
289
+ ...a,
290
+ [t.handle]: n
291
+ });
292
+ }
293
+ });
294
+ }));
295
+ };
296
+ }
297
+ }), R = r({
298
+ name: "FormieVueFileFieldInput",
299
+ props: E,
300
+ setup(e) {
301
+ return () => {
302
+ let t = e.field.input, n = Array.isArray(e.value) ? e.value : [], r = t.multiple === !0, a = n.map((e, t) => e && typeof e == "object" && "name" in e && typeof e.name == "string" ? e.name : e && typeof e == "object" && "filename" in e && typeof e.filename == "string" ? e.filename : e && typeof e == "object" && "assetId" in e && typeof e.assetId == "number" ? `Asset #${e.assetId}` : `File ${t + 1}`);
303
+ return i("div", { class: "formie-vue-file" }, [i("input", {
304
+ key: "input",
305
+ type: "file",
306
+ disabled: e.disabled,
307
+ multiple: r,
308
+ onChange: (t) => {
309
+ let n = t.target;
310
+ e.setValue(Array.from(n.files || []));
311
+ }
312
+ }), a.length > 0 ? i("ul", {
313
+ key: "summary",
314
+ class: "formie-vue-field-errors"
315
+ }, a.map((e, t) => i("li", { key: `${e}:${t}` }, e))) : null]);
316
+ };
317
+ }
318
+ }), z = r({
319
+ name: "FormieVueConfigFieldNode",
320
+ props: E,
321
+ setup(e) {
322
+ let t = D();
323
+ return () => {
324
+ let n = t.state.value;
325
+ if (!n) return null;
326
+ let r = n.fieldStates[e.field.id]?.hidden === !0;
327
+ if (r) return null;
328
+ let a = A(e.field), o = t.fieldComponents.value[e.field.type] || t.fieldComponents.value[a] || W;
329
+ return i(t.components.value.Field || N, {
330
+ field: e.field,
331
+ errors: e.errors
332
+ }, { default: () => [i(o, {
333
+ field: e.field,
334
+ value: e.value,
335
+ errors: e.errors,
336
+ errorKey: e.errorKey,
337
+ disabled: e.disabled,
338
+ hidden: r,
339
+ setValue: e.setValue
340
+ })] });
341
+ };
342
+ }
343
+ }), B = r({
344
+ name: "FormieVueConfigField",
345
+ props: { field: {
346
+ type: Object,
347
+ required: !0
348
+ } },
349
+ setup(e) {
350
+ let t = D();
351
+ return () => {
352
+ let n = t.state.value, r = t.instance.value;
353
+ if (!n || !r) return null;
354
+ let a = n.fieldStates[e.field.id];
355
+ return i(z, {
356
+ field: e.field,
357
+ value: n.values[e.field.id],
358
+ errors: n.errors.fields[e.field.id] || [],
359
+ errorKey: e.field.id,
360
+ disabled: a?.disabled === !0,
361
+ hidden: a?.hidden === !0,
362
+ setValue(t) {
363
+ r.setValue(e.field.id, t);
364
+ }
365
+ });
366
+ };
367
+ }
368
+ }), V = r({
369
+ name: "FormieVueConfigRow",
370
+ props: {
371
+ row: {
372
+ type: Object,
373
+ required: !0
374
+ },
375
+ rowIndex: {
376
+ type: Number,
377
+ required: !0
378
+ },
379
+ values: {
380
+ type: Object,
381
+ default: void 0
382
+ },
383
+ errorPrefix: {
384
+ type: String,
385
+ default: void 0
386
+ },
387
+ disabled: {
388
+ type: Boolean,
389
+ default: !1
390
+ },
391
+ setFieldValue: {
392
+ type: Function,
393
+ default: void 0
394
+ }
395
+ },
396
+ setup(e) {
397
+ let t = D();
398
+ return () => {
399
+ let n = t.state.value;
400
+ return n ? i("div", { class: "formie-vue-row" }, e.row.fields.map((t, r) => {
401
+ if (!e.values || !e.setFieldValue) return i(B, {
402
+ key: t.id || `${e.rowIndex}:${r}`,
403
+ field: t
404
+ });
405
+ let a = `${e.errorPrefix}.${t.handle}`;
406
+ return i(z, {
407
+ key: t.id || `${e.rowIndex}:${r}`,
408
+ field: t,
409
+ value: e.values[t.handle],
410
+ errors: n.errors.fields[a] || [],
411
+ errorKey: a,
412
+ disabled: e.disabled === !0 || n.fieldStates[t.id]?.disabled === !0,
413
+ hidden: n.fieldStates[t.id]?.hidden === !0,
414
+ setValue(n) {
415
+ e.setFieldValue?.(t, n);
416
+ }
417
+ });
418
+ })) : null;
419
+ };
420
+ }
421
+ }), H = r({
422
+ name: "FormieVueRepeaterFieldInput",
423
+ props: E,
424
+ setup(e) {
425
+ let t = D();
426
+ return () => {
427
+ let n = t.state.value;
428
+ if (!n) return null;
429
+ let r = te(e.field), a = Array.isArray(e.value) ? e.value : [], o = e.field.input, s = Number(o.minRows ?? 0) || 0, c = Number(o.maxRows ?? 0) || 0, l = !e.disabled && (c <= 0 || a.length < c);
430
+ return r.length === 0 ? i("div", { class: "formie-vue-unsupported" }, "Unsupported repeater field.") : i("div", {
431
+ class: "formie-vue-repeater",
432
+ "data-formie-repeater-container": !0
433
+ }, [
434
+ ...a.map((t, n) => {
435
+ let o = `${e.field.id}:${n}`;
436
+ return i("div", {
437
+ key: o,
438
+ class: "formie-vue-repeater-item",
439
+ "data-formie-repeater-item": !0
440
+ }, [...r.map((r, s) => i(V, {
441
+ key: `${o}:${s}`,
442
+ row: r,
443
+ rowIndex: s,
444
+ values: t,
445
+ errorPrefix: `${e.errorKey}.${n}`,
446
+ disabled: e.disabled,
447
+ setFieldValue(t, r) {
448
+ let i = a.map((e, i) => i === n ? {
449
+ ...e,
450
+ [t.handle]: r
451
+ } : e);
452
+ e.setValue(i);
453
+ }
454
+ })), i("button", {
455
+ key: "remove",
456
+ type: "button",
457
+ disabled: e.disabled || s > 0 && a.length <= s,
458
+ "data-formie-repeater-remove": !0,
459
+ onClick: () => {
460
+ e.setValue(a.filter((e, t) => t !== n));
461
+ }
462
+ }, "Remove")]);
463
+ }),
464
+ i("button", {
465
+ key: "add",
466
+ type: "button",
467
+ disabled: !l,
468
+ "data-formie-repeater-add": e.field.handle,
469
+ onClick: () => {
470
+ e.setValue([...a, g(e.field)]);
471
+ }
472
+ }, String(o.addLabel ?? "Add another row")),
473
+ n.errors.fields[e.errorKey] && n.errors.fields[e.errorKey].length > 0 ? i("ul", {
474
+ key: "errors",
475
+ class: "formie-vue-field-errors"
476
+ }, n.errors.fields[e.errorKey].map((e, t) => i("li", { key: `${e}:${t}` }, e))) : null
477
+ ]);
478
+ };
479
+ }
480
+ });
481
+ function U(e, t, n, r) {
482
+ let a = e.input;
483
+ if (e.type === "multi-line-text") return i("textarea", {
484
+ value: typeof t == "string" ? t : "",
485
+ disabled: n,
486
+ placeholder: typeof a.placeholder == "string" ? a.placeholder : void 0,
487
+ onInput: (e) => {
488
+ let t = e.target;
489
+ r(t.value);
490
+ }
491
+ });
492
+ if (e.type === "dropdown") {
493
+ let o = Array.isArray(a.options) ? a.options : [], s = a.multiple === !0;
494
+ return i("select", {
495
+ value: s ? void 0 : typeof t == "string" ? t : "",
496
+ disabled: n,
497
+ multiple: s,
498
+ onChange: (e) => {
499
+ let t = e.target;
500
+ if (s) {
501
+ r(Array.from(t.selectedOptions).map((e) => e.value));
502
+ return;
503
+ }
504
+ r(t.value);
505
+ }
506
+ }, o.map((t) => {
507
+ let n = String(t.value ?? "");
508
+ return i("option", {
509
+ key: `${e.id}:${n}`,
510
+ value: n,
511
+ disabled: t.disabled === !0
512
+ }, String(t.label ?? n));
513
+ }));
514
+ }
515
+ let o = typeof a.inputType == "string" ? a.inputType : e.type === "email" ? "email" : e.type === "phone" ? "tel" : e.type === "number" ? "number" : "text";
516
+ return i("input", {
517
+ type: o,
518
+ value: typeof t == "string" || typeof t == "number" ? String(t) : "",
519
+ disabled: n,
520
+ placeholder: typeof a.placeholder == "string" ? a.placeholder : void 0,
521
+ onInput: (e) => {
522
+ let t = e.target;
523
+ if (o === "number") {
524
+ let e = t.valueAsNumber;
525
+ r(Number.isFinite(e) ? e : "");
526
+ return;
527
+ }
528
+ r(t.value);
529
+ }
530
+ });
531
+ }
532
+ var W = r({
533
+ name: "FormieVueDefaultFieldInput",
534
+ props: E,
535
+ setup(e) {
536
+ return () => {
537
+ let t = e.field.input, n = A(e.field);
538
+ if (v(e.field)) return i(L, e);
539
+ if (x(e.field)) return i(H, e);
540
+ if (y(e.field)) return i(R, e);
541
+ if (n === "signature") return i(I, e);
542
+ if (n === "multi-line-text" || n === "dropdown") return U(e.field, e.value, e.disabled, e.setValue);
543
+ if (n === "radio") return i("div", { class: "formie-vue-choices" }, (Array.isArray(t.options) ? t.options : []).map((t) => {
544
+ let n = String(t.value ?? "");
545
+ return i("label", { key: `${e.field.id}:${n}` }, [i("input", {
546
+ key: "input",
547
+ type: "radio",
548
+ checked: e.value === n,
549
+ disabled: e.disabled,
550
+ onChange: () => {
551
+ e.setValue(n);
552
+ }
553
+ }), i("span", { key: "label" }, String(t.label ?? n))]);
554
+ }));
555
+ if (n === "checkboxes") {
556
+ let n = Array.isArray(t.options) ? t.options : [], r = Array.isArray(e.value) ? e.value.map((e) => String(e)) : [];
557
+ return i("div", { class: "formie-vue-choices" }, n.map((t) => {
558
+ let n = String(t.value ?? ""), a = r.includes(n);
559
+ return i("label", { key: `${e.field.id}:${n}` }, [i("input", {
560
+ key: "input",
561
+ type: "checkbox",
562
+ checked: a,
563
+ disabled: e.disabled,
564
+ onChange: () => {
565
+ let t = a ? r.filter((e) => e !== n) : [...r, n];
566
+ e.setValue(t);
567
+ }
568
+ }), i("span", { key: "label" }, String(t.label ?? n))]);
569
+ }));
570
+ }
571
+ if (n === "agree") {
572
+ let n = typeof t.descriptionHtml == "string" ? t.descriptionHtml : null;
573
+ return i("label", { class: "formie-vue-boolean" }, [i("input", {
574
+ key: "input",
575
+ type: "checkbox",
576
+ checked: e.value === !0,
577
+ disabled: e.disabled,
578
+ onChange: (t) => {
579
+ let n = t.target;
580
+ e.setValue(n.checked);
581
+ }
582
+ }), n ? i("span", {
583
+ key: "description",
584
+ innerHTML: n
585
+ }) : i("span", { key: "description" }, e.field.label)]);
586
+ }
587
+ return b(n) ? U(e.field, e.value, e.disabled, e.setValue) : i("div", { class: "formie-vue-unsupported" }, `Unsupported field type: ${String(e.field.meta?.fieldType ?? e.field.type)}`);
588
+ };
589
+ }
590
+ }), G = r({
591
+ name: "FormieVueConfigPageActions",
592
+ setup() {
593
+ let e = D();
594
+ return () => {
595
+ let t = e.state.value, n = e.instance.value;
596
+ if (!t || !n) return null;
597
+ let r = t.definition.pages.find((e) => e.id === t.currentPageId);
598
+ if (!r) return null;
599
+ let a = [];
600
+ return r.actions.secondary.forEach((e) => {
601
+ a.push(i("button", {
602
+ key: e.type,
603
+ type: "button",
604
+ onClick: () => {
605
+ n.submit(e.type);
606
+ }
607
+ }, e.label));
608
+ }), a.push(i("button", {
609
+ key: r.actions.primary.type,
610
+ type: "submit"
611
+ }, r.actions.primary.label)), i("div", { class: "formie-page-actions" }, a);
612
+ };
613
+ }
614
+ }), K = r({
615
+ name: "FormieVueConfigRenderer",
616
+ props: { className: {
617
+ type: String,
618
+ default: void 0
619
+ } },
620
+ setup(e) {
621
+ let t = D();
622
+ return () => {
623
+ let n = t.instance.value, r = t.state.value;
624
+ if (!n || !r) return null;
625
+ let a = t.components.value.Form || P, o = t.components.value.Page || F, s = t.components.value.ErrorSummary || M, c = r.definition.pages.find((e) => e.id === r.currentPageId && r.pageStates[e.id]?.hidden !== !0) || r.definition.pages.find((e) => r.pageStates[e.id]?.hidden !== !0) || r.definition.pages[0], l = r.lastSubmitResult?.messages.error, u = !!l && !r.errors.form.includes(l);
626
+ return c ? i(a, {
627
+ definition: r.definition,
628
+ session: r.session,
629
+ state: r,
630
+ className: e.className,
631
+ onSubmit: () => {
632
+ n.submit();
633
+ }
634
+ }, { default: () => [
635
+ i(s, {
636
+ key: "errors",
637
+ errors: r.errors.form
638
+ }),
639
+ r.lastSubmitResult?.messages.notice ? i("div", {
640
+ key: "notice",
641
+ class: "formie-vue-notice"
642
+ }, r.lastSubmitResult.messages.notice) : null,
643
+ u ? i("div", {
644
+ key: "error",
645
+ class: "formie-vue-error"
646
+ }, l) : null,
647
+ i(o, {
648
+ key: c.id,
649
+ page: c,
650
+ state: r
651
+ }, { default: () => [...c.rows.map((e, t) => i(V, {
652
+ key: `${c.id}:${t}`,
653
+ row: e,
654
+ rowIndex: t
655
+ })), i(G, { key: "actions" })] })
656
+ ] }) : null;
657
+ };
658
+ }
659
+ }), q = {
660
+ source: {
661
+ type: Object,
662
+ required: !0
663
+ },
664
+ components: {
665
+ type: Object,
666
+ default: () => ({})
667
+ },
668
+ fieldComponents: {
669
+ type: Object,
670
+ default: () => ({})
671
+ },
672
+ slots: {
673
+ type: Object,
674
+ default: () => ({})
675
+ },
676
+ className: {
677
+ type: String,
678
+ default: void 0
679
+ },
680
+ onMount: {
681
+ type: Function,
682
+ default: void 0
683
+ },
684
+ onReady: {
685
+ type: Function,
686
+ default: void 0
687
+ },
688
+ onUnmount: {
689
+ type: Function,
690
+ default: void 0
691
+ },
692
+ onResult: {
693
+ type: Function,
694
+ default: void 0
695
+ },
696
+ onSuccess: {
697
+ type: Function,
698
+ default: void 0
699
+ },
700
+ onError: {
701
+ type: Function,
702
+ default: void 0
703
+ },
704
+ onSubmitResult: {
705
+ type: Function,
706
+ default: void 0
707
+ },
708
+ onSubmitSuccess: {
709
+ type: Function,
710
+ default: void 0
711
+ },
712
+ onSubmitError: {
713
+ type: Function,
714
+ default: void 0
715
+ },
716
+ onEvent: {
717
+ type: Function,
718
+ default: void 0
719
+ }
720
+ };
721
+ function J(e, t, ...n) {
722
+ e?.(...n), t && t !== e && t(...n);
723
+ }
724
+ var Y = r({
725
+ name: "FormieVueDefinitionFormView",
726
+ props: q,
727
+ emits: [
728
+ "mount",
729
+ "ready",
730
+ "unmount",
731
+ "result",
732
+ "success",
733
+ "error",
734
+ "submit-result",
735
+ "submit-success",
736
+ "submit-error",
737
+ "event"
738
+ ],
739
+ setup(e, { emit: t }) {
740
+ let r = u(null), a = u(null), o = l(null), s = {
741
+ instance: r,
742
+ state: a,
743
+ components: n(() => e.components || {}),
744
+ fieldComponents: n(() => e.fieldComponents || {}),
745
+ slots: n(() => e.slots || {})
746
+ }, p = n(() => w(e.source));
747
+ return c(T, s), d(p, (n, i, s) => {
748
+ let c = !1, l = () => void 0;
749
+ (async () => {
750
+ try {
751
+ let n = m({
752
+ envelope: await k(e.source),
753
+ transport: ne(e.source)
754
+ });
755
+ if (c) {
756
+ await n.destroy();
757
+ return;
758
+ }
759
+ o.value = null, r.value = n, a.value = n.getState(), e.onMount?.(n), e.onReady?.(n), t("mount", n), t("ready", n);
760
+ let i = [
761
+ n.subscribe((e) => {
762
+ a.value = e;
763
+ }),
764
+ n.on("formie:submit:result", (n) => {
765
+ let r = n;
766
+ J(e.onSubmitResult, e.onResult, r), t("result", r), t("submit-result", r), r.success ? (J(e.onSubmitSuccess, e.onSuccess, r), t("success", r), t("submit-success", r)) : (J(e.onSubmitError, e.onError, r), t("error", r), t("submit-error", r));
767
+ }),
768
+ ...f.map((r) => n.on(r, (n) => {
769
+ let i = {
770
+ name: r,
771
+ payload: n
772
+ };
773
+ e.onEvent?.(i), t("event", i);
774
+ }))
775
+ ];
776
+ l = () => {
777
+ i.forEach((e) => e()), n.destroy(), r.value === n && (r.value = null, a.value = null), e.onUnmount?.(), t("unmount");
778
+ };
779
+ } catch (e) {
780
+ c || (o.value = e);
781
+ }
782
+ })(), s(() => {
783
+ c = !0, l();
784
+ });
785
+ }, { immediate: !0 }), () => o.value ? i("div", { class: "formie-vue-error" }, o.value.message) : !r.value || !a.value ? i("div", { class: "formie-vue-loading" }, "Loading form...") : i(K, { className: e.className });
786
+ }
787
+ });
788
+ function ae() {
789
+ let e = D();
790
+ return {
791
+ definition: n(() => e.state.value?.definition || null),
792
+ session: n(() => e.state.value?.session || null),
793
+ state: e.state,
794
+ instance: e.instance
795
+ };
796
+ }
797
+ function oe(e) {
798
+ let t = D(), r = n(() => {
799
+ let n = t.state.value?.definition;
800
+ return n && re(n).find((t) => t.id === e) || null;
801
+ });
802
+ return {
803
+ field: r,
804
+ value: n(() => t.state.value?.values[e]),
805
+ errors: n(() => t.state.value?.errors.fields[e] || []),
806
+ hidden: n(() => t.state.value?.fieldStates[e]?.hidden === !0),
807
+ disabled: n(() => t.state.value?.fieldStates[e]?.disabled === !0),
808
+ setValue(e) {
809
+ !r.value || !t.instance.value || t.instance.value.setValue(r.value.id, e);
810
+ }
811
+ };
812
+ }
813
+ function se(e) {
814
+ let t = D();
815
+ return {
816
+ page: n(() => t.state.value?.definition.pages.find((t) => t.id === e) || null),
817
+ isCurrent: n(() => t.state.value?.currentPageId === e),
818
+ hidden: n(() => t.state.value?.pageStates[e]?.hidden === !0)
819
+ };
820
+ }
821
+ function ce() {
822
+ return D().instance;
823
+ }
824
+ function le(e) {
825
+ let t = D();
826
+ return n(() => t.slots.value[e] || null);
827
+ }
828
+ //#endregion
829
+ //#region src/index.ts
830
+ function X(e) {
831
+ return !!e && "payload" in e;
832
+ }
833
+ function ue(e) {
834
+ return "success" in e ? e.success : e.ok;
835
+ }
836
+ function Z(e, t, ...n) {
837
+ e?.(...n), t && t !== e && t(...n);
838
+ }
839
+ function de(e) {
840
+ let t = e.transport;
841
+ if (!t && !X(e.source)) throw Error("`transport` is required for <FormieForm>.");
842
+ return {
843
+ mode: "server-rendered",
844
+ transport: t,
845
+ endpoint: e.endpoint,
846
+ formHandle: e.formHandle,
847
+ payload: X(e.source) ? e.source.payload : void 0,
848
+ staticCache: e.staticCache,
849
+ refreshTokens: e.refreshTokens,
850
+ locale: e.locale,
851
+ siteId: e.siteId,
852
+ autoVisible: e.autoVisible,
853
+ theme: e.theme,
854
+ themeConfig: e.themeConfig
855
+ };
856
+ }
857
+ function fe(e) {
858
+ if (e.source) return e.source;
859
+ let t = e.transport, n = e.endpoint, r = e.formHandle;
860
+ if (t !== "rest" && t !== "graphql") throw Error("Vue client-rendered forms require `transport=\"rest\"` or `transport=\"graphql\"`.");
861
+ if (!n || !r) throw Error("Vue client-rendered forms require either `source` or both `endpoint` and `formHandle`.");
862
+ return {
863
+ transport: t,
864
+ endpoint: n,
865
+ formHandle: r,
866
+ siteId: e.siteId
867
+ };
868
+ }
869
+ function pe() {
870
+ return t();
871
+ }
872
+ function Q() {
873
+ return t();
874
+ }
875
+ function $(e) {
876
+ let t = Q(), r = l(null), i = u(null), a = l(null);
877
+ return d([r, n(() => w(e))], ([n], r, o) => {
878
+ if (!n) return;
879
+ let s = !1, c = !1, l = async () => {
880
+ c || (c = !0, await t.unmount(n));
881
+ }, u = Promise.resolve().then(async () => {
882
+ if (!s) try {
883
+ let r = await t.mount(n, {
884
+ ...e,
885
+ mode: "server-rendered"
886
+ });
887
+ if (s) {
888
+ await l();
889
+ return;
890
+ }
891
+ i.value = r, a.value = null;
892
+ } catch (e) {
893
+ s || (a.value = e);
894
+ }
895
+ });
896
+ o(() => {
897
+ s = !0, i.value = null, u.finally(l);
898
+ });
899
+ }, { immediate: !0 }), {
900
+ rootRef: r,
901
+ state: {
902
+ instance: i,
903
+ isMounted: n(() => !!i.value),
904
+ error: a
905
+ },
906
+ submit: async (e = "submit") => i.value ? i.value.submit(e) : null
907
+ };
908
+ }
909
+ var me = r({
910
+ name: "FormieVueHtmlFormView",
911
+ props: { options: {
912
+ type: Object,
913
+ required: !0
914
+ } },
915
+ emits: [
916
+ "mount",
917
+ "ready",
918
+ "unmount",
919
+ "result",
920
+ "success",
921
+ "error",
922
+ "submit-result",
923
+ "submit-success",
924
+ "submit-error",
925
+ "event"
926
+ ],
927
+ setup(r, { emit: a }) {
928
+ let o = l(null), s = t(), c = n(() => de(r.options));
929
+ return d([o, n(() => w(c.value))], ([t], n, i) => {
930
+ if (!t) return;
931
+ let o = !1, l = null, u = [], d = Promise.resolve().then(async () => {
932
+ let n = await s.mount(t, c.value);
933
+ if (o) {
934
+ await s.unmount(t);
935
+ return;
936
+ }
937
+ l = n, r.options.onMount?.(n), r.options.onReady?.(n), a("mount", n), a("ready", n), u.push(n.on("formie:submit:result", (e) => {
938
+ let t = e;
939
+ Z(r.options.onSubmitResult, r.options.onResult, t), a("result", t), a("submit-result", t), ue(t) ? (Z(r.options.onSubmitSuccess, r.options.onSuccess, t), a("success", t), a("submit-success", t)) : (Z(r.options.onSubmitError, r.options.onError, t), a("error", t), a("submit-error", t));
940
+ })), e.forEach((e) => {
941
+ u.push(n.on(e, (t) => {
942
+ let n = {
943
+ name: e,
944
+ payload: t
945
+ };
946
+ r.options.onEvent?.(n), a("event", n);
947
+ }));
948
+ });
949
+ });
950
+ i(() => {
951
+ o = !0, u.forEach((e) => e()), d.finally(async () => {
952
+ await s.unmount(t), l &&= (r.options.onUnmount?.(), a("unmount"), null);
953
+ });
954
+ });
955
+ }, { immediate: !0 }), () => i("div", {
956
+ ref: o,
957
+ class: r.options.className
958
+ });
959
+ }
960
+ }), he = {
961
+ source: {
962
+ type: Object,
963
+ default: void 0
964
+ },
965
+ transport: {
966
+ type: String,
967
+ default: void 0
968
+ },
969
+ endpoint: {
970
+ type: String,
971
+ default: void 0
972
+ },
973
+ formHandle: {
974
+ type: String,
975
+ default: void 0
976
+ },
977
+ staticCache: {
978
+ type: Boolean,
979
+ default: void 0
980
+ },
981
+ refreshTokens: {
982
+ type: Boolean,
983
+ default: void 0
984
+ },
985
+ locale: {
986
+ type: String,
987
+ default: void 0
988
+ },
989
+ siteId: {
990
+ type: Number,
991
+ default: void 0
992
+ },
993
+ autoVisible: {
994
+ type: Boolean,
995
+ default: void 0
996
+ },
997
+ theme: {
998
+ type: String,
999
+ default: void 0
1000
+ },
1001
+ themeConfig: {
1002
+ type: Object,
1003
+ default: void 0
1004
+ },
1005
+ className: {
1006
+ type: String,
1007
+ default: void 0
1008
+ },
1009
+ onMount: {
1010
+ type: Function,
1011
+ default: void 0
1012
+ },
1013
+ onReady: {
1014
+ type: Function,
1015
+ default: void 0
1016
+ },
1017
+ onUnmount: {
1018
+ type: Function,
1019
+ default: void 0
1020
+ },
1021
+ onResult: {
1022
+ type: Function,
1023
+ default: void 0
1024
+ },
1025
+ onSuccess: {
1026
+ type: Function,
1027
+ default: void 0
1028
+ },
1029
+ onError: {
1030
+ type: Function,
1031
+ default: void 0
1032
+ },
1033
+ onSubmitResult: {
1034
+ type: Function,
1035
+ default: void 0
1036
+ },
1037
+ onSubmitSuccess: {
1038
+ type: Function,
1039
+ default: void 0
1040
+ },
1041
+ onSubmitError: {
1042
+ type: Function,
1043
+ default: void 0
1044
+ },
1045
+ onEvent: {
1046
+ type: Function,
1047
+ default: void 0
1048
+ }
1049
+ }, ge = {
1050
+ source: {
1051
+ type: Object,
1052
+ default: void 0
1053
+ },
1054
+ transport: {
1055
+ type: String,
1056
+ default: void 0
1057
+ },
1058
+ endpoint: {
1059
+ type: String,
1060
+ default: void 0
1061
+ },
1062
+ formHandle: {
1063
+ type: String,
1064
+ default: void 0
1065
+ },
1066
+ siteId: {
1067
+ type: Number,
1068
+ default: void 0
1069
+ },
1070
+ components: {
1071
+ type: Object,
1072
+ default: void 0
1073
+ },
1074
+ fieldComponents: {
1075
+ type: Object,
1076
+ default: void 0
1077
+ },
1078
+ slots: {
1079
+ type: Object,
1080
+ default: void 0
1081
+ },
1082
+ className: {
1083
+ type: String,
1084
+ default: void 0
1085
+ },
1086
+ onMount: {
1087
+ type: Function,
1088
+ default: void 0
1089
+ },
1090
+ onReady: {
1091
+ type: Function,
1092
+ default: void 0
1093
+ },
1094
+ onUnmount: {
1095
+ type: Function,
1096
+ default: void 0
1097
+ },
1098
+ onResult: {
1099
+ type: Function,
1100
+ default: void 0
1101
+ },
1102
+ onSuccess: {
1103
+ type: Function,
1104
+ default: void 0
1105
+ },
1106
+ onError: {
1107
+ type: Function,
1108
+ default: void 0
1109
+ },
1110
+ onSubmitResult: {
1111
+ type: Function,
1112
+ default: void 0
1113
+ },
1114
+ onSubmitSuccess: {
1115
+ type: Function,
1116
+ default: void 0
1117
+ },
1118
+ onSubmitError: {
1119
+ type: Function,
1120
+ default: void 0
1121
+ },
1122
+ onEvent: {
1123
+ type: Function,
1124
+ default: void 0
1125
+ }
1126
+ }, _e = r({
1127
+ name: "FormieVueForm",
1128
+ props: he,
1129
+ emits: [
1130
+ "mount",
1131
+ "ready",
1132
+ "unmount",
1133
+ "result",
1134
+ "success",
1135
+ "error",
1136
+ "submit-result",
1137
+ "submit-success",
1138
+ "submit-error",
1139
+ "event"
1140
+ ],
1141
+ setup(e, { emit: t }) {
1142
+ return () => i(me, {
1143
+ options: {
1144
+ source: e.source,
1145
+ transport: e.transport,
1146
+ endpoint: e.endpoint,
1147
+ formHandle: e.formHandle,
1148
+ staticCache: e.staticCache,
1149
+ refreshTokens: e.refreshTokens,
1150
+ locale: e.locale,
1151
+ siteId: e.siteId,
1152
+ autoVisible: e.autoVisible,
1153
+ theme: e.theme,
1154
+ themeConfig: e.themeConfig,
1155
+ className: e.className,
1156
+ onMount: e.onMount,
1157
+ onReady: e.onReady,
1158
+ onUnmount: e.onUnmount,
1159
+ onResult: e.onResult,
1160
+ onSuccess: e.onSuccess,
1161
+ onError: e.onError,
1162
+ onSubmitResult: e.onSubmitResult,
1163
+ onSubmitSuccess: e.onSubmitSuccess,
1164
+ onSubmitError: e.onSubmitError,
1165
+ onEvent: e.onEvent
1166
+ },
1167
+ onMount: (e) => t("mount", e),
1168
+ onReady: (e) => t("ready", e),
1169
+ onUnmount: () => t("unmount"),
1170
+ onResult: (e) => t("result", e),
1171
+ onSuccess: (e) => t("success", e),
1172
+ onError: (e) => t("error", e),
1173
+ onSubmitResult: (e) => t("submit-result", e),
1174
+ onSubmitSuccess: (e) => t("submit-success", e),
1175
+ onSubmitError: (e) => t("submit-error", e),
1176
+ onEvent: (e) => t("event", e)
1177
+ });
1178
+ }
1179
+ }), ve = r({
1180
+ name: "FormieVueClientForm",
1181
+ props: ge,
1182
+ emits: [
1183
+ "mount",
1184
+ "ready",
1185
+ "unmount",
1186
+ "result",
1187
+ "success",
1188
+ "error",
1189
+ "submit-result",
1190
+ "submit-success",
1191
+ "submit-error",
1192
+ "event"
1193
+ ],
1194
+ setup(e, { emit: t }) {
1195
+ return () => i(Y, {
1196
+ source: fe({
1197
+ source: e.source,
1198
+ transport: e.transport,
1199
+ endpoint: e.endpoint,
1200
+ formHandle: e.formHandle,
1201
+ siteId: e.siteId,
1202
+ components: e.components,
1203
+ fieldComponents: e.fieldComponents,
1204
+ slots: e.slots,
1205
+ className: e.className,
1206
+ onMount: e.onMount,
1207
+ onReady: e.onReady,
1208
+ onUnmount: e.onUnmount,
1209
+ onResult: e.onResult,
1210
+ onSuccess: e.onSuccess,
1211
+ onError: e.onError,
1212
+ onSubmitResult: e.onSubmitResult,
1213
+ onSubmitSuccess: e.onSubmitSuccess,
1214
+ onSubmitError: e.onSubmitError,
1215
+ onEvent: e.onEvent
1216
+ }),
1217
+ components: e.components,
1218
+ fieldComponents: e.fieldComponents,
1219
+ slots: e.slots,
1220
+ className: e.className,
1221
+ onMount: (n) => {
1222
+ e.onMount?.(n), t("mount", n);
1223
+ },
1224
+ onReady: (n) => {
1225
+ e.onReady?.(n), t("ready", n);
1226
+ },
1227
+ onUnmount: () => {
1228
+ e.onUnmount?.(), t("unmount");
1229
+ },
1230
+ onSubmitResult: (n) => {
1231
+ e.onSubmitResult?.(n), e.onResult?.(n), t("result", n), t("submit-result", n);
1232
+ },
1233
+ onSubmitSuccess: (n) => {
1234
+ e.onSubmitSuccess?.(n), e.onSuccess?.(n), t("success", n), t("submit-success", n);
1235
+ },
1236
+ onSubmitError: (n) => {
1237
+ e.onSubmitError?.(n), e.onError?.(n), t("error", n), t("submit-error", n);
1238
+ },
1239
+ onEvent: (n) => {
1240
+ e.onEvent?.(n), t("event", n);
1241
+ }
1242
+ });
1243
+ }
1244
+ });
1245
+ //#endregion
1246
+ export { ve as FormieClientForm, _e as FormieForm, pe as createVueFormieClient, ae as useFormie, Q as useFormieClient, oe as useFormieField, $ as useFormieHtml, ce as useFormieInstance, se as useFormiePage, le as useFormieSlot };