@kong-ui-public/entities-key-sets 3.7.28-pr.2132.c7fba69a4.0 → 3.7.28

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.
@@ -0,0 +1,673 @@
1
+ import { defineComponent as W, computed as v, ref as C, watch as Ie, onBeforeMount as we, resolveComponent as T, openBlock as K, createElementBlock as Q, createVNode as i, unref as n, createSlots as te, withCtx as l, createBlock as J, Teleport as ae, createElementVNode as z, createCommentVNode as Ee, createTextVNode as F, toDisplayString as $, reactive as ne } from "vue";
2
+ import { BookIcon as oe, AddIcon as $e, KeyIcon as Ke } from "@kong/icons";
3
+ import { useRouter as ie } from "vue-router";
4
+ import { createI18n as _e, i18nTComponent as Me } from "@kong-ui-public/i18n";
5
+ import { useAxios as re, useTableState as De, useFetcher as Re, useDeleteUrlBuilder as Fe, FetcherStatus as Te, EntityBaseTable as Be, EntityFilter as Ve, PermissionsWrapper as U, TableTags as Oe, EntityEmptyState as xe, EntityDeleteModal as Ae, EntityTypes as Ue, useErrors as qe, EntityBaseFormType as se, EntityBaseForm as Ne, SupportedEntityType as le, EntityFormSection as Pe, EntityBaseConfigCard as je } from "@kong-ui-public/entities-shared";
6
+ const Le = {
7
+ title: "Key Sets",
8
+ list: {
9
+ toolbar_actions: {
10
+ new_key_set: "New key set"
11
+ },
12
+ table_headers: {
13
+ name: "Name",
14
+ id: "ID",
15
+ tags: "Tags"
16
+ },
17
+ empty_state: {
18
+ title: "Configure a New Key Set",
19
+ description: "A Key Set object holds a collection of asymmetric key objects. This entity allows to logically group keys by their purpose."
20
+ },
21
+ empty_state_v2: {
22
+ title: "Configure your first key set",
23
+ group: "Key sets created in gateways within this group will automatically appear here.",
24
+ description: "Key sets centrally manage asymmetric keys for plugins like OpenID Connect and JWT, simplifying configuration and security across services.",
25
+ create_cta: "New key set"
26
+ }
27
+ },
28
+ actions: {
29
+ create: "New Key Set",
30
+ copy_id: "Copy ID",
31
+ copy_json: "Copy JSON",
32
+ edit: "Edit",
33
+ delete: "Delete",
34
+ clear: "Clear",
35
+ view: "View Details"
36
+ },
37
+ search: {
38
+ placeholder: "Filter by exact name or ID"
39
+ },
40
+ delete: {
41
+ title: "Delete a Key Set",
42
+ description: "Deleting this key set will also delete keys associated. This action cannot be reversed so make sure to check the key set usage before deleting."
43
+ },
44
+ errors: {
45
+ general: "Key sets could not be retrieved",
46
+ delete: "The key set could not be deleted at this time.",
47
+ copy: "Failed to copy to clipboard"
48
+ },
49
+ copy: {
50
+ success: "Copied {val} to clipboard",
51
+ success_brief: "Successfully copied to clipboard"
52
+ },
53
+ form: {
54
+ sections: {
55
+ general: {
56
+ title: "General Information",
57
+ description: "General information will help identify and manage this key set."
58
+ }
59
+ },
60
+ fields: {
61
+ name: {
62
+ label: "Name",
63
+ placeholder: "Enter a unique name for this key set"
64
+ },
65
+ tags: {
66
+ label: "Tags",
67
+ placeholder: "Enter a list of tags separated by comma",
68
+ help: "e.g. tag1, tag2, tag3",
69
+ tooltip: "An optional set of strings for grouping and filtering, separated by commas."
70
+ }
71
+ }
72
+ }
73
+ }, Je = {
74
+ keySets: Le
75
+ };
76
+ function ze() {
77
+ const e = _e("en-us", Je);
78
+ return {
79
+ i18n: e,
80
+ i18nT: Me(e)
81
+ // Translation component <i18n-t>
82
+ };
83
+ }
84
+ const X = {
85
+ useI18n: ze
86
+ }, H = "/v2/control-planes/{controlPlaneId}/core-entities", G = "/{workspace}", q = {
87
+ list: {
88
+ konnect: `${H}/key-sets`,
89
+ kongManager: `${G}/key-sets`
90
+ },
91
+ form: {
92
+ konnect: {
93
+ create: `${H}/key-sets`,
94
+ edit: `${H}/key-sets/{id}`
95
+ },
96
+ kongManager: {
97
+ create: `${G}/key-sets`,
98
+ edit: `${G}/key-sets/{id}`
99
+ }
100
+ }
101
+ }, He = "#00abd2", Ge = "24px", We = { class: "kong-ui-entities-key-sets-list" }, Qe = { class: "button-row" }, Xe = { class: "empty-state-icon-gateway" }, Ze = /* @__PURE__ */ W({
102
+ __name: "KeySetList",
103
+ props: {
104
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
105
+ config: {
106
+ type: Object,
107
+ required: !0,
108
+ validator: (e) => !(!e || !["konnect", "kongManager"].includes(e == null ? void 0 : e.app) || !e.createRoute || !e.getViewRoute || !e.getEditRoute || e.app === "kongManager" && !e.isExactMatch && !e.filterSchema)
109
+ },
110
+ // used to override the default identifier for the cache entry
111
+ cacheIdentifier: {
112
+ type: String,
113
+ default: ""
114
+ },
115
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can create a new entity */
116
+ canCreate: {
117
+ type: Function,
118
+ required: !1,
119
+ default: async () => !0
120
+ },
121
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can delete a given entity */
122
+ canDelete: {
123
+ type: Function,
124
+ required: !1,
125
+ default: async () => !0
126
+ },
127
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can edit a given entity */
128
+ canEdit: {
129
+ type: Function,
130
+ required: !1,
131
+ default: async () => !0
132
+ },
133
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can retrieve (view details) a given entity */
134
+ canRetrieve: {
135
+ type: Function,
136
+ required: !1,
137
+ default: async () => !0
138
+ },
139
+ /** default to false, setting to true will teleport the toolbar button to the destination in the consuming app */
140
+ useActionOutside: {
141
+ type: Boolean,
142
+ default: !1
143
+ },
144
+ /**
145
+ * Enables the new empty state design, this prop can be removed when
146
+ * the khcp-14756-empty-states-m2 FF is removed.
147
+ */
148
+ enableV2EmptyStates: {
149
+ type: Boolean,
150
+ default: !1
151
+ }
152
+ },
153
+ emits: ["error", "click:learn-more", "copy:success", "copy:error", "delete:success"],
154
+ setup(e, { emit: I }) {
155
+ var Y;
156
+ const m = I, t = e, { i18n: { t: o } } = X.useI18n(), g = ie(), { axiosInstance: h } = re((Y = t.config) == null ? void 0 : Y.axiosRequestConfig), { hasRecords: k, handleStateChange: N } = De(() => b.value), _ = v(() => k.value && t.config.app === "konnect"), c = v(() => !t.enableV2EmptyStates && t.config.app === "konnect"), M = v(() => t.config.app !== "kongManager" || !!t.config.disableSorting), B = {
157
+ // the Name column is non-hidable
158
+ name: { label: o("keySets.list.table_headers.name"), searchable: !0, sortable: !0, hidable: !1 },
159
+ tags: { label: o("keySets.list.table_headers.tags") },
160
+ id: { label: o("keySets.list.table_headers.id"), sortable: !0 }
161
+ }, P = B, V = v(() => {
162
+ var s, p;
163
+ let a = `${t.config.apiBaseUrl}${q.list[t.config.app]}`;
164
+ return t.config.app === "konnect" ? a = a.replace(/{controlPlaneId}/gi, ((s = t.config) == null ? void 0 : s.controlPlaneId) || "") : t.config.app === "kongManager" && (a = a.replace(/\/{workspace}/gi, (p = t.config) != null && p.workspace ? `/${t.config.workspace}` : "")), a;
165
+ }), b = C(""), E = v(() => {
166
+ const a = t.config.app === "konnect" || t.config.isExactMatch;
167
+ if (a)
168
+ return {
169
+ isExactMatch: a,
170
+ placeholder: o("keySets.search.placeholder")
171
+ };
172
+ const s = { name: B.name };
173
+ return {
174
+ isExactMatch: a,
175
+ fields: s,
176
+ schema: t.config.filterSchema
177
+ };
178
+ }), {
179
+ fetcher: j,
180
+ fetcherState: O,
181
+ fetcherCacheKey: r
182
+ } = Re(v(() => ({ ...t.config, cacheIdentifier: t.cacheIdentifier })), V), y = () => {
183
+ b.value = "";
184
+ }, f = () => {
185
+ r.value++;
186
+ }, d = C(null), de = async (a, s) => {
187
+ const p = a.id;
188
+ if (!await s(p)) {
189
+ fe(a, "id");
190
+ return;
191
+ }
192
+ ye(a, "id");
193
+ }, ue = async (a, s) => {
194
+ const p = JSON.stringify(a);
195
+ if (!await s(p)) {
196
+ m("copy:error", {
197
+ entity: a,
198
+ message: o("keySets.errors.copy")
199
+ });
200
+ return;
201
+ }
202
+ m("copy:success", {
203
+ entity: a,
204
+ message: o("keySets.copy.success_brief")
205
+ });
206
+ }, ye = (a, s) => {
207
+ m("copy:success", {
208
+ entity: a,
209
+ field: s,
210
+ message: o("keySets.copy.success", { val: a[s] })
211
+ });
212
+ }, fe = (a, s) => {
213
+ m("copy:error", {
214
+ entity: a,
215
+ field: s,
216
+ message: o("keySets.errors.copy")
217
+ });
218
+ }, pe = async (a) => {
219
+ var p;
220
+ await ((p = t.canRetrieve) == null ? void 0 : p.call(t, a)) && g.push(t.config.getViewRoute(a.id));
221
+ }, me = (a) => ({
222
+ label: o("keySets.actions.view"),
223
+ to: t.config.getViewRoute(a)
224
+ }), ge = (a) => ({
225
+ label: o("keySets.actions.edit"),
226
+ to: t.config.getEditRoute(a)
227
+ }), w = C(void 0), x = C(!1), A = C(!1), Z = C(""), ke = Fe(t.config, V.value), ve = (a) => {
228
+ w.value = a, x.value = !0;
229
+ }, he = () => {
230
+ x.value = !1;
231
+ }, be = async () => {
232
+ var a, s, p;
233
+ if ((a = w.value) != null && a.id) {
234
+ A.value = !0;
235
+ try {
236
+ await h.delete(ke(w.value.id)), A.value = !1, x.value = !1, r.value++, m("delete:success", w.value);
237
+ } catch (S) {
238
+ Z.value = ((p = (s = S.response) == null ? void 0 : s.data) == null ? void 0 : p.message) || S.message || o("keySets.errors.delete"), m("error", S);
239
+ } finally {
240
+ A.value = !1;
241
+ }
242
+ }
243
+ }, Se = () => {
244
+ g.push(t.config.createRoute);
245
+ };
246
+ Ie(O, (a) => {
247
+ var s, p, S;
248
+ if (a.status === Te.Error) {
249
+ d.value = {
250
+ title: o("keySets.errors.general")
251
+ }, (S = (p = (s = a.error) == null ? void 0 : s.response) == null ? void 0 : p.data) != null && S.message && (d.value.message = a.error.response.data.message), m("error", a.error);
252
+ return;
253
+ }
254
+ d.value = null;
255
+ });
256
+ const L = C({
257
+ ctaPath: t.config.createRoute,
258
+ ctaText: void 0,
259
+ message: `${o("keySets.list.empty_state.description")}${t.config.additionMessageForEmptyState ? ` ${t.config.additionMessageForEmptyState}` : ""}`,
260
+ title: o("keySets.title")
261
+ });
262
+ return we(async () => {
263
+ await t.canCreate() && (L.value.title = o("keySets.list.empty_state.title"), L.value.ctaText = o("keySets.actions.create"));
264
+ }), (a, s) => {
265
+ const p = T("KButton"), S = T("KCopy"), D = T("KDropdownItem"), ee = T("KClipboardProvider");
266
+ return K(), Q("div", We, [
267
+ i(n(Be), {
268
+ "cache-identifier": e.cacheIdentifier,
269
+ "disable-sorting": M.value,
270
+ "empty-state-options": L.value,
271
+ "enable-entity-actions": "",
272
+ "error-message": d.value,
273
+ fetcher: n(j),
274
+ "fetcher-cache-key": n(r),
275
+ "pagination-type": "offset",
276
+ "preferences-storage-key": "kong-ui-entities-key-sets-list",
277
+ query: b.value,
278
+ "table-headers": n(P),
279
+ onClearSearchInput: y,
280
+ "onClick:row": s[4] || (s[4] = (u) => pe(u)),
281
+ onSort: f,
282
+ onState: n(N)
283
+ }, te({
284
+ "toolbar-filter": l(() => [
285
+ i(n(Ve), {
286
+ modelValue: b.value,
287
+ "onUpdate:modelValue": s[0] || (s[0] = (u) => b.value = u),
288
+ config: E.value
289
+ }, null, 8, ["modelValue", "config"])
290
+ ]),
291
+ "toolbar-button": l(() => [
292
+ (K(), J(ae, {
293
+ disabled: !e.useActionOutside,
294
+ to: "#kong-ui-app-page-header-action-button"
295
+ }, [
296
+ z("div", Qe, [
297
+ _.value ? (K(), J(p, {
298
+ key: 0,
299
+ appearance: "secondary",
300
+ class: "open-learning-hub",
301
+ "data-testid": "keys-set-learn-more-button",
302
+ icon: "",
303
+ onClick: s[1] || (s[1] = (u) => a.$emit("click:learn-more"))
304
+ }, {
305
+ default: l(() => [
306
+ i(n(oe), { decorative: "" })
307
+ ]),
308
+ _: 1
309
+ })) : Ee("", !0),
310
+ i(n(U), {
311
+ "auth-function": () => e.canCreate()
312
+ }, {
313
+ default: l(() => [
314
+ i(p, {
315
+ appearance: "primary",
316
+ "data-testid": "toolbar-add-key-set",
317
+ size: e.useActionOutside ? "medium" : "large",
318
+ to: e.config.createRoute
319
+ }, {
320
+ default: l(() => [
321
+ i(n($e)),
322
+ F(" " + $(n(o)("keySets.list.toolbar_actions.new_key_set")), 1)
323
+ ]),
324
+ _: 1
325
+ }, 8, ["size", "to"])
326
+ ]),
327
+ _: 1
328
+ }, 8, ["auth-function"])
329
+ ])
330
+ ], 8, ["disabled"]))
331
+ ]),
332
+ name: l(({ rowValue: u }) => [
333
+ z("b", null, $(u ?? "-"), 1)
334
+ ]),
335
+ tags: l(({ rowValue: u }) => [
336
+ i(n(Oe), { tags: u }, null, 8, ["tags"])
337
+ ]),
338
+ id: l(({ rowValue: u }) => [
339
+ i(S, {
340
+ text: u,
341
+ truncate: ""
342
+ }, null, 8, ["text"])
343
+ ]),
344
+ actions: l(({ row: u }) => [
345
+ i(ee, null, {
346
+ default: l(({ copyToClipboard: R }) => [
347
+ i(D, {
348
+ "data-testid": "action-entity-copy-id",
349
+ onClick: (Ce) => de(u, R)
350
+ }, {
351
+ default: l(() => [
352
+ F($(n(o)("keySets.actions.copy_id")), 1)
353
+ ]),
354
+ _: 2
355
+ }, 1032, ["onClick"])
356
+ ]),
357
+ _: 2
358
+ }, 1024),
359
+ i(ee, null, {
360
+ default: l(({ copyToClipboard: R }) => [
361
+ i(D, {
362
+ "data-testid": "action-entity-copy-json",
363
+ onClick: (Ce) => ue(u, R)
364
+ }, {
365
+ default: l(() => [
366
+ F($(n(o)("keySets.actions.copy_json")), 1)
367
+ ]),
368
+ _: 2
369
+ }, 1032, ["onClick"])
370
+ ]),
371
+ _: 2
372
+ }, 1024),
373
+ i(n(U), {
374
+ "auth-function": () => e.canRetrieve(u)
375
+ }, {
376
+ default: l(() => [
377
+ i(D, {
378
+ "data-testid": "action-entity-view",
379
+ "has-divider": "",
380
+ item: me(u.id)
381
+ }, null, 8, ["item"])
382
+ ]),
383
+ _: 2
384
+ }, 1032, ["auth-function"]),
385
+ i(n(U), {
386
+ "auth-function": () => e.canEdit(u)
387
+ }, {
388
+ default: l(() => [
389
+ i(D, {
390
+ "data-testid": "action-entity-edit",
391
+ item: ge(u.id)
392
+ }, null, 8, ["item"])
393
+ ]),
394
+ _: 2
395
+ }, 1032, ["auth-function"]),
396
+ i(n(U), {
397
+ "auth-function": () => e.canDelete(u)
398
+ }, {
399
+ default: l(() => [
400
+ i(D, {
401
+ danger: "",
402
+ "data-testid": "action-entity-delete",
403
+ "has-divider": "",
404
+ onClick: (R) => ve(u)
405
+ }, {
406
+ default: l(() => [
407
+ F($(n(o)("keySets.actions.delete")), 1)
408
+ ]),
409
+ _: 2
410
+ }, 1032, ["onClick"])
411
+ ]),
412
+ _: 2
413
+ }, 1032, ["auth-function"])
414
+ ]),
415
+ _: 2
416
+ }, [
417
+ !n(k) && c.value ? {
418
+ name: "outside-actions",
419
+ fn: l(() => [
420
+ (K(), J(ae, {
421
+ disabled: !e.useActionOutside,
422
+ to: "#kong-ui-app-page-header-action-button"
423
+ }, [
424
+ i(p, {
425
+ appearance: "secondary",
426
+ class: "open-learning-hub",
427
+ "data-testid": "keys-set-learn-more-button",
428
+ icon: "",
429
+ onClick: s[2] || (s[2] = (u) => a.$emit("click:learn-more"))
430
+ }, {
431
+ default: l(() => [
432
+ i(n(oe), { decorative: "" })
433
+ ]),
434
+ _: 1
435
+ })
436
+ ], 8, ["disabled"]))
437
+ ]),
438
+ key: "0"
439
+ } : void 0,
440
+ !b.value && e.enableV2EmptyStates && e.config.app === "konnect" ? {
441
+ name: "empty-state",
442
+ fn: l(() => {
443
+ var u;
444
+ return [
445
+ i(n(xe), {
446
+ "action-button-text": n(o)("keySets.list.empty_state_v2.create_cta"),
447
+ appearance: "secondary",
448
+ "can-create": () => e.canCreate(),
449
+ "data-testid": "key-sets-entity-empty-state",
450
+ description: n(o)("keySets.list.empty_state_v2.description"),
451
+ "learn-more": e.config.app === "konnect",
452
+ title: n(o)("keySets.list.empty_state_v2.title"),
453
+ "onClick:create": Se,
454
+ "onClick:learnMore": s[3] || (s[3] = (R) => a.$emit("click:learn-more"))
455
+ }, te({
456
+ image: l(() => [
457
+ z("div", Xe, [
458
+ i(n(Ke), {
459
+ color: n(He),
460
+ size: n(Ge)
461
+ }, null, 8, ["color", "size"])
462
+ ])
463
+ ]),
464
+ _: 2
465
+ }, [
466
+ (u = e.config) != null && u.isControlPlaneGroup ? {
467
+ name: "message",
468
+ fn: l(() => [
469
+ F($(n(o)("keySets.list.empty_state_v2.group")), 1)
470
+ ]),
471
+ key: "0"
472
+ } : void 0
473
+ ]), 1032, ["action-button-text", "can-create", "description", "learn-more", "title"])
474
+ ];
475
+ }),
476
+ key: "1"
477
+ } : void 0
478
+ ]), 1032, ["cache-identifier", "disable-sorting", "empty-state-options", "error-message", "fetcher", "fetcher-cache-key", "query", "table-headers", "onState"]),
479
+ i(n(Ae), {
480
+ "action-pending": A.value,
481
+ description: n(o)("keySets.delete.description"),
482
+ "entity-name": w.value && (w.value.name || w.value.id),
483
+ "entity-type": n(Ue).KeySet,
484
+ error: Z.value,
485
+ title: n(o)("keySets.delete.title"),
486
+ visible: x.value,
487
+ onCancel: he,
488
+ onProceed: be
489
+ }, null, 8, ["action-pending", "description", "entity-name", "entity-type", "error", "title", "visible"])
490
+ ]);
491
+ };
492
+ }
493
+ }), ce = (e, I) => {
494
+ const m = e.__vccOpts || e;
495
+ for (const [t, o] of I)
496
+ m[t] = o;
497
+ return m;
498
+ }, rt = /* @__PURE__ */ ce(Ze, [["__scopeId", "data-v-33db902d"]]), Ye = { class: "kong-ui-entities-key-sets-form" }, et = /* @__PURE__ */ W({
499
+ __name: "KeySetForm",
500
+ props: {
501
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
502
+ config: {
503
+ type: Object,
504
+ required: !0,
505
+ validator: (e) => !(!e || !["konnect", "kongManager"].includes(e == null ? void 0 : e.app) || e.app === "konnect" && !e.controlPlaneId || e.app === "kongManager" && typeof e.workspace != "string" || !e.cancelRoute)
506
+ },
507
+ /** If a valid Key Set ID is provided, it will put the form in Edit mode instead of Create */
508
+ keySetId: {
509
+ type: String,
510
+ required: !1,
511
+ default: ""
512
+ }
513
+ },
514
+ emits: ["update", "error", "loading"],
515
+ setup(e, { emit: I }) {
516
+ var O;
517
+ const m = I, t = e, o = ie(), { i18n: { t: g } } = X.useI18n(), { getMessageFromError: h } = qe(), { axiosInstance: k } = re((O = t.config) == null ? void 0 : O.axiosRequestConfig), N = v(() => q.form[t.config.app].edit), _ = v(() => t.keySetId ? se.Edit : se.Create), c = ne({
518
+ fields: {
519
+ name: "",
520
+ tags: ""
521
+ },
522
+ isReadonly: !1,
523
+ errorMessage: ""
524
+ }), M = ne({
525
+ name: "",
526
+ tags: ""
527
+ }), B = v(() => JSON.stringify(c.fields) !== JSON.stringify(M) && !!c.fields.name), P = (r) => {
528
+ var y;
529
+ c.fields.name = (r == null ? void 0 : r.name) || "", c.fields.tags = ((y = r == null ? void 0 : r.tags) == null ? void 0 : y.join(", ")) || "", Object.assign(M, c.fields);
530
+ }, V = () => {
531
+ o.push(t.config.cancelRoute);
532
+ }, b = v(() => {
533
+ var y, f;
534
+ let r = `${t.config.apiBaseUrl}${q.form[t.config.app][_.value]}`;
535
+ return t.config.app === "konnect" ? r = r.replace(/{controlPlaneId}/gi, ((y = t.config) == null ? void 0 : y.controlPlaneId) || "") : t.config.app === "kongManager" && (r = r.replace(/\/{workspace}/gi, (f = t.config) != null && f.workspace ? `/${t.config.workspace}` : "")), r = r.replace(/{id}/gi, t.keySetId), r;
536
+ }), E = v(() => {
537
+ var r, y, f;
538
+ return {
539
+ name: c.fields.name,
540
+ tags: ((f = (y = (r = c.fields.tags) == null ? void 0 : r.split(",")) == null ? void 0 : y.map((d) => String(d || "").trim())) == null ? void 0 : f.filter((d) => d !== "")) || ""
541
+ };
542
+ }), j = async () => {
543
+ var r, y;
544
+ try {
545
+ c.isReadonly = !0;
546
+ let f;
547
+ if (_.value === "create" ? f = await k.post(b.value, E.value) : _.value === "edit" && (f = ((r = t.config) == null ? void 0 : r.app) === "konnect" ? await k.put(b.value, E.value) : await k.patch(b.value, E.value)), f) {
548
+ const { data: d } = f;
549
+ c.fields.name = (d == null ? void 0 : d.name) || "", c.fields.tags = ((y = d == null ? void 0 : d.tags) == null ? void 0 : y.join(", ")) || "", Object.assign(M, c.fields), m("update", f == null ? void 0 : f.data);
550
+ }
551
+ } catch (f) {
552
+ c.errorMessage = h(f), m("error", f);
553
+ } finally {
554
+ c.isReadonly = !1;
555
+ }
556
+ };
557
+ return (r, y) => {
558
+ const f = T("KInput");
559
+ return K(), Q("div", Ye, [
560
+ i(n(Ne), {
561
+ "can-submit": B.value,
562
+ config: e.config,
563
+ "edit-id": e.keySetId,
564
+ "entity-type": n(le).KeySet,
565
+ "error-message": c.errorMessage,
566
+ "fetch-url": N.value,
567
+ "form-fields": E.value,
568
+ "is-readonly": c.isReadonly,
569
+ onCancel: V,
570
+ "onFetch:error": y[2] || (y[2] = (d) => r.$emit("error", d)),
571
+ "onFetch:success": P,
572
+ onLoading: y[3] || (y[3] = (d) => r.$emit("loading", d)),
573
+ onSubmit: j
574
+ }, {
575
+ default: l(() => [
576
+ i(n(Pe), {
577
+ description: n(g)("keySets.form.sections.general.description"),
578
+ "has-divider": "",
579
+ title: n(g)("keySets.form.sections.general.title")
580
+ }, {
581
+ default: l(() => [
582
+ i(f, {
583
+ modelValue: c.fields.name,
584
+ "onUpdate:modelValue": y[0] || (y[0] = (d) => c.fields.name = d),
585
+ modelModifiers: { trim: !0 },
586
+ autocomplete: "off",
587
+ "data-testid": "key-set-form-name",
588
+ label: n(g)("keySets.form.fields.name.label"),
589
+ placeholder: n(g)("keySets.form.fields.name.placeholder"),
590
+ readonly: c.isReadonly,
591
+ type: "text"
592
+ }, null, 8, ["modelValue", "label", "placeholder", "readonly"]),
593
+ i(f, {
594
+ modelValue: c.fields.tags,
595
+ "onUpdate:modelValue": y[1] || (y[1] = (d) => c.fields.tags = d),
596
+ modelModifiers: { trim: !0 },
597
+ autocomplete: "off",
598
+ "data-testid": "key-set-form-tags",
599
+ help: n(g)("keySets.form.fields.tags.help"),
600
+ label: n(g)("keySets.form.fields.tags.label"),
601
+ "label-attributes": {
602
+ info: n(g)("keySets.form.fields.tags.tooltip"),
603
+ tooltipAttributes: { maxWidth: "400" }
604
+ },
605
+ placeholder: n(g)("keySets.form.fields.tags.placeholder"),
606
+ readonly: c.isReadonly,
607
+ type: "text"
608
+ }, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])
609
+ ]),
610
+ _: 1
611
+ }, 8, ["description", "title"])
612
+ ]),
613
+ _: 1
614
+ }, 8, ["can-submit", "config", "edit-id", "entity-type", "error-message", "fetch-url", "form-fields", "is-readonly"])
615
+ ]);
616
+ };
617
+ }
618
+ }), lt = /* @__PURE__ */ ce(et, [["__scopeId", "data-v-a4b01cc5"]]), tt = { class: "kong-ui-entities-keys-entity-config-card" }, ct = /* @__PURE__ */ W({
619
+ __name: "KeySetConfigCard",
620
+ props: {
621
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
622
+ config: {
623
+ type: Object,
624
+ required: !0,
625
+ validator: (e) => !(!e || !["konnect", "kongManager"].includes(e == null ? void 0 : e.app) || e.app === "konnect" && !e.controlPlaneId || e.app === "kongManager" && typeof e.workspace != "string" || !e.entityId)
626
+ },
627
+ /**
628
+ * External link for documentation that determines visibility of Documentation button
629
+ */
630
+ configCardDoc: {
631
+ type: String,
632
+ default: "",
633
+ required: !1
634
+ },
635
+ /**
636
+ * Control visibility of card title content
637
+ */
638
+ hideTitle: {
639
+ type: Boolean,
640
+ default: !1
641
+ }
642
+ },
643
+ emits: ["loading", "fetch:error", "fetch:success"],
644
+ setup(e) {
645
+ const I = e, { i18n: { t: m } } = X.useI18n(), t = v(() => q.form[I.config.app].edit), o = C({
646
+ id: {},
647
+ name: {},
648
+ last_updated: {},
649
+ created: {},
650
+ tags: {
651
+ tooltip: m("keySets.form.fields.tags.tooltip")
652
+ }
653
+ });
654
+ return (g, h) => (K(), Q("div", tt, [
655
+ i(n(je), {
656
+ config: e.config,
657
+ "config-card-doc": e.configCardDoc,
658
+ "config-schema": o.value,
659
+ "entity-type": n(le).KeySet,
660
+ "fetch-url": t.value,
661
+ "hide-title": e.hideTitle,
662
+ "onFetch:error": h[0] || (h[0] = (k) => g.$emit("fetch:error", k)),
663
+ "onFetch:success": h[1] || (h[1] = (k) => g.$emit("fetch:success", k)),
664
+ onLoading: h[2] || (h[2] = (k) => g.$emit("loading", k))
665
+ }, null, 8, ["config", "config-card-doc", "config-schema", "entity-type", "fetch-url", "hide-title"])
666
+ ]));
667
+ }
668
+ });
669
+ export {
670
+ ct as KeySetConfigCard,
671
+ lt as KeySetForm,
672
+ rt as KeySetList
673
+ };
@@ -0,0 +1 @@
1
+ (function(g,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@kong/icons"),require("vue-router"),require("@kong-ui-public/i18n"),require("@kong-ui-public/entities-shared")):typeof define=="function"&&define.amd?define(["exports","vue","@kong/icons","vue-router","@kong-ui-public/i18n","@kong-ui-public/entities-shared"],e):(g=typeof globalThis<"u"?globalThis:g||self,e(g["kong-ui-public-entities-key-sets"]={},g.Vue,g.KongIcons,g.VueRouter,g["kong-ui-public-i18n"],g["kong-ui-public-entities-shared"]))})(this,function(g,e,T,j,L,r){"use strict";const G={keySets:{title:"Key Sets",list:{toolbar_actions:{new_key_set:"New key set"},table_headers:{name:"Name",id:"ID",tags:"Tags"},empty_state:{title:"Configure a New Key Set",description:"A Key Set object holds a collection of asymmetric key objects. This entity allows to logically group keys by their purpose."},empty_state_v2:{title:"Configure your first key set",group:"Key sets created in gateways within this group will automatically appear here.",description:"Key sets centrally manage asymmetric keys for plugins like OpenID Connect and JWT, simplifying configuration and security across services.",create_cta:"New key set"}},actions:{create:"New Key Set",copy_id:"Copy ID",copy_json:"Copy JSON",edit:"Edit",delete:"Delete",clear:"Clear",view:"View Details"},search:{placeholder:"Filter by exact name or ID"},delete:{title:"Delete a Key Set",description:"Deleting this key set will also delete keys associated. This action cannot be reversed so make sure to check the key set usage before deleting."},errors:{general:"Key sets could not be retrieved",delete:"The key set could not be deleted at this time.",copy:"Failed to copy to clipboard"},copy:{success:"Copied {val} to clipboard",success_brief:"Successfully copied to clipboard"},form:{sections:{general:{title:"General Information",description:"General information will help identify and manage this key set."}},fields:{name:{label:"Name",placeholder:"Enter a unique name for this key set"},tags:{label:"Tags",placeholder:"Enter a list of tags separated by comma",help:"e.g. tag1, tag2, tag3",tooltip:"An optional set of strings for grouping and filtering, separated by commas."}}}}};function Q(){const t=L.createI18n("en-us",G);return{i18n:t,i18nT:L.i18nTComponent(t)}}const F={useI18n:Q},R="/v2/control-planes/{controlPlaneId}/core-entities",O="/{workspace}",B={list:{konnect:`${R}/key-sets`,kongManager:`${O}/key-sets`},form:{konnect:{create:`${R}/key-sets`,edit:`${R}/key-sets/{id}`},kongManager:{create:`${O}/key-sets`,edit:`${O}/key-sets/{id}`}}},X="#00abd2",Z="24px",Y={class:"kong-ui-entities-key-sets-list"},v={class:"button-row"},ee={class:"empty-state-icon-gateway"},te=e.defineComponent({__name:"KeySetList",props:{config:{type:Object,required:!0,validator:t=>!(!t||!["konnect","kongManager"].includes(t==null?void 0:t.app)||!t.createRoute||!t.getViewRoute||!t.getEditRoute||t.app==="kongManager"&&!t.isExactMatch&&!t.filterSchema)},cacheIdentifier:{type:String,default:""},canCreate:{type:Function,required:!1,default:async()=>!0},canDelete:{type:Function,required:!1,default:async()=>!0},canEdit:{type:Function,required:!1,default:async()=>!0},canRetrieve:{type:Function,required:!1,default:async()=>!0},useActionOutside:{type:Boolean,default:!1},enableV2EmptyStates:{type:Boolean,default:!1}},emits:["error","click:learn-more","copy:success","copy:error","delete:success"],setup(t,{emit:S}){var z;const u=S,n=t,{i18n:{t:a}}=F.useI18n(),m=j.useRouter(),{axiosInstance:h}=r.useAxios((z=n.config)==null?void 0:z.axiosRequestConfig),{hasRecords:k,handleStateChange:q}=r.useTableState(()=>b.value),I=e.computed(()=>k.value&&n.config.app==="konnect"),l=e.computed(()=>!n.enableV2EmptyStates&&n.config.app==="konnect"),N=e.computed(()=>n.config.app!=="kongManager"||!!n.config.disableSorting),K={name:{label:a("keySets.list.table_headers.name"),searchable:!0,sortable:!0,hidable:!1},tags:{label:a("keySets.list.table_headers.tags")},id:{label:a("keySets.list.table_headers.id"),sortable:!0}},P=K,$=e.computed(()=>{var s,y;let o=`${n.config.apiBaseUrl}${B.list[n.config.app]}`;return n.config.app==="konnect"?o=o.replace(/{controlPlaneId}/gi,((s=n.config)==null?void 0:s.controlPlaneId)||""):n.config.app==="kongManager"&&(o=o.replace(/\/{workspace}/gi,(y=n.config)!=null&&y.workspace?`/${n.config.workspace}`:"")),o}),b=e.ref(""),V=e.computed(()=>{const o=n.config.app==="konnect"||n.config.isExactMatch;if(o)return{isExactMatch:o,placeholder:a("keySets.search.placeholder")};const s={name:K.name};return{isExactMatch:o,fields:s,schema:n.config.filterSchema}}),{fetcher:A,fetcherState:_,fetcherCacheKey:i}=r.useFetcher(e.computed(()=>({...n.config,cacheIdentifier:n.cacheIdentifier})),$),f=()=>{b.value=""},p=()=>{i.value++},c=e.ref(null),re=async(o,s)=>{const y=o.id;if(!await s(y)){de(o,"id");return}ce(o,"id")},le=async(o,s)=>{const y=JSON.stringify(o);if(!await s(y)){u("copy:error",{entity:o,message:a("keySets.errors.copy")});return}u("copy:success",{entity:o,message:a("keySets.copy.success_brief")})},ce=(o,s)=>{u("copy:success",{entity:o,field:s,message:a("keySets.copy.success",{val:o[s]})})},de=(o,s)=>{u("copy:error",{entity:o,field:s,message:a("keySets.errors.copy")})},fe=async o=>{var y;await((y=n.canRetrieve)==null?void 0:y.call(n,o))&&m.push(n.config.getViewRoute(o.id))},pe=o=>({label:a("keySets.actions.view"),to:n.config.getViewRoute(o)}),ye=o=>({label:a("keySets.actions.edit"),to:n.config.getEditRoute(o)}),w=e.ref(void 0),D=e.ref(!1),M=e.ref(!1),W=e.ref(""),ue=r.useDeleteUrlBuilder(n.config,$.value),me=o=>{w.value=o,D.value=!0},ge=()=>{D.value=!1},ke=async()=>{var o,s,y;if((o=w.value)!=null&&o.id){M.value=!0;try{await h.delete(ue(w.value.id)),M.value=!1,D.value=!1,i.value++,u("delete:success",w.value)}catch(C){W.value=((y=(s=C.response)==null?void 0:s.data)==null?void 0:y.message)||C.message||a("keySets.errors.delete"),u("error",C)}finally{M.value=!1}}},he=()=>{m.push(n.config.createRoute)};e.watch(_,o=>{var s,y,C;if(o.status===r.FetcherStatus.Error){c.value={title:a("keySets.errors.general")},(C=(y=(s=o.error)==null?void 0:s.response)==null?void 0:y.data)!=null&&C.message&&(c.value.message=o.error.response.data.message),u("error",o.error);return}c.value=null});const U=e.ref({ctaPath:n.config.createRoute,ctaText:void 0,message:`${a("keySets.list.empty_state.description")}${n.config.additionMessageForEmptyState?` ${n.config.additionMessageForEmptyState}`:""}`,title:a("keySets.title")});return e.onBeforeMount(async()=>{await n.canCreate()&&(U.value.title=a("keySets.list.empty_state.title"),U.value.ctaText=a("keySets.actions.create"))}),(o,s)=>{const y=e.resolveComponent("KButton"),C=e.resolveComponent("KCopy"),x=e.resolveComponent("KDropdownItem"),H=e.resolveComponent("KClipboardProvider");return e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(e.unref(r.EntityBaseTable),{"cache-identifier":t.cacheIdentifier,"disable-sorting":N.value,"empty-state-options":U.value,"enable-entity-actions":"","error-message":c.value,fetcher:e.unref(A),"fetcher-cache-key":e.unref(i),"pagination-type":"offset","preferences-storage-key":"kong-ui-entities-key-sets-list",query:b.value,"table-headers":e.unref(P),onClearSearchInput:f,"onClick:row":s[4]||(s[4]=d=>fe(d)),onSort:p,onState:e.unref(q)},e.createSlots({"toolbar-filter":e.withCtx(()=>[e.createVNode(e.unref(r.EntityFilter),{modelValue:b.value,"onUpdate:modelValue":s[0]||(s[0]=d=>b.value=d),config:V.value},null,8,["modelValue","config"])]),"toolbar-button":e.withCtx(()=>[(e.openBlock(),e.createBlock(e.Teleport,{disabled:!t.useActionOutside,to:"#kong-ui-app-page-header-action-button"},[e.createElementVNode("div",v,[I.value?(e.openBlock(),e.createBlock(y,{key:0,appearance:"secondary",class:"open-learning-hub","data-testid":"keys-set-learn-more-button",icon:"",onClick:s[1]||(s[1]=d=>o.$emit("click:learn-more"))},{default:e.withCtx(()=>[e.createVNode(e.unref(T.BookIcon),{decorative:""})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(r.PermissionsWrapper),{"auth-function":()=>t.canCreate()},{default:e.withCtx(()=>[e.createVNode(y,{appearance:"primary","data-testid":"toolbar-add-key-set",size:t.useActionOutside?"medium":"large",to:t.config.createRoute},{default:e.withCtx(()=>[e.createVNode(e.unref(T.AddIcon)),e.createTextVNode(" "+e.toDisplayString(e.unref(a)("keySets.list.toolbar_actions.new_key_set")),1)]),_:1},8,["size","to"])]),_:1},8,["auth-function"])])],8,["disabled"]))]),name:e.withCtx(({rowValue:d})=>[e.createElementVNode("b",null,e.toDisplayString(d??"-"),1)]),tags:e.withCtx(({rowValue:d})=>[e.createVNode(e.unref(r.TableTags),{tags:d},null,8,["tags"])]),id:e.withCtx(({rowValue:d})=>[e.createVNode(C,{text:d,truncate:""},null,8,["text"])]),actions:e.withCtx(({row:d})=>[e.createVNode(H,null,{default:e.withCtx(({copyToClipboard:E})=>[e.createVNode(x,{"data-testid":"action-entity-copy-id",onClick:be=>re(d,E)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a)("keySets.actions.copy_id")),1)]),_:2},1032,["onClick"])]),_:2},1024),e.createVNode(H,null,{default:e.withCtx(({copyToClipboard:E})=>[e.createVNode(x,{"data-testid":"action-entity-copy-json",onClick:be=>le(d,E)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a)("keySets.actions.copy_json")),1)]),_:2},1032,["onClick"])]),_:2},1024),e.createVNode(e.unref(r.PermissionsWrapper),{"auth-function":()=>t.canRetrieve(d)},{default:e.withCtx(()=>[e.createVNode(x,{"data-testid":"action-entity-view","has-divider":"",item:pe(d.id)},null,8,["item"])]),_:2},1032,["auth-function"]),e.createVNode(e.unref(r.PermissionsWrapper),{"auth-function":()=>t.canEdit(d)},{default:e.withCtx(()=>[e.createVNode(x,{"data-testid":"action-entity-edit",item:ye(d.id)},null,8,["item"])]),_:2},1032,["auth-function"]),e.createVNode(e.unref(r.PermissionsWrapper),{"auth-function":()=>t.canDelete(d)},{default:e.withCtx(()=>[e.createVNode(x,{danger:"","data-testid":"action-entity-delete","has-divider":"",onClick:E=>me(d)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a)("keySets.actions.delete")),1)]),_:2},1032,["onClick"])]),_:2},1032,["auth-function"])]),_:2},[!e.unref(k)&&l.value?{name:"outside-actions",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.Teleport,{disabled:!t.useActionOutside,to:"#kong-ui-app-page-header-action-button"},[e.createVNode(y,{appearance:"secondary",class:"open-learning-hub","data-testid":"keys-set-learn-more-button",icon:"",onClick:s[2]||(s[2]=d=>o.$emit("click:learn-more"))},{default:e.withCtx(()=>[e.createVNode(e.unref(T.BookIcon),{decorative:""})]),_:1})],8,["disabled"]))]),key:"0"}:void 0,!b.value&&t.enableV2EmptyStates&&t.config.app==="konnect"?{name:"empty-state",fn:e.withCtx(()=>{var d;return[e.createVNode(e.unref(r.EntityEmptyState),{"action-button-text":e.unref(a)("keySets.list.empty_state_v2.create_cta"),appearance:"secondary","can-create":()=>t.canCreate(),"data-testid":"key-sets-entity-empty-state",description:e.unref(a)("keySets.list.empty_state_v2.description"),"learn-more":t.config.app==="konnect",title:e.unref(a)("keySets.list.empty_state_v2.title"),"onClick:create":he,"onClick:learnMore":s[3]||(s[3]=E=>o.$emit("click:learn-more"))},e.createSlots({image:e.withCtx(()=>[e.createElementVNode("div",ee,[e.createVNode(e.unref(T.KeyIcon),{color:e.unref(X),size:e.unref(Z)},null,8,["color","size"])])]),_:2},[(d=t.config)!=null&&d.isControlPlaneGroup?{name:"message",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(a)("keySets.list.empty_state_v2.group")),1)]),key:"0"}:void 0]),1032,["action-button-text","can-create","description","learn-more","title"])]}),key:"1"}:void 0]),1032,["cache-identifier","disable-sorting","empty-state-options","error-message","fetcher","fetcher-cache-key","query","table-headers","onState"]),e.createVNode(e.unref(r.EntityDeleteModal),{"action-pending":M.value,description:e.unref(a)("keySets.delete.description"),"entity-name":w.value&&(w.value.name||w.value.id),"entity-type":e.unref(r.EntityTypes).KeySet,error:W.value,title:e.unref(a)("keySets.delete.title"),visible:D.value,onCancel:ge,onProceed:ke},null,8,["action-pending","description","entity-name","entity-type","error","title","visible"])])}}}),J=(t,S)=>{const u=t.__vccOpts||t;for(const[n,a]of S)u[n]=a;return u},ne=J(te,[["__scopeId","data-v-33db902d"]]),oe={class:"kong-ui-entities-key-sets-form"},ae=J(e.defineComponent({__name:"KeySetForm",props:{config:{type:Object,required:!0,validator:t=>!(!t||!["konnect","kongManager"].includes(t==null?void 0:t.app)||t.app==="konnect"&&!t.controlPlaneId||t.app==="kongManager"&&typeof t.workspace!="string"||!t.cancelRoute)},keySetId:{type:String,required:!1,default:""}},emits:["update","error","loading"],setup(t,{emit:S}){var _;const u=S,n=t,a=j.useRouter(),{i18n:{t:m}}=F.useI18n(),{getMessageFromError:h}=r.useErrors(),{axiosInstance:k}=r.useAxios((_=n.config)==null?void 0:_.axiosRequestConfig),q=e.computed(()=>B.form[n.config.app].edit),I=e.computed(()=>n.keySetId?r.EntityBaseFormType.Edit:r.EntityBaseFormType.Create),l=e.reactive({fields:{name:"",tags:""},isReadonly:!1,errorMessage:""}),N=e.reactive({name:"",tags:""}),K=e.computed(()=>JSON.stringify(l.fields)!==JSON.stringify(N)&&!!l.fields.name),P=i=>{var f;l.fields.name=(i==null?void 0:i.name)||"",l.fields.tags=((f=i==null?void 0:i.tags)==null?void 0:f.join(", "))||"",Object.assign(N,l.fields)},$=()=>{a.push(n.config.cancelRoute)},b=e.computed(()=>{var f,p;let i=`${n.config.apiBaseUrl}${B.form[n.config.app][I.value]}`;return n.config.app==="konnect"?i=i.replace(/{controlPlaneId}/gi,((f=n.config)==null?void 0:f.controlPlaneId)||""):n.config.app==="kongManager"&&(i=i.replace(/\/{workspace}/gi,(p=n.config)!=null&&p.workspace?`/${n.config.workspace}`:"")),i=i.replace(/{id}/gi,n.keySetId),i}),V=e.computed(()=>{var i,f,p;return{name:l.fields.name,tags:((p=(f=(i=l.fields.tags)==null?void 0:i.split(","))==null?void 0:f.map(c=>String(c||"").trim()))==null?void 0:p.filter(c=>c!==""))||""}}),A=async()=>{var i,f;try{l.isReadonly=!0;let p;if(I.value==="create"?p=await k.post(b.value,V.value):I.value==="edit"&&(p=((i=n.config)==null?void 0:i.app)==="konnect"?await k.put(b.value,V.value):await k.patch(b.value,V.value)),p){const{data:c}=p;l.fields.name=(c==null?void 0:c.name)||"",l.fields.tags=((f=c==null?void 0:c.tags)==null?void 0:f.join(", "))||"",Object.assign(N,l.fields),u("update",p==null?void 0:p.data)}}catch(p){l.errorMessage=h(p),u("error",p)}finally{l.isReadonly=!1}};return(i,f)=>{const p=e.resolveComponent("KInput");return e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(e.unref(r.EntityBaseForm),{"can-submit":K.value,config:t.config,"edit-id":t.keySetId,"entity-type":e.unref(r.SupportedEntityType).KeySet,"error-message":l.errorMessage,"fetch-url":q.value,"form-fields":V.value,"is-readonly":l.isReadonly,onCancel:$,"onFetch:error":f[2]||(f[2]=c=>i.$emit("error",c)),"onFetch:success":P,onLoading:f[3]||(f[3]=c=>i.$emit("loading",c)),onSubmit:A},{default:e.withCtx(()=>[e.createVNode(e.unref(r.EntityFormSection),{description:e.unref(m)("keySets.form.sections.general.description"),"has-divider":"",title:e.unref(m)("keySets.form.sections.general.title")},{default:e.withCtx(()=>[e.createVNode(p,{modelValue:l.fields.name,"onUpdate:modelValue":f[0]||(f[0]=c=>l.fields.name=c),modelModifiers:{trim:!0},autocomplete:"off","data-testid":"key-set-form-name",label:e.unref(m)("keySets.form.fields.name.label"),placeholder:e.unref(m)("keySets.form.fields.name.placeholder"),readonly:l.isReadonly,type:"text"},null,8,["modelValue","label","placeholder","readonly"]),e.createVNode(p,{modelValue:l.fields.tags,"onUpdate:modelValue":f[1]||(f[1]=c=>l.fields.tags=c),modelModifiers:{trim:!0},autocomplete:"off","data-testid":"key-set-form-tags",help:e.unref(m)("keySets.form.fields.tags.help"),label:e.unref(m)("keySets.form.fields.tags.label"),"label-attributes":{info:e.unref(m)("keySets.form.fields.tags.tooltip"),tooltipAttributes:{maxWidth:"400"}},placeholder:e.unref(m)("keySets.form.fields.tags.placeholder"),readonly:l.isReadonly,type:"text"},null,8,["modelValue","help","label","label-attributes","placeholder","readonly"])]),_:1},8,["description","title"])]),_:1},8,["can-submit","config","edit-id","entity-type","error-message","fetch-url","form-fields","is-readonly"])])}}}),[["__scopeId","data-v-a4b01cc5"]]),se={class:"kong-ui-entities-keys-entity-config-card"},ie=e.defineComponent({__name:"KeySetConfigCard",props:{config:{type:Object,required:!0,validator:t=>!(!t||!["konnect","kongManager"].includes(t==null?void 0:t.app)||t.app==="konnect"&&!t.controlPlaneId||t.app==="kongManager"&&typeof t.workspace!="string"||!t.entityId)},configCardDoc:{type:String,default:"",required:!1},hideTitle:{type:Boolean,default:!1}},emits:["loading","fetch:error","fetch:success"],setup(t){const S=t,{i18n:{t:u}}=F.useI18n(),n=e.computed(()=>B.form[S.config.app].edit),a=e.ref({id:{},name:{},last_updated:{},created:{},tags:{tooltip:u("keySets.form.fields.tags.tooltip")}});return(m,h)=>(e.openBlock(),e.createElementBlock("div",se,[e.createVNode(e.unref(r.EntityBaseConfigCard),{config:t.config,"config-card-doc":t.configCardDoc,"config-schema":a.value,"entity-type":e.unref(r.SupportedEntityType).KeySet,"fetch-url":n.value,"hide-title":t.hideTitle,"onFetch:error":h[0]||(h[0]=k=>m.$emit("fetch:error",k)),"onFetch:success":h[1]||(h[1]=k=>m.$emit("fetch:success",k)),onLoading:h[2]||(h[2]=k=>m.$emit("loading",k))},null,8,["config","config-card-doc","config-schema","entity-type","fetch-url","hide-title"])]))}});g.KeySetConfigCard=ie,g.KeySetForm=ae,g.KeySetList=ne,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .config-card-fieldset[data-v-f7096c33]{border:solid 1px #e0e4ea;border-radius:4px;margin-bottom:8px;margin-top:4px}.config-card-fieldset-title[data-v-f7096c33]{font-size:14px;padding:0 8px;width:auto}fieldset.config-card-fieldset .config-card-details-row{width:unset}.config-card-json-item .config-card-details-row,fieldset.config-card-fieldset .config-card-details-row{margin:0 16px}.config-card-json-item .config-card-details-row:last-of-type,fieldset.config-card-fieldset .config-card-details-row:last-of-type{border-bottom:none}[data-v-2feb8c2e] .k-button.navigation-button{font-size:14px;font-weight:400}.config-card-details-row[data-v-5f9aa0e8]{align-items:center;border-bottom:var(--2f90d7f7);box-sizing:border-box;display:var(--668a792a);padding:16px 16px 16px 0;width:100%}.config-card-details-row .config-card-details-label[data-v-5f9aa0e8]{box-sizing:border-box;padding-right:16px;width:var(--5bc9ad14)}.config-card-details-row .config-card-details-label label[data-v-5f9aa0e8]{color:#3a3f51;display:inline-flex;max-width:100%}.config-card-details-row .config-card-details-label label .label-content[data-v-5f9aa0e8]{line-height:initial;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.config-card-details-row .config-card-details-label label .k-popover[data-v-5f9aa0e8]{min-width:0}.config-card-details-row .config-card-details-value[data-v-5f9aa0e8]{box-sizing:border-box;width:var(--5bc5215e)}.config-card-details-row .config-card-details-value .truncated[data-v-5f9aa0e8]{display:inline-block;line-height:initial;max-width:20ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.config-card-details-row .config-card-details-value span.attrs-data-text[data-v-5f9aa0e8]{overflow-wrap:anywhere}.config-card-details-row .config-card-details-value .copy-uuid-array[data-v-5f9aa0e8] .k-copy:not(:last-of-type){margin-bottom:8px}.config-card-details-row .config-card-details-value .method-badge-array[data-v-5f9aa0e8]{display:flex;flex-wrap:wrap;row-gap:10px}.config-card-details-row .config-badge[data-v-5f9aa0e8]{margin-right:4px}.config-card-details-row[data-v-5f9aa0e8] .k-label{margin-bottom:0}.config-card-details-row[data-v-5f9aa0e8] .k-label .kong-icon-infoFilled{display:flex}.config-card-details-row[data-v-5f9aa0e8] .config-card-details-row{width:auto}.json-content.k-code-block{border-top-left-radius:0;border-top-right-radius:0}.json-endpoint{align-items:baseline;background-color:#000933;border-bottom:1px solid rgba(255,255,255,.2);border-top-left-radius:8px;border-top-right-radius:8px;display:flex;padding:8px 0 8px 12px}.json-endpoint .k-code-block{flex:auto;z-index:2}.json-endpoint .k-code-block .code-block-content{padding-bottom:0;padding-top:0}.json-endpoint .k-code-block .code-block-secondary-actions{margin-top:0!important}.json-endpoint code{direction:rtl;max-width:var(--54aebfa2);overflow:hidden!important;text-align:left;text-overflow:ellipsis;white-space:nowrap}.config-card-prop-section-title[data-v-d67757a9]{color:#000933;font-size:16px;font-weight:600;margin-bottom:16px;margin-top:48px}.kong-ui-entity-base-config-card .config-card-actions[data-v-dd0edd92]{align-items:center;display:flex}.kong-ui-entity-base-config-card .config-card-actions .config-format-select-label[data-v-dd0edd92]{margin-bottom:0;margin-right:8px}.kong-ui-entity-base-config-card .config-card-prop-section-title[data-v-dd0edd92]{color:#000933;font-size:16px;font-weight:600;margin-bottom:16px;margin-top:48px}.kong-ui-entity-base-config-card[data-v-dd0edd92] .config-card-details-row:last-of-type{border-bottom:none}.kong-ui-entity-base-config-card .book-icon[data-v-dd0edd92]{margin-left:8px;padding:0}.kong-ui-entity-base-form[data-v-b073d014]{box-sizing:border-box;max-width:1536px;width:100%}.kong-ui-entity-base-form[data-v-b073d014] .k-slideout-title{color:#000933!important;font-size:24px!important;font-weight:700!important;line-height:32px!important;margin-bottom:16px!important}.kong-ui-entity-base-form[data-v-b073d014] .k-card.content-card{padding:0 16px!important}.kong-ui-entity-base-form[data-v-b073d014] .tab-item>div.tab-link.has-panels{color:#6c7489!important;font-size:14px!important;font-weight:700!important;line-height:24px!important}.kong-ui-entity-base-form[data-v-b073d014] .tab-item.active>div.tab-link.has-panels{color:#000933!important;font-weight:600!important}.form-actions[data-v-b073d014]{align-items:center;display:flex;justify-content:flex-end;margin-top:24px}.form-actions[data-v-b073d014] .k-button:last-of-type,.form-actions[data-v-b073d014] .k-button:nth-last-of-type(2){margin-left:16px}.content-wrapper[data-v-a3a65cac] .k-tooltip{word-break:break-all}.kong-ui-entity-base-table .toolbar-container[data-v-254b0222]{align-items:center;display:flex;width:100%}.kong-ui-entity-base-table .toolbar-button-container[data-v-254b0222]{margin-left:auto}.kong-ui-entity-base-table .hidden[data-v-254b0222]{display:none}.kong-ui-entity-base-table[data-v-254b0222] .empty-state-icon-gateway{background-color:#ecfcff;border-radius:4px;padding:8px}.kong-ui-entity-base-table :deep(.k-table){table-layout:fixed}.kong-ui-entity-delete-modal .message[data-v-4361d622],.kong-ui-entity-delete-modal .description[data-v-4361d622]{line-height:24px;margin:0}.kong-ui-entity-delete-modal .message strong[data-v-4361d622]{font-weight:600}.kong-ui-entity-delete-modal .description[data-v-4361d622]{margin-top:32px}.kong-ui-entity-delete-error[data-v-4361d622]{margin-bottom:16px}.kong-ui-entity-filter-input[data-v-d1bb74d1]{width:100%}.kong-ui-entity-filter-clear[data-v-d1bb74d1]{cursor:pointer}.kong-ui-entity-filter[data-v-d1bb74d1]{display:flex;position:relative}.kong-ui-entity-filter[data-v-d1bb74d1] .menu-content{flex-direction:column}.kong-ui-entity-filter[data-v-d1bb74d1] .k-menu-item-divider hr{margin:12px 0}.kong-ui-entity-filter-backdrop[data-v-d1bb74d1]{bottom:0;left:0;position:fixed;right:0;top:0;z-index:1050}.kong-ui-entity-filter-menu[data-v-d1bb74d1]{background-color:#fff;border:1px solid #afb7c5;border-radius:4px;box-shadow:0 4px 20px #e0e4ea;left:0;margin-top:16px;padding:8px 0 12px;position:absolute;top:100%;width:300px;z-index:1060}.kong-ui-entity-filter-menu-item[data-v-d1bb74d1]{border-bottom:1px solid #e0e4ea;color:#6c7489;font-size:12px;font-weight:400;line-height:16px;list-style:none;margin:0 20px;padding:16px 0;position:relative;white-space:nowrap}.menu-item-title[data-v-d1bb74d1]{align-items:center;cursor:pointer;display:flex;line-height:24px}.menu-item-title.expanded[data-v-d1bb74d1]{color:#232633}.menu-item-expand-icon[data-v-d1bb74d1]{margin-left:auto}.menu-item-expand-icon.expanded[data-v-d1bb74d1]{transform:rotate(180deg)}.menu-item-indicator[data-v-d1bb74d1]{background-color:#0044f4;border-radius:50%;height:4px;margin-left:4px;width:4px}.menu-item-body[data-v-d1bb74d1]{align-items:center;display:flex;justify-content:space-between;margin-top:16px}.menu-item-body[data-v-d1bb74d1] .input{padding-bottom:4px!important;padding-top:4px!important}.menu-item-body[data-v-d1bb74d1] .k-input{width:100%}.menu-item-body[data-v-d1bb74d1] .k-select-input .input{font-size:12px}.menu-item-body[data-v-d1bb74d1] .k-select-input .input::placeholder{color:#00000073!important;font-size:12px}.menu-item-label[data-v-d1bb74d1]{margin-bottom:0;margin-right:12px}.menu-item-buttons[data-v-d1bb74d1]{display:flex;justify-content:space-between;margin:10px 0 6px}.filter-clear-button-container[data-v-d1bb74d1]{padding:12px 20px 0}fieldset[data-v-b1f74200]{margin:0;min-width:0;padding:0}.kong-ui-entity-form-section[data-v-b1f74200]{border:0}.kong-ui-entity-form-section .form-section-wrapper[data-v-b1f74200]{column-gap:16px;display:flex;flex-direction:column;padding-bottom:64px;row-gap:12px;width:100%}@media (min-width: 1024px){.kong-ui-entity-form-section .form-section-wrapper[data-v-b1f74200]{flex-direction:row}}.kong-ui-entity-form-section .form-section-wrapper .form-section-info[data-v-b1f74200]{flex:1}@media (min-width: 1024px){.kong-ui-entity-form-section .form-section-wrapper .form-section-info[data-v-b1f74200]{max-width:350px}.kong-ui-entity-form-section .form-section-wrapper .form-section-info.sticky[data-v-b1f74200]{height:fit-content;margin-bottom:16px;position:sticky;top:16px}}.kong-ui-entity-form-section .form-section-wrapper .form-section-info .form-section-title[data-v-b1f74200]{color:#000933;font-size:16px;font-weight:700;line-height:20px;margin-bottom:8px;margin-top:0}.kong-ui-entity-form-section .form-section-wrapper .form-section-info .form-section-description[data-v-b1f74200],.kong-ui-entity-form-section .form-section-wrapper .form-section-info .form-section-description p[data-v-b1f74200],.kong-ui-entity-form-section .form-section-wrapper .form-section-info .form-section-description[data-v-b1f74200] p{color:#000933;font-size:14px;font-weight:400;line-height:20px;margin:0}.kong-ui-entity-form-section .form-section-wrapper .form-section-info .form-section-footer[data-v-b1f74200]{margin-top:32px}.kong-ui-entity-form-section .form-section-wrapper .form-section-content[data-v-b1f74200]{flex:1}.kong-ui-entity-form-section .form-section-wrapper .form-section-content[data-v-b1f74200]>*:not(:first-child){margin-top:24px}.kong-ui-entity-form-section.has-divider .form-section-wrapper[data-v-b1f74200]{border-bottom:1px solid #e0e4ea}.kong-ui-public-entity-link[data-v-96efdfa5]{align-items:center;display:flex}.kong-ui-public-entity-link .deleted-entity[data-v-96efdfa5]{font-style:italic}.kong-ui-public-entity-link .entity-link[data-v-96efdfa5]{display:flex;flex:1}.kong-ui-public-entity-link .entity-link[data-v-96efdfa5] .external-link-icon{color:#0044f4;margin-left:4px;padding:2px}.kong-ui-public-entity-link .entity-link-label[data-v-96efdfa5]{display:inline-block;font-weight:400;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kong-ui-public-entity-link .copy-uuid-tooltip[data-v-96efdfa5]{align-items:center;cursor:pointer;display:flex}.kong-ui-public-entity-link .copy-uuid-tooltip .entity-link-copy-id[data-v-96efdfa5]{margin-left:2px}.kong-ui-public-entity-empty-state[data-v-b6376b66]{align-items:center;background-color:#fff;box-sizing:border-box;display:flex;flex-direction:column;font-family:Inter,Roboto,Helvetica,sans-serif;gap:24px;padding:64px 0;width:100%}@media (min-width: 640px){.kong-ui-public-entity-empty-state[data-v-b6376b66]{padding:64px 96px}}.kong-ui-public-entity-empty-state .empty-state-image[data-v-b6376b66]{margin-bottom:8px}.kong-ui-public-entity-empty-state .entity-empty-state-content[data-v-b6376b66]{align-items:center;display:flex;flex-direction:column;gap:8px;text-align:center;width:100%}.kong-ui-public-entity-empty-state .entity-empty-state-content .entity-empty-state-title h1[data-v-b6376b66]{align-items:center;color:#000933;display:flex;font-size:24px;font-weight:700;gap:8px;line-height:32px;margin:0}.kong-ui-public-entity-empty-state .entity-empty-state-content .entity-empty-state-title h1.secondary[data-v-b6376b66]{font-size:18px}.kong-ui-public-entity-empty-state .entity-empty-state-description[data-v-b6376b66],.kong-ui-public-entity-empty-state .entity-empty-state-pricing[data-v-b6376b66]{color:#52596e;font-size:14px;font-weight:400;line-height:20px;max-width:640px}.kong-ui-public-entity-empty-state .entity-empty-state-description p[data-v-b6376b66],.kong-ui-public-entity-empty-state .entity-empty-state-pricing p[data-v-b6376b66]{margin:0}.kong-ui-public-entity-empty-state .entity-empty-state-pricing[data-v-b6376b66]{margin-top:16px}.kong-ui-public-entity-empty-state .entity-empty-state-message[data-v-b6376b66]{color:#52596e}.kong-ui-public-entity-empty-state .entity-empty-state-action[data-v-b6376b66]{align-items:center;display:flex;gap:12px}.kong-ui-public-entity-empty-state .entity-empty-state-card-container[data-v-b6376b66]{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-around;margin-top:8px;width:312px}@media (min-width: 640px){.kong-ui-public-entity-empty-state .entity-empty-state-card-container[data-v-b6376b66]{width:640px}}.kong-ui-public-entity-empty-state .entity-empty-state-card-container .entity-empty-state-card[data-v-b6376b66]{background-color:#f9fafb;border:1px solid #e0e4ea;border-radius:6px;color:#afb7c5;gap:8px;height:160px;padding:20px;width:312px}.kong-ui-public-entity-empty-state .entity-empty-state-card-container .entity-empty-state-card .feature-icon[data-v-b6376b66]{color:#3a3f51;display:flex;margin-bottom:12px}.kong-ui-public-entity-empty-state .entity-empty-state-card-container .entity-empty-state-card .feature-icon[data-v-b6376b66] .kui-icon{height:20px!important;width:20px!important}.kong-ui-public-entity-empty-state .entity-empty-state-card-container .entity-empty-state-card[data-v-b6376b66] .card-title{font-size:14px;font-weight:600}.kong-ui-public-entity-empty-state .entity-empty-state-card-container .entity-empty-state-card[data-v-b6376b66] .card-content{-webkit-box-orient:vertical;color:#6c7489;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;overflow:hidden}.kong-ui-public-entity-empty-state .entity-empty-state-bottom-container[data-v-b6376b66]{border-top:1px solid #e0e4ea;display:flex;flex-direction:column;gap:16px;padding-top:48px;width:100%}@media (min-width: 640px){.kong-ui-public-entity-empty-state .entity-empty-state-bottom-container[data-v-b6376b66]{width:640px}}.button-row[data-v-33db902d]{align-items:center;display:flex;gap:12px}.kong-ui-entities-key-sets-list[data-v-33db902d]{width:100%}.kong-ui-entities-key-sets-list .kong-ui-entity-filter-input[data-v-33db902d]{margin-right:12px}.kong-ui-entities-key-sets-form[data-v-a4b01cc5]{width:100%}
@@ -0,0 +1,62 @@
1
+ import type { PropType } from 'vue';
2
+ import type { AxiosError } from 'axios';
3
+ import type { KongManagerKeySetEntityConfig, KonnectKeySetEntityConfig } from '../types';
4
+ import '@kong-ui-public/entities-shared/dist/style.css';
5
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
7
+ config: {
8
+ type: PropType<KonnectKeySetEntityConfig | KongManagerKeySetEntityConfig>;
9
+ required: true;
10
+ validator: (config: KonnectKeySetEntityConfig | KongManagerKeySetEntityConfig) => boolean;
11
+ };
12
+ /**
13
+ * External link for documentation that determines visibility of Documentation button
14
+ */
15
+ configCardDoc: {
16
+ type: StringConstructor;
17
+ default: string;
18
+ required: false;
19
+ };
20
+ /**
21
+ * Control visibility of card title content
22
+ */
23
+ hideTitle: {
24
+ type: BooleanConstructor;
25
+ default: boolean;
26
+ };
27
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
28
+ loading: (isLoading: boolean) => any;
29
+ "fetch:success": (data: Record<string, any>) => any;
30
+ "fetch:error": (error: AxiosError<unknown, any>) => any;
31
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
32
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
33
+ config: {
34
+ type: PropType<KonnectKeySetEntityConfig | KongManagerKeySetEntityConfig>;
35
+ required: true;
36
+ validator: (config: KonnectKeySetEntityConfig | KongManagerKeySetEntityConfig) => boolean;
37
+ };
38
+ /**
39
+ * External link for documentation that determines visibility of Documentation button
40
+ */
41
+ configCardDoc: {
42
+ type: StringConstructor;
43
+ default: string;
44
+ required: false;
45
+ };
46
+ /**
47
+ * Control visibility of card title content
48
+ */
49
+ hideTitle: {
50
+ type: BooleanConstructor;
51
+ default: boolean;
52
+ };
53
+ }>> & Readonly<{
54
+ onLoading?: ((isLoading: boolean) => any) | undefined;
55
+ "onFetch:success"?: ((data: Record<string, any>) => any) | undefined;
56
+ "onFetch:error"?: ((error: AxiosError<unknown, any>) => any) | undefined;
57
+ }>, {
58
+ configCardDoc: string;
59
+ hideTitle: boolean;
60
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
61
+ export default _default;
62
+ //# sourceMappingURL=KeySetConfigCard.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeySetConfigCard.vue.d.ts","sourceRoot":"","sources":["../../../src/components/KeySetConfigCard.vue"],"names":[],"mappings":"AAmFA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAE1B,MAAM,UAAU,CAAA;AAIjB,OAAO,gDAAgD,CAAA;;IAmOrD,oHAAoH;;cAElG,QAAQ,CAAC,yBAAyB,GAAG,6BAA6B,CAAC;;4BAE/D,yBAAyB,GAAG,6BAA6B,KAAG,OAAO;;IAQzF;;OAEG;;;;;;IAMH;;OAEG;;;;;;;;;;IAtBH,oHAAoH;;cAElG,QAAQ,CAAC,yBAAyB,GAAG,6BAA6B,CAAC;;4BAE/D,yBAAyB,GAAG,6BAA6B,KAAG,OAAO;;IAQzF;;OAEG;;;;;;IAMH;;OAEG;;;;;;;;;;;;;AAjCL,wBAuCG"}
@@ -0,0 +1,43 @@
1
+ import type { PropType } from 'vue';
2
+ import type { AxiosError } from 'axios';
3
+ import type { KonnectKeySetFormConfig, KongManagerKeySetFormConfig } from '../types';
4
+ import '@kong-ui-public/entities-shared/dist/style.css';
5
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
7
+ config: {
8
+ type: PropType<KonnectKeySetFormConfig | KongManagerKeySetFormConfig>;
9
+ required: true;
10
+ validator: (config: KonnectKeySetFormConfig | KongManagerKeySetFormConfig) => boolean;
11
+ };
12
+ /** If a valid Key Set ID is provided, it will put the form in Edit mode instead of Create */
13
+ keySetId: {
14
+ type: StringConstructor;
15
+ required: false;
16
+ default: string;
17
+ };
18
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
19
+ error: (error: AxiosError<unknown, any>) => any;
20
+ update: (data: Record<string, any>) => any;
21
+ loading: (isLoading: boolean) => any;
22
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
23
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
24
+ config: {
25
+ type: PropType<KonnectKeySetFormConfig | KongManagerKeySetFormConfig>;
26
+ required: true;
27
+ validator: (config: KonnectKeySetFormConfig | KongManagerKeySetFormConfig) => boolean;
28
+ };
29
+ /** If a valid Key Set ID is provided, it will put the form in Edit mode instead of Create */
30
+ keySetId: {
31
+ type: StringConstructor;
32
+ required: false;
33
+ default: string;
34
+ };
35
+ }>> & Readonly<{
36
+ onError?: ((error: AxiosError<unknown, any>) => any) | undefined;
37
+ onUpdate?: ((data: Record<string, any>) => any) | undefined;
38
+ onLoading?: ((isLoading: boolean) => any) | undefined;
39
+ }>, {
40
+ keySetId: string;
41
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
42
+ export default _default;
43
+ //# sourceMappingURL=KeySetForm.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeySetForm.vue.d.ts","sourceRoot":"","sources":["../../../src/components/KeySetForm.vue"],"names":[],"mappings":"AA4NA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAGnC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAA;AAUtD,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAG5B,MAAM,UAAU,CAAA;AAIjB,OAAO,gDAAgD,CAAA;;IAiWrD,oHAAoH;;cAElG,QAAQ,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;;4BAE3D,uBAAuB,GAAG,2BAA2B,KAAG,OAAO;;IAQrF,6FAA6F;;;;;;;;;;;IAZ7F,oHAAoH;;cAElG,QAAQ,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;;4BAE3D,uBAAuB,GAAG,2BAA2B,KAAG,OAAO;;IAQrF,6FAA6F;;;;;;;;;;;;;AAvB/F,wBA8BG"}
@@ -0,0 +1,123 @@
1
+ import type { PropType } from 'vue';
2
+ import type { AxiosError } from 'axios';
3
+ import type { KongManagerKeySetListConfig, KonnectKeySetListConfig, EntityRow, CopyEventPayload } from '../types';
4
+ import '@kong-ui-public/entities-shared/dist/style.css';
5
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
7
+ config: {
8
+ type: PropType<KonnectKeySetListConfig | KongManagerKeySetListConfig>;
9
+ required: true;
10
+ validator: (config: KonnectKeySetListConfig | KongManagerKeySetListConfig) => boolean;
11
+ };
12
+ cacheIdentifier: {
13
+ type: StringConstructor;
14
+ default: string;
15
+ };
16
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can create a new entity */
17
+ canCreate: {
18
+ type: PropType<() => boolean | Promise<boolean>>;
19
+ required: false;
20
+ default: () => Promise<boolean>;
21
+ };
22
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can delete a given entity */
23
+ canDelete: {
24
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
25
+ required: false;
26
+ default: () => Promise<boolean>;
27
+ };
28
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can edit a given entity */
29
+ canEdit: {
30
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
31
+ required: false;
32
+ default: () => Promise<boolean>;
33
+ };
34
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can retrieve (view details) a given entity */
35
+ canRetrieve: {
36
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
37
+ required: false;
38
+ default: () => Promise<boolean>;
39
+ };
40
+ /** default to false, setting to true will teleport the toolbar button to the destination in the consuming app */
41
+ useActionOutside: {
42
+ type: BooleanConstructor;
43
+ default: boolean;
44
+ };
45
+ /**
46
+ * Enables the new empty state design, this prop can be removed when
47
+ * the khcp-14756-empty-states-m2 FF is removed.
48
+ */
49
+ enableV2EmptyStates: {
50
+ type: BooleanConstructor;
51
+ default: boolean;
52
+ };
53
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
54
+ error: (error: AxiosError<unknown, any>) => any;
55
+ "click:learn-more": () => any;
56
+ "copy:success": (payload: CopyEventPayload) => any;
57
+ "copy:error": (payload: CopyEventPayload) => any;
58
+ "delete:success": (keySet: EntityRow) => any;
59
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
60
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
61
+ config: {
62
+ type: PropType<KonnectKeySetListConfig | KongManagerKeySetListConfig>;
63
+ required: true;
64
+ validator: (config: KonnectKeySetListConfig | KongManagerKeySetListConfig) => boolean;
65
+ };
66
+ cacheIdentifier: {
67
+ type: StringConstructor;
68
+ default: string;
69
+ };
70
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can create a new entity */
71
+ canCreate: {
72
+ type: PropType<() => boolean | Promise<boolean>>;
73
+ required: false;
74
+ default: () => Promise<boolean>;
75
+ };
76
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can delete a given entity */
77
+ canDelete: {
78
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
79
+ required: false;
80
+ default: () => Promise<boolean>;
81
+ };
82
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can edit a given entity */
83
+ canEdit: {
84
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
85
+ required: false;
86
+ default: () => Promise<boolean>;
87
+ };
88
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can retrieve (view details) a given entity */
89
+ canRetrieve: {
90
+ type: PropType<(row: EntityRow) => boolean | Promise<boolean>>;
91
+ required: false;
92
+ default: () => Promise<boolean>;
93
+ };
94
+ /** default to false, setting to true will teleport the toolbar button to the destination in the consuming app */
95
+ useActionOutside: {
96
+ type: BooleanConstructor;
97
+ default: boolean;
98
+ };
99
+ /**
100
+ * Enables the new empty state design, this prop can be removed when
101
+ * the khcp-14756-empty-states-m2 FF is removed.
102
+ */
103
+ enableV2EmptyStates: {
104
+ type: BooleanConstructor;
105
+ default: boolean;
106
+ };
107
+ }>> & Readonly<{
108
+ onError?: ((error: AxiosError<unknown, any>) => any) | undefined;
109
+ "onClick:learn-more"?: (() => any) | undefined;
110
+ "onCopy:success"?: ((payload: CopyEventPayload) => any) | undefined;
111
+ "onCopy:error"?: ((payload: CopyEventPayload) => any) | undefined;
112
+ "onDelete:success"?: ((keySet: EntityRow) => any) | undefined;
113
+ }>, {
114
+ cacheIdentifier: string;
115
+ canCreate: () => boolean | Promise<boolean>;
116
+ canDelete: (row: EntityRow) => boolean | Promise<boolean>;
117
+ canEdit: (row: EntityRow) => boolean | Promise<boolean>;
118
+ canRetrieve: (row: EntityRow) => boolean | Promise<boolean>;
119
+ useActionOutside: boolean;
120
+ enableV2EmptyStates: boolean;
121
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
122
+ export default _default;
123
+ //# sourceMappingURL=KeySetList.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeySetList.vue.d.ts","sourceRoot":"","sources":["../../../src/components/KeySetList.vue"],"names":[],"mappings":"AAsjBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAoBvC,OAAO,KAAK,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EACjB,MAAM,UAAU,CAAA;AASjB,OAAO,gDAAgD,CAAA;;IAq+BrD,oHAAoH;;cAElG,QAAQ,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;;4BAE3D,uBAAuB,GAAG,2BAA2B,KAAG,OAAO;;;;;;IAYrF,yHAAyH;;cAErG,QAAQ,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI9D,2HAA2H;;cAEvG,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,yHAAyH;;cAErG,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,4IAA4I;;cAExH,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,iHAAiH;;;;;IAKjH;;;OAGG;;;;;;;;;;;;IAhDH,oHAAoH;;cAElG,QAAQ,CAAC,uBAAuB,GAAG,2BAA2B,CAAC;;4BAE3D,uBAAuB,GAAG,2BAA2B,KAAG,OAAO;;;;;;IAYrF,yHAAyH;;cAErG,QAAQ,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI9D,2HAA2H;;cAEvG,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,yHAAyH;;cAErG,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,4IAA4I;;cAExH,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;;;;IAI5E,iHAAiH;;;;;IAKjH;;;OAGG;;;;;;;;;;;;;qBA9BgC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;qBAM1B,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;mBAMxC,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;uBAMxC,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;;;;AAjD7E,wBAmEG"}
@@ -0,0 +1,6 @@
1
+ import useI18n from './useI18n';
2
+ declare const _default: {
3
+ useI18n: typeof useI18n;
4
+ };
5
+ export default _default;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAA;;;;AAG/B,wBAEC"}
@@ -0,0 +1,9 @@
1
+ import { createI18n, i18nTComponent } from '@kong-ui-public/i18n';
2
+ import english from '../locales/en.json';
3
+ interface UseI18nReturn {
4
+ i18n: ReturnType<typeof createI18n<typeof english>>;
5
+ i18nT: ReturnType<typeof i18nTComponent<typeof english>>;
6
+ }
7
+ export default function useI18n(): UseI18nReturn;
8
+ export {};
9
+ //# sourceMappingURL=useI18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useI18n.d.ts","sourceRoot":"","sources":["../../../src/composables/useI18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,OAAO,MAAM,oBAAoB,CAAA;AAExC,UAAU,aAAa;IACrB,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAA;IACnD,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,CAAA;CACzD;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,IAAI,aAAa,CAO/C"}
@@ -0,0 +1,6 @@
1
+ import KeySetList from './components/KeySetList.vue';
2
+ import KeySetForm from './components/KeySetForm.vue';
3
+ import KeySetConfigCard from './components/KeySetConfigCard.vue';
4
+ export { KeySetList, KeySetForm, KeySetConfigCard };
5
+ export * from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,UAAU,MAAM,6BAA6B,CAAA;AACpD,OAAO,gBAAgB,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;AAEnD,cAAc,SAAS,CAAA"}
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ list: {
3
+ konnect: string;
4
+ kongManager: string;
5
+ };
6
+ form: {
7
+ konnect: {
8
+ create: string;
9
+ edit: string;
10
+ };
11
+ kongManager: {
12
+ create: string;
13
+ edit: string;
14
+ };
15
+ };
16
+ };
17
+ export default _default;
18
+ //# sourceMappingURL=key-sets-endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-sets-endpoints.d.ts","sourceRoot":"","sources":["../../src/key-sets-endpoints.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,wBAeC"}
@@ -0,0 +1,4 @@
1
+ export * from './key-set-list';
2
+ export * from './key-set-form';
3
+ export * from './key-set-config-card';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAGA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { KonnectBaseEntityConfig, KongManagerBaseEntityConfig, ConfigurationSchemaItem } from '@kong-ui-public/entities-shared';
2
+ /** Konnect KeySet entity config */
3
+ export interface KonnectKeySetEntityConfig extends KonnectBaseEntityConfig {
4
+ }
5
+ /** Kong Manager KeySet entity config */
6
+ export interface KongManagerKeySetEntityConfig extends KongManagerBaseEntityConfig {
7
+ }
8
+ export interface KeySetConfigurationSchema {
9
+ id: ConfigurationSchemaItem;
10
+ name: ConfigurationSchemaItem;
11
+ last_updated: ConfigurationSchemaItem;
12
+ created: ConfigurationSchemaItem;
13
+ tags: ConfigurationSchemaItem;
14
+ }
15
+ //# sourceMappingURL=key-set-config-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-set-config-card.d.ts","sourceRoot":"","sources":["../../../src/types/key-set-config-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEpI,mCAAmC;AACnC,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;CAAG;AAE7E,wCAAwC;AACxC,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;CAAG;AAErF,MAAM,WAAW,yBAAyB;IAExC,EAAE,EAAE,uBAAuB,CAAA;IAC3B,IAAI,EAAE,uBAAuB,CAAA;IAC7B,YAAY,EAAE,uBAAuB,CAAA;IACrC,OAAO,EAAE,uBAAuB,CAAA;IAChC,IAAI,EAAE,uBAAuB,CAAA;CAC9B"}
@@ -0,0 +1,25 @@
1
+ import type { RouteLocationRaw } from 'vue-router';
2
+ import type { KonnectBaseFormConfig, KongManagerBaseFormConfig } from '@kong-ui-public/entities-shared';
3
+ /** Konnect Key Set form config */
4
+ export interface KonnectKeySetFormConfig extends KonnectBaseFormConfig {
5
+ /** Route to return to if canceling create/edit a Key Set */
6
+ cancelRoute: RouteLocationRaw;
7
+ }
8
+ /** Kong Manager Key Set form config */
9
+ export interface KongManagerKeySetFormConfig extends KongManagerBaseFormConfig {
10
+ /** Route to return to if canceling create/edit a Key Set */
11
+ cancelRoute: RouteLocationRaw;
12
+ }
13
+ export interface KeySetFormFields {
14
+ name: string;
15
+ tags?: string;
16
+ }
17
+ export interface KeySetFormState {
18
+ /** Form fields */
19
+ fields: KeySetFormFields;
20
+ /** Form readonly state (only used when saving entity details) */
21
+ isReadonly: boolean;
22
+ /** The error message to show on the form */
23
+ errorMessage: string;
24
+ }
25
+ //# sourceMappingURL=key-set-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-set-form.d.ts","sourceRoot":"","sources":["../../../src/types/key-set-form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAEvG,kCAAkC;AAClC,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,4DAA4D;IAC5D,WAAW,EAAE,gBAAgB,CAAA;CAC9B;AAED,uCAAuC;AACvC,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC5E,4DAA4D;IAC5D,WAAW,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,MAAM,EAAE,gBAAgB,CAAA;IACxB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAA;CACrB"}
@@ -0,0 +1,33 @@
1
+ import type { RouteLocationRaw } from 'vue-router';
2
+ import type { FilterSchema, KongManagerBaseTableConfig, KonnectBaseTableConfig } from '@kong-ui-public/entities-shared';
3
+ export interface BaseKeySetListConfig {
4
+ /** Route for creating a key set */
5
+ createRoute: RouteLocationRaw;
6
+ /** A function that returns the route for viewing a key set */
7
+ getViewRoute: (id: string) => RouteLocationRaw;
8
+ /** A function that returns the route for editing a key set */
9
+ getEditRoute: (id: string) => RouteLocationRaw;
10
+ }
11
+ /** Konnect key list config */
12
+ export interface KonnectKeySetListConfig extends KonnectBaseTableConfig, BaseKeySetListConfig {
13
+ }
14
+ /** Kong Manager key list config */
15
+ export interface KongManagerKeySetListConfig extends KongManagerBaseTableConfig, BaseKeySetListConfig {
16
+ /** FilterSchema for fuzzy match */
17
+ filterSchema?: FilterSchema;
18
+ }
19
+ export interface EntityRow extends Record<string, any> {
20
+ id: string;
21
+ name?: string;
22
+ kid: string;
23
+ }
24
+ /** Copy field event payload */
25
+ export interface CopyEventPayload {
26
+ /** The entity row */
27
+ entity: EntityRow;
28
+ /** The field being copied. If omitted, the entity JSON is being copied. */
29
+ field?: string;
30
+ /** The toaster message */
31
+ message: string;
32
+ }
33
+ //# sourceMappingURL=key-set-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-set-list.d.ts","sourceRoot":"","sources":["../../../src/types/key-set-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAEvH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,WAAW,EAAE,gBAAgB,CAAA;IAC7B,8DAA8D;IAC9D,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAC9C,8DAA8D;IAC9D,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,gBAAgB,CAAA;CAC/C;AAED,8BAA8B;AAC9B,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB,EAAE,oBAAoB;CAAG;AAEhG,mCAAmC;AACnC,MAAM,WAAW,2BAA4B,SAAQ,0BAA0B,EAAE,oBAAoB;IACnG,mCAAmC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,MAAM,EAAE,SAAS,CAAA;IACjB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kong-ui-public/entities-key-sets",
3
- "version": "3.7.28-pr.2132.c7fba69a4.0",
3
+ "version": "3.7.28",
4
4
  "type": "module",
5
5
  "main": "./dist/entities-key-sets.umd.js",
6
6
  "module": "./dist/entities-key-sets.es.js",
@@ -26,8 +26,8 @@
26
26
  "axios": "^1.7.7",
27
27
  "vue": ">= 3.3.13 < 4",
28
28
  "vue-router": "^4.4.5",
29
- "@kong-ui-public/i18n": "^2.3.0",
30
- "@kong-ui-public/entities-shared": "^3.23.1-pr.2132.c7fba69a4.0"
29
+ "@kong-ui-public/entities-shared": "^3.24.0",
30
+ "@kong-ui-public/i18n": "^2.3.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@kong/icons": "^1.26.0",
@@ -35,8 +35,8 @@
35
35
  "axios": "^1.7.7",
36
36
  "vue": "^3.5.13",
37
37
  "vue-router": "^4.4.5",
38
- "@kong-ui-public/entities-shared": "^3.23.1-pr.2132.c7fba69a4.0",
39
- "@kong-ui-public/i18n": "^2.3.0"
38
+ "@kong-ui-public/i18n": "^2.3.0",
39
+ "@kong-ui-public/entities-shared": "^3.24.0"
40
40
  },
41
41
  "repository": {
42
42
  "type": "git",