@kong-ui-public/entities-plugins 9.251.4 → 9.252.0

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