@kong-ui-public/entities-plugins 9.247.0 → 9.247.1
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/entities-plugins.es.js +3236 -3229
- package/dist/entities-plugins.umd.js +86 -86
- package/dist/filler/cypress/index.js +1 -1
- package/dist/filler/{field-walker-BKYEagiA.js → field-walker-B9V32Dwy.js} +913 -906
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/composables/form-context.d.ts.map +1 -1
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/utils.d.ts +19 -0
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/utils.d.ts.map +1 -1
- package/dist/filler/playwright/index.js +1 -1
- package/dist/freeform/index.js +742 -735
- package/dist/types/components/free-form/shared/composables/form-context.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/utils.d.ts +19 -0
- package/dist/types/components/free-form/shared/utils.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/freeform/index.js
CHANGED
|
@@ -1,64 +1,72 @@
|
|
|
1
|
-
import { toValue as V, computed as k, ref as
|
|
1
|
+
import { toValue as V, computed as k, ref as re, readonly as vt, watch as J, onBeforeUnmount as bt, reactive as Qe, toRef as E, useSlots as Ae, provide as Pe, inject as we, toRaw as Ze, onUnmounted as _t, defineComponent as U, useAttrs as ge, openBlock as _, createBlock as T, unref as o, mergeProps as z, createSlots as Y, renderList as oe, withCtx as q, renderSlot as F, normalizeProps as Be, guardReactiveProps as et, createPropsRestProxy as se, resolveComponent as D, withDirectives as X, createElementBlock as K, createVNode as $, createElementVNode as B, resolveDynamicComponent as ne, createCommentVNode as N, Fragment as ee, vShow as Q, useCssVars as At, useTemplateRef as tt, normalizeClass as Te, createTextVNode as pe, toDisplayString as ce, withModifiers as Ce, nextTick as $e, Transition as wt, useId as kt, useModel as Ve, onBeforeMount as St, mergeModels as Ke, withKeys as ze } from "vue";
|
|
2
2
|
import { marked as Tt } from "marked";
|
|
3
3
|
import Ct from "dompurify";
|
|
4
|
-
import { get as
|
|
5
|
-
import { createInjectionState as
|
|
6
|
-
import { AUTOFILL_SLOT as
|
|
7
|
-
import { createI18n as
|
|
8
|
-
import { KTextArea as
|
|
9
|
-
import { AddIcon as
|
|
10
|
-
import { KUI_ICON_SIZE_30 as
|
|
11
|
-
function
|
|
12
|
-
return e.map((
|
|
4
|
+
import { get as at, isEqual as fe, omit as Pt, cloneDeep as He, isFunction as We, set as It, uniqueId as Lt, upperFirst as qt } from "lodash-es";
|
|
5
|
+
import { createInjectionState as Mt } from "@vueuse/core";
|
|
6
|
+
import { AUTOFILL_SLOT as nt } from "@kong-ui-public/forms";
|
|
7
|
+
import { createI18n as it, i18nTComponent as ot } from "@kong-ui-public/i18n";
|
|
8
|
+
import { KTextArea as xt, KInput as Rt, KCheckbox as $t, KCard as je, KLabel as Vt, KMultiselect as Kt, KSelect as jt, KInputSwitch as Et } from "@kong/kongponents";
|
|
9
|
+
import { AddIcon as Ee, CloseIcon as rt, TrashIcon as Ot, ChevronRightIcon as Ft } from "@kong/icons";
|
|
10
|
+
import { KUI_ICON_SIZE_30 as Dt } from "@kong/design-tokens";
|
|
11
|
+
function Bt(e) {
|
|
12
|
+
return e.map((s) => ({ value: s, label: `${s}` }));
|
|
13
13
|
}
|
|
14
|
-
const
|
|
15
|
-
function
|
|
16
|
-
return e.join(
|
|
14
|
+
const Ue = "*", Ne = "#", de = "$", Ie = ".";
|
|
15
|
+
function x(...e) {
|
|
16
|
+
return e.join(Ie);
|
|
17
17
|
}
|
|
18
18
|
function Oe(...e) {
|
|
19
|
-
return
|
|
19
|
+
return x(de, ...e);
|
|
20
20
|
}
|
|
21
|
-
function
|
|
22
|
-
return e.startsWith(
|
|
21
|
+
function Ge(e) {
|
|
22
|
+
return e.startsWith(x(de, ""));
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
return e.split(
|
|
24
|
+
function ie(e) {
|
|
25
|
+
return e.split(Ie).filter((s) => s !== "");
|
|
26
26
|
}
|
|
27
27
|
function me(e) {
|
|
28
|
-
const
|
|
29
|
-
return
|
|
30
|
-
}
|
|
31
|
-
function Bt(e) {
|
|
32
|
-
return e.startsWith(de) && (e = R(...ae(e).slice(1))), e;
|
|
28
|
+
const s = ie(e);
|
|
29
|
+
return s[s.length - 1];
|
|
33
30
|
}
|
|
34
31
|
function Ut(e) {
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
return e.startsWith(de) && (e = x(...ie(e).slice(1))), e;
|
|
33
|
+
}
|
|
34
|
+
function st(e, s, t, n = "") {
|
|
35
|
+
if (e == null || typeof e != "object") return;
|
|
36
|
+
const r = Array.isArray(e) ? e.map((a, c) => String(c)) : Object.keys(e);
|
|
37
|
+
for (const a of r) {
|
|
38
|
+
const c = n ? x(n, a) : a;
|
|
39
|
+
s(c) ? e[a] = t(c) : st(e[a], s, t, c);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function Nt(e) {
|
|
43
|
+
const s = V(e);
|
|
44
|
+
return s ? s.type === "set" && s.elements.type === "string" && !s.elements.one_of : !1;
|
|
37
45
|
}
|
|
38
|
-
function lt(e,
|
|
46
|
+
function lt(e, s) {
|
|
39
47
|
return [...e].sort((t, n) => {
|
|
40
|
-
const r = Object.keys(t)[0], a = Object.keys(n)[0],
|
|
41
|
-
return
|
|
48
|
+
const r = Object.keys(t)[0], a = Object.keys(n)[0], c = s.indexOf(r), d = s.indexOf(a);
|
|
49
|
+
return c === -1 && d === -1 ? 0 : c === -1 ? 1 : d === -1 ? -1 : c - d;
|
|
42
50
|
});
|
|
43
51
|
}
|
|
44
|
-
function ut(e,
|
|
52
|
+
function ut(e, s) {
|
|
45
53
|
const t = /* @__PURE__ */ new Map();
|
|
46
54
|
e.forEach((i) => {
|
|
47
55
|
const m = Object.keys(i)[0];
|
|
48
56
|
t.set(m, i);
|
|
49
57
|
});
|
|
50
58
|
const n = /* @__PURE__ */ new Map();
|
|
51
|
-
|
|
52
|
-
i.forEach((g,
|
|
53
|
-
n.has(g) || n.set(g, []), n.get(g).push({ bundleIndex: m, position:
|
|
59
|
+
s.forEach((i, m) => {
|
|
60
|
+
i.forEach((g, l) => {
|
|
61
|
+
n.has(g) || n.set(g, []), n.get(g).push({ bundleIndex: m, position: l });
|
|
54
62
|
});
|
|
55
63
|
});
|
|
56
|
-
const r = /* @__PURE__ */ new Set(), a = [],
|
|
64
|
+
const r = /* @__PURE__ */ new Set(), a = [], c = /* @__PURE__ */ new Set(), d = (i) => {
|
|
57
65
|
const m = n.get(i);
|
|
58
66
|
if (!m) return !0;
|
|
59
|
-
for (const { bundleIndex: g, position:
|
|
60
|
-
const u =
|
|
61
|
-
for (let f = 0; f <
|
|
67
|
+
for (const { bundleIndex: g, position: l } of m) {
|
|
68
|
+
const u = s[g];
|
|
69
|
+
for (let f = 0; f < l; f++) {
|
|
62
70
|
const h = u[f];
|
|
63
71
|
if (t.has(h) && !r.has(h))
|
|
64
72
|
return !1;
|
|
@@ -69,147 +77,147 @@ function ut(e, l) {
|
|
|
69
77
|
if (r.has(i)) return;
|
|
70
78
|
const m = t.get(i);
|
|
71
79
|
if (!m) return;
|
|
72
|
-
a.push(m), r.add(i),
|
|
80
|
+
a.push(m), r.add(i), c.delete(i);
|
|
73
81
|
const g = n.get(i);
|
|
74
82
|
if (g)
|
|
75
83
|
for (const { bundleIndex: u, position: f } of g) {
|
|
76
|
-
const h =
|
|
84
|
+
const h = s[u];
|
|
77
85
|
for (let y = f + 1; y < h.length; y++) {
|
|
78
86
|
const v = h[y];
|
|
79
87
|
if (!r.has(v)) {
|
|
80
88
|
const b = t.get(v);
|
|
81
|
-
b && (a.push(b), r.add(v),
|
|
89
|
+
b && (a.push(b), r.add(v), c.delete(v));
|
|
82
90
|
}
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
|
-
const
|
|
86
|
-
for (const u of
|
|
87
|
-
|
|
93
|
+
const l = Array.from(c);
|
|
94
|
+
for (const u of l)
|
|
95
|
+
d(u) && p(u);
|
|
88
96
|
};
|
|
89
97
|
for (const i of e) {
|
|
90
98
|
const m = Object.keys(i)[0];
|
|
91
|
-
r.has(m) || (
|
|
99
|
+
r.has(m) || (d(m) ? p(m) : c.add(m));
|
|
92
100
|
}
|
|
93
101
|
return a;
|
|
94
102
|
}
|
|
95
|
-
function
|
|
96
|
-
const
|
|
103
|
+
function zt(e) {
|
|
104
|
+
const s = ie(e);
|
|
97
105
|
let t = { parent: null };
|
|
98
|
-
for (
|
|
99
|
-
const n =
|
|
100
|
-
t.path = t.parent?.path ?
|
|
106
|
+
for (s.pop(); s.length; ) {
|
|
107
|
+
const n = s.shift();
|
|
108
|
+
t.path = t.parent?.path ? x(t.parent.path, n) : n, t = { parent: t };
|
|
101
109
|
}
|
|
102
110
|
return t;
|
|
103
111
|
}
|
|
104
112
|
function ct(e) {
|
|
105
|
-
return k(() =>
|
|
113
|
+
return k(() => zt(V(e)));
|
|
106
114
|
}
|
|
107
|
-
const
|
|
115
|
+
const Je = /* @__PURE__ */ Symbol("free-form-field-path"), Fe = /* @__PURE__ */ Symbol("free-form-field-renderer-slots"), Ye = /* @__PURE__ */ Symbol("free-form-field-reset-label-path-setting"), ke = "free-form-field-renderers-slot", Ht = {
|
|
108
116
|
tooltipAttributes: {
|
|
109
117
|
maxWidth: "300px",
|
|
110
118
|
placement: "top"
|
|
111
119
|
}
|
|
112
120
|
};
|
|
113
|
-
function
|
|
121
|
+
function Wt(e, s = "") {
|
|
114
122
|
const t = {}, n = e;
|
|
115
|
-
return Array.isArray(n.fields) ? Object.assign(t,
|
|
123
|
+
return Array.isArray(n.fields) ? Object.assign(t, Le(n, s)) : e.type === "array" && e.elements ? Object.assign(t, qe(e, s)) : e.type === "map" && e.values && Object.assign(t, Me(e, s)), t;
|
|
116
124
|
}
|
|
117
|
-
function
|
|
125
|
+
function Le(e, s = "") {
|
|
118
126
|
const t = {};
|
|
119
127
|
if (Array.isArray(e.fields))
|
|
120
128
|
for (const n of e.fields) {
|
|
121
|
-
const r = Object.keys(n)[0], a = n[r],
|
|
122
|
-
if (t[
|
|
123
|
-
const
|
|
124
|
-
Object.assign(t,
|
|
129
|
+
const r = Object.keys(n)[0], a = n[r], c = s ? x(s, r) : r;
|
|
130
|
+
if (t[c] = a, a.type === "record" && Array.isArray(a.fields)) {
|
|
131
|
+
const d = Le(a, c);
|
|
132
|
+
Object.assign(t, d);
|
|
125
133
|
} else if (a.type === "array" && a.elements) {
|
|
126
|
-
const
|
|
127
|
-
Object.assign(t,
|
|
134
|
+
const d = qe(a, c);
|
|
135
|
+
Object.assign(t, d);
|
|
128
136
|
} else if (a.type === "map" && a.values) {
|
|
129
|
-
const
|
|
130
|
-
Object.assign(t,
|
|
137
|
+
const d = Me(a, c);
|
|
138
|
+
Object.assign(t, d);
|
|
131
139
|
}
|
|
132
140
|
}
|
|
133
141
|
return t;
|
|
134
142
|
}
|
|
135
|
-
function
|
|
143
|
+
function qe(e, s = "") {
|
|
136
144
|
const t = {};
|
|
137
145
|
if (e.elements) {
|
|
138
|
-
const n = e.elements, r =
|
|
146
|
+
const n = e.elements, r = x(s, Ue);
|
|
139
147
|
if (t[r] = n, n.type === "record" && Array.isArray(n.fields)) {
|
|
140
|
-
const a =
|
|
148
|
+
const a = Le(n, r);
|
|
141
149
|
Object.assign(t, a);
|
|
142
150
|
} else if (n.type === "array" && n.elements) {
|
|
143
|
-
const a =
|
|
151
|
+
const a = qe(n, r);
|
|
144
152
|
Object.assign(t, a);
|
|
145
153
|
} else if (n.type === "map" && n.values) {
|
|
146
|
-
const a =
|
|
154
|
+
const a = Me(n, r);
|
|
147
155
|
Object.assign(t, a);
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
158
|
return t;
|
|
151
159
|
}
|
|
152
|
-
function
|
|
153
|
-
const t = {}, n =
|
|
160
|
+
function Me(e, s = "") {
|
|
161
|
+
const t = {}, n = x(s, Ne);
|
|
154
162
|
if (t[n] = e.values, e.values.type === "record" && Array.isArray(e.values.fields)) {
|
|
155
|
-
const r =
|
|
163
|
+
const r = Le(e.values, n);
|
|
156
164
|
Object.assign(t, r);
|
|
157
165
|
} else if ((e.values.type === "array" || e.values.type === "set") && e.values.elements) {
|
|
158
|
-
const r =
|
|
166
|
+
const r = qe(e.values, n);
|
|
159
167
|
Object.assign(t, r);
|
|
160
168
|
} else if (e.values.type === "map" && e.values.values) {
|
|
161
|
-
const r =
|
|
169
|
+
const r = Me(e.values, n);
|
|
162
170
|
Object.assign(t, r);
|
|
163
171
|
}
|
|
164
172
|
return t;
|
|
165
173
|
}
|
|
166
|
-
function
|
|
167
|
-
const t =
|
|
174
|
+
function _e(e, s) {
|
|
175
|
+
const t = ie(e), n = [];
|
|
168
176
|
for (let r = 0; r < t.length; r++) {
|
|
169
|
-
const a = t[r],
|
|
170
|
-
|
|
177
|
+
const a = t[r], c = n.length > 0 ? x(...n) : "", d = c ? s[c] : void 0;
|
|
178
|
+
d?.type === "map" ? n.push(Ne) : d?.type === "array" ? n.push(Ue) : n.push(a);
|
|
171
179
|
}
|
|
172
|
-
return
|
|
180
|
+
return x(...n);
|
|
173
181
|
}
|
|
174
|
-
function
|
|
175
|
-
const
|
|
176
|
-
function n(
|
|
177
|
-
if (
|
|
178
|
-
let u =
|
|
179
|
-
return u.startsWith(`${de}${
|
|
182
|
+
function Gt(e) {
|
|
183
|
+
const s = V(e), t = k(() => s ? Wt(s) : {});
|
|
184
|
+
function n(l) {
|
|
185
|
+
if (l) {
|
|
186
|
+
let u = _e(l, t.value || {});
|
|
187
|
+
return u.startsWith(`${de}${Ie}`) && (u = u.slice(2)), t.value?.[u];
|
|
180
188
|
}
|
|
181
|
-
return
|
|
189
|
+
return s;
|
|
182
190
|
}
|
|
183
|
-
function r(
|
|
184
|
-
const f = n(
|
|
185
|
-
return f ? f.default !== void 0 ? f.default : u || f.required ? f.type === "record" ? a(f,
|
|
191
|
+
function r(l, u = !1) {
|
|
192
|
+
const f = n(l);
|
|
193
|
+
return f ? f.default !== void 0 ? f.default : u || f.required ? f.type === "record" ? a(f, l) : f.type === "array" ? [] : f.type === "map" ? {} : null : null : null;
|
|
186
194
|
}
|
|
187
|
-
function a(
|
|
195
|
+
function a(l, u) {
|
|
188
196
|
const f = {};
|
|
189
|
-
if (Array.isArray(
|
|
190
|
-
for (const h of
|
|
197
|
+
if (Array.isArray(l.fields))
|
|
198
|
+
for (const h of l.fields) {
|
|
191
199
|
const y = Object.keys(h)[0], v = u ? `${u}.${y}` : y, b = r(v, !1);
|
|
192
200
|
b !== void 0 && (f[y] = b);
|
|
193
201
|
}
|
|
194
202
|
return f;
|
|
195
203
|
}
|
|
196
|
-
function
|
|
197
|
-
return
|
|
204
|
+
function c(l) {
|
|
205
|
+
return l ? r(l, !0) : a(n(), "");
|
|
198
206
|
}
|
|
199
|
-
function
|
|
200
|
-
const u = n(
|
|
207
|
+
function d(l) {
|
|
208
|
+
const u = n(l), f = u?.description ? Ct.sanitize(Tt.parse(u.description, { async: !1 })) : void 0;
|
|
201
209
|
return {
|
|
202
|
-
...
|
|
203
|
-
"data-testid": `ff-label-${
|
|
210
|
+
...Ht,
|
|
211
|
+
"data-testid": `ff-label-${l}`,
|
|
204
212
|
info: f
|
|
205
213
|
};
|
|
206
214
|
}
|
|
207
|
-
function p(
|
|
208
|
-
const u = n(
|
|
209
|
-
return
|
|
215
|
+
function p(l) {
|
|
216
|
+
const u = n(l);
|
|
217
|
+
return Bt(u?.one_of || u.elements?.one_of || []);
|
|
210
218
|
}
|
|
211
|
-
function i(
|
|
212
|
-
const u = n(
|
|
219
|
+
function i(l) {
|
|
220
|
+
const u = n(l), f = u?.default;
|
|
213
221
|
let h = null;
|
|
214
222
|
if (u?.type === "foreign" && f?.id)
|
|
215
223
|
h = f.id;
|
|
@@ -228,27 +236,27 @@ function Wt(e) {
|
|
|
228
236
|
function m() {
|
|
229
237
|
return t.value;
|
|
230
238
|
}
|
|
231
|
-
function g(
|
|
232
|
-
return n(
|
|
239
|
+
function g(l) {
|
|
240
|
+
return n(l)?.required ? c(l) : null;
|
|
233
241
|
}
|
|
234
242
|
return {
|
|
235
243
|
getSchemaMap: m,
|
|
236
244
|
getSchema: n,
|
|
237
|
-
getDefault:
|
|
245
|
+
getDefault: c,
|
|
238
246
|
getSelectItems: p,
|
|
239
|
-
getLabelAttributes:
|
|
247
|
+
getLabelAttributes: d,
|
|
240
248
|
getPlaceholder: i,
|
|
241
249
|
getEmptyOrDefault: g
|
|
242
250
|
};
|
|
243
251
|
}
|
|
244
252
|
const De = /* @__PURE__ */ Symbol("ff-render-rule-exact-match");
|
|
245
|
-
function
|
|
253
|
+
function Kn(e) {
|
|
246
254
|
return { [De]: e };
|
|
247
255
|
}
|
|
248
|
-
function
|
|
249
|
-
const t =
|
|
256
|
+
function Jt(e, s) {
|
|
257
|
+
const t = re({}), n = re(/* @__PURE__ */ new Set());
|
|
250
258
|
function r(h, y) {
|
|
251
|
-
const v = h.map((A) =>
|
|
259
|
+
const v = h.map((A) => ie(A).length), b = v[0];
|
|
252
260
|
if (!v.every((A) => A === b)) {
|
|
253
261
|
const A = h.map((C, w) => ` - '${C}' is at level ${v[w]}`).join(`
|
|
254
262
|
`);
|
|
@@ -263,7 +271,7 @@ ${A}`
|
|
|
263
271
|
if (!v.bundles) continue;
|
|
264
272
|
for (const A of v.bundles)
|
|
265
273
|
if (new Set(A).size !== A.length) {
|
|
266
|
-
const w = A.filter((S,
|
|
274
|
+
const w = A.filter((S, I) => A.indexOf(S) !== I);
|
|
267
275
|
throw new Error(
|
|
268
276
|
`Self-cycle detected in bundle: field '${w[0]}' appears multiple times in [${A.join(", ")}]`
|
|
269
277
|
);
|
|
@@ -275,20 +283,20 @@ ${A}`
|
|
|
275
283
|
b.has(w) || b.set(w, /* @__PURE__ */ new Set()), b.get(w).add(S);
|
|
276
284
|
}
|
|
277
285
|
for (const A of b.keys()) {
|
|
278
|
-
let C = function(
|
|
279
|
-
if (S.includes(
|
|
280
|
-
const
|
|
286
|
+
let C = function(I) {
|
|
287
|
+
if (S.includes(I)) {
|
|
288
|
+
const j = [...S, I].join(" -> ");
|
|
281
289
|
throw new Error(
|
|
282
290
|
`Circular bundle detected in path '${y}':
|
|
283
|
-
${
|
|
291
|
+
${j}`
|
|
284
292
|
);
|
|
285
293
|
}
|
|
286
|
-
if (w.has(
|
|
287
|
-
w.add(
|
|
288
|
-
const
|
|
289
|
-
if (
|
|
290
|
-
for (const
|
|
291
|
-
C(
|
|
294
|
+
if (w.has(I)) return;
|
|
295
|
+
w.add(I), S.push(I);
|
|
296
|
+
const R = b.get(I);
|
|
297
|
+
if (R)
|
|
298
|
+
for (const j of R)
|
|
299
|
+
C(j);
|
|
292
300
|
S.pop();
|
|
293
301
|
};
|
|
294
302
|
const w = /* @__PURE__ */ new Set(), S = [];
|
|
@@ -296,24 +304,24 @@ ${E}`
|
|
|
296
304
|
}
|
|
297
305
|
}
|
|
298
306
|
}
|
|
299
|
-
function
|
|
307
|
+
function c(h) {
|
|
300
308
|
for (const [y, v] of Object.entries(h))
|
|
301
309
|
if (v.dependencies)
|
|
302
310
|
for (const b of Object.keys(v.dependencies)) {
|
|
303
311
|
let A = function(S) {
|
|
304
312
|
if (w.includes(S)) {
|
|
305
|
-
const
|
|
313
|
+
const R = [...w, S].join(" -> ");
|
|
306
314
|
throw new Error(
|
|
307
315
|
`Circular dependency detected in path '${y}':
|
|
308
|
-
${
|
|
316
|
+
${R}`
|
|
309
317
|
);
|
|
310
318
|
}
|
|
311
319
|
if (C.has(S)) return;
|
|
312
320
|
C.add(S), w.push(S);
|
|
313
|
-
const
|
|
314
|
-
if (
|
|
315
|
-
const [
|
|
316
|
-
v.dependencies[
|
|
321
|
+
const I = v.dependencies[S];
|
|
322
|
+
if (I) {
|
|
323
|
+
const [R] = I;
|
|
324
|
+
v.dependencies[R] && A(R);
|
|
317
325
|
}
|
|
318
326
|
w.pop();
|
|
319
327
|
};
|
|
@@ -321,18 +329,18 @@ ${x}`
|
|
|
321
329
|
A(b);
|
|
322
330
|
}
|
|
323
331
|
}
|
|
324
|
-
function
|
|
325
|
-
const v = h.map((A) => y ?
|
|
326
|
-
return b.pop(),
|
|
332
|
+
function d(h, y) {
|
|
333
|
+
const v = h.map((A) => y ? x(y, A) : A), b = ie(v[0]);
|
|
334
|
+
return b.pop(), x(...b);
|
|
327
335
|
}
|
|
328
336
|
function p(h, y) {
|
|
329
337
|
if (!y) return h;
|
|
330
|
-
const v = `${y}${
|
|
338
|
+
const v = `${y}${Ie}`;
|
|
331
339
|
return h.startsWith(v) ? h.slice(v.length) : h;
|
|
332
340
|
}
|
|
333
341
|
function i(h) {
|
|
334
|
-
const y =
|
|
335
|
-
return y.pop(),
|
|
342
|
+
const y = ie(h);
|
|
343
|
+
return y.pop(), x(...y);
|
|
336
344
|
}
|
|
337
345
|
const m = k(() => {
|
|
338
346
|
const h = {};
|
|
@@ -344,35 +352,35 @@ ${x}`
|
|
|
344
352
|
throw new Error(
|
|
345
353
|
`Bundle must contain at least 2 fields. Found ${A.length} field(s) in bundle: [${A.join(", ")}]`
|
|
346
354
|
);
|
|
347
|
-
const C = A.map((
|
|
355
|
+
const C = A.map((I) => b ? x(b, I) : I);
|
|
348
356
|
r(C, `Bundle [${A.join(", ")}]`);
|
|
349
|
-
const w =
|
|
357
|
+
const w = d(A, b) || de;
|
|
350
358
|
h[w] || (h[w] = {}), h[w].bundles || (h[w].bundles = []);
|
|
351
|
-
const S = C.map((
|
|
359
|
+
const S = C.map((I) => p(I, w));
|
|
352
360
|
h[w].bundles.push(S);
|
|
353
361
|
}
|
|
354
362
|
if (v.dependencies)
|
|
355
363
|
for (const [A, [C, w]] of Object.entries(v.dependencies)) {
|
|
356
|
-
const S = b ?
|
|
364
|
+
const S = b ? x(b, A) : A, I = b ? x(b, C) : C;
|
|
357
365
|
r(
|
|
358
|
-
[S,
|
|
366
|
+
[S, I],
|
|
359
367
|
`Dependency '${A}' -> '${C}'`
|
|
360
368
|
);
|
|
361
|
-
const
|
|
362
|
-
h[
|
|
363
|
-
const
|
|
364
|
-
h[
|
|
369
|
+
const R = i(S) || de;
|
|
370
|
+
h[R] || (h[R] = {}), h[R].dependencies || (h[R].dependencies = {});
|
|
371
|
+
const j = p(S, R), L = p(I, R);
|
|
372
|
+
h[R].dependencies[j] = [L, w];
|
|
365
373
|
}
|
|
366
374
|
}
|
|
367
|
-
return a(h),
|
|
375
|
+
return a(h), c(h), h;
|
|
368
376
|
});
|
|
369
377
|
function g(h) {
|
|
370
378
|
if (!h)
|
|
371
379
|
return m.value;
|
|
372
|
-
const y =
|
|
380
|
+
const y = _e(h, s());
|
|
373
381
|
return m.value[y];
|
|
374
382
|
}
|
|
375
|
-
function
|
|
383
|
+
function l(h) {
|
|
376
384
|
let y = !1;
|
|
377
385
|
return k(() => {
|
|
378
386
|
if (y) return;
|
|
@@ -395,10 +403,10 @@ ${x}`
|
|
|
395
403
|
J([
|
|
396
404
|
() => V(v),
|
|
397
405
|
() => V(y)
|
|
398
|
-
], ([w, S], [,
|
|
399
|
-
w ? t.value[S] = w : delete t.value[S],
|
|
406
|
+
], ([w, S], [, I]) => {
|
|
407
|
+
w ? t.value[S] = w : delete t.value[S], I && I !== S && delete t.value[I];
|
|
400
408
|
}, { immediate: !0, deep: !0 });
|
|
401
|
-
const C =
|
|
409
|
+
const C = l(y);
|
|
402
410
|
return J(
|
|
403
411
|
[
|
|
404
412
|
() => V(b),
|
|
@@ -406,15 +414,15 @@ ${x}`
|
|
|
406
414
|
() => V(y),
|
|
407
415
|
() => V(A)
|
|
408
416
|
],
|
|
409
|
-
([w, S,
|
|
410
|
-
!S || !w || Object.entries(S).forEach(([
|
|
411
|
-
if (
|
|
412
|
-
const
|
|
413
|
-
if (typeof M == "object" && M !== null && De in M ?
|
|
414
|
-
n.value.delete(
|
|
417
|
+
([w, S, I, R]) => {
|
|
418
|
+
!S || !w || Object.entries(S).forEach(([j, [L, M]]) => {
|
|
419
|
+
if (R?.includes(j)) return;
|
|
420
|
+
const P = at(w, L), H = I ? Ut(x(I, j)) : j;
|
|
421
|
+
if (typeof M == "object" && M !== null && De in M ? fe(P, M[De]) : Array.isArray(M) ? M.some((xe) => fe(P, xe)) : fe(P, M)) {
|
|
422
|
+
n.value.delete(H), e();
|
|
415
423
|
return;
|
|
416
424
|
}
|
|
417
|
-
n.value.add(
|
|
425
|
+
n.value.add(H), e();
|
|
418
426
|
});
|
|
419
427
|
},
|
|
420
428
|
{ deep: !0, immediate: !0 }
|
|
@@ -428,171 +436,170 @@ ${x}`
|
|
|
428
436
|
}
|
|
429
437
|
return {
|
|
430
438
|
useCurrentRules: u,
|
|
431
|
-
createComputedRules:
|
|
439
|
+
createComputedRules: l,
|
|
432
440
|
hiddenPaths: vt(n),
|
|
433
441
|
isFieldHidden: f
|
|
434
442
|
};
|
|
435
443
|
}
|
|
436
|
-
let
|
|
437
|
-
function
|
|
438
|
-
return `kid:${++
|
|
444
|
+
let Yt = 0;
|
|
445
|
+
function Xt() {
|
|
446
|
+
return `kid:${++Yt}`;
|
|
439
447
|
}
|
|
440
|
-
function
|
|
441
|
-
const
|
|
448
|
+
function Qt(e) {
|
|
449
|
+
const s = Qe(/* @__PURE__ */ new Map());
|
|
442
450
|
function t(i = "") {
|
|
443
|
-
const m =
|
|
444
|
-
return
|
|
451
|
+
const m = Xt();
|
|
452
|
+
return s.set(m, i), m;
|
|
445
453
|
}
|
|
446
454
|
function n(i) {
|
|
447
|
-
return
|
|
455
|
+
return s.get(i);
|
|
448
456
|
}
|
|
449
457
|
function r(i, m) {
|
|
450
|
-
|
|
458
|
+
s.has(i) && s.set(i, m);
|
|
451
459
|
}
|
|
452
460
|
function a(i) {
|
|
453
|
-
|
|
454
|
-
}
|
|
455
|
-
function d(i) {
|
|
456
|
-
return Qt(i, e, t);
|
|
461
|
+
s.delete(i);
|
|
457
462
|
}
|
|
458
463
|
function c(i) {
|
|
459
|
-
return Zt(i, e,
|
|
464
|
+
return Zt(i, e, t);
|
|
465
|
+
}
|
|
466
|
+
function d(i) {
|
|
467
|
+
return ea(i, e, n);
|
|
460
468
|
}
|
|
461
469
|
function p() {
|
|
462
|
-
|
|
470
|
+
s.clear();
|
|
463
471
|
}
|
|
464
472
|
return {
|
|
465
473
|
createKey: t,
|
|
466
474
|
getKey: n,
|
|
467
475
|
updateKey: r,
|
|
468
476
|
deleteKey: a,
|
|
469
|
-
serialize:
|
|
470
|
-
deserialize:
|
|
477
|
+
serialize: c,
|
|
478
|
+
deserialize: d,
|
|
471
479
|
clear: p
|
|
472
480
|
};
|
|
473
481
|
}
|
|
474
|
-
function
|
|
482
|
+
function Zt(e, s, t) {
|
|
475
483
|
const n = (r, a) => {
|
|
476
484
|
if (r == null || typeof r != "object")
|
|
477
485
|
return r;
|
|
478
486
|
if (Array.isArray(r))
|
|
479
487
|
return r.map((p, i) => {
|
|
480
|
-
const m = a ?
|
|
488
|
+
const m = a ? x(a, `${i}`) : `${i}`;
|
|
481
489
|
return n(p, m);
|
|
482
490
|
});
|
|
483
|
-
if ((a ?
|
|
491
|
+
if ((a ? s(a) : s())?.type === "map") {
|
|
484
492
|
const p = r, i = {};
|
|
485
493
|
return Object.keys(p).forEach((m) => {
|
|
486
|
-
const g = t(m),
|
|
487
|
-
i[g] = n(
|
|
494
|
+
const g = t(m), l = p[m], u = a ? x(a, m) : m;
|
|
495
|
+
i[g] = n(l, u);
|
|
488
496
|
}), i;
|
|
489
497
|
}
|
|
490
|
-
const
|
|
498
|
+
const d = {};
|
|
491
499
|
return Object.keys(r).forEach((p) => {
|
|
492
|
-
const i = a ?
|
|
493
|
-
|
|
494
|
-
}),
|
|
500
|
+
const i = a ? x(a, p) : p;
|
|
501
|
+
d[p] = n(r[p], i);
|
|
502
|
+
}), d;
|
|
495
503
|
};
|
|
496
504
|
return n(e);
|
|
497
505
|
}
|
|
498
|
-
function
|
|
506
|
+
function ea(e, s, t) {
|
|
499
507
|
const n = (r, a) => {
|
|
500
508
|
if (r == null || typeof r != "object")
|
|
501
509
|
return r;
|
|
502
510
|
if (Array.isArray(r))
|
|
503
511
|
return r.map((p, i) => {
|
|
504
|
-
const m = a ?
|
|
512
|
+
const m = a ? x(a, `${i}`) : `${i}`;
|
|
505
513
|
return n(p, m);
|
|
506
514
|
});
|
|
507
|
-
if ((a ?
|
|
515
|
+
if ((a ? s(a) : s())?.type === "map") {
|
|
508
516
|
const p = r, i = {};
|
|
509
517
|
return Object.keys(p).forEach((m) => {
|
|
510
|
-
const g = m,
|
|
518
|
+
const g = m, l = p[g], u = t(g);
|
|
511
519
|
if (u == null) {
|
|
512
520
|
console.error(`[FreeForm] Missing name for key ID: ${String(g)}`);
|
|
513
521
|
return;
|
|
514
522
|
}
|
|
515
|
-
const f = u ||
|
|
516
|
-
i[u] = n(
|
|
523
|
+
const f = u || Ne, h = a ? x(a, f) : f;
|
|
524
|
+
i[u] = n(l, h);
|
|
517
525
|
}), i;
|
|
518
526
|
}
|
|
519
|
-
const
|
|
527
|
+
const d = {};
|
|
520
528
|
return Object.keys(r).forEach((p) => {
|
|
521
|
-
const i = a ?
|
|
522
|
-
|
|
523
|
-
}),
|
|
529
|
+
const i = a ? x(a, p) : p;
|
|
530
|
+
d[p] = n(r[p], i);
|
|
531
|
+
}), d;
|
|
524
532
|
};
|
|
525
533
|
return n(e);
|
|
526
534
|
}
|
|
527
|
-
function
|
|
535
|
+
function ta(e) {
|
|
528
536
|
return /^kid:\d+$/.test(e);
|
|
529
537
|
}
|
|
530
|
-
const [
|
|
531
|
-
function(
|
|
538
|
+
const [aa, na] = Mt(
|
|
539
|
+
function(s) {
|
|
532
540
|
const {
|
|
533
541
|
schema: t,
|
|
534
542
|
propsData: n,
|
|
535
543
|
onChange: r,
|
|
536
544
|
propsRenderRules: a,
|
|
537
|
-
propsConfig:
|
|
538
|
-
} =
|
|
539
|
-
getDefault:
|
|
545
|
+
propsConfig: c
|
|
546
|
+
} = s, {
|
|
547
|
+
getDefault: d,
|
|
540
548
|
getEmptyOrDefault: p,
|
|
541
549
|
...i
|
|
542
|
-
} =
|
|
543
|
-
|
|
550
|
+
} = Gt(t), m = Qt(i.getSchema), g = /* @__PURE__ */ new Map(), l = Qe({}), u = E(() => c ?? {}), f = Ae();
|
|
551
|
+
Pe(Fe, Pt(f, "default", ke));
|
|
544
552
|
const {
|
|
545
553
|
useCurrentRules: h,
|
|
546
554
|
createComputedRules: y,
|
|
547
555
|
hiddenPaths: v,
|
|
548
556
|
isFieldHidden: b
|
|
549
|
-
} =
|
|
557
|
+
} = Jt(() => r?.(I()), i.getSchemaMap), A = h({
|
|
550
558
|
fieldPath: de,
|
|
551
559
|
rules: a,
|
|
552
|
-
parentValue:
|
|
560
|
+
parentValue: l
|
|
553
561
|
});
|
|
554
|
-
function C(
|
|
555
|
-
Object.keys(
|
|
556
|
-
delete
|
|
557
|
-
}), m.clear(), Object.assign(
|
|
562
|
+
function C(P) {
|
|
563
|
+
Object.keys(l).forEach((H) => {
|
|
564
|
+
delete l[H];
|
|
565
|
+
}), m.clear(), Object.assign(l, m.serialize(P));
|
|
558
566
|
}
|
|
559
|
-
function w(
|
|
560
|
-
let
|
|
561
|
-
!
|
|
567
|
+
function w(P) {
|
|
568
|
+
let H;
|
|
569
|
+
!P || !S(V(P)) ? H = d() : H = He(V(P)), We(u.value.prepareFormData) ? C(u.value.prepareFormData(H)) : C(H);
|
|
562
570
|
}
|
|
563
|
-
function S(
|
|
564
|
-
return
|
|
571
|
+
function S(P) {
|
|
572
|
+
return We(u.value.hasValue) ? u.value.hasValue(P) : !!P;
|
|
565
573
|
}
|
|
566
|
-
function
|
|
567
|
-
const
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
return m.deserialize(B);
|
|
574
|
+
function I() {
|
|
575
|
+
const P = He(V(l));
|
|
576
|
+
return v.value.size > 0 && st(
|
|
577
|
+
P,
|
|
578
|
+
b,
|
|
579
|
+
p
|
|
580
|
+
), m.deserialize(P);
|
|
574
581
|
}
|
|
575
|
-
J(
|
|
576
|
-
r?.(
|
|
582
|
+
J(l, () => {
|
|
583
|
+
r?.(I());
|
|
577
584
|
}, { deep: !0 });
|
|
578
|
-
let
|
|
579
|
-
J(() => n?.value, (
|
|
580
|
-
|
|
585
|
+
let R = !1;
|
|
586
|
+
J(() => n?.value, (P) => {
|
|
587
|
+
R && fe(I(), V(P)) || (w(P), R = !0);
|
|
581
588
|
}, { deep: !0, immediate: !0 });
|
|
582
|
-
function
|
|
583
|
-
return
|
|
589
|
+
function j(P) {
|
|
590
|
+
return P != null && typeof P == "object" && !Array.isArray(P) ? m.serialize(P) : P;
|
|
584
591
|
}
|
|
585
|
-
function L(
|
|
586
|
-
return
|
|
592
|
+
function L(P) {
|
|
593
|
+
return j(d(P));
|
|
587
594
|
}
|
|
588
|
-
function M(
|
|
589
|
-
return
|
|
595
|
+
function M(P) {
|
|
596
|
+
return j(p(P));
|
|
590
597
|
}
|
|
591
598
|
return {
|
|
592
599
|
/**
|
|
593
600
|
* The reactive form data object
|
|
594
601
|
*/
|
|
595
|
-
formData:
|
|
602
|
+
formData: l,
|
|
596
603
|
schema: t,
|
|
597
604
|
config: u,
|
|
598
605
|
fieldRendererRegistry: g,
|
|
@@ -601,7 +608,7 @@ const [ta, aa] = qt(
|
|
|
601
608
|
rootRenderRules: A,
|
|
602
609
|
createComputedRenderRules: y,
|
|
603
610
|
...i,
|
|
604
|
-
getValue:
|
|
611
|
+
getValue: I,
|
|
605
612
|
isFieldHidden: b,
|
|
606
613
|
keyIdMap: m,
|
|
607
614
|
getDefault: L,
|
|
@@ -609,55 +616,55 @@ const [ta, aa] = qt(
|
|
|
609
616
|
};
|
|
610
617
|
}
|
|
611
618
|
);
|
|
612
|
-
function
|
|
613
|
-
const e =
|
|
619
|
+
function te() {
|
|
620
|
+
const e = na();
|
|
614
621
|
if (!e)
|
|
615
622
|
throw new Error("useFormShared() called without provider.");
|
|
616
623
|
return e;
|
|
617
624
|
}
|
|
618
625
|
const dt = (e) => {
|
|
619
|
-
const
|
|
626
|
+
const s = we(Je, k(() => "")), t = k(() => {
|
|
620
627
|
const n = V(e);
|
|
621
628
|
let r = n;
|
|
622
|
-
return !
|
|
629
|
+
return !Ge(n) && s.value && (r = x(s.value, n)), Ge(n) && (r = r.slice(Oe("").length)), r;
|
|
623
630
|
});
|
|
624
|
-
return
|
|
625
|
-
},
|
|
626
|
-
const { getSchema:
|
|
627
|
-
const p = V(
|
|
628
|
-
const u =
|
|
629
|
-
return { ...g, [u]: a[
|
|
631
|
+
return Pe(Je, t), t;
|
|
632
|
+
}, ia = (e) => {
|
|
633
|
+
const { getSchema: s, getSchemaMap: t, fieldRendererRegistry: n } = te(), { default: r, ...a } = Ae(), c = we(Fe), d = k(() => {
|
|
634
|
+
const p = V(c), i = t(), m = Object.keys(a).filter((g) => g !== ke && g !== "item").reduce((g, l) => {
|
|
635
|
+
const u = _e(x(V(e), l), i);
|
|
636
|
+
return { ...g, [u]: a[l] };
|
|
630
637
|
}, {});
|
|
631
638
|
return p ? { ...p, ...m } : m;
|
|
632
639
|
});
|
|
633
|
-
return
|
|
640
|
+
return Pe(Fe, d), k(() => {
|
|
634
641
|
if (r) return;
|
|
635
|
-
const p = V(e), i =
|
|
642
|
+
const p = V(e), i = d.value[_e(p, t())];
|
|
636
643
|
if (i) return i;
|
|
637
644
|
const m = t();
|
|
638
|
-
for (const [g,
|
|
639
|
-
const u =
|
|
640
|
-
if (g({ path: p, genericPath: u, schema:
|
|
641
|
-
return
|
|
645
|
+
for (const [g, l] of n) {
|
|
646
|
+
const u = _e(p, m);
|
|
647
|
+
if (g({ path: p, genericPath: u, schema: s(p) }))
|
|
648
|
+
return l;
|
|
642
649
|
}
|
|
643
650
|
});
|
|
644
|
-
},
|
|
645
|
-
function
|
|
646
|
-
const { formData:
|
|
651
|
+
}, be = "__FREEFORM_SCHEMA_MAP__";
|
|
652
|
+
function oa(e) {
|
|
653
|
+
const { formData: s } = te(), t = dt(e);
|
|
647
654
|
return {
|
|
648
655
|
value: k({
|
|
649
|
-
get: () =>
|
|
650
|
-
set: (r) =>
|
|
656
|
+
get: () => at(s, ie(t.value)),
|
|
657
|
+
set: (r) => It(s, ie(t.value), r)
|
|
651
658
|
})
|
|
652
659
|
};
|
|
653
660
|
}
|
|
654
661
|
function Z(e) {
|
|
655
|
-
const { getSchema:
|
|
656
|
-
return
|
|
657
|
-
schema:
|
|
662
|
+
const { getSchema: s, isFieldHidden: t, getEmptyOrDefault: n } = te(), r = dt(e), a = ia(r), { value: c } = oa(e), d = k(() => s(r.value)), p = k(() => t(r.value)), i = k(() => n(r.value));
|
|
663
|
+
return d.value ? {
|
|
664
|
+
schema: d,
|
|
658
665
|
path: r,
|
|
659
666
|
renderer: a,
|
|
660
|
-
value:
|
|
667
|
+
value: c,
|
|
661
668
|
ancestors: ct(r),
|
|
662
669
|
/**
|
|
663
670
|
* Hide the field but keep its state.
|
|
@@ -669,36 +676,36 @@ function Z(e) {
|
|
|
669
676
|
error: new Error(`path '${r.value}' is not found in schema.`)
|
|
670
677
|
};
|
|
671
678
|
}
|
|
672
|
-
function
|
|
679
|
+
function ra(e, s) {
|
|
673
680
|
const t = /* @__PURE__ */ new WeakMap(), n = /* @__PURE__ */ new Map();
|
|
674
681
|
function r() {
|
|
675
|
-
return
|
|
682
|
+
return Lt(`${e}-`);
|
|
676
683
|
}
|
|
677
|
-
function a(
|
|
678
|
-
if (
|
|
679
|
-
return `${e}-${
|
|
680
|
-
if (t.has(
|
|
681
|
-
return t.get(
|
|
682
|
-
const p = n.has(
|
|
683
|
-
return n.set(
|
|
684
|
+
function a(c, d) {
|
|
685
|
+
if (c == null || typeof c != "object")
|
|
686
|
+
return `${e}-${d}`;
|
|
687
|
+
if (t.has(c))
|
|
688
|
+
return t.get(c);
|
|
689
|
+
const p = n.has(d) ? n.get(d) : r();
|
|
690
|
+
return n.set(d, p), t.set(c, p), p;
|
|
684
691
|
}
|
|
685
|
-
return J(
|
|
686
|
-
const
|
|
687
|
-
|
|
692
|
+
return J(s, (c) => {
|
|
693
|
+
const d = V(c), p = /* @__PURE__ */ new Set();
|
|
694
|
+
d.forEach((i, m) => {
|
|
688
695
|
p.add(m);
|
|
689
696
|
}), Array.from(n.keys()).forEach((i) => {
|
|
690
697
|
p.has(i) || n.delete(i);
|
|
691
698
|
});
|
|
692
699
|
}, { immediate: !0, deep: !0 }), { getKey: a };
|
|
693
700
|
}
|
|
694
|
-
function
|
|
701
|
+
function jn(e, s) {
|
|
695
702
|
J(e, (t) => {
|
|
696
|
-
window[
|
|
703
|
+
window[be] || (window[be] = {}), window[be][s] = Ze(t);
|
|
697
704
|
}, { immediate: !0, deep: !0 }), _t(() => {
|
|
698
|
-
window[
|
|
705
|
+
window[be] && delete window[be][s];
|
|
699
706
|
});
|
|
700
707
|
}
|
|
701
|
-
const
|
|
708
|
+
const sa = {
|
|
702
709
|
ip: "IP",
|
|
703
710
|
ssl: "SSL",
|
|
704
711
|
ttl: "TTL",
|
|
@@ -732,68 +739,68 @@ const ra = {
|
|
|
732
739
|
dmq: "DMQ"
|
|
733
740
|
};
|
|
734
741
|
function pt(e) {
|
|
735
|
-
return
|
|
742
|
+
return sa[e.toLocaleLowerCase()] ?? e;
|
|
736
743
|
}
|
|
737
744
|
function mt(e) {
|
|
738
745
|
return e.split("_").map(pt).join(" ");
|
|
739
746
|
}
|
|
740
|
-
function
|
|
741
|
-
const t =
|
|
747
|
+
function la(e, s) {
|
|
748
|
+
const t = we(Ye, {
|
|
742
749
|
parentPath: null,
|
|
743
750
|
isolate: !1
|
|
744
|
-
}), { parentPath: n, isolate: r } = V(t), a =
|
|
751
|
+
}), { parentPath: n, isolate: r } = V(t), a = re(n ? x(n, e) : e), c = re({
|
|
745
752
|
parentPath: a.value,
|
|
746
753
|
isolate: r
|
|
747
754
|
});
|
|
748
|
-
return J([
|
|
749
|
-
const { parentPath: i, isolate: m } = p, g = i ?
|
|
750
|
-
|
|
755
|
+
return J([E(s), E(t)], ([d, p]) => {
|
|
756
|
+
const { parentPath: i, isolate: m } = p, g = i ? x(i, e) : e;
|
|
757
|
+
d ? {
|
|
751
758
|
isolate: () => {
|
|
752
|
-
a.value = e,
|
|
759
|
+
a.value = e, c.value.isolate = !0, c.value.parentPath = null;
|
|
753
760
|
},
|
|
754
761
|
"isolate-children": () => {
|
|
755
|
-
|
|
762
|
+
c.value.isolate = !0, c.value.parentPath = null;
|
|
756
763
|
},
|
|
757
764
|
reset: () => {
|
|
758
|
-
a.value = e,
|
|
765
|
+
a.value = e, c.value.isolate = !1, c.value.parentPath = null;
|
|
759
766
|
},
|
|
760
767
|
"reset-children": () => {
|
|
761
|
-
|
|
768
|
+
c.value.isolate = !1, c.value.parentPath = null;
|
|
762
769
|
},
|
|
763
770
|
inherit: () => {
|
|
764
|
-
a.value = g,
|
|
771
|
+
a.value = g, c.value.isolate = !1, c.value.parentPath = g;
|
|
765
772
|
}
|
|
766
|
-
}[
|
|
767
|
-
}, { deep: !0, immediate: !0 }),
|
|
773
|
+
}[d]?.() : m && (a.value = e, c.value.isolate = !0, c.value.parentPath = null);
|
|
774
|
+
}, { deep: !0, immediate: !0 }), Pe(Ye, c), a;
|
|
768
775
|
}
|
|
769
776
|
function ft(e) {
|
|
770
|
-
return
|
|
777
|
+
return ie(e).map((t) => t.split("_").map(pt).join(" ")).map(qt).join(" › ");
|
|
771
778
|
}
|
|
772
|
-
function
|
|
773
|
-
const t = V(e), n = me(t), { config: r, getSchema: a } =
|
|
779
|
+
function ua(e, s) {
|
|
780
|
+
const t = V(e), n = me(t), { config: r, getSchema: a } = te(), c = la(n, s), d = ct(e);
|
|
774
781
|
return k(() => {
|
|
775
|
-
const p =
|
|
782
|
+
const p = c.value ?? n, i = d.value.parent?.path ? a(d.value.parent.path) : null, m = i?.type === "array", g = i?.type === "map";
|
|
776
783
|
if (m || g)
|
|
777
784
|
return "";
|
|
778
|
-
const
|
|
779
|
-
return r.value.transformLabel ? r.value.transformLabel(
|
|
785
|
+
const l = ft(p);
|
|
786
|
+
return r.value.transformLabel ? r.value.transformLabel(l, t) : l;
|
|
780
787
|
});
|
|
781
788
|
}
|
|
782
|
-
function
|
|
783
|
-
const { getLabelAttributes: t, getPlaceholder: n, getSchema: r } =
|
|
789
|
+
function ae(e, s) {
|
|
790
|
+
const { getLabelAttributes: t, getPlaceholder: n, getSchema: r } = te(), a = V(e), c = V(s), d = ua(e, E(() => V(s).resetLabelPath));
|
|
784
791
|
return k(() => ({
|
|
785
|
-
...
|
|
786
|
-
placeholder:
|
|
787
|
-
labelAttributes:
|
|
788
|
-
label:
|
|
789
|
-
required:
|
|
792
|
+
...c,
|
|
793
|
+
placeholder: c.placeholder ?? n(a) ?? void 0,
|
|
794
|
+
labelAttributes: c.labelAttributes ?? t(a),
|
|
795
|
+
label: c.label ?? d.value,
|
|
796
|
+
required: c.required ?? r(a)?.required
|
|
790
797
|
}));
|
|
791
798
|
}
|
|
792
|
-
function
|
|
793
|
-
const { value: t, ...n } = Z(e), { getEmptyOrDefault: r, keyIdMap: a } =
|
|
799
|
+
function ca(e, s) {
|
|
800
|
+
const { value: t, ...n } = Z(e), { getEmptyOrDefault: r, keyIdMap: a } = te(), c = k(() => {
|
|
794
801
|
if (n.path)
|
|
795
802
|
return n.schema.value.values;
|
|
796
|
-
}),
|
|
803
|
+
}), d = k(() => t ? Object.keys(t.value || {}).map((f) => {
|
|
797
804
|
const h = f, y = a.getKey(h) ?? "";
|
|
798
805
|
return [h, y];
|
|
799
806
|
}) : []);
|
|
@@ -802,7 +809,7 @@ function ua(e, l) {
|
|
|
802
809
|
}
|
|
803
810
|
function i() {
|
|
804
811
|
if (!t) return;
|
|
805
|
-
const u = a.createKey(), f = r(
|
|
812
|
+
const u = a.createKey(), f = r(x(n.path.value, u));
|
|
806
813
|
return t.value = {
|
|
807
814
|
...t.value,
|
|
808
815
|
[u]: f
|
|
@@ -816,13 +823,13 @@ function ua(e, l) {
|
|
|
816
823
|
function g(u) {
|
|
817
824
|
return a.getKey(u);
|
|
818
825
|
}
|
|
819
|
-
const
|
|
826
|
+
const l = k(() => {
|
|
820
827
|
if (!n.path) return "";
|
|
821
828
|
const u = me(n.path.value);
|
|
822
829
|
let f = u;
|
|
823
|
-
return
|
|
830
|
+
return ta(u) && (f = a.getKey(u) ?? ""), mt(f);
|
|
824
831
|
});
|
|
825
|
-
if (
|
|
832
|
+
if (s && c.value?.type === "string") {
|
|
826
833
|
let u = function() {
|
|
827
834
|
if (!t || !t.value) return null;
|
|
828
835
|
const h = {};
|
|
@@ -834,63 +841,63 @@ function ua(e, l) {
|
|
|
834
841
|
}, f = null;
|
|
835
842
|
J(() => t?.value, (h) => {
|
|
836
843
|
const y = u();
|
|
837
|
-
|
|
844
|
+
fe(f, y) || (f = y, s?.(y));
|
|
838
845
|
}, { deep: !0 });
|
|
839
846
|
}
|
|
840
847
|
return {
|
|
841
|
-
keys:
|
|
848
|
+
keys: d,
|
|
842
849
|
updateKey: p,
|
|
843
850
|
addKey: i,
|
|
844
851
|
removeKey: m,
|
|
845
852
|
field: n,
|
|
846
|
-
fieldDisplayName:
|
|
853
|
+
fieldDisplayName: l,
|
|
847
854
|
getKeyName: g
|
|
848
855
|
};
|
|
849
856
|
}
|
|
850
|
-
const
|
|
851
|
-
actions:
|
|
852
|
-
plugins:
|
|
857
|
+
const da = { add_entity: "Add {entity}", remove_entity: "Remove {entity}" }, pa = { form: { field_rules: { at_least_one_of: "At least one of the following values is required: {parameters}.", mutually_required: "These values must be used together: {parameters}.", mutually_exclusive: "Only one of these values can be used: {parameters}." } }, "free-form": { tag_helper: "Use comma to separate values. eg: value1, value2", foreign_placeholder: "Enter a UUID of {entity}", vault_picker: { component_error: "The vault secret picker is not available" } } }, ma = {
|
|
858
|
+
actions: da,
|
|
859
|
+
plugins: pa
|
|
853
860
|
};
|
|
854
|
-
function
|
|
855
|
-
const e =
|
|
861
|
+
function ye() {
|
|
862
|
+
const e = it("en-us", ma);
|
|
856
863
|
return {
|
|
857
864
|
i18n: e,
|
|
858
|
-
i18nT:
|
|
865
|
+
i18nT: ot(e)
|
|
859
866
|
};
|
|
860
867
|
}
|
|
861
|
-
const
|
|
868
|
+
const ve = /* @__PURE__ */ U({
|
|
862
869
|
__name: "EnhancedInput",
|
|
863
870
|
props: {
|
|
864
871
|
modelValue: {},
|
|
865
872
|
multiline: { type: Boolean }
|
|
866
873
|
},
|
|
867
874
|
emits: ["update:modelValue"],
|
|
868
|
-
setup(e, { emit:
|
|
869
|
-
const t = e, n =
|
|
875
|
+
setup(e, { emit: s }) {
|
|
876
|
+
const t = e, n = ge(), r = s, a = k(() => t.multiline ? xt : Rt), c = k(() => n.characterLimit ?? (t.multiline ? !1 : void 0)), d = re(t.modelValue);
|
|
870
877
|
J(() => t.modelValue, (g) => {
|
|
871
|
-
|
|
878
|
+
d.value = g;
|
|
872
879
|
});
|
|
873
|
-
const { config: p } =
|
|
874
|
-
g !==
|
|
880
|
+
const { config: p } = te(), i = (g) => {
|
|
881
|
+
g !== d.value && (d.value = g, p.value.updateOnChange || r("update:modelValue", g));
|
|
875
882
|
}, m = () => {
|
|
876
|
-
p.value.updateOnChange && r("update:modelValue",
|
|
883
|
+
p.value.updateOnChange && r("update:modelValue", d.value);
|
|
877
884
|
};
|
|
878
|
-
return (g,
|
|
879
|
-
"character-limit":
|
|
885
|
+
return (g, l) => (_(), T(o(a), z(g.$attrs, {
|
|
886
|
+
"character-limit": c.value,
|
|
880
887
|
"model-value": e.modelValue,
|
|
881
888
|
resizable: e.multiline ? !0 : void 0,
|
|
882
889
|
onChange: m,
|
|
883
890
|
"onUpdate:modelValue": i
|
|
884
891
|
}), Y({ _: 2 }, [
|
|
885
|
-
|
|
892
|
+
oe(Ae(), (u, f) => ({
|
|
886
893
|
name: f,
|
|
887
894
|
fn: q((h) => [
|
|
888
|
-
F(g.$slots, f, Be(
|
|
895
|
+
F(g.$slots, f, Be(et(h)))
|
|
889
896
|
])
|
|
890
897
|
}))
|
|
891
898
|
]), 1040, ["character-limit", "model-value", "resizable"]));
|
|
892
899
|
}
|
|
893
|
-
}),
|
|
900
|
+
}), fa = ["innerHTML"], ha = /* @__PURE__ */ U({
|
|
894
901
|
inheritAttrs: !1,
|
|
895
902
|
__name: "StringField",
|
|
896
903
|
props: {
|
|
@@ -915,23 +922,23 @@ const be = /* @__PURE__ */ N({
|
|
|
915
922
|
name: {}
|
|
916
923
|
},
|
|
917
924
|
emits: ["update:modelValue"],
|
|
918
|
-
setup(e, { emit:
|
|
919
|
-
const t =
|
|
925
|
+
setup(e, { emit: s }) {
|
|
926
|
+
const t = ge(), { i18n: n } = ye(), r = se(e, ["autofocus", "showVaultSecretPicker", "showPasswordMaskToggle", "name"]), a = s, { value: c, hide: d, ...p } = Z(E(() => e.name)), i = ae(p.path, E({ ...r, ...t })), m = c?.value;
|
|
920
927
|
function g(v) {
|
|
921
|
-
m !== void 0 && v === "" && v !== m ? (
|
|
928
|
+
m !== void 0 && v === "" && v !== m ? (c.value = null, a("update:modelValue", null)) : (c.value = v.trim(), a("update:modelValue", v.trim()));
|
|
922
929
|
}
|
|
923
|
-
const
|
|
930
|
+
const l = k(() => e.showPasswordMaskToggle !== void 0 ? e.showPasswordMaskToggle : r.type === "password" ? !0 : !!(p.schema?.value).encrypted), u = we(nt, void 0), f = k(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!p.schema.value?.referenceable), h = k(() => ({ referenceable: f.value })), y = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
924
931
|
return (v, b) => {
|
|
925
932
|
const A = D("KAlert");
|
|
926
933
|
return p.error ? (_(), T(A, {
|
|
927
934
|
key: 0,
|
|
928
935
|
appearance: "danger",
|
|
929
936
|
message: p.error.message
|
|
930
|
-
}, null, 8, ["message"])) : X((_(), K("div", Be(
|
|
931
|
-
$(
|
|
937
|
+
}, null, 8, ["message"])) : X((_(), K("div", Be(z({ key: 1 }, v.$attrs)), [
|
|
938
|
+
$(ve, z({
|
|
932
939
|
...o(i),
|
|
933
|
-
showPasswordMaskToggle:
|
|
934
|
-
type:
|
|
940
|
+
showPasswordMaskToggle: l.value,
|
|
941
|
+
type: l.value ? "password" : "text"
|
|
935
942
|
}, {
|
|
936
943
|
id: e.inputId,
|
|
937
944
|
class: "ff-string-field",
|
|
@@ -941,7 +948,7 @@ const be = /* @__PURE__ */ N({
|
|
|
941
948
|
error: e.error,
|
|
942
949
|
"error-message": e.errorMessage,
|
|
943
950
|
help: e.multiline && e.error ? e.errorMessage : e.help,
|
|
944
|
-
"model-value": o(
|
|
951
|
+
"model-value": o(c) ?? "",
|
|
945
952
|
multiline: e.multiline,
|
|
946
953
|
placeholder: e.placeholder ?? o(i).placeholder,
|
|
947
954
|
"onUpdate:modelValue": g
|
|
@@ -950,9 +957,9 @@ const be = /* @__PURE__ */ N({
|
|
|
950
957
|
name: "label-tooltip",
|
|
951
958
|
fn: q(() => [
|
|
952
959
|
F(v.$slots, "tooltip", {}, () => [
|
|
953
|
-
|
|
960
|
+
B("div", {
|
|
954
961
|
innerHTML: o(i).labelAttributes.info
|
|
955
|
-
}, null, 8,
|
|
962
|
+
}, null, 8, fa)
|
|
956
963
|
], !0)
|
|
957
964
|
]),
|
|
958
965
|
key: "0"
|
|
@@ -967,47 +974,47 @@ const be = /* @__PURE__ */ N({
|
|
|
967
974
|
!e.multiline && e.inlineVaultPicker ? {
|
|
968
975
|
name: "after",
|
|
969
976
|
fn: q(() => [
|
|
970
|
-
o(u) && f.value ? (_(), T(
|
|
977
|
+
o(u) && f.value ? (_(), T(ne(o(u)), {
|
|
971
978
|
key: 0,
|
|
972
979
|
schema: h.value,
|
|
973
980
|
update: g,
|
|
974
|
-
value: o(
|
|
975
|
-
}, null, 8, ["schema", "value"])) :
|
|
981
|
+
value: o(c) ?? ""
|
|
982
|
+
}, null, 8, ["schema", "value"])) : N("", !0),
|
|
976
983
|
f.value && !o(u) ? (_(), T(A, {
|
|
977
984
|
key: 1,
|
|
978
985
|
appearance: "warning",
|
|
979
986
|
"data-testid": `ff-vault-secret-picker-warning-${p.path.value}`,
|
|
980
987
|
message: o(n).t("plugins.free-form.vault_picker.component_error")
|
|
981
|
-
}, null, 8, ["data-testid", "message"])) :
|
|
988
|
+
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
982
989
|
]),
|
|
983
990
|
key: "2"
|
|
984
991
|
} : void 0
|
|
985
992
|
]), 1040, ["id", "data-1p-ignore", "data-autofocus", "data-testid", "error", "error-message", "help", "model-value", "multiline", "placeholder"]),
|
|
986
|
-
e.inlineVaultPicker ?
|
|
987
|
-
o(u) && f.value ? (_(), T(
|
|
993
|
+
e.inlineVaultPicker ? N("", !0) : (_(), K(ee, { key: 0 }, [
|
|
994
|
+
o(u) && f.value ? (_(), T(ne(o(u)), {
|
|
988
995
|
key: 0,
|
|
989
996
|
schema: h.value,
|
|
990
997
|
update: g,
|
|
991
|
-
value: o(
|
|
992
|
-
}, null, 8, ["schema", "value"])) :
|
|
998
|
+
value: o(c) ?? ""
|
|
999
|
+
}, null, 8, ["schema", "value"])) : N("", !0),
|
|
993
1000
|
f.value && !o(u) ? (_(), T(A, {
|
|
994
1001
|
key: 1,
|
|
995
1002
|
appearance: "warning",
|
|
996
1003
|
"data-testid": `ff-vault-secret-picker-warning-${p.path.value}`,
|
|
997
1004
|
message: o(n).t("plugins.free-form.vault_picker.component_error")
|
|
998
|
-
}, null, 8, ["data-testid", "message"])) :
|
|
1005
|
+
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
999
1006
|
], 64))
|
|
1000
1007
|
], 16)), [
|
|
1001
|
-
[Q, !o(
|
|
1008
|
+
[Q, !o(d)]
|
|
1002
1009
|
]);
|
|
1003
1010
|
};
|
|
1004
1011
|
}
|
|
1005
|
-
}),
|
|
1012
|
+
}), W = (e, s) => {
|
|
1006
1013
|
const t = e.__vccOpts || e;
|
|
1007
|
-
for (const [n, r] of
|
|
1014
|
+
for (const [n, r] of s)
|
|
1008
1015
|
t[n] = r;
|
|
1009
1016
|
return t;
|
|
1010
|
-
}, ht = /* @__PURE__ */
|
|
1017
|
+
}, ht = /* @__PURE__ */ W(ha, [["__scopeId", "data-v-5cb8f07e"]]), ga = ["innerHTML"], ya = /* @__PURE__ */ U({
|
|
1011
1018
|
inheritAttrs: !1,
|
|
1012
1019
|
__name: "BooleanField",
|
|
1013
1020
|
props: {
|
|
@@ -1017,20 +1024,20 @@ const be = /* @__PURE__ */ N({
|
|
|
1017
1024
|
name: {}
|
|
1018
1025
|
},
|
|
1019
1026
|
emits: ["update:modelValue"],
|
|
1020
|
-
setup(e, { emit:
|
|
1021
|
-
const t =
|
|
1022
|
-
n.value = m,
|
|
1023
|
-
}, i =
|
|
1027
|
+
setup(e, { emit: s }) {
|
|
1028
|
+
const t = se(e, ["autofocus", "name"]), { value: n, hide: r, emptyOrDefaultValue: a, ...c } = Z(E(() => e.name)), d = s, p = (m) => {
|
|
1029
|
+
n.value = m, d("update:modelValue", m);
|
|
1030
|
+
}, i = ae(c.path, t);
|
|
1024
1031
|
return (m, g) => {
|
|
1025
|
-
const
|
|
1026
|
-
return
|
|
1032
|
+
const l = D("KAlert");
|
|
1033
|
+
return c.error ? (_(), T(l, {
|
|
1027
1034
|
key: 0,
|
|
1028
1035
|
appearance: "danger",
|
|
1029
|
-
message:
|
|
1030
|
-
}, null, 8, ["message"])) : X((_(), T(o(
|
|
1036
|
+
message: c.error.message
|
|
1037
|
+
}, null, 8, ["message"])) : X((_(), T(o($t), z({ key: 1 }, { ...o(i), ...m.$attrs }, {
|
|
1031
1038
|
class: "ff-boolean-field",
|
|
1032
1039
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1033
|
-
"data-testid": `ff-${
|
|
1040
|
+
"data-testid": `ff-${c.path.value}`,
|
|
1034
1041
|
"model-value": !!(o(n) == null ? o(a) : o(n)),
|
|
1035
1042
|
"onUpdate:modelValue": p
|
|
1036
1043
|
}), Y({ _: 2 }, [
|
|
@@ -1038,9 +1045,9 @@ const be = /* @__PURE__ */ N({
|
|
|
1038
1045
|
name: "tooltip",
|
|
1039
1046
|
fn: q(() => [
|
|
1040
1047
|
F(m.$slots, "tooltip", {}, () => [
|
|
1041
|
-
|
|
1048
|
+
B("div", {
|
|
1042
1049
|
innerHTML: o(i).labelAttributes.info
|
|
1043
|
-
}, null, 8,
|
|
1050
|
+
}, null, 8, ga)
|
|
1044
1051
|
], !0)
|
|
1045
1052
|
]),
|
|
1046
1053
|
key: "0"
|
|
@@ -1050,7 +1057,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1050
1057
|
]);
|
|
1051
1058
|
};
|
|
1052
1059
|
}
|
|
1053
|
-
}),
|
|
1060
|
+
}), va = /* @__PURE__ */ W(ya, [["__scopeId", "data-v-a1c08c7f"]]), ba = ["data-testid"], _a = ["innerHTML"], Aa = /* @__PURE__ */ U({
|
|
1054
1061
|
inheritAttrs: !1,
|
|
1055
1062
|
__name: "StringArrayField",
|
|
1056
1063
|
props: {
|
|
@@ -1060,38 +1067,38 @@ const be = /* @__PURE__ */ N({
|
|
|
1060
1067
|
name: {}
|
|
1061
1068
|
},
|
|
1062
1069
|
emits: ["update:modelValue"],
|
|
1063
|
-
setup(e, { emit:
|
|
1064
|
-
const t =
|
|
1070
|
+
setup(e, { emit: s }) {
|
|
1071
|
+
const t = ge(), n = se(e, ["autofocus", "name"]), r = s, { value: a, hide: c, ...d } = Z(E(() => e.name)), p = ae(d.path, E({ ...n, ...t })), i = k(() => d.schema?.value?.len_min && d.schema.value.len_min > 0), m = re("");
|
|
1065
1072
|
function g(h) {
|
|
1066
1073
|
return h.map((y) => y.trim()).filter(Boolean).join(", ");
|
|
1067
1074
|
}
|
|
1068
|
-
function
|
|
1075
|
+
function l(h) {
|
|
1069
1076
|
return h.trim().split(",").map((y) => y.trim()).filter(Boolean);
|
|
1070
1077
|
}
|
|
1071
1078
|
function u(h) {
|
|
1072
1079
|
m.value = h;
|
|
1073
|
-
const y =
|
|
1080
|
+
const y = l(h), v = !y.length && i.value ? null : y;
|
|
1074
1081
|
a.value = v, r("update:modelValue", v);
|
|
1075
1082
|
}
|
|
1076
1083
|
const f = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1077
1084
|
return J(a, (h) => {
|
|
1078
1085
|
const y = h ? g(h) : "";
|
|
1079
|
-
g(
|
|
1086
|
+
g(l(m.value)) !== y && (m.value = y);
|
|
1080
1087
|
}, { immediate: !0 }), (h, y) => {
|
|
1081
1088
|
const v = D("KAlert");
|
|
1082
|
-
return
|
|
1089
|
+
return d.error ? (_(), T(v, {
|
|
1083
1090
|
key: 0,
|
|
1084
1091
|
appearance: "danger",
|
|
1085
|
-
message:
|
|
1092
|
+
message: d.error.message
|
|
1086
1093
|
}, null, 8, ["message"])) : X((_(), K("div", {
|
|
1087
1094
|
key: 1,
|
|
1088
|
-
"data-testid": `ff-tag-${
|
|
1095
|
+
"data-testid": `ff-tag-${d.path.value}`
|
|
1089
1096
|
}, [
|
|
1090
|
-
$(
|
|
1097
|
+
$(ve, z(o(p), {
|
|
1091
1098
|
class: "ff-tag-field",
|
|
1092
1099
|
"data-1p-ignore": f.value,
|
|
1093
1100
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1094
|
-
"data-testid": `ff-${
|
|
1101
|
+
"data-testid": `ff-${d.path.value}`,
|
|
1095
1102
|
"model-value": m.value ?? "",
|
|
1096
1103
|
"onUpdate:modelValue": u
|
|
1097
1104
|
}), Y({ _: 2 }, [
|
|
@@ -1099,20 +1106,20 @@ const be = /* @__PURE__ */ N({
|
|
|
1099
1106
|
name: "label-tooltip",
|
|
1100
1107
|
fn: q(() => [
|
|
1101
1108
|
F(h.$slots, "tooltip", {}, () => [
|
|
1102
|
-
|
|
1109
|
+
B("div", {
|
|
1103
1110
|
innerHTML: o(p).labelAttributes.info
|
|
1104
|
-
}, null, 8,
|
|
1111
|
+
}, null, 8, _a)
|
|
1105
1112
|
], !0)
|
|
1106
1113
|
]),
|
|
1107
1114
|
key: "0"
|
|
1108
1115
|
} : void 0
|
|
1109
1116
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "model-value"])
|
|
1110
|
-
], 8,
|
|
1111
|
-
[Q, !o(
|
|
1117
|
+
], 8, ba)), [
|
|
1118
|
+
[Q, !o(c)]
|
|
1112
1119
|
]);
|
|
1113
1120
|
};
|
|
1114
1121
|
}
|
|
1115
|
-
}), gt = /* @__PURE__ */
|
|
1122
|
+
}), gt = /* @__PURE__ */ W(Aa, [["__scopeId", "data-v-3aa09162"]]), wa = ["data-appearance", "data-testid"], ka = ["data-testid"], Sa = ["innerHTML"], Ta = ["data-testid"], Ca = { class: "ff-array-field-item-content" }, Pa = ["data-index", "data-testid"], Re = 'input:not(:disabled), textarea:not(:disabled), select:not(:disabled), button:not(:disabled), [contenteditable="true"], [tabindex]:not([tabindex="-1"]):not(:disabled)', Ia = /* @__PURE__ */ U({
|
|
1116
1123
|
__name: "ArrayField",
|
|
1117
1124
|
props: {
|
|
1118
1125
|
name: {},
|
|
@@ -1126,51 +1133,51 @@ const be = /* @__PURE__ */ N({
|
|
|
1126
1133
|
autofocus: { type: Boolean }
|
|
1127
1134
|
},
|
|
1128
1135
|
emits: ["add", "remove"],
|
|
1129
|
-
setup(e, { emit:
|
|
1136
|
+
setup(e, { emit: s }) {
|
|
1130
1137
|
At((L) => ({
|
|
1131
|
-
v2cc732dc:
|
|
1138
|
+
v2cc732dc: j.value
|
|
1132
1139
|
}));
|
|
1133
|
-
const t = e, n =
|
|
1140
|
+
const t = e, n = s, { i18n: { t: r } } = ye(), { getDefault: a, getSchema: c } = te(), { value: d, hide: p, ...i } = Z(E(t, "name")), m = ae(i.path, E({ ...t, ...ge() })), g = k(() => {
|
|
1134
1141
|
if (!i.path) throw new Error("Field path is required for sub-schema retrieval");
|
|
1135
|
-
const L =
|
|
1142
|
+
const L = c(i.path.value);
|
|
1136
1143
|
if (!L) throw new Error(`Schema not found for path: ${i.path.value}`);
|
|
1137
1144
|
return L.elements;
|
|
1138
|
-
}),
|
|
1145
|
+
}), l = k(() => {
|
|
1139
1146
|
if (!i.path) return "";
|
|
1140
1147
|
const L = me(i.path.value);
|
|
1141
1148
|
return mt(L);
|
|
1142
|
-
}), u = k(() => t.items ?? V(
|
|
1149
|
+
}), u = k(() => t.items ?? V(d) ?? []), { getKey: f } = ra("ff-array-field", u), h = k(() => t.appearance ? t.appearance : g.value.type === "record" || g.value.type === "map" ? "card" : "default"), y = k(() => h.value === "card" ? je : "div");
|
|
1143
1150
|
function v(L, M) {
|
|
1144
1151
|
return typeof t.itemLabel == "function" ? t.itemLabel(L, M) : t.itemLabel || m.value.label || `Item #${M}`;
|
|
1145
1152
|
}
|
|
1146
1153
|
const b = k(() => u.value.map((L, M) => ({
|
|
1147
1154
|
hash: `#${f(L, M)}`,
|
|
1148
1155
|
title: ""
|
|
1149
|
-
}))), A =
|
|
1150
|
-
const L = a(
|
|
1151
|
-
Array.isArray(
|
|
1156
|
+
}))), A = re(b.value[0]?.hash), C = async () => {
|
|
1157
|
+
const L = a(x(i.path.value, Ue));
|
|
1158
|
+
Array.isArray(d.value) || (d.value = []), d.value.push(L), n("add"), t.appearance === "tabs" && (await $e(), A.value = b.value[b.value.length - 1]?.hash), await $e(), I(u.value.length + 1);
|
|
1152
1159
|
}, w = async (L) => {
|
|
1153
|
-
Array.isArray(
|
|
1154
|
-
}, S =
|
|
1155
|
-
function
|
|
1160
|
+
Array.isArray(d.value) && (d.value.splice(L, 1), d.value.length === 0 && !m.value.required && (d.value = null)), n("remove", L), t.appearance === "tabs" && (A.value = b.value[Math.max(0, L - 1)]?.hash);
|
|
1161
|
+
}, S = tt("root");
|
|
1162
|
+
function I(L) {
|
|
1156
1163
|
if (!S.value)
|
|
1157
1164
|
return;
|
|
1158
|
-
const M = Math.max(0, Math.min(L, u.value.length - 1)),
|
|
1159
|
-
if (!
|
|
1165
|
+
const M = Math.max(0, Math.min(L, u.value.length - 1)), P = S.value.querySelector(`[data-index="${M}"]`);
|
|
1166
|
+
if (!P)
|
|
1160
1167
|
return;
|
|
1161
|
-
|
|
1168
|
+
R(P)?.focus();
|
|
1162
1169
|
}
|
|
1163
|
-
function
|
|
1170
|
+
function R(L) {
|
|
1164
1171
|
const M = L.querySelector('[data-autofocus="true"]');
|
|
1165
1172
|
return M ? M.matches(Re) ? M : M.querySelector(Re) : L.querySelector(Re);
|
|
1166
1173
|
}
|
|
1167
|
-
const
|
|
1174
|
+
const j = k(() => {
|
|
1168
1175
|
const { appearance: L, stickyTabs: M } = t;
|
|
1169
1176
|
return L !== "tabs" || M == null || M === !1 ? null : typeof M == "number" ? `${t.stickyTabs}px` : typeof M == "string" ? M : "0";
|
|
1170
1177
|
});
|
|
1171
1178
|
return (L, M) => {
|
|
1172
|
-
const
|
|
1173
|
-
return i.error ? (_(), T(
|
|
1179
|
+
const P = D("KAlert"), H = D("KLabel"), G = D("KButton"), le = D("KTooltip"), xe = D("KTabs");
|
|
1180
|
+
return i.error ? (_(), T(P, {
|
|
1174
1181
|
key: 0,
|
|
1175
1182
|
appearance: "danger",
|
|
1176
1183
|
message: i.error.message
|
|
@@ -1178,7 +1185,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1178
1185
|
key: 1,
|
|
1179
1186
|
ref_key: "root",
|
|
1180
1187
|
ref: S,
|
|
1181
|
-
class:
|
|
1188
|
+
class: Te(["ff-array-field", {
|
|
1182
1189
|
[`ff-array-field-${h.value ?? "default"}`]: !0,
|
|
1183
1190
|
"ff-array-field-sticky-tabs": e.stickyTabs
|
|
1184
1191
|
}]),
|
|
@@ -1190,7 +1197,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1190
1197
|
class: "ff-array-field-header",
|
|
1191
1198
|
"data-testid": `ff-array-header-${i.path.value}`
|
|
1192
1199
|
}, [
|
|
1193
|
-
$(
|
|
1200
|
+
$(H, z({ class: "ff-array-field-label" }, o(m), {
|
|
1194
1201
|
"data-testid": `ff-label-${i.path.value}`,
|
|
1195
1202
|
"tooltip-attributes": o(m).labelAttributes.tooltipAttributes
|
|
1196
1203
|
}), Y({
|
|
@@ -1203,41 +1210,41 @@ const be = /* @__PURE__ */ N({
|
|
|
1203
1210
|
name: "tooltip",
|
|
1204
1211
|
fn: q(() => [
|
|
1205
1212
|
F(L.$slots, "tooltip", {}, () => [
|
|
1206
|
-
|
|
1213
|
+
B("div", {
|
|
1207
1214
|
innerHTML: o(m).labelAttributes.info
|
|
1208
|
-
}, null, 8,
|
|
1215
|
+
}, null, 8, Sa)
|
|
1209
1216
|
], !0)
|
|
1210
1217
|
]),
|
|
1211
1218
|
key: "0"
|
|
1212
1219
|
} : void 0
|
|
1213
1220
|
]), 1040, ["data-testid", "tooltip-attributes"]),
|
|
1214
|
-
e.appearance === "tabs" ? (_(), T(
|
|
1221
|
+
e.appearance === "tabs" ? (_(), T(G, {
|
|
1215
1222
|
key: 0,
|
|
1216
1223
|
appearance: "tertiary",
|
|
1217
|
-
"aria-label": o(r)("actions.add_entity", { entity:
|
|
1224
|
+
"aria-label": o(r)("actions.add_entity", { entity: l.value }),
|
|
1218
1225
|
"data-testid": `ff-add-item-btn-${i.path.value}`,
|
|
1219
1226
|
icon: "",
|
|
1220
1227
|
onClick: C
|
|
1221
1228
|
}, {
|
|
1222
1229
|
default: q(() => [
|
|
1223
|
-
$(o(
|
|
1230
|
+
$(o(Ee))
|
|
1224
1231
|
]),
|
|
1225
1232
|
_: 1
|
|
1226
|
-
}, 8, ["aria-label", "data-testid"])) :
|
|
1227
|
-
], 8,
|
|
1228
|
-
h.value !== "tabs" ? (_(), K(
|
|
1229
|
-
|
|
1233
|
+
}, 8, ["aria-label", "data-testid"])) : N("", !0)
|
|
1234
|
+
], 8, ka)) : N("", !0),
|
|
1235
|
+
h.value !== "tabs" ? (_(), K(ee, { key: 1 }, [
|
|
1236
|
+
B("div", {
|
|
1230
1237
|
class: "ff-array-field-container",
|
|
1231
1238
|
"data-testid": `ff-array-basic-container-${i.path.value}`
|
|
1232
1239
|
}, [
|
|
1233
|
-
(_(!0), K(
|
|
1234
|
-
key: o(f)(
|
|
1235
|
-
class:
|
|
1240
|
+
(_(!0), K(ee, null, oe(u.value, (ue, O) => (_(), T(o(y), {
|
|
1241
|
+
key: o(f)(ue, O),
|
|
1242
|
+
class: Te(["ff-array-field-item", { "ff-array-field-item-card": h.value === "card" }]),
|
|
1236
1243
|
"data-index": O,
|
|
1237
1244
|
"data-testid": `ff-array-item-${i.path.value}.${O}`
|
|
1238
1245
|
}, {
|
|
1239
1246
|
default: q(() => [
|
|
1240
|
-
|
|
1247
|
+
B("div", Ca, [
|
|
1241
1248
|
L.$slots.item ? F(L.$slots, "item", {
|
|
1242
1249
|
key: 0,
|
|
1243
1250
|
autofocus: !0,
|
|
@@ -1248,27 +1255,27 @@ const be = /* @__PURE__ */ N({
|
|
|
1248
1255
|
autofocus: "",
|
|
1249
1256
|
help: o(r)("plugins.free-form.tag_helper"),
|
|
1250
1257
|
name: String(O)
|
|
1251
|
-
}, null, 8, ["help", "name"])) : (_(), T(
|
|
1258
|
+
}, null, 8, ["help", "name"])) : (_(), T(he, {
|
|
1252
1259
|
key: 2,
|
|
1253
1260
|
autofocus: "",
|
|
1254
1261
|
name: String(O)
|
|
1255
1262
|
}, null, 8, ["name"]))
|
|
1256
1263
|
]),
|
|
1257
|
-
$(
|
|
1264
|
+
$(le, {
|
|
1258
1265
|
class: "ff-array-field-item-remove-tooltip",
|
|
1259
|
-
text: o(r)("actions.remove_entity", { entity:
|
|
1266
|
+
text: o(r)("actions.remove_entity", { entity: l.value })
|
|
1260
1267
|
}, {
|
|
1261
1268
|
default: q(() => [
|
|
1262
|
-
$(
|
|
1269
|
+
$(G, {
|
|
1263
1270
|
appearance: "tertiary",
|
|
1264
|
-
"aria-label": o(r)("actions.remove_entity", { entity:
|
|
1271
|
+
"aria-label": o(r)("actions.remove_entity", { entity: l.value }),
|
|
1265
1272
|
class: "ff-array-field-item-remove",
|
|
1266
1273
|
"data-testid": `ff-array-remove-item-btn-${i.path.value}.${O}`,
|
|
1267
1274
|
icon: "",
|
|
1268
|
-
onClick:
|
|
1275
|
+
onClick: Ce((yt) => w(O), ["stop"])
|
|
1269
1276
|
}, {
|
|
1270
1277
|
default: q(() => [
|
|
1271
|
-
$(o(
|
|
1278
|
+
$(o(rt))
|
|
1272
1279
|
]),
|
|
1273
1280
|
_: 1
|
|
1274
1281
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -1278,35 +1285,35 @@ const be = /* @__PURE__ */ N({
|
|
|
1278
1285
|
]),
|
|
1279
1286
|
_: 2
|
|
1280
1287
|
}, 1032, ["class", "data-index", "data-testid"]))), 128))
|
|
1281
|
-
], 8,
|
|
1282
|
-
$(
|
|
1288
|
+
], 8, Ta),
|
|
1289
|
+
$(G, {
|
|
1283
1290
|
appearance: "tertiary",
|
|
1284
|
-
"aria-label": o(r)("actions.add_entity", { entity:
|
|
1291
|
+
"aria-label": o(r)("actions.add_entity", { entity: l.value }),
|
|
1285
1292
|
class: "ff-array-field-add-item-btn",
|
|
1286
1293
|
"data-testid": `ff-add-item-btn-${i.path.value}`,
|
|
1287
1294
|
onClick: C
|
|
1288
1295
|
}, {
|
|
1289
1296
|
default: q(() => [
|
|
1290
|
-
$(o(
|
|
1291
|
-
pe(" " + ce(o(r)("actions.add_entity", { entity:
|
|
1297
|
+
$(o(Ee)),
|
|
1298
|
+
pe(" " + ce(o(r)("actions.add_entity", { entity: l.value })), 1)
|
|
1292
1299
|
]),
|
|
1293
1300
|
_: 1
|
|
1294
1301
|
}, 8, ["aria-label", "data-testid"])
|
|
1295
|
-
], 64)) : u.value.length ? (_(), T(o(
|
|
1302
|
+
], 64)) : u.value.length ? (_(), T(o(je), {
|
|
1296
1303
|
key: 2,
|
|
1297
1304
|
"data-testid": `ff-array-tab-container-${i.path.value}`
|
|
1298
1305
|
}, {
|
|
1299
1306
|
default: q(() => [
|
|
1300
|
-
$(
|
|
1307
|
+
$(xe, {
|
|
1301
1308
|
modelValue: A.value,
|
|
1302
|
-
"onUpdate:modelValue": M[0] || (M[0] = (
|
|
1309
|
+
"onUpdate:modelValue": M[0] || (M[0] = (ue) => A.value = ue),
|
|
1303
1310
|
"data-testid": `ff-array-tabs-${i.path.value}`,
|
|
1304
1311
|
tabs: b.value
|
|
1305
1312
|
}, Y({ _: 2 }, [
|
|
1306
|
-
|
|
1307
|
-
name: o(f)(
|
|
1313
|
+
oe(u.value, (ue, O) => ({
|
|
1314
|
+
name: o(f)(ue, O),
|
|
1308
1315
|
fn: q(() => [
|
|
1309
|
-
|
|
1316
|
+
B("div", {
|
|
1310
1317
|
class: "ff-array-field-item",
|
|
1311
1318
|
"data-index": O,
|
|
1312
1319
|
"data-testid": `ff-array-item-${i.path.value}.${O}`
|
|
@@ -1316,28 +1323,28 @@ const be = /* @__PURE__ */ N({
|
|
|
1316
1323
|
autofocus: !0,
|
|
1317
1324
|
fieldName: String(O),
|
|
1318
1325
|
index: O
|
|
1319
|
-
}, void 0, !0) : (_(), T(
|
|
1326
|
+
}, void 0, !0) : (_(), T(he, {
|
|
1320
1327
|
key: 1,
|
|
1321
1328
|
autofocus: "",
|
|
1322
1329
|
name: String(O)
|
|
1323
1330
|
}, null, 8, ["name"]))
|
|
1324
|
-
], 8,
|
|
1331
|
+
], 8, Pa)
|
|
1325
1332
|
])
|
|
1326
1333
|
})),
|
|
1327
|
-
|
|
1328
|
-
name: `${o(f)(
|
|
1334
|
+
oe(u.value, (ue, O) => ({
|
|
1335
|
+
name: `${o(f)(ue, O)}-anchor`,
|
|
1329
1336
|
fn: q(() => [
|
|
1330
|
-
pe(ce(v(
|
|
1331
|
-
$(
|
|
1337
|
+
pe(ce(v(ue, O)) + " ", 1),
|
|
1338
|
+
$(G, {
|
|
1332
1339
|
appearance: "tertiary",
|
|
1333
|
-
"aria-label": o(r)("actions.remove_entity", { entity:
|
|
1340
|
+
"aria-label": o(r)("actions.remove_entity", { entity: l.value }),
|
|
1334
1341
|
class: "ff-array-field-item-remove",
|
|
1335
1342
|
"data-testid": `ff-array-remove-item-btn-${i.path.value}.${O}`,
|
|
1336
1343
|
icon: "",
|
|
1337
|
-
onClick:
|
|
1344
|
+
onClick: Ce((yt) => w(O), ["stop"])
|
|
1338
1345
|
}, {
|
|
1339
1346
|
default: q(() => [
|
|
1340
|
-
$(o(
|
|
1347
|
+
$(o(Ot))
|
|
1341
1348
|
]),
|
|
1342
1349
|
_: 1
|
|
1343
1350
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -1346,16 +1353,16 @@ const be = /* @__PURE__ */ N({
|
|
|
1346
1353
|
]), 1032, ["modelValue", "data-testid", "tabs"])
|
|
1347
1354
|
]),
|
|
1348
1355
|
_: 3
|
|
1349
|
-
}, 8, ["data-testid"])) :
|
|
1350
|
-
], 10,
|
|
1356
|
+
}, 8, ["data-testid"])) : N("", !0)
|
|
1357
|
+
], 10, wa)), [
|
|
1351
1358
|
[Q, !o(p)]
|
|
1352
1359
|
]);
|
|
1353
1360
|
};
|
|
1354
1361
|
}
|
|
1355
|
-
}),
|
|
1362
|
+
}), La = /* @__PURE__ */ W(Ia, [["__scopeId", "data-v-04b60981"]]), qa = /* @__PURE__ */ U({
|
|
1356
1363
|
__name: "SlideTransition",
|
|
1357
1364
|
setup(e) {
|
|
1358
|
-
const
|
|
1365
|
+
const s = [
|
|
1359
1366
|
"height",
|
|
1360
1367
|
"padding-top",
|
|
1361
1368
|
"padding-bottom",
|
|
@@ -1363,26 +1370,26 @@ const be = /* @__PURE__ */ N({
|
|
|
1363
1370
|
"margin-bottom",
|
|
1364
1371
|
"border-top-width",
|
|
1365
1372
|
"border-bottom-width"
|
|
1366
|
-
], t = Object.fromEntries(
|
|
1367
|
-
function r(
|
|
1368
|
-
const u = getComputedStyle(
|
|
1373
|
+
], t = Object.fromEntries(s.map((l) => [l, ""])), n = Object.fromEntries(s.map((l) => [l, "0"]));
|
|
1374
|
+
function r(l) {
|
|
1375
|
+
const u = getComputedStyle(l);
|
|
1369
1376
|
return Object.fromEntries(
|
|
1370
|
-
|
|
1377
|
+
s.map((f) => [f, u.getPropertyValue(f)])
|
|
1371
1378
|
);
|
|
1372
1379
|
}
|
|
1373
|
-
function a(
|
|
1374
|
-
["overflow", "transition", ...
|
|
1375
|
-
(u) =>
|
|
1380
|
+
function a(l) {
|
|
1381
|
+
["overflow", "transition", ...s].forEach(
|
|
1382
|
+
(u) => l.style.removeProperty(u)
|
|
1376
1383
|
);
|
|
1377
1384
|
}
|
|
1378
|
-
function
|
|
1379
|
-
Object.assign(
|
|
1385
|
+
function c(l) {
|
|
1386
|
+
Object.assign(l.style, {
|
|
1380
1387
|
overflow: "hidden",
|
|
1381
1388
|
transition: "none"
|
|
1382
1389
|
});
|
|
1383
1390
|
}
|
|
1384
|
-
function
|
|
1385
|
-
const u =
|
|
1391
|
+
function d(l) {
|
|
1392
|
+
const u = l;
|
|
1386
1393
|
Object.assign(u.style, t);
|
|
1387
1394
|
const f = r(u);
|
|
1388
1395
|
Object.assign(u.style, n), requestAnimationFrame(() => {
|
|
@@ -1392,60 +1399,60 @@ const be = /* @__PURE__ */ N({
|
|
|
1392
1399
|
});
|
|
1393
1400
|
});
|
|
1394
1401
|
}
|
|
1395
|
-
function p(
|
|
1396
|
-
a(
|
|
1402
|
+
function p(l) {
|
|
1403
|
+
a(l);
|
|
1397
1404
|
}
|
|
1398
|
-
function i(
|
|
1399
|
-
const u =
|
|
1405
|
+
function i(l) {
|
|
1406
|
+
const u = l;
|
|
1400
1407
|
Object.assign(u.style, {
|
|
1401
1408
|
...r(u),
|
|
1402
1409
|
overflow: "hidden"
|
|
1403
1410
|
});
|
|
1404
1411
|
}
|
|
1405
|
-
function m(
|
|
1406
|
-
Object.assign(
|
|
1412
|
+
function m(l) {
|
|
1413
|
+
Object.assign(l.style, n);
|
|
1407
1414
|
}
|
|
1408
|
-
function g(
|
|
1409
|
-
a(
|
|
1415
|
+
function g(l) {
|
|
1416
|
+
a(l);
|
|
1410
1417
|
}
|
|
1411
|
-
return (
|
|
1418
|
+
return (l, u) => (_(), T(wt, {
|
|
1412
1419
|
"enter-active-class": "ff-slide-active",
|
|
1413
1420
|
"leave-active-class": "ff-slide-active",
|
|
1414
1421
|
onAfterEnter: p,
|
|
1415
1422
|
onAfterLeave: g,
|
|
1416
|
-
onBeforeEnter:
|
|
1423
|
+
onBeforeEnter: c,
|
|
1417
1424
|
onBeforeLeave: i,
|
|
1418
|
-
onEnter:
|
|
1425
|
+
onEnter: d,
|
|
1419
1426
|
onLeave: m
|
|
1420
1427
|
}, {
|
|
1421
1428
|
default: q(() => [
|
|
1422
|
-
F(
|
|
1429
|
+
F(l.$slots, "default", {}, void 0, !0)
|
|
1423
1430
|
]),
|
|
1424
1431
|
_: 3
|
|
1425
1432
|
}));
|
|
1426
1433
|
}
|
|
1427
|
-
}),
|
|
1434
|
+
}), Ma = /* @__PURE__ */ W(qa, [["__scopeId", "data-v-4969409d"]]), xa = { class: "ff-entity-checks-list" }, Ra = /* @__PURE__ */ U({
|
|
1428
1435
|
__name: "EntityChecksAlert",
|
|
1429
1436
|
props: {
|
|
1430
1437
|
entityChecks: {},
|
|
1431
1438
|
visibleFields: {}
|
|
1432
1439
|
},
|
|
1433
1440
|
setup(e) {
|
|
1434
|
-
const { i18n: { t:
|
|
1441
|
+
const { i18n: { t: s } } = ye(), t = k(() => {
|
|
1435
1442
|
if (!Array.isArray(e.entityChecks) || e.entityChecks.length === 0)
|
|
1436
1443
|
return null;
|
|
1437
|
-
const a = [],
|
|
1444
|
+
const a = [], c = [
|
|
1438
1445
|
{ key: "at_least_one_of", i18nKey: "plugins.form.field_rules.at_least_one_of" },
|
|
1439
1446
|
{ key: "mutually_required", i18nKey: "plugins.form.field_rules.mutually_required" },
|
|
1440
1447
|
{ key: "mutually_exclusive", i18nKey: "plugins.form.field_rules.mutually_exclusive" }
|
|
1441
1448
|
];
|
|
1442
|
-
for (const
|
|
1443
|
-
for (const { key: p, i18nKey: i } of
|
|
1444
|
-
if (p in
|
|
1445
|
-
const m =
|
|
1449
|
+
for (const d of e.entityChecks)
|
|
1450
|
+
for (const { key: p, i18nKey: i } of c)
|
|
1451
|
+
if (p in d) {
|
|
1452
|
+
const m = d[p];
|
|
1446
1453
|
if (Array.isArray(m) && m.length > 0) {
|
|
1447
1454
|
const g = r(m);
|
|
1448
|
-
g.length > 0 && a.push(
|
|
1455
|
+
g.length > 0 && a.push(s(i, {
|
|
1449
1456
|
parameters: n(g)
|
|
1450
1457
|
}));
|
|
1451
1458
|
}
|
|
@@ -1457,30 +1464,30 @@ const be = /* @__PURE__ */ N({
|
|
|
1457
1464
|
return a.map(ft).join(", ");
|
|
1458
1465
|
}
|
|
1459
1466
|
function r(a) {
|
|
1460
|
-
return Array.isArray(e.visibleFields) ? a.filter((
|
|
1467
|
+
return Array.isArray(e.visibleFields) ? a.filter((c) => e.visibleFields.includes(c.split(".")[0])) : a;
|
|
1461
1468
|
}
|
|
1462
|
-
return (a,
|
|
1463
|
-
const
|
|
1464
|
-
return t.value ? (_(), T(
|
|
1469
|
+
return (a, c) => {
|
|
1470
|
+
const d = D("KAlert");
|
|
1471
|
+
return t.value ? (_(), T(d, {
|
|
1465
1472
|
key: 0,
|
|
1466
1473
|
"data-testid": "ff-entity-checks-alert"
|
|
1467
1474
|
}, {
|
|
1468
1475
|
default: q(() => [
|
|
1469
|
-
|
|
1470
|
-
(_(!0), K(
|
|
1476
|
+
B("ul", xa, [
|
|
1477
|
+
(_(!0), K(ee, null, oe(t.value, (p) => (_(), K("li", {
|
|
1471
1478
|
key: p,
|
|
1472
1479
|
"data-testid": "ff-entity-check-item"
|
|
1473
1480
|
}, ce(p), 1))), 128))
|
|
1474
1481
|
])
|
|
1475
1482
|
]),
|
|
1476
1483
|
_: 1
|
|
1477
|
-
})) :
|
|
1484
|
+
})) : N("", !0);
|
|
1478
1485
|
};
|
|
1479
1486
|
}
|
|
1480
|
-
}),
|
|
1487
|
+
}), Xe = /* @__PURE__ */ W(Ra, [["__scopeId", "data-v-374c59bc"]]), $a = ["data-testid"], Va = ["data-testid"], Ka = ["data-testid"], ja = { class: "ff-object-field-header-toggle" }, Ea = ["aria-controls", "aria-expanded", "aria-label", "data-testid", "disabled"], Oa = ["innerHTML"], Fa = ["data-testid"], Da = {
|
|
1481
1488
|
key: 0,
|
|
1482
1489
|
class: "indent-guide"
|
|
1483
|
-
},
|
|
1490
|
+
}, Ba = /* @__PURE__ */ U({
|
|
1484
1491
|
inheritAttrs: !1,
|
|
1485
1492
|
__name: "ObjectField",
|
|
1486
1493
|
props: /* @__PURE__ */ Ke({
|
|
@@ -1506,30 +1513,30 @@ const be = /* @__PURE__ */ N({
|
|
|
1506
1513
|
}),
|
|
1507
1514
|
emits: ["update:added", "update:expanded"],
|
|
1508
1515
|
setup(e) {
|
|
1509
|
-
const
|
|
1510
|
-
getSchema:
|
|
1511
|
-
getDefault:
|
|
1516
|
+
const s = kt(), t = se(e, ["defaultAdded", "collapsible", "omit", "required", "asChild", "resetLabelPath", "fieldsOrder"]), { value: n, hide: r, ...a } = Z(E(t, "name")), {
|
|
1517
|
+
getSchema: c,
|
|
1518
|
+
getDefault: d,
|
|
1512
1519
|
useCurrentRenderRules: p
|
|
1513
|
-
} =
|
|
1520
|
+
} = te(), i = p({
|
|
1514
1521
|
fieldPath: a.path,
|
|
1515
|
-
rules:
|
|
1516
|
-
omittedFields:
|
|
1522
|
+
rules: E(t, "renderRules"),
|
|
1523
|
+
omittedFields: E(() => e.omit),
|
|
1517
1524
|
parentValue: n
|
|
1518
|
-
}), m = Ve(e, "added"), g = Ve(e, "expanded"),
|
|
1525
|
+
}), m = Ve(e, "added"), g = Ve(e, "expanded"), l = k(() => {
|
|
1519
1526
|
if (a.ancestors?.value) {
|
|
1520
1527
|
const w = a.ancestors.value.parent;
|
|
1521
1528
|
if (w?.path)
|
|
1522
|
-
return
|
|
1529
|
+
return c(w.path)?.type === "array";
|
|
1523
1530
|
}
|
|
1524
1531
|
return !1;
|
|
1525
1532
|
}), u = k(() => {
|
|
1526
1533
|
if (a.ancestors?.value) {
|
|
1527
1534
|
const w = a.ancestors.value.parent;
|
|
1528
1535
|
if (w?.path)
|
|
1529
|
-
return
|
|
1536
|
+
return c(w.path)?.type === "map";
|
|
1530
1537
|
}
|
|
1531
1538
|
return !1;
|
|
1532
|
-
}), f =
|
|
1539
|
+
}), f = ae(a.path, { required: e.required, ...t, resetLabelPath: e.resetLabelPath }), h = k(() => f.value.required ? !0 : m.value ?? e.defaultAdded), y = k(() => e.asChild !== void 0 ? e.asChild : l.value), v = k(() => {
|
|
1533
1540
|
let w = a.schema.value.fields;
|
|
1534
1541
|
return e.omit && (w = w.filter((S) => !e.omit.includes(Object.keys(S)[0]))), e.fieldsOrder ? lt(w, e.fieldsOrder) : (i.value?.bundles && (w = ut([...w], i.value.bundles)), w);
|
|
1535
1542
|
}), b = k(() => v.value.map((w) => Object.keys(w)[0]));
|
|
@@ -1537,7 +1544,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1537
1544
|
g.value = !g.value;
|
|
1538
1545
|
}
|
|
1539
1546
|
function C() {
|
|
1540
|
-
m.value ? n.value =
|
|
1547
|
+
m.value ? n.value = d(a.path.value) : n.value = null;
|
|
1541
1548
|
}
|
|
1542
1549
|
return J(h, (w) => {
|
|
1543
1550
|
e.collapsible && (g.value = w);
|
|
@@ -1546,59 +1553,59 @@ const be = /* @__PURE__ */ N({
|
|
|
1546
1553
|
const w = n.value != null;
|
|
1547
1554
|
m.value = w, (f.value.required || w) && (g.value = !0);
|
|
1548
1555
|
}), (w, S) => {
|
|
1549
|
-
const
|
|
1550
|
-
return _(), K(
|
|
1551
|
-
(_(), T(
|
|
1552
|
-
a.error ? (_(), T(
|
|
1556
|
+
const I = D("KAlert"), R = D("KInputSwitch");
|
|
1557
|
+
return _(), K(ee, null, [
|
|
1558
|
+
(_(), T(ne(w.$slots[o(ke)]))),
|
|
1559
|
+
a.error ? (_(), T(I, {
|
|
1553
1560
|
key: 0,
|
|
1554
1561
|
appearance: "danger",
|
|
1555
1562
|
message: a.error.message
|
|
1556
|
-
}, null, 8, ["message"])) : y.value ? X((_(), K("div",
|
|
1563
|
+
}, null, 8, ["message"])) : y.value ? X((_(), K("div", z({
|
|
1557
1564
|
key: 1,
|
|
1558
1565
|
class: "ff-object-field ff-object-field-as-child"
|
|
1559
1566
|
}, w.$attrs, {
|
|
1560
1567
|
"data-testid": `ff-object-${a.path.value}`
|
|
1561
1568
|
}), [
|
|
1562
1569
|
F(w.$slots, "default", {}, () => [
|
|
1563
|
-
$(
|
|
1570
|
+
$(Xe, {
|
|
1564
1571
|
"entity-checks": a.schema.value?.entity_checks,
|
|
1565
1572
|
"visible-fields": b.value
|
|
1566
1573
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1567
|
-
(_(!0), K(
|
|
1568
|
-
key: Object.keys(
|
|
1569
|
-
name: Object.keys(
|
|
1574
|
+
(_(!0), K(ee, null, oe(v.value, (j) => (_(), T(he, {
|
|
1575
|
+
key: Object.keys(j)[0],
|
|
1576
|
+
name: Object.keys(j)[0]
|
|
1570
1577
|
}, null, 8, ["name"]))), 128))
|
|
1571
1578
|
], !0)
|
|
1572
|
-
], 16,
|
|
1579
|
+
], 16, $a)), [
|
|
1573
1580
|
[Q, !o(r)]
|
|
1574
|
-
]) : X((_(), K("div",
|
|
1581
|
+
]) : X((_(), K("div", z({
|
|
1575
1582
|
key: 2,
|
|
1576
1583
|
class: ["ff-object-field", { "ff-object-field-collapsed": !g.value }],
|
|
1577
1584
|
"data-testid": `ff-object-${a.path.value}`
|
|
1578
1585
|
}, w.$attrs), [
|
|
1579
|
-
|
|
1586
|
+
B("header", {
|
|
1580
1587
|
class: "ff-object-field-header",
|
|
1581
1588
|
"data-testid": `ff-object-header-${a.path.value}`
|
|
1582
1589
|
}, [
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
"aria-controls": o(
|
|
1590
|
+
B("div", ja, [
|
|
1591
|
+
B("button", {
|
|
1592
|
+
"aria-controls": o(s),
|
|
1586
1593
|
"aria-expanded": g.value,
|
|
1587
1594
|
"aria-label": o(f).label,
|
|
1588
1595
|
class: "ff-object-field-toggle-btn",
|
|
1589
1596
|
"data-testid": `ff-object-toggle-btn-${a.path.value}`,
|
|
1590
1597
|
disabled: !m.value,
|
|
1591
1598
|
type: "button",
|
|
1592
|
-
onClick:
|
|
1599
|
+
onClick: Ce(A, ["prevent", "stop"])
|
|
1593
1600
|
}, [
|
|
1594
|
-
$(o(
|
|
1595
|
-
class:
|
|
1601
|
+
$(o(Ft), {
|
|
1602
|
+
class: Te(["ff-object-field-toggle-btn-trigger-icon", { "collapse-expanded": g.value }]),
|
|
1596
1603
|
"data-testid": `ff-object-toggle-trigger-icon-${a.path.value}`,
|
|
1597
1604
|
decorative: "",
|
|
1598
|
-
size: `var(--kui-icon-size-30, ${o(
|
|
1605
|
+
size: `var(--kui-icon-size-30, ${o(Dt)})`
|
|
1599
1606
|
}, null, 8, ["class", "data-testid", "size"])
|
|
1600
1607
|
], 8, Ea),
|
|
1601
|
-
u.value ?
|
|
1608
|
+
u.value ? N("", !0) : (_(), T(o(Vt), z({
|
|
1602
1609
|
key: 0,
|
|
1603
1610
|
class: "ff-object-field-label",
|
|
1604
1611
|
"data-testid": `ff-label-${a.path.value}`
|
|
@@ -1617,26 +1624,26 @@ const be = /* @__PURE__ */ N({
|
|
|
1617
1624
|
name: "tooltip",
|
|
1618
1625
|
fn: q(() => [
|
|
1619
1626
|
F(w.$slots, "tooltip", {}, () => [
|
|
1620
|
-
|
|
1627
|
+
B("div", {
|
|
1621
1628
|
innerHTML: o(f).labelAttributes.info
|
|
1622
|
-
}, null, 8,
|
|
1629
|
+
}, null, 8, Oa)
|
|
1623
1630
|
], !0)
|
|
1624
1631
|
]),
|
|
1625
1632
|
key: "0"
|
|
1626
1633
|
} : void 0
|
|
1627
1634
|
]), 1040, ["data-testid", "tooltip-attributes"]))
|
|
1628
1635
|
]),
|
|
1629
|
-
o(f).required ?
|
|
1636
|
+
o(f).required ? N("", !0) : (_(), T(R, {
|
|
1630
1637
|
key: 0,
|
|
1631
1638
|
modelValue: m.value,
|
|
1632
1639
|
"onUpdate:modelValue": [
|
|
1633
|
-
S[0] || (S[0] = (
|
|
1640
|
+
S[0] || (S[0] = (j) => m.value = j),
|
|
1634
1641
|
C
|
|
1635
1642
|
],
|
|
1636
1643
|
"data-testid": `ff-object-switch-${a.path.value}`
|
|
1637
1644
|
}, null, 8, ["modelValue", "data-testid"]))
|
|
1638
|
-
], 8,
|
|
1639
|
-
$(
|
|
1645
|
+
], 8, Ka),
|
|
1646
|
+
$(Ma, null, {
|
|
1640
1647
|
default: q(() => [
|
|
1641
1648
|
g.value ? (_(), K("div", {
|
|
1642
1649
|
key: 0,
|
|
@@ -1644,30 +1651,30 @@ const be = /* @__PURE__ */ N({
|
|
|
1644
1651
|
"data-testid": `ff-object-content-${a.path.value}`
|
|
1645
1652
|
}, [
|
|
1646
1653
|
F(w.$slots, "default", {}, () => [
|
|
1647
|
-
$(
|
|
1654
|
+
$(Xe, {
|
|
1648
1655
|
"entity-checks": a.schema.value?.entity_checks,
|
|
1649
1656
|
"visible-fields": b.value
|
|
1650
1657
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1651
|
-
(_(!0), K(
|
|
1652
|
-
key: Object.keys(
|
|
1653
|
-
name: Object.keys(
|
|
1658
|
+
(_(!0), K(ee, null, oe(v.value, (j) => (_(), T(he, {
|
|
1659
|
+
key: Object.keys(j)[0],
|
|
1660
|
+
name: Object.keys(j)[0]
|
|
1654
1661
|
}, null, 8, ["name"]))), 128))
|
|
1655
1662
|
], !0)
|
|
1656
|
-
], 8,
|
|
1663
|
+
], 8, Fa)) : N("", !0)
|
|
1657
1664
|
]),
|
|
1658
1665
|
_: 3
|
|
1659
1666
|
}),
|
|
1660
|
-
g.value ? (_(), K("div",
|
|
1661
|
-
], 16,
|
|
1667
|
+
g.value ? (_(), K("div", Da)) : N("", !0)
|
|
1668
|
+
], 16, Va)), [
|
|
1662
1669
|
[Q, !o(r)]
|
|
1663
1670
|
])
|
|
1664
1671
|
], 64);
|
|
1665
1672
|
};
|
|
1666
1673
|
}
|
|
1667
|
-
}),
|
|
1674
|
+
}), Ua = /* @__PURE__ */ W(Ba, [["__scopeId", "data-v-7a5e2610"]]), Na = {
|
|
1668
1675
|
key: 1,
|
|
1669
1676
|
class: "ff-number-field-wrapper"
|
|
1670
|
-
},
|
|
1677
|
+
}, za = ["innerHTML"], Ha = /* @__PURE__ */ U({
|
|
1671
1678
|
__name: "NumberField",
|
|
1672
1679
|
props: {
|
|
1673
1680
|
showVaultSecretPicker: { type: Boolean, default: () => {
|
|
@@ -1688,8 +1695,8 @@ const be = /* @__PURE__ */ N({
|
|
|
1688
1695
|
name: {}
|
|
1689
1696
|
},
|
|
1690
1697
|
emits: ["update:modelValue"],
|
|
1691
|
-
setup(e, { emit:
|
|
1692
|
-
const t =
|
|
1698
|
+
setup(e, { emit: s }) {
|
|
1699
|
+
const t = se(e, ["autofocus", "showVaultSecretPicker", "name"]), { value: n, hide: r, ...a } = Z(E(() => e.name)), c = ae(a.path, t), { i18n: d } = ye(), p = k(() => {
|
|
1693
1700
|
const b = a.schema?.value;
|
|
1694
1701
|
if (typeof b.gt == "number")
|
|
1695
1702
|
return { min: b.type === "integer" ? b.gt + 1 : b.gt };
|
|
@@ -1698,14 +1705,14 @@ const be = /* @__PURE__ */ N({
|
|
|
1698
1705
|
min: t.min ?? A,
|
|
1699
1706
|
max: t.max ?? C
|
|
1700
1707
|
};
|
|
1701
|
-
}), i =
|
|
1708
|
+
}), i = s, m = n.value, g = k(() => {
|
|
1702
1709
|
const b = n?.value;
|
|
1703
1710
|
if (b == null || b === "") return "";
|
|
1704
1711
|
if (y.value) return `${b}`;
|
|
1705
1712
|
const A = typeof b == "number" ? b : Number(b);
|
|
1706
1713
|
return Number.isFinite(A) ? `${A}` : "";
|
|
1707
1714
|
});
|
|
1708
|
-
function
|
|
1715
|
+
function l(b) {
|
|
1709
1716
|
const A = u(b);
|
|
1710
1717
|
m !== void 0 && b === "" && A !== m ? (n.value = null, i("update:modelValue", null)) : (n.value = A, i("update:modelValue", A));
|
|
1711
1718
|
}
|
|
@@ -1716,16 +1723,16 @@ const be = /* @__PURE__ */ N({
|
|
|
1716
1723
|
const C = Number(A);
|
|
1717
1724
|
return Number.isFinite(C) ? C : y.value ? b : null;
|
|
1718
1725
|
}
|
|
1719
|
-
const f =
|
|
1726
|
+
const f = we(nt, void 0), h = k(() => ({ referenceable: y.value })), y = k(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!a.schema.value?.referenceable), v = k(() => y.value ? "text" : "number");
|
|
1720
1727
|
return (b, A) => {
|
|
1721
1728
|
const C = D("KAlert");
|
|
1722
1729
|
return a.error ? (_(), T(C, {
|
|
1723
1730
|
key: 0,
|
|
1724
1731
|
appearance: "danger",
|
|
1725
1732
|
message: a.error.message
|
|
1726
|
-
}, null, 8, ["message"])) : X((_(), K("div",
|
|
1727
|
-
$(
|
|
1728
|
-
...o(
|
|
1733
|
+
}, null, 8, ["message"])) : X((_(), K("div", Na, [
|
|
1734
|
+
$(ve, z({ class: "ff-number-field" }, {
|
|
1735
|
+
...o(c),
|
|
1729
1736
|
min: p.value.min,
|
|
1730
1737
|
max: p.value.max
|
|
1731
1738
|
}, {
|
|
@@ -1733,38 +1740,38 @@ const be = /* @__PURE__ */ N({
|
|
|
1733
1740
|
"data-testid": `ff-${a.path.value}`,
|
|
1734
1741
|
"model-value": g.value,
|
|
1735
1742
|
type: v.value,
|
|
1736
|
-
"onUpdate:modelValue":
|
|
1743
|
+
"onUpdate:modelValue": l
|
|
1737
1744
|
}), Y({ _: 2 }, [
|
|
1738
|
-
o(
|
|
1745
|
+
o(c).labelAttributes?.info ? {
|
|
1739
1746
|
name: "label-tooltip",
|
|
1740
1747
|
fn: q(() => [
|
|
1741
1748
|
F(b.$slots, "tooltip", {}, () => [
|
|
1742
|
-
|
|
1743
|
-
innerHTML: o(
|
|
1744
|
-
}, null, 8,
|
|
1749
|
+
B("div", {
|
|
1750
|
+
innerHTML: o(c).labelAttributes.info
|
|
1751
|
+
}, null, 8, za)
|
|
1745
1752
|
], !0)
|
|
1746
1753
|
]),
|
|
1747
1754
|
key: "0"
|
|
1748
1755
|
} : void 0
|
|
1749
1756
|
]), 1040, ["data-autofocus", "data-testid", "model-value", "type"]),
|
|
1750
|
-
o(f) && y.value ? (_(), T(
|
|
1757
|
+
o(f) && y.value ? (_(), T(ne(o(f)), {
|
|
1751
1758
|
key: 0,
|
|
1752
1759
|
schema: h.value,
|
|
1753
|
-
update:
|
|
1760
|
+
update: l,
|
|
1754
1761
|
value: o(n) ?? ""
|
|
1755
|
-
}, null, 8, ["schema", "value"])) :
|
|
1762
|
+
}, null, 8, ["schema", "value"])) : N("", !0),
|
|
1756
1763
|
y.value && !o(f) ? (_(), T(C, {
|
|
1757
1764
|
key: 1,
|
|
1758
1765
|
appearance: "warning",
|
|
1759
1766
|
"data-testid": `ff-vault-secret-picker-warning-${a.path.value}`,
|
|
1760
|
-
message: o(
|
|
1761
|
-
}, null, 8, ["data-testid", "message"])) :
|
|
1767
|
+
message: o(d).t("plugins.free-form.vault_picker.component_error")
|
|
1768
|
+
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
1762
1769
|
], 512)), [
|
|
1763
1770
|
[Q, !o(r)]
|
|
1764
1771
|
]);
|
|
1765
1772
|
};
|
|
1766
1773
|
}
|
|
1767
|
-
}),
|
|
1774
|
+
}), Wa = /* @__PURE__ */ W(Ha, [["__scopeId", "data-v-f303431f"]]), Ga = ["innerHTML"], Ja = /* @__PURE__ */ U({
|
|
1768
1775
|
__name: "EnumField",
|
|
1769
1776
|
props: /* @__PURE__ */ Ke({
|
|
1770
1777
|
labelAttributes: {},
|
|
@@ -1801,27 +1808,27 @@ const be = /* @__PURE__ */ N({
|
|
|
1801
1808
|
modelModifiers: {}
|
|
1802
1809
|
}),
|
|
1803
1810
|
emits: /* @__PURE__ */ Ke(["update"], ["update:modelValue"]),
|
|
1804
|
-
setup(e, { emit:
|
|
1805
|
-
const t =
|
|
1806
|
-
|
|
1807
|
-
), p =
|
|
1811
|
+
setup(e, { emit: s }) {
|
|
1812
|
+
const t = s, n = se(e, ["name", "items", "multiple", "autofocus"]), { getSelectItems: r } = te(), { value: a, hide: c, ...d } = Z(
|
|
1813
|
+
E(() => e.name)
|
|
1814
|
+
), p = ae(d.path, n);
|
|
1808
1815
|
function i(f) {
|
|
1809
|
-
return
|
|
1816
|
+
return l.value && Array.isArray(f) && f.length === 0 && !p.value.required ? null : f;
|
|
1810
1817
|
}
|
|
1811
1818
|
const m = Ve(e, "modelValue", {
|
|
1812
1819
|
// If multiple and value is null/undefined, return empty array for v-model
|
|
1813
|
-
get: () =>
|
|
1820
|
+
get: () => l.value && a?.value == null ? [] : a.value,
|
|
1814
1821
|
set: (f) => {
|
|
1815
1822
|
a.value = i(f);
|
|
1816
1823
|
}
|
|
1817
|
-
}), g = k(() => e.items ? e.items :
|
|
1824
|
+
}), g = k(() => e.items ? e.items : d.path ? r(d.path.value) : []), l = k(() => e.multiple !== void 0 ? e.multiple : d.schema.value?.type === "set"), u = k(() => l.value ? Kt : jt);
|
|
1818
1825
|
return (f, h) => {
|
|
1819
1826
|
const y = D("KAlert");
|
|
1820
|
-
return
|
|
1827
|
+
return d.error ? (_(), T(y, {
|
|
1821
1828
|
key: 0,
|
|
1822
1829
|
appearance: "danger",
|
|
1823
|
-
message:
|
|
1824
|
-
}, null, 8, ["message"])) : X((_(), T(o(u),
|
|
1830
|
+
message: d.error.message
|
|
1831
|
+
}, null, 8, ["message"])) : X((_(), T(o(u), z({ key: 1 }, { ...n, ...o(p) }, {
|
|
1825
1832
|
modelValue: m.value,
|
|
1826
1833
|
"onUpdate:modelValue": [
|
|
1827
1834
|
h[0] || (h[0] = (v) => m.value = v),
|
|
@@ -1830,17 +1837,17 @@ const be = /* @__PURE__ */ N({
|
|
|
1830
1837
|
class: "ff-enum-field",
|
|
1831
1838
|
clearable: !o(p).required,
|
|
1832
1839
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1833
|
-
"data-testid": `ff-${
|
|
1840
|
+
"data-testid": `ff-${d.path.value}`,
|
|
1834
1841
|
items: g.value,
|
|
1835
|
-
"kpop-attributes": { "data-testid": `ff-enum-${
|
|
1842
|
+
"kpop-attributes": { "data-testid": `ff-enum-${d.path.value}-items` }
|
|
1836
1843
|
}), Y({ _: 2 }, [
|
|
1837
1844
|
"tooltip" in f.$slots || o(p).labelAttributes?.info ? {
|
|
1838
1845
|
name: "label-tooltip",
|
|
1839
1846
|
fn: q(() => [
|
|
1840
1847
|
F(f.$slots, "tooltip", {}, () => [
|
|
1841
|
-
|
|
1848
|
+
B("div", {
|
|
1842
1849
|
innerHTML: o(p).labelAttributes.info
|
|
1843
|
-
}, null, 8,
|
|
1850
|
+
}, null, 8, Ga)
|
|
1844
1851
|
], !0)
|
|
1845
1852
|
]),
|
|
1846
1853
|
key: "0"
|
|
@@ -1848,16 +1855,16 @@ const be = /* @__PURE__ */ N({
|
|
|
1848
1855
|
f.$slots["item-label"] ? {
|
|
1849
1856
|
name: "item-template",
|
|
1850
1857
|
fn: q(({ item: v }) => [
|
|
1851
|
-
F(f.$slots, "item-label", Be(
|
|
1858
|
+
F(f.$slots, "item-label", Be(et(v)), void 0, !0)
|
|
1852
1859
|
]),
|
|
1853
1860
|
key: "1"
|
|
1854
1861
|
} : void 0
|
|
1855
1862
|
]), 1040, ["modelValue", "clearable", "data-autofocus", "data-testid", "items", "kpop-attributes"])), [
|
|
1856
|
-
[Q, !o(
|
|
1863
|
+
[Q, !o(c)]
|
|
1857
1864
|
]);
|
|
1858
1865
|
};
|
|
1859
1866
|
}
|
|
1860
|
-
}),
|
|
1867
|
+
}), Se = /* @__PURE__ */ W(Ja, [["__scopeId", "data-v-b283cc11"]]), Ya = ["data-testid"], Xa = ["innerHTML"], Qa = /* @__PURE__ */ U({
|
|
1861
1868
|
inheritAttrs: !1,
|
|
1862
1869
|
__name: "JsonField",
|
|
1863
1870
|
props: {
|
|
@@ -1866,45 +1873,45 @@ const be = /* @__PURE__ */ N({
|
|
|
1866
1873
|
name: {}
|
|
1867
1874
|
},
|
|
1868
1875
|
emits: ["update:modelValue"],
|
|
1869
|
-
setup(e, { emit:
|
|
1870
|
-
const t =
|
|
1871
|
-
function m(
|
|
1872
|
-
i.value =
|
|
1873
|
-
let u =
|
|
1876
|
+
setup(e, { emit: s }) {
|
|
1877
|
+
const t = ge(), n = se(e, ["autofocus", "name"]), r = s, { value: a, hide: c, ...d } = Z(E(() => e.name)), p = ae(d.path, E({ ...n, ...t })), i = re("");
|
|
1878
|
+
function m(l) {
|
|
1879
|
+
i.value = l;
|
|
1880
|
+
let u = l || null;
|
|
1874
1881
|
try {
|
|
1875
|
-
const f = JSON.parse(
|
|
1882
|
+
const f = JSON.parse(l);
|
|
1876
1883
|
f && typeof f == "object" && (u = f);
|
|
1877
1884
|
} catch {
|
|
1878
1885
|
}
|
|
1879
1886
|
a.value = u, r("update:modelValue", u);
|
|
1880
1887
|
}
|
|
1881
1888
|
const g = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1882
|
-
return J(a, (
|
|
1883
|
-
if (
|
|
1889
|
+
return J(a, (l) => {
|
|
1890
|
+
if (l && typeof l == "object") {
|
|
1884
1891
|
try {
|
|
1885
1892
|
const u = JSON.parse(i.value);
|
|
1886
|
-
|
|
1893
|
+
fe(u, l) || (i.value = JSON.stringify(l, null, 2));
|
|
1887
1894
|
} catch {
|
|
1888
|
-
i.value = JSON.stringify(
|
|
1895
|
+
i.value = JSON.stringify(l, null, 2);
|
|
1889
1896
|
}
|
|
1890
1897
|
return;
|
|
1891
1898
|
}
|
|
1892
|
-
i.value =
|
|
1893
|
-
}, { immediate: !0 }), (
|
|
1899
|
+
i.value = l || "";
|
|
1900
|
+
}, { immediate: !0 }), (l, u) => {
|
|
1894
1901
|
const f = D("KAlert");
|
|
1895
|
-
return
|
|
1902
|
+
return d.error ? (_(), T(f, {
|
|
1896
1903
|
key: 0,
|
|
1897
1904
|
appearance: "danger",
|
|
1898
|
-
message:
|
|
1905
|
+
message: d.error.message
|
|
1899
1906
|
}, null, 8, ["message"])) : X((_(), K("div", {
|
|
1900
1907
|
key: 1,
|
|
1901
|
-
"data-testid": `ff-json-${
|
|
1908
|
+
"data-testid": `ff-json-${d.path.value}`
|
|
1902
1909
|
}, [
|
|
1903
|
-
$(
|
|
1910
|
+
$(ve, z(o(p), {
|
|
1904
1911
|
class: "ff-json-field",
|
|
1905
1912
|
"data-1p-ignore": g.value,
|
|
1906
1913
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1907
|
-
"data-testid": `ff-${
|
|
1914
|
+
"data-testid": `ff-${d.path.value}`,
|
|
1908
1915
|
"model-value": i.value ?? "",
|
|
1909
1916
|
multiline: "",
|
|
1910
1917
|
"onUpdate:modelValue": m
|
|
@@ -1912,21 +1919,21 @@ const be = /* @__PURE__ */ N({
|
|
|
1912
1919
|
o(p).labelAttributes?.info ? {
|
|
1913
1920
|
name: "label-tooltip",
|
|
1914
1921
|
fn: q(() => [
|
|
1915
|
-
F(
|
|
1916
|
-
|
|
1922
|
+
F(l.$slots, "tooltip", {}, () => [
|
|
1923
|
+
B("div", {
|
|
1917
1924
|
innerHTML: o(p).labelAttributes.info
|
|
1918
|
-
}, null, 8,
|
|
1925
|
+
}, null, 8, Xa)
|
|
1919
1926
|
], !0)
|
|
1920
1927
|
]),
|
|
1921
1928
|
key: "0"
|
|
1922
1929
|
} : void 0
|
|
1923
1930
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "model-value"])
|
|
1924
|
-
], 8,
|
|
1925
|
-
[Q, !o(
|
|
1931
|
+
], 8, Ya)), [
|
|
1932
|
+
[Q, !o(c)]
|
|
1926
1933
|
]);
|
|
1927
1934
|
};
|
|
1928
1935
|
}
|
|
1929
|
-
}),
|
|
1936
|
+
}), Za = /* @__PURE__ */ W(Qa, [["__scopeId", "data-v-6f302da9"]]), en = ["innerHTML"], tn = /* @__PURE__ */ U({
|
|
1930
1937
|
inheritAttrs: !1,
|
|
1931
1938
|
__name: "ForeignField",
|
|
1932
1939
|
props: {
|
|
@@ -1944,16 +1951,16 @@ const be = /* @__PURE__ */ N({
|
|
|
1944
1951
|
name: {}
|
|
1945
1952
|
},
|
|
1946
1953
|
emits: ["update:modelValue"],
|
|
1947
|
-
setup(e, { emit:
|
|
1948
|
-
const t =
|
|
1954
|
+
setup(e, { emit: s }) {
|
|
1955
|
+
const t = ge(), { i18n: { t: n } } = ye(), r = se(e, ["autofocus", "name"]), a = s, { value: c, hide: d, ...p } = Z(E(() => e.name));
|
|
1949
1956
|
if (p.error)
|
|
1950
1957
|
throw new Error(p.error.message);
|
|
1951
|
-
const i =
|
|
1958
|
+
const i = ae(p.path, E({ ...r, ...t })), m = c.value ? c.value.id : null, g = k(() => i.value.placeholder ? i.value.placeholder : n("plugins.free-form.foreign_placeholder", { entity: p.schema.value?.reference ?? "entity" })), l = re(m ?? "");
|
|
1952
1959
|
function u(h) {
|
|
1953
|
-
m !== void 0 && h === "" && h !== m ? (
|
|
1960
|
+
m !== void 0 && h === "" && h !== m ? (c.value = null, a("update:modelValue", null)) : (c.value = { id: h.trim() }, a("update:modelValue", c.value));
|
|
1954
1961
|
}
|
|
1955
1962
|
const f = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1956
|
-
return (h, y) => X((_(), T(
|
|
1963
|
+
return (h, y) => X((_(), T(ve, z(o(i), {
|
|
1957
1964
|
class: "ff-foreign-field",
|
|
1958
1965
|
"data-1p-ignore": f.value,
|
|
1959
1966
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
@@ -1961,7 +1968,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1961
1968
|
error: e.error,
|
|
1962
1969
|
"error-message": e.errorMessage,
|
|
1963
1970
|
help: e.help,
|
|
1964
|
-
"model-value":
|
|
1971
|
+
"model-value": l.value,
|
|
1965
1972
|
placeholder: g.value,
|
|
1966
1973
|
"onUpdate:modelValue": u
|
|
1967
1974
|
}), Y({ _: 2 }, [
|
|
@@ -1969,18 +1976,18 @@ const be = /* @__PURE__ */ N({
|
|
|
1969
1976
|
name: "label-tooltip",
|
|
1970
1977
|
fn: q(() => [
|
|
1971
1978
|
F(h.$slots, "tooltip", {}, () => [
|
|
1972
|
-
|
|
1979
|
+
B("div", {
|
|
1973
1980
|
innerHTML: o(i).labelAttributes.info
|
|
1974
|
-
}, null, 8,
|
|
1981
|
+
}, null, 8, en)
|
|
1975
1982
|
], !0)
|
|
1976
1983
|
]),
|
|
1977
1984
|
key: "0"
|
|
1978
1985
|
} : void 0
|
|
1979
1986
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "error", "error-message", "help", "model-value", "placeholder"])), [
|
|
1980
|
-
[Q, !o(
|
|
1987
|
+
[Q, !o(d)]
|
|
1981
1988
|
]);
|
|
1982
1989
|
}
|
|
1983
|
-
}),
|
|
1990
|
+
}), an = /* @__PURE__ */ W(tn, [["__scopeId", "data-v-8c298e9f"]]), nn = ["data-testid"], on = ["data-testid"], rn = ["innerHTML"], sn = { class: "ff-map-field-fields" }, ln = /* @__PURE__ */ U({
|
|
1984
1991
|
__name: "MapField",
|
|
1985
1992
|
props: {
|
|
1986
1993
|
keyPlaceholder: {},
|
|
@@ -1991,32 +1998,32 @@ const be = /* @__PURE__ */ N({
|
|
|
1991
1998
|
labelAttributes: {}
|
|
1992
1999
|
},
|
|
1993
2000
|
emits: ["legacyValueChange"],
|
|
1994
|
-
setup(e, { emit:
|
|
1995
|
-
const { i18n: t } =
|
|
2001
|
+
setup(e, { emit: s }) {
|
|
2002
|
+
const { i18n: t } = ye(), n = e, r = s, {
|
|
1996
2003
|
keys: a,
|
|
1997
|
-
updateKey:
|
|
1998
|
-
addKey:
|
|
2004
|
+
updateKey: c,
|
|
2005
|
+
addKey: d,
|
|
1999
2006
|
removeKey: p,
|
|
2000
2007
|
field: i,
|
|
2001
2008
|
fieldDisplayName: m
|
|
2002
|
-
} =
|
|
2003
|
-
function b(S,
|
|
2004
|
-
n.appearance?.string?.multiline || (S.preventDefault(),
|
|
2009
|
+
} = ca(E(n, "name"), w), g = ae(i.path, n), l = ["string", "number", "boolean", "integer", "foreign"], u = k(() => n.oneLine ? !0 : i.schema?.value?.type === "map" && l.includes(i.schema.value.values.type) && !n.appearance?.string?.multiline), f = k(() => i.schema?.value?.type === "map" ? i.schema.value.values : void 0), h = k(() => f.value?.type === "string" && !f.value?.one_of), y = k(() => u.value ? "div" : je), v = tt("root");
|
|
2010
|
+
function b(S, I) {
|
|
2011
|
+
n.appearance?.string?.multiline || (S.preventDefault(), I === a.value.length - 1 && d(), A(I + 1));
|
|
2005
2012
|
}
|
|
2006
2013
|
async function A(S) {
|
|
2007
2014
|
v.value && (await $e(), v.value.querySelector(`[data-key-input="${S}"]`)?.focus());
|
|
2008
2015
|
}
|
|
2009
2016
|
function C() {
|
|
2010
|
-
|
|
2011
|
-
const S = a.value.findIndex(([
|
|
2017
|
+
d();
|
|
2018
|
+
const S = a.value.findIndex(([I, R]) => !R);
|
|
2012
2019
|
A(S === -1 ? a.value.length - 1 : S);
|
|
2013
2020
|
}
|
|
2014
2021
|
function w(S) {
|
|
2015
2022
|
r("legacyValueChange", S);
|
|
2016
2023
|
}
|
|
2017
|
-
return (S,
|
|
2018
|
-
const
|
|
2019
|
-
return o(i).error ? (_(), T(
|
|
2024
|
+
return (S, I) => {
|
|
2025
|
+
const R = D("KAlert"), j = D("KLabel"), L = D("KButton"), M = D("KTooltip");
|
|
2026
|
+
return o(i).error ? (_(), T(R, {
|
|
2020
2027
|
key: 0,
|
|
2021
2028
|
appearance: "danger",
|
|
2022
2029
|
message: o(i).error.message
|
|
@@ -2032,7 +2039,7 @@ const be = /* @__PURE__ */ N({
|
|
|
2032
2039
|
class: "ff-map-field-header",
|
|
2033
2040
|
"data-testid": `ff-map-header-${o(i).path.value}`
|
|
2034
2041
|
}, [
|
|
2035
|
-
$(
|
|
2042
|
+
$(j, z({ class: "ff-map-field-label" }, o(g).labelAttributes, {
|
|
2036
2043
|
"data-testid": `ff-label-${o(i).path.value}`,
|
|
2037
2044
|
required: o(g).required,
|
|
2038
2045
|
"tooltip-attributes": o(g).labelAttributes.tooltipAttributes
|
|
@@ -2046,44 +2053,44 @@ const be = /* @__PURE__ */ N({
|
|
|
2046
2053
|
name: "tooltip",
|
|
2047
2054
|
fn: q(() => [
|
|
2048
2055
|
F(S.$slots, "tooltip", {}, () => [
|
|
2049
|
-
|
|
2056
|
+
B("div", {
|
|
2050
2057
|
innerHTML: o(g).labelAttributes.info
|
|
2051
|
-
}, null, 8,
|
|
2058
|
+
}, null, 8, rn)
|
|
2052
2059
|
], !0)
|
|
2053
2060
|
]),
|
|
2054
2061
|
key: "0"
|
|
2055
2062
|
} : void 0
|
|
2056
2063
|
]), 1040, ["data-testid", "required", "tooltip-attributes"])
|
|
2057
|
-
], 8,
|
|
2058
|
-
(_(!0), K(
|
|
2059
|
-
key:
|
|
2060
|
-
class:
|
|
2064
|
+
], 8, on)) : N("", !0),
|
|
2065
|
+
(_(!0), K(ee, null, oe(o(a), ([P, H], G) => (_(), T(ne(y.value), {
|
|
2066
|
+
key: P,
|
|
2067
|
+
class: Te(["ff-map-field-item", {
|
|
2061
2068
|
"ff-map-field-item-simple": u.value,
|
|
2062
2069
|
"ff-map-field-item-complex": !u.value
|
|
2063
2070
|
}]),
|
|
2064
|
-
"data-testid": `ff-map-container-${o(i).path.value}.${
|
|
2071
|
+
"data-testid": `ff-map-container-${o(i).path.value}.${G}`
|
|
2065
2072
|
}, {
|
|
2066
2073
|
default: q(() => [
|
|
2067
|
-
|
|
2068
|
-
$(
|
|
2074
|
+
B("div", sn, [
|
|
2075
|
+
$(ve, {
|
|
2069
2076
|
class: "ff-map-field-fields-key",
|
|
2070
|
-
"data-key-input":
|
|
2071
|
-
"data-testid": `ff-map-key-${o(i).path.value}.${
|
|
2072
|
-
"model-value":
|
|
2077
|
+
"data-key-input": G,
|
|
2078
|
+
"data-testid": `ff-map-key-${o(i).path.value}.${G}`,
|
|
2079
|
+
"model-value": H,
|
|
2073
2080
|
placeholder: e.keyPlaceholder || "Key",
|
|
2074
|
-
onKeydown:
|
|
2075
|
-
"onUpdate:modelValue": (
|
|
2081
|
+
onKeydown: ze(Ce((le) => A(G), ["prevent"]), ["enter"]),
|
|
2082
|
+
"onUpdate:modelValue": (le) => o(c)(P, le)
|
|
2076
2083
|
}, null, 8, ["data-key-input", "data-testid", "model-value", "placeholder", "onKeydown", "onUpdate:modelValue"]),
|
|
2077
|
-
F(S.$slots, "default", { keyId:
|
|
2084
|
+
F(S.$slots, "default", { keyId: P }, () => [
|
|
2078
2085
|
h.value ? (_(), T(ht, {
|
|
2079
2086
|
key: 0,
|
|
2080
2087
|
"inline-vault-picker": "",
|
|
2081
2088
|
multiline: e.appearance?.string?.multiline,
|
|
2082
|
-
name:
|
|
2083
|
-
onKeydown:
|
|
2084
|
-
}, null, 8, ["multiline", "name", "onKeydown"])) : (_(), T(
|
|
2089
|
+
name: P,
|
|
2090
|
+
onKeydown: ze((le) => b(le, G), ["enter"])
|
|
2091
|
+
}, null, 8, ["multiline", "name", "onKeydown"])) : (_(), T(he, {
|
|
2085
2092
|
key: 1,
|
|
2086
|
-
name:
|
|
2093
|
+
name: P
|
|
2087
2094
|
}, null, 8, ["name"]))
|
|
2088
2095
|
], !0)
|
|
2089
2096
|
]),
|
|
@@ -2094,12 +2101,12 @@ const be = /* @__PURE__ */ N({
|
|
|
2094
2101
|
$(L, {
|
|
2095
2102
|
appearance: "tertiary",
|
|
2096
2103
|
"aria-label": o(t).t("actions.remove_entity", { entity: o(m) }),
|
|
2097
|
-
"data-testid": `ff-map-remove-btn-${o(i).path.value}.${
|
|
2104
|
+
"data-testid": `ff-map-remove-btn-${o(i).path.value}.${G}`,
|
|
2098
2105
|
icon: "",
|
|
2099
|
-
onClick: (
|
|
2106
|
+
onClick: (le) => o(p)(P)
|
|
2100
2107
|
}, {
|
|
2101
2108
|
default: q(() => [
|
|
2102
|
-
$(o(
|
|
2109
|
+
$(o(rt))
|
|
2103
2110
|
]),
|
|
2104
2111
|
_: 1
|
|
2105
2112
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -2117,17 +2124,17 @@ const be = /* @__PURE__ */ N({
|
|
|
2117
2124
|
onClick: C
|
|
2118
2125
|
}, {
|
|
2119
2126
|
default: q(() => [
|
|
2120
|
-
$(o(
|
|
2127
|
+
$(o(Ee)),
|
|
2121
2128
|
pe(" " + ce(o(t).t("actions.add_entity", { entity: o(m) })), 1)
|
|
2122
2129
|
]),
|
|
2123
2130
|
_: 1
|
|
2124
2131
|
}, 8, ["aria-label", "data-testid"])
|
|
2125
|
-
], 8,
|
|
2132
|
+
], 8, nn)), [
|
|
2126
2133
|
[Q, !o(i).hide.value]
|
|
2127
2134
|
]);
|
|
2128
2135
|
};
|
|
2129
2136
|
}
|
|
2130
|
-
}),
|
|
2137
|
+
}), un = /* @__PURE__ */ W(ln, [["__scopeId", "data-v-dca94ae5"]]), he = /* @__PURE__ */ U({
|
|
2131
2138
|
name: "AutoField",
|
|
2132
2139
|
__name: "Field",
|
|
2133
2140
|
props: {
|
|
@@ -2137,50 +2144,50 @@ const be = /* @__PURE__ */ N({
|
|
|
2137
2144
|
},
|
|
2138
2145
|
emits: ["globalAction"],
|
|
2139
2146
|
setup(e) {
|
|
2140
|
-
const
|
|
2147
|
+
const s = e, t = Z(E(s, "name")), n = k(() => {
|
|
2141
2148
|
switch (t.schema?.value?.type) {
|
|
2142
2149
|
case "string":
|
|
2143
|
-
return "one_of" in t.schema.value ?
|
|
2150
|
+
return "one_of" in t.schema.value ? Se : ht;
|
|
2144
2151
|
case "boolean":
|
|
2145
|
-
return "one_of" in t.schema.value ?
|
|
2152
|
+
return "one_of" in t.schema.value ? Se : va;
|
|
2146
2153
|
case "number":
|
|
2147
2154
|
case "integer":
|
|
2148
|
-
return "one_of" in t.schema.value ?
|
|
2155
|
+
return "one_of" in t.schema.value ? Se : Wa;
|
|
2149
2156
|
case "array":
|
|
2150
|
-
return
|
|
2157
|
+
return La;
|
|
2151
2158
|
case "set":
|
|
2152
|
-
return
|
|
2159
|
+
return Nt(t.schema) ? gt : Se;
|
|
2153
2160
|
case "record":
|
|
2154
|
-
return
|
|
2161
|
+
return Ua;
|
|
2155
2162
|
case "map":
|
|
2156
|
-
return
|
|
2163
|
+
return un;
|
|
2157
2164
|
case "json":
|
|
2158
|
-
return
|
|
2165
|
+
return Za;
|
|
2159
2166
|
case "foreign":
|
|
2160
|
-
return
|
|
2167
|
+
return an;
|
|
2161
2168
|
default:
|
|
2162
2169
|
return;
|
|
2163
2170
|
}
|
|
2164
2171
|
});
|
|
2165
2172
|
return (r, a) => {
|
|
2166
|
-
const
|
|
2167
|
-
return _(), K(
|
|
2168
|
-
(_(), T(
|
|
2169
|
-
o(t).error ? (_(), T(
|
|
2173
|
+
const c = D("KAlert");
|
|
2174
|
+
return _(), K(ee, null, [
|
|
2175
|
+
(_(), T(ne(r.$slots[o(ke)]))),
|
|
2176
|
+
o(t).error ? (_(), T(c, {
|
|
2170
2177
|
key: 0,
|
|
2171
2178
|
appearance: "danger",
|
|
2172
2179
|
message: o(t).error.message
|
|
2173
|
-
}, null, 8, ["message"])) : o(t).renderer.value ? (_(), T(
|
|
2180
|
+
}, null, 8, ["message"])) : o(t).renderer.value ? (_(), T(ne(o(t).renderer.value), {
|
|
2174
2181
|
key: 1,
|
|
2175
|
-
autofocus:
|
|
2182
|
+
autofocus: s.autofocus,
|
|
2176
2183
|
name: Oe(o(t).path.value),
|
|
2177
|
-
onGlobalAction: a[0] || (a[0] = (
|
|
2178
|
-
}, null, 40, ["autofocus", "name"])) : (_(), K(
|
|
2179
|
-
n.value ? (_(), T(
|
|
2184
|
+
onGlobalAction: a[0] || (a[0] = (d, p) => r.$emit("globalAction", d, p))
|
|
2185
|
+
}, null, 40, ["autofocus", "name"])) : (_(), K(ee, { key: 2 }, [
|
|
2186
|
+
n.value ? (_(), T(ne(n.value), {
|
|
2180
2187
|
key: 0,
|
|
2181
|
-
autofocus:
|
|
2188
|
+
autofocus: s.autofocus,
|
|
2182
2189
|
name: Oe(o(t).path.value)
|
|
2183
|
-
}, null, 8, ["autofocus", "name"])) : (_(), T(
|
|
2190
|
+
}, null, 8, ["autofocus", "name"])) : (_(), T(c, {
|
|
2184
2191
|
key: 1,
|
|
2185
2192
|
appearance: "warning",
|
|
2186
2193
|
message: `${o(t).path.value} ${o(t).schema.value.type} (no renderer yet)`
|
|
@@ -2190,7 +2197,7 @@ const be = /* @__PURE__ */ N({
|
|
|
2190
2197
|
], 64);
|
|
2191
2198
|
};
|
|
2192
2199
|
}
|
|
2193
|
-
}), En = /* @__PURE__ */
|
|
2200
|
+
}), En = /* @__PURE__ */ U({
|
|
2194
2201
|
name: "SchemaForm",
|
|
2195
2202
|
__name: "Form",
|
|
2196
2203
|
props: {
|
|
@@ -2202,72 +2209,72 @@ const be = /* @__PURE__ */ N({
|
|
|
2202
2209
|
renderRules: {}
|
|
2203
2210
|
},
|
|
2204
2211
|
emits: ["change", "globalAction"],
|
|
2205
|
-
setup(e, { expose:
|
|
2206
|
-
const n = t, r =
|
|
2212
|
+
setup(e, { expose: s, emit: t }) {
|
|
2213
|
+
const n = t, r = Ae(), { getSchema: a, formData: c, setValue: d, getValue: p, rootRenderRules: i } = aa({
|
|
2207
2214
|
schema: e.schema,
|
|
2208
2215
|
propsData: k(() => e.data),
|
|
2209
2216
|
propsConfig: e.config,
|
|
2210
|
-
propsRenderRules:
|
|
2217
|
+
propsRenderRules: E(() => e.renderRules),
|
|
2211
2218
|
onChange: (g) => n("change", g)
|
|
2212
2219
|
}), m = k(() => {
|
|
2213
2220
|
const { fields: g } = a();
|
|
2214
|
-
let
|
|
2215
|
-
return e.fieldsOrder ? lt(
|
|
2221
|
+
let l = [...g];
|
|
2222
|
+
return e.fieldsOrder ? lt(l, e.fieldsOrder) : (i.value?.bundles && (l = ut([...l], i.value.bundles)), l);
|
|
2216
2223
|
});
|
|
2217
|
-
return
|
|
2224
|
+
return s({
|
|
2218
2225
|
getValue: p,
|
|
2219
|
-
getRawValue: () =>
|
|
2220
|
-
setValue:
|
|
2221
|
-
}), (g,
|
|
2226
|
+
getRawValue: () => Ze(c),
|
|
2227
|
+
setValue: d
|
|
2228
|
+
}), (g, l) => (_(), T(ne(e.tag), null, {
|
|
2222
2229
|
default: q(() => [
|
|
2223
|
-
(_(), T(
|
|
2230
|
+
(_(), T(ne(o(r)[o(ke)]))),
|
|
2224
2231
|
F(g.$slots, "default", {}, () => [
|
|
2225
|
-
(_(!0), K(
|
|
2232
|
+
(_(!0), K(ee, null, oe(m.value, (u) => (_(), T(he, {
|
|
2226
2233
|
key: Object.keys(u)[0],
|
|
2227
2234
|
name: Object.keys(u)[0],
|
|
2228
|
-
onGlobalAction:
|
|
2235
|
+
onGlobalAction: l[0] || (l[0] = (f, h) => n("globalAction", f, h))
|
|
2229
2236
|
}, null, 8, ["name"]))), 128))
|
|
2230
2237
|
])
|
|
2231
2238
|
]),
|
|
2232
2239
|
_: 3
|
|
2233
2240
|
}));
|
|
2234
2241
|
}
|
|
2235
|
-
}),
|
|
2242
|
+
}), On = /* @__PURE__ */ U({
|
|
2236
2243
|
__name: "FieldRenderer",
|
|
2237
2244
|
props: {
|
|
2238
2245
|
match: { type: Function },
|
|
2239
2246
|
priority: {}
|
|
2240
2247
|
},
|
|
2241
2248
|
setup(e) {
|
|
2242
|
-
const
|
|
2243
|
-
return t && n.set(
|
|
2249
|
+
const s = e, { default: t } = Ae(), { fieldRendererRegistry: n } = te();
|
|
2250
|
+
return t && n.set(s.match, t), (r, a) => null;
|
|
2244
2251
|
}
|
|
2245
|
-
}), un = { cancel: "Cancel", view_configuration: "View configuration", create: "New plugin", create_custom: "Create", configure: "Configure", copy_id: "Copy ID", copy_json: "Copy JSON", edit: "Edit", enable: "Enable", enabled: "Enabled", disable: "Disable", delete: "Delete", disabled: "Disabled", confirm_delete: "Yes, delete", view: "View details", configure_dynamic_ordering: "Configure dynamic ordering", go_to_plugins: "Go to plugins", save: "Save", add_entity: "Add {entity}", remove_entity: "Remove {entity}", loading_spinner: "Loading..." }, cn = { title: "Configuration", message: "Export configurations for core Kong Gateway objects, like services, routes, and plugins, to either YAML, JSON, or Terraform. This allows for straightforward importing into APIOps tools like decK with YAML, Insomnia and cURL with JSON, or Terraform products with Terraform.", yaml: "YAML", terraform: "Terraform", json: "JSON", deck: "decK" }, dn = { success: "Copied {val} to clipboard", success_brief: "Successfully copied to clipboard", tooltip: "Copy {label}", success_tooltip: "Copied!" }, pn = { general: "Plugins could not be retrieved", delete: "The plugin could not be deleted at this time.", copy: "Failed to copy to clipboard", load_results: "Error loading available plugins", load_schema: "Error loading plugin schema" }, mn = { placeholder: { konnect: "Filter by name", exact: "Filter by exact instance name or ID", kongManager: "Filter by exact instance name or ID", select: "Filter plugins", search_plugins: "Search plugins", search: "Search", tags_filter: "Type part of a tag and press Enter", scope_filter: "Select a scope" }, filter: { field: { enabled: "Enabled" }, tags_invalid: "Tags can't contain commas, slashes, or leading/trailing spaces" }, no_results: 'No results found for "{filter}"' }, fn = { new: "New" }, hn = /* @__PURE__ */ JSON.parse('{"title":"Plugins","list":{"toolbar_actions":{"new_plugin":"New plugin"},"table_headers":{"applied_to":"Applied to","applied_to_badges":{"consumer":"Consumer","global":"Global","route":"Route","service":"Service","consumer_group":"Consumer group"},"id":"ID","plugin":"Plugin","name":"Name","instance_name":"Instance name","scope":"Scope","status":"Status","ordering":"Ordering","ordering_badge":{"dynamic":"Dynamic","static":"Static"},"enabled":"Enabled","tags":"Tags","updated_at":"Last modified"},"empty_state":{"title":"Configure a new plugin","description":"Plugins are used to extend Kong functionality."},"empty_state_v2":{"title":"Configure your first plugin","description":"Plugins extend gateways functionalities, offering features like authentication, rate limiting, and request transformations to enhance security and performance.","create_cta":"New plugin","group":"Plugins created in gateways within this group will automatically appear here.","learn_more":"Learn more"}},"meta":{"basic-auth":{"name":"Basic Authentication","credential_name":"Basic Auth Credential","description":"Add Basic Authentication to your services"},"hmac-auth":{"name":"HMAC Authentication","credential_name":"HMAC Credential","description":"Add HMAC Authentication to your services"},"jwt-signer":{"name":"JWT Signer","description":"Verify and (re-)sign one or two tokens in a request"},"jwt":{"name":"JWT","credential_name":"JWT Credential","description":"Verify and authenticate JSON Web Tokens"},"key-auth":{"name":"Key Authentication","credential_name":"Key Auth Credential","description":"Add key authentication to your services"},"key-auth-enc":{"name":"Key Authentication Encrypted","credential_name":"Key Auth Encrypted","description":"Add key authentication to your services with an encrypted token"},"ldap-auth-advanced":{"name":"LDAP Authentication Advanced","description":"Integrate Kong with a LDAP server"},"ldap-auth":{"name":"LDAP Authentication","description":"Integrate Kong with a LDAP server"},"oauth2-introspection":{"name":"OAuth 2.0 Introspection","description":"Integrate Kong with a third-party OAuth 2.0 Authorization Server"},"oauth2":{"name":"OAuth 2.0 Authentication","credential_name":"OAuth 2.0 Application","description":"Add OAuth 2.0 authentication to your services"},"openid-connect":{"name":"OpenID Connect","description":"Integrate Kong with a third-party OpenID Connect 1.0 provider"},"mtls-auth":{"name":"Mutual TLS Authentication","description":"Secure routes and services with client certificate and mutual TLS authentication"},"vault-auth":{"name":"Vault Authentication","description":"Secure routes and services with an access token and secret token, stored securely via Vault"},"bot-detection":{"name":"Bot Detection","description":"Detect and clock bots or custom clients"},"cors":{"name":"CORS","description":"Allow developers to make requests from the browser"},"ip-restriction":{"name":"IP Restriction","description":"Whitelist or blacklist IPs that can make requests"},"opa":{"name":"OPA","description":"Authorize requests against Open Policy Agent"},"kubernetes-sidecar-injector":{"name":"Kubernetes Sidecar Injector","description":"This plugin will inject Kong dataplane nodes and form a service mesh on top of Kubernetes"},"request-validator":{"name":"Request Validator","description":"Validate requests before they reach their upstream service."},"acl":{"name":"ACL","credential_name":"Access Control Group","description":"Control which consumers can access services"},"canary":{"name":"Canary Release","description":"Methodically roll out software changes to a subset of users"},"forward-proxy":{"name":"Forward Proxy","description":"Allow Kong to connect to intermediary transparent HTTP proxies"},"proxy-cache":{"name":"Proxy Caching","description":"Cache and serve commonly requested responses in Kong"},"proxy-cache-advanced":{"name":"Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"graphql-proxy-cache-advanced":{"name":"GraphQL Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"rate-limiting-advanced":{"name":"Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"rate-limiting":{"name":"Rate Limiting","description":"Rate-limit how many HTTP requests a developer can make"},"graphql-rate-limiting-advanced":{"name":"GraphQL Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"mocking":{"name":"Mocking","description":"Provide mock endpoints to test your APIs in development against your services"},"request-size-limiting":{"name":"Request Size Limiting","description":"Block requests with bodies greater than a specific size"},"request-termination":{"name":"Request Termination","description":"Terminate all requests with a specific response"},"response-ratelimiting":{"name":"Response Rate Limiting","description":"Rate-Limiting based on a custom response header value"},"route-by-header":{"name":"Route by Header","description":"Route requests based on request headers"},"ai-proxy":{"name":"AI Proxy","description":"Directly call a configured LLM, with mediated security and tuning parameters, and using standardised Kong request and response formats."},"ai-prompt-decorator":{"name":"AI Prompt Decorator","description":"Prepend and append chat prompts to AI Proxy plugin LLM requests."},"ai-prompt-template":{"name":"AI Prompt Template","description":"Define a set of templates, containing string variable placeholders, that can be consumed by users when used with the AI Proxy plugin."},"ai-prompt-guard":{"name":"AI Prompt Guard","description":"Define a set of valid, and a set of invalid, regular expression patterns when calling LLM models with the AI Proxy plugin."},"ai-request-transformer":{"name":"AI Request Transformer","description":"Use an LLM to transform API request from a user, before sending to the upstream service."},"ai-response-transformer":{"name":"AI Response Transformer","description":"Use an LLM to transform API responses from the upstream service, before returning to the user."},"ai-rate-limiting-advanced":{"name":"AI Rate Limiting Advanced","description":"Provides rate limiting for the providers used by any AI plugins."},"ai-azure-content-safety":{"name":"AI Azure Content Safety","description":"Allows checking and auditing of AI-Proxy plugin messages, using Azure Cognitive Services, before proxying to upstream large-language model."},"aws-lambda":{"name":"AWS Lambda","description":"Invoke and manage AWS Lambda functions from Kong"},"azure-functions":{"name":"Azure Functions","description":"Invoke Azure functions"},"openwhisk":{"name":"OpenWhisk","description":"Invoke and manage OpenWhisk actions from Kong"},"pre-function":{"name":"Kong Functions (Pre-Plugins)","description":"Add and manage custom lua functions to run before other plugins"},"post-function":{"name":"Kong Functions (Post-Plugins)","description":"Add and manage custom lua functions to run after other plugins"},"datadog":{"name":"Datadog","description":"Visualize metrics on Datadog"},"prometheus":{"name":"Prometheus","description":"Export performance metrics to Prometheus"},"zipkin":{"name":"Zipkin","description":"Propagate zipkin spans and report spans to a zipkin server"},"collector":{"name":"Collector","description":"Automate spec-driven development & anomaly detection (Early Access)"},"response-transformer-advanced":{"name":"Response Transformer Advanced","description":"Transform the response sent by the upstream server on the fly on Kong, before returning the response to the client."},"correlation-id":{"name":"Correlation ID","description":"Correlate requests and responses using a unique ID"},"request-transformer-advanced":{"name":"Request Transformer Advanced","description":"Use powerful regular expressions, variables and templates to transform API requests"},"request-transformer":{"name":"Request Transformer","description":"Modify the request before hitting the upstream server"},"response-transformer":{"name":"Response Transformer","description":"Modify the upstream response before returning it to the client"},"route-transformer-advanced":{"name":"Route Transformer Advanced","description":"Transforms the routing on the fly in Kong, changing the upstream server/port/path to hit"},"kafka-upstream":{"name":"Kafka Upstream","description":"Transform requests into Kafka messages in a topic"},"degraphql":{"name":"DeGraphQL","description":"Transform a GraphQL upstream into a REST API"},"exit-transformer":{"name":"Exit Transformer","description":"Customize Kong exit responses sent downstream"},"jq":{"name":"jq","description":"Transform JSON objects included in API requests or responses using jq programs"},"file-log":{"name":"File Log","description":"Append request and response data to a log file on disk"},"http-log":{"name":"HTTP Log","description":"Send request and response logs to an HTTP server"},"loggly":{"name":"Loggly","description":"Send request and response logs to Loggly"},"statsd-advanced":{"name":"StatsD Advanced","description":"Send traffic and Kong performance metrics to StatsD"},"statsd":{"name":"StatsD","description":"Send request and response logs to StatsD"},"syslog":{"name":"Syslog","description":"Send request and response logs to Syslog"},"tcp-log":{"name":"TCP Log","description":"Send request and response logs to a TCP server"},"udp-log":{"name":"UDP Log","description":"Send request and response logs to a UDP server"},"kafka-log":{"name":"Kafka Log","description":"Publish request and response logs to a Kafka topic"},"session":{"name":"Session","description":"Sessions for Kong authentication"},"upstream-tls":{"name":"Upstream TLS","description":"Enable TLS on upstream traffic by providing Kong with a list of trusted certificates."},"application-registration":{"name":"Portal Application Registration","description":"Allow portal developers to register applications against services"},"konnect-application-auth":{"name":"Konnect Application Auth","description":"Allow Konnect portal developers to register applications against services"},"acme":{"name":"ACME","description":"Let\'s Encrypt and ACMEv2 integration with Kong"},"grpc-gateway":{"name":"gRPC Gateway","description":"Access gRPC services through HTTP REST"},"grpc-web":{"name":"gRPC Web","description":"Allow browser clients to call gRPC services"},"upstream-timeout":{"name":"Upstream Timeout","description":"Configure read, send and connect timeouts to an upstream"},"opentelemetry":{"name":"OpenTelemetry","description":"Propagate distributed tracing spans and report low-level spans to a OTLP-compatible server"},"websocket-validator":{"name":"WebSocket Validator","description":"Validate individual WebSocket messages against to a user-specified schema before proxying them"},"websocket-size-limit":{"name":"WebSocket Size Limit","description":"Allows operators to specify a maximum size for incoming WebSocket messages"},"tls-metadata-headers":{"name":"TLS Metadata Headers","description":"Detects client certificates in requests, retrieves the TLS metadata, and proxies this metadata via HTTP headers"},"tls-handshake-modifier":{"name":"TLS Handshake Modifier","description":"Requests the client certificate and if it exists, makes it available to other plugins acting on the request"},"oas-validation":{"name":"OAS Validation","description":"Validate HTTP requests and responses based on an API specification."},"jwe-decrypt":{"name":"Kong JWE Decrypt","description":"The Kong JWE Decrypt plugin makes it possible to decrypt an inbound token(JWE) in a request."},"xml-threat-protection":{"name":"XML Threat Protection","description":"Reduce the risk of XML attacks by checking the structure of XML payloads."},"saml":{"name":"SAML","description":"Security Assertion Markup Language (SAML) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider."},"app-dynamics":{"name":"AppDynamics","description":"This plugin integrates Kong with the AppDynamics APM platform so that proxy requests handled by Kong can be identified and analyzed in AppDynamics."},"json-threat-protection":{"name":"JSON Threat Protection","description":"Apply size checks on JSON payload and minimize risk of content-level attacks"},"standard-webhooks":{"name":"Standard Webhooks","description":"Validate incoming webhooks adhere to the Standard Webhooks specification, to which Kong is a contributor"},"ai-proxy-advanced":{"name":"AI Proxy Advanced","description":"Route across different LLMs and models using advanced load balancing algorithms, including semantic routing."},"ai-semantic-cache":{"name":"AI Semantic Cache","description":"Semantically cache AI requests to any LLM to reduce latency, improve end-user experiences and optimize GenAI costs."},"ai-semantic-prompt-guard":{"name":"AI Semantic Prompt Guard","description":"Semantically and intelligently create allow and deny lists of topics that can be requested across every LLM."},"header-cert-auth":{"name":"Header Certificate Authentication","description":"Authenticate clients with MTLS certificate passed in header by a WAF or load balancer"},"upstream-oauth":{"name":"Upstream OAuth","description":"Configure Kong to obtain a OAuth2 token to consume an upstream API"},"confluent":{"name":"Confluent","description":"Streamlines integration with Confluent Cloud and transforms requests into messages published to a Confluent topic."},"service-protection":{"name":"Service Protection","description":"Prevent abuse and protect services with absolute limits on the number of requests reaching the service."},"injection-protection":{"name":"Injection Protection","description":"Protect against injection attacks by rejecting requests that match common injections patterns."},"redirect":{"name":"Redirect","description":"Redirect incoming requests to a new URL"},"kafka-consume":{"name":"Kafka Consume","description":"Consume messages from Kafka topics over HTTP protocols."},"confluent-consume":{"name":"Confluent Consume","description":"Consume messages from Confluent Kafka topics over HTTP protocols"},"request-callout":{"name":"Request Callout","description":"Callout to third party APIs as part of request processing."},"ai-sanitizer":{"name":"AI Sanitizer","description":"Sanitize personal or sensitive information from prompts before sending to LLM."},"ai-rag-injector":{"name":"AI RAG Injector","description":"Attach contextual knowledge from vector databases with flexible template to LLM prompts."},"datakit":{"name":"Datakit","description":"Datakit is a workflow engine for working with external APIs."},"ai-prompt-compressor":{"name":"AI Prompt Compressor","description":"The AI Prompt Compressor reduces costs associated with LLMs by compressing prompts."},"solace-upstream":{"name":"Solace Upstream","description":"Transform requests into Solace messages in a Solace queue or topic."},"ai-aws-guardrails":{"name":"AI AWS GuardRails","description":"The AI AWS GuardRails enables enforcement of introspection with the AWS GuardRails service for all requests processed by the AI Proxy plugin."},"ace":{"name":"Konnect Access Control Enforcement","description":"Enable Developer Self-Service for Konnect Dev Portals."},"solace-consume":{"name":"Solace Consume","description":"Consume messages from Solace and make them available through HTTP endpoints."},"solace-log":{"name":"Solace Log","description":"Publish request and response logs to a Solace topic."},"ai-llm-as-judge":{"name":"AI LLM Judge","description":"Evaluate LLM responses with an external LLM service and use accuracy scores to drive dynamic load balancing for `llm/v1/chat` requests."},"ai-mcp-proxy":{"name":"AI MCP Proxy","description":"Convert APIs into MCP tools, proxy MCP servers, expose multiple MCP tools, and observe MCP traffic in real time."},"ai-gcp-model-armor":{"name":"AI GCP Model Armor","description":"Audit and validate AI Proxy messages with Google Cloud Model Armor before forwarding them to an upstream LLM."},"ai-mcp-oauth2":{"name":"AI MCP OAuth2","description":"Secure MCP server access with OAuth2 authentication."},"ai-semantic-response-guard":{"name":"AI Semantic Response Guard","description":"Permit or block prompts based on semantic similarity to known LLM responses, preventing misuse of `llm/v1/chat` or `llm/v1/completions` requests."},"ai-lakera-guard":{"name":"AI Lakera Guard","description":"Audit and enforce safety policies on LLM requests and responses using the AI AWS Lakera plugin before they reach upstream LLMs."},"ai-a2a-proxy":{"name":"AI A2A Proxy","description":"Securely proxy A2A agents, with real-time RPC tracing and monitoring."},"ai-custom-guardrail":{"name":"AI Custom Guardrail","description":"Integrate with any 3rd-party Guardrail service, with customizable enforcement modes — choose whether violations block, log, or allow traffic to proceed."},"metering-and-billing":{"name":"Metering & Billing","description":"Meter API requests and AI token usage for usage-based billing. Supports flexible customer identification, custom pricing dimensions, and fine-grained traffic filtering. Integrates natively with Konnect Metering & Billing."},"governance":{"name":"Governance","description":"Enforce feature-level access control and credit-balance gating for API consumers. Integrates with Konnect Metering & Billing to allow or deny requests based on customer entitlements."}},"fields":{"service":"Service ID","route":"Route ID","consumer":"Consumer ID","consumer_group":"Consumer group ID"},"select":{"custom_badge_text":"This plugin is data plane node specific","cloned_from_badge":"Cloned from {link}","installed_custom_badge":"Installed custom","streamed_custom_badge":"Streamed custom","unavailable_tooltip":"This plugin is not available","already_exists":"This plugin is already applied to this resource","misc_plugins":"Other plugins","show_all":"Show all","view_more":"View more","view_less":"View less","filter":{"title":"Filter plugins","featured":"Featured","type":"Type","clear":"Clear"},"list":{"table_headers":{"name":"Plugin","description":"Description"}},"tabs":{"kong":{"title":"Kong plugins","description":"Kong plugins are bundled by default with Kong Gateway and are available across all control planes.","empty_title":"No plugins","empty_description":"No plugins are available."},"custom":{"title":"Custom plugins","description":"Custom plugins will be available in this control plane only.","disabled_tooltip":"Custom plugins are not available with this gateway. Create a hybrid or dedicated cloud gateway to leverage custom plugins.","fetch_error":"Unable to load some custom plugins. Bundled plugins are still available.","license_required":"Plugin cloning requires a license to be used.","empty_title":"No custom plugins","empty_description":"No custom plugins have been added to this control plane.","create":{"name":"Custom plugin","description":"Upload schema file to create custom plugin"}}},"highlighted_plugins":{"title":"Highlighted plugins"}},"form":{"button_deck_customize":"Customize before copying to CLI","disable_data_retrieving":"You do not have permission to select {scope}","disable_source_scope_change":"Changing the {scope} is not allowed when configuring a plugin under it","no_selection":"No selection...","fields":{"enabled":{"label":"Enabled","on_text":"This plugin is enabled","off_text":"This plugin is disabled"},"plugin_status":{"label":"Plugin status","text_on":"Enabled","text_off":"Disabled"},"instance_name":{"label":"Name","placeholder":"Enter a unique name","help":"A custom name for this plugin instance to help with identifying from the list view."},"condition":{"label":"Execution condition","placeholder":"Enter an expression","tooltip":"An expression used for conditional control over plugin execution. If the expression evaluates to true during the request flow, the plugin is executed; otherwise, it is skipped.","help":{"learn":"Learn more","about":"{link} about plugin conditions."}},"protocols":{"label":"Protocols","placeholder":"Select valid protocols for the plugin","placeholderWithDefaultValues":"Select valid protocols for the plugin. Default protocols: {protocols}","help":"A list of the request protocols that will trigger this plugin. The default value, as well as the possible values allowed on this field, may change depending on the plugin type."},"tags":{"label":"Tags","help":"An optional set of strings for grouping and filtering, separated by commas.","placeholder":"Tag1, Tag2, Tag3"}},"scoping":{"label":"Scoped","placeholder":"Search by name or UUID","disable_global_radio":"The plugin is set to \'scoped\' by default. To apply a plugin globally, please navigate to the global plugin list page.","global":{"label":"Global","help":"All services, routes, and consumers"},"gateway_service":{"label":"Select a gateway service","help":"The gateway service to which this plugin configuration will apply","placeholder":"Select a gateway service","plural":"Gateway services"},"route":{"label":"Select a route","help":"The route that this plugin configuration will target","placeholder":"Select a route","plural":"Routes"},"consumer":{"label":"Select a consumer","help":"The consumer that this plugin configuration will target","placeholder":"Select a consumer","plural":"Consumers"},"consumer_group":{"label":"Select a consumer group","help":"The consumer group that this plugin configuration will target","placeholder":"Select a consumer group","plural":"Consumer groups"}},"grouping":{"plugin_configuration":{"title":"Plugin configuration","description":"Configuration parameters for this plugin. View advanced parameters for extended configuration.","empty":"This plugin does not have required parameters."},"advanced_parameters":{"view":"Show additional settings","hide":"Hide additional settings"}},"field_rules":{"at_least_one_of":"At least one of the following values is required: {parameters}.","only_one_of":"Exactly one of these parameters is required: {parameters}","mutually_required":"These values must be used together: {parameters}.","mutually_exclusive":"Only one of these values can be used: {parameters}.","only_one_of_mutually_required":"Exactly one of the following parameter combinations is required (all parameters within a chosen combination are required):"},"sections":{"plugin_scope":{"title":"Plugin scope","description":"Choose whether this plugin applies to all traffic (global) or is scoped to a specific service, route, or consumer."},"general_info":{"title":"General information","description":"Add details to help identify and manage your plugin."},"plugin_config":{"title":"Plugin configuration","description":"Set the plugin\'s behavior by defining its configuration settings."},"plugin_general_info":{"description":"Add a name or tags to help you identify and manage this plugin later."},"code_mode":{"title":"Code editor","description":"Configure this plugin by using YAML configuration."}}},"free-form":{"editor_mode":{"visual":"Visual editor","code":"Code editor"},"code-lens":{"entity":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","certificate":"Certificate"},"field":{"name":"{entity} \\"{value}\\"","username":"Username \\"{value}\\"","custom_id":"Custom ID \\"{value}\\"","subject":"Subject \\"{value}\\"","expires_after":"Expires after \\"{value}\\""},"action":{"view_entity":"View {title}","copy_certificate":"Copy certificate","copy_uuid":"Copy UUID","retry_fetch":"Retry fetch (Hover for details)"},"unknown_error":"Unknown error"},"acl":{"mode":{"allow":"Use allow list","deny":"Use deny list"}},"ai-mcp-proxy":{"default_acl_item_label":"Default ACL #{index}","tool_item_label":"Tool #{index}"},"request-callout":{"entity_name":"Request callout","by_lua_placeholder":"Enter Lua script here..."},"jwt-signer":{"keyset_url_required":"Provide a valid HTTP/HTTPS URL to ensure signing works correctly when \\"{signingField}\\" is enabled and \\"{headerField}\\" is set."},"metering-and-billing":{"sections":{"plugin_config":{"title":"Plugin configuration","description":"Configure the Metering & Billing plugin."},"metering":{"title":"What to meter"},"subject":{"title":"Who to bill (subject)","description":"Define how billing subjects are identified."},"ingestion":{"title":"Connection","description":"Configure how metered data is delivered to the billing service."},"queue":{"title":"Queue","description":"Configure internal event queue settings."}},"fields":{"meter_api_requests":{"label":"Meter API requests","description":"Emit a usage event for each API Gateway request."},"meter_ai_token_usage":{"label":"Meter AI token usage","description":"Emit events for LLM input and output tokens on AI Gateway requests. Each request produces separate input/output events so they can be priced independently."},"ingest_endpoint":{"description":"The URL of the metering data ingest endpoint.","help":"For Konnect Metering & Billing, use the regional endpoint from your Metering & Billing settings. For self-hosted OpenMeter, use your ingest URL."},"api_token":{"description":"Bearer token for authenticating requests to the ingest endpoint."},"look_up_value_in":{"label":"Look up subject in","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"e.g. x-customer-id, x-api-key, x-tenant"},"queue":{"max_coalescing_delay":{"label":"Max coalescing delay (s)"},"initial_retry_delay":{"label":"Initial retry delay (s)"},"max_retry_delay":{"label":"Max retry delay (s)"},"max_retry_time":{"label":"Max retry time (s)"}},"attributes":{"title":"Event attributes","description":"Attach custom dimensions to metered events.","look_up_value_in":{"placeholder":"e.g., x-priority-id"},"event_property_name":{"placeholder":"e.g., priority"}},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"}}},"governance":{"sections":{"configuration":{"title":"Plugin configuration","description":"Configure the Governance plugin subject, feature, and connection settings."},"governance":{"title":"Governance settings","description":"Configure access control behavior and response codes."},"subject":{"title":"Whose access to govern (subject)"},"feature":{"title":"Feature"},"connection":{"title":"Connection","description":"Configure how the plugin connects to the governance query endpoint."},"redis":{"title":"Redis"},"cache_sync":{"title":"Cache and sync"}},"fields":{"look_up_value_in":{"label":"Whose access to govern (Look up subject in)","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"Name of the header or query parameter that carries the customer identifier."},"feature_key":{"label":"Feature to govern access","help":"Feature that will control access to the scope where the plugin is applied.","metered_badge":"Metered feature","load_error":"Could not load features from the governance service."},"governance_endpoint":{"help":"For Konnect Metering & Billing, use the regional endpoint for Metering & Billing Query Governance Access. For self-hosted OpenMeter, use the Query Governance Access endpoint of your self-hosted instance."},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"},"sync_rate":{"label":"Sync rate (s)"},"refresh_interval":{"label":"Refresh interval (s)"},"max_stale_seconds":{"label":"Max stale seconds"},"l1_ttl":{"label":"L1 TTL (s)"},"l2_ttl":{"label":"L2 TTL (s)"},"credit_balance_required":{"label":"Credit balance lookup","yes_label":"Yes","yes_description":"A credit balance above zero is required for access to this feature.","no_label":"No","no_description":"Customers can access this feature regardless of their credit balance."},"fail_policy":{"label":"Plugin failure mode","allow_label":"Allow access","allow_description":"In the case of plugin failure, allow access to feature.","deny_label":"Deny access","deny_description":"In the case of plugin failure, deny access to feature."},"deny_unknown_customers":{"label":"Unknown customer access","allow_label":"Allow access","allow_description":"The gateway will allow access for unknown customers.","deny_label":"Deny access","deny_description":"The gateway will deny access for unknown customers."},"response":{"label":"Response mapping","columns":{"code":"Response code","status":"Status code","message":"Message"},"defaults":{"NO_CREDIT_AVAILABLE":"Customer has no credit available.","USAGE_LIMIT_REACHED":"Customer has reached usage limit for feature.","FEATURE_UNAVAILABLE":"Feature is not available for the customer.","FEATURE_NOT_FOUND":"Feature not found.","CUSTOMER_NOT_FOUND":"Customer is not found by subject."}}}},"datakit":{"plugin_config":{"title":"Flow editor"},"description_code":"Configure this plugin by using YAML configuration. If you are copy/pasting in examples from the documentation - paste from below the <code>config</code> block.","description_flow":"Build flows visually with a drag-and-drop editor for Datakit. Visualize node connections, inputs, and outputs as you design.","description_example":"Start with a use case:","detected_config_format":"Detected {format} configuration. Do you want to convert it to Datakit configuration?","detected_config_format_title":"Convert configuration","detected_config_format_confirm":"Convert","examples":{"authenticateThirdPartyWithDynamicUrl":"Authenticate Kong to a third-party service resolved at runtime","authenticateThirdParty":"Authenticate Kong to a third-party service","authenticateWithVaultSecret":"Authenticate to a third-party service using Vault secrets","clearHeaders":"Clear request headers","combineTwoApisIntoOneResponse":"Combine multiple API responses","conditionallyStoreCachedItems":"Conditionally fetch or store cache data","convertJsonIntoXml":"Transform JSON into XML","convertJsonToXmlAndBack":"Transform JSON into XML and back","convertXmlIntoJson":"Transform XML into JSON","manipulateRequestHeaders":"Manipulate request headers"},"flow_editor":{"mode":"Flow editor","name":"Datakit flow editor","cta":"Go to flow editor","disabled_tooltip":"The flow editor is unavailable due to critical configuration errors or features not supported in the flow editor:<br/><code>{reason}</code>","expand_panel":"Expand panel","collapse_panel":"Collapse panel","return_to_config":"Return to plugin configuration","canvas_panel":{"request":"Request","response":"Response","node_count_plural":"{count} nodes","node_count_singular":"1 node"},"panel_segments":{"nodes":"Nodes","resources":{"title":"Resources","vault":{"title":"Vault secrets","add_button":"Add vault resource","name_exists_error":"Vault name already exists","name_required_error":"Vault name is required","edit":"Edit","delete":"Delete"},"cache":{"title":"Cache configuration","add_button":"Add cache configuration","strategy_options":{"memory":"Memory","redis":"Redis"},"select_redis_configuration":"Select a shared Redis configuration","inline_config":"Inline config","inline_config_preview":"You are using a dedicated Redis configuration, This is a preview of your current setup, please edit it in code editor"}}},"vault_secret_picker":{"title":"Add secret to Datakit","proceed_button_text":"Add secret","secret_name":{"label":"Secret name","placeholder":"Enter a name","help":"A unique identifier for this secret in your Datakit configuration"}},"node_panel":{"title":"Node types","description":"Drag a node onto the canvas to add it to your data flow.","groups":{"external_interaction":"External interaction","control_flow":"Control flow","data_transformation":"Data transformation","data_value":"Data value","authentication":"Authentication"}},"examples":"Examples","debug":{"label":"Debug","description":"Enables detailed error messages in client responses, making debugging easier. <a href=\\"https://developer.konghq.com/plugins/datakit/#debugging\\" target=\\"_blank\\">See the docs</a> for details."},"actions":{"zoom_in":"Zoom in","zoom_out":"Zoom out","fit_view":"Zoom to fit","auto_layout":"Auto layout","undo":"Undo","redo":"Redo","duplicate":"Duplicate","remove_from_branch":"Remove from branch","delete":"Delete","view_docs":"View docs","done":"Done"},"node_types":{"call":{"summary":"Call a third-party API","description":"Send an HTTP request and retrieve the response."},"jq":{"summary":"Transform data and cast variables with jq","description":"The <code>jq</code> node executes a jq script for processing JSON. See the official <a href=\\"https://jqlang.org\\" target=\\"_blank\\">jq docs</a> for more details."},"exit":{"summary":"Return directly to the client","description":"Trigger an early exit that produces a direct response, rather than forwarding a proxied response."},"property":{"summary":"Get and set Kong Gateway-specific data","description":"Get and set Kong Gateway host and request properties."},"static":{"summary":"Configure static input values ahead of time","description":"Emits static values to be used as inputs for other nodes. The <code>static</code> node can help you with hardcoding some known value for an input."},"branch":{"summary":"Execute nodes based on matching input conditions","description":"Execute different nodes based on matching input conditions, such as a cache hit or miss."},"cache":{"summary":"Store and fetch cached data","description":"Store data into cache and fetch cached data from cache."},"xml_to_json":{"summary":"Transform XML to JSON","description":"Transform XML to JSON."},"json_to_xml":{"summary":"Transform JSON to XML","description":"Transform JSON to XML."},"jwt_decode":{"summary":"Decode JWT headers and claims","description":"Parse a JWT without verifying its signature."},"jwt_sign":{"summary":"Create and sign JWTs","description":"Generate a signed JWT from configured claims and a signing key."},"jwt_verify":{"summary":"Verify JWT signature and claims","description":"Verify a JWT signature and validate claims such as exp, nbf, iss, and aud."},"request":{"name":"request","description":"Reads incoming client request properties. You cannot specify request node input."},"response":{"name":"response","description":"Updates properties of the outgoing client response."},"service_request":{"name":"service request","description":"Updates properties of the request sent to the service being proxied to."},"service_response":{"name":"service response","description":"Reads response properties from the service being proxied to."},"vault":{"name":"Vault","description":"Vault is a tool for securely accessing secrets."}},"node_properties":{"name":"Name","configuration":"Configuration","input":{"label":"Inputs configuration","placeholder":"Select a source","add_button":"Add an input","or":"or","input":"Input","fields":"Fields","source":"Source","tooltip":"Fields are part of the node input. A source can connect to either the fields or the input, but not both."},"input_name":{"label":"Input name","placeholder":"Enter an input name"},"jq":{"label":"jq script","help":"Refer to {link} for full documentation."},"output_value":{"label":"Output value","value_name":"Value name","value":"Value","add_button":"Add a value"},"property":{"get":"get","set":"set"},"branch":{"placeholder":"Select nodes"},"jwt":{"static_claims":{"label":"Static claims","help":"Enter a JSON object. It will be stored as the node\'s static claims map.","errors":{"invalid_json_object":"Static claims must be a valid JSON object"}}},"errors":{"invalid_identifier_format":"{fieldName} must start with a letter or underscore and contain only letters, numbers, underscores, or hyphens","invalid_url_format":"Not a valid URL format","not_empty":"{fieldName} is required","not_float":"{fieldName} must be a float","not_integer":"{fieldName} must be an integer","not_number":"{fieldName} must be a number","not_unique":"{fieldName} must be unique","number_range":"{fieldName} must be between {min} and {max}","string_len_range":"{fieldName} must be between {minLength} and {maxLength} characters","reserved_node_name":"\\"{nodeName}\\" is a reserved node name","attributes_required":"Provide at least one of attributes_block_name or attributes_name_prefix"}},"error":{"invalid_connection":"Invalid connection","branch_cycle":"Cannot create a circular branch relationship"},"confirm":{"title":"Connection conflict","message":{"confirm":"Are you sure you want to make this change?","switch":"You can connect an output source to either all inputs of a node or to individual inputs.","override":"Each input can connect to only one output, but one output can connect to many inputs.","branch_replace":"This node already belongs to another branch. Move it to the new branch?"},"proceed":"Yes, update"},"leave_confirm":"Leave current page? Changes you made may not be saved."},"code_editor":{"mode":"Code editor"}},"vault_picker":{"component_error":"The vault secret picker is not available"},"tag_helper":"Use comma to separate values. eg: value1, value2","foreign_placeholder":"Enter a UUID of {entity}"}}'), gn = { title: "Redis configuration", managed_ui: { title: "Redis", shared_configuration: { label: "Use shared configuration", description: "Select an existing shared Redis configuration or create a new one. Any updates to this configuration will automatically apply to all associated plugins.", badge: "Recommended" }, dedicated_configuration: { label: "Use locally-scoped configuration", description: "Create and use a Redis configuration specifically for this plugin." }, selector: { placeholder: "Filter Redis configurations...", create_new: "New Redis" } }, shared_configuration: { label: "Shared configuration", description: "Select an existing shared Redis configuration or create a new one. Changes to this configuration automatically apply to all associated plugins.", title: "Shared Redis configuration", error: "Fetching shared Redis configurations failed." }, dedicated_configuration: { label: "Dedicated configuration", description: "Create a Redis configuration that is used only by this plugin. Changes won’t affect other plugins." }, config_card: { common_fields: { created_at_label: "Created at", updated_at_label: "Last updated at", type_label: "Redis type" } } }, yn = { plugin: "plugin" }, vn = { key_auth_identity_realms: { cp_label: "Current control plane", cp_group_label: "Control plane", realm_group_label: "Realms (can only select one)" }, kong_identity: { title: "Who should manage authentication and credentials?", description_with_realms: "Use Consumers or centrally managed consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", description_without_realms: "Use Consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", learn_more: "Learn more.", incompatible_data_plane_alert: "We detected that one or more data plane nodes are running a version earlier than 3.15. Requests handled by those data plane nodes will use consumers instead of Kong Identity principals.", kong_identity_label: "Kong Identity", kong_identity_description_key_auth: "Use Kong Identity to authenticate API keys and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", kong_identity_description_basic_auth: "Use Kong Identity to authenticate Basic Auth credentials and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", consumers_label: "Consumers", consumers_description_key_auth: "Use consumer-managed API keys. Consumers provide their API key in a request header, query parameter, or request body to authenticate requests.", consumers_description_basic_auth: "Use consumer-managed Basic Auth credentials. Consumers authenticate requests using a username and password.", centrally_managed_label: "Centrally managed consumers", centrally_managed_description: "Authenticate centrally managed consumers in Konnect using identity realms. Identity realms are scoped to the control plane by default.", identity_realms_required: "To use centrally managed consumers, you must select at least one Centrally managed consumer realm.", error_on_miss_label: "If principal lookup fails", error_on_miss_reject_label: "Reject the request", error_on_miss_reject_description: "Treat the request as unauthenticated if Kong Identity cannot resolve the principal.", error_on_miss_continue_label: "Continue without a principal", error_on_miss_continue_description: "Allow the request to continue without resolving a principal.", configure_title: "Configure Kong Identity", configure_description: "Kong Identity uses principals to represent authenticated services or applications. Create your first principal in Kong Identity to start using principal-based authentication. On data plane nodes running versions earlier than 3.15, authentication continues using consumers.", create_principal: "Create principal", configure_learn_more: "Learn more", leave_prompt_title: "Leave this page?", leave_prompt_message: "Your unsaved changes will be lost if you continue.", leave_prompt_action: "Leave page" } }, bn = { window_type: { label: "Rate limit window type", help: "Sets the time window type to either <code>sliding</code> (default) or <code>fixed</code>.<br><ul><li>Sliding windows apply the rate limiting logic while taking into account previous hit rates (from the window that immediately precedes the current) using a dynamic weight.</li><li>Fixed windows consist of buckets that are statically assigned to a definitive time range, each request is mapped to only one fixed window based on its timestamp and will affect only that window's counters.</li></ul>", options: { fixed: "Fixed", sliding: "Sliding" } }, request_limits: { title: "Request limits", subtitle: "Set one or more limits on the number of API requests allowed within a defined timeframe.", label: "Limit", label_index: "Limit {index}", request_number: "Request number", time_interval: "Time interval", interval_determiner: "Every", seconds: "Seconds" }, error_message: { label: "Error message", code_placeholder: "Code message", message_placeholder: "Error message", help: "Set a custom error code and message to be returned when the rate limit is exceeded." }, start_with_a_use_case: "Start with a use case:", use_cases: { fixed: { hourly_500: { label: "500 requests every hour", description: "A fixed limit of 500 requests per hour resetting sharply on the hour, ensuring no user can exceed this limit." }, half_hourly_200: { label: "200 requests every 30 minutes", description: "Users are allowed 200 requests per 30 minutes, resetting exactly on the 30 minute mark with no carryover of unused limits." }, daily_500: { label: "500 requests every day", description: "A strict limit of 5000 requests per day resetting promptly at midnight, preventing any burst traffic or inconsistent user experiences." } }, sliding: { hourly_100: { label: "100 requests every hour", description: "Maximum of 100 requests every rolling hour, continuously adjusting the count over the course of the hour. No hard limit or known reset." }, half_hourly_300: { label: "300 requests every 30 minutes", description: "Each user can make up to 300 requests in any rolling 30 minute period, with older requests dropping off as new requests are made." }, hourly_500: { label: "500 requests every hour", description: `Each user is allowed 500 requests per hour.
|
|
2252
|
+
}), cn = { cancel: "Cancel", view_configuration: "View configuration", create: "New plugin", create_custom: "Create", configure: "Configure", copy_id: "Copy ID", copy_json: "Copy JSON", edit: "Edit", enable: "Enable", enabled: "Enabled", disable: "Disable", delete: "Delete", disabled: "Disabled", confirm_delete: "Yes, delete", view: "View details", configure_dynamic_ordering: "Configure dynamic ordering", go_to_plugins: "Go to plugins", save: "Save", add_entity: "Add {entity}", remove_entity: "Remove {entity}", loading_spinner: "Loading..." }, dn = { title: "Configuration", message: "Export configurations for core Kong Gateway objects, like services, routes, and plugins, to either YAML, JSON, or Terraform. This allows for straightforward importing into APIOps tools like decK with YAML, Insomnia and cURL with JSON, or Terraform products with Terraform.", yaml: "YAML", terraform: "Terraform", json: "JSON", deck: "decK" }, pn = { success: "Copied {val} to clipboard", success_brief: "Successfully copied to clipboard", tooltip: "Copy {label}", success_tooltip: "Copied!" }, mn = { general: "Plugins could not be retrieved", delete: "The plugin could not be deleted at this time.", copy: "Failed to copy to clipboard", load_results: "Error loading available plugins", load_schema: "Error loading plugin schema" }, fn = { placeholder: { konnect: "Filter by name", exact: "Filter by exact instance name or ID", kongManager: "Filter by exact instance name or ID", select: "Filter plugins", search_plugins: "Search plugins", search: "Search", tags_filter: "Type part of a tag and press Enter", scope_filter: "Select a scope" }, filter: { field: { enabled: "Enabled" }, tags_invalid: "Tags can't contain commas, slashes, or leading/trailing spaces" }, no_results: 'No results found for "{filter}"' }, hn = { new: "New" }, gn = /* @__PURE__ */ JSON.parse('{"title":"Plugins","list":{"toolbar_actions":{"new_plugin":"New plugin"},"table_headers":{"applied_to":"Applied to","applied_to_badges":{"consumer":"Consumer","global":"Global","route":"Route","service":"Service","consumer_group":"Consumer group"},"id":"ID","plugin":"Plugin","name":"Name","instance_name":"Instance name","scope":"Scope","status":"Status","ordering":"Ordering","ordering_badge":{"dynamic":"Dynamic","static":"Static"},"enabled":"Enabled","tags":"Tags","updated_at":"Last modified"},"empty_state":{"title":"Configure a new plugin","description":"Plugins are used to extend Kong functionality."},"empty_state_v2":{"title":"Configure your first plugin","description":"Plugins extend gateways functionalities, offering features like authentication, rate limiting, and request transformations to enhance security and performance.","create_cta":"New plugin","group":"Plugins created in gateways within this group will automatically appear here.","learn_more":"Learn more"}},"meta":{"basic-auth":{"name":"Basic Authentication","credential_name":"Basic Auth Credential","description":"Add Basic Authentication to your services"},"hmac-auth":{"name":"HMAC Authentication","credential_name":"HMAC Credential","description":"Add HMAC Authentication to your services"},"jwt-signer":{"name":"JWT Signer","description":"Verify and (re-)sign one or two tokens in a request"},"jwt":{"name":"JWT","credential_name":"JWT Credential","description":"Verify and authenticate JSON Web Tokens"},"key-auth":{"name":"Key Authentication","credential_name":"Key Auth Credential","description":"Add key authentication to your services"},"key-auth-enc":{"name":"Key Authentication Encrypted","credential_name":"Key Auth Encrypted","description":"Add key authentication to your services with an encrypted token"},"ldap-auth-advanced":{"name":"LDAP Authentication Advanced","description":"Integrate Kong with a LDAP server"},"ldap-auth":{"name":"LDAP Authentication","description":"Integrate Kong with a LDAP server"},"oauth2-introspection":{"name":"OAuth 2.0 Introspection","description":"Integrate Kong with a third-party OAuth 2.0 Authorization Server"},"oauth2":{"name":"OAuth 2.0 Authentication","credential_name":"OAuth 2.0 Application","description":"Add OAuth 2.0 authentication to your services"},"openid-connect":{"name":"OpenID Connect","description":"Integrate Kong with a third-party OpenID Connect 1.0 provider"},"mtls-auth":{"name":"Mutual TLS Authentication","description":"Secure routes and services with client certificate and mutual TLS authentication"},"vault-auth":{"name":"Vault Authentication","description":"Secure routes and services with an access token and secret token, stored securely via Vault"},"bot-detection":{"name":"Bot Detection","description":"Detect and clock bots or custom clients"},"cors":{"name":"CORS","description":"Allow developers to make requests from the browser"},"ip-restriction":{"name":"IP Restriction","description":"Whitelist or blacklist IPs that can make requests"},"opa":{"name":"OPA","description":"Authorize requests against Open Policy Agent"},"kubernetes-sidecar-injector":{"name":"Kubernetes Sidecar Injector","description":"This plugin will inject Kong dataplane nodes and form a service mesh on top of Kubernetes"},"request-validator":{"name":"Request Validator","description":"Validate requests before they reach their upstream service."},"acl":{"name":"ACL","credential_name":"Access Control Group","description":"Control which consumers can access services"},"canary":{"name":"Canary Release","description":"Methodically roll out software changes to a subset of users"},"forward-proxy":{"name":"Forward Proxy","description":"Allow Kong to connect to intermediary transparent HTTP proxies"},"proxy-cache":{"name":"Proxy Caching","description":"Cache and serve commonly requested responses in Kong"},"proxy-cache-advanced":{"name":"Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"graphql-proxy-cache-advanced":{"name":"GraphQL Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"rate-limiting-advanced":{"name":"Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"rate-limiting":{"name":"Rate Limiting","description":"Rate-limit how many HTTP requests a developer can make"},"graphql-rate-limiting-advanced":{"name":"GraphQL Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"mocking":{"name":"Mocking","description":"Provide mock endpoints to test your APIs in development against your services"},"request-size-limiting":{"name":"Request Size Limiting","description":"Block requests with bodies greater than a specific size"},"request-termination":{"name":"Request Termination","description":"Terminate all requests with a specific response"},"response-ratelimiting":{"name":"Response Rate Limiting","description":"Rate-Limiting based on a custom response header value"},"route-by-header":{"name":"Route by Header","description":"Route requests based on request headers"},"ai-proxy":{"name":"AI Proxy","description":"Directly call a configured LLM, with mediated security and tuning parameters, and using standardised Kong request and response formats."},"ai-prompt-decorator":{"name":"AI Prompt Decorator","description":"Prepend and append chat prompts to AI Proxy plugin LLM requests."},"ai-prompt-template":{"name":"AI Prompt Template","description":"Define a set of templates, containing string variable placeholders, that can be consumed by users when used with the AI Proxy plugin."},"ai-prompt-guard":{"name":"AI Prompt Guard","description":"Define a set of valid, and a set of invalid, regular expression patterns when calling LLM models with the AI Proxy plugin."},"ai-request-transformer":{"name":"AI Request Transformer","description":"Use an LLM to transform API request from a user, before sending to the upstream service."},"ai-response-transformer":{"name":"AI Response Transformer","description":"Use an LLM to transform API responses from the upstream service, before returning to the user."},"ai-rate-limiting-advanced":{"name":"AI Rate Limiting Advanced","description":"Provides rate limiting for the providers used by any AI plugins."},"ai-azure-content-safety":{"name":"AI Azure Content Safety","description":"Allows checking and auditing of AI-Proxy plugin messages, using Azure Cognitive Services, before proxying to upstream large-language model."},"aws-lambda":{"name":"AWS Lambda","description":"Invoke and manage AWS Lambda functions from Kong"},"azure-functions":{"name":"Azure Functions","description":"Invoke Azure functions"},"openwhisk":{"name":"OpenWhisk","description":"Invoke and manage OpenWhisk actions from Kong"},"pre-function":{"name":"Kong Functions (Pre-Plugins)","description":"Add and manage custom lua functions to run before other plugins"},"post-function":{"name":"Kong Functions (Post-Plugins)","description":"Add and manage custom lua functions to run after other plugins"},"datadog":{"name":"Datadog","description":"Visualize metrics on Datadog"},"prometheus":{"name":"Prometheus","description":"Export performance metrics to Prometheus"},"zipkin":{"name":"Zipkin","description":"Propagate zipkin spans and report spans to a zipkin server"},"collector":{"name":"Collector","description":"Automate spec-driven development & anomaly detection (Early Access)"},"response-transformer-advanced":{"name":"Response Transformer Advanced","description":"Transform the response sent by the upstream server on the fly on Kong, before returning the response to the client."},"correlation-id":{"name":"Correlation ID","description":"Correlate requests and responses using a unique ID"},"request-transformer-advanced":{"name":"Request Transformer Advanced","description":"Use powerful regular expressions, variables and templates to transform API requests"},"request-transformer":{"name":"Request Transformer","description":"Modify the request before hitting the upstream server"},"response-transformer":{"name":"Response Transformer","description":"Modify the upstream response before returning it to the client"},"route-transformer-advanced":{"name":"Route Transformer Advanced","description":"Transforms the routing on the fly in Kong, changing the upstream server/port/path to hit"},"kafka-upstream":{"name":"Kafka Upstream","description":"Transform requests into Kafka messages in a topic"},"degraphql":{"name":"DeGraphQL","description":"Transform a GraphQL upstream into a REST API"},"exit-transformer":{"name":"Exit Transformer","description":"Customize Kong exit responses sent downstream"},"jq":{"name":"jq","description":"Transform JSON objects included in API requests or responses using jq programs"},"file-log":{"name":"File Log","description":"Append request and response data to a log file on disk"},"http-log":{"name":"HTTP Log","description":"Send request and response logs to an HTTP server"},"loggly":{"name":"Loggly","description":"Send request and response logs to Loggly"},"statsd-advanced":{"name":"StatsD Advanced","description":"Send traffic and Kong performance metrics to StatsD"},"statsd":{"name":"StatsD","description":"Send request and response logs to StatsD"},"syslog":{"name":"Syslog","description":"Send request and response logs to Syslog"},"tcp-log":{"name":"TCP Log","description":"Send request and response logs to a TCP server"},"udp-log":{"name":"UDP Log","description":"Send request and response logs to a UDP server"},"kafka-log":{"name":"Kafka Log","description":"Publish request and response logs to a Kafka topic"},"session":{"name":"Session","description":"Sessions for Kong authentication"},"upstream-tls":{"name":"Upstream TLS","description":"Enable TLS on upstream traffic by providing Kong with a list of trusted certificates."},"application-registration":{"name":"Portal Application Registration","description":"Allow portal developers to register applications against services"},"konnect-application-auth":{"name":"Konnect Application Auth","description":"Allow Konnect portal developers to register applications against services"},"acme":{"name":"ACME","description":"Let\'s Encrypt and ACMEv2 integration with Kong"},"grpc-gateway":{"name":"gRPC Gateway","description":"Access gRPC services through HTTP REST"},"grpc-web":{"name":"gRPC Web","description":"Allow browser clients to call gRPC services"},"upstream-timeout":{"name":"Upstream Timeout","description":"Configure read, send and connect timeouts to an upstream"},"opentelemetry":{"name":"OpenTelemetry","description":"Propagate distributed tracing spans and report low-level spans to a OTLP-compatible server"},"websocket-validator":{"name":"WebSocket Validator","description":"Validate individual WebSocket messages against to a user-specified schema before proxying them"},"websocket-size-limit":{"name":"WebSocket Size Limit","description":"Allows operators to specify a maximum size for incoming WebSocket messages"},"tls-metadata-headers":{"name":"TLS Metadata Headers","description":"Detects client certificates in requests, retrieves the TLS metadata, and proxies this metadata via HTTP headers"},"tls-handshake-modifier":{"name":"TLS Handshake Modifier","description":"Requests the client certificate and if it exists, makes it available to other plugins acting on the request"},"oas-validation":{"name":"OAS Validation","description":"Validate HTTP requests and responses based on an API specification."},"jwe-decrypt":{"name":"Kong JWE Decrypt","description":"The Kong JWE Decrypt plugin makes it possible to decrypt an inbound token(JWE) in a request."},"xml-threat-protection":{"name":"XML Threat Protection","description":"Reduce the risk of XML attacks by checking the structure of XML payloads."},"saml":{"name":"SAML","description":"Security Assertion Markup Language (SAML) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider."},"app-dynamics":{"name":"AppDynamics","description":"This plugin integrates Kong with the AppDynamics APM platform so that proxy requests handled by Kong can be identified and analyzed in AppDynamics."},"json-threat-protection":{"name":"JSON Threat Protection","description":"Apply size checks on JSON payload and minimize risk of content-level attacks"},"standard-webhooks":{"name":"Standard Webhooks","description":"Validate incoming webhooks adhere to the Standard Webhooks specification, to which Kong is a contributor"},"ai-proxy-advanced":{"name":"AI Proxy Advanced","description":"Route across different LLMs and models using advanced load balancing algorithms, including semantic routing."},"ai-semantic-cache":{"name":"AI Semantic Cache","description":"Semantically cache AI requests to any LLM to reduce latency, improve end-user experiences and optimize GenAI costs."},"ai-semantic-prompt-guard":{"name":"AI Semantic Prompt Guard","description":"Semantically and intelligently create allow and deny lists of topics that can be requested across every LLM."},"header-cert-auth":{"name":"Header Certificate Authentication","description":"Authenticate clients with MTLS certificate passed in header by a WAF or load balancer"},"upstream-oauth":{"name":"Upstream OAuth","description":"Configure Kong to obtain a OAuth2 token to consume an upstream API"},"confluent":{"name":"Confluent","description":"Streamlines integration with Confluent Cloud and transforms requests into messages published to a Confluent topic."},"service-protection":{"name":"Service Protection","description":"Prevent abuse and protect services with absolute limits on the number of requests reaching the service."},"injection-protection":{"name":"Injection Protection","description":"Protect against injection attacks by rejecting requests that match common injections patterns."},"redirect":{"name":"Redirect","description":"Redirect incoming requests to a new URL"},"kafka-consume":{"name":"Kafka Consume","description":"Consume messages from Kafka topics over HTTP protocols."},"confluent-consume":{"name":"Confluent Consume","description":"Consume messages from Confluent Kafka topics over HTTP protocols"},"request-callout":{"name":"Request Callout","description":"Callout to third party APIs as part of request processing."},"ai-sanitizer":{"name":"AI Sanitizer","description":"Sanitize personal or sensitive information from prompts before sending to LLM."},"ai-rag-injector":{"name":"AI RAG Injector","description":"Attach contextual knowledge from vector databases with flexible template to LLM prompts."},"datakit":{"name":"Datakit","description":"Datakit is a workflow engine for working with external APIs."},"ai-prompt-compressor":{"name":"AI Prompt Compressor","description":"The AI Prompt Compressor reduces costs associated with LLMs by compressing prompts."},"solace-upstream":{"name":"Solace Upstream","description":"Transform requests into Solace messages in a Solace queue or topic."},"ai-aws-guardrails":{"name":"AI AWS GuardRails","description":"The AI AWS GuardRails enables enforcement of introspection with the AWS GuardRails service for all requests processed by the AI Proxy plugin."},"ace":{"name":"Konnect Access Control Enforcement","description":"Enable Developer Self-Service for Konnect Dev Portals."},"solace-consume":{"name":"Solace Consume","description":"Consume messages from Solace and make them available through HTTP endpoints."},"solace-log":{"name":"Solace Log","description":"Publish request and response logs to a Solace topic."},"ai-llm-as-judge":{"name":"AI LLM Judge","description":"Evaluate LLM responses with an external LLM service and use accuracy scores to drive dynamic load balancing for `llm/v1/chat` requests."},"ai-mcp-proxy":{"name":"AI MCP Proxy","description":"Convert APIs into MCP tools, proxy MCP servers, expose multiple MCP tools, and observe MCP traffic in real time."},"ai-gcp-model-armor":{"name":"AI GCP Model Armor","description":"Audit and validate AI Proxy messages with Google Cloud Model Armor before forwarding them to an upstream LLM."},"ai-mcp-oauth2":{"name":"AI MCP OAuth2","description":"Secure MCP server access with OAuth2 authentication."},"ai-semantic-response-guard":{"name":"AI Semantic Response Guard","description":"Permit or block prompts based on semantic similarity to known LLM responses, preventing misuse of `llm/v1/chat` or `llm/v1/completions` requests."},"ai-lakera-guard":{"name":"AI Lakera Guard","description":"Audit and enforce safety policies on LLM requests and responses using the AI AWS Lakera plugin before they reach upstream LLMs."},"ai-a2a-proxy":{"name":"AI A2A Proxy","description":"Securely proxy A2A agents, with real-time RPC tracing and monitoring."},"ai-custom-guardrail":{"name":"AI Custom Guardrail","description":"Integrate with any 3rd-party Guardrail service, with customizable enforcement modes — choose whether violations block, log, or allow traffic to proceed."},"metering-and-billing":{"name":"Metering & Billing","description":"Meter API requests and AI token usage for usage-based billing. Supports flexible customer identification, custom pricing dimensions, and fine-grained traffic filtering. Integrates natively with Konnect Metering & Billing."},"governance":{"name":"Governance","description":"Enforce feature-level access control and credit-balance gating for API consumers. Integrates with Konnect Metering & Billing to allow or deny requests based on customer entitlements."}},"fields":{"service":"Service ID","route":"Route ID","consumer":"Consumer ID","consumer_group":"Consumer group ID"},"select":{"custom_badge_text":"This plugin is data plane node specific","cloned_from_badge":"Cloned from {link}","installed_custom_badge":"Installed custom","streamed_custom_badge":"Streamed custom","unavailable_tooltip":"This plugin is not available","already_exists":"This plugin is already applied to this resource","misc_plugins":"Other plugins","show_all":"Show all","view_more":"View more","view_less":"View less","filter":{"title":"Filter plugins","featured":"Featured","type":"Type","clear":"Clear"},"list":{"table_headers":{"name":"Plugin","description":"Description"}},"tabs":{"kong":{"title":"Kong plugins","description":"Kong plugins are bundled by default with Kong Gateway and are available across all control planes.","empty_title":"No plugins","empty_description":"No plugins are available."},"custom":{"title":"Custom plugins","description":"Custom plugins will be available in this control plane only.","disabled_tooltip":"Custom plugins are not available with this gateway. Create a hybrid or dedicated cloud gateway to leverage custom plugins.","fetch_error":"Unable to load some custom plugins. Bundled plugins are still available.","license_required":"Plugin cloning requires a license to be used.","empty_title":"No custom plugins","empty_description":"No custom plugins have been added to this control plane.","create":{"name":"Custom plugin","description":"Upload schema file to create custom plugin"}}},"highlighted_plugins":{"title":"Highlighted plugins"}},"form":{"button_deck_customize":"Customize before copying to CLI","disable_data_retrieving":"You do not have permission to select {scope}","disable_source_scope_change":"Changing the {scope} is not allowed when configuring a plugin under it","no_selection":"No selection...","fields":{"enabled":{"label":"Enabled","on_text":"This plugin is enabled","off_text":"This plugin is disabled"},"plugin_status":{"label":"Plugin status","text_on":"Enabled","text_off":"Disabled"},"instance_name":{"label":"Name","placeholder":"Enter a unique name","help":"A custom name for this plugin instance to help with identifying from the list view."},"condition":{"label":"Execution condition","placeholder":"Enter an expression","tooltip":"An expression used for conditional control over plugin execution. If the expression evaluates to true during the request flow, the plugin is executed; otherwise, it is skipped.","help":{"learn":"Learn more","about":"{link} about plugin conditions."}},"protocols":{"label":"Protocols","placeholder":"Select valid protocols for the plugin","placeholderWithDefaultValues":"Select valid protocols for the plugin. Default protocols: {protocols}","help":"A list of the request protocols that will trigger this plugin. The default value, as well as the possible values allowed on this field, may change depending on the plugin type."},"tags":{"label":"Tags","help":"An optional set of strings for grouping and filtering, separated by commas.","placeholder":"Tag1, Tag2, Tag3"}},"scoping":{"label":"Scoped","placeholder":"Search by name or UUID","disable_global_radio":"The plugin is set to \'scoped\' by default. To apply a plugin globally, please navigate to the global plugin list page.","global":{"label":"Global","help":"All services, routes, and consumers"},"gateway_service":{"label":"Select a gateway service","help":"The gateway service to which this plugin configuration will apply","placeholder":"Select a gateway service","plural":"Gateway services"},"route":{"label":"Select a route","help":"The route that this plugin configuration will target","placeholder":"Select a route","plural":"Routes"},"consumer":{"label":"Select a consumer","help":"The consumer that this plugin configuration will target","placeholder":"Select a consumer","plural":"Consumers"},"consumer_group":{"label":"Select a consumer group","help":"The consumer group that this plugin configuration will target","placeholder":"Select a consumer group","plural":"Consumer groups"}},"grouping":{"plugin_configuration":{"title":"Plugin configuration","description":"Configuration parameters for this plugin. View advanced parameters for extended configuration.","empty":"This plugin does not have required parameters."},"advanced_parameters":{"view":"Show additional settings","hide":"Hide additional settings"}},"field_rules":{"at_least_one_of":"At least one of the following values is required: {parameters}.","only_one_of":"Exactly one of these parameters is required: {parameters}","mutually_required":"These values must be used together: {parameters}.","mutually_exclusive":"Only one of these values can be used: {parameters}.","only_one_of_mutually_required":"Exactly one of the following parameter combinations is required (all parameters within a chosen combination are required):"},"sections":{"plugin_scope":{"title":"Plugin scope","description":"Choose whether this plugin applies to all traffic (global) or is scoped to a specific service, route, or consumer."},"general_info":{"title":"General information","description":"Add details to help identify and manage your plugin."},"plugin_config":{"title":"Plugin configuration","description":"Set the plugin\'s behavior by defining its configuration settings."},"plugin_general_info":{"description":"Add a name or tags to help you identify and manage this plugin later."},"code_mode":{"title":"Code editor","description":"Configure this plugin by using YAML configuration."}}},"free-form":{"editor_mode":{"visual":"Visual editor","code":"Code editor"},"code-lens":{"entity":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","certificate":"Certificate"},"field":{"name":"{entity} \\"{value}\\"","username":"Username \\"{value}\\"","custom_id":"Custom ID \\"{value}\\"","subject":"Subject \\"{value}\\"","expires_after":"Expires after \\"{value}\\""},"action":{"view_entity":"View {title}","copy_certificate":"Copy certificate","copy_uuid":"Copy UUID","retry_fetch":"Retry fetch (Hover for details)"},"unknown_error":"Unknown error"},"acl":{"mode":{"allow":"Use allow list","deny":"Use deny list"}},"ai-mcp-proxy":{"default_acl_item_label":"Default ACL #{index}","tool_item_label":"Tool #{index}"},"request-callout":{"entity_name":"Request callout","by_lua_placeholder":"Enter Lua script here..."},"jwt-signer":{"keyset_url_required":"Provide a valid HTTP/HTTPS URL to ensure signing works correctly when \\"{signingField}\\" is enabled and \\"{headerField}\\" is set."},"metering-and-billing":{"sections":{"plugin_config":{"title":"Plugin configuration","description":"Configure the Metering & Billing plugin."},"metering":{"title":"What to meter"},"subject":{"title":"Who to bill (subject)","description":"Define how billing subjects are identified."},"ingestion":{"title":"Connection","description":"Configure how metered data is delivered to the billing service."},"queue":{"title":"Queue","description":"Configure internal event queue settings."}},"fields":{"meter_api_requests":{"label":"Meter API requests","description":"Emit a usage event for each API Gateway request."},"meter_ai_token_usage":{"label":"Meter AI token usage","description":"Emit events for LLM input and output tokens on AI Gateway requests. Each request produces separate input/output events so they can be priced independently."},"ingest_endpoint":{"description":"The URL of the metering data ingest endpoint.","help":"For Konnect Metering & Billing, use the regional endpoint from your Metering & Billing settings. For self-hosted OpenMeter, use your ingest URL."},"api_token":{"description":"Bearer token for authenticating requests to the ingest endpoint."},"look_up_value_in":{"label":"Look up subject in","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"e.g. x-customer-id, x-api-key, x-tenant"},"queue":{"max_coalescing_delay":{"label":"Max coalescing delay (s)"},"initial_retry_delay":{"label":"Initial retry delay (s)"},"max_retry_delay":{"label":"Max retry delay (s)"},"max_retry_time":{"label":"Max retry time (s)"}},"attributes":{"title":"Event attributes","description":"Attach custom dimensions to metered events.","look_up_value_in":{"placeholder":"e.g., x-priority-id"},"event_property_name":{"placeholder":"e.g., priority"}},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"}}},"governance":{"sections":{"configuration":{"title":"Plugin configuration","description":"Configure the Governance plugin subject, feature, and connection settings."},"governance":{"title":"Governance settings","description":"Configure access control behavior and response codes."},"subject":{"title":"Whose access to govern (subject)"},"feature":{"title":"Feature"},"connection":{"title":"Connection","description":"Configure how the plugin connects to the governance query endpoint."},"redis":{"title":"Redis"},"cache_sync":{"title":"Cache and sync"}},"fields":{"look_up_value_in":{"label":"Whose access to govern (Look up subject in)","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"Name of the header or query parameter that carries the customer identifier."},"feature_key":{"label":"Feature to govern access","help":"Feature that will control access to the scope where the plugin is applied.","metered_badge":"Metered feature","load_error":"Could not load features from the governance service."},"governance_endpoint":{"help":"For Konnect Metering & Billing, use the regional endpoint for Metering & Billing Query Governance Access. For self-hosted OpenMeter, use the Query Governance Access endpoint of your self-hosted instance."},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"},"sync_rate":{"label":"Sync rate (s)"},"refresh_interval":{"label":"Refresh interval (s)"},"max_stale_seconds":{"label":"Max stale seconds"},"l1_ttl":{"label":"L1 TTL (s)"},"l2_ttl":{"label":"L2 TTL (s)"},"credit_balance_required":{"label":"Credit balance lookup","yes_label":"Yes","yes_description":"A credit balance above zero is required for access to this feature.","no_label":"No","no_description":"Customers can access this feature regardless of their credit balance."},"fail_policy":{"label":"Plugin failure mode","allow_label":"Allow access","allow_description":"In the case of plugin failure, allow access to feature.","deny_label":"Deny access","deny_description":"In the case of plugin failure, deny access to feature."},"deny_unknown_customers":{"label":"Unknown customer access","allow_label":"Allow access","allow_description":"The gateway will allow access for unknown customers.","deny_label":"Deny access","deny_description":"The gateway will deny access for unknown customers."},"response":{"label":"Response mapping","columns":{"code":"Response code","status":"Status code","message":"Message"},"defaults":{"NO_CREDIT_AVAILABLE":"Customer has no credit available.","USAGE_LIMIT_REACHED":"Customer has reached usage limit for feature.","FEATURE_UNAVAILABLE":"Feature is not available for the customer.","FEATURE_NOT_FOUND":"Feature not found.","CUSTOMER_NOT_FOUND":"Customer is not found by subject."}}}},"datakit":{"plugin_config":{"title":"Flow editor"},"description_code":"Configure this plugin by using YAML configuration. If you are copy/pasting in examples from the documentation - paste from below the <code>config</code> block.","description_flow":"Build flows visually with a drag-and-drop editor for Datakit. Visualize node connections, inputs, and outputs as you design.","description_example":"Start with a use case:","detected_config_format":"Detected {format} configuration. Do you want to convert it to Datakit configuration?","detected_config_format_title":"Convert configuration","detected_config_format_confirm":"Convert","examples":{"authenticateThirdPartyWithDynamicUrl":"Authenticate Kong to a third-party service resolved at runtime","authenticateThirdParty":"Authenticate Kong to a third-party service","authenticateWithVaultSecret":"Authenticate to a third-party service using Vault secrets","clearHeaders":"Clear request headers","combineTwoApisIntoOneResponse":"Combine multiple API responses","conditionallyStoreCachedItems":"Conditionally fetch or store cache data","convertJsonIntoXml":"Transform JSON into XML","convertJsonToXmlAndBack":"Transform JSON into XML and back","convertXmlIntoJson":"Transform XML into JSON","manipulateRequestHeaders":"Manipulate request headers"},"flow_editor":{"mode":"Flow editor","name":"Datakit flow editor","cta":"Go to flow editor","disabled_tooltip":"The flow editor is unavailable due to critical configuration errors or features not supported in the flow editor:<br/><code>{reason}</code>","expand_panel":"Expand panel","collapse_panel":"Collapse panel","return_to_config":"Return to plugin configuration","canvas_panel":{"request":"Request","response":"Response","node_count_plural":"{count} nodes","node_count_singular":"1 node"},"panel_segments":{"nodes":"Nodes","resources":{"title":"Resources","vault":{"title":"Vault secrets","add_button":"Add vault resource","name_exists_error":"Vault name already exists","name_required_error":"Vault name is required","edit":"Edit","delete":"Delete"},"cache":{"title":"Cache configuration","add_button":"Add cache configuration","strategy_options":{"memory":"Memory","redis":"Redis"},"select_redis_configuration":"Select a shared Redis configuration","inline_config":"Inline config","inline_config_preview":"You are using a dedicated Redis configuration, This is a preview of your current setup, please edit it in code editor"}}},"vault_secret_picker":{"title":"Add secret to Datakit","proceed_button_text":"Add secret","secret_name":{"label":"Secret name","placeholder":"Enter a name","help":"A unique identifier for this secret in your Datakit configuration"}},"node_panel":{"title":"Node types","description":"Drag a node onto the canvas to add it to your data flow.","groups":{"external_interaction":"External interaction","control_flow":"Control flow","data_transformation":"Data transformation","data_value":"Data value","authentication":"Authentication"}},"examples":"Examples","debug":{"label":"Debug","description":"Enables detailed error messages in client responses, making debugging easier. <a href=\\"https://developer.konghq.com/plugins/datakit/#debugging\\" target=\\"_blank\\">See the docs</a> for details."},"actions":{"zoom_in":"Zoom in","zoom_out":"Zoom out","fit_view":"Zoom to fit","auto_layout":"Auto layout","undo":"Undo","redo":"Redo","duplicate":"Duplicate","remove_from_branch":"Remove from branch","delete":"Delete","view_docs":"View docs","done":"Done"},"node_types":{"call":{"summary":"Call a third-party API","description":"Send an HTTP request and retrieve the response."},"jq":{"summary":"Transform data and cast variables with jq","description":"The <code>jq</code> node executes a jq script for processing JSON. See the official <a href=\\"https://jqlang.org\\" target=\\"_blank\\">jq docs</a> for more details."},"exit":{"summary":"Return directly to the client","description":"Trigger an early exit that produces a direct response, rather than forwarding a proxied response."},"property":{"summary":"Get and set Kong Gateway-specific data","description":"Get and set Kong Gateway host and request properties."},"static":{"summary":"Configure static input values ahead of time","description":"Emits static values to be used as inputs for other nodes. The <code>static</code> node can help you with hardcoding some known value for an input."},"branch":{"summary":"Execute nodes based on matching input conditions","description":"Execute different nodes based on matching input conditions, such as a cache hit or miss."},"cache":{"summary":"Store and fetch cached data","description":"Store data into cache and fetch cached data from cache."},"xml_to_json":{"summary":"Transform XML to JSON","description":"Transform XML to JSON."},"json_to_xml":{"summary":"Transform JSON to XML","description":"Transform JSON to XML."},"jwt_decode":{"summary":"Decode JWT headers and claims","description":"Parse a JWT without verifying its signature."},"jwt_sign":{"summary":"Create and sign JWTs","description":"Generate a signed JWT from configured claims and a signing key."},"jwt_verify":{"summary":"Verify JWT signature and claims","description":"Verify a JWT signature and validate claims such as exp, nbf, iss, and aud."},"request":{"name":"request","description":"Reads incoming client request properties. You cannot specify request node input."},"response":{"name":"response","description":"Updates properties of the outgoing client response."},"service_request":{"name":"service request","description":"Updates properties of the request sent to the service being proxied to."},"service_response":{"name":"service response","description":"Reads response properties from the service being proxied to."},"vault":{"name":"Vault","description":"Vault is a tool for securely accessing secrets."}},"node_properties":{"name":"Name","configuration":"Configuration","input":{"label":"Inputs configuration","placeholder":"Select a source","add_button":"Add an input","or":"or","input":"Input","fields":"Fields","source":"Source","tooltip":"Fields are part of the node input. A source can connect to either the fields or the input, but not both."},"input_name":{"label":"Input name","placeholder":"Enter an input name"},"jq":{"label":"jq script","help":"Refer to {link} for full documentation."},"output_value":{"label":"Output value","value_name":"Value name","value":"Value","add_button":"Add a value"},"property":{"get":"get","set":"set"},"branch":{"placeholder":"Select nodes"},"jwt":{"static_claims":{"label":"Static claims","help":"Enter a JSON object. It will be stored as the node\'s static claims map.","errors":{"invalid_json_object":"Static claims must be a valid JSON object"}}},"errors":{"invalid_identifier_format":"{fieldName} must start with a letter or underscore and contain only letters, numbers, underscores, or hyphens","invalid_url_format":"Not a valid URL format","not_empty":"{fieldName} is required","not_float":"{fieldName} must be a float","not_integer":"{fieldName} must be an integer","not_number":"{fieldName} must be a number","not_unique":"{fieldName} must be unique","number_range":"{fieldName} must be between {min} and {max}","string_len_range":"{fieldName} must be between {minLength} and {maxLength} characters","reserved_node_name":"\\"{nodeName}\\" is a reserved node name","attributes_required":"Provide at least one of attributes_block_name or attributes_name_prefix"}},"error":{"invalid_connection":"Invalid connection","branch_cycle":"Cannot create a circular branch relationship"},"confirm":{"title":"Connection conflict","message":{"confirm":"Are you sure you want to make this change?","switch":"You can connect an output source to either all inputs of a node or to individual inputs.","override":"Each input can connect to only one output, but one output can connect to many inputs.","branch_replace":"This node already belongs to another branch. Move it to the new branch?"},"proceed":"Yes, update"},"leave_confirm":"Leave current page? Changes you made may not be saved."},"code_editor":{"mode":"Code editor"}},"vault_picker":{"component_error":"The vault secret picker is not available"},"tag_helper":"Use comma to separate values. eg: value1, value2","foreign_placeholder":"Enter a UUID of {entity}"}}'), yn = { title: "Redis configuration", managed_ui: { title: "Redis", shared_configuration: { label: "Use shared configuration", description: "Select an existing shared Redis configuration or create a new one. Any updates to this configuration will automatically apply to all associated plugins.", badge: "Recommended" }, dedicated_configuration: { label: "Use locally-scoped configuration", description: "Create and use a Redis configuration specifically for this plugin." }, selector: { placeholder: "Filter Redis configurations...", create_new: "New Redis" } }, shared_configuration: { label: "Shared configuration", description: "Select an existing shared Redis configuration or create a new one. Changes to this configuration automatically apply to all associated plugins.", title: "Shared Redis configuration", error: "Fetching shared Redis configurations failed." }, dedicated_configuration: { label: "Dedicated configuration", description: "Create a Redis configuration that is used only by this plugin. Changes won’t affect other plugins." }, config_card: { common_fields: { created_at_label: "Created at", updated_at_label: "Last updated at", type_label: "Redis type" } } }, vn = { plugin: "plugin" }, bn = { key_auth_identity_realms: { cp_label: "Current control plane", cp_group_label: "Control plane", realm_group_label: "Realms (can only select one)" }, kong_identity: { title: "Who should manage authentication and credentials?", description_with_realms: "Use Consumers or centrally managed consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", description_without_realms: "Use Consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", learn_more: "Learn more.", incompatible_data_plane_alert: "We detected that one or more data plane nodes are running a version earlier than 3.15. Requests handled by those data plane nodes will use consumers instead of Kong Identity principals.", kong_identity_label: "Kong Identity", kong_identity_description_key_auth: "Use Kong Identity to authenticate API keys and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", kong_identity_description_basic_auth: "Use Kong Identity to authenticate Basic Auth credentials and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", consumers_label: "Consumers", consumers_description_key_auth: "Use consumer-managed API keys. Consumers provide their API key in a request header, query parameter, or request body to authenticate requests.", consumers_description_basic_auth: "Use consumer-managed Basic Auth credentials. Consumers authenticate requests using a username and password.", centrally_managed_label: "Centrally managed consumers", centrally_managed_description: "Authenticate centrally managed consumers in Konnect using identity realms. Identity realms are scoped to the control plane by default.", identity_realms_required: "To use centrally managed consumers, you must select at least one Centrally managed consumer realm.", error_on_miss_label: "If principal lookup fails", error_on_miss_reject_label: "Reject the request", error_on_miss_reject_description: "Treat the request as unauthenticated if Kong Identity cannot resolve the principal.", error_on_miss_continue_label: "Continue without a principal", error_on_miss_continue_description: "Allow the request to continue without resolving a principal.", configure_title: "Configure Kong Identity", configure_description: "Kong Identity uses principals to represent authenticated services or applications. Create your first principal in Kong Identity to start using principal-based authentication. On data plane nodes running versions earlier than 3.15, authentication continues using consumers.", create_principal: "Create principal", configure_learn_more: "Learn more", leave_prompt_title: "Leave this page?", leave_prompt_message: "Your unsaved changes will be lost if you continue.", leave_prompt_action: "Leave page" } }, _n = { window_type: { label: "Rate limit window type", help: "Sets the time window type to either <code>sliding</code> (default) or <code>fixed</code>.<br><ul><li>Sliding windows apply the rate limiting logic while taking into account previous hit rates (from the window that immediately precedes the current) using a dynamic weight.</li><li>Fixed windows consist of buckets that are statically assigned to a definitive time range, each request is mapped to only one fixed window based on its timestamp and will affect only that window's counters.</li></ul>", options: { fixed: "Fixed", sliding: "Sliding" } }, request_limits: { title: "Request limits", subtitle: "Set one or more limits on the number of API requests allowed within a defined timeframe.", label: "Limit", label_index: "Limit {index}", request_number: "Request number", time_interval: "Time interval", interval_determiner: "Every", seconds: "Seconds" }, error_message: { label: "Error message", code_placeholder: "Code message", message_placeholder: "Error message", help: "Set a custom error code and message to be returned when the rate limit is exceeded." }, start_with_a_use_case: "Start with a use case:", use_cases: { fixed: { hourly_500: { label: "500 requests every hour", description: "A fixed limit of 500 requests per hour resetting sharply on the hour, ensuring no user can exceed this limit." }, half_hourly_200: { label: "200 requests every 30 minutes", description: "Users are allowed 200 requests per 30 minutes, resetting exactly on the 30 minute mark with no carryover of unused limits." }, daily_500: { label: "500 requests every day", description: "A strict limit of 5000 requests per day resetting promptly at midnight, preventing any burst traffic or inconsistent user experiences." } }, sliding: { hourly_100: { label: "100 requests every hour", description: "Maximum of 100 requests every rolling hour, continuously adjusting the count over the course of the hour. No hard limit or known reset." }, half_hourly_300: { label: "300 requests every 30 minutes", description: "Each user can make up to 300 requests in any rolling 30 minute period, with older requests dropping off as new requests are made." }, hourly_500: { label: "500 requests every hour", description: `Each user is allowed 500 requests per hour.
|
|
2246
2253
|
If the limit is exceeded and the user receives a 429 error, each additional request within the sliding window (hour)
|
|
2247
|
-
will extend the wait time by about 12 minutes, continuously adjusting as new requests are made.` } } } },
|
|
2248
|
-
actions:
|
|
2249
|
-
view_configuration:
|
|
2254
|
+
will extend the wait time by about 12 minutes, continuously adjusting as new requests are made.` } } } }, An = { step1: { title: "Custom plugin type", types: { installed: { label: "Installed custom plugin", description: "Install and manage plugins with full control over deployment and runtime. Requires restarting data planes." }, streamed: { label: "Streamed custom plugin", description: "Deploy and update plugins on running data planes without requiring gateway access." }, cloned: { label: "Cloned plugin", description: "Duplicate an existing plugin to run multiple instances within a single request." } }, compare_trigger: "Compare deployment options", compare_table: { columns: { installed: "Installed custom plugin", streamed: "Streamed custom plugin", cloned: "Cloned plugin" }, rows: { main_use_case: { header: "Main use case", installed: "Extend Kong functionality with custom plugins and control who can modify and roll out changes.", streamed: "Extend Kong functionality with plugins without requiring sysadmin access to data plane instances.", cloned: "Modify an existing plugin to run multiple instances with different names or priorities." }, file_supplied: { header: "File supplied", installed: { handler: "handler.lua", schema: "schema.lua", additional: "Any additional files or libraries needed" }, streamed: { handler: "handler.lua", schema: "schema.lua" } }, how_installed: { header: "How it's installed", installed: "Install directly on the data plane", streamed: "Through gateway configuration changes", cloned: "Through gateway configuration changes" }, sandboxing: { header: "Sandboxing", streamed: "Follows the standard sandboxing settings. {link}", streamed_link: "Link to docs", cloned: "Inherit the same sandboxing as the original plugins" }, data_plane_reload: { header: "Data plane reload" } } } }, step2_files: { title: "Custom plugin files", schema_file: { label: "Upload schema file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: "Only Lua based schemas are supported by Konnect. Other plugin modules can be in any language as desired. Learn more" }, handler_file: { label: "Upload handler file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: "Upload plugin handler to the data plane." }, plugin_modules: { label: "Plugin modules", alert: "Upload all plugin modules to the data plane: schema.lua, handler.lua" } }, step2_clone: { title: "Clone plugin", select_plugin: { label: "Select a plugin", placeholder: "Type to search" } }, step3: { title: "General information", description: "Enter a custom name for this custom plugin", name: { label: "Name", placeholder: "Enter a unique name", help: "The name must be identical to the name of the plugin in the schema file." }, alias_name: { label: "Alias name", placeholder: "Enter a unique name", help: "Format: ^[a-z][a-z0-9-]*[a-z0-9]$. The name must be unique enough to avoid future conflicts with bundled plugins." }, priority: { label: "Priority", tooltip: "Set the execution priority for this cloned plugin", help: { text: "Optional. Use a number to set the absolute execution priority. If priority isn't set, plugins run in alphabetical order. {link} in the docs.", link: "Learn more" } } }, errors: { file_read_error: "Failed to read file content. Please try again.", file_too_large: "File size exceeds the maximum limit of 1 MB.", plugin_not_found: "The selected plugin could not be found. Please refresh the list and try again.", no_supported_types: "No supported custom plugin types are available in this context.", unsupported_plugin_type: "Unsupported plugin type {type}." } }, wn = {
|
|
2255
|
+
actions: cn,
|
|
2256
|
+
view_configuration: dn,
|
|
2250
2257
|
delete: { title: "Delete a plugin", custom_title: "Delete {name}", custom_plugin: "Custom plugin", description: "This action cannot be reversed.", description_custom: "Please ensure this plugin is not in use. This action cannot be reversed.", plugin_schema_in_use_title: "Unable to delete custom plugin", plugin_schema_in_use_message: "This custom plugin is currently in use in this control plane. Please delete any existing instances before removing this schema.", confirmModalText1: "Are you sure you want to delete", confirmModalText2: "Please ensure this plugin is not in use. This delete action cannot be reversed.", confirm_text: "Type {name} to confirm your action", success_message: "Successfully deleted custom plugin {name}" },
|
|
2251
|
-
copy:
|
|
2252
|
-
errors:
|
|
2253
|
-
search:
|
|
2254
|
-
labels:
|
|
2255
|
-
plugins:
|
|
2256
|
-
redis:
|
|
2257
|
-
glossary:
|
|
2258
|
-
custom_field:
|
|
2259
|
-
sp:
|
|
2260
|
-
custom_plugin_form:
|
|
2258
|
+
copy: pn,
|
|
2259
|
+
errors: mn,
|
|
2260
|
+
search: fn,
|
|
2261
|
+
labels: hn,
|
|
2262
|
+
plugins: gn,
|
|
2263
|
+
redis: yn,
|
|
2264
|
+
glossary: vn,
|
|
2265
|
+
custom_field: bn,
|
|
2266
|
+
sp: _n,
|
|
2267
|
+
custom_plugin_form: An
|
|
2261
2268
|
};
|
|
2262
|
-
function
|
|
2263
|
-
const e =
|
|
2269
|
+
function kn() {
|
|
2270
|
+
const e = it("en-us", wn);
|
|
2264
2271
|
return {
|
|
2265
2272
|
i18n: e,
|
|
2266
|
-
i18nT:
|
|
2273
|
+
i18nT: ot(e)
|
|
2267
2274
|
// Translation component <i18n-t>
|
|
2268
2275
|
};
|
|
2269
2276
|
}
|
|
2270
|
-
const
|
|
2277
|
+
const Sn = ["data-testid"], Tn = /* @__PURE__ */ U({
|
|
2271
2278
|
__name: "SwitchField",
|
|
2272
2279
|
props: {
|
|
2273
2280
|
labelAttributes: {},
|
|
@@ -2277,23 +2284,23 @@ const kn = ["data-testid"], Sn = /* @__PURE__ */ N({
|
|
|
2277
2284
|
name: {}
|
|
2278
2285
|
},
|
|
2279
2286
|
emits: ["update:modelValue"],
|
|
2280
|
-
setup(e, { emit:
|
|
2281
|
-
const { i18n: { t } } =
|
|
2287
|
+
setup(e, { emit: s }) {
|
|
2288
|
+
const { i18n: { t } } = kn(), n = se(e, ["name", "enabledText", "disabledText"]), { value: r, hide: a, emptyOrDefaultValue: c, ...d } = Z(E(() => e.name)), p = s, i = (g) => {
|
|
2282
2289
|
r.value = g, p("update:modelValue", g);
|
|
2283
|
-
}, m =
|
|
2284
|
-
return (g,
|
|
2290
|
+
}, m = ae(d.path, n);
|
|
2291
|
+
return (g, l) => {
|
|
2285
2292
|
const u = D("KAlert");
|
|
2286
|
-
return
|
|
2293
|
+
return d.error ? (_(), T(u, {
|
|
2287
2294
|
key: 0,
|
|
2288
2295
|
appearance: "danger",
|
|
2289
|
-
message:
|
|
2296
|
+
message: d.error.message
|
|
2290
2297
|
}, null, 8, ["message"])) : X((_(), K("div", {
|
|
2291
2298
|
key: 1,
|
|
2292
2299
|
class: "ff-switch-field",
|
|
2293
|
-
"data-testid": `ff-${
|
|
2300
|
+
"data-testid": `ff-${d.path.value}`
|
|
2294
2301
|
}, [
|
|
2295
|
-
$(o(Et),
|
|
2296
|
-
"model-value": !!(o(r) == null ? o(
|
|
2302
|
+
$(o(Et), z(o(m), {
|
|
2303
|
+
"model-value": !!(o(r) == null ? o(c) : o(r)),
|
|
2297
2304
|
"onUpdate:modelValue": i
|
|
2298
2305
|
}), {
|
|
2299
2306
|
label: q(() => [
|
|
@@ -2301,54 +2308,54 @@ const kn = ["data-testid"], Sn = /* @__PURE__ */ N({
|
|
|
2301
2308
|
]),
|
|
2302
2309
|
_: 1
|
|
2303
2310
|
}, 16, ["model-value"])
|
|
2304
|
-
], 8,
|
|
2311
|
+
], 8, Sn)), [
|
|
2305
2312
|
[Q, !o(a)]
|
|
2306
2313
|
]);
|
|
2307
2314
|
};
|
|
2308
2315
|
}
|
|
2309
|
-
}),
|
|
2316
|
+
}), Fn = /* @__PURE__ */ W(Tn, [["__scopeId", "data-v-0b4c3942"]]);
|
|
2310
2317
|
export {
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2318
|
+
La as ArrayField,
|
|
2319
|
+
va as BooleanField,
|
|
2320
|
+
Se as EnumField,
|
|
2321
|
+
Je as FIELD_PATH_KEY,
|
|
2322
|
+
ke as FIELD_RENDERERS,
|
|
2316
2323
|
Fe as FIELD_RENDERER_SLOTS,
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2324
|
+
Ye as FIELD_RESET_LABEL_PATH_SETTING,
|
|
2325
|
+
he as Field,
|
|
2326
|
+
On as FieldRenderer,
|
|
2327
|
+
an as ForeignField,
|
|
2321
2328
|
En as Form,
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2329
|
+
Za as JsonField,
|
|
2330
|
+
un as MapField,
|
|
2331
|
+
Wa as NumberField,
|
|
2332
|
+
Ua as ObjectField,
|
|
2326
2333
|
gt as StringArrayField,
|
|
2327
2334
|
ht as StringField,
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2335
|
+
Fn as SwitchField,
|
|
2336
|
+
zt as buildAncestor,
|
|
2337
|
+
qe as buildArraySchemaMap,
|
|
2338
|
+
Me as buildMapSchemaMap,
|
|
2339
|
+
Le as buildRecordSchemaMap,
|
|
2340
|
+
Wt as buildSchemaMap,
|
|
2334
2341
|
ft as defaultLabelFormatter,
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2342
|
+
_e as generalizePath,
|
|
2343
|
+
aa as provideFormShared,
|
|
2344
|
+
Kn as renderRuleExactMatch,
|
|
2338
2345
|
pt as replaceByDictionary,
|
|
2339
2346
|
mt as replaceByDictionaryInFieldName,
|
|
2340
2347
|
Z as useField,
|
|
2341
2348
|
ct as useFieldAncestors,
|
|
2342
|
-
|
|
2343
|
-
|
|
2349
|
+
ae as useFieldAttrs,
|
|
2350
|
+
ua as useFieldLabel,
|
|
2344
2351
|
dt as useFieldPath,
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2352
|
+
ia as useFieldRenderer,
|
|
2353
|
+
oa as useFormData,
|
|
2354
|
+
te as useFormShared,
|
|
2355
|
+
ra as useItemKeys,
|
|
2356
|
+
la as useLabelPath,
|
|
2357
|
+
ca as useMapField,
|
|
2358
|
+
na as useOptionalFormShared,
|
|
2359
|
+
jn as useSchemaExposer,
|
|
2360
|
+
Gt as useSchemaHelpers
|
|
2354
2361
|
};
|