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