@kong-ui-public/entities-plugins 9.251.4 → 9.252.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entities-plugins.es.js +14970 -13788
- package/dist/entities-plugins.umd.js +124 -124
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/composables/field-path.d.ts.map +1 -1
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/composables/labels.d.ts.map +1 -1
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/types.d.ts +22 -9
- package/dist/filler/packages/entities/entities-plugins/src/components/free-form/shared/types.d.ts.map +1 -1
- package/dist/freeform/index.js +758 -745
- package/dist/freeform/style.css +1 -1
- package/dist/style.css +1 -1
- package/dist/types/components/PluginEntityForm.vue.d.ts +1 -1
- package/dist/types/components/PluginForm.vue.d.ts +1 -1
- package/dist/types/components/fields/kong-identity/ConfigFormWithIdentity.vue.d.ts.map +1 -1
- package/dist/types/components/free-form/plugins/basic-auth/index.d.ts.map +1 -1
- package/dist/types/components/free-form/plugins/key-auth/index.d.ts.map +1 -1
- package/dist/types/components/free-form/plugins/openid-connect/AuthMethodsField.vue.d.ts +23 -0
- package/dist/types/components/free-form/plugins/openid-connect/AuthMethodsField.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/ClientJwkField.vue.d.ts +7 -0
- package/dist/types/components/free-form/plugins/openid-connect/ClientJwkField.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/OpenidConnectForm.vue.d.ts +23 -0
- package/dist/types/components/free-form/plugins/openid-connect/OpenidConnectForm.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/PrincipalLookupSettings.vue.d.ts +29 -0
- package/dist/types/components/free-form/plugins/openid-connect/PrincipalLookupSettings.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/PrincipalsSection.vue.d.ts +24 -0
- package/dist/types/components/free-form/plugins/openid-connect/PrincipalsSection.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/VerifySignatureField.vue.d.ts +7 -0
- package/dist/types/components/free-form/plugins/openid-connect/VerifySignatureField.vue.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/index.d.ts +3 -0
- package/dist/types/components/free-form/plugins/openid-connect/index.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/types.d.ts +19 -0
- package/dist/types/components/free-form/plugins/openid-connect/types.d.ts.map +1 -0
- package/dist/types/components/free-form/plugins/openid-connect/useConsumerClaimMigration.d.ts +9 -0
- package/dist/types/components/free-form/plugins/openid-connect/useConsumerClaimMigration.d.ts.map +1 -0
- package/dist/types/components/free-form/shared/ArrayField.vue.d.ts +3 -0
- package/dist/types/components/free-form/shared/ArrayField.vue.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/composables/field-path.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/composables/labels.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/define-plugin-config.d.ts +7 -1
- package/dist/types/components/free-form/shared/define-plugin-config.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/plugin-registry.d.ts +4 -3
- package/dist/types/components/free-form/shared/plugin-registry.d.ts.map +1 -1
- package/dist/types/components/free-form/shared/types.d.ts +22 -9
- package/dist/types/components/free-form/shared/types.d.ts.map +1 -1
- package/package.json +9 -9
package/dist/freeform/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { toValue as E, computed as k, ref as se, watch as te, onBeforeUnmount as bt, reactive as Xe, toRef as
|
|
2
|
-
import { marked as
|
|
3
|
-
import
|
|
4
|
-
import { get as tt, uniqueId as at, isEqual as fe, omit as
|
|
5
|
-
import { createInjectionState as
|
|
1
|
+
import { toValue as E, computed as k, ref as se, watch as te, onBeforeUnmount as bt, reactive as Xe, toRef as V, useSlots as we, provide as Ie, inject as Ae, toRaw as Qe, onUnmounted as _t, defineComponent as N, useAttrs as ye, openBlock as b, createBlock as L, unref as o, mergeProps as W, createSlots as J, renderList as re, withCtx as K, renderSlot as O, normalizeProps as Fe, guardReactiveProps as Ze, createPropsRestProxy as le, resolveComponent as F, withDirectives as Y, createElementBlock as j, createVNode as $, createElementVNode as B, resolveDynamicComponent as ie, createCommentVNode as H, Fragment as ee, vShow as X, useCssVars as wt, useTemplateRef as et, normalizeClass as Ce, createTextVNode as pe, toDisplayString as de, withModifiers as Te, nextTick as xe, Transition as At, useId as kt, useModel as Re, onBeforeMount as St, mergeModels as $e, withKeys as Ne } from "vue";
|
|
2
|
+
import { marked as Ct } from "marked";
|
|
3
|
+
import Tt from "dompurify";
|
|
4
|
+
import { get as tt, uniqueId as at, isEqual as fe, omit as It, cloneDeep as ze, isFunction as He, set as Pt, upperFirst as qt } from "lodash-es";
|
|
5
|
+
import { createInjectionState as Lt } from "@vueuse/core";
|
|
6
6
|
import { AUTOFILL_SLOT as nt } from "@kong-ui-public/forms";
|
|
7
|
-
import { createI18n as
|
|
8
|
-
import { KTextArea as Mt, KInput as
|
|
9
|
-
import { AddIcon as
|
|
10
|
-
import { KUI_ICON_SIZE_30 as
|
|
11
|
-
function
|
|
7
|
+
import { createI18n as it, i18nTComponent as ot } from "@kong-ui-public/i18n";
|
|
8
|
+
import { KTextArea as Mt, KInput as Kt, KCheckbox as xt, KCard as je, KLabel as Rt, KMultiselect as $t, KSelect as jt, KInputSwitch as Vt } from "@kong/kongponents";
|
|
9
|
+
import { AddIcon as Ve, CloseIcon as rt, TrashIcon as Et, ChevronRightIcon as Ot } from "@kong/icons";
|
|
10
|
+
import { KUI_ICON_SIZE_30 as Dt } from "@kong/design-tokens";
|
|
11
|
+
function Ft(e) {
|
|
12
12
|
return e.map((r) => ({ value: r, label: `${r}` }));
|
|
13
13
|
}
|
|
14
|
-
const
|
|
14
|
+
const Ue = "*", Be = "#", ce = "$", Pe = ".";
|
|
15
15
|
function R(...e) {
|
|
16
|
-
return e.join(
|
|
16
|
+
return e.join(Pe);
|
|
17
17
|
}
|
|
18
18
|
function Ee(...e) {
|
|
19
19
|
return R(ce, ...e);
|
|
@@ -22,7 +22,7 @@ function We(e) {
|
|
|
22
22
|
return e.startsWith(R(ce, ""));
|
|
23
23
|
}
|
|
24
24
|
function Z(e) {
|
|
25
|
-
return e.split(
|
|
25
|
+
return e.split(Pe).filter((r) => r !== "");
|
|
26
26
|
}
|
|
27
27
|
function me(e) {
|
|
28
28
|
const r = Z(e);
|
|
@@ -36,7 +36,7 @@ function st(e, r, t, a = "") {
|
|
|
36
36
|
r(c) ? e[n] = t(c) : st(e[n], r, t, c);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function Ut(e) {
|
|
40
40
|
const r = E(e);
|
|
41
41
|
return r ? r.type === "set" && r.elements.type === "string" && !r.elements.one_of : !1;
|
|
42
42
|
}
|
|
@@ -48,56 +48,56 @@ function lt(e, r) {
|
|
|
48
48
|
}
|
|
49
49
|
function ut(e, r) {
|
|
50
50
|
const t = /* @__PURE__ */ new Map();
|
|
51
|
-
e.forEach((
|
|
52
|
-
const p = Object.keys(
|
|
53
|
-
t.set(p,
|
|
51
|
+
e.forEach((i) => {
|
|
52
|
+
const p = Object.keys(i)[0];
|
|
53
|
+
t.set(p, i);
|
|
54
54
|
});
|
|
55
55
|
const a = /* @__PURE__ */ new Map();
|
|
56
|
-
r.forEach((
|
|
57
|
-
|
|
56
|
+
r.forEach((i, p) => {
|
|
57
|
+
i.forEach((h, l) => {
|
|
58
58
|
a.has(h) || a.set(h, []), a.get(h).push({ bundleIndex: p, position: l });
|
|
59
59
|
});
|
|
60
60
|
});
|
|
61
|
-
const s = /* @__PURE__ */ new Set(), n = [], c = /* @__PURE__ */ new Set(), d = (
|
|
62
|
-
const p = a.get(
|
|
61
|
+
const s = /* @__PURE__ */ new Set(), n = [], c = /* @__PURE__ */ new Set(), d = (i) => {
|
|
62
|
+
const p = a.get(i);
|
|
63
63
|
if (!p) return !0;
|
|
64
64
|
for (const { bundleIndex: h, position: l } of p) {
|
|
65
65
|
const u = r[h];
|
|
66
|
-
for (let
|
|
67
|
-
const y = u[
|
|
66
|
+
for (let m = 0; m < l; m++) {
|
|
67
|
+
const y = u[m];
|
|
68
68
|
if (t.has(y) && !s.has(y))
|
|
69
69
|
return !1;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
return !0;
|
|
73
|
-
},
|
|
74
|
-
if (s.has(
|
|
75
|
-
const p = t.get(
|
|
73
|
+
}, f = (i) => {
|
|
74
|
+
if (s.has(i)) return;
|
|
75
|
+
const p = t.get(i);
|
|
76
76
|
if (!p) return;
|
|
77
|
-
n.push(p), s.add(
|
|
78
|
-
const h = a.get(
|
|
77
|
+
n.push(p), s.add(i), c.delete(i);
|
|
78
|
+
const h = a.get(i);
|
|
79
79
|
if (h)
|
|
80
|
-
for (const { bundleIndex: u, position:
|
|
80
|
+
for (const { bundleIndex: u, position: m } of h) {
|
|
81
81
|
const y = r[u];
|
|
82
|
-
for (let
|
|
83
|
-
const M = y[
|
|
82
|
+
for (let C = m + 1; C < y.length; C++) {
|
|
83
|
+
const M = y[C];
|
|
84
84
|
if (!s.has(M)) {
|
|
85
|
-
const
|
|
86
|
-
|
|
85
|
+
const I = t.get(M);
|
|
86
|
+
I && (n.push(I), s.add(M), c.delete(M));
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
const l = Array.from(c);
|
|
91
91
|
for (const u of l)
|
|
92
|
-
d(u) &&
|
|
92
|
+
d(u) && f(u);
|
|
93
93
|
};
|
|
94
|
-
for (const
|
|
95
|
-
const p = Object.keys(
|
|
96
|
-
s.has(p) || (d(p) ?
|
|
94
|
+
for (const i of e) {
|
|
95
|
+
const p = Object.keys(i)[0];
|
|
96
|
+
s.has(p) || (d(p) ? f(p) : c.add(p));
|
|
97
97
|
}
|
|
98
98
|
return n;
|
|
99
99
|
}
|
|
100
|
-
function
|
|
100
|
+
function Bt(e) {
|
|
101
101
|
const r = Z(e);
|
|
102
102
|
let t = { parent: null };
|
|
103
103
|
for (r.pop(); r.length; ) {
|
|
@@ -107,7 +107,7 @@ function Ut(e) {
|
|
|
107
107
|
return t;
|
|
108
108
|
}
|
|
109
109
|
function ct(e) {
|
|
110
|
-
return k(() =>
|
|
110
|
+
return k(() => Bt(E(e)));
|
|
111
111
|
}
|
|
112
112
|
const Ge = /* @__PURE__ */ Symbol("free-form-field-path"), Oe = /* @__PURE__ */ Symbol("free-form-field-renderer-slots"), Je = /* @__PURE__ */ Symbol("free-form-field-reset-label-path-setting"), ke = "free-form-field-renderers-slot", Nt = {
|
|
113
113
|
tooltipAttributes: {
|
|
@@ -117,18 +117,18 @@ const Ge = /* @__PURE__ */ Symbol("free-form-field-path"), Oe = /* @__PURE__ */
|
|
|
117
117
|
};
|
|
118
118
|
function zt(e, r = "") {
|
|
119
119
|
const t = {}, a = e;
|
|
120
|
-
return Array.isArray(a.fields) ? Object.assign(t,
|
|
120
|
+
return Array.isArray(a.fields) ? Object.assign(t, qe(a, r)) : e.type === "array" && e.elements ? Object.assign(t, Le(e, r)) : e.type === "map" && e.values && Object.assign(t, Me(e, r)), t;
|
|
121
121
|
}
|
|
122
|
-
function
|
|
122
|
+
function qe(e, r = "") {
|
|
123
123
|
const t = {};
|
|
124
124
|
if (Array.isArray(e.fields))
|
|
125
125
|
for (const a of e.fields) {
|
|
126
126
|
const s = Object.keys(a)[0], n = a[s], c = r ? R(r, s) : s;
|
|
127
127
|
if (t[c] = n, n.type === "record" && Array.isArray(n.fields)) {
|
|
128
|
-
const d =
|
|
128
|
+
const d = qe(n, c);
|
|
129
129
|
Object.assign(t, d);
|
|
130
130
|
} else if (n.type === "array" && n.elements) {
|
|
131
|
-
const d =
|
|
131
|
+
const d = Le(n, c);
|
|
132
132
|
Object.assign(t, d);
|
|
133
133
|
} else if (n.type === "map" && n.values) {
|
|
134
134
|
const d = Me(n, c);
|
|
@@ -137,16 +137,16 @@ function Le(e, r = "") {
|
|
|
137
137
|
}
|
|
138
138
|
return t;
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function Le(e, r = "") {
|
|
141
141
|
const t = {};
|
|
142
142
|
if (e.elements) {
|
|
143
143
|
let a = e.elements;
|
|
144
|
-
const s = R(r,
|
|
144
|
+
const s = R(r, Ue);
|
|
145
145
|
if (e.encrypted && a.type === "string" && (a = { ...a, encrypted: !0 }), t[s] = a, a.type === "record" && Array.isArray(a.fields)) {
|
|
146
|
-
const n =
|
|
146
|
+
const n = qe(a, s);
|
|
147
147
|
Object.assign(t, n);
|
|
148
148
|
} else if (a.type === "array" && a.elements) {
|
|
149
|
-
const n =
|
|
149
|
+
const n = Le(a, s);
|
|
150
150
|
Object.assign(t, n);
|
|
151
151
|
} else if (a.type === "map" && a.values) {
|
|
152
152
|
const n = Me(a, s);
|
|
@@ -156,12 +156,12 @@ function qe(e, r = "") {
|
|
|
156
156
|
return t;
|
|
157
157
|
}
|
|
158
158
|
function Me(e, r = "") {
|
|
159
|
-
const t = {}, a = R(r,
|
|
159
|
+
const t = {}, a = R(r, Be);
|
|
160
160
|
if (t[a] = e.values, e.values.type === "record" && Array.isArray(e.values.fields)) {
|
|
161
|
-
const s =
|
|
161
|
+
const s = qe(e.values, a);
|
|
162
162
|
Object.assign(t, s);
|
|
163
163
|
} else if ((e.values.type === "array" || e.values.type === "set") && e.values.elements) {
|
|
164
|
-
const s =
|
|
164
|
+
const s = Le(e.values, a);
|
|
165
165
|
Object.assign(t, s);
|
|
166
166
|
} else if (e.values.type === "map" && e.values.values) {
|
|
167
167
|
const s = Me(e.values, a);
|
|
@@ -173,7 +173,7 @@ function he(e, r) {
|
|
|
173
173
|
const t = Z(e), a = [];
|
|
174
174
|
for (let s = 0; s < t.length; s++) {
|
|
175
175
|
const n = t[s], c = a.length > 0 ? R(...a) : "", d = c ? r[c] : void 0;
|
|
176
|
-
d?.type === "map" ? a.push(
|
|
176
|
+
d?.type === "map" ? a.push(Be) : d?.type === "array" ? a.push(Ue) : a.push(n);
|
|
177
177
|
}
|
|
178
178
|
return R(...a);
|
|
179
179
|
}
|
|
@@ -182,57 +182,57 @@ function Ht(e) {
|
|
|
182
182
|
function a(l) {
|
|
183
183
|
if (l) {
|
|
184
184
|
let u = he(l, t.value || {});
|
|
185
|
-
return u.startsWith(`${ce}${
|
|
185
|
+
return u.startsWith(`${ce}${Pe}`) && (u = u.slice(2)), t.value?.[u];
|
|
186
186
|
}
|
|
187
187
|
return r;
|
|
188
188
|
}
|
|
189
189
|
function s(l, u = !1) {
|
|
190
|
-
const
|
|
191
|
-
if (!
|
|
190
|
+
const m = a(l);
|
|
191
|
+
if (!m)
|
|
192
192
|
return null;
|
|
193
|
-
if (
|
|
194
|
-
return
|
|
195
|
-
if (!
|
|
196
|
-
return u ||
|
|
193
|
+
if (m.default !== void 0)
|
|
194
|
+
return m.default;
|
|
195
|
+
if (!m.auto)
|
|
196
|
+
return u || m.required ? m.type === "record" ? n(m, l) : m.type === "array" ? [] : m.type === "map" ? {} : null : null;
|
|
197
197
|
}
|
|
198
198
|
function n(l, u) {
|
|
199
|
-
const
|
|
199
|
+
const m = {};
|
|
200
200
|
if (Array.isArray(l.fields))
|
|
201
201
|
for (const y of l.fields) {
|
|
202
|
-
const
|
|
203
|
-
|
|
202
|
+
const C = Object.keys(y)[0], M = u ? `${u}.${C}` : C, I = s(M, !1);
|
|
203
|
+
I !== void 0 && (m[C] = I);
|
|
204
204
|
}
|
|
205
|
-
return
|
|
205
|
+
return m;
|
|
206
206
|
}
|
|
207
207
|
function c(l) {
|
|
208
208
|
return l ? s(l, !0) : n(a(), "");
|
|
209
209
|
}
|
|
210
210
|
function d(l) {
|
|
211
|
-
const u = a(l),
|
|
211
|
+
const u = a(l), m = u?.description ? Tt.sanitize(Ct.parse(u.description, { async: !1 })) : void 0;
|
|
212
212
|
return {
|
|
213
213
|
...Nt,
|
|
214
214
|
"data-testid": `ff-label-${l}`,
|
|
215
|
-
info:
|
|
215
|
+
info: m
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
|
-
function
|
|
218
|
+
function f(l) {
|
|
219
219
|
const u = a(l);
|
|
220
|
-
return
|
|
220
|
+
return Ft(u?.one_of || u.elements?.one_of || []);
|
|
221
221
|
}
|
|
222
|
-
function
|
|
223
|
-
const u = a(l),
|
|
222
|
+
function i(l) {
|
|
223
|
+
const u = a(l), m = u?.default;
|
|
224
224
|
let y = null;
|
|
225
|
-
if (u?.type === "foreign" &&
|
|
226
|
-
y =
|
|
225
|
+
if (u?.type === "foreign" && m?.id)
|
|
226
|
+
y = m.id;
|
|
227
227
|
else {
|
|
228
|
-
if (
|
|
228
|
+
if (m == null || typeof m == "object" || m === "")
|
|
229
229
|
return null;
|
|
230
|
-
if (Array.isArray(
|
|
231
|
-
if (
|
|
230
|
+
if (Array.isArray(m)) {
|
|
231
|
+
if (m.length === 0)
|
|
232
232
|
return null;
|
|
233
|
-
y =
|
|
233
|
+
y = m.join(", ");
|
|
234
234
|
} else
|
|
235
|
-
y =
|
|
235
|
+
y = m.toString();
|
|
236
236
|
}
|
|
237
237
|
return `Default: ${y}`;
|
|
238
238
|
}
|
|
@@ -246,18 +246,18 @@ function Ht(e) {
|
|
|
246
246
|
getSchemaMap: p,
|
|
247
247
|
getSchema: a,
|
|
248
248
|
getDefault: c,
|
|
249
|
-
getSelectItems:
|
|
249
|
+
getSelectItems: f,
|
|
250
250
|
getLabelAttributes: d,
|
|
251
|
-
getPlaceholder:
|
|
251
|
+
getPlaceholder: i,
|
|
252
252
|
getEmptyOrDefault: h
|
|
253
253
|
};
|
|
254
254
|
}
|
|
255
|
-
const
|
|
256
|
-
function
|
|
257
|
-
return { [
|
|
255
|
+
const De = /* @__PURE__ */ Symbol("ff-render-rule-exact-match");
|
|
256
|
+
function $n(e) {
|
|
257
|
+
return { [De]: e };
|
|
258
258
|
}
|
|
259
259
|
function Wt(e, r) {
|
|
260
|
-
return typeof r == "object" && r !== null &&
|
|
260
|
+
return typeof r == "object" && r !== null && De in r ? fe(e, r[De]) : Array.isArray(r) ? r.some((a) => fe(e, a)) : fe(e, r);
|
|
261
261
|
}
|
|
262
262
|
function Gt(e, r) {
|
|
263
263
|
const t = se({}), a = se({});
|
|
@@ -271,86 +271,86 @@ function Gt(e, r) {
|
|
|
271
271
|
delete A[S], Object.keys(A).length ? a.value[g] = A : delete a.value[g];
|
|
272
272
|
}
|
|
273
273
|
function c(g, S) {
|
|
274
|
-
const v = g.map((
|
|
275
|
-
if (!v.every((
|
|
276
|
-
const
|
|
274
|
+
const v = g.map((T) => Z(T).length), A = v[0];
|
|
275
|
+
if (!v.every((T) => T === A)) {
|
|
276
|
+
const T = g.map((x, P) => ` - '${x}' is at level ${v[P]}`).join(`
|
|
277
277
|
`);
|
|
278
278
|
throw new Error(
|
|
279
279
|
`${S}: Fields must be at the same level. Found mixed levels:
|
|
280
|
-
${
|
|
280
|
+
${T}`
|
|
281
281
|
);
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
function d(g) {
|
|
285
285
|
for (const [S, v] of Object.entries(g)) {
|
|
286
286
|
if (!v.bundles) continue;
|
|
287
|
-
for (const
|
|
288
|
-
if (new Set(
|
|
289
|
-
const
|
|
287
|
+
for (const T of v.bundles)
|
|
288
|
+
if (new Set(T).size !== T.length) {
|
|
289
|
+
const P = T.filter((_, q) => T.indexOf(_) !== q);
|
|
290
290
|
throw new Error(
|
|
291
|
-
`Self-cycle detected in bundle: field '${
|
|
291
|
+
`Self-cycle detected in bundle: field '${P[0]}' appears multiple times in [${T.join(", ")}]`
|
|
292
292
|
);
|
|
293
293
|
}
|
|
294
294
|
const A = /* @__PURE__ */ new Map();
|
|
295
|
-
for (const
|
|
296
|
-
for (let
|
|
297
|
-
const
|
|
298
|
-
A.has(
|
|
295
|
+
for (const T of v.bundles)
|
|
296
|
+
for (let x = 1; x < T.length; x++) {
|
|
297
|
+
const P = T[x], _ = T[x - 1];
|
|
298
|
+
A.has(P) || A.set(P, /* @__PURE__ */ new Set()), A.get(P).add(_);
|
|
299
299
|
}
|
|
300
|
-
for (const
|
|
301
|
-
let
|
|
302
|
-
if (_.includes(
|
|
303
|
-
const
|
|
300
|
+
for (const T of A.keys()) {
|
|
301
|
+
let x = function(q) {
|
|
302
|
+
if (_.includes(q)) {
|
|
303
|
+
const U = [..._, q].join(" -> ");
|
|
304
304
|
throw new Error(
|
|
305
305
|
`Circular bundle detected in path '${S}':
|
|
306
|
-
${
|
|
306
|
+
${U}`
|
|
307
307
|
);
|
|
308
308
|
}
|
|
309
|
-
if (
|
|
310
|
-
|
|
311
|
-
const w = A.get(
|
|
309
|
+
if (P.has(q)) return;
|
|
310
|
+
P.add(q), _.push(q);
|
|
311
|
+
const w = A.get(q);
|
|
312
312
|
if (w)
|
|
313
|
-
for (const
|
|
314
|
-
|
|
313
|
+
for (const U of w)
|
|
314
|
+
x(U);
|
|
315
315
|
_.pop();
|
|
316
316
|
};
|
|
317
|
-
const
|
|
318
|
-
|
|
317
|
+
const P = /* @__PURE__ */ new Set(), _ = [];
|
|
318
|
+
x(T);
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
-
function
|
|
322
|
+
function f(g) {
|
|
323
323
|
for (const [S, v] of Object.entries(g))
|
|
324
324
|
if (v.dependencies)
|
|
325
325
|
for (const A of Object.keys(v.dependencies)) {
|
|
326
|
-
let
|
|
327
|
-
if (
|
|
328
|
-
const w = [...
|
|
326
|
+
let T = function(_) {
|
|
327
|
+
if (P.includes(_)) {
|
|
328
|
+
const w = [...P, _].join(" -> ");
|
|
329
329
|
throw new Error(
|
|
330
330
|
`Circular dependency detected in path '${S}':
|
|
331
331
|
${w}`
|
|
332
332
|
);
|
|
333
333
|
}
|
|
334
|
-
if (
|
|
335
|
-
|
|
336
|
-
const
|
|
337
|
-
if (
|
|
338
|
-
const [w] =
|
|
339
|
-
v.dependencies[w] &&
|
|
334
|
+
if (x.has(_)) return;
|
|
335
|
+
x.add(_), P.push(_);
|
|
336
|
+
const q = v.dependencies[_];
|
|
337
|
+
if (q) {
|
|
338
|
+
const [w] = q;
|
|
339
|
+
v.dependencies[w] && T(w);
|
|
340
340
|
}
|
|
341
|
-
|
|
341
|
+
P.pop();
|
|
342
342
|
};
|
|
343
|
-
const
|
|
344
|
-
|
|
343
|
+
const x = /* @__PURE__ */ new Set(), P = [];
|
|
344
|
+
T(A);
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
-
function
|
|
348
|
-
const v = g.map((
|
|
347
|
+
function i(g, S) {
|
|
348
|
+
const v = g.map((T) => S ? R(S, T) : T), A = Z(v[0]);
|
|
349
349
|
return A.pop(), R(...A);
|
|
350
350
|
}
|
|
351
351
|
function p(g, S) {
|
|
352
352
|
if (!S) return g;
|
|
353
|
-
const v = `${S}${
|
|
353
|
+
const v = `${S}${Pe}`;
|
|
354
354
|
return g.startsWith(v) ? g.slice(v.length) : g;
|
|
355
355
|
}
|
|
356
356
|
function h(g) {
|
|
@@ -362,32 +362,32 @@ ${w}`
|
|
|
362
362
|
for (const [S, v] of Object.entries(t.value)) {
|
|
363
363
|
const A = S === ce ? "" : S;
|
|
364
364
|
if (v.bundles)
|
|
365
|
-
for (const
|
|
366
|
-
if (
|
|
365
|
+
for (const T of v.bundles) {
|
|
366
|
+
if (T.length < 2)
|
|
367
367
|
throw new Error(
|
|
368
|
-
`Bundle must contain at least 2 fields. Found ${
|
|
368
|
+
`Bundle must contain at least 2 fields. Found ${T.length} field(s) in bundle: [${T.join(", ")}]`
|
|
369
369
|
);
|
|
370
|
-
const
|
|
371
|
-
c(
|
|
372
|
-
const
|
|
373
|
-
g[
|
|
374
|
-
const _ =
|
|
375
|
-
g[
|
|
370
|
+
const x = T.map((q) => A ? R(A, q) : q);
|
|
371
|
+
c(x, `Bundle [${T.join(", ")}]`);
|
|
372
|
+
const P = i(T, A) || ce;
|
|
373
|
+
g[P] || (g[P] = {}), g[P].bundles || (g[P].bundles = []);
|
|
374
|
+
const _ = x.map((q) => p(q, P));
|
|
375
|
+
g[P].bundles.push(_);
|
|
376
376
|
}
|
|
377
377
|
if (v.dependencies)
|
|
378
|
-
for (const [
|
|
379
|
-
const _ = A ? R(A,
|
|
378
|
+
for (const [T, [x, P]] of Object.entries(v.dependencies)) {
|
|
379
|
+
const _ = A ? R(A, T) : T, q = A ? R(A, x) : x;
|
|
380
380
|
c(
|
|
381
|
-
[_,
|
|
382
|
-
`Dependency '${
|
|
381
|
+
[_, q],
|
|
382
|
+
`Dependency '${T}' -> '${x}'`
|
|
383
383
|
);
|
|
384
384
|
const w = h(_) || ce;
|
|
385
385
|
g[w] || (g[w] = {}), g[w].dependencies || (g[w].dependencies = {});
|
|
386
|
-
const
|
|
387
|
-
g[w].dependencies[
|
|
386
|
+
const U = p(_, w), z = p(q, w);
|
|
387
|
+
g[w].dependencies[U] = [z, P];
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
|
-
return d(g),
|
|
390
|
+
return d(g), f(g), g;
|
|
391
391
|
}
|
|
392
392
|
const u = k(() => {
|
|
393
393
|
try {
|
|
@@ -396,7 +396,7 @@ ${w}`
|
|
|
396
396
|
return console.error("Invalid render rules:", g instanceof Error ? g.message : String(g)), {};
|
|
397
397
|
}
|
|
398
398
|
});
|
|
399
|
-
function
|
|
399
|
+
function m(g) {
|
|
400
400
|
if (!g)
|
|
401
401
|
return u.value;
|
|
402
402
|
const S = he(g, e());
|
|
@@ -408,14 +408,14 @@ ${w}`
|
|
|
408
408
|
if (S) return;
|
|
409
409
|
const v = E(g);
|
|
410
410
|
try {
|
|
411
|
-
return
|
|
411
|
+
return m(v);
|
|
412
412
|
} catch (A) {
|
|
413
413
|
S = !0, console.error(`Failed to get render rules for path: \`${v}\`,`, A instanceof Error ? A.message : "");
|
|
414
414
|
return;
|
|
415
415
|
}
|
|
416
416
|
});
|
|
417
417
|
}
|
|
418
|
-
const
|
|
418
|
+
const C = k(
|
|
419
419
|
() => Object.values(u.value).some(
|
|
420
420
|
(g) => g.dependencies && Object.keys(g.dependencies).length > 0
|
|
421
421
|
)
|
|
@@ -425,38 +425,38 @@ ${w}`
|
|
|
425
425
|
fieldPath: S,
|
|
426
426
|
rules: v,
|
|
427
427
|
omittedFields: A
|
|
428
|
-
} = g,
|
|
428
|
+
} = g, T = at("omit-");
|
|
429
429
|
te([
|
|
430
430
|
() => E(v),
|
|
431
431
|
() => E(S),
|
|
432
432
|
() => E(A)
|
|
433
|
-
], ([
|
|
434
|
-
|
|
433
|
+
], ([P, _, q], [, w]) => {
|
|
434
|
+
P ? t.value[_] = P : delete t.value[_], s(_, T, q), w && w !== _ && (delete t.value[w], n(w, T));
|
|
435
435
|
}, { immediate: !0, deep: !0 });
|
|
436
|
-
const
|
|
436
|
+
const x = y(S);
|
|
437
437
|
return bt(() => {
|
|
438
|
-
const
|
|
439
|
-
delete t.value[
|
|
440
|
-
}),
|
|
438
|
+
const P = E(S);
|
|
439
|
+
delete t.value[P], n(P, T);
|
|
440
|
+
}), x;
|
|
441
441
|
}
|
|
442
|
-
function
|
|
442
|
+
function I(g) {
|
|
443
443
|
const S = Z(g);
|
|
444
444
|
if (!S.length) return !1;
|
|
445
|
-
const v = S[S.length - 1], A = R(...S.slice(0, -1)),
|
|
446
|
-
if (
|
|
447
|
-
const z = Object.values(
|
|
448
|
-
if (z.length && z.every((
|
|
445
|
+
const v = S[S.length - 1], A = R(...S.slice(0, -1)), T = a.value[A];
|
|
446
|
+
if (T) {
|
|
447
|
+
const z = Object.values(T);
|
|
448
|
+
if (z.length && z.every((oe) => oe.includes(v))) return !1;
|
|
449
449
|
}
|
|
450
|
-
const
|
|
451
|
-
if (!
|
|
452
|
-
const [_,
|
|
453
|
-
return !Wt(
|
|
450
|
+
const x = A === "" ? ce : he(A, e()), P = u.value[x]?.dependencies?.[v];
|
|
451
|
+
if (!P) return !1;
|
|
452
|
+
const [_, q] = P, w = A ? R(A, _) : _, U = tt(r(), Z(w));
|
|
453
|
+
return !Wt(U, q);
|
|
454
454
|
}
|
|
455
455
|
return {
|
|
456
456
|
useCurrentRules: M,
|
|
457
457
|
createComputedRules: y,
|
|
458
|
-
hasDependencies:
|
|
459
|
-
isFieldHidden:
|
|
458
|
+
hasDependencies: C,
|
|
459
|
+
isFieldHidden: I
|
|
460
460
|
};
|
|
461
461
|
}
|
|
462
462
|
let Jt = 0;
|
|
@@ -465,26 +465,26 @@ function Yt() {
|
|
|
465
465
|
}
|
|
466
466
|
function Xt(e) {
|
|
467
467
|
const r = Xe(/* @__PURE__ */ new Map());
|
|
468
|
-
function t(
|
|
468
|
+
function t(i = "") {
|
|
469
469
|
const p = Yt();
|
|
470
|
-
return r.set(p,
|
|
470
|
+
return r.set(p, i), p;
|
|
471
471
|
}
|
|
472
|
-
function a(
|
|
473
|
-
return r.get(
|
|
472
|
+
function a(i) {
|
|
473
|
+
return r.get(i);
|
|
474
474
|
}
|
|
475
|
-
function s(
|
|
476
|
-
r.has(
|
|
475
|
+
function s(i, p) {
|
|
476
|
+
r.has(i) && r.set(i, p);
|
|
477
477
|
}
|
|
478
|
-
function n(
|
|
479
|
-
r.delete(
|
|
478
|
+
function n(i) {
|
|
479
|
+
r.delete(i);
|
|
480
480
|
}
|
|
481
|
-
function c(
|
|
482
|
-
return Qt(
|
|
481
|
+
function c(i) {
|
|
482
|
+
return Qt(i, e, t);
|
|
483
483
|
}
|
|
484
|
-
function d(
|
|
485
|
-
return Zt(
|
|
484
|
+
function d(i) {
|
|
485
|
+
return Zt(i, e, a);
|
|
486
486
|
}
|
|
487
|
-
function
|
|
487
|
+
function f() {
|
|
488
488
|
r.clear();
|
|
489
489
|
}
|
|
490
490
|
return {
|
|
@@ -494,7 +494,7 @@ function Xt(e) {
|
|
|
494
494
|
deleteKey: n,
|
|
495
495
|
serialize: c,
|
|
496
496
|
deserialize: d,
|
|
497
|
-
clear:
|
|
497
|
+
clear: f
|
|
498
498
|
};
|
|
499
499
|
}
|
|
500
500
|
function Qt(e, r, t) {
|
|
@@ -502,21 +502,21 @@ function Qt(e, r, t) {
|
|
|
502
502
|
if (s == null || typeof s != "object")
|
|
503
503
|
return s;
|
|
504
504
|
if (Array.isArray(s))
|
|
505
|
-
return s.map((
|
|
506
|
-
const p = n ? R(n, `${
|
|
507
|
-
return a(
|
|
505
|
+
return s.map((f, i) => {
|
|
506
|
+
const p = n ? R(n, `${i}`) : `${i}`;
|
|
507
|
+
return a(f, p);
|
|
508
508
|
});
|
|
509
509
|
if ((n ? r(n) : r())?.type === "map") {
|
|
510
|
-
const
|
|
511
|
-
return Object.keys(
|
|
512
|
-
const h = t(p), l =
|
|
513
|
-
|
|
514
|
-
}),
|
|
510
|
+
const f = s, i = {};
|
|
511
|
+
return Object.keys(f).forEach((p) => {
|
|
512
|
+
const h = t(p), l = f[p], u = n ? R(n, p) : p;
|
|
513
|
+
i[h] = a(l, u);
|
|
514
|
+
}), i;
|
|
515
515
|
}
|
|
516
516
|
const d = {};
|
|
517
|
-
return Object.keys(s).forEach((
|
|
518
|
-
const
|
|
519
|
-
d[
|
|
517
|
+
return Object.keys(s).forEach((f) => {
|
|
518
|
+
const i = n ? R(n, f) : f;
|
|
519
|
+
d[f] = a(s[f], i);
|
|
520
520
|
}), d;
|
|
521
521
|
};
|
|
522
522
|
return a(e);
|
|
@@ -526,26 +526,26 @@ function Zt(e, r, t) {
|
|
|
526
526
|
if (s == null || typeof s != "object")
|
|
527
527
|
return s;
|
|
528
528
|
if (Array.isArray(s))
|
|
529
|
-
return s.map((
|
|
530
|
-
const p = n ? R(n, `${
|
|
531
|
-
return a(
|
|
529
|
+
return s.map((f, i) => {
|
|
530
|
+
const p = n ? R(n, `${i}`) : `${i}`;
|
|
531
|
+
return a(f, p);
|
|
532
532
|
});
|
|
533
533
|
if ((n ? r(n) : r())?.type === "map") {
|
|
534
|
-
const
|
|
535
|
-
return Object.keys(
|
|
536
|
-
const h = p, l =
|
|
534
|
+
const f = s, i = {};
|
|
535
|
+
return Object.keys(f).forEach((p) => {
|
|
536
|
+
const h = p, l = f[h], u = t(h);
|
|
537
537
|
if (u == null) {
|
|
538
538
|
console.error(`[FreeForm] Missing name for key ID: ${String(h)}`);
|
|
539
539
|
return;
|
|
540
540
|
}
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
}),
|
|
541
|
+
const m = u || Be, y = n ? R(n, m) : m;
|
|
542
|
+
i[u] = a(l, y);
|
|
543
|
+
}), i;
|
|
544
544
|
}
|
|
545
545
|
const d = {};
|
|
546
|
-
return Object.keys(s).forEach((
|
|
547
|
-
const
|
|
548
|
-
d[
|
|
546
|
+
return Object.keys(s).forEach((f) => {
|
|
547
|
+
const i = n ? R(n, f) : f;
|
|
548
|
+
d[f] = a(s[f], i);
|
|
549
549
|
}), d;
|
|
550
550
|
};
|
|
551
551
|
return a(e);
|
|
@@ -553,7 +553,7 @@ function Zt(e, r, t) {
|
|
|
553
553
|
function ea(e) {
|
|
554
554
|
return /^kid:\d+$/.test(e);
|
|
555
555
|
}
|
|
556
|
-
const [ta, aa] =
|
|
556
|
+
const [ta, aa] = Lt(
|
|
557
557
|
function(r) {
|
|
558
558
|
const {
|
|
559
559
|
schema: t,
|
|
@@ -563,54 +563,54 @@ const [ta, aa] = qt(
|
|
|
563
563
|
propsConfig: c
|
|
564
564
|
} = r, {
|
|
565
565
|
getDefault: d,
|
|
566
|
-
getEmptyOrDefault:
|
|
567
|
-
...
|
|
568
|
-
} = Ht(t), p = Xt(
|
|
569
|
-
|
|
566
|
+
getEmptyOrDefault: f,
|
|
567
|
+
...i
|
|
568
|
+
} = Ht(t), p = Xt(i.getSchema), h = /* @__PURE__ */ new Map(), l = Xe({}), u = V(() => c ?? {}), m = we();
|
|
569
|
+
Ie(Oe, It(m, "default", ke));
|
|
570
570
|
const {
|
|
571
571
|
useCurrentRules: y,
|
|
572
|
-
createComputedRules:
|
|
572
|
+
createComputedRules: C,
|
|
573
573
|
hasDependencies: M,
|
|
574
|
-
isFieldHidden:
|
|
575
|
-
} = Gt(
|
|
574
|
+
isFieldHidden: I
|
|
575
|
+
} = Gt(i.getSchemaMap, () => l), g = y({
|
|
576
576
|
fieldPath: ce,
|
|
577
577
|
rules: n
|
|
578
578
|
});
|
|
579
579
|
function S(w) {
|
|
580
|
-
Object.keys(l).forEach((
|
|
581
|
-
delete l[
|
|
580
|
+
Object.keys(l).forEach((U) => {
|
|
581
|
+
delete l[U];
|
|
582
582
|
}), p.clear(), Object.assign(l, p.serialize(w));
|
|
583
583
|
}
|
|
584
584
|
function v(w) {
|
|
585
|
-
let
|
|
586
|
-
!w || !A(E(w)) ?
|
|
585
|
+
let U;
|
|
586
|
+
!w || !A(E(w)) ? U = d() : U = ze(E(w)), He(u.value.prepareFormData) ? S(u.value.prepareFormData(U)) : S(U);
|
|
587
587
|
}
|
|
588
588
|
function A(w) {
|
|
589
589
|
return He(u.value.hasValue) ? u.value.hasValue(w) : !!w;
|
|
590
590
|
}
|
|
591
|
-
function
|
|
591
|
+
function T() {
|
|
592
592
|
const w = ze(E(l));
|
|
593
593
|
return M.value && st(
|
|
594
594
|
w,
|
|
595
|
-
|
|
596
|
-
|
|
595
|
+
I,
|
|
596
|
+
f
|
|
597
597
|
), p.deserialize(w);
|
|
598
598
|
}
|
|
599
599
|
te(l, () => {
|
|
600
|
-
s?.(
|
|
600
|
+
s?.(T());
|
|
601
601
|
}, { deep: !0 });
|
|
602
|
-
let
|
|
602
|
+
let x = !1;
|
|
603
603
|
te(() => a?.value, (w) => {
|
|
604
|
-
|
|
604
|
+
x && fe(T(), E(w)) || (v(w), x = !0);
|
|
605
605
|
}, { deep: !0, immediate: !0 });
|
|
606
|
-
function
|
|
606
|
+
function P(w) {
|
|
607
607
|
return w != null && typeof w == "object" && !Array.isArray(w) ? p.serialize(w) : w;
|
|
608
608
|
}
|
|
609
609
|
function _(w) {
|
|
610
|
-
return
|
|
610
|
+
return P(d(w));
|
|
611
611
|
}
|
|
612
|
-
function
|
|
613
|
-
return
|
|
612
|
+
function q(w) {
|
|
613
|
+
return P(f(w));
|
|
614
614
|
}
|
|
615
615
|
return {
|
|
616
616
|
/**
|
|
@@ -623,13 +623,13 @@ const [ta, aa] = qt(
|
|
|
623
623
|
setValue: S,
|
|
624
624
|
useCurrentRenderRules: y,
|
|
625
625
|
rootRenderRules: g,
|
|
626
|
-
createComputedRenderRules:
|
|
627
|
-
...
|
|
628
|
-
getValue:
|
|
629
|
-
isFieldHidden:
|
|
626
|
+
createComputedRenderRules: C,
|
|
627
|
+
...i,
|
|
628
|
+
getValue: T,
|
|
629
|
+
isFieldHidden: I,
|
|
630
630
|
keyIdMap: p,
|
|
631
631
|
getDefault: _,
|
|
632
|
-
getEmptyOrDefault:
|
|
632
|
+
getEmptyOrDefault: q
|
|
633
633
|
};
|
|
634
634
|
}
|
|
635
635
|
);
|
|
@@ -645,38 +645,38 @@ const dt = (e) => {
|
|
|
645
645
|
let s = a;
|
|
646
646
|
return !We(a) && r.value && (s = R(r.value, a)), We(a) && (s = s.slice(Ee("").length)), s;
|
|
647
647
|
});
|
|
648
|
-
return
|
|
648
|
+
return Ie(Ge, t), t;
|
|
649
649
|
}, na = (e) => {
|
|
650
|
-
const { getSchema: r, getSchemaMap: t, fieldRendererRegistry: a } = ae(), { default: s, ...n } = we(), c = Ae(Oe), d = k(() => {
|
|
651
|
-
const
|
|
652
|
-
const
|
|
653
|
-
return { ...
|
|
650
|
+
const { getSchema: r, getSchemaMap: t, fieldRendererRegistry: a } = ae(), { default: s, ...n } = we(), c = Ae(Oe), d = [ke, "item", "label", "tooltip"], f = k(() => {
|
|
651
|
+
const i = E(c), p = t(), h = Object.keys(n).filter((l) => !d.includes(l)).reduce((l, u) => {
|
|
652
|
+
const m = he(R(E(e), u), p);
|
|
653
|
+
return { ...l, [m]: n[u] };
|
|
654
654
|
}, {});
|
|
655
|
-
return
|
|
655
|
+
return i ? { ...i, ...h } : h;
|
|
656
656
|
});
|
|
657
|
-
return
|
|
657
|
+
return Ie(Oe, f), k(() => {
|
|
658
658
|
if (s) return;
|
|
659
|
-
const
|
|
660
|
-
if (
|
|
661
|
-
const
|
|
662
|
-
for (const [
|
|
663
|
-
const
|
|
664
|
-
if (
|
|
665
|
-
return
|
|
659
|
+
const i = E(e), p = f.value[he(i, t())];
|
|
660
|
+
if (p) return p;
|
|
661
|
+
const h = t();
|
|
662
|
+
for (const [l, u] of a) {
|
|
663
|
+
const m = he(i, h);
|
|
664
|
+
if (l({ path: i, genericPath: m, schema: r(i) }))
|
|
665
|
+
return u;
|
|
666
666
|
}
|
|
667
667
|
});
|
|
668
668
|
}, _e = "__FREEFORM_SCHEMA_MAP__";
|
|
669
|
-
function
|
|
669
|
+
function ia(e) {
|
|
670
670
|
const { formData: r } = ae(), t = dt(e);
|
|
671
671
|
return {
|
|
672
672
|
value: k({
|
|
673
673
|
get: () => tt(r, Z(t.value)),
|
|
674
|
-
set: (s) =>
|
|
674
|
+
set: (s) => Pt(r, Z(t.value), s)
|
|
675
675
|
})
|
|
676
676
|
};
|
|
677
677
|
}
|
|
678
678
|
function Q(e) {
|
|
679
|
-
const { getSchema: r, isFieldHidden: t, getEmptyOrDefault: a } = ae(), s = dt(e), n = na(s), { value: c } =
|
|
679
|
+
const { getSchema: r, isFieldHidden: t, getEmptyOrDefault: a } = ae(), s = dt(e), n = na(s), { value: c } = ia(e), d = k(() => r(s.value)), f = k(() => t(s.value)), i = k(() => a(s.value));
|
|
680
680
|
return d.value ? {
|
|
681
681
|
schema: d,
|
|
682
682
|
path: s,
|
|
@@ -686,14 +686,14 @@ function Q(e) {
|
|
|
686
686
|
/**
|
|
687
687
|
* Hide the field but keep its state.
|
|
688
688
|
*/
|
|
689
|
-
hide:
|
|
690
|
-
emptyOrDefaultValue:
|
|
689
|
+
hide: f,
|
|
690
|
+
emptyOrDefaultValue: i,
|
|
691
691
|
error: null
|
|
692
692
|
} : {
|
|
693
693
|
error: new Error(`path '${s.value}' is not found in schema.`)
|
|
694
694
|
};
|
|
695
695
|
}
|
|
696
|
-
function
|
|
696
|
+
function oa(e, r) {
|
|
697
697
|
const t = /* @__PURE__ */ new WeakMap(), a = /* @__PURE__ */ new Map();
|
|
698
698
|
function s() {
|
|
699
699
|
return at(`${e}-`);
|
|
@@ -703,19 +703,19 @@ function ia(e, r) {
|
|
|
703
703
|
return `${e}-${d}`;
|
|
704
704
|
if (t.has(c))
|
|
705
705
|
return t.get(c);
|
|
706
|
-
const
|
|
707
|
-
return a.set(d,
|
|
706
|
+
const f = a.has(d) ? a.get(d) : s();
|
|
707
|
+
return a.set(d, f), t.set(c, f), f;
|
|
708
708
|
}
|
|
709
709
|
return te(r, (c) => {
|
|
710
|
-
const d = E(c),
|
|
711
|
-
d.forEach((
|
|
712
|
-
|
|
713
|
-
}), Array.from(a.keys()).forEach((
|
|
714
|
-
|
|
710
|
+
const d = E(c), f = /* @__PURE__ */ new Set();
|
|
711
|
+
d.forEach((i, p) => {
|
|
712
|
+
f.add(p);
|
|
713
|
+
}), Array.from(a.keys()).forEach((i) => {
|
|
714
|
+
f.has(i) || a.delete(i);
|
|
715
715
|
});
|
|
716
716
|
}, { immediate: !0, deep: !0 }), { getKey: n };
|
|
717
717
|
}
|
|
718
|
-
function
|
|
718
|
+
function jn(e, r) {
|
|
719
719
|
te(e, (t) => {
|
|
720
720
|
window[_e] || (window[_e] = {}), window[_e][r] = Qe(t);
|
|
721
721
|
}, { immediate: !0, deep: !0 }), _t(() => {
|
|
@@ -753,7 +753,16 @@ const ra = {
|
|
|
753
753
|
arn: "ARN",
|
|
754
754
|
json: "JSON",
|
|
755
755
|
traceid: "TraceID",
|
|
756
|
-
dmq: "DMQ"
|
|
756
|
+
dmq: "DMQ",
|
|
757
|
+
ca: "CA",
|
|
758
|
+
dpop: "DPoP",
|
|
759
|
+
hs: "HS",
|
|
760
|
+
jwk: "JWK",
|
|
761
|
+
jwks: "JWKS",
|
|
762
|
+
memcached: "Memcached",
|
|
763
|
+
mtls: "mTLS",
|
|
764
|
+
redis: "Redis",
|
|
765
|
+
uris: "URIs"
|
|
757
766
|
};
|
|
758
767
|
function pt(e) {
|
|
759
768
|
return ra[e.toLocaleLowerCase()] ?? e;
|
|
@@ -769,8 +778,8 @@ function sa(e, r) {
|
|
|
769
778
|
parentPath: n.value,
|
|
770
779
|
isolate: s
|
|
771
780
|
});
|
|
772
|
-
return te([
|
|
773
|
-
const { parentPath:
|
|
781
|
+
return te([V(r), V(t)], ([d, f]) => {
|
|
782
|
+
const { parentPath: i, isolate: p } = f, h = i ? R(i, e) : e;
|
|
774
783
|
d ? {
|
|
775
784
|
isolate: () => {
|
|
776
785
|
n.value = e, c.value.isolate = !0, c.value.parentPath = null;
|
|
@@ -788,23 +797,23 @@ function sa(e, r) {
|
|
|
788
797
|
n.value = h, c.value.isolate = !1, c.value.parentPath = h;
|
|
789
798
|
}
|
|
790
799
|
}[d]?.() : p && (n.value = e, c.value.isolate = !0, c.value.parentPath = null);
|
|
791
|
-
}, { deep: !0, immediate: !0 }),
|
|
800
|
+
}, { deep: !0, immediate: !0 }), Ie(Je, c), n;
|
|
792
801
|
}
|
|
793
802
|
function ft(e) {
|
|
794
|
-
return Z(e).map((t) => t.split("_").map(pt).join(" ")).map(
|
|
803
|
+
return Z(e).map((t) => t.split("_").map(pt).join(" ")).map(qt).join(" › ");
|
|
795
804
|
}
|
|
796
805
|
function la(e, r) {
|
|
797
806
|
const t = E(e), a = me(t), { config: s, getSchema: n } = ae(), c = sa(a, r), d = ct(e);
|
|
798
807
|
return k(() => {
|
|
799
|
-
const
|
|
808
|
+
const f = c.value ?? a, i = d.value.parent?.path ? n(d.value.parent.path) : null, p = i?.type === "array", h = i?.type === "map";
|
|
800
809
|
if (p || h)
|
|
801
810
|
return "";
|
|
802
|
-
const l = ft(
|
|
811
|
+
const l = ft(f);
|
|
803
812
|
return s.value.transformLabel ? s.value.transformLabel(l, t) : l;
|
|
804
813
|
});
|
|
805
814
|
}
|
|
806
815
|
function ne(e, r) {
|
|
807
|
-
const { getLabelAttributes: t, getPlaceholder: a, getSchema: s } = ae(), n = E(e), c = E(r), d = la(e,
|
|
816
|
+
const { getLabelAttributes: t, getPlaceholder: a, getSchema: s } = ae(), n = E(e), c = E(r), d = la(e, V(() => E(r).resetLabelPath));
|
|
808
817
|
return k(() => ({
|
|
809
818
|
...c,
|
|
810
819
|
placeholder: c.placeholder ?? a(n) ?? void 0,
|
|
@@ -817,24 +826,24 @@ function ua(e, r) {
|
|
|
817
826
|
const { value: t, ...a } = Q(e), { getEmptyOrDefault: s, keyIdMap: n } = ae(), c = k(() => {
|
|
818
827
|
if (a.path)
|
|
819
828
|
return a.schema.value.values;
|
|
820
|
-
}), d = k(() => t ? Object.keys(t.value || {}).map((
|
|
821
|
-
const y =
|
|
822
|
-
return [y,
|
|
829
|
+
}), d = k(() => t ? Object.keys(t.value || {}).map((m) => {
|
|
830
|
+
const y = m, C = n.getKey(y) ?? "";
|
|
831
|
+
return [y, C];
|
|
823
832
|
}) : []);
|
|
824
|
-
function
|
|
825
|
-
t && (n.updateKey(u,
|
|
833
|
+
function f(u, m) {
|
|
834
|
+
t && (n.updateKey(u, m), t.value = { ...t.value });
|
|
826
835
|
}
|
|
827
|
-
function
|
|
836
|
+
function i() {
|
|
828
837
|
if (!t) return;
|
|
829
|
-
const u = n.createKey(),
|
|
838
|
+
const u = n.createKey(), m = s(R(a.path.value, u));
|
|
830
839
|
return t.value = {
|
|
831
840
|
...t.value,
|
|
832
|
-
[u]:
|
|
841
|
+
[u]: m
|
|
833
842
|
}, u;
|
|
834
843
|
}
|
|
835
844
|
function p(u) {
|
|
836
845
|
if (n.deleteKey(u), !t) return;
|
|
837
|
-
const { [u]:
|
|
846
|
+
const { [u]: m, ...y } = t.value || {};
|
|
838
847
|
Object.keys(y).length === 0 ? a.schema?.value?.required ? t.value = {} : t.value = null : t.value = y;
|
|
839
848
|
}
|
|
840
849
|
function h(u) {
|
|
@@ -843,28 +852,28 @@ function ua(e, r) {
|
|
|
843
852
|
const l = k(() => {
|
|
844
853
|
if (!a.path) return "";
|
|
845
854
|
const u = me(a.path.value);
|
|
846
|
-
let
|
|
847
|
-
return ea(u) && (
|
|
855
|
+
let m = u;
|
|
856
|
+
return ea(u) && (m = n.getKey(u) ?? ""), mt(m);
|
|
848
857
|
});
|
|
849
858
|
if (r && c.value?.type === "string") {
|
|
850
859
|
let u = function() {
|
|
851
860
|
if (!t || !t.value) return null;
|
|
852
861
|
const y = {};
|
|
853
|
-
for (const [
|
|
854
|
-
const
|
|
855
|
-
|
|
862
|
+
for (const [C, M] of Object.entries(t.value)) {
|
|
863
|
+
const I = n.getKey(C);
|
|
864
|
+
I && (y[I] = M);
|
|
856
865
|
}
|
|
857
866
|
return y;
|
|
858
|
-
},
|
|
867
|
+
}, m = null;
|
|
859
868
|
te(() => t?.value, (y) => {
|
|
860
|
-
const
|
|
861
|
-
fe(
|
|
869
|
+
const C = u();
|
|
870
|
+
fe(m, C) || (m = C, r?.(C));
|
|
862
871
|
}, { deep: !0 });
|
|
863
872
|
}
|
|
864
873
|
return {
|
|
865
874
|
keys: d,
|
|
866
|
-
updateKey:
|
|
867
|
-
addKey:
|
|
875
|
+
updateKey: f,
|
|
876
|
+
addKey: i,
|
|
868
877
|
removeKey: p,
|
|
869
878
|
field: a,
|
|
870
879
|
fieldDisplayName: l,
|
|
@@ -876,10 +885,10 @@ const ca = { add_entity: "Add {entity}", remove_entity: "Remove {entity}" }, da
|
|
|
876
885
|
plugins: da
|
|
877
886
|
};
|
|
878
887
|
function ve() {
|
|
879
|
-
const e =
|
|
888
|
+
const e = it("en-us", pa);
|
|
880
889
|
return {
|
|
881
890
|
i18n: e,
|
|
882
|
-
i18nT:
|
|
891
|
+
i18nT: ot(e)
|
|
883
892
|
};
|
|
884
893
|
}
|
|
885
894
|
const be = /* @__PURE__ */ N({
|
|
@@ -890,26 +899,26 @@ const be = /* @__PURE__ */ N({
|
|
|
890
899
|
},
|
|
891
900
|
emits: ["update:modelValue"],
|
|
892
901
|
setup(e, { emit: r }) {
|
|
893
|
-
const t = e, a = ye(), s = r, n = k(() => t.multiline ? Mt :
|
|
902
|
+
const t = e, a = ye(), s = r, n = k(() => t.multiline ? Mt : Kt), c = k(() => a.characterLimit ?? (t.multiline ? !1 : void 0)), d = se(t.modelValue);
|
|
894
903
|
te(() => t.modelValue, (h) => {
|
|
895
904
|
d.value = h;
|
|
896
905
|
});
|
|
897
|
-
const { config:
|
|
898
|
-
h !== d.value && (d.value = h,
|
|
906
|
+
const { config: f } = ae(), i = (h) => {
|
|
907
|
+
h !== d.value && (d.value = h, f.value.updateOnChange || s("update:modelValue", h));
|
|
899
908
|
}, p = () => {
|
|
900
|
-
|
|
909
|
+
f.value.updateOnChange && s("update:modelValue", d.value);
|
|
901
910
|
};
|
|
902
|
-
return (h, l) => (b(),
|
|
911
|
+
return (h, l) => (b(), L(o(n), W(h.$attrs, {
|
|
903
912
|
"character-limit": c.value,
|
|
904
913
|
"model-value": e.modelValue,
|
|
905
914
|
resizable: e.multiline ? !0 : void 0,
|
|
906
915
|
onChange: p,
|
|
907
|
-
"onUpdate:modelValue":
|
|
916
|
+
"onUpdate:modelValue": i
|
|
908
917
|
}), J({ _: 2 }, [
|
|
909
|
-
re(we(), (u,
|
|
910
|
-
name:
|
|
911
|
-
fn:
|
|
912
|
-
O(h.$slots,
|
|
918
|
+
re(we(), (u, m) => ({
|
|
919
|
+
name: m,
|
|
920
|
+
fn: K((y) => [
|
|
921
|
+
O(h.$slots, m, Fe(Ze(y)))
|
|
913
922
|
])
|
|
914
923
|
}))
|
|
915
924
|
]), 1040, ["character-limit", "model-value", "resizable"]));
|
|
@@ -940,20 +949,20 @@ const be = /* @__PURE__ */ N({
|
|
|
940
949
|
},
|
|
941
950
|
emits: ["update:modelValue"],
|
|
942
951
|
setup(e, { emit: r }) {
|
|
943
|
-
const t = ye(), { i18n: a } = ve(), s = le(e, ["autofocus", "showVaultSecretPicker", "showPasswordMaskToggle", "name"]), n = r, { value: c, hide: d, ...
|
|
944
|
-
function p(
|
|
945
|
-
c.value =
|
|
952
|
+
const t = ye(), { i18n: a } = ve(), s = le(e, ["autofocus", "showVaultSecretPicker", "showPasswordMaskToggle", "name"]), n = r, { value: c, hide: d, ...f } = Q(V(() => e.name)), i = ne(f.path, V({ ...s, ...t }));
|
|
953
|
+
function p(C) {
|
|
954
|
+
c.value = C === "" ? null : C, n("update:modelValue", c.value);
|
|
946
955
|
}
|
|
947
|
-
const h = k(() => e.showPasswordMaskToggle !== void 0 ? e.showPasswordMaskToggle : s.type === "password" ? !0 : !!(
|
|
948
|
-
return (
|
|
949
|
-
const
|
|
950
|
-
return
|
|
956
|
+
const h = k(() => e.showPasswordMaskToggle !== void 0 ? e.showPasswordMaskToggle : s.type === "password" ? !0 : !!(f.schema?.value).encrypted), l = Ae(nt, void 0), u = k(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!f.schema.value?.referenceable), m = k(() => ({ referenceable: u.value })), y = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
957
|
+
return (C, M) => {
|
|
958
|
+
const I = F("KAlert");
|
|
959
|
+
return f.error ? (b(), L(I, {
|
|
951
960
|
key: 0,
|
|
952
961
|
appearance: "danger",
|
|
953
|
-
message:
|
|
954
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
955
|
-
|
|
956
|
-
...i
|
|
962
|
+
message: f.error.message
|
|
963
|
+
}, null, 8, ["message"])) : Y((b(), j("div", Fe(W({ key: 1 }, C.$attrs)), [
|
|
964
|
+
$(be, W({
|
|
965
|
+
...o(i),
|
|
957
966
|
showPasswordMaskToggle: h.value,
|
|
958
967
|
type: h.value ? "password" : "text"
|
|
959
968
|
}, {
|
|
@@ -961,68 +970,68 @@ const be = /* @__PURE__ */ N({
|
|
|
961
970
|
class: "ff-string-field",
|
|
962
971
|
"data-1p-ignore": y.value,
|
|
963
972
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
964
|
-
"data-testid": `ff-${
|
|
973
|
+
"data-testid": `ff-${f.path.value}`,
|
|
965
974
|
error: e.error,
|
|
966
975
|
"error-message": e.errorMessage,
|
|
967
976
|
help: e.multiline && e.error ? e.errorMessage : e.help,
|
|
968
|
-
"model-value":
|
|
977
|
+
"model-value": o(c) ?? "",
|
|
969
978
|
multiline: e.multiline,
|
|
970
|
-
placeholder: e.placeholder ?? i
|
|
979
|
+
placeholder: e.placeholder ?? o(i).placeholder,
|
|
971
980
|
"onUpdate:modelValue": p
|
|
972
981
|
}), J({ _: 2 }, [
|
|
973
|
-
i
|
|
982
|
+
o(i).labelAttributes?.info ? {
|
|
974
983
|
name: "label-tooltip",
|
|
975
|
-
fn:
|
|
976
|
-
O(
|
|
977
|
-
|
|
978
|
-
innerHTML: i
|
|
984
|
+
fn: K(() => [
|
|
985
|
+
O(C.$slots, "tooltip", {}, () => [
|
|
986
|
+
B("div", {
|
|
987
|
+
innerHTML: o(i).labelAttributes.info
|
|
979
988
|
}, null, 8, ma)
|
|
980
989
|
], !0)
|
|
981
990
|
]),
|
|
982
991
|
key: "0"
|
|
983
992
|
} : void 0,
|
|
984
|
-
!(e.multiline && e.error) &&
|
|
993
|
+
!(e.multiline && e.error) && C.$slots.help ? {
|
|
985
994
|
name: "help",
|
|
986
|
-
fn:
|
|
987
|
-
O(
|
|
995
|
+
fn: K(() => [
|
|
996
|
+
O(C.$slots, "help", {}, void 0, !0)
|
|
988
997
|
]),
|
|
989
998
|
key: "1"
|
|
990
999
|
} : void 0,
|
|
991
1000
|
!e.multiline && e.inlineVaultPicker ? {
|
|
992
1001
|
name: "after",
|
|
993
|
-
fn:
|
|
994
|
-
|
|
1002
|
+
fn: K(() => [
|
|
1003
|
+
o(l) && u.value ? (b(), L(ie(o(l)), {
|
|
995
1004
|
key: 0,
|
|
996
|
-
schema:
|
|
1005
|
+
schema: m.value,
|
|
997
1006
|
update: p,
|
|
998
|
-
value:
|
|
1007
|
+
value: o(c) ?? ""
|
|
999
1008
|
}, null, 8, ["schema", "value"])) : H("", !0),
|
|
1000
|
-
u.value && !
|
|
1009
|
+
u.value && !o(l) ? (b(), L(I, {
|
|
1001
1010
|
key: 1,
|
|
1002
1011
|
appearance: "warning",
|
|
1003
|
-
"data-testid": `ff-vault-secret-picker-warning-${
|
|
1004
|
-
message:
|
|
1012
|
+
"data-testid": `ff-vault-secret-picker-warning-${f.path.value}`,
|
|
1013
|
+
message: o(a).t("plugins.free-form.vault_picker.component_error")
|
|
1005
1014
|
}, null, 8, ["data-testid", "message"])) : H("", !0)
|
|
1006
1015
|
]),
|
|
1007
1016
|
key: "2"
|
|
1008
1017
|
} : void 0
|
|
1009
1018
|
]), 1040, ["id", "data-1p-ignore", "data-autofocus", "data-testid", "error", "error-message", "help", "model-value", "multiline", "placeholder"]),
|
|
1010
|
-
e.inlineVaultPicker ? H("", !0) : (b(),
|
|
1011
|
-
|
|
1019
|
+
e.inlineVaultPicker ? H("", !0) : (b(), j(ee, { key: 0 }, [
|
|
1020
|
+
o(l) && u.value ? (b(), L(ie(o(l)), {
|
|
1012
1021
|
key: 0,
|
|
1013
|
-
schema:
|
|
1022
|
+
schema: m.value,
|
|
1014
1023
|
update: p,
|
|
1015
|
-
value:
|
|
1024
|
+
value: o(c) ?? ""
|
|
1016
1025
|
}, null, 8, ["schema", "value"])) : H("", !0),
|
|
1017
|
-
u.value && !
|
|
1026
|
+
u.value && !o(l) ? (b(), L(I, {
|
|
1018
1027
|
key: 1,
|
|
1019
1028
|
appearance: "warning",
|
|
1020
|
-
"data-testid": `ff-vault-secret-picker-warning-${
|
|
1021
|
-
message:
|
|
1029
|
+
"data-testid": `ff-vault-secret-picker-warning-${f.path.value}`,
|
|
1030
|
+
message: o(a).t("plugins.free-form.vault_picker.component_error")
|
|
1022
1031
|
}, null, 8, ["data-testid", "message"])) : H("", !0)
|
|
1023
1032
|
], 64))
|
|
1024
1033
|
], 16)), [
|
|
1025
|
-
[X, !
|
|
1034
|
+
[X, !o(d)]
|
|
1026
1035
|
]);
|
|
1027
1036
|
};
|
|
1028
1037
|
}
|
|
@@ -1042,35 +1051,35 @@ const be = /* @__PURE__ */ N({
|
|
|
1042
1051
|
},
|
|
1043
1052
|
emits: ["update:modelValue"],
|
|
1044
1053
|
setup(e, { emit: r }) {
|
|
1045
|
-
const t = le(e, ["autofocus", "name"]), { value: a, hide: s, emptyOrDefaultValue: n, ...c } = Q(
|
|
1054
|
+
const t = le(e, ["autofocus", "name"]), { value: a, hide: s, emptyOrDefaultValue: n, ...c } = Q(V(() => e.name)), d = r, f = (p) => {
|
|
1046
1055
|
a.value = p, d("update:modelValue", p);
|
|
1047
|
-
},
|
|
1056
|
+
}, i = ne(c.path, t);
|
|
1048
1057
|
return (p, h) => {
|
|
1049
|
-
const l =
|
|
1050
|
-
return c.error ? (b(),
|
|
1058
|
+
const l = F("KAlert");
|
|
1059
|
+
return c.error ? (b(), L(l, {
|
|
1051
1060
|
key: 0,
|
|
1052
1061
|
appearance: "danger",
|
|
1053
1062
|
message: c.error.message
|
|
1054
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1063
|
+
}, null, 8, ["message"])) : Y((b(), L(o(xt), W({ key: 1 }, { ...o(i), ...p.$attrs }, {
|
|
1055
1064
|
class: "ff-boolean-field",
|
|
1056
1065
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1057
1066
|
"data-testid": `ff-${c.path.value}`,
|
|
1058
|
-
"model-value": !!(
|
|
1059
|
-
"onUpdate:modelValue":
|
|
1067
|
+
"model-value": !!(o(a) == null ? o(n) : o(a)),
|
|
1068
|
+
"onUpdate:modelValue": f
|
|
1060
1069
|
}), J({ _: 2 }, [
|
|
1061
|
-
i
|
|
1070
|
+
o(i).labelAttributes?.info ? {
|
|
1062
1071
|
name: "tooltip",
|
|
1063
|
-
fn:
|
|
1072
|
+
fn: K(() => [
|
|
1064
1073
|
O(p.$slots, "tooltip", {}, () => [
|
|
1065
|
-
|
|
1066
|
-
innerHTML: i
|
|
1074
|
+
B("div", {
|
|
1075
|
+
innerHTML: o(i).labelAttributes.info
|
|
1067
1076
|
}, null, 8, ha)
|
|
1068
1077
|
], !0)
|
|
1069
1078
|
]),
|
|
1070
1079
|
key: "0"
|
|
1071
1080
|
} : void 0
|
|
1072
1081
|
]), 1040, ["data-autofocus", "data-testid", "model-value"])), [
|
|
1073
|
-
[X, !
|
|
1082
|
+
[X, !o(s)]
|
|
1074
1083
|
]);
|
|
1075
1084
|
};
|
|
1076
1085
|
}
|
|
@@ -1085,46 +1094,46 @@ const be = /* @__PURE__ */ N({
|
|
|
1085
1094
|
},
|
|
1086
1095
|
emits: ["update:modelValue"],
|
|
1087
1096
|
setup(e, { emit: r }) {
|
|
1088
|
-
const t = ye(), a = le(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Q(
|
|
1097
|
+
const t = ye(), a = le(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Q(V(() => e.name)), f = ne(d.path, V({ ...a, ...t })), i = k(() => d.schema?.value?.len_min && d.schema.value.len_min > 0), p = se("");
|
|
1089
1098
|
function h(y) {
|
|
1090
|
-
return y.map((
|
|
1099
|
+
return y.map((C) => C.trim()).filter(Boolean).join(", ");
|
|
1091
1100
|
}
|
|
1092
1101
|
function l(y) {
|
|
1093
|
-
return y.trim().split(",").map((
|
|
1102
|
+
return y.trim().split(",").map((C) => C.trim()).filter(Boolean);
|
|
1094
1103
|
}
|
|
1095
1104
|
function u(y) {
|
|
1096
1105
|
p.value = y;
|
|
1097
|
-
const
|
|
1106
|
+
const C = l(y), M = !C.length && i.value ? null : C;
|
|
1098
1107
|
n.value = M, s("update:modelValue", M);
|
|
1099
1108
|
}
|
|
1100
|
-
const
|
|
1109
|
+
const m = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
1101
1110
|
return te(n, (y) => {
|
|
1102
|
-
const
|
|
1103
|
-
h(l(p.value)) !==
|
|
1104
|
-
}, { immediate: !0 }), (y,
|
|
1105
|
-
const M =
|
|
1106
|
-
return d.error ? (b(),
|
|
1111
|
+
const C = y ? h(y) : "";
|
|
1112
|
+
h(l(p.value)) !== C && (p.value = C);
|
|
1113
|
+
}, { immediate: !0 }), (y, C) => {
|
|
1114
|
+
const M = F("KAlert");
|
|
1115
|
+
return d.error ? (b(), L(M, {
|
|
1107
1116
|
key: 0,
|
|
1108
1117
|
appearance: "danger",
|
|
1109
1118
|
message: d.error.message
|
|
1110
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1119
|
+
}, null, 8, ["message"])) : Y((b(), j("div", {
|
|
1111
1120
|
key: 1,
|
|
1112
1121
|
"data-testid": `ff-tag-${d.path.value}`
|
|
1113
1122
|
}, [
|
|
1114
|
-
|
|
1123
|
+
$(be, W(o(f), {
|
|
1115
1124
|
class: "ff-tag-field",
|
|
1116
|
-
"data-1p-ignore":
|
|
1125
|
+
"data-1p-ignore": m.value,
|
|
1117
1126
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1118
1127
|
"data-testid": `ff-${d.path.value}`,
|
|
1119
1128
|
"model-value": p.value ?? "",
|
|
1120
1129
|
"onUpdate:modelValue": u
|
|
1121
1130
|
}), J({ _: 2 }, [
|
|
1122
|
-
|
|
1131
|
+
o(f).labelAttributes?.info ? {
|
|
1123
1132
|
name: "label-tooltip",
|
|
1124
|
-
fn:
|
|
1133
|
+
fn: K(() => [
|
|
1125
1134
|
O(y.$slots, "tooltip", {}, () => [
|
|
1126
|
-
|
|
1127
|
-
innerHTML:
|
|
1135
|
+
B("div", {
|
|
1136
|
+
innerHTML: o(f).labelAttributes.info
|
|
1128
1137
|
}, null, 8, ba)
|
|
1129
1138
|
], !0)
|
|
1130
1139
|
]),
|
|
@@ -1132,11 +1141,11 @@ const be = /* @__PURE__ */ N({
|
|
|
1132
1141
|
} : void 0
|
|
1133
1142
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "model-value"])
|
|
1134
1143
|
], 8, va)), [
|
|
1135
|
-
[X, !
|
|
1144
|
+
[X, !o(c)]
|
|
1136
1145
|
]);
|
|
1137
1146
|
};
|
|
1138
1147
|
}
|
|
1139
|
-
}), gt = /* @__PURE__ */ G(_a, [["__scopeId", "data-v-3aa09162"]]), wa = ["data-appearance", "data-testid"], Aa = ["data-testid"], ka = ["innerHTML"], Sa = ["data-testid"],
|
|
1148
|
+
}), gt = /* @__PURE__ */ G(_a, [["__scopeId", "data-v-3aa09162"]]), wa = ["data-appearance", "data-testid"], Aa = ["data-testid"], ka = ["innerHTML"], Sa = ["data-testid"], Ca = { class: "ff-array-field-item-content" }, Ta = ["data-index", "data-testid"], Ke = 'input:not(:disabled), textarea:not(:disabled), select:not(:disabled), button:not(:disabled), [contenteditable="true"], [tabindex]:not([tabindex="-1"]):not(:disabled)', Ia = /* @__PURE__ */ N({
|
|
1140
1149
|
__name: "ArrayField",
|
|
1141
1150
|
props: {
|
|
1142
1151
|
name: {},
|
|
@@ -1152,147 +1161,151 @@ const be = /* @__PURE__ */ N({
|
|
|
1152
1161
|
emits: ["add", "remove"],
|
|
1153
1162
|
setup(e, { emit: r }) {
|
|
1154
1163
|
wt((_) => ({
|
|
1155
|
-
|
|
1164
|
+
v2a09f0a5: P.value
|
|
1156
1165
|
}));
|
|
1157
|
-
const t = e, a = r, { i18n: { t: s } } = ve(), { getDefault: n, getSchema: c } = ae(), { value: d, hide:
|
|
1158
|
-
if (!
|
|
1159
|
-
const _ = c(
|
|
1160
|
-
if (!_) throw new Error(`Schema not found for path: ${
|
|
1166
|
+
const t = e, a = r, { i18n: { t: s } } = ve(), { getDefault: n, getSchema: c } = ae(), { value: d, hide: f, ...i } = Q(V(t, "name")), p = ne(i.path, V({ ...t, ...ye() })), h = k(() => {
|
|
1167
|
+
if (!i.path) throw new Error("Field path is required for sub-schema retrieval");
|
|
1168
|
+
const _ = c(i.path.value);
|
|
1169
|
+
if (!_) throw new Error(`Schema not found for path: ${i.path.value}`);
|
|
1161
1170
|
return _.elements;
|
|
1162
1171
|
}), l = k(() => {
|
|
1163
|
-
if (!
|
|
1164
|
-
const _ = me(
|
|
1172
|
+
if (!i.path) return "";
|
|
1173
|
+
const _ = me(i.path.value);
|
|
1165
1174
|
return mt(_);
|
|
1166
|
-
}), u = k(() => t.items ?? E(d) ?? []), { getKey:
|
|
1167
|
-
function M(_,
|
|
1168
|
-
return typeof t.itemLabel == "function" ? t.itemLabel(_,
|
|
1175
|
+
}), u = k(() => t.items ?? E(d) ?? []), { getKey: m } = oa("ff-array-field", u), y = k(() => t.appearance ? t.appearance : h.value.type === "record" || h.value.type === "map" ? "card" : "default"), C = k(() => y.value === "card" ? je : "div");
|
|
1176
|
+
function M(_, q) {
|
|
1177
|
+
return typeof t.itemLabel == "function" ? t.itemLabel(_, q) : t.itemLabel || p.value.label || `Item #${q}`;
|
|
1169
1178
|
}
|
|
1170
|
-
const
|
|
1171
|
-
hash: `#${
|
|
1179
|
+
const I = k(() => u.value.map((_, q) => ({
|
|
1180
|
+
hash: `#${m(_, q)}`,
|
|
1172
1181
|
title: ""
|
|
1173
|
-
}))), g = se(
|
|
1174
|
-
const _ = n(R(
|
|
1175
|
-
Array.isArray(d.value) || (d.value = []), d.value.push(_), a("add"), t.appearance === "tabs" && (await
|
|
1182
|
+
}))), g = se(I.value[0]?.hash), S = async () => {
|
|
1183
|
+
const _ = n(R(i.path.value, Ue));
|
|
1184
|
+
Array.isArray(d.value) || (d.value = []), d.value.push(_), a("add"), t.appearance === "tabs" && (await xe(), g.value = I.value[I.value.length - 1]?.hash), await xe(), T(u.value.length + 1);
|
|
1176
1185
|
}, v = async (_) => {
|
|
1177
|
-
Array.isArray(d.value) && (d.value.splice(_, 1), d.value.length === 0 && !p.value.required && (d.value = null)), a("remove", _), t.appearance === "tabs" && (g.value =
|
|
1186
|
+
Array.isArray(d.value) && (d.value.splice(_, 1), d.value.length === 0 && !p.value.required && (d.value = null)), a("remove", _), t.appearance === "tabs" && (g.value = I.value[Math.max(0, _ - 1)]?.hash);
|
|
1178
1187
|
}, A = et("root");
|
|
1179
|
-
function
|
|
1188
|
+
function T(_) {
|
|
1180
1189
|
if (!A.value)
|
|
1181
1190
|
return;
|
|
1182
|
-
const
|
|
1191
|
+
const q = Math.max(0, Math.min(_, u.value.length - 1)), w = A.value.querySelector(`[data-index="${q}"]`);
|
|
1183
1192
|
if (!w)
|
|
1184
1193
|
return;
|
|
1185
|
-
|
|
1194
|
+
x(w)?.focus();
|
|
1186
1195
|
}
|
|
1187
|
-
function
|
|
1188
|
-
const
|
|
1189
|
-
return
|
|
1196
|
+
function x(_) {
|
|
1197
|
+
const q = _.querySelector('[data-autofocus="true"]');
|
|
1198
|
+
return q ? q.matches(Ke) ? q : q.querySelector(Ke) : _.querySelector(Ke);
|
|
1190
1199
|
}
|
|
1191
|
-
const
|
|
1192
|
-
const { appearance: _, stickyTabs:
|
|
1193
|
-
return _ !== "tabs" ||
|
|
1200
|
+
const P = k(() => {
|
|
1201
|
+
const { appearance: _, stickyTabs: q } = t;
|
|
1202
|
+
return _ !== "tabs" || q == null || q === !1 ? null : typeof q == "number" ? `${t.stickyTabs}px` : typeof q == "string" ? q : "0";
|
|
1194
1203
|
});
|
|
1195
|
-
return (_,
|
|
1196
|
-
const w =
|
|
1197
|
-
return
|
|
1204
|
+
return (_, q) => {
|
|
1205
|
+
const w = F("KAlert"), U = F("KLabel"), z = F("KButton"), oe = F("KTooltip"), yt = F("KTabs");
|
|
1206
|
+
return i.error ? (b(), L(w, {
|
|
1198
1207
|
key: 0,
|
|
1199
1208
|
appearance: "danger",
|
|
1200
|
-
message:
|
|
1201
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1209
|
+
message: i.error.message
|
|
1210
|
+
}, null, 8, ["message"])) : Y((b(), j("div", {
|
|
1202
1211
|
key: 1,
|
|
1203
1212
|
ref_key: "root",
|
|
1204
1213
|
ref: A,
|
|
1205
|
-
class:
|
|
1214
|
+
class: Ce(["ff-array-field", {
|
|
1206
1215
|
[`ff-array-field-${y.value ?? "default"}`]: !0,
|
|
1207
1216
|
"ff-array-field-sticky-tabs": e.stickyTabs
|
|
1208
1217
|
}]),
|
|
1209
1218
|
"data-appearance": y.value,
|
|
1210
|
-
"data-testid": `ff-array-${
|
|
1219
|
+
"data-testid": `ff-array-${i.path.value}`
|
|
1211
1220
|
}, [
|
|
1212
|
-
|
|
1221
|
+
o(p).label && !e.hideLabel ? (b(), j("header", {
|
|
1213
1222
|
key: 0,
|
|
1214
1223
|
class: "ff-array-field-header",
|
|
1215
|
-
"data-testid": `ff-array-header-${
|
|
1224
|
+
"data-testid": `ff-array-header-${i.path.value}`
|
|
1216
1225
|
}, [
|
|
1217
|
-
|
|
1218
|
-
"data-testid": `ff-label-${
|
|
1219
|
-
"tooltip-attributes":
|
|
1226
|
+
$(U, W({ class: "ff-array-field-label" }, o(p), {
|
|
1227
|
+
"data-testid": `ff-label-${i.path.value}`,
|
|
1228
|
+
"tooltip-attributes": o(p).labelAttributes.tooltipAttributes
|
|
1220
1229
|
}), J({
|
|
1221
|
-
default:
|
|
1222
|
-
|
|
1230
|
+
default: K(() => [
|
|
1231
|
+
O(_.$slots, "label", {
|
|
1232
|
+
label: o(p).label
|
|
1233
|
+
}, () => [
|
|
1234
|
+
pe(de(o(p).label), 1)
|
|
1235
|
+
], !0)
|
|
1223
1236
|
]),
|
|
1224
1237
|
_: 2
|
|
1225
1238
|
}, [
|
|
1226
|
-
|
|
1239
|
+
o(p).labelAttributes?.info ? {
|
|
1227
1240
|
name: "tooltip",
|
|
1228
|
-
fn:
|
|
1241
|
+
fn: K(() => [
|
|
1229
1242
|
O(_.$slots, "tooltip", {}, () => [
|
|
1230
|
-
|
|
1231
|
-
innerHTML:
|
|
1243
|
+
B("div", {
|
|
1244
|
+
innerHTML: o(p).labelAttributes.info
|
|
1232
1245
|
}, null, 8, ka)
|
|
1233
1246
|
], !0)
|
|
1234
1247
|
]),
|
|
1235
1248
|
key: "0"
|
|
1236
1249
|
} : void 0
|
|
1237
1250
|
]), 1040, ["data-testid", "tooltip-attributes"]),
|
|
1238
|
-
e.appearance === "tabs" ? (b(),
|
|
1251
|
+
e.appearance === "tabs" ? (b(), L(z, {
|
|
1239
1252
|
key: 0,
|
|
1240
1253
|
appearance: "tertiary",
|
|
1241
|
-
"aria-label":
|
|
1242
|
-
"data-testid": `ff-add-item-btn-${
|
|
1254
|
+
"aria-label": o(s)("actions.add_entity", { entity: l.value }),
|
|
1255
|
+
"data-testid": `ff-add-item-btn-${i.path.value}`,
|
|
1243
1256
|
icon: "",
|
|
1244
1257
|
onClick: S
|
|
1245
1258
|
}, {
|
|
1246
|
-
default:
|
|
1247
|
-
|
|
1259
|
+
default: K(() => [
|
|
1260
|
+
$(o(Ve))
|
|
1248
1261
|
]),
|
|
1249
1262
|
_: 1
|
|
1250
1263
|
}, 8, ["aria-label", "data-testid"])) : H("", !0)
|
|
1251
1264
|
], 8, Aa)) : H("", !0),
|
|
1252
|
-
y.value !== "tabs" ? (b(),
|
|
1253
|
-
|
|
1265
|
+
y.value !== "tabs" ? (b(), j(ee, { key: 1 }, [
|
|
1266
|
+
B("div", {
|
|
1254
1267
|
class: "ff-array-field-container",
|
|
1255
|
-
"data-testid": `ff-array-basic-container-${
|
|
1268
|
+
"data-testid": `ff-array-basic-container-${i.path.value}`
|
|
1256
1269
|
}, [
|
|
1257
|
-
(b(!0),
|
|
1258
|
-
key:
|
|
1259
|
-
class:
|
|
1260
|
-
"data-index":
|
|
1261
|
-
"data-testid": `ff-array-item-${
|
|
1270
|
+
(b(!0), j(ee, null, re(u.value, (ue, D) => (b(), L(o(C), {
|
|
1271
|
+
key: o(m)(ue, D),
|
|
1272
|
+
class: Ce(["ff-array-field-item", { "ff-array-field-item-card": y.value === "card" }]),
|
|
1273
|
+
"data-index": D,
|
|
1274
|
+
"data-testid": `ff-array-item-${i.path.value}.${D}`
|
|
1262
1275
|
}, {
|
|
1263
|
-
default:
|
|
1264
|
-
|
|
1276
|
+
default: K(() => [
|
|
1277
|
+
B("div", Ca, [
|
|
1265
1278
|
_.$slots.item ? O(_.$slots, "item", {
|
|
1266
1279
|
key: 0,
|
|
1267
1280
|
autofocus: !0,
|
|
1268
|
-
fieldName: String(
|
|
1269
|
-
index:
|
|
1270
|
-
}, void 0, !0) : h.value.type === "array" && h.value.elements.type === "string" ? (b(),
|
|
1281
|
+
fieldName: String(D),
|
|
1282
|
+
index: D
|
|
1283
|
+
}, void 0, !0) : h.value.type === "array" && h.value.elements.type === "string" ? (b(), L(gt, {
|
|
1271
1284
|
key: 1,
|
|
1272
1285
|
autofocus: "",
|
|
1273
|
-
help:
|
|
1274
|
-
name: String(
|
|
1275
|
-
}, null, 8, ["help", "name"])) : (b(),
|
|
1286
|
+
help: o(s)("plugins.free-form.tag_helper"),
|
|
1287
|
+
name: String(D)
|
|
1288
|
+
}, null, 8, ["help", "name"])) : (b(), L(ge, {
|
|
1276
1289
|
key: 2,
|
|
1277
1290
|
autofocus: "",
|
|
1278
|
-
name: String(
|
|
1291
|
+
name: String(D)
|
|
1279
1292
|
}, null, 8, ["name"]))
|
|
1280
1293
|
]),
|
|
1281
|
-
|
|
1294
|
+
$(oe, {
|
|
1282
1295
|
class: "ff-array-field-item-remove-tooltip",
|
|
1283
|
-
text:
|
|
1296
|
+
text: o(s)("actions.remove_entity", { entity: l.value })
|
|
1284
1297
|
}, {
|
|
1285
|
-
default:
|
|
1286
|
-
|
|
1298
|
+
default: K(() => [
|
|
1299
|
+
$(z, {
|
|
1287
1300
|
appearance: "tertiary",
|
|
1288
|
-
"aria-label":
|
|
1301
|
+
"aria-label": o(s)("actions.remove_entity", { entity: l.value }),
|
|
1289
1302
|
class: "ff-array-field-item-remove",
|
|
1290
|
-
"data-testid": `ff-array-remove-item-btn-${
|
|
1303
|
+
"data-testid": `ff-array-remove-item-btn-${i.path.value}.${D}`,
|
|
1291
1304
|
icon: "",
|
|
1292
|
-
onClick:
|
|
1305
|
+
onClick: Te((vt) => v(D), ["stop"])
|
|
1293
1306
|
}, {
|
|
1294
|
-
default:
|
|
1295
|
-
|
|
1307
|
+
default: K(() => [
|
|
1308
|
+
$(o(rt))
|
|
1296
1309
|
]),
|
|
1297
1310
|
_: 1
|
|
1298
1311
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -1303,65 +1316,65 @@ const be = /* @__PURE__ */ N({
|
|
|
1303
1316
|
_: 2
|
|
1304
1317
|
}, 1032, ["class", "data-index", "data-testid"]))), 128))
|
|
1305
1318
|
], 8, Sa),
|
|
1306
|
-
|
|
1319
|
+
$(z, {
|
|
1307
1320
|
appearance: "tertiary",
|
|
1308
|
-
"aria-label":
|
|
1321
|
+
"aria-label": o(s)("actions.add_entity", { entity: l.value }),
|
|
1309
1322
|
class: "ff-array-field-add-item-btn",
|
|
1310
|
-
"data-testid": `ff-add-item-btn-${
|
|
1323
|
+
"data-testid": `ff-add-item-btn-${i.path.value}`,
|
|
1311
1324
|
onClick: S
|
|
1312
1325
|
}, {
|
|
1313
|
-
default:
|
|
1314
|
-
|
|
1315
|
-
pe(" " + de(
|
|
1326
|
+
default: K(() => [
|
|
1327
|
+
$(o(Ve)),
|
|
1328
|
+
pe(" " + de(o(s)("actions.add_entity", { entity: l.value })), 1)
|
|
1316
1329
|
]),
|
|
1317
1330
|
_: 1
|
|
1318
1331
|
}, 8, ["aria-label", "data-testid"])
|
|
1319
|
-
], 64)) : u.value.length ? (b(),
|
|
1332
|
+
], 64)) : u.value.length ? (b(), L(o(je), {
|
|
1320
1333
|
key: 2,
|
|
1321
|
-
"data-testid": `ff-array-tab-container-${
|
|
1334
|
+
"data-testid": `ff-array-tab-container-${i.path.value}`
|
|
1322
1335
|
}, {
|
|
1323
|
-
default:
|
|
1324
|
-
|
|
1336
|
+
default: K(() => [
|
|
1337
|
+
$(yt, {
|
|
1325
1338
|
modelValue: g.value,
|
|
1326
|
-
"onUpdate:modelValue":
|
|
1327
|
-
"data-testid": `ff-array-tabs-${
|
|
1328
|
-
tabs:
|
|
1339
|
+
"onUpdate:modelValue": q[0] || (q[0] = (ue) => g.value = ue),
|
|
1340
|
+
"data-testid": `ff-array-tabs-${i.path.value}`,
|
|
1341
|
+
tabs: I.value
|
|
1329
1342
|
}, J({ _: 2 }, [
|
|
1330
|
-
re(u.value, (ue,
|
|
1331
|
-
name:
|
|
1332
|
-
fn:
|
|
1333
|
-
|
|
1343
|
+
re(u.value, (ue, D) => ({
|
|
1344
|
+
name: o(m)(ue, D),
|
|
1345
|
+
fn: K(() => [
|
|
1346
|
+
B("div", {
|
|
1334
1347
|
class: "ff-array-field-item",
|
|
1335
|
-
"data-index":
|
|
1336
|
-
"data-testid": `ff-array-item-${
|
|
1348
|
+
"data-index": D,
|
|
1349
|
+
"data-testid": `ff-array-item-${i.path.value}.${D}`
|
|
1337
1350
|
}, [
|
|
1338
1351
|
_.$slots.item ? O(_.$slots, "item", {
|
|
1339
1352
|
key: 0,
|
|
1340
1353
|
autofocus: !0,
|
|
1341
|
-
fieldName: String(
|
|
1342
|
-
index:
|
|
1343
|
-
}, void 0, !0) : (b(),
|
|
1354
|
+
fieldName: String(D),
|
|
1355
|
+
index: D
|
|
1356
|
+
}, void 0, !0) : (b(), L(ge, {
|
|
1344
1357
|
key: 1,
|
|
1345
1358
|
autofocus: "",
|
|
1346
|
-
name: String(
|
|
1359
|
+
name: String(D)
|
|
1347
1360
|
}, null, 8, ["name"]))
|
|
1348
|
-
], 8,
|
|
1361
|
+
], 8, Ta)
|
|
1349
1362
|
])
|
|
1350
1363
|
})),
|
|
1351
|
-
re(u.value, (ue,
|
|
1352
|
-
name: `${
|
|
1353
|
-
fn:
|
|
1354
|
-
pe(de(M(ue,
|
|
1355
|
-
|
|
1364
|
+
re(u.value, (ue, D) => ({
|
|
1365
|
+
name: `${o(m)(ue, D)}-anchor`,
|
|
1366
|
+
fn: K(() => [
|
|
1367
|
+
pe(de(M(ue, D)) + " ", 1),
|
|
1368
|
+
$(z, {
|
|
1356
1369
|
appearance: "tertiary",
|
|
1357
|
-
"aria-label":
|
|
1370
|
+
"aria-label": o(s)("actions.remove_entity", { entity: l.value }),
|
|
1358
1371
|
class: "ff-array-field-item-remove",
|
|
1359
|
-
"data-testid": `ff-array-remove-item-btn-${
|
|
1372
|
+
"data-testid": `ff-array-remove-item-btn-${i.path.value}.${D}`,
|
|
1360
1373
|
icon: "",
|
|
1361
|
-
onClick:
|
|
1374
|
+
onClick: Te((vt) => v(D), ["stop"])
|
|
1362
1375
|
}, {
|
|
1363
|
-
default:
|
|
1364
|
-
|
|
1376
|
+
default: K(() => [
|
|
1377
|
+
$(o(Et))
|
|
1365
1378
|
]),
|
|
1366
1379
|
_: 1
|
|
1367
1380
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -1372,11 +1385,11 @@ const be = /* @__PURE__ */ N({
|
|
|
1372
1385
|
_: 3
|
|
1373
1386
|
}, 8, ["data-testid"])) : H("", !0)
|
|
1374
1387
|
], 10, wa)), [
|
|
1375
|
-
[X, !
|
|
1388
|
+
[X, !o(f)]
|
|
1376
1389
|
]);
|
|
1377
1390
|
};
|
|
1378
1391
|
}
|
|
1379
|
-
}),
|
|
1392
|
+
}), Pa = /* @__PURE__ */ G(Ia, [["__scopeId", "data-v-e22e158e"]]), qa = /* @__PURE__ */ N({
|
|
1380
1393
|
__name: "SlideTransition",
|
|
1381
1394
|
setup(e) {
|
|
1382
1395
|
const r = [
|
|
@@ -1391,7 +1404,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1391
1404
|
function s(l) {
|
|
1392
1405
|
const u = getComputedStyle(l);
|
|
1393
1406
|
return Object.fromEntries(
|
|
1394
|
-
r.map((
|
|
1407
|
+
r.map((m) => [m, u.getPropertyValue(m)])
|
|
1395
1408
|
);
|
|
1396
1409
|
}
|
|
1397
1410
|
function n(l) {
|
|
@@ -1408,18 +1421,18 @@ const be = /* @__PURE__ */ N({
|
|
|
1408
1421
|
function d(l) {
|
|
1409
1422
|
const u = l;
|
|
1410
1423
|
Object.assign(u.style, t);
|
|
1411
|
-
const
|
|
1424
|
+
const m = s(u);
|
|
1412
1425
|
Object.assign(u.style, a), requestAnimationFrame(() => {
|
|
1413
1426
|
Object.assign(u.style, {
|
|
1414
|
-
...
|
|
1427
|
+
...m,
|
|
1415
1428
|
transition: ""
|
|
1416
1429
|
});
|
|
1417
1430
|
});
|
|
1418
1431
|
}
|
|
1419
|
-
function
|
|
1432
|
+
function f(l) {
|
|
1420
1433
|
n(l);
|
|
1421
1434
|
}
|
|
1422
|
-
function
|
|
1435
|
+
function i(l) {
|
|
1423
1436
|
const u = l;
|
|
1424
1437
|
Object.assign(u.style, {
|
|
1425
1438
|
...s(u),
|
|
@@ -1432,23 +1445,23 @@ const be = /* @__PURE__ */ N({
|
|
|
1432
1445
|
function h(l) {
|
|
1433
1446
|
n(l);
|
|
1434
1447
|
}
|
|
1435
|
-
return (l, u) => (b(),
|
|
1448
|
+
return (l, u) => (b(), L(At, {
|
|
1436
1449
|
"enter-active-class": "ff-slide-active",
|
|
1437
1450
|
"leave-active-class": "ff-slide-active",
|
|
1438
|
-
onAfterEnter:
|
|
1451
|
+
onAfterEnter: f,
|
|
1439
1452
|
onAfterLeave: h,
|
|
1440
1453
|
onBeforeEnter: c,
|
|
1441
|
-
onBeforeLeave:
|
|
1454
|
+
onBeforeLeave: i,
|
|
1442
1455
|
onEnter: d,
|
|
1443
1456
|
onLeave: p
|
|
1444
1457
|
}, {
|
|
1445
|
-
default:
|
|
1458
|
+
default: K(() => [
|
|
1446
1459
|
O(l.$slots, "default", {}, void 0, !0)
|
|
1447
1460
|
]),
|
|
1448
1461
|
_: 3
|
|
1449
1462
|
}));
|
|
1450
1463
|
}
|
|
1451
|
-
}),
|
|
1464
|
+
}), La = /* @__PURE__ */ G(qa, [["__scopeId", "data-v-4969409d"]]), Ma = { class: "ff-entity-checks-list" }, Ka = /* @__PURE__ */ N({
|
|
1452
1465
|
__name: "EntityChecksAlert",
|
|
1453
1466
|
props: {
|
|
1454
1467
|
entityChecks: {},
|
|
@@ -1464,12 +1477,12 @@ const be = /* @__PURE__ */ N({
|
|
|
1464
1477
|
{ key: "mutually_exclusive", i18nKey: "plugins.form.field_rules.mutually_exclusive" }
|
|
1465
1478
|
];
|
|
1466
1479
|
for (const d of e.entityChecks)
|
|
1467
|
-
for (const { key:
|
|
1468
|
-
if (
|
|
1469
|
-
const p = d[
|
|
1480
|
+
for (const { key: f, i18nKey: i } of c)
|
|
1481
|
+
if (f in d) {
|
|
1482
|
+
const p = d[f];
|
|
1470
1483
|
if (Array.isArray(p) && p.length > 0) {
|
|
1471
1484
|
const h = s(p);
|
|
1472
|
-
h.length > 0 && n.push(r(
|
|
1485
|
+
h.length > 0 && n.push(r(i, {
|
|
1473
1486
|
parameters: a(h)
|
|
1474
1487
|
}));
|
|
1475
1488
|
}
|
|
@@ -1484,30 +1497,30 @@ const be = /* @__PURE__ */ N({
|
|
|
1484
1497
|
return Array.isArray(e.visibleFields) ? n.filter((c) => e.visibleFields.includes(c.split(".")[0])) : n;
|
|
1485
1498
|
}
|
|
1486
1499
|
return (n, c) => {
|
|
1487
|
-
const d =
|
|
1488
|
-
return t.value ? (b(),
|
|
1500
|
+
const d = F("KAlert");
|
|
1501
|
+
return t.value ? (b(), L(d, {
|
|
1489
1502
|
key: 0,
|
|
1490
1503
|
"data-testid": "ff-entity-checks-alert"
|
|
1491
1504
|
}, {
|
|
1492
|
-
default:
|
|
1493
|
-
|
|
1494
|
-
(b(!0),
|
|
1495
|
-
key:
|
|
1505
|
+
default: K(() => [
|
|
1506
|
+
B("ul", Ma, [
|
|
1507
|
+
(b(!0), j(ee, null, re(t.value, (f) => (b(), j("li", {
|
|
1508
|
+
key: f,
|
|
1496
1509
|
"data-testid": "ff-entity-check-item"
|
|
1497
|
-
}, de(
|
|
1510
|
+
}, de(f), 1))), 128))
|
|
1498
1511
|
])
|
|
1499
1512
|
]),
|
|
1500
1513
|
_: 1
|
|
1501
1514
|
})) : H("", !0);
|
|
1502
1515
|
};
|
|
1503
1516
|
}
|
|
1504
|
-
}), Ye = /* @__PURE__ */ G(
|
|
1517
|
+
}), Ye = /* @__PURE__ */ G(Ka, [["__scopeId", "data-v-374c59bc"]]), xa = ["data-testid"], Ra = ["data-testid"], $a = ["data-testid"], ja = { class: "ff-object-field-header-toggle" }, Va = ["aria-controls", "aria-expanded", "aria-label", "data-testid", "disabled"], Ea = ["innerHTML"], Oa = ["data-testid"], Da = {
|
|
1505
1518
|
key: 0,
|
|
1506
1519
|
class: "indent-guide"
|
|
1507
|
-
},
|
|
1520
|
+
}, Fa = /* @__PURE__ */ N({
|
|
1508
1521
|
inheritAttrs: !1,
|
|
1509
1522
|
__name: "ObjectField",
|
|
1510
|
-
props: /* @__PURE__ */
|
|
1523
|
+
props: /* @__PURE__ */ $e({
|
|
1511
1524
|
name: {},
|
|
1512
1525
|
label: {},
|
|
1513
1526
|
labelAttributes: {},
|
|
@@ -1530,14 +1543,14 @@ const be = /* @__PURE__ */ N({
|
|
|
1530
1543
|
}),
|
|
1531
1544
|
emits: ["update:added", "update:expanded"],
|
|
1532
1545
|
setup(e) {
|
|
1533
|
-
const r = kt(), t = le(e, ["defaultAdded", "collapsible", "omit", "required", "asChild", "resetLabelPath", "fieldsOrder"]), { value: a, hide: s, ...n } = Q(
|
|
1546
|
+
const r = kt(), t = le(e, ["defaultAdded", "collapsible", "omit", "required", "asChild", "resetLabelPath", "fieldsOrder"]), { value: a, hide: s, ...n } = Q(V(t, "name")), {
|
|
1534
1547
|
getSchema: c,
|
|
1535
1548
|
getDefault: d,
|
|
1536
|
-
useCurrentRenderRules:
|
|
1537
|
-
} = ae(),
|
|
1549
|
+
useCurrentRenderRules: f
|
|
1550
|
+
} = ae(), i = f({
|
|
1538
1551
|
fieldPath: n.path,
|
|
1539
|
-
rules:
|
|
1540
|
-
omittedFields:
|
|
1552
|
+
rules: V(t, "renderRules"),
|
|
1553
|
+
omittedFields: V(() => e.omit)
|
|
1541
1554
|
}), p = Re(e, "added"), h = Re(e, "expanded"), l = k(() => {
|
|
1542
1555
|
if (n.ancestors?.value) {
|
|
1543
1556
|
const v = n.ancestors.value.parent;
|
|
@@ -1552,10 +1565,10 @@ const be = /* @__PURE__ */ N({
|
|
|
1552
1565
|
return c(v.path)?.type === "map";
|
|
1553
1566
|
}
|
|
1554
1567
|
return !1;
|
|
1555
|
-
}),
|
|
1568
|
+
}), m = ne(n.path, { required: e.required, ...t, resetLabelPath: e.resetLabelPath }), y = k(() => m.value.required ? !0 : p.value ?? e.defaultAdded), C = k(() => e.asChild !== void 0 ? e.asChild : l.value), M = k(() => {
|
|
1556
1569
|
let v = n.schema.value.fields;
|
|
1557
|
-
return e.omit && (v = v.filter((A) => !e.omit.includes(Object.keys(A)[0]))), e.fieldsOrder ? lt(v, e.fieldsOrder) : (
|
|
1558
|
-
}),
|
|
1570
|
+
return e.omit && (v = v.filter((A) => !e.omit.includes(Object.keys(A)[0]))), e.fieldsOrder ? lt(v, e.fieldsOrder) : (i.value?.bundles && (v = ut([...v], i.value.bundles)), v);
|
|
1571
|
+
}), I = k(() => M.value.map((v) => Object.keys(v)[0]));
|
|
1559
1572
|
function g() {
|
|
1560
1573
|
h.value = !h.value;
|
|
1561
1574
|
}
|
|
@@ -1567,81 +1580,81 @@ const be = /* @__PURE__ */ N({
|
|
|
1567
1580
|
}), St(() => {
|
|
1568
1581
|
if (n.error || !a) return;
|
|
1569
1582
|
const v = a.value != null;
|
|
1570
|
-
p.value = v, (
|
|
1583
|
+
p.value = v, (m.value.required || v) && (h.value = !0);
|
|
1571
1584
|
}), (v, A) => {
|
|
1572
|
-
const
|
|
1573
|
-
return b(),
|
|
1574
|
-
(b(),
|
|
1575
|
-
n.error ? (b(),
|
|
1585
|
+
const T = F("KAlert"), x = F("KInputSwitch");
|
|
1586
|
+
return b(), j(ee, null, [
|
|
1587
|
+
(b(), L(ie(v.$slots[o(ke)]))),
|
|
1588
|
+
n.error ? (b(), L(T, {
|
|
1576
1589
|
key: 0,
|
|
1577
1590
|
appearance: "danger",
|
|
1578
1591
|
message: n.error.message
|
|
1579
|
-
}, null, 8, ["message"])) :
|
|
1592
|
+
}, null, 8, ["message"])) : C.value ? Y((b(), j("div", W({
|
|
1580
1593
|
key: 1,
|
|
1581
1594
|
class: "ff-object-field ff-object-field-as-child"
|
|
1582
1595
|
}, v.$attrs, {
|
|
1583
1596
|
"data-testid": `ff-object-${n.path.value}`
|
|
1584
1597
|
}), [
|
|
1585
1598
|
O(v.$slots, "default", {}, () => [
|
|
1586
|
-
|
|
1599
|
+
$(Ye, {
|
|
1587
1600
|
"entity-checks": n.schema.value?.entity_checks,
|
|
1588
|
-
"visible-fields":
|
|
1601
|
+
"visible-fields": I.value
|
|
1589
1602
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1590
|
-
(b(!0),
|
|
1591
|
-
key: Object.keys(
|
|
1592
|
-
name: Object.keys(
|
|
1603
|
+
(b(!0), j(ee, null, re(M.value, (P) => (b(), L(ge, {
|
|
1604
|
+
key: Object.keys(P)[0],
|
|
1605
|
+
name: Object.keys(P)[0]
|
|
1593
1606
|
}, null, 8, ["name"]))), 128))
|
|
1594
1607
|
], !0)
|
|
1595
|
-
], 16,
|
|
1596
|
-
[X, !
|
|
1597
|
-
]) : Y((b(),
|
|
1608
|
+
], 16, xa)), [
|
|
1609
|
+
[X, !o(s)]
|
|
1610
|
+
]) : Y((b(), j("div", W({
|
|
1598
1611
|
key: 2,
|
|
1599
1612
|
class: ["ff-object-field", { "ff-object-field-collapsed": !h.value }],
|
|
1600
1613
|
"data-testid": `ff-object-${n.path.value}`
|
|
1601
1614
|
}, v.$attrs), [
|
|
1602
|
-
|
|
1615
|
+
B("header", {
|
|
1603
1616
|
class: "ff-object-field-header",
|
|
1604
1617
|
"data-testid": `ff-object-header-${n.path.value}`
|
|
1605
1618
|
}, [
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
"aria-controls":
|
|
1619
|
+
B("div", ja, [
|
|
1620
|
+
B("button", {
|
|
1621
|
+
"aria-controls": o(r),
|
|
1609
1622
|
"aria-expanded": h.value,
|
|
1610
|
-
"aria-label":
|
|
1623
|
+
"aria-label": o(m).label,
|
|
1611
1624
|
class: "ff-object-field-toggle-btn",
|
|
1612
1625
|
"data-testid": `ff-object-toggle-btn-${n.path.value}`,
|
|
1613
1626
|
disabled: !p.value,
|
|
1614
1627
|
type: "button",
|
|
1615
|
-
onClick:
|
|
1628
|
+
onClick: Te(g, ["prevent", "stop"])
|
|
1616
1629
|
}, [
|
|
1617
|
-
|
|
1618
|
-
class:
|
|
1630
|
+
$(o(Ot), {
|
|
1631
|
+
class: Ce(["ff-object-field-toggle-btn-trigger-icon", { "collapse-expanded": h.value }]),
|
|
1619
1632
|
"data-testid": `ff-object-toggle-trigger-icon-${n.path.value}`,
|
|
1620
1633
|
decorative: "",
|
|
1621
|
-
size: `var(--kui-icon-size-30, ${
|
|
1634
|
+
size: `var(--kui-icon-size-30, ${o(Dt)})`
|
|
1622
1635
|
}, null, 8, ["class", "data-testid", "size"])
|
|
1623
|
-
], 8,
|
|
1624
|
-
u.value ? H("", !0) : (b(),
|
|
1636
|
+
], 8, Va),
|
|
1637
|
+
u.value ? H("", !0) : (b(), L(o(Rt), W({
|
|
1625
1638
|
key: 0,
|
|
1626
1639
|
class: "ff-object-field-label",
|
|
1627
1640
|
"data-testid": `ff-label-${n.path.value}`
|
|
1628
1641
|
}, {
|
|
1629
|
-
...
|
|
1642
|
+
...o(m),
|
|
1630
1643
|
required: !1
|
|
1631
1644
|
}, {
|
|
1632
|
-
"tooltip-attributes":
|
|
1645
|
+
"tooltip-attributes": o(m).labelAttributes.tooltipAttributes
|
|
1633
1646
|
}), J({
|
|
1634
|
-
default:
|
|
1635
|
-
pe(de(
|
|
1647
|
+
default: K(() => [
|
|
1648
|
+
pe(de(o(m).label) + " ", 1)
|
|
1636
1649
|
]),
|
|
1637
1650
|
_: 2
|
|
1638
1651
|
}, [
|
|
1639
|
-
|
|
1652
|
+
o(m).labelAttributes?.info ? {
|
|
1640
1653
|
name: "tooltip",
|
|
1641
|
-
fn:
|
|
1654
|
+
fn: K(() => [
|
|
1642
1655
|
O(v.$slots, "tooltip", {}, () => [
|
|
1643
|
-
|
|
1644
|
-
innerHTML:
|
|
1656
|
+
B("div", {
|
|
1657
|
+
innerHTML: o(m).labelAttributes.info
|
|
1645
1658
|
}, null, 8, Ea)
|
|
1646
1659
|
], !0)
|
|
1647
1660
|
]),
|
|
@@ -1649,45 +1662,45 @@ const be = /* @__PURE__ */ N({
|
|
|
1649
1662
|
} : void 0
|
|
1650
1663
|
]), 1040, ["data-testid", "tooltip-attributes"]))
|
|
1651
1664
|
]),
|
|
1652
|
-
|
|
1665
|
+
o(m).required ? H("", !0) : (b(), L(x, {
|
|
1653
1666
|
key: 0,
|
|
1654
1667
|
modelValue: p.value,
|
|
1655
1668
|
"onUpdate:modelValue": [
|
|
1656
|
-
A[0] || (A[0] = (
|
|
1669
|
+
A[0] || (A[0] = (P) => p.value = P),
|
|
1657
1670
|
S
|
|
1658
1671
|
],
|
|
1659
1672
|
"data-testid": `ff-object-switch-${n.path.value}`
|
|
1660
1673
|
}, null, 8, ["modelValue", "data-testid"]))
|
|
1661
|
-
], 8,
|
|
1662
|
-
|
|
1663
|
-
default:
|
|
1664
|
-
h.value ? (b(),
|
|
1674
|
+
], 8, $a),
|
|
1675
|
+
$(La, null, {
|
|
1676
|
+
default: K(() => [
|
|
1677
|
+
h.value ? (b(), j("div", {
|
|
1665
1678
|
key: 0,
|
|
1666
1679
|
class: "ff-object-field-content",
|
|
1667
1680
|
"data-testid": `ff-object-content-${n.path.value}`
|
|
1668
1681
|
}, [
|
|
1669
1682
|
O(v.$slots, "default", {}, () => [
|
|
1670
|
-
|
|
1683
|
+
$(Ye, {
|
|
1671
1684
|
"entity-checks": n.schema.value?.entity_checks,
|
|
1672
|
-
"visible-fields":
|
|
1685
|
+
"visible-fields": I.value
|
|
1673
1686
|
}, null, 8, ["entity-checks", "visible-fields"]),
|
|
1674
|
-
(b(!0),
|
|
1675
|
-
key: Object.keys(
|
|
1676
|
-
name: Object.keys(
|
|
1687
|
+
(b(!0), j(ee, null, re(M.value, (P) => (b(), L(ge, {
|
|
1688
|
+
key: Object.keys(P)[0],
|
|
1689
|
+
name: Object.keys(P)[0]
|
|
1677
1690
|
}, null, 8, ["name"]))), 128))
|
|
1678
1691
|
], !0)
|
|
1679
1692
|
], 8, Oa)) : H("", !0)
|
|
1680
1693
|
]),
|
|
1681
1694
|
_: 3
|
|
1682
1695
|
}),
|
|
1683
|
-
h.value ? (b(),
|
|
1696
|
+
h.value ? (b(), j("div", Da)) : H("", !0)
|
|
1684
1697
|
], 16, Ra)), [
|
|
1685
|
-
[X, !
|
|
1698
|
+
[X, !o(s)]
|
|
1686
1699
|
])
|
|
1687
1700
|
], 64);
|
|
1688
1701
|
};
|
|
1689
1702
|
}
|
|
1690
|
-
}),
|
|
1703
|
+
}), Ua = /* @__PURE__ */ G(Fa, [["__scopeId", "data-v-66b4c328"]]), Ba = {
|
|
1691
1704
|
key: 1,
|
|
1692
1705
|
class: "ff-number-field-wrapper"
|
|
1693
1706
|
}, Na = ["innerHTML"], za = /* @__PURE__ */ N({
|
|
@@ -1712,45 +1725,45 @@ const be = /* @__PURE__ */ N({
|
|
|
1712
1725
|
},
|
|
1713
1726
|
emits: ["update:modelValue"],
|
|
1714
1727
|
setup(e, { emit: r }) {
|
|
1715
|
-
const t = le(e, ["autofocus", "showVaultSecretPicker", "name"]), { value: a, hide: s, ...n } = Q(
|
|
1716
|
-
const
|
|
1717
|
-
if (typeof
|
|
1718
|
-
return { min:
|
|
1719
|
-
const [g, S] =
|
|
1728
|
+
const t = le(e, ["autofocus", "showVaultSecretPicker", "name"]), { value: a, hide: s, ...n } = Q(V(() => e.name)), c = ne(n.path, t), { i18n: d } = ve(), f = k(() => {
|
|
1729
|
+
const I = n.schema?.value;
|
|
1730
|
+
if (typeof I.gt == "number")
|
|
1731
|
+
return { min: I.type === "integer" ? I.gt + 1 : I.gt };
|
|
1732
|
+
const [g, S] = I.between ?? [];
|
|
1720
1733
|
return {
|
|
1721
1734
|
min: t.min ?? g,
|
|
1722
1735
|
max: t.max ?? S
|
|
1723
1736
|
};
|
|
1724
|
-
}),
|
|
1725
|
-
const
|
|
1726
|
-
if (
|
|
1727
|
-
if (
|
|
1728
|
-
const g = typeof
|
|
1737
|
+
}), i = r, p = a.value, h = k(() => {
|
|
1738
|
+
const I = a?.value;
|
|
1739
|
+
if (I == null || I === "") return "";
|
|
1740
|
+
if (C.value) return `${I}`;
|
|
1741
|
+
const g = typeof I == "number" ? I : Number(I);
|
|
1729
1742
|
return Number.isFinite(g) ? `${g}` : "";
|
|
1730
1743
|
});
|
|
1731
|
-
function l(
|
|
1732
|
-
const g = u(
|
|
1733
|
-
p !== void 0 &&
|
|
1744
|
+
function l(I) {
|
|
1745
|
+
const g = u(I);
|
|
1746
|
+
p !== void 0 && I === "" && g !== p ? (a.value = null, i("update:modelValue", null)) : (a.value = g, i("update:modelValue", g));
|
|
1734
1747
|
}
|
|
1735
|
-
function u(
|
|
1736
|
-
if (
|
|
1737
|
-
const g =
|
|
1748
|
+
function u(I) {
|
|
1749
|
+
if (I === "") return null;
|
|
1750
|
+
const g = I.trim();
|
|
1738
1751
|
if (g === "") return null;
|
|
1739
1752
|
const S = Number(g);
|
|
1740
|
-
return Number.isFinite(S) ? S :
|
|
1753
|
+
return Number.isFinite(S) ? S : C.value ? I : null;
|
|
1741
1754
|
}
|
|
1742
|
-
const
|
|
1743
|
-
return (
|
|
1744
|
-
const S =
|
|
1745
|
-
return n.error ? (b(),
|
|
1755
|
+
const m = Ae(nt, void 0), y = k(() => ({ referenceable: C.value })), C = k(() => e.showVaultSecretPicker !== void 0 ? e.showVaultSecretPicker : !!n.schema.value?.referenceable), M = k(() => C.value ? "text" : "number");
|
|
1756
|
+
return (I, g) => {
|
|
1757
|
+
const S = F("KAlert");
|
|
1758
|
+
return n.error ? (b(), L(S, {
|
|
1746
1759
|
key: 0,
|
|
1747
1760
|
appearance: "danger",
|
|
1748
1761
|
message: n.error.message
|
|
1749
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1750
|
-
|
|
1751
|
-
...
|
|
1752
|
-
min:
|
|
1753
|
-
max:
|
|
1762
|
+
}, null, 8, ["message"])) : Y((b(), j("div", Ba, [
|
|
1763
|
+
$(be, W({ class: "ff-number-field" }, {
|
|
1764
|
+
...o(c),
|
|
1765
|
+
min: f.value.min,
|
|
1766
|
+
max: f.value.max
|
|
1754
1767
|
}, {
|
|
1755
1768
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1756
1769
|
"data-testid": `ff-${n.path.value}`,
|
|
@@ -1758,38 +1771,38 @@ const be = /* @__PURE__ */ N({
|
|
|
1758
1771
|
type: M.value,
|
|
1759
1772
|
"onUpdate:modelValue": l
|
|
1760
1773
|
}), J({ _: 2 }, [
|
|
1761
|
-
|
|
1774
|
+
o(c).labelAttributes?.info ? {
|
|
1762
1775
|
name: "label-tooltip",
|
|
1763
|
-
fn:
|
|
1764
|
-
O(
|
|
1765
|
-
|
|
1766
|
-
innerHTML:
|
|
1776
|
+
fn: K(() => [
|
|
1777
|
+
O(I.$slots, "tooltip", {}, () => [
|
|
1778
|
+
B("div", {
|
|
1779
|
+
innerHTML: o(c).labelAttributes.info
|
|
1767
1780
|
}, null, 8, Na)
|
|
1768
1781
|
], !0)
|
|
1769
1782
|
]),
|
|
1770
1783
|
key: "0"
|
|
1771
1784
|
} : void 0
|
|
1772
1785
|
]), 1040, ["data-autofocus", "data-testid", "model-value", "type"]),
|
|
1773
|
-
|
|
1786
|
+
o(m) && C.value ? (b(), L(ie(o(m)), {
|
|
1774
1787
|
key: 0,
|
|
1775
1788
|
schema: y.value,
|
|
1776
1789
|
update: l,
|
|
1777
|
-
value:
|
|
1790
|
+
value: o(a) ?? ""
|
|
1778
1791
|
}, null, 8, ["schema", "value"])) : H("", !0),
|
|
1779
|
-
|
|
1792
|
+
C.value && !o(m) ? (b(), L(S, {
|
|
1780
1793
|
key: 1,
|
|
1781
1794
|
appearance: "warning",
|
|
1782
1795
|
"data-testid": `ff-vault-secret-picker-warning-${n.path.value}`,
|
|
1783
|
-
message:
|
|
1796
|
+
message: o(d).t("plugins.free-form.vault_picker.component_error")
|
|
1784
1797
|
}, null, 8, ["data-testid", "message"])) : H("", !0)
|
|
1785
1798
|
], 512)), [
|
|
1786
|
-
[X, !
|
|
1799
|
+
[X, !o(s)]
|
|
1787
1800
|
]);
|
|
1788
1801
|
};
|
|
1789
1802
|
}
|
|
1790
1803
|
}), Ha = /* @__PURE__ */ G(za, [["__scopeId", "data-v-f303431f"]]), Wa = ["innerHTML"], Ga = /* @__PURE__ */ N({
|
|
1791
1804
|
__name: "EnumField",
|
|
1792
|
-
props: /* @__PURE__ */
|
|
1805
|
+
props: /* @__PURE__ */ $e({
|
|
1793
1806
|
labelAttributes: {},
|
|
1794
1807
|
items: {},
|
|
1795
1808
|
placeholder: {},
|
|
@@ -1824,67 +1837,67 @@ const be = /* @__PURE__ */ N({
|
|
|
1824
1837
|
},
|
|
1825
1838
|
modelModifiers: {}
|
|
1826
1839
|
}),
|
|
1827
|
-
emits: /* @__PURE__ */
|
|
1840
|
+
emits: /* @__PURE__ */ $e(["update"], ["update:modelValue"]),
|
|
1828
1841
|
setup(e, { emit: r }) {
|
|
1829
1842
|
const t = r, a = le(e, ["name", "items", "multiple", "autofocus"]), { getSelectItems: s } = ae(), { value: n, hide: c, ...d } = Q(
|
|
1830
|
-
|
|
1831
|
-
),
|
|
1832
|
-
function
|
|
1833
|
-
return l.value && Array.isArray(
|
|
1843
|
+
V(() => e.name)
|
|
1844
|
+
), f = ne(d.path, a);
|
|
1845
|
+
function i(m) {
|
|
1846
|
+
return l.value && Array.isArray(m) && m.length === 0 && !f.value.required ? null : m;
|
|
1834
1847
|
}
|
|
1835
1848
|
const p = Re(e, "modelValue", {
|
|
1836
1849
|
// If multiple and value is null/undefined, return empty array for v-model
|
|
1837
1850
|
get: () => l.value && n?.value == null ? [] : n.value,
|
|
1838
|
-
set: (
|
|
1839
|
-
n.value =
|
|
1851
|
+
set: (m) => {
|
|
1852
|
+
n.value = i(m);
|
|
1840
1853
|
}
|
|
1841
|
-
}), h = k(() => e.items ? e.items : d.path ? s(d.path.value) : []), l = k(() => e.multiple !== void 0 ? e.multiple : d.schema.value?.type === "set"), u = k(() => l.value ?
|
|
1842
|
-
return (
|
|
1843
|
-
const
|
|
1844
|
-
return d.error ? (b(),
|
|
1854
|
+
}), h = k(() => e.items ? e.items : d.path ? s(d.path.value) : []), l = k(() => e.multiple !== void 0 ? e.multiple : d.schema.value?.type === "set"), u = k(() => l.value ? $t : jt);
|
|
1855
|
+
return (m, y) => {
|
|
1856
|
+
const C = F("KAlert");
|
|
1857
|
+
return d.error ? (b(), L(C, {
|
|
1845
1858
|
key: 0,
|
|
1846
1859
|
appearance: "danger",
|
|
1847
1860
|
message: d.error.message
|
|
1848
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1861
|
+
}, null, 8, ["message"])) : Y((b(), L(o(u), W({ key: 1 }, { ...a, ...o(f) }, {
|
|
1849
1862
|
modelValue: p.value,
|
|
1850
1863
|
"onUpdate:modelValue": [
|
|
1851
1864
|
y[0] || (y[0] = (M) => p.value = M),
|
|
1852
|
-
y[1] || (y[1] = (M) => t("update",
|
|
1865
|
+
y[1] || (y[1] = (M) => t("update", i(M)))
|
|
1853
1866
|
],
|
|
1854
1867
|
class: "ff-enum-field",
|
|
1855
|
-
clearable: !
|
|
1868
|
+
clearable: !o(f).required,
|
|
1856
1869
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1857
1870
|
"data-testid": `ff-${d.path.value}`,
|
|
1858
1871
|
items: h.value,
|
|
1859
1872
|
"kpop-attributes": { "data-testid": `ff-enum-${d.path.value}-items` }
|
|
1860
1873
|
}), J({ _: 2 }, [
|
|
1861
|
-
"tooltip" in
|
|
1874
|
+
"tooltip" in m.$slots || o(f).labelAttributes?.info ? {
|
|
1862
1875
|
name: "label-tooltip",
|
|
1863
|
-
fn:
|
|
1864
|
-
O(
|
|
1865
|
-
|
|
1866
|
-
innerHTML:
|
|
1876
|
+
fn: K(() => [
|
|
1877
|
+
O(m.$slots, "tooltip", {}, () => [
|
|
1878
|
+
B("div", {
|
|
1879
|
+
innerHTML: o(f).labelAttributes.info
|
|
1867
1880
|
}, null, 8, Wa)
|
|
1868
1881
|
], !0)
|
|
1869
1882
|
]),
|
|
1870
1883
|
key: "0"
|
|
1871
1884
|
} : void 0,
|
|
1872
|
-
|
|
1885
|
+
m.$slots["item-label"] ? {
|
|
1873
1886
|
name: "item-template",
|
|
1874
|
-
fn:
|
|
1875
|
-
O(
|
|
1887
|
+
fn: K(({ item: M }) => [
|
|
1888
|
+
O(m.$slots, "item-label", Fe(Ze(M)), void 0, !0)
|
|
1876
1889
|
]),
|
|
1877
1890
|
key: "1"
|
|
1878
1891
|
} : void 0,
|
|
1879
|
-
|
|
1892
|
+
m.$slots["dropdown-footer-text"] ? {
|
|
1880
1893
|
name: "dropdown-footer-text",
|
|
1881
|
-
fn:
|
|
1882
|
-
O(
|
|
1894
|
+
fn: K(() => [
|
|
1895
|
+
O(m.$slots, "dropdown-footer-text", {}, void 0, !0)
|
|
1883
1896
|
]),
|
|
1884
1897
|
key: "2"
|
|
1885
1898
|
} : void 0
|
|
1886
1899
|
]), 1040, ["modelValue", "clearable", "data-autofocus", "data-testid", "items", "kpop-attributes"])), [
|
|
1887
|
-
[X, !
|
|
1900
|
+
[X, !o(c)]
|
|
1888
1901
|
]);
|
|
1889
1902
|
};
|
|
1890
1903
|
}
|
|
@@ -1898,13 +1911,13 @@ const be = /* @__PURE__ */ N({
|
|
|
1898
1911
|
},
|
|
1899
1912
|
emits: ["update:modelValue"],
|
|
1900
1913
|
setup(e, { emit: r }) {
|
|
1901
|
-
const t = ye(), a = le(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Q(
|
|
1914
|
+
const t = ye(), a = le(e, ["autofocus", "name"]), s = r, { value: n, hide: c, ...d } = Q(V(() => e.name)), f = ne(d.path, V({ ...a, ...t })), i = se("");
|
|
1902
1915
|
function p(l) {
|
|
1903
|
-
|
|
1916
|
+
i.value = l;
|
|
1904
1917
|
let u = l || null;
|
|
1905
1918
|
try {
|
|
1906
|
-
const
|
|
1907
|
-
|
|
1919
|
+
const m = JSON.parse(l);
|
|
1920
|
+
m && typeof m == "object" && (u = m);
|
|
1908
1921
|
} catch {
|
|
1909
1922
|
}
|
|
1910
1923
|
n.value = u, s("update:modelValue", u);
|
|
@@ -1913,39 +1926,39 @@ const be = /* @__PURE__ */ N({
|
|
|
1913
1926
|
return te(n, (l) => {
|
|
1914
1927
|
if (l && typeof l == "object") {
|
|
1915
1928
|
try {
|
|
1916
|
-
const u = JSON.parse(
|
|
1917
|
-
fe(u, l) || (
|
|
1929
|
+
const u = JSON.parse(i.value);
|
|
1930
|
+
fe(u, l) || (i.value = JSON.stringify(l, null, 2));
|
|
1918
1931
|
} catch {
|
|
1919
|
-
|
|
1932
|
+
i.value = JSON.stringify(l, null, 2);
|
|
1920
1933
|
}
|
|
1921
1934
|
return;
|
|
1922
1935
|
}
|
|
1923
|
-
|
|
1936
|
+
i.value = l || "";
|
|
1924
1937
|
}, { immediate: !0 }), (l, u) => {
|
|
1925
|
-
const
|
|
1926
|
-
return d.error ? (b(),
|
|
1938
|
+
const m = F("KAlert");
|
|
1939
|
+
return d.error ? (b(), L(m, {
|
|
1927
1940
|
key: 0,
|
|
1928
1941
|
appearance: "danger",
|
|
1929
1942
|
message: d.error.message
|
|
1930
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
1943
|
+
}, null, 8, ["message"])) : Y((b(), j("div", {
|
|
1931
1944
|
key: 1,
|
|
1932
1945
|
"data-testid": `ff-json-${d.path.value}`
|
|
1933
1946
|
}, [
|
|
1934
|
-
|
|
1947
|
+
$(be, W(o(f), {
|
|
1935
1948
|
class: "ff-json-field",
|
|
1936
1949
|
"data-1p-ignore": h.value,
|
|
1937
1950
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1938
1951
|
"data-testid": `ff-${d.path.value}`,
|
|
1939
|
-
"model-value":
|
|
1952
|
+
"model-value": i.value ?? "",
|
|
1940
1953
|
multiline: "",
|
|
1941
1954
|
"onUpdate:modelValue": p
|
|
1942
1955
|
}), J({ _: 2 }, [
|
|
1943
|
-
|
|
1956
|
+
o(f).labelAttributes?.info ? {
|
|
1944
1957
|
name: "label-tooltip",
|
|
1945
|
-
fn:
|
|
1958
|
+
fn: K(() => [
|
|
1946
1959
|
O(l.$slots, "tooltip", {}, () => [
|
|
1947
|
-
|
|
1948
|
-
innerHTML:
|
|
1960
|
+
B("div", {
|
|
1961
|
+
innerHTML: o(f).labelAttributes.info
|
|
1949
1962
|
}, null, 8, Ya)
|
|
1950
1963
|
], !0)
|
|
1951
1964
|
]),
|
|
@@ -1953,7 +1966,7 @@ const be = /* @__PURE__ */ N({
|
|
|
1953
1966
|
} : void 0
|
|
1954
1967
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "model-value"])
|
|
1955
1968
|
], 8, Ja)), [
|
|
1956
|
-
[X, !
|
|
1969
|
+
[X, !o(c)]
|
|
1957
1970
|
]);
|
|
1958
1971
|
};
|
|
1959
1972
|
}
|
|
@@ -1976,19 +1989,19 @@ const be = /* @__PURE__ */ N({
|
|
|
1976
1989
|
},
|
|
1977
1990
|
emits: ["update:modelValue"],
|
|
1978
1991
|
setup(e, { emit: r }) {
|
|
1979
|
-
const t = ye(), { i18n: { t: a } } = ve(), s = le(e, ["autofocus", "name"]), n = r, { value: c, hide: d, ...
|
|
1980
|
-
if (
|
|
1981
|
-
throw new Error(
|
|
1982
|
-
const
|
|
1992
|
+
const t = ye(), { i18n: { t: a } } = ve(), s = le(e, ["autofocus", "name"]), n = r, { value: c, hide: d, ...f } = Q(V(() => e.name));
|
|
1993
|
+
if (f.error)
|
|
1994
|
+
throw new Error(f.error.message);
|
|
1995
|
+
const i = ne(f.path, V({ ...s, ...t })), p = c.value ? c.value.id : null, h = k(() => i.value.placeholder ? i.value.placeholder : a("plugins.free-form.foreign_placeholder", { entity: f.schema.value?.reference ?? "entity" })), l = se(p ?? "");
|
|
1983
1996
|
function u(y) {
|
|
1984
1997
|
p !== void 0 && y === "" && y !== p ? (c.value = null, n("update:modelValue", null)) : (c.value = { id: y.trim() }, n("update:modelValue", c.value));
|
|
1985
1998
|
}
|
|
1986
|
-
const
|
|
1987
|
-
return (y,
|
|
1999
|
+
const m = k(() => t["data-1p-ignore"] !== void 0 ? t["data-1p-ignore"] : me(e.name) === "name");
|
|
2000
|
+
return (y, C) => Y((b(), L(be, W(o(i), {
|
|
1988
2001
|
class: "ff-foreign-field",
|
|
1989
|
-
"data-1p-ignore":
|
|
2002
|
+
"data-1p-ignore": m.value,
|
|
1990
2003
|
"data-autofocus": e.autofocus ? "true" : void 0,
|
|
1991
|
-
"data-testid": `ff-${
|
|
2004
|
+
"data-testid": `ff-${f.path.value}`,
|
|
1992
2005
|
error: e.error,
|
|
1993
2006
|
"error-message": e.errorMessage,
|
|
1994
2007
|
help: e.help,
|
|
@@ -1996,19 +2009,19 @@ const be = /* @__PURE__ */ N({
|
|
|
1996
2009
|
placeholder: h.value,
|
|
1997
2010
|
"onUpdate:modelValue": u
|
|
1998
2011
|
}), J({ _: 2 }, [
|
|
1999
|
-
i
|
|
2012
|
+
o(i).labelAttributes?.info ? {
|
|
2000
2013
|
name: "label-tooltip",
|
|
2001
|
-
fn:
|
|
2014
|
+
fn: K(() => [
|
|
2002
2015
|
O(y.$slots, "tooltip", {}, () => [
|
|
2003
|
-
|
|
2004
|
-
innerHTML: i
|
|
2016
|
+
B("div", {
|
|
2017
|
+
innerHTML: o(i).labelAttributes.info
|
|
2005
2018
|
}, null, 8, Za)
|
|
2006
2019
|
], !0)
|
|
2007
2020
|
]),
|
|
2008
2021
|
key: "0"
|
|
2009
2022
|
} : void 0
|
|
2010
2023
|
]), 1040, ["data-1p-ignore", "data-autofocus", "data-testid", "error", "error-message", "help", "model-value", "placeholder"])), [
|
|
2011
|
-
[X, !
|
|
2024
|
+
[X, !o(d)]
|
|
2012
2025
|
]);
|
|
2013
2026
|
}
|
|
2014
2027
|
}), tn = /* @__PURE__ */ G(en, [["__scopeId", "data-v-8c298e9f"]]), an = ["data-testid"], nn = ["data-testid"], on = ["innerHTML"], rn = { class: "ff-map-field-fields" }, sn = /* @__PURE__ */ N({
|
|
@@ -2027,58 +2040,58 @@ const be = /* @__PURE__ */ N({
|
|
|
2027
2040
|
keys: n,
|
|
2028
2041
|
updateKey: c,
|
|
2029
2042
|
addKey: d,
|
|
2030
|
-
removeKey:
|
|
2031
|
-
field:
|
|
2043
|
+
removeKey: f,
|
|
2044
|
+
field: i,
|
|
2032
2045
|
fieldDisplayName: p
|
|
2033
|
-
} = ua(
|
|
2034
|
-
function
|
|
2035
|
-
a.appearance?.string?.multiline || (A.preventDefault(),
|
|
2046
|
+
} = ua(V(a, "name"), v), h = ne(i.path, a), l = ["string", "number", "boolean", "integer", "foreign"], u = k(() => a.oneLine ? !0 : i.schema?.value?.type === "map" && l.includes(i.schema.value.values.type) && !a.appearance?.string?.multiline), m = k(() => i.schema?.value?.type === "map" ? i.schema.value.values : void 0), y = k(() => m.value?.type === "string" && !m.value?.one_of), C = k(() => u.value ? "div" : je), M = et("root");
|
|
2047
|
+
function I(A, T) {
|
|
2048
|
+
a.appearance?.string?.multiline || (A.preventDefault(), T === n.value.length - 1 && d(), g(T + 1));
|
|
2036
2049
|
}
|
|
2037
2050
|
async function g(A) {
|
|
2038
|
-
M.value && (await
|
|
2051
|
+
M.value && (await xe(), M.value.querySelector(`[data-key-input="${A}"]`)?.focus());
|
|
2039
2052
|
}
|
|
2040
2053
|
function S() {
|
|
2041
2054
|
d();
|
|
2042
|
-
const A = n.value.findIndex(([
|
|
2055
|
+
const A = n.value.findIndex(([T, x]) => !x);
|
|
2043
2056
|
g(A === -1 ? n.value.length - 1 : A);
|
|
2044
2057
|
}
|
|
2045
2058
|
function v(A) {
|
|
2046
2059
|
s("legacyValueChange", A);
|
|
2047
2060
|
}
|
|
2048
|
-
return (A,
|
|
2049
|
-
const
|
|
2050
|
-
return i
|
|
2061
|
+
return (A, T) => {
|
|
2062
|
+
const x = F("KAlert"), P = F("KLabel"), _ = F("KButton"), q = F("KTooltip");
|
|
2063
|
+
return o(i).error ? (b(), L(x, {
|
|
2051
2064
|
key: 0,
|
|
2052
2065
|
appearance: "danger",
|
|
2053
|
-
message: i
|
|
2054
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
2066
|
+
message: o(i).error.message
|
|
2067
|
+
}, null, 8, ["message"])) : Y((b(), j("div", {
|
|
2055
2068
|
key: 1,
|
|
2056
2069
|
ref_key: "root",
|
|
2057
2070
|
ref: M,
|
|
2058
2071
|
class: "ff-map-field",
|
|
2059
|
-
"data-testid": `ff-map-${i
|
|
2072
|
+
"data-testid": `ff-map-${o(i).path.value}`
|
|
2060
2073
|
}, [
|
|
2061
|
-
|
|
2074
|
+
o(h).label ? (b(), j("header", {
|
|
2062
2075
|
key: 0,
|
|
2063
2076
|
class: "ff-map-field-header",
|
|
2064
|
-
"data-testid": `ff-map-header-${i
|
|
2077
|
+
"data-testid": `ff-map-header-${o(i).path.value}`
|
|
2065
2078
|
}, [
|
|
2066
|
-
|
|
2067
|
-
"data-testid": `ff-label-${i
|
|
2068
|
-
required:
|
|
2069
|
-
"tooltip-attributes":
|
|
2079
|
+
$(P, W({ class: "ff-map-field-label" }, o(h).labelAttributes, {
|
|
2080
|
+
"data-testid": `ff-label-${o(i).path.value}`,
|
|
2081
|
+
required: o(h).required,
|
|
2082
|
+
"tooltip-attributes": o(h).labelAttributes.tooltipAttributes
|
|
2070
2083
|
}), J({
|
|
2071
|
-
default:
|
|
2072
|
-
pe(de(
|
|
2084
|
+
default: K(() => [
|
|
2085
|
+
pe(de(o(h).label) + " ", 1)
|
|
2073
2086
|
]),
|
|
2074
2087
|
_: 2
|
|
2075
2088
|
}, [
|
|
2076
|
-
|
|
2089
|
+
o(h).labelAttributes?.info ? {
|
|
2077
2090
|
name: "tooltip",
|
|
2078
|
-
fn:
|
|
2091
|
+
fn: K(() => [
|
|
2079
2092
|
O(A.$slots, "tooltip", {}, () => [
|
|
2080
|
-
|
|
2081
|
-
innerHTML:
|
|
2093
|
+
B("div", {
|
|
2094
|
+
innerHTML: o(h).labelAttributes.info
|
|
2082
2095
|
}, null, 8, on)
|
|
2083
2096
|
], !0)
|
|
2084
2097
|
]),
|
|
@@ -2086,51 +2099,51 @@ const be = /* @__PURE__ */ N({
|
|
|
2086
2099
|
} : void 0
|
|
2087
2100
|
]), 1040, ["data-testid", "required", "tooltip-attributes"])
|
|
2088
2101
|
], 8, nn)) : H("", !0),
|
|
2089
|
-
(b(!0),
|
|
2102
|
+
(b(!0), j(ee, null, re(o(n), ([w, U], z) => (b(), L(ie(C.value), {
|
|
2090
2103
|
key: w,
|
|
2091
|
-
class:
|
|
2104
|
+
class: Ce(["ff-map-field-item", {
|
|
2092
2105
|
"ff-map-field-item-simple": u.value,
|
|
2093
2106
|
"ff-map-field-item-complex": !u.value
|
|
2094
2107
|
}]),
|
|
2095
|
-
"data-testid": `ff-map-container-${i
|
|
2108
|
+
"data-testid": `ff-map-container-${o(i).path.value}.${z}`
|
|
2096
2109
|
}, {
|
|
2097
|
-
default:
|
|
2098
|
-
|
|
2099
|
-
|
|
2110
|
+
default: K(() => [
|
|
2111
|
+
B("div", rn, [
|
|
2112
|
+
$(be, {
|
|
2100
2113
|
class: "ff-map-field-fields-key",
|
|
2101
2114
|
"data-key-input": z,
|
|
2102
|
-
"data-testid": `ff-map-key-${i
|
|
2103
|
-
"model-value":
|
|
2115
|
+
"data-testid": `ff-map-key-${o(i).path.value}.${z}`,
|
|
2116
|
+
"model-value": U,
|
|
2104
2117
|
placeholder: e.keyPlaceholder || "Key",
|
|
2105
|
-
onKeydown: Ne(
|
|
2106
|
-
"onUpdate:modelValue": (
|
|
2118
|
+
onKeydown: Ne(Te((oe) => g(z), ["prevent"]), ["enter"]),
|
|
2119
|
+
"onUpdate:modelValue": (oe) => o(c)(w, oe)
|
|
2107
2120
|
}, null, 8, ["data-key-input", "data-testid", "model-value", "placeholder", "onKeydown", "onUpdate:modelValue"]),
|
|
2108
2121
|
O(A.$slots, "default", { keyId: w }, () => [
|
|
2109
|
-
y.value ? (b(),
|
|
2122
|
+
y.value ? (b(), L(ht, {
|
|
2110
2123
|
key: 0,
|
|
2111
2124
|
"inline-vault-picker": "",
|
|
2112
2125
|
multiline: e.appearance?.string?.multiline,
|
|
2113
2126
|
name: w,
|
|
2114
|
-
onKeydown: Ne((
|
|
2115
|
-
}, null, 8, ["multiline", "name", "onKeydown"])) : (b(),
|
|
2127
|
+
onKeydown: Ne((oe) => I(oe, z), ["enter"])
|
|
2128
|
+
}, null, 8, ["multiline", "name", "onKeydown"])) : (b(), L(ge, {
|
|
2116
2129
|
key: 1,
|
|
2117
2130
|
name: w
|
|
2118
2131
|
}, null, 8, ["name"]))
|
|
2119
2132
|
], !0)
|
|
2120
2133
|
]),
|
|
2121
|
-
|
|
2122
|
-
text:
|
|
2134
|
+
$(q, {
|
|
2135
|
+
text: o(t).t("actions.remove_entity", { entity: o(p) })
|
|
2123
2136
|
}, {
|
|
2124
|
-
default:
|
|
2125
|
-
|
|
2137
|
+
default: K(() => [
|
|
2138
|
+
$(_, {
|
|
2126
2139
|
appearance: "tertiary",
|
|
2127
|
-
"aria-label":
|
|
2128
|
-
"data-testid": `ff-map-remove-btn-${i
|
|
2140
|
+
"aria-label": o(t).t("actions.remove_entity", { entity: o(p) }),
|
|
2141
|
+
"data-testid": `ff-map-remove-btn-${o(i).path.value}.${z}`,
|
|
2129
2142
|
icon: "",
|
|
2130
|
-
onClick: (
|
|
2143
|
+
onClick: (oe) => o(f)(w)
|
|
2131
2144
|
}, {
|
|
2132
|
-
default:
|
|
2133
|
-
|
|
2145
|
+
default: K(() => [
|
|
2146
|
+
$(o(rt))
|
|
2134
2147
|
]),
|
|
2135
2148
|
_: 1
|
|
2136
2149
|
}, 8, ["aria-label", "data-testid", "onClick"])
|
|
@@ -2140,21 +2153,21 @@ const be = /* @__PURE__ */ N({
|
|
|
2140
2153
|
]),
|
|
2141
2154
|
_: 2
|
|
2142
2155
|
}, 1032, ["class", "data-testid"]))), 128)),
|
|
2143
|
-
|
|
2156
|
+
$(_, {
|
|
2144
2157
|
appearance: "tertiary",
|
|
2145
|
-
"aria-label":
|
|
2158
|
+
"aria-label": o(t).t("actions.add_entity", { entity: o(p) }),
|
|
2146
2159
|
class: "ff-map-field-add-entry-btn",
|
|
2147
|
-
"data-testid": `ff-map-add-btn-${i
|
|
2160
|
+
"data-testid": `ff-map-add-btn-${o(i).path.value}`,
|
|
2148
2161
|
onClick: S
|
|
2149
2162
|
}, {
|
|
2150
|
-
default:
|
|
2151
|
-
|
|
2152
|
-
pe(" " + de(
|
|
2163
|
+
default: K(() => [
|
|
2164
|
+
$(o(Ve)),
|
|
2165
|
+
pe(" " + de(o(t).t("actions.add_entity", { entity: o(p) })), 1)
|
|
2153
2166
|
]),
|
|
2154
2167
|
_: 1
|
|
2155
2168
|
}, 8, ["aria-label", "data-testid"])
|
|
2156
2169
|
], 8, an)), [
|
|
2157
|
-
[X, !i
|
|
2170
|
+
[X, !o(i).hide.value]
|
|
2158
2171
|
]);
|
|
2159
2172
|
};
|
|
2160
2173
|
}
|
|
@@ -2168,7 +2181,7 @@ const be = /* @__PURE__ */ N({
|
|
|
2168
2181
|
},
|
|
2169
2182
|
emits: ["globalAction"],
|
|
2170
2183
|
setup(e) {
|
|
2171
|
-
const r = e, t = Q(
|
|
2184
|
+
const r = e, t = Q(V(r, "name")), a = k(() => {
|
|
2172
2185
|
switch (t.schema?.value?.type) {
|
|
2173
2186
|
case "string":
|
|
2174
2187
|
return "one_of" in t.schema.value ? Se : ht;
|
|
@@ -2178,11 +2191,11 @@ const be = /* @__PURE__ */ N({
|
|
|
2178
2191
|
case "integer":
|
|
2179
2192
|
return "one_of" in t.schema.value ? Se : Ha;
|
|
2180
2193
|
case "array":
|
|
2181
|
-
return
|
|
2194
|
+
return Pa;
|
|
2182
2195
|
case "set":
|
|
2183
|
-
return
|
|
2196
|
+
return Ut(t.schema) ? gt : Se;
|
|
2184
2197
|
case "record":
|
|
2185
|
-
return
|
|
2198
|
+
return Ua;
|
|
2186
2199
|
case "map":
|
|
2187
2200
|
return ln;
|
|
2188
2201
|
case "json":
|
|
@@ -2194,34 +2207,34 @@ const be = /* @__PURE__ */ N({
|
|
|
2194
2207
|
}
|
|
2195
2208
|
});
|
|
2196
2209
|
return (s, n) => {
|
|
2197
|
-
const c =
|
|
2198
|
-
return b(),
|
|
2199
|
-
(b(),
|
|
2200
|
-
|
|
2210
|
+
const c = F("KAlert");
|
|
2211
|
+
return b(), j(ee, null, [
|
|
2212
|
+
(b(), L(ie(s.$slots[o(ke)]))),
|
|
2213
|
+
o(t).error ? (b(), L(c, {
|
|
2201
2214
|
key: 0,
|
|
2202
2215
|
appearance: "danger",
|
|
2203
|
-
message:
|
|
2204
|
-
}, null, 8, ["message"])) :
|
|
2216
|
+
message: o(t).error.message
|
|
2217
|
+
}, null, 8, ["message"])) : o(t).renderer.value ? (b(), L(ie(o(t).renderer.value), {
|
|
2205
2218
|
key: 1,
|
|
2206
2219
|
autofocus: r.autofocus,
|
|
2207
|
-
name: Ee(
|
|
2208
|
-
onGlobalAction: n[0] || (n[0] = (d,
|
|
2209
|
-
}, null, 40, ["autofocus", "name"])) : (b(),
|
|
2210
|
-
a.value ? (b(),
|
|
2220
|
+
name: Ee(o(t).path.value),
|
|
2221
|
+
onGlobalAction: n[0] || (n[0] = (d, f) => s.$emit("globalAction", d, f))
|
|
2222
|
+
}, null, 40, ["autofocus", "name"])) : (b(), j(ee, { key: 2 }, [
|
|
2223
|
+
a.value ? (b(), L(ie(a.value), {
|
|
2211
2224
|
key: 0,
|
|
2212
2225
|
autofocus: r.autofocus,
|
|
2213
|
-
name: Ee(
|
|
2214
|
-
}, null, 8, ["autofocus", "name"])) : (b(),
|
|
2226
|
+
name: Ee(o(t).path.value)
|
|
2227
|
+
}, null, 8, ["autofocus", "name"])) : (b(), L(c, {
|
|
2215
2228
|
key: 1,
|
|
2216
2229
|
appearance: "warning",
|
|
2217
|
-
message: `${
|
|
2230
|
+
message: `${o(t).path.value} ${o(t).schema.value.type} (no renderer yet)`
|
|
2218
2231
|
}, null, 8, ["message"])),
|
|
2219
2232
|
O(s.$slots, "default")
|
|
2220
2233
|
], 64))
|
|
2221
2234
|
], 64);
|
|
2222
2235
|
};
|
|
2223
2236
|
}
|
|
2224
|
-
}),
|
|
2237
|
+
}), Vn = /* @__PURE__ */ N({
|
|
2225
2238
|
name: "SchemaForm",
|
|
2226
2239
|
__name: "Form",
|
|
2227
2240
|
props: {
|
|
@@ -2234,29 +2247,29 @@ const be = /* @__PURE__ */ N({
|
|
|
2234
2247
|
},
|
|
2235
2248
|
emits: ["change", "globalAction"],
|
|
2236
2249
|
setup(e, { expose: r, emit: t }) {
|
|
2237
|
-
const a = t, s = we(), { getSchema: n, formData: c, setValue: d, getValue:
|
|
2250
|
+
const a = t, s = we(), { getSchema: n, formData: c, setValue: d, getValue: f, rootRenderRules: i } = ta({
|
|
2238
2251
|
schema: e.schema,
|
|
2239
2252
|
propsData: k(() => e.data),
|
|
2240
2253
|
propsConfig: e.config,
|
|
2241
|
-
propsRenderRules:
|
|
2254
|
+
propsRenderRules: V(() => e.renderRules),
|
|
2242
2255
|
onChange: (h) => a("change", h)
|
|
2243
2256
|
}), p = k(() => {
|
|
2244
2257
|
const { fields: h } = n();
|
|
2245
2258
|
let l = [...h];
|
|
2246
|
-
return e.fieldsOrder ? lt(l, e.fieldsOrder) : (
|
|
2259
|
+
return e.fieldsOrder ? lt(l, e.fieldsOrder) : (i.value?.bundles && (l = ut([...l], i.value.bundles)), l);
|
|
2247
2260
|
});
|
|
2248
2261
|
return r({
|
|
2249
|
-
getValue:
|
|
2262
|
+
getValue: f,
|
|
2250
2263
|
getRawValue: () => Qe(c),
|
|
2251
2264
|
setValue: d
|
|
2252
|
-
}), (h, l) => (b(),
|
|
2253
|
-
default:
|
|
2254
|
-
(b(),
|
|
2265
|
+
}), (h, l) => (b(), L(ie(e.tag), null, {
|
|
2266
|
+
default: K(() => [
|
|
2267
|
+
(b(), L(ie(o(s)[o(ke)]))),
|
|
2255
2268
|
O(h.$slots, "default", {}, () => [
|
|
2256
|
-
(b(!0),
|
|
2269
|
+
(b(!0), j(ee, null, re(p.value, (u) => (b(), L(ge, {
|
|
2257
2270
|
key: Object.keys(u)[0],
|
|
2258
2271
|
name: Object.keys(u)[0],
|
|
2259
|
-
onGlobalAction: l[0] || (l[0] = (
|
|
2272
|
+
onGlobalAction: l[0] || (l[0] = (m, y) => a("globalAction", m, y))
|
|
2260
2273
|
}, null, 8, ["name"]))), 128))
|
|
2261
2274
|
])
|
|
2262
2275
|
]),
|
|
@@ -2273,7 +2286,7 @@ const be = /* @__PURE__ */ N({
|
|
|
2273
2286
|
const r = e, { default: t } = we(), { fieldRendererRegistry: a } = ae();
|
|
2274
2287
|
return t && a.set(r.match, t), (s, n) => null;
|
|
2275
2288
|
}
|
|
2276
|
-
}), 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":{"unavailable_kong_manager":"The Governance plugin can't be configured in Kong Manager yet.","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.","create_feature":"+ Create new feature","unavailable":"You don't have access to metering features. Enable Metering & Billing in your Konnect organization to configure the feature to govern.","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.
|
|
2289
|
+
}), 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}"},"openid-connect":{"tabs":{"common":{"title":"Common Configuration Settings","description":"Parameters for enabling the OpenID Connect plugin. Set these parameters before adding authorization, authentication, or other advanced configuration details."},"authorization":{"title":"Authorization Configuration Settings","description":"Parameters for setting up claims-based authorization."},"advanced":{"title":"Advanced Configuration Settings","description":"Advanced parameters for manually configuring the OpenID Connect plugin."}},"auth_methods":{"label":"Authentication methods","placeholder":"Select authentication methods","hint":"Configure which OAuth and OpenID Connect features are supported.","km_label":"Auth methods","methods":{"authorization_code":"Authorization code flow","bearer":"Bearer access token","client_credentials":"Client credentials grant","password":"Passwords grant","introspection":"Introspection","userinfo":"UserInfo","kong_oauth2":"Kong OAuth","refresh_token":"Refresh token"},"session":{"label":"Session management","switch_label":"Enable Session Management","use_label":"Use sessions","use_description":"Issue a session cookie after successful authentication. Subsequent requests use the session instead of re-authenticating with the identity provider.","no_use_label":"Do not use sessions","no_use_description":"Authenticate each request using the configured authentication flow."}},"principals":{"header":"Who should manage authentication and credentials?","description":"Use External auth server to continue using your existing OAuth provider and authentication workflows. Use Kong Identity to adopt a newer principal-based model that centralizes and simplifies identity and authentication management.","learn_more":"Learn more.","kong_identity_label":"Kong Identity","kong_identity_description":"Use Kong Identity to authenticate OpenID Connect tokens. If all data plane nodes are running version 3.15 or later, you can also map requests to Kong Identity principals for advanced policies and integrations.","external_label":"External auth server","external_description":"Connect to your existing identity provider to manage authentication outside of Kong.","guide":{"title":"Add principals","description":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products.","description_external":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products. Requires data plane nodes to be running version 3.15 or later.","create":"Create principal","learn_more":"Learn more"},"auth_server":{"label":"Authorization Server","info":"The Kong Identity auth server that will act as the OpenID Connect provider for this plugin.","placeholder":"Select an Authorization Server","create":"Create authorization server","create_hint":"You'll need to return here after creating an authorization server. Your progress won't be saved.","no_access_help":"You don't have access to browse authorization servers. Enter the issuer URL of your Kong Identity authorization server directly.","issuer_placeholder":"e.g., https://your-auth-server.identity.konghq.com"},"client":{"label":"Client","id_label":"Client id","secret_label":"Client secret","placeholder":"Select a client","id_placeholder":"e.g., kong-gateway-client","secret_placeholder":"e.g., your-client-secret","create":"Create client","create_hint":"You'll need to return here after creating a client. Your progress won't be saved.","add":"Add client","remove":"Remove client"},"leave_prompt":{"title":"Leave this page?","message":"Your unsaved changes will be lost if you continue.","action":"Leave page"},"dp_version_alert":"We detected that one or more data plane nodes are running a version earlier than 3.15. If principal lookup is enabled, requests handled by those data plane nodes will fail."},"lookup":{"collapse_label":"Show additional settings","toggle_label":"Use principal lookup","toggle_info":"Look up the authenticated principal in Kong Identity after token validation. Enable this when the validated token doesn't contain all of the identity data required for authorization or activity logging.","method":{"label":"Principal lookup method","placeholder":"Select a lookup method","help":"Principal lookup queries Kong Identity for the principal that matches the identity in a verified access token. This enables principal-aware policies and integrations. Requires all data plane nodes to be running version 3.15 or later.","kong_identity_label":"Kong Identity client","kong_identity_description":"Match principals using a token claim, defaulting to the subject (sub) claim.","custom_identity_label":"Custom claim","custom_identity_description":"Match principals using a custom JWT claim."},"custom_identity_name":{"label":"Custom identity name","help":"Enter the custom identity name used to look up the principal. Kong matches the value from the token claim to a principal with the same custom identity name and value.","placeholder":"e.g., Customer_ID"},"token_claim":{"label":"Token claim","placeholder":"e.g., user.employee_id","help":"Defaults to the subject (sub) claim, but you can specify a different token claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id).","help_custom":"The token claim whose value is matched against the Custom identity name. Defaults to the subject (sub) claim, but you can specify a different claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id)."},"error_on_miss":{"label":"If principal lookup fails","reject_label":"Reject the request","reject_description":"Treat the request as unauthenticated if Kong Identity cannot resolve the principal.","continue_label":"Continue without a principal","continue_description":"Allow the request to continue without resolving a principal."},"match_consumer":{"label":"Use linked consumers","description":"Use the consumer linked to the authenticated principal so existing consumer-based plugins and policies continue to work.","link":"Learn how to link a consumer."},"match_consumer_groups":{"label":"Use linked consumer groups","description":"Use consumer groups linked to the authenticated principal so existing consumer group policies and plugins continue to work. Consumer groups can be linked through principal metadata.","link":"Learn how to link a consumer group."}},"advanced_fields":{"client_jwk_link_label":"Client JWK","verify_signature_description":"JSON Web Keys are automatically fetched from the issuer's well-known endpoint. Enter a JWKS URI below to override this."}},"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":{"unavailable_kong_manager":"The Governance plugin can't be configured in Kong Manager yet.","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.","create_feature":"+ Create new feature","unavailable":"You don't have access to metering features. Enable Metering & Billing in your Konnect organization to configure the feature to govern.","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.
|
|
2277
2290
|
If the limit is exceeded and the user receives a 429 error, each additional request within the sliding window (hour)
|
|
2278
2291
|
will extend the wait time by about 12 minutes, continuously adjusting as new requests are made.` } } } }, _n = { step1: { title: "Custom plugin type", types: { installed: { label: "Installed custom plugin", description: "Install and manage plugins with full control over deployment and runtime. Requires restarting data planes." }, streamed: { label: "Streamed custom plugin", description: "Deploy and update plugins on running data planes without requiring gateway access." }, cloned: { label: "Cloned plugin", description: "Duplicate an existing plugin to run multiple instances within a single request." } }, compare_trigger: "Compare deployment options", compare_table: { columns: { installed: "Installed custom plugin", streamed: "Streamed custom plugin", cloned: "Cloned plugin" }, rows: { main_use_case: { header: "Main use case", installed: "Extend Kong functionality with custom plugins and control who can modify and roll out changes.", streamed: "Extend Kong functionality with plugins without requiring sysadmin access to data plane instances.", cloned: "Modify an existing plugin to run multiple instances with different names or priorities." }, file_supplied: { header: "File supplied", installed: { handler: "handler.lua", schema: "schema.lua", additional: "Any additional files or libraries needed" }, streamed: { handler: "handler.lua", schema: "schema.lua" } }, how_installed: { header: "How it's installed", installed: "Install directly on the data plane", streamed: "Through gateway configuration changes", cloned: "Through gateway configuration changes" }, sandboxing: { header: "Sandboxing", streamed: "Follows the standard sandboxing settings. {link}", streamed_link: "Link to docs", cloned: "Inherit the same sandboxing as the original plugins" }, data_plane_reload: { header: "Data plane reload" } } } }, step2_files: { title: "Custom plugin files", schema_file: { label: "Upload schema file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: "Only Lua based schemas are supported by Konnect. Other plugin modules can be in any language as desired. Learn more" }, handler_file: { label: "Upload handler file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: "Upload plugin handler to the data plane." }, plugin_modules: { label: "Plugin modules", alert: "Upload all plugin modules to the data plane: schema.lua, handler.lua" } }, step2_clone: { title: "Clone plugin", select_plugin: { label: "Select a plugin", placeholder: "Type to search" } }, step3: { title: "General information", description: "Enter a custom name for this custom plugin", name: { label: "Name", placeholder: "Enter a unique name", help: "The name must be identical to the name of the plugin in the schema file." }, alias_name: { label: "Alias name", placeholder: "Enter a unique name", help: "Format: ^[a-z][a-z0-9-]*[a-z0-9]$. The name must be unique enough to avoid future conflicts with bundled plugins." }, priority: { label: "Priority", tooltip: "Set the execution priority for this cloned plugin", help: { text: "Optional. Use a number to set the absolute execution priority. If priority isn't set, plugins run in alphabetical order. {link} in the docs.", link: "Learn more" } } }, errors: { file_read_error: "Failed to read file content. Please try again.", file_too_large: "File size exceeds the maximum limit of 1 MB.", plugin_not_found: "The selected plugin could not be found. Please refresh the list and try again.", no_supported_types: "No supported custom plugin types are available in this context.", unsupported_plugin_type: "Unsupported plugin type {type}." } }, wn = {
|
|
2279
2292
|
actions: un,
|
|
@@ -2291,10 +2304,10 @@ will extend the wait time by about 12 minutes, continuously adjusting as new req
|
|
|
2291
2304
|
custom_plugin_form: _n
|
|
2292
2305
|
};
|
|
2293
2306
|
function An() {
|
|
2294
|
-
const e =
|
|
2307
|
+
const e = it("en-us", wn);
|
|
2295
2308
|
return {
|
|
2296
2309
|
i18n: e,
|
|
2297
|
-
i18nT:
|
|
2310
|
+
i18nT: ot(e)
|
|
2298
2311
|
// Translation component <i18n-t>
|
|
2299
2312
|
};
|
|
2300
2313
|
}
|
|
@@ -2309,37 +2322,37 @@ const kn = ["data-testid"], Sn = /* @__PURE__ */ N({
|
|
|
2309
2322
|
},
|
|
2310
2323
|
emits: ["update:modelValue"],
|
|
2311
2324
|
setup(e, { emit: r }) {
|
|
2312
|
-
const { i18n: { t } } = An(), a = le(e, ["name", "enabledText", "disabledText"]), { value: s, hide: n, emptyOrDefaultValue: c, ...d } = Q(
|
|
2313
|
-
s.value = h,
|
|
2325
|
+
const { i18n: { t } } = An(), a = le(e, ["name", "enabledText", "disabledText"]), { value: s, hide: n, emptyOrDefaultValue: c, ...d } = Q(V(() => e.name)), f = r, i = (h) => {
|
|
2326
|
+
s.value = h, f("update:modelValue", h);
|
|
2314
2327
|
}, p = ne(d.path, a);
|
|
2315
2328
|
return (h, l) => {
|
|
2316
|
-
const u =
|
|
2317
|
-
return d.error ? (b(),
|
|
2329
|
+
const u = F("KAlert");
|
|
2330
|
+
return d.error ? (b(), L(u, {
|
|
2318
2331
|
key: 0,
|
|
2319
2332
|
appearance: "danger",
|
|
2320
2333
|
message: d.error.message
|
|
2321
|
-
}, null, 8, ["message"])) : Y((b(),
|
|
2334
|
+
}, null, 8, ["message"])) : Y((b(), j("div", {
|
|
2322
2335
|
key: 1,
|
|
2323
2336
|
class: "ff-switch-field",
|
|
2324
2337
|
"data-testid": `ff-${d.path.value}`
|
|
2325
2338
|
}, [
|
|
2326
|
-
|
|
2327
|
-
"model-value": !!(
|
|
2328
|
-
"onUpdate:modelValue":
|
|
2339
|
+
$(o(Vt), W(o(p), {
|
|
2340
|
+
"model-value": !!(o(s) == null ? o(c) : o(s)),
|
|
2341
|
+
"onUpdate:modelValue": i
|
|
2329
2342
|
}), {
|
|
2330
|
-
label:
|
|
2331
|
-
pe(de(
|
|
2343
|
+
label: K(() => [
|
|
2344
|
+
pe(de(o(s) ? e.enabledText || o(t)("actions.enabled") : e.disabledText || o(t)("actions.disabled")), 1)
|
|
2332
2345
|
]),
|
|
2333
2346
|
_: 1
|
|
2334
2347
|
}, 16, ["model-value"])
|
|
2335
2348
|
], 8, kn)), [
|
|
2336
|
-
[X, !
|
|
2349
|
+
[X, !o(n)]
|
|
2337
2350
|
]);
|
|
2338
2351
|
};
|
|
2339
2352
|
}
|
|
2340
2353
|
}), On = /* @__PURE__ */ G(Sn, [["__scopeId", "data-v-0b4c3942"]]);
|
|
2341
2354
|
export {
|
|
2342
|
-
|
|
2355
|
+
Pa as ArrayField,
|
|
2343
2356
|
ya as BooleanField,
|
|
2344
2357
|
Se as EnumField,
|
|
2345
2358
|
Ge as FIELD_PATH_KEY,
|
|
@@ -2349,23 +2362,23 @@ export {
|
|
|
2349
2362
|
ge as Field,
|
|
2350
2363
|
En as FieldRenderer,
|
|
2351
2364
|
tn as ForeignField,
|
|
2352
|
-
|
|
2365
|
+
Vn as Form,
|
|
2353
2366
|
Qa as JsonField,
|
|
2354
2367
|
ln as MapField,
|
|
2355
2368
|
Ha as NumberField,
|
|
2356
|
-
|
|
2369
|
+
Ua as ObjectField,
|
|
2357
2370
|
gt as StringArrayField,
|
|
2358
2371
|
ht as StringField,
|
|
2359
2372
|
On as SwitchField,
|
|
2360
|
-
|
|
2361
|
-
|
|
2373
|
+
Bt as buildAncestor,
|
|
2374
|
+
Le as buildArraySchemaMap,
|
|
2362
2375
|
Me as buildMapSchemaMap,
|
|
2363
|
-
|
|
2376
|
+
qe as buildRecordSchemaMap,
|
|
2364
2377
|
zt as buildSchemaMap,
|
|
2365
2378
|
ft as defaultLabelFormatter,
|
|
2366
2379
|
he as generalizePath,
|
|
2367
2380
|
ta as provideFormShared,
|
|
2368
|
-
|
|
2381
|
+
$n as renderRuleExactMatch,
|
|
2369
2382
|
pt as replaceByDictionary,
|
|
2370
2383
|
mt as replaceByDictionaryInFieldName,
|
|
2371
2384
|
Q as useField,
|
|
@@ -2374,12 +2387,12 @@ export {
|
|
|
2374
2387
|
la as useFieldLabel,
|
|
2375
2388
|
dt as useFieldPath,
|
|
2376
2389
|
na as useFieldRenderer,
|
|
2377
|
-
|
|
2390
|
+
ia as useFormData,
|
|
2378
2391
|
ae as useFormShared,
|
|
2379
|
-
|
|
2392
|
+
oa as useItemKeys,
|
|
2380
2393
|
sa as useLabelPath,
|
|
2381
2394
|
ua as useMapField,
|
|
2382
2395
|
aa as useOptionalFormShared,
|
|
2383
|
-
|
|
2396
|
+
jn as useSchemaExposer,
|
|
2384
2397
|
Ht as useSchemaHelpers
|
|
2385
2398
|
};
|