@kong-ui-public/entities-plugins 9.250.2 → 9.250.4
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 +4 -2
- package/dist/entities-plugins.umd.js +2 -2
- package/dist/filler/cypress/index.js +1 -1
- package/dist/filler/{field-walker-DP5ZupX8.js → field-walker-D0yOkGm2.js} +549 -548
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/composables/schema.d.ts.map +1 -1
- package/dist/filler/packages/entities/entities-plugins/src/types/plugins/form-schema.d.ts +1 -0
- package/dist/filler/packages/entities/entities-plugins/src/types/plugins/form-schema.d.ts.map +1 -1
- package/dist/filler/playwright/index.js +1 -1
- package/dist/freeform/index.js +278 -276
- package/dist/types/components/free-form/shared/composables/schema.d.ts.map +1 -1
- package/dist/types/types/plugins/form-schema.d.ts +1 -0
- package/dist/types/types/plugins/form-schema.d.ts.map +1 -1
- package/package.json +17 -17
package/dist/freeform/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { toValue as E, computed as w, ref as re, watch as te, onBeforeUnmount as vt, reactive as Xe, toRef as j, useSlots as Ae, provide as Pe, inject as we, toRaw as Qe, onUnmounted as bt, defineComponent as U, useAttrs as ye, openBlock as _, createBlock as I, unref as o, mergeProps as z, createSlots as W, renderList as oe, withCtx as x, renderSlot as
|
|
1
|
+
import { toValue as E, computed as w, ref as re, watch as te, onBeforeUnmount as vt, reactive as Xe, toRef as j, useSlots as Ae, provide as Pe, inject as we, toRaw as Qe, onUnmounted as bt, defineComponent as U, useAttrs as ye, openBlock as _, createBlock as I, unref as o, mergeProps as z, createSlots as W, renderList as oe, withCtx as x, renderSlot as F, normalizeProps as De, guardReactiveProps as Ze, createPropsRestProxy as se, resolveComponent as D, withDirectives as G, createElementBlock as K, createVNode as V, createElementVNode as B, resolveDynamicComponent as ie, createCommentVNode as N, Fragment as ee, vShow as J, useCssVars as _t, useTemplateRef as et, normalizeClass as Te, createTextVNode as pe, toDisplayString as ce, withModifiers as Ce, nextTick as Re, Transition as At, useId as wt, useModel as $e, onBeforeMount as kt, mergeModels as Ve, withKeys as Ne } from "vue";
|
|
2
2
|
import { marked as St } from "marked";
|
|
3
3
|
import Tt from "dompurify";
|
|
4
4
|
import { get as tt, isEqual as fe, omit as Ct, cloneDeep as ze, isFunction as He, set as Pt, uniqueId as It, upperFirst as Lt } from "lodash-es";
|
|
@@ -7,8 +7,8 @@ import { AUTOFILL_SLOT as at } from "@kong-ui-public/forms";
|
|
|
7
7
|
import { createI18n as nt, i18nTComponent as it } from "@kong-ui-public/i18n";
|
|
8
8
|
import { KTextArea as Mt, KInput as xt, KCheckbox as Rt, KCard as Ke, KLabel as $t, KMultiselect as Vt, KSelect as Kt, KInputSwitch as jt } from "@kong/kongponents";
|
|
9
9
|
import { AddIcon as je, CloseIcon as ot, TrashIcon as Et, ChevronRightIcon as Ot } from "@kong/icons";
|
|
10
|
-
import { KUI_ICON_SIZE_30 as
|
|
11
|
-
function
|
|
10
|
+
import { KUI_ICON_SIZE_30 as Ft } from "@kong/design-tokens";
|
|
11
|
+
function Dt(e) {
|
|
12
12
|
return e.map((r) => ({ value: r, label: `${r}` }));
|
|
13
13
|
}
|
|
14
14
|
const Be = "*", Ue = "#", ue = "$", Ie = ".";
|
|
@@ -28,12 +28,12 @@ function me(e) {
|
|
|
28
28
|
const r = Z(e);
|
|
29
29
|
return r[r.length - 1];
|
|
30
30
|
}
|
|
31
|
-
function rt(e, r, t,
|
|
31
|
+
function rt(e, r, t, a = "") {
|
|
32
32
|
if (e == null || typeof e != "object") return;
|
|
33
|
-
const s = Array.isArray(e) ? e.map((
|
|
34
|
-
for (const
|
|
35
|
-
const c =
|
|
36
|
-
r(c) ? e[
|
|
33
|
+
const s = Array.isArray(e) ? e.map((n, c) => String(c)) : Object.keys(e);
|
|
34
|
+
for (const n of s) {
|
|
35
|
+
const c = a ? $(a, n) : n;
|
|
36
|
+
r(c) ? e[n] = t(c) : rt(e[n], r, t, c);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
function Bt(e) {
|
|
@@ -41,8 +41,8 @@ function Bt(e) {
|
|
|
41
41
|
return r ? r.type === "set" && r.elements.type === "string" && !r.elements.one_of : !1;
|
|
42
42
|
}
|
|
43
43
|
function st(e, r) {
|
|
44
|
-
return [...e].sort((t,
|
|
45
|
-
const s = Object.keys(t)[0],
|
|
44
|
+
return [...e].sort((t, a) => {
|
|
45
|
+
const s = Object.keys(t)[0], n = Object.keys(a)[0], c = r.indexOf(s), d = r.indexOf(n);
|
|
46
46
|
return c === -1 && d === -1 ? 0 : c === -1 ? 1 : d === -1 ? -1 : c - d;
|
|
47
47
|
});
|
|
48
48
|
}
|
|
@@ -52,14 +52,14 @@ function lt(e, r) {
|
|
|
52
52
|
const m = Object.keys(i)[0];
|
|
53
53
|
t.set(m, i);
|
|
54
54
|
});
|
|
55
|
-
const
|
|
55
|
+
const a = /* @__PURE__ */ new Map();
|
|
56
56
|
r.forEach((i, m) => {
|
|
57
57
|
i.forEach((h, l) => {
|
|
58
|
-
|
|
58
|
+
a.has(h) || a.set(h, []), a.get(h).push({ bundleIndex: m, position: l });
|
|
59
59
|
});
|
|
60
60
|
});
|
|
61
|
-
const s = /* @__PURE__ */ new Set(),
|
|
62
|
-
const m =
|
|
61
|
+
const s = /* @__PURE__ */ new Set(), n = [], c = /* @__PURE__ */ new Set(), d = (i) => {
|
|
62
|
+
const m = a.get(i);
|
|
63
63
|
if (!m) return !0;
|
|
64
64
|
for (const { bundleIndex: h, position: l } of m) {
|
|
65
65
|
const u = r[h];
|
|
@@ -74,8 +74,8 @@ function lt(e, r) {
|
|
|
74
74
|
if (s.has(i)) return;
|
|
75
75
|
const m = t.get(i);
|
|
76
76
|
if (!m) return;
|
|
77
|
-
|
|
78
|
-
const h =
|
|
77
|
+
n.push(m), s.add(i), c.delete(i);
|
|
78
|
+
const h = a.get(i);
|
|
79
79
|
if (h)
|
|
80
80
|
for (const { bundleIndex: u, position: f } of h) {
|
|
81
81
|
const b = r[u];
|
|
@@ -83,7 +83,7 @@ function lt(e, r) {
|
|
|
83
83
|
const g = b[C];
|
|
84
84
|
if (!s.has(g)) {
|
|
85
85
|
const y = t.get(g);
|
|
86
|
-
y && (
|
|
86
|
+
y && (n.push(y), s.add(g), c.delete(g));
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -95,14 +95,14 @@ function lt(e, r) {
|
|
|
95
95
|
const m = Object.keys(i)[0];
|
|
96
96
|
s.has(m) || (d(m) ? p(m) : c.add(m));
|
|
97
97
|
}
|
|
98
|
-
return
|
|
98
|
+
return n;
|
|
99
99
|
}
|
|
100
100
|
function Ut(e) {
|
|
101
101
|
const r = Z(e);
|
|
102
102
|
let t = { parent: null };
|
|
103
103
|
for (r.pop(); r.length; ) {
|
|
104
|
-
const
|
|
105
|
-
t.path = t.parent?.path ? $(t.parent.path,
|
|
104
|
+
const a = r.shift();
|
|
105
|
+
t.path = t.parent?.path ? $(t.parent.path, a) : a, t = { parent: t };
|
|
106
106
|
}
|
|
107
107
|
return t;
|
|
108
108
|
}
|
|
@@ -116,22 +116,22 @@ const Ge = /* @__PURE__ */ Symbol("free-form-field-path"), Oe = /* @__PURE__ */
|
|
|
116
116
|
}
|
|
117
117
|
};
|
|
118
118
|
function zt(e, r = "") {
|
|
119
|
-
const t = {},
|
|
120
|
-
return Array.isArray(
|
|
119
|
+
const t = {}, a = e;
|
|
120
|
+
return Array.isArray(a.fields) ? Object.assign(t, Le(a, r)) : e.type === "array" && e.elements ? Object.assign(t, qe(e, r)) : e.type === "map" && e.values && Object.assign(t, Me(e, r)), t;
|
|
121
121
|
}
|
|
122
122
|
function Le(e, r = "") {
|
|
123
123
|
const t = {};
|
|
124
124
|
if (Array.isArray(e.fields))
|
|
125
|
-
for (const
|
|
126
|
-
const s = Object.keys(
|
|
127
|
-
if (t[c] =
|
|
128
|
-
const d = Le(
|
|
125
|
+
for (const a of e.fields) {
|
|
126
|
+
const s = Object.keys(a)[0], n = a[s], c = r ? $(r, s) : s;
|
|
127
|
+
if (t[c] = n, n.type === "record" && Array.isArray(n.fields)) {
|
|
128
|
+
const d = Le(n, c);
|
|
129
129
|
Object.assign(t, d);
|
|
130
|
-
} else if (
|
|
131
|
-
const d = qe(
|
|
130
|
+
} else if (n.type === "array" && n.elements) {
|
|
131
|
+
const d = qe(n, c);
|
|
132
132
|
Object.assign(t, d);
|
|
133
|
-
} else if (
|
|
134
|
-
const d = Me(
|
|
133
|
+
} else if (n.type === "map" && n.values) {
|
|
134
|
+
const d = Me(n, c);
|
|
135
135
|
Object.assign(t, d);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -140,45 +140,46 @@ function Le(e, r = "") {
|
|
|
140
140
|
function qe(e, r = "") {
|
|
141
141
|
const t = {};
|
|
142
142
|
if (e.elements) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
let a = e.elements;
|
|
144
|
+
const s = $(r, Be);
|
|
145
|
+
if (e.encrypted && a.type === "string" && (a = { ...a, encrypted: !0 }), t[s] = a, a.type === "record" && Array.isArray(a.fields)) {
|
|
146
|
+
const n = Le(a, s);
|
|
147
|
+
Object.assign(t, n);
|
|
148
|
+
} else if (a.type === "array" && a.elements) {
|
|
149
|
+
const n = qe(a, s);
|
|
150
|
+
Object.assign(t, n);
|
|
151
|
+
} else if (a.type === "map" && a.values) {
|
|
152
|
+
const n = Me(a, s);
|
|
153
|
+
Object.assign(t, n);
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
return t;
|
|
156
157
|
}
|
|
157
158
|
function Me(e, r = "") {
|
|
158
|
-
const t = {},
|
|
159
|
-
if (t[
|
|
160
|
-
const s = Le(e.values,
|
|
159
|
+
const t = {}, a = $(r, Ue);
|
|
160
|
+
if (t[a] = e.values, e.values.type === "record" && Array.isArray(e.values.fields)) {
|
|
161
|
+
const s = Le(e.values, a);
|
|
161
162
|
Object.assign(t, s);
|
|
162
163
|
} else if ((e.values.type === "array" || e.values.type === "set") && e.values.elements) {
|
|
163
|
-
const s = qe(e.values,
|
|
164
|
+
const s = qe(e.values, a);
|
|
164
165
|
Object.assign(t, s);
|
|
165
166
|
} else if (e.values.type === "map" && e.values.values) {
|
|
166
|
-
const s = Me(e.values,
|
|
167
|
+
const s = Me(e.values, a);
|
|
167
168
|
Object.assign(t, s);
|
|
168
169
|
}
|
|
169
170
|
return t;
|
|
170
171
|
}
|
|
171
172
|
function he(e, r) {
|
|
172
|
-
const t = Z(e),
|
|
173
|
+
const t = Z(e), a = [];
|
|
173
174
|
for (let s = 0; s < t.length; s++) {
|
|
174
|
-
const
|
|
175
|
-
d?.type === "map" ?
|
|
175
|
+
const n = t[s], c = a.length > 0 ? $(...a) : "", d = c ? r[c] : void 0;
|
|
176
|
+
d?.type === "map" ? a.push(Ue) : d?.type === "array" ? a.push(Be) : a.push(n);
|
|
176
177
|
}
|
|
177
|
-
return $(...
|
|
178
|
+
return $(...a);
|
|
178
179
|
}
|
|
179
180
|
function Ht(e) {
|
|
180
181
|
const r = E(e), t = w(() => r ? zt(r) : {});
|
|
181
|
-
function
|
|
182
|
+
function a(l) {
|
|
182
183
|
if (l) {
|
|
183
184
|
let u = he(l, t.value || {});
|
|
184
185
|
return u.startsWith(`${ue}${Ie}`) && (u = u.slice(2)), t.value?.[u];
|
|
@@ -186,15 +187,15 @@ function Ht(e) {
|
|
|
186
187
|
return r;
|
|
187
188
|
}
|
|
188
189
|
function s(l, u = !1) {
|
|
189
|
-
const f =
|
|
190
|
+
const f = a(l);
|
|
190
191
|
if (!f)
|
|
191
192
|
return null;
|
|
192
193
|
if (f.default !== void 0)
|
|
193
194
|
return f.default;
|
|
194
195
|
if (!f.auto)
|
|
195
|
-
return u || f.required ? f.type === "record" ?
|
|
196
|
+
return u || f.required ? f.type === "record" ? n(f, l) : f.type === "array" ? [] : f.type === "map" ? {} : null : null;
|
|
196
197
|
}
|
|
197
|
-
function
|
|
198
|
+
function n(l, u) {
|
|
198
199
|
const f = {};
|
|
199
200
|
if (Array.isArray(l.fields))
|
|
200
201
|
for (const b of l.fields) {
|
|
@@ -204,10 +205,10 @@ function Ht(e) {
|
|
|
204
205
|
return f;
|
|
205
206
|
}
|
|
206
207
|
function c(l) {
|
|
207
|
-
return l ? s(l, !0) : a(
|
|
208
|
+
return l ? s(l, !0) : n(a(), "");
|
|
208
209
|
}
|
|
209
210
|
function d(l) {
|
|
210
|
-
const u =
|
|
211
|
+
const u = a(l), f = u?.description ? Tt.sanitize(St.parse(u.description, { async: !1 })) : void 0;
|
|
211
212
|
return {
|
|
212
213
|
...Nt,
|
|
213
214
|
"data-testid": `ff-label-${l}`,
|
|
@@ -215,11 +216,11 @@ function Ht(e) {
|
|
|
215
216
|
};
|
|
216
217
|
}
|
|
217
218
|
function p(l) {
|
|
218
|
-
const u =
|
|
219
|
-
return
|
|
219
|
+
const u = a(l);
|
|
220
|
+
return Dt(u?.one_of || u.elements?.one_of || []);
|
|
220
221
|
}
|
|
221
222
|
function i(l) {
|
|
222
|
-
const u =
|
|
223
|
+
const u = a(l), f = u?.default;
|
|
223
224
|
let b = null;
|
|
224
225
|
if (u?.type === "foreign" && f?.id)
|
|
225
226
|
b = f.id;
|
|
@@ -239,11 +240,11 @@ function Ht(e) {
|
|
|
239
240
|
return t.value;
|
|
240
241
|
}
|
|
241
242
|
function h(l) {
|
|
242
|
-
return
|
|
243
|
+
return a(l)?.required ? c(l) : null;
|
|
243
244
|
}
|
|
244
245
|
return {
|
|
245
246
|
getSchemaMap: m,
|
|
246
|
-
getSchema:
|
|
247
|
+
getSchema: a,
|
|
247
248
|
getDefault: c,
|
|
248
249
|
getSelectItems: p,
|
|
249
250
|
getLabelAttributes: d,
|
|
@@ -251,15 +252,15 @@ function Ht(e) {
|
|
|
251
252
|
getEmptyOrDefault: h
|
|
252
253
|
};
|
|
253
254
|
}
|
|
254
|
-
const
|
|
255
|
+
const Fe = /* @__PURE__ */ Symbol("ff-render-rule-exact-match");
|
|
255
256
|
function Vn(e) {
|
|
256
|
-
return { [
|
|
257
|
+
return { [Fe]: e };
|
|
257
258
|
}
|
|
258
259
|
function Wt(e, r) {
|
|
259
|
-
return typeof r == "object" && r !== null &&
|
|
260
|
+
return typeof r == "object" && r !== null && Fe in r ? fe(e, r[Fe]) : Array.isArray(r) ? r.some((a) => fe(e, a)) : fe(e, r);
|
|
260
261
|
}
|
|
261
262
|
function Gt(e, r) {
|
|
262
|
-
const t = re({}),
|
|
263
|
+
const t = re({}), a = re({});
|
|
263
264
|
function s(g, y) {
|
|
264
265
|
const A = g.map((v) => Z(v).length), T = A[0];
|
|
265
266
|
if (!A.every((v) => v === T)) {
|
|
@@ -271,7 +272,7 @@ ${v}`
|
|
|
271
272
|
);
|
|
272
273
|
}
|
|
273
274
|
}
|
|
274
|
-
function
|
|
275
|
+
function n(g) {
|
|
275
276
|
for (const [y, A] of Object.entries(g)) {
|
|
276
277
|
if (!A.bundles) continue;
|
|
277
278
|
for (const v of A.bundles)
|
|
@@ -377,7 +378,7 @@ ${S}`
|
|
|
377
378
|
g[S].dependencies[R] = [q, P];
|
|
378
379
|
}
|
|
379
380
|
}
|
|
380
|
-
return
|
|
381
|
+
return n(g), c(g), g;
|
|
381
382
|
}
|
|
382
383
|
const h = w(() => {
|
|
383
384
|
try {
|
|
@@ -421,19 +422,19 @@ ${S}`
|
|
|
421
422
|
() => E(y),
|
|
422
423
|
() => E(T)
|
|
423
424
|
], ([k, P, M], [, L]) => {
|
|
424
|
-
k ? t.value[P] = k : delete t.value[P], M && M.length ?
|
|
425
|
+
k ? t.value[P] = k : delete t.value[P], M && M.length ? a.value[P] = [...M] : delete a.value[P], L && L !== P && (delete t.value[L], delete a.value[L]);
|
|
425
426
|
}, { immediate: !0, deep: !0 });
|
|
426
427
|
const v = u(y);
|
|
427
428
|
return vt(() => {
|
|
428
429
|
const k = E(y);
|
|
429
|
-
delete t.value[k], delete
|
|
430
|
+
delete t.value[k], delete a.value[k];
|
|
430
431
|
}), v;
|
|
431
432
|
}
|
|
432
433
|
function C(g) {
|
|
433
434
|
const y = Z(g);
|
|
434
435
|
if (!y.length) return !1;
|
|
435
436
|
const A = y[y.length - 1], T = $(...y.slice(0, -1));
|
|
436
|
-
if (
|
|
437
|
+
if (a.value[T]?.includes(A)) return !1;
|
|
437
438
|
const v = T === "" ? ue : he(T, e()), k = h.value[v]?.dependencies?.[A];
|
|
438
439
|
if (!k) return !1;
|
|
439
440
|
const [P, M] = k, L = T ? $(T, P) : P, S = tt(r(), Z(L));
|
|
@@ -456,68 +457,68 @@ function Xt(e) {
|
|
|
456
457
|
const m = Yt();
|
|
457
458
|
return r.set(m, i), m;
|
|
458
459
|
}
|
|
459
|
-
function
|
|
460
|
+
function a(i) {
|
|
460
461
|
return r.get(i);
|
|
461
462
|
}
|
|
462
463
|
function s(i, m) {
|
|
463
464
|
r.has(i) && r.set(i, m);
|
|
464
465
|
}
|
|
465
|
-
function
|
|
466
|
+
function n(i) {
|
|
466
467
|
r.delete(i);
|
|
467
468
|
}
|
|
468
469
|
function c(i) {
|
|
469
470
|
return Qt(i, e, t);
|
|
470
471
|
}
|
|
471
472
|
function d(i) {
|
|
472
|
-
return Zt(i, e,
|
|
473
|
+
return Zt(i, e, a);
|
|
473
474
|
}
|
|
474
475
|
function p() {
|
|
475
476
|
r.clear();
|
|
476
477
|
}
|
|
477
478
|
return {
|
|
478
479
|
createKey: t,
|
|
479
|
-
getKey:
|
|
480
|
+
getKey: a,
|
|
480
481
|
updateKey: s,
|
|
481
|
-
deleteKey:
|
|
482
|
+
deleteKey: n,
|
|
482
483
|
serialize: c,
|
|
483
484
|
deserialize: d,
|
|
484
485
|
clear: p
|
|
485
486
|
};
|
|
486
487
|
}
|
|
487
488
|
function Qt(e, r, t) {
|
|
488
|
-
const
|
|
489
|
+
const a = (s, n) => {
|
|
489
490
|
if (s == null || typeof s != "object")
|
|
490
491
|
return s;
|
|
491
492
|
if (Array.isArray(s))
|
|
492
493
|
return s.map((p, i) => {
|
|
493
|
-
const m =
|
|
494
|
-
return
|
|
494
|
+
const m = n ? $(n, `${i}`) : `${i}`;
|
|
495
|
+
return a(p, m);
|
|
495
496
|
});
|
|
496
|
-
if ((
|
|
497
|
+
if ((n ? r(n) : r())?.type === "map") {
|
|
497
498
|
const p = s, i = {};
|
|
498
499
|
return Object.keys(p).forEach((m) => {
|
|
499
|
-
const h = t(m), l = p[m], u =
|
|
500
|
-
i[h] =
|
|
500
|
+
const h = t(m), l = p[m], u = n ? $(n, m) : m;
|
|
501
|
+
i[h] = a(l, u);
|
|
501
502
|
}), i;
|
|
502
503
|
}
|
|
503
504
|
const d = {};
|
|
504
505
|
return Object.keys(s).forEach((p) => {
|
|
505
|
-
const i =
|
|
506
|
-
d[p] =
|
|
506
|
+
const i = n ? $(n, p) : p;
|
|
507
|
+
d[p] = a(s[p], i);
|
|
507
508
|
}), d;
|
|
508
509
|
};
|
|
509
|
-
return
|
|
510
|
+
return a(e);
|
|
510
511
|
}
|
|
511
512
|
function Zt(e, r, t) {
|
|
512
|
-
const
|
|
513
|
+
const a = (s, n) => {
|
|
513
514
|
if (s == null || typeof s != "object")
|
|
514
515
|
return s;
|
|
515
516
|
if (Array.isArray(s))
|
|
516
517
|
return s.map((p, i) => {
|
|
517
|
-
const m =
|
|
518
|
-
return
|
|
518
|
+
const m = n ? $(n, `${i}`) : `${i}`;
|
|
519
|
+
return a(p, m);
|
|
519
520
|
});
|
|
520
|
-
if ((
|
|
521
|
+
if ((n ? r(n) : r())?.type === "map") {
|
|
521
522
|
const p = s, i = {};
|
|
522
523
|
return Object.keys(p).forEach((m) => {
|
|
523
524
|
const h = m, l = p[h], u = t(h);
|
|
@@ -525,17 +526,17 @@ function Zt(e, r, t) {
|
|
|
525
526
|
console.error(`[FreeForm] Missing name for key ID: ${String(h)}`);
|
|
526
527
|
return;
|
|
527
528
|
}
|
|
528
|
-
const f = u || Ue, b =
|
|
529
|
-
i[u] =
|
|
529
|
+
const f = u || Ue, b = n ? $(n, f) : f;
|
|
530
|
+
i[u] = a(l, b);
|
|
530
531
|
}), i;
|
|
531
532
|
}
|
|
532
533
|
const d = {};
|
|
533
534
|
return Object.keys(s).forEach((p) => {
|
|
534
|
-
const i =
|
|
535
|
-
d[p] =
|
|
535
|
+
const i = n ? $(n, p) : p;
|
|
536
|
+
d[p] = a(s[p], i);
|
|
536
537
|
}), d;
|
|
537
538
|
};
|
|
538
|
-
return
|
|
539
|
+
return a(e);
|
|
539
540
|
}
|
|
540
541
|
function ea(e) {
|
|
541
542
|
return /^kid:\d+$/.test(e);
|
|
@@ -544,9 +545,9 @@ const [ta, aa] = qt(
|
|
|
544
545
|
function(r) {
|
|
545
546
|
const {
|
|
546
547
|
schema: t,
|
|
547
|
-
propsData:
|
|
548
|
+
propsData: a,
|
|
548
549
|
onChange: s,
|
|
549
|
-
propsRenderRules:
|
|
550
|
+
propsRenderRules: n,
|
|
550
551
|
propsConfig: c
|
|
551
552
|
} = r, {
|
|
552
553
|
getDefault: d,
|
|
@@ -561,7 +562,7 @@ const [ta, aa] = qt(
|
|
|
561
562
|
isFieldHidden: y
|
|
562
563
|
} = Gt(i.getSchemaMap, () => l), A = b({
|
|
563
564
|
fieldPath: ue,
|
|
564
|
-
rules:
|
|
565
|
+
rules: n
|
|
565
566
|
});
|
|
566
567
|
function T(q) {
|
|
567
568
|
Object.keys(l).forEach((X) => {
|
|
@@ -587,7 +588,7 @@ const [ta, aa] = qt(
|
|
|
587
588
|
s?.(P());
|
|
588
589
|
}, { deep: !0 });
|
|
589
590
|
let M = !1;
|
|
590
|
-
te(() =>
|
|
591
|
+
te(() => a?.value, (q) => {
|
|
591
592
|
M && fe(P(), E(q)) || (v(q), M = !0);
|
|
592
593
|
}, { deep: !0, immediate: !0 });
|
|
593
594
|
function L(q) {
|
|
@@ -628,16 +629,16 @@ function ae() {
|
|
|
628
629
|
}
|
|
629
630
|
const ct = (e) => {
|
|
630
631
|
const r = we(Ge, w(() => "")), t = w(() => {
|
|
631
|
-
const
|
|
632
|
-
let s =
|
|
633
|
-
return !We(
|
|
632
|
+
const a = E(e);
|
|
633
|
+
let s = a;
|
|
634
|
+
return !We(a) && r.value && (s = $(r.value, a)), We(a) && (s = s.slice(Ee("").length)), s;
|
|
634
635
|
});
|
|
635
636
|
return Pe(Ge, t), t;
|
|
636
637
|
}, na = (e) => {
|
|
637
|
-
const { getSchema: r, getSchemaMap: t, fieldRendererRegistry:
|
|
638
|
-
const p = E(c), i = t(), m = Object.keys(
|
|
638
|
+
const { getSchema: r, getSchemaMap: t, fieldRendererRegistry: a } = ae(), { default: s, ...n } = Ae(), c = we(Oe), d = w(() => {
|
|
639
|
+
const p = E(c), i = t(), m = Object.keys(n).filter((h) => h !== ke && h !== "item").reduce((h, l) => {
|
|
639
640
|
const u = he($(E(e), l), i);
|
|
640
|
-
return { ...h, [u]:
|
|
641
|
+
return { ...h, [u]: n[l] };
|
|
641
642
|
}, {});
|
|
642
643
|
return p ? { ...p, ...m } : m;
|
|
643
644
|
});
|
|
@@ -646,7 +647,7 @@ const ct = (e) => {
|
|
|
646
647
|
const p = E(e), i = d.value[he(p, t())];
|
|
647
648
|
if (i) return i;
|
|
648
649
|
const m = t();
|
|
649
|
-
for (const [h, l] of
|
|
650
|
+
for (const [h, l] of a) {
|
|
650
651
|
const u = he(p, m);
|
|
651
652
|
if (h({ path: p, genericPath: u, schema: r(p) }))
|
|
652
653
|
return l;
|
|
@@ -663,11 +664,11 @@ function ia(e) {
|
|
|
663
664
|
};
|
|
664
665
|
}
|
|
665
666
|
function Y(e) {
|
|
666
|
-
const { getSchema: r, isFieldHidden: t, getEmptyOrDefault:
|
|
667
|
+
const { getSchema: r, isFieldHidden: t, getEmptyOrDefault: a } = ae(), s = ct(e), n = na(s), { value: c } = ia(e), d = w(() => r(s.value)), p = w(() => t(s.value)), i = w(() => a(s.value));
|
|
667
668
|
return d.value ? {
|
|
668
669
|
schema: d,
|
|
669
670
|
path: s,
|
|
670
|
-
renderer:
|
|
671
|
+
renderer: n,
|
|
671
672
|
value: c,
|
|
672
673
|
ancestors: ut(s),
|
|
673
674
|
/**
|
|
@@ -681,26 +682,26 @@ function Y(e) {
|
|
|
681
682
|
};
|
|
682
683
|
}
|
|
683
684
|
function oa(e, r) {
|
|
684
|
-
const t = /* @__PURE__ */ new WeakMap(),
|
|
685
|
+
const t = /* @__PURE__ */ new WeakMap(), a = /* @__PURE__ */ new Map();
|
|
685
686
|
function s() {
|
|
686
687
|
return It(`${e}-`);
|
|
687
688
|
}
|
|
688
|
-
function
|
|
689
|
+
function n(c, d) {
|
|
689
690
|
if (c == null || typeof c != "object")
|
|
690
691
|
return `${e}-${d}`;
|
|
691
692
|
if (t.has(c))
|
|
692
693
|
return t.get(c);
|
|
693
|
-
const p =
|
|
694
|
-
return
|
|
694
|
+
const p = a.has(d) ? a.get(d) : s();
|
|
695
|
+
return a.set(d, p), t.set(c, p), p;
|
|
695
696
|
}
|
|
696
697
|
return te(r, (c) => {
|
|
697
698
|
const d = E(c), p = /* @__PURE__ */ new Set();
|
|
698
699
|
d.forEach((i, m) => {
|
|
699
700
|
p.add(m);
|
|
700
|
-
}), Array.from(
|
|
701
|
-
p.has(i) ||
|
|
701
|
+
}), Array.from(a.keys()).forEach((i) => {
|
|
702
|
+
p.has(i) || a.delete(i);
|
|
702
703
|
});
|
|
703
|
-
}, { immediate: !0, deep: !0 }), { getKey:
|
|
704
|
+
}, { immediate: !0, deep: !0 }), { getKey: n };
|
|
704
705
|
}
|
|
705
706
|
function Kn(e, r) {
|
|
706
707
|
te(e, (t) => {
|
|
@@ -752,38 +753,38 @@ function sa(e, r) {
|
|
|
752
753
|
const t = we(Je, {
|
|
753
754
|
parentPath: null,
|
|
754
755
|
isolate: !1
|
|
755
|
-
}), { parentPath:
|
|
756
|
-
parentPath:
|
|
756
|
+
}), { parentPath: a, isolate: s } = E(t), n = re(a ? $(a, e) : e), c = re({
|
|
757
|
+
parentPath: n.value,
|
|
757
758
|
isolate: s
|
|
758
759
|
});
|
|
759
760
|
return te([j(r), j(t)], ([d, p]) => {
|
|
760
761
|
const { parentPath: i, isolate: m } = p, h = i ? $(i, e) : e;
|
|
761
762
|
d ? {
|
|
762
763
|
isolate: () => {
|
|
763
|
-
|
|
764
|
+
n.value = e, c.value.isolate = !0, c.value.parentPath = null;
|
|
764
765
|
},
|
|
765
766
|
"isolate-children": () => {
|
|
766
767
|
c.value.isolate = !0, c.value.parentPath = null;
|
|
767
768
|
},
|
|
768
769
|
reset: () => {
|
|
769
|
-
|
|
770
|
+
n.value = e, c.value.isolate = !1, c.value.parentPath = null;
|
|
770
771
|
},
|
|
771
772
|
"reset-children": () => {
|
|
772
773
|
c.value.isolate = !1, c.value.parentPath = null;
|
|
773
774
|
},
|
|
774
775
|
inherit: () => {
|
|
775
|
-
|
|
776
|
+
n.value = h, c.value.isolate = !1, c.value.parentPath = h;
|
|
776
777
|
}
|
|
777
|
-
}[d]?.() : m && (
|
|
778
|
-
}, { deep: !0, immediate: !0 }), Pe(Je, c),
|
|
778
|
+
}[d]?.() : m && (n.value = e, c.value.isolate = !0, c.value.parentPath = null);
|
|
779
|
+
}, { deep: !0, immediate: !0 }), Pe(Je, c), n;
|
|
779
780
|
}
|
|
780
781
|
function mt(e) {
|
|
781
782
|
return Z(e).map((t) => t.split("_").map(dt).join(" ")).map(Lt).join(" › ");
|
|
782
783
|
}
|
|
783
784
|
function la(e, r) {
|
|
784
|
-
const t = E(e),
|
|
785
|
+
const t = E(e), a = me(t), { config: s, getSchema: n } = ae(), c = sa(a, r), d = ut(e);
|
|
785
786
|
return w(() => {
|
|
786
|
-
const p = c.value ??
|
|
787
|
+
const p = c.value ?? a, i = d.value.parent?.path ? n(d.value.parent.path) : null, m = i?.type === "array", h = i?.type === "map";
|
|
787
788
|
if (m || h)
|
|
788
789
|
return "";
|
|
789
790
|
const l = mt(p);
|
|
@@ -791,54 +792,54 @@ function la(e, r) {
|
|
|
791
792
|
});
|
|
792
793
|
}
|
|
793
794
|
function ne(e, r) {
|
|
794
|
-
const { getLabelAttributes: t, getPlaceholder:
|
|
795
|
+
const { getLabelAttributes: t, getPlaceholder: a, getSchema: s } = ae(), n = E(e), c = E(r), d = la(e, j(() => E(r).resetLabelPath));
|
|
795
796
|
return w(() => ({
|
|
796
797
|
...c,
|
|
797
|
-
placeholder: c.placeholder ?? n
|
|
798
|
-
labelAttributes: c.labelAttributes ?? t(
|
|
798
|
+
placeholder: c.placeholder ?? a(n) ?? void 0,
|
|
799
|
+
labelAttributes: c.labelAttributes ?? t(n),
|
|
799
800
|
label: c.label ?? d.value,
|
|
800
|
-
required: c.required ?? s(
|
|
801
|
+
required: c.required ?? s(n)?.required
|
|
801
802
|
}));
|
|
802
803
|
}
|
|
803
804
|
function ua(e, r) {
|
|
804
|
-
const { value: t, ...
|
|
805
|
-
if (
|
|
806
|
-
return
|
|
805
|
+
const { value: t, ...a } = Y(e), { getEmptyOrDefault: s, keyIdMap: n } = ae(), c = w(() => {
|
|
806
|
+
if (a.path)
|
|
807
|
+
return a.schema.value.values;
|
|
807
808
|
}), d = w(() => t ? Object.keys(t.value || {}).map((f) => {
|
|
808
|
-
const b = f, C =
|
|
809
|
+
const b = f, C = n.getKey(b) ?? "";
|
|
809
810
|
return [b, C];
|
|
810
811
|
}) : []);
|
|
811
812
|
function p(u, f) {
|
|
812
|
-
t && (
|
|
813
|
+
t && (n.updateKey(u, f), t.value = { ...t.value });
|
|
813
814
|
}
|
|
814
815
|
function i() {
|
|
815
816
|
if (!t) return;
|
|
816
|
-
const u =
|
|
817
|
+
const u = n.createKey(), f = s($(a.path.value, u));
|
|
817
818
|
return t.value = {
|
|
818
819
|
...t.value,
|
|
819
820
|
[u]: f
|
|
820
821
|
}, u;
|
|
821
822
|
}
|
|
822
823
|
function m(u) {
|
|
823
|
-
if (
|
|
824
|
+
if (n.deleteKey(u), !t) return;
|
|
824
825
|
const { [u]: f, ...b } = t.value || {};
|
|
825
|
-
Object.keys(b).length === 0 ?
|
|
826
|
+
Object.keys(b).length === 0 ? a.schema?.value?.required ? t.value = {} : t.value = null : t.value = b;
|
|
826
827
|
}
|
|
827
828
|
function h(u) {
|
|
828
|
-
return
|
|
829
|
+
return n.getKey(u);
|
|
829
830
|
}
|
|
830
831
|
const l = w(() => {
|
|
831
|
-
if (!
|
|
832
|
-
const u = me(
|
|
832
|
+
if (!a.path) return "";
|
|
833
|
+
const u = me(a.path.value);
|
|
833
834
|
let f = u;
|
|
834
|
-
return ea(u) && (f =
|
|
835
|
+
return ea(u) && (f = n.getKey(u) ?? ""), pt(f);
|
|
835
836
|
});
|
|
836
837
|
if (r && c.value?.type === "string") {
|
|
837
838
|
let u = function() {
|
|
838
839
|
if (!t || !t.value) return null;
|
|
839
840
|
const b = {};
|
|
840
841
|
for (const [C, g] of Object.entries(t.value)) {
|
|
841
|
-
const y =
|
|
842
|
+
const y = n.getKey(C);
|
|
842
843
|
y && (b[y] = g);
|
|
843
844
|
}
|
|
844
845
|
return b;
|
|
@@ -853,7 +854,7 @@ function ua(e, r) {
|
|
|
853
854
|
updateKey: p,
|
|
854
855
|
addKey: i,
|
|
855
856
|
removeKey: m,
|
|
856
|
-
field:
|
|
857
|
+
field: a,
|
|
857
858
|
fieldDisplayName: l,
|
|
858
859
|
getKeyName: h
|
|
859
860
|
};
|
|
@@ -877,7 +878,7 @@ const be = /* @__PURE__ */ U({
|
|
|
877
878
|
},
|
|
878
879
|
emits: ["update:modelValue"],
|
|
879
880
|
setup(e, { emit: r }) {
|
|
880
|
-
const t = e,
|
|
881
|
+
const t = e, a = ye(), s = r, n = w(() => t.multiline ? Mt : xt), c = w(() => a.characterLimit ?? (t.multiline ? !1 : void 0)), d = re(t.modelValue);
|
|
881
882
|
te(() => t.modelValue, (h) => {
|
|
882
883
|
d.value = h;
|
|
883
884
|
});
|
|
@@ -886,7 +887,7 @@ const be = /* @__PURE__ */ U({
|
|
|
886
887
|
}, m = () => {
|
|
887
888
|
p.value.updateOnChange && s("update:modelValue", d.value);
|
|
888
889
|
};
|
|
889
|
-
return (h, l) => (_(), I(o(
|
|
890
|
+
return (h, l) => (_(), I(o(n), z(h.$attrs, {
|
|
890
891
|
"character-limit": c.value,
|
|
891
892
|
"model-value": e.modelValue,
|
|
892
893
|
resizable: e.multiline ? !0 : void 0,
|
|
@@ -896,7 +897,7 @@ const be = /* @__PURE__ */ U({
|
|
|
896
897
|
oe(Ae(), (u, f) => ({
|
|
897
898
|
name: f,
|
|
898
899
|
fn: x((b) => [
|
|
899
|
-
|
|
900
|
+
F(h.$slots, f, De(Ze(b)))
|
|
900
901
|
])
|
|
901
902
|
}))
|
|
902
903
|
]), 1040, ["character-limit", "model-value", "resizable"]));
|
|
@@ -927,18 +928,18 @@ const be = /* @__PURE__ */ U({
|
|
|
927
928
|
},
|
|
928
929
|
emits: ["update:modelValue"],
|
|
929
930
|
setup(e, { emit: r }) {
|
|
930
|
-
const t = ye(), { i18n:
|
|
931
|
+
const t = ye(), { i18n: a } = ve(), s = se(e, ["autofocus", "showVaultSecretPicker", "showPasswordMaskToggle", "name"]), n = r, { value: c, hide: d, ...p } = Y(j(() => e.name)), i = ne(p.path, j({ ...s, ...t })), m = c?.value;
|
|
931
932
|
function h(g) {
|
|
932
|
-
m !== void 0 && g === "" && g !== m ? (c.value = null,
|
|
933
|
+
m !== void 0 && g === "" && g !== m ? (c.value = null, n("update:modelValue", null)) : (c.value = g.trim(), n("update:modelValue", g.trim()));
|
|
933
934
|
}
|
|
934
935
|
const l = w(() => e.showPasswordMaskToggle !== void 0 ? e.showPasswordMaskToggle : s.type === "password" ? !0 : !!(p.schema?.value).encrypted), u = we(at, void 0), f = w(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!p.schema.value?.referenceable), b = w(() => ({ referenceable: f.value })), C = w(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
935
936
|
return (g, y) => {
|
|
936
|
-
const A =
|
|
937
|
+
const A = D("KAlert");
|
|
937
938
|
return p.error ? (_(), I(A, {
|
|
938
939
|
key: 0,
|
|
939
940
|
appearance: "danger",
|
|
940
941
|
message: p.error.message
|
|
941
|
-
}, null, 8, ["message"])) : G((_(), K("div",
|
|
942
|
+
}, null, 8, ["message"])) : G((_(), K("div", De(z({ key: 1 }, g.$attrs)), [
|
|
942
943
|
V(be, z({
|
|
943
944
|
...o(i),
|
|
944
945
|
showPasswordMaskToggle: l.value,
|
|
@@ -960,7 +961,7 @@ const be = /* @__PURE__ */ U({
|
|
|
960
961
|
o(i).labelAttributes?.info ? {
|
|
961
962
|
name: "label-tooltip",
|
|
962
963
|
fn: x(() => [
|
|
963
|
-
|
|
964
|
+
F(g.$slots, "tooltip", {}, () => [
|
|
964
965
|
B("div", {
|
|
965
966
|
innerHTML: o(i).labelAttributes.info
|
|
966
967
|
}, null, 8, ma)
|
|
@@ -971,7 +972,7 @@ const be = /* @__PURE__ */ U({
|
|
|
971
972
|
!(e.multiline && e.error) && g.$slots.help ? {
|
|
972
973
|
name: "help",
|
|
973
974
|
fn: x(() => [
|
|
974
|
-
|
|
975
|
+
F(g.$slots, "help", {}, void 0, !0)
|
|
975
976
|
]),
|
|
976
977
|
key: "1"
|
|
977
978
|
} : void 0,
|
|
@@ -988,7 +989,7 @@ const be = /* @__PURE__ */ U({
|
|
|
988
989
|
key: 1,
|
|
989
990
|
appearance: "warning",
|
|
990
991
|
"data-testid": `ff-vault-secret-picker-warning-${p.path.value}`,
|
|
991
|
-
message: o(
|
|
992
|
+
message: o(a).t("plugins.free-form.vault_picker.component_error")
|
|
992
993
|
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
993
994
|
]),
|
|
994
995
|
key: "2"
|
|
@@ -1005,7 +1006,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1005
1006
|
key: 1,
|
|
1006
1007
|
appearance: "warning",
|
|
1007
1008
|
"data-testid": `ff-vault-secret-picker-warning-${p.path.value}`,
|
|
1008
|
-
message: o(
|
|
1009
|
+
message: o(a).t("plugins.free-form.vault_picker.component_error")
|
|
1009
1010
|
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
1010
1011
|
], 64))
|
|
1011
1012
|
], 16)), [
|
|
@@ -1015,8 +1016,8 @@ const be = /* @__PURE__ */ U({
|
|
|
1015
1016
|
}
|
|
1016
1017
|
}), H = (e, r) => {
|
|
1017
1018
|
const t = e.__vccOpts || e;
|
|
1018
|
-
for (const [
|
|
1019
|
-
t[
|
|
1019
|
+
for (const [a, s] of r)
|
|
1020
|
+
t[a] = s;
|
|
1020
1021
|
return t;
|
|
1021
1022
|
}, ft = /* @__PURE__ */ H(fa, [["__scopeId", "data-v-5cb8f07e"]]), ha = ["innerHTML"], ga = /* @__PURE__ */ U({
|
|
1022
1023
|
inheritAttrs: !1,
|
|
@@ -1029,11 +1030,11 @@ const be = /* @__PURE__ */ U({
|
|
|
1029
1030
|
},
|
|
1030
1031
|
emits: ["update:modelValue"],
|
|
1031
1032
|
setup(e, { emit: r }) {
|
|
1032
|
-
const t = se(e, ["autofocus", "name"]), { value:
|
|
1033
|
-
|
|
1033
|
+
const t = se(e, ["autofocus", "name"]), { value: a, hide: s, emptyOrDefaultValue: n, ...c } = Y(j(() => e.name)), d = r, p = (m) => {
|
|
1034
|
+
a.value = m, d("update:modelValue", m);
|
|
1034
1035
|
}, i = ne(c.path, t);
|
|
1035
1036
|
return (m, h) => {
|
|
1036
|
-
const l =
|
|
1037
|
+
const l = D("KAlert");
|
|
1037
1038
|
return c.error ? (_(), I(l, {
|
|
1038
1039
|
key: 0,
|
|
1039
1040
|
appearance: "danger",
|
|
@@ -1042,13 +1043,13 @@ const be = /* @__PURE__ */ U({
|
|
|
1042
1043
|
class: "ff-boolean-field",
|
|
1043
1044
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1044
1045
|
"data-testid": `ff-${c.path.value}`,
|
|
1045
|
-
"model-value": !!(o(
|
|
1046
|
+
"model-value": !!(o(a) == null ? o(n) : o(a)),
|
|
1046
1047
|
"onUpdate:modelValue": p
|
|
1047
1048
|
}), W({ _: 2 }, [
|
|
1048
1049
|
o(i).labelAttributes?.info ? {
|
|
1049
1050
|
name: "tooltip",
|
|
1050
1051
|
fn: x(() => [
|
|
1051
|
-
|
|
1052
|
+
F(m.$slots, "tooltip", {}, () => [
|
|
1052
1053
|
B("div", {
|
|
1053
1054
|
innerHTML: o(i).labelAttributes.info
|
|
1054
1055
|
}, null, 8, ha)
|
|
@@ -1072,7 +1073,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1072
1073
|
},
|
|
1073
1074
|
emits: ["update:modelValue"],
|
|
1074
1075
|
setup(e, { emit: r }) {
|
|
1075
|
-
const t = ye(),
|
|
1076
|
+
const t = ye(), a = se(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Y(j(() => e.name)), p = ne(d.path, j({ ...a, ...t })), i = w(() => d.schema?.value?.len_min && d.schema.value.len_min > 0), m = re("");
|
|
1076
1077
|
function h(b) {
|
|
1077
1078
|
return b.map((C) => C.trim()).filter(Boolean).join(", ");
|
|
1078
1079
|
}
|
|
@@ -1082,14 +1083,14 @@ const be = /* @__PURE__ */ U({
|
|
|
1082
1083
|
function u(b) {
|
|
1083
1084
|
m.value = b;
|
|
1084
1085
|
const C = l(b), g = !C.length && i.value ? null : C;
|
|
1085
|
-
|
|
1086
|
+
n.value = g, s("update:modelValue", g);
|
|
1086
1087
|
}
|
|
1087
1088
|
const f = w(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1088
|
-
return te(
|
|
1089
|
+
return te(n, (b) => {
|
|
1089
1090
|
const C = b ? h(b) : "";
|
|
1090
1091
|
h(l(m.value)) !== C && (m.value = C);
|
|
1091
1092
|
}, { immediate: !0 }), (b, C) => {
|
|
1092
|
-
const g =
|
|
1093
|
+
const g = D("KAlert");
|
|
1093
1094
|
return d.error ? (_(), I(g, {
|
|
1094
1095
|
key: 0,
|
|
1095
1096
|
appearance: "danger",
|
|
@@ -1109,7 +1110,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1109
1110
|
o(p).labelAttributes?.info ? {
|
|
1110
1111
|
name: "label-tooltip",
|
|
1111
1112
|
fn: x(() => [
|
|
1112
|
-
|
|
1113
|
+
F(b.$slots, "tooltip", {}, () => [
|
|
1113
1114
|
B("div", {
|
|
1114
1115
|
innerHTML: o(p).labelAttributes.info
|
|
1115
1116
|
}, null, 8, ba)
|
|
@@ -1141,7 +1142,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1141
1142
|
_t((S) => ({
|
|
1142
1143
|
v2cc732dc: L.value
|
|
1143
1144
|
}));
|
|
1144
|
-
const t = e,
|
|
1145
|
+
const t = e, a = r, { i18n: { t: s } } = ve(), { getDefault: n, getSchema: c } = ae(), { value: d, hide: p, ...i } = Y(j(t, "name")), m = ne(i.path, j({ ...t, ...ye() })), h = w(() => {
|
|
1145
1146
|
if (!i.path) throw new Error("Field path is required for sub-schema retrieval");
|
|
1146
1147
|
const S = c(i.path.value);
|
|
1147
1148
|
if (!S) throw new Error(`Schema not found for path: ${i.path.value}`);
|
|
@@ -1158,10 +1159,10 @@ const be = /* @__PURE__ */ U({
|
|
|
1158
1159
|
hash: `#${f(S, R)}`,
|
|
1159
1160
|
title: ""
|
|
1160
1161
|
}))), A = re(y.value[0]?.hash), T = async () => {
|
|
1161
|
-
const S =
|
|
1162
|
-
Array.isArray(d.value) || (d.value = []), d.value.push(S),
|
|
1162
|
+
const S = n($(i.path.value, Be));
|
|
1163
|
+
Array.isArray(d.value) || (d.value = []), d.value.push(S), a("add"), t.appearance === "tabs" && (await Re(), A.value = y.value[y.value.length - 1]?.hash), await Re(), P(u.value.length + 1);
|
|
1163
1164
|
}, v = async (S) => {
|
|
1164
|
-
Array.isArray(d.value) && (d.value.splice(S, 1), d.value.length === 0 && !m.value.required && (d.value = null)),
|
|
1165
|
+
Array.isArray(d.value) && (d.value.splice(S, 1), d.value.length === 0 && !m.value.required && (d.value = null)), a("remove", S), t.appearance === "tabs" && (A.value = y.value[Math.max(0, S - 1)]?.hash);
|
|
1165
1166
|
}, k = et("root");
|
|
1166
1167
|
function P(S) {
|
|
1167
1168
|
if (!k.value)
|
|
@@ -1180,7 +1181,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1180
1181
|
return S !== "tabs" || R == null || R === !1 ? null : typeof R == "number" ? `${t.stickyTabs}px` : typeof R == "string" ? R : "0";
|
|
1181
1182
|
});
|
|
1182
1183
|
return (S, R) => {
|
|
1183
|
-
const q =
|
|
1184
|
+
const q = D("KAlert"), X = D("KLabel"), Q = D("KButton"), de = D("KTooltip"), gt = D("KTabs");
|
|
1184
1185
|
return i.error ? (_(), I(q, {
|
|
1185
1186
|
key: 0,
|
|
1186
1187
|
appearance: "danger",
|
|
@@ -1213,7 +1214,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1213
1214
|
o(m).labelAttributes?.info ? {
|
|
1214
1215
|
name: "tooltip",
|
|
1215
1216
|
fn: x(() => [
|
|
1216
|
-
|
|
1217
|
+
F(S.$slots, "tooltip", {}, () => [
|
|
1217
1218
|
B("div", {
|
|
1218
1219
|
innerHTML: o(m).labelAttributes.info
|
|
1219
1220
|
}, null, 8, ka)
|
|
@@ -1249,7 +1250,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1249
1250
|
}, {
|
|
1250
1251
|
default: x(() => [
|
|
1251
1252
|
B("div", Ta, [
|
|
1252
|
-
S.$slots.item ?
|
|
1253
|
+
S.$slots.item ? F(S.$slots, "item", {
|
|
1253
1254
|
key: 0,
|
|
1254
1255
|
autofocus: !0,
|
|
1255
1256
|
fieldName: String(O),
|
|
@@ -1322,7 +1323,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1322
1323
|
"data-index": O,
|
|
1323
1324
|
"data-testid": `ff-array-item-${i.path.value}.${O}`
|
|
1324
1325
|
}, [
|
|
1325
|
-
S.$slots.item ?
|
|
1326
|
+
S.$slots.item ? F(S.$slots, "item", {
|
|
1326
1327
|
key: 0,
|
|
1327
1328
|
autofocus: !0,
|
|
1328
1329
|
fieldName: String(O),
|
|
@@ -1374,14 +1375,14 @@ const be = /* @__PURE__ */ U({
|
|
|
1374
1375
|
"margin-bottom",
|
|
1375
1376
|
"border-top-width",
|
|
1376
1377
|
"border-bottom-width"
|
|
1377
|
-
], t = Object.fromEntries(r.map((l) => [l, ""])),
|
|
1378
|
+
], t = Object.fromEntries(r.map((l) => [l, ""])), a = Object.fromEntries(r.map((l) => [l, "0"]));
|
|
1378
1379
|
function s(l) {
|
|
1379
1380
|
const u = getComputedStyle(l);
|
|
1380
1381
|
return Object.fromEntries(
|
|
1381
1382
|
r.map((f) => [f, u.getPropertyValue(f)])
|
|
1382
1383
|
);
|
|
1383
1384
|
}
|
|
1384
|
-
function
|
|
1385
|
+
function n(l) {
|
|
1385
1386
|
["overflow", "transition", ...r].forEach(
|
|
1386
1387
|
(u) => l.style.removeProperty(u)
|
|
1387
1388
|
);
|
|
@@ -1396,7 +1397,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1396
1397
|
const u = l;
|
|
1397
1398
|
Object.assign(u.style, t);
|
|
1398
1399
|
const f = s(u);
|
|
1399
|
-
Object.assign(u.style,
|
|
1400
|
+
Object.assign(u.style, a), requestAnimationFrame(() => {
|
|
1400
1401
|
Object.assign(u.style, {
|
|
1401
1402
|
...f,
|
|
1402
1403
|
transition: ""
|
|
@@ -1404,7 +1405,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1404
1405
|
});
|
|
1405
1406
|
}
|
|
1406
1407
|
function p(l) {
|
|
1407
|
-
|
|
1408
|
+
n(l);
|
|
1408
1409
|
}
|
|
1409
1410
|
function i(l) {
|
|
1410
1411
|
const u = l;
|
|
@@ -1414,10 +1415,10 @@ const be = /* @__PURE__ */ U({
|
|
|
1414
1415
|
});
|
|
1415
1416
|
}
|
|
1416
1417
|
function m(l) {
|
|
1417
|
-
Object.assign(l.style,
|
|
1418
|
+
Object.assign(l.style, a);
|
|
1418
1419
|
}
|
|
1419
1420
|
function h(l) {
|
|
1420
|
-
|
|
1421
|
+
n(l);
|
|
1421
1422
|
}
|
|
1422
1423
|
return (l, u) => (_(), I(At, {
|
|
1423
1424
|
"enter-active-class": "ff-slide-active",
|
|
@@ -1430,7 +1431,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1430
1431
|
onLeave: m
|
|
1431
1432
|
}, {
|
|
1432
1433
|
default: x(() => [
|
|
1433
|
-
|
|
1434
|
+
F(l.$slots, "default", {}, void 0, !0)
|
|
1434
1435
|
]),
|
|
1435
1436
|
_: 3
|
|
1436
1437
|
}));
|
|
@@ -1445,7 +1446,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1445
1446
|
const { i18n: { t: r } } = ve(), t = w(() => {
|
|
1446
1447
|
if (!Array.isArray(e.entityChecks) || e.entityChecks.length === 0)
|
|
1447
1448
|
return null;
|
|
1448
|
-
const
|
|
1449
|
+
const n = [], c = [
|
|
1449
1450
|
{ key: "at_least_one_of", i18nKey: "plugins.form.field_rules.at_least_one_of" },
|
|
1450
1451
|
{ key: "mutually_required", i18nKey: "plugins.form.field_rules.mutually_required" },
|
|
1451
1452
|
{ key: "mutually_exclusive", i18nKey: "plugins.form.field_rules.mutually_exclusive" }
|
|
@@ -1456,22 +1457,22 @@ const be = /* @__PURE__ */ U({
|
|
|
1456
1457
|
const m = d[p];
|
|
1457
1458
|
if (Array.isArray(m) && m.length > 0) {
|
|
1458
1459
|
const h = s(m);
|
|
1459
|
-
h.length > 0 &&
|
|
1460
|
-
parameters:
|
|
1460
|
+
h.length > 0 && n.push(r(i, {
|
|
1461
|
+
parameters: a(h)
|
|
1461
1462
|
}));
|
|
1462
1463
|
}
|
|
1463
1464
|
break;
|
|
1464
1465
|
}
|
|
1465
|
-
return
|
|
1466
|
+
return n.length ? n : null;
|
|
1466
1467
|
});
|
|
1467
|
-
function n
|
|
1468
|
-
return
|
|
1468
|
+
function a(n) {
|
|
1469
|
+
return n.map(mt).join(", ");
|
|
1469
1470
|
}
|
|
1470
|
-
function s(
|
|
1471
|
-
return Array.isArray(e.visibleFields) ?
|
|
1471
|
+
function s(n) {
|
|
1472
|
+
return Array.isArray(e.visibleFields) ? n.filter((c) => e.visibleFields.includes(c.split(".")[0])) : n;
|
|
1472
1473
|
}
|
|
1473
|
-
return (
|
|
1474
|
-
const d =
|
|
1474
|
+
return (n, c) => {
|
|
1475
|
+
const d = D("KAlert");
|
|
1475
1476
|
return t.value ? (_(), I(d, {
|
|
1476
1477
|
key: 0,
|
|
1477
1478
|
"data-testid": "ff-entity-checks-alert"
|
|
@@ -1488,10 +1489,10 @@ const be = /* @__PURE__ */ U({
|
|
|
1488
1489
|
})) : N("", !0);
|
|
1489
1490
|
};
|
|
1490
1491
|
}
|
|
1491
|
-
}), Ye = /* @__PURE__ */ H(xa, [["__scopeId", "data-v-374c59bc"]]), Ra = ["data-testid"], $a = ["data-testid"], Va = ["data-testid"], Ka = { class: "ff-object-field-header-toggle" }, ja = ["aria-controls", "aria-expanded", "aria-label", "data-testid", "disabled"], Ea = ["innerHTML"], Oa = ["data-testid"],
|
|
1492
|
+
}), Ye = /* @__PURE__ */ H(xa, [["__scopeId", "data-v-374c59bc"]]), Ra = ["data-testid"], $a = ["data-testid"], Va = ["data-testid"], Ka = { class: "ff-object-field-header-toggle" }, ja = ["aria-controls", "aria-expanded", "aria-label", "data-testid", "disabled"], Ea = ["innerHTML"], Oa = ["data-testid"], Fa = {
|
|
1492
1493
|
key: 0,
|
|
1493
1494
|
class: "indent-guide"
|
|
1494
|
-
},
|
|
1495
|
+
}, Da = /* @__PURE__ */ U({
|
|
1495
1496
|
inheritAttrs: !1,
|
|
1496
1497
|
__name: "ObjectField",
|
|
1497
1498
|
props: /* @__PURE__ */ Ve({
|
|
@@ -1517,61 +1518,61 @@ const be = /* @__PURE__ */ U({
|
|
|
1517
1518
|
}),
|
|
1518
1519
|
emits: ["update:added", "update:expanded"],
|
|
1519
1520
|
setup(e) {
|
|
1520
|
-
const r = wt(), t = se(e, ["defaultAdded", "collapsible", "omit", "required", "asChild", "resetLabelPath", "fieldsOrder"]), { value:
|
|
1521
|
+
const r = wt(), t = se(e, ["defaultAdded", "collapsible", "omit", "required", "asChild", "resetLabelPath", "fieldsOrder"]), { value: a, hide: s, ...n } = Y(j(t, "name")), {
|
|
1521
1522
|
getSchema: c,
|
|
1522
1523
|
getDefault: d,
|
|
1523
1524
|
useCurrentRenderRules: p
|
|
1524
1525
|
} = ae(), i = p({
|
|
1525
|
-
fieldPath:
|
|
1526
|
+
fieldPath: n.path,
|
|
1526
1527
|
rules: j(t, "renderRules"),
|
|
1527
1528
|
omittedFields: j(() => e.omit)
|
|
1528
1529
|
}), m = $e(e, "added"), h = $e(e, "expanded"), l = w(() => {
|
|
1529
|
-
if (
|
|
1530
|
-
const v =
|
|
1530
|
+
if (n.ancestors?.value) {
|
|
1531
|
+
const v = n.ancestors.value.parent;
|
|
1531
1532
|
if (v?.path)
|
|
1532
1533
|
return c(v.path)?.type === "array";
|
|
1533
1534
|
}
|
|
1534
1535
|
return !1;
|
|
1535
1536
|
}), u = w(() => {
|
|
1536
|
-
if (
|
|
1537
|
-
const v =
|
|
1537
|
+
if (n.ancestors?.value) {
|
|
1538
|
+
const v = n.ancestors.value.parent;
|
|
1538
1539
|
if (v?.path)
|
|
1539
1540
|
return c(v.path)?.type === "map";
|
|
1540
1541
|
}
|
|
1541
1542
|
return !1;
|
|
1542
|
-
}), f = ne(
|
|
1543
|
-
let v =
|
|
1543
|
+
}), f = ne(n.path, { required: e.required, ...t, resetLabelPath: e.resetLabelPath }), b = w(() => f.value.required ? !0 : m.value ?? e.defaultAdded), C = w(() => e.asChild !== void 0 ? e.asChild : l.value), g = w(() => {
|
|
1544
|
+
let v = n.schema.value.fields;
|
|
1544
1545
|
return e.omit && (v = v.filter((k) => !e.omit.includes(Object.keys(k)[0]))), e.fieldsOrder ? st(v, e.fieldsOrder) : (i.value?.bundles && (v = lt([...v], i.value.bundles)), v);
|
|
1545
1546
|
}), y = w(() => g.value.map((v) => Object.keys(v)[0]));
|
|
1546
1547
|
function A() {
|
|
1547
1548
|
h.value = !h.value;
|
|
1548
1549
|
}
|
|
1549
1550
|
function T() {
|
|
1550
|
-
m.value ?
|
|
1551
|
+
m.value ? a.value = d(n.path.value) : a.value = null;
|
|
1551
1552
|
}
|
|
1552
1553
|
return te(b, (v) => {
|
|
1553
1554
|
e.collapsible && (h.value = v);
|
|
1554
1555
|
}), kt(() => {
|
|
1555
|
-
if (
|
|
1556
|
-
const v =
|
|
1556
|
+
if (n.error || !a) return;
|
|
1557
|
+
const v = a.value != null;
|
|
1557
1558
|
m.value = v, (f.value.required || v) && (h.value = !0);
|
|
1558
1559
|
}), (v, k) => {
|
|
1559
|
-
const P =
|
|
1560
|
+
const P = D("KAlert"), M = D("KInputSwitch");
|
|
1560
1561
|
return _(), K(ee, null, [
|
|
1561
1562
|
(_(), I(ie(v.$slots[o(ke)]))),
|
|
1562
|
-
|
|
1563
|
+
n.error ? (_(), I(P, {
|
|
1563
1564
|
key: 0,
|
|
1564
1565
|
appearance: "danger",
|
|
1565
|
-
message:
|
|
1566
|
+
message: n.error.message
|
|
1566
1567
|
}, null, 8, ["message"])) : C.value ? G((_(), K("div", z({
|
|
1567
1568
|
key: 1,
|
|
1568
1569
|
class: "ff-object-field ff-object-field-as-child"
|
|
1569
1570
|
}, v.$attrs, {
|
|
1570
|
-
"data-testid": `ff-object-${
|
|
1571
|
+
"data-testid": `ff-object-${n.path.value}`
|
|
1571
1572
|
}), [
|
|
1572
|
-
|
|
1573
|
+
F(v.$slots, "default", {}, () => [
|
|
1573
1574
|
V(Ye, {
|
|
1574
|
-
"entity-checks":
|
|
1575
|
+
"entity-checks": n.schema.value?.entity_checks,
|
|
1575
1576
|
"visible-fields": y.value
|
|
1576
1577
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1577
1578
|
(_(!0), K(ee, null, oe(g.value, (L) => (_(), I(ge, {
|
|
@@ -1584,11 +1585,11 @@ const be = /* @__PURE__ */ U({
|
|
|
1584
1585
|
]) : G((_(), K("div", z({
|
|
1585
1586
|
key: 2,
|
|
1586
1587
|
class: ["ff-object-field", { "ff-object-field-collapsed": !h.value }],
|
|
1587
|
-
"data-testid": `ff-object-${
|
|
1588
|
+
"data-testid": `ff-object-${n.path.value}`
|
|
1588
1589
|
}, v.$attrs), [
|
|
1589
1590
|
B("header", {
|
|
1590
1591
|
class: "ff-object-field-header",
|
|
1591
|
-
"data-testid": `ff-object-header-${
|
|
1592
|
+
"data-testid": `ff-object-header-${n.path.value}`
|
|
1592
1593
|
}, [
|
|
1593
1594
|
B("div", Ka, [
|
|
1594
1595
|
B("button", {
|
|
@@ -1596,22 +1597,22 @@ const be = /* @__PURE__ */ U({
|
|
|
1596
1597
|
"aria-expanded": h.value,
|
|
1597
1598
|
"aria-label": o(f).label,
|
|
1598
1599
|
class: "ff-object-field-toggle-btn",
|
|
1599
|
-
"data-testid": `ff-object-toggle-btn-${
|
|
1600
|
+
"data-testid": `ff-object-toggle-btn-${n.path.value}`,
|
|
1600
1601
|
disabled: !m.value,
|
|
1601
1602
|
type: "button",
|
|
1602
1603
|
onClick: Ce(A, ["prevent", "stop"])
|
|
1603
1604
|
}, [
|
|
1604
1605
|
V(o(Ot), {
|
|
1605
1606
|
class: Te(["ff-object-field-toggle-btn-trigger-icon", { "collapse-expanded": h.value }]),
|
|
1606
|
-
"data-testid": `ff-object-toggle-trigger-icon-${
|
|
1607
|
+
"data-testid": `ff-object-toggle-trigger-icon-${n.path.value}`,
|
|
1607
1608
|
decorative: "",
|
|
1608
|
-
size: `var(--kui-icon-size-30, ${o(
|
|
1609
|
+
size: `var(--kui-icon-size-30, ${o(Ft)})`
|
|
1609
1610
|
}, null, 8, ["class", "data-testid", "size"])
|
|
1610
1611
|
], 8, ja),
|
|
1611
1612
|
u.value ? N("", !0) : (_(), I(o($t), z({
|
|
1612
1613
|
key: 0,
|
|
1613
1614
|
class: "ff-object-field-label",
|
|
1614
|
-
"data-testid": `ff-label-${
|
|
1615
|
+
"data-testid": `ff-label-${n.path.value}`
|
|
1615
1616
|
}, {
|
|
1616
1617
|
...o(f),
|
|
1617
1618
|
required: !1
|
|
@@ -1626,7 +1627,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1626
1627
|
o(f).labelAttributes?.info ? {
|
|
1627
1628
|
name: "tooltip",
|
|
1628
1629
|
fn: x(() => [
|
|
1629
|
-
|
|
1630
|
+
F(v.$slots, "tooltip", {}, () => [
|
|
1630
1631
|
B("div", {
|
|
1631
1632
|
innerHTML: o(f).labelAttributes.info
|
|
1632
1633
|
}, null, 8, Ea)
|
|
@@ -1643,7 +1644,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1643
1644
|
k[0] || (k[0] = (L) => m.value = L),
|
|
1644
1645
|
T
|
|
1645
1646
|
],
|
|
1646
|
-
"data-testid": `ff-object-switch-${
|
|
1647
|
+
"data-testid": `ff-object-switch-${n.path.value}`
|
|
1647
1648
|
}, null, 8, ["modelValue", "data-testid"]))
|
|
1648
1649
|
], 8, Va),
|
|
1649
1650
|
V(qa, null, {
|
|
@@ -1651,11 +1652,11 @@ const be = /* @__PURE__ */ U({
|
|
|
1651
1652
|
h.value ? (_(), K("div", {
|
|
1652
1653
|
key: 0,
|
|
1653
1654
|
class: "ff-object-field-content",
|
|
1654
|
-
"data-testid": `ff-object-content-${
|
|
1655
|
+
"data-testid": `ff-object-content-${n.path.value}`
|
|
1655
1656
|
}, [
|
|
1656
|
-
|
|
1657
|
+
F(v.$slots, "default", {}, () => [
|
|
1657
1658
|
V(Ye, {
|
|
1658
|
-
"entity-checks":
|
|
1659
|
+
"entity-checks": n.schema.value?.entity_checks,
|
|
1659
1660
|
"visible-fields": y.value
|
|
1660
1661
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1661
1662
|
(_(!0), K(ee, null, oe(g.value, (L) => (_(), I(ge, {
|
|
@@ -1667,14 +1668,14 @@ const be = /* @__PURE__ */ U({
|
|
|
1667
1668
|
]),
|
|
1668
1669
|
_: 3
|
|
1669
1670
|
}),
|
|
1670
|
-
h.value ? (_(), K("div",
|
|
1671
|
+
h.value ? (_(), K("div", Fa)) : N("", !0)
|
|
1671
1672
|
], 16, $a)), [
|
|
1672
1673
|
[J, !o(s)]
|
|
1673
1674
|
])
|
|
1674
1675
|
], 64);
|
|
1675
1676
|
};
|
|
1676
1677
|
}
|
|
1677
|
-
}), Ba = /* @__PURE__ */ H(
|
|
1678
|
+
}), Ba = /* @__PURE__ */ H(Da, [["__scopeId", "data-v-66b4c328"]]), Ua = {
|
|
1678
1679
|
key: 1,
|
|
1679
1680
|
class: "ff-number-field-wrapper"
|
|
1680
1681
|
}, Na = ["innerHTML"], za = /* @__PURE__ */ U({
|
|
@@ -1699,8 +1700,8 @@ const be = /* @__PURE__ */ U({
|
|
|
1699
1700
|
},
|
|
1700
1701
|
emits: ["update:modelValue"],
|
|
1701
1702
|
setup(e, { emit: r }) {
|
|
1702
|
-
const t = se(e, ["autofocus", "showVaultSecretPicker", "name"]), { value:
|
|
1703
|
-
const y =
|
|
1703
|
+
const t = se(e, ["autofocus", "showVaultSecretPicker", "name"]), { value: a, hide: s, ...n } = Y(j(() => e.name)), c = ne(n.path, t), { i18n: d } = ve(), p = w(() => {
|
|
1704
|
+
const y = n.schema?.value;
|
|
1704
1705
|
if (typeof y.gt == "number")
|
|
1705
1706
|
return { min: y.type === "integer" ? y.gt + 1 : y.gt };
|
|
1706
1707
|
const [A, T] = y.between ?? [];
|
|
@@ -1708,8 +1709,8 @@ const be = /* @__PURE__ */ U({
|
|
|
1708
1709
|
min: t.min ?? A,
|
|
1709
1710
|
max: t.max ?? T
|
|
1710
1711
|
};
|
|
1711
|
-
}), i = r, m =
|
|
1712
|
-
const y =
|
|
1712
|
+
}), i = r, m = a.value, h = w(() => {
|
|
1713
|
+
const y = a?.value;
|
|
1713
1714
|
if (y == null || y === "") return "";
|
|
1714
1715
|
if (C.value) return `${y}`;
|
|
1715
1716
|
const A = typeof y == "number" ? y : Number(y);
|
|
@@ -1717,7 +1718,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1717
1718
|
});
|
|
1718
1719
|
function l(y) {
|
|
1719
1720
|
const A = u(y);
|
|
1720
|
-
m !== void 0 && y === "" && A !== m ? (
|
|
1721
|
+
m !== void 0 && y === "" && A !== m ? (a.value = null, i("update:modelValue", null)) : (a.value = A, i("update:modelValue", A));
|
|
1721
1722
|
}
|
|
1722
1723
|
function u(y) {
|
|
1723
1724
|
if (y === "") return null;
|
|
@@ -1726,13 +1727,13 @@ const be = /* @__PURE__ */ U({
|
|
|
1726
1727
|
const T = Number(A);
|
|
1727
1728
|
return Number.isFinite(T) ? T : C.value ? y : null;
|
|
1728
1729
|
}
|
|
1729
|
-
const f = we(at, void 0), b = w(() => ({ referenceable: C.value })), C = w(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!
|
|
1730
|
+
const f = we(at, void 0), b = w(() => ({ referenceable: C.value })), C = w(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!n.schema.value?.referenceable), g = w(() => C.value ? "text" : "number");
|
|
1730
1731
|
return (y, A) => {
|
|
1731
|
-
const T =
|
|
1732
|
-
return
|
|
1732
|
+
const T = D("KAlert");
|
|
1733
|
+
return n.error ? (_(), I(T, {
|
|
1733
1734
|
key: 0,
|
|
1734
1735
|
appearance: "danger",
|
|
1735
|
-
message:
|
|
1736
|
+
message: n.error.message
|
|
1736
1737
|
}, null, 8, ["message"])) : G((_(), K("div", Ua, [
|
|
1737
1738
|
V(be, z({ class: "ff-number-field" }, {
|
|
1738
1739
|
...o(c),
|
|
@@ -1740,7 +1741,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1740
1741
|
max: p.value.max
|
|
1741
1742
|
}, {
|
|
1742
1743
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1743
|
-
"data-testid": `ff-${
|
|
1744
|
+
"data-testid": `ff-${n.path.value}`,
|
|
1744
1745
|
"model-value": h.value,
|
|
1745
1746
|
type: g.value,
|
|
1746
1747
|
"onUpdate:modelValue": l
|
|
@@ -1748,7 +1749,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1748
1749
|
o(c).labelAttributes?.info ? {
|
|
1749
1750
|
name: "label-tooltip",
|
|
1750
1751
|
fn: x(() => [
|
|
1751
|
-
|
|
1752
|
+
F(y.$slots, "tooltip", {}, () => [
|
|
1752
1753
|
B("div", {
|
|
1753
1754
|
innerHTML: o(c).labelAttributes.info
|
|
1754
1755
|
}, null, 8, Na)
|
|
@@ -1761,12 +1762,12 @@ const be = /* @__PURE__ */ U({
|
|
|
1761
1762
|
key: 0,
|
|
1762
1763
|
schema: b.value,
|
|
1763
1764
|
update: l,
|
|
1764
|
-
value: o(
|
|
1765
|
+
value: o(a) ?? ""
|
|
1765
1766
|
}, null, 8, ["schema", "value"])) : N("", !0),
|
|
1766
1767
|
C.value && !o(f) ? (_(), I(T, {
|
|
1767
1768
|
key: 1,
|
|
1768
1769
|
appearance: "warning",
|
|
1769
|
-
"data-testid": `ff-vault-secret-picker-warning-${
|
|
1770
|
+
"data-testid": `ff-vault-secret-picker-warning-${n.path.value}`,
|
|
1770
1771
|
message: o(d).t("plugins.free-form.vault_picker.component_error")
|
|
1771
1772
|
}, null, 8, ["data-testid", "message"])) : N("", !0)
|
|
1772
1773
|
], 512)), [
|
|
@@ -1798,6 +1799,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1798
1799
|
loading: { type: Boolean },
|
|
1799
1800
|
dropdownFooterText: {},
|
|
1800
1801
|
dropdownFooterTextPosition: {},
|
|
1802
|
+
dropdownFooterPosition: {},
|
|
1801
1803
|
itemCreationValidator: { type: Function },
|
|
1802
1804
|
enableFiltering: { type: Boolean },
|
|
1803
1805
|
clearable: { type: Boolean },
|
|
@@ -1812,26 +1814,26 @@ const be = /* @__PURE__ */ U({
|
|
|
1812
1814
|
}),
|
|
1813
1815
|
emits: /* @__PURE__ */ Ve(["update"], ["update:modelValue"]),
|
|
1814
1816
|
setup(e, { emit: r }) {
|
|
1815
|
-
const t = r,
|
|
1817
|
+
const t = r, a = se(e, ["name", "items", "multiple", "autofocus"]), { getSelectItems: s } = ae(), { value: n, hide: c, ...d } = Y(
|
|
1816
1818
|
j(() => e.name)
|
|
1817
|
-
), p = ne(d.path,
|
|
1819
|
+
), p = ne(d.path, a);
|
|
1818
1820
|
function i(f) {
|
|
1819
1821
|
return l.value && Array.isArray(f) && f.length === 0 && !p.value.required ? null : f;
|
|
1820
1822
|
}
|
|
1821
1823
|
const m = $e(e, "modelValue", {
|
|
1822
1824
|
// If multiple and value is null/undefined, return empty array for v-model
|
|
1823
|
-
get: () => l.value &&
|
|
1825
|
+
get: () => l.value && n?.value == null ? [] : n.value,
|
|
1824
1826
|
set: (f) => {
|
|
1825
|
-
|
|
1827
|
+
n.value = i(f);
|
|
1826
1828
|
}
|
|
1827
1829
|
}), h = w(() => e.items ? e.items : d.path ? s(d.path.value) : []), l = w(() => e.multiple !== void 0 ? e.multiple : d.schema.value?.type === "set"), u = w(() => l.value ? Vt : Kt);
|
|
1828
1830
|
return (f, b) => {
|
|
1829
|
-
const C =
|
|
1831
|
+
const C = D("KAlert");
|
|
1830
1832
|
return d.error ? (_(), I(C, {
|
|
1831
1833
|
key: 0,
|
|
1832
1834
|
appearance: "danger",
|
|
1833
1835
|
message: d.error.message
|
|
1834
|
-
}, null, 8, ["message"])) : G((_(), I(o(u), z({ key: 1 }, { ...
|
|
1836
|
+
}, null, 8, ["message"])) : G((_(), I(o(u), z({ key: 1 }, { ...a, ...o(p) }, {
|
|
1835
1837
|
modelValue: m.value,
|
|
1836
1838
|
"onUpdate:modelValue": [
|
|
1837
1839
|
b[0] || (b[0] = (g) => m.value = g),
|
|
@@ -1847,7 +1849,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1847
1849
|
"tooltip" in f.$slots || o(p).labelAttributes?.info ? {
|
|
1848
1850
|
name: "label-tooltip",
|
|
1849
1851
|
fn: x(() => [
|
|
1850
|
-
|
|
1852
|
+
F(f.$slots, "tooltip", {}, () => [
|
|
1851
1853
|
B("div", {
|
|
1852
1854
|
innerHTML: o(p).labelAttributes.info
|
|
1853
1855
|
}, null, 8, Wa)
|
|
@@ -1858,7 +1860,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1858
1860
|
f.$slots["item-label"] ? {
|
|
1859
1861
|
name: "item-template",
|
|
1860
1862
|
fn: x(({ item: g }) => [
|
|
1861
|
-
|
|
1863
|
+
F(f.$slots, "item-label", De(Ze(g)), void 0, !0)
|
|
1862
1864
|
]),
|
|
1863
1865
|
key: "1"
|
|
1864
1866
|
} : void 0
|
|
@@ -1877,7 +1879,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1877
1879
|
},
|
|
1878
1880
|
emits: ["update:modelValue"],
|
|
1879
1881
|
setup(e, { emit: r }) {
|
|
1880
|
-
const t = ye(),
|
|
1882
|
+
const t = ye(), a = se(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Y(j(() => e.name)), p = ne(d.path, j({ ...a, ...t })), i = re("");
|
|
1881
1883
|
function m(l) {
|
|
1882
1884
|
i.value = l;
|
|
1883
1885
|
let u = l || null;
|
|
@@ -1886,10 +1888,10 @@ const be = /* @__PURE__ */ U({
|
|
|
1886
1888
|
f && typeof f == "object" && (u = f);
|
|
1887
1889
|
} catch {
|
|
1888
1890
|
}
|
|
1889
|
-
|
|
1891
|
+
n.value = u, s("update:modelValue", u);
|
|
1890
1892
|
}
|
|
1891
1893
|
const h = w(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1892
|
-
return te(
|
|
1894
|
+
return te(n, (l) => {
|
|
1893
1895
|
if (l && typeof l == "object") {
|
|
1894
1896
|
try {
|
|
1895
1897
|
const u = JSON.parse(i.value);
|
|
@@ -1901,7 +1903,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1901
1903
|
}
|
|
1902
1904
|
i.value = l || "";
|
|
1903
1905
|
}, { immediate: !0 }), (l, u) => {
|
|
1904
|
-
const f =
|
|
1906
|
+
const f = D("KAlert");
|
|
1905
1907
|
return d.error ? (_(), I(f, {
|
|
1906
1908
|
key: 0,
|
|
1907
1909
|
appearance: "danger",
|
|
@@ -1922,7 +1924,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1922
1924
|
o(p).labelAttributes?.info ? {
|
|
1923
1925
|
name: "label-tooltip",
|
|
1924
1926
|
fn: x(() => [
|
|
1925
|
-
|
|
1927
|
+
F(l.$slots, "tooltip", {}, () => [
|
|
1926
1928
|
B("div", {
|
|
1927
1929
|
innerHTML: o(p).labelAttributes.info
|
|
1928
1930
|
}, null, 8, Ya)
|
|
@@ -1955,12 +1957,12 @@ const be = /* @__PURE__ */ U({
|
|
|
1955
1957
|
},
|
|
1956
1958
|
emits: ["update:modelValue"],
|
|
1957
1959
|
setup(e, { emit: r }) {
|
|
1958
|
-
const t = ye(), { i18n: { t:
|
|
1960
|
+
const t = ye(), { i18n: { t: a } } = ve(), s = se(e, ["autofocus", "name"]), n = r, { value: c, hide: d, ...p } = Y(j(() => e.name));
|
|
1959
1961
|
if (p.error)
|
|
1960
1962
|
throw new Error(p.error.message);
|
|
1961
|
-
const i = ne(p.path, j({ ...s, ...t })), m = c.value ? c.value.id : null, h = w(() => i.value.placeholder ? i.value.placeholder :
|
|
1963
|
+
const i = ne(p.path, j({ ...s, ...t })), m = c.value ? c.value.id : null, h = w(() => i.value.placeholder ? i.value.placeholder : a("plugins.free-form.foreign_placeholder", { entity: p.schema.value?.reference ?? "entity" })), l = re(m ?? "");
|
|
1962
1964
|
function u(b) {
|
|
1963
|
-
m !== void 0 && b === "" && b !== m ? (c.value = null,
|
|
1965
|
+
m !== void 0 && b === "" && b !== m ? (c.value = null, n("update:modelValue", null)) : (c.value = { id: b.trim() }, n("update:modelValue", c.value));
|
|
1964
1966
|
}
|
|
1965
1967
|
const f = w(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1966
1968
|
return (b, C) => G((_(), I(be, z(o(i), {
|
|
@@ -1978,7 +1980,7 @@ const be = /* @__PURE__ */ U({
|
|
|
1978
1980
|
o(i).labelAttributes?.info ? {
|
|
1979
1981
|
name: "label-tooltip",
|
|
1980
1982
|
fn: x(() => [
|
|
1981
|
-
|
|
1983
|
+
F(b.$slots, "tooltip", {}, () => [
|
|
1982
1984
|
B("div", {
|
|
1983
1985
|
innerHTML: o(i).labelAttributes.info
|
|
1984
1986
|
}, null, 8, Za)
|
|
@@ -2002,30 +2004,30 @@ const be = /* @__PURE__ */ U({
|
|
|
2002
2004
|
},
|
|
2003
2005
|
emits: ["legacyValueChange"],
|
|
2004
2006
|
setup(e, { emit: r }) {
|
|
2005
|
-
const { i18n: t } = ve(),
|
|
2006
|
-
keys:
|
|
2007
|
+
const { i18n: t } = ve(), a = e, s = r, {
|
|
2008
|
+
keys: n,
|
|
2007
2009
|
updateKey: c,
|
|
2008
2010
|
addKey: d,
|
|
2009
2011
|
removeKey: p,
|
|
2010
2012
|
field: i,
|
|
2011
2013
|
fieldDisplayName: m
|
|
2012
|
-
} = ua(j(
|
|
2014
|
+
} = ua(j(a, "name"), v), h = ne(i.path, a), l = ["string", "number", "boolean", "integer", "foreign"], u = w(() => a.oneLine ? !0 : i.schema?.value?.type === "map" && l.includes(i.schema.value.values.type) && !a.appearance?.string?.multiline), f = w(() => i.schema?.value?.type === "map" ? i.schema.value.values : void 0), b = w(() => f.value?.type === "string" && !f.value?.one_of), C = w(() => u.value ? "div" : Ke), g = et("root");
|
|
2013
2015
|
function y(k, P) {
|
|
2014
|
-
|
|
2016
|
+
a.appearance?.string?.multiline || (k.preventDefault(), P === n.value.length - 1 && d(), A(P + 1));
|
|
2015
2017
|
}
|
|
2016
2018
|
async function A(k) {
|
|
2017
2019
|
g.value && (await Re(), g.value.querySelector(`[data-key-input="${k}"]`)?.focus());
|
|
2018
2020
|
}
|
|
2019
2021
|
function T() {
|
|
2020
2022
|
d();
|
|
2021
|
-
const k =
|
|
2022
|
-
A(k === -1 ?
|
|
2023
|
+
const k = n.value.findIndex(([P, M]) => !M);
|
|
2024
|
+
A(k === -1 ? n.value.length - 1 : k);
|
|
2023
2025
|
}
|
|
2024
2026
|
function v(k) {
|
|
2025
2027
|
s("legacyValueChange", k);
|
|
2026
2028
|
}
|
|
2027
2029
|
return (k, P) => {
|
|
2028
|
-
const M =
|
|
2030
|
+
const M = D("KAlert"), L = D("KLabel"), S = D("KButton"), R = D("KTooltip");
|
|
2029
2031
|
return o(i).error ? (_(), I(M, {
|
|
2030
2032
|
key: 0,
|
|
2031
2033
|
appearance: "danger",
|
|
@@ -2055,7 +2057,7 @@ const be = /* @__PURE__ */ U({
|
|
|
2055
2057
|
o(h).labelAttributes?.info ? {
|
|
2056
2058
|
name: "tooltip",
|
|
2057
2059
|
fn: x(() => [
|
|
2058
|
-
|
|
2060
|
+
F(k.$slots, "tooltip", {}, () => [
|
|
2059
2061
|
B("div", {
|
|
2060
2062
|
innerHTML: o(h).labelAttributes.info
|
|
2061
2063
|
}, null, 8, on)
|
|
@@ -2065,7 +2067,7 @@ const be = /* @__PURE__ */ U({
|
|
|
2065
2067
|
} : void 0
|
|
2066
2068
|
]), 1040, ["data-testid", "required", "tooltip-attributes"])
|
|
2067
2069
|
], 8, nn)) : N("", !0),
|
|
2068
|
-
(_(!0), K(ee, null, oe(o(
|
|
2070
|
+
(_(!0), K(ee, null, oe(o(n), ([q, X], Q) => (_(), I(ie(C.value), {
|
|
2069
2071
|
key: q,
|
|
2070
2072
|
class: Te(["ff-map-field-item", {
|
|
2071
2073
|
"ff-map-field-item-simple": u.value,
|
|
@@ -2084,7 +2086,7 @@ const be = /* @__PURE__ */ U({
|
|
|
2084
2086
|
onKeydown: Ne(Ce((de) => A(Q), ["prevent"]), ["enter"]),
|
|
2085
2087
|
"onUpdate:modelValue": (de) => o(c)(q, de)
|
|
2086
2088
|
}, null, 8, ["data-key-input", "data-testid", "model-value", "placeholder", "onKeydown", "onUpdate:modelValue"]),
|
|
2087
|
-
|
|
2089
|
+
F(k.$slots, "default", { keyId: q }, () => [
|
|
2088
2090
|
b.value ? (_(), I(ft, {
|
|
2089
2091
|
key: 0,
|
|
2090
2092
|
"inline-vault-picker": "",
|
|
@@ -2147,7 +2149,7 @@ const be = /* @__PURE__ */ U({
|
|
|
2147
2149
|
},
|
|
2148
2150
|
emits: ["globalAction"],
|
|
2149
2151
|
setup(e) {
|
|
2150
|
-
const r = e, t = Y(j(r, "name")),
|
|
2152
|
+
const r = e, t = Y(j(r, "name")), a = w(() => {
|
|
2151
2153
|
switch (t.schema?.value?.type) {
|
|
2152
2154
|
case "string":
|
|
2153
2155
|
return "one_of" in t.schema.value ? Se : ft;
|
|
@@ -2172,8 +2174,8 @@ const be = /* @__PURE__ */ U({
|
|
|
2172
2174
|
return;
|
|
2173
2175
|
}
|
|
2174
2176
|
});
|
|
2175
|
-
return (s,
|
|
2176
|
-
const c =
|
|
2177
|
+
return (s, n) => {
|
|
2178
|
+
const c = D("KAlert");
|
|
2177
2179
|
return _(), K(ee, null, [
|
|
2178
2180
|
(_(), I(ie(s.$slots[o(ke)]))),
|
|
2179
2181
|
o(t).error ? (_(), I(c, {
|
|
@@ -2184,9 +2186,9 @@ const be = /* @__PURE__ */ U({
|
|
|
2184
2186
|
key: 1,
|
|
2185
2187
|
autofocus: r.autofocus,
|
|
2186
2188
|
name: Ee(o(t).path.value),
|
|
2187
|
-
onGlobalAction:
|
|
2189
|
+
onGlobalAction: n[0] || (n[0] = (d, p) => s.$emit("globalAction", d, p))
|
|
2188
2190
|
}, null, 40, ["autofocus", "name"])) : (_(), K(ee, { key: 2 }, [
|
|
2189
|
-
|
|
2191
|
+
a.value ? (_(), I(ie(a.value), {
|
|
2190
2192
|
key: 0,
|
|
2191
2193
|
autofocus: r.autofocus,
|
|
2192
2194
|
name: Ee(o(t).path.value)
|
|
@@ -2195,7 +2197,7 @@ const be = /* @__PURE__ */ U({
|
|
|
2195
2197
|
appearance: "warning",
|
|
2196
2198
|
message: `${o(t).path.value} ${o(t).schema.value.type} (no renderer yet)`
|
|
2197
2199
|
}, null, 8, ["message"])),
|
|
2198
|
-
|
|
2200
|
+
F(s.$slots, "default")
|
|
2199
2201
|
], 64))
|
|
2200
2202
|
], 64);
|
|
2201
2203
|
};
|
|
@@ -2213,14 +2215,14 @@ const be = /* @__PURE__ */ U({
|
|
|
2213
2215
|
},
|
|
2214
2216
|
emits: ["change", "globalAction"],
|
|
2215
2217
|
setup(e, { expose: r, emit: t }) {
|
|
2216
|
-
const
|
|
2218
|
+
const a = t, s = Ae(), { getSchema: n, formData: c, setValue: d, getValue: p, rootRenderRules: i } = ta({
|
|
2217
2219
|
schema: e.schema,
|
|
2218
2220
|
propsData: w(() => e.data),
|
|
2219
2221
|
propsConfig: e.config,
|
|
2220
2222
|
propsRenderRules: j(() => e.renderRules),
|
|
2221
|
-
onChange: (h) =>
|
|
2223
|
+
onChange: (h) => a("change", h)
|
|
2222
2224
|
}), m = w(() => {
|
|
2223
|
-
const { fields: h } =
|
|
2225
|
+
const { fields: h } = n();
|
|
2224
2226
|
let l = [...h];
|
|
2225
2227
|
return e.fieldsOrder ? st(l, e.fieldsOrder) : (i.value?.bundles && (l = lt([...l], i.value.bundles)), l);
|
|
2226
2228
|
});
|
|
@@ -2231,11 +2233,11 @@ const be = /* @__PURE__ */ U({
|
|
|
2231
2233
|
}), (h, l) => (_(), I(ie(e.tag), null, {
|
|
2232
2234
|
default: x(() => [
|
|
2233
2235
|
(_(), I(ie(o(s)[o(ke)]))),
|
|
2234
|
-
|
|
2236
|
+
F(h.$slots, "default", {}, () => [
|
|
2235
2237
|
(_(!0), K(ee, null, oe(m.value, (u) => (_(), I(ge, {
|
|
2236
2238
|
key: Object.keys(u)[0],
|
|
2237
2239
|
name: Object.keys(u)[0],
|
|
2238
|
-
onGlobalAction: l[0] || (l[0] = (f, b) =>
|
|
2240
|
+
onGlobalAction: l[0] || (l[0] = (f, b) => a("globalAction", f, b))
|
|
2239
2241
|
}, null, 8, ["name"]))), 128))
|
|
2240
2242
|
])
|
|
2241
2243
|
]),
|
|
@@ -2249,8 +2251,8 @@ const be = /* @__PURE__ */ U({
|
|
|
2249
2251
|
priority: {}
|
|
2250
2252
|
},
|
|
2251
2253
|
setup(e) {
|
|
2252
|
-
const r = e, { default: t } = Ae(), { fieldRendererRegistry:
|
|
2253
|
-
return t &&
|
|
2254
|
+
const r = e, { default: t } = Ae(), { fieldRendererRegistry: a } = ae();
|
|
2255
|
+
return t && a.set(r.match, t), (s, n) => null;
|
|
2254
2256
|
}
|
|
2255
2257
|
}), 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 scopes" }, 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.
|
|
2256
2258
|
If the limit is exceeded and the user receives a 429 error, each additional request within the sliding window (hour)
|
|
@@ -2288,11 +2290,11 @@ const kn = ["data-testid"], Sn = /* @__PURE__ */ U({
|
|
|
2288
2290
|
},
|
|
2289
2291
|
emits: ["update:modelValue"],
|
|
2290
2292
|
setup(e, { emit: r }) {
|
|
2291
|
-
const { i18n: { t } } = wn(),
|
|
2293
|
+
const { i18n: { t } } = wn(), a = se(e, ["name", "enabledText", "disabledText"]), { value: s, hide: n, emptyOrDefaultValue: c, ...d } = Y(j(() => e.name)), p = r, i = (h) => {
|
|
2292
2294
|
s.value = h, p("update:modelValue", h);
|
|
2293
|
-
}, m = ne(d.path,
|
|
2295
|
+
}, m = ne(d.path, a);
|
|
2294
2296
|
return (h, l) => {
|
|
2295
|
-
const u =
|
|
2297
|
+
const u = D("KAlert");
|
|
2296
2298
|
return d.error ? (_(), I(u, {
|
|
2297
2299
|
key: 0,
|
|
2298
2300
|
appearance: "danger",
|
|
@@ -2312,7 +2314,7 @@ const kn = ["data-testid"], Sn = /* @__PURE__ */ U({
|
|
|
2312
2314
|
_: 1
|
|
2313
2315
|
}, 16, ["model-value"])
|
|
2314
2316
|
], 8, kn)), [
|
|
2315
|
-
[J, !o(
|
|
2317
|
+
[J, !o(n)]
|
|
2316
2318
|
]);
|
|
2317
2319
|
};
|
|
2318
2320
|
}
|