@kong-ui-public/entities-plugins 9.247.5 → 9.247.6

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