@kong-ui-public/entities-shared 3.68.2-pr.3869.e876c8c8a.0 → 3.68.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/_plugin-vue_export-helper-BoB6meVO.cjs +1 -0
  2. package/dist/_plugin-vue_export-helper-cPvCgR8H.js +695 -0
  3. package/dist/deck-editor.cjs.js +1 -0
  4. package/dist/deck-editor.es.js +86 -0
  5. package/dist/entities-shared.cjs.js +79 -0
  6. package/dist/entities-shared.es.js +5348 -0
  7. package/dist/style.css +1 -0
  8. package/dist/types/components/common/DeckCallout.vue.d.ts +10 -0
  9. package/dist/types/components/common/DeckCallout.vue.d.ts.map +1 -0
  10. package/dist/types/components/common/DeckCodeBlock.vue.d.ts +13 -0
  11. package/dist/types/components/common/DeckCodeBlock.vue.d.ts.map +1 -0
  12. package/dist/types/components/common/DeckCodeBlockInternal.vue.d.ts +13 -0
  13. package/dist/types/components/common/DeckCodeBlockInternal.vue.d.ts.map +1 -0
  14. package/dist/types/components/common/DeckCommandEditor.vue.d.ts +16 -0
  15. package/dist/types/components/common/DeckCommandEditor.vue.d.ts.map +1 -0
  16. package/dist/types/components/common/DeckCommandEditorLoading.vue.d.ts +4 -0
  17. package/dist/types/components/common/DeckCommandEditorLoading.vue.d.ts.map +1 -0
  18. package/dist/types/components/common/GeneratePatModal.vue.d.ts +14 -0
  19. package/dist/types/components/common/GeneratePatModal.vue.d.ts.map +1 -0
  20. package/dist/types/components/common/JsonCodeBlock.vue.d.ts +70 -0
  21. package/dist/types/components/common/JsonCodeBlock.vue.d.ts.map +1 -0
  22. package/dist/types/components/common/SensitiveInput.vue.d.ts +73 -0
  23. package/dist/types/components/common/SensitiveInput.vue.d.ts.map +1 -0
  24. package/dist/types/components/common/TableTags.vue.d.ts +27 -0
  25. package/dist/types/components/common/TableTags.vue.d.ts.map +1 -0
  26. package/dist/types/components/common/TerraformCodeBlock.vue.d.ts +58 -0
  27. package/dist/types/components/common/TerraformCodeBlock.vue.d.ts.map +1 -0
  28. package/dist/types/components/common/YamlCodeBlock.vue.d.ts +54 -0
  29. package/dist/types/components/common/YamlCodeBlock.vue.d.ts.map +1 -0
  30. package/dist/types/components/entity-base-config-card/ConfigCardDisplay.vue.d.ts +213 -0
  31. package/dist/types/components/entity-base-config-card/ConfigCardDisplay.vue.d.ts.map +1 -0
  32. package/dist/types/components/entity-base-config-card/ConfigCardItem.vue.d.ts +58 -0
  33. package/dist/types/components/entity-base-config-card/ConfigCardItem.vue.d.ts.map +1 -0
  34. package/dist/types/components/entity-base-config-card/EntityBaseConfigCard.vue.d.ts +335 -0
  35. package/dist/types/components/entity-base-config-card/EntityBaseConfigCard.vue.d.ts.map +1 -0
  36. package/dist/types/components/entity-base-config-card/InternalLinkItem.vue.d.ts +20 -0
  37. package/dist/types/components/entity-base-config-card/InternalLinkItem.vue.d.ts.map +1 -0
  38. package/dist/types/components/entity-base-config-card/JsonCardItem.vue.d.ts +35 -0
  39. package/dist/types/components/entity-base-config-card/JsonCardItem.vue.d.ts.map +1 -0
  40. package/dist/types/components/entity-base-config-card/StatusBadge.vue.d.ts +16 -0
  41. package/dist/types/components/entity-base-config-card/StatusBadge.vue.d.ts.map +1 -0
  42. package/dist/types/components/entity-base-form/EntityBaseForm.vue.d.ts +364 -0
  43. package/dist/types/components/entity-base-form/EntityBaseForm.vue.d.ts.map +1 -0
  44. package/dist/types/components/entity-base-table/EntityBaseTable.vue.d.ts +326 -0
  45. package/dist/types/components/entity-base-table/EntityBaseTable.vue.d.ts.map +1 -0
  46. package/dist/types/components/entity-base-table/EntityBaseTableCell.vue.d.ts +45 -0
  47. package/dist/types/components/entity-base-table/EntityBaseTableCell.vue.d.ts.map +1 -0
  48. package/dist/types/components/entity-delete-modal/EntityDeleteModal.vue.d.ts +135 -0
  49. package/dist/types/components/entity-delete-modal/EntityDeleteModal.vue.d.ts.map +1 -0
  50. package/dist/types/components/entity-empty-state/EntityEmptyState.vue.d.ts +117 -0
  51. package/dist/types/components/entity-empty-state/EntityEmptyState.vue.d.ts.map +1 -0
  52. package/dist/types/components/entity-filter/EntityFilter.vue.d.ts +38 -0
  53. package/dist/types/components/entity-filter/EntityFilter.vue.d.ts.map +1 -0
  54. package/dist/types/components/entity-form-block/EntityFormBlock.vue.d.ts +22 -0
  55. package/dist/types/components/entity-form-block/EntityFormBlock.vue.d.ts.map +1 -0
  56. package/dist/types/components/entity-form-section/EntityFormSection.vue.d.ts +77 -0
  57. package/dist/types/components/entity-form-section/EntityFormSection.vue.d.ts.map +1 -0
  58. package/dist/types/components/entity-link/EntityLink.vue.d.ts +50 -0
  59. package/dist/types/components/entity-link/EntityLink.vue.d.ts.map +1 -0
  60. package/dist/types/components/entity-toggle-modal/EntityToggleModal.vue.d.ts +65 -0
  61. package/dist/types/components/entity-toggle-modal/EntityToggleModal.vue.d.ts.map +1 -0
  62. package/dist/types/components/onboarding-card/OnboardingCard.vue.d.ts +15 -0
  63. package/dist/types/components/onboarding-card/OnboardingCard.vue.d.ts.map +1 -0
  64. package/dist/types/components/permissions-wrapper/PermissionsWrapper.vue.d.ts +56 -0
  65. package/dist/types/components/permissions-wrapper/PermissionsWrapper.vue.d.ts.map +1 -0
  66. package/dist/types/composables/index.d.ts +49 -0
  67. package/dist/types/composables/index.d.ts.map +1 -0
  68. package/dist/types/composables/useAxios.d.ts +5 -0
  69. package/dist/types/composables/useAxios.d.ts.map +1 -0
  70. package/dist/types/composables/useDebouncedFilter.d.ts +11 -0
  71. package/dist/types/composables/useDebouncedFilter.d.ts.map +1 -0
  72. package/dist/types/composables/useDeckOptions.d.ts +13 -0
  73. package/dist/types/composables/useDeckOptions.d.ts.map +1 -0
  74. package/dist/types/composables/useDeleteUrlBuilder.d.ts +3 -0
  75. package/dist/types/composables/useDeleteUrlBuilder.d.ts.map +1 -0
  76. package/dist/types/composables/useErrors.d.ts +11 -0
  77. package/dist/types/composables/useErrors.d.ts.map +1 -0
  78. package/dist/types/composables/useExternalLinkCreator.d.ts +2 -0
  79. package/dist/types/composables/useExternalLinkCreator.d.ts.map +1 -0
  80. package/dist/types/composables/useFetchUrlBuilder.d.ts +6 -0
  81. package/dist/types/composables/useFetchUrlBuilder.d.ts.map +1 -0
  82. package/dist/types/composables/useFetcher.d.ts +40 -0
  83. package/dist/types/composables/useFetcher.d.ts.map +1 -0
  84. package/dist/types/composables/useGatewayFeatureSupported.d.ts +11 -0
  85. package/dist/types/composables/useGatewayFeatureSupported.d.ts.map +1 -0
  86. package/dist/types/composables/useHelpers.d.ts +12 -0
  87. package/dist/types/composables/useHelpers.d.ts.map +1 -0
  88. package/dist/types/composables/useI18n.d.ts +9 -0
  89. package/dist/types/composables/useI18n.d.ts.map +1 -0
  90. package/dist/types/composables/useManagedByColumn.d.ts +20 -0
  91. package/dist/types/composables/useManagedByColumn.d.ts.map +1 -0
  92. package/dist/types/composables/useManagedByEnabled.d.ts +11 -0
  93. package/dist/types/composables/useManagedByEnabled.d.ts.map +1 -0
  94. package/dist/types/composables/useSchema.d.ts +12 -0
  95. package/dist/types/composables/useSchema.d.ts.map +1 -0
  96. package/dist/types/composables/useStringHelpers.d.ts +5 -0
  97. package/dist/types/composables/useStringHelpers.d.ts.map +1 -0
  98. package/dist/types/composables/useTableState.d.ts +15 -0
  99. package/dist/types/composables/useTableState.d.ts.map +1 -0
  100. package/dist/types/composables/useTruncationDetector.d.ts +12 -0
  101. package/dist/types/composables/useTruncationDetector.d.ts.map +1 -0
  102. package/dist/types/composables/useValidators.d.ts +8 -0
  103. package/dist/types/composables/useValidators.d.ts.map +1 -0
  104. package/dist/types/constants.d.ts +53 -0
  105. package/dist/types/constants.d.ts.map +1 -0
  106. package/dist/types/deck-editor.d.ts +18 -0
  107. package/dist/types/deck-editor.d.ts.map +1 -0
  108. package/dist/types/index.d.ts +35 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/types/app-config.d.ts +43 -0
  111. package/dist/types/types/app-config.d.ts.map +1 -0
  112. package/dist/types/types/base.d.ts +12 -0
  113. package/dist/types/types/base.d.ts.map +1 -0
  114. package/dist/types/types/deck.d.ts +43 -0
  115. package/dist/types/types/deck.d.ts.map +1 -0
  116. package/dist/types/types/entity-base-config-card.d.ts +145 -0
  117. package/dist/types/types/entity-base-config-card.d.ts.map +1 -0
  118. package/dist/types/types/entity-base-form.d.ts +49 -0
  119. package/dist/types/types/entity-base-form.d.ts.map +1 -0
  120. package/dist/types/types/entity-base-table.d.ts +79 -0
  121. package/dist/types/types/entity-base-table.d.ts.map +1 -0
  122. package/dist/types/types/entity-delete-modal.d.ts +28 -0
  123. package/dist/types/types/entity-delete-modal.d.ts.map +1 -0
  124. package/dist/types/types/entity-empty-state.d.ts +7 -0
  125. package/dist/types/types/entity-empty-state.d.ts.map +1 -0
  126. package/dist/types/types/entity-filter.d.ts +48 -0
  127. package/dist/types/types/entity-filter.d.ts.map +1 -0
  128. package/dist/types/types/entity-link.d.ts +6 -0
  129. package/dist/types/types/entity-link.d.ts.map +1 -0
  130. package/dist/types/types/index.d.ts +14 -0
  131. package/dist/types/types/index.d.ts.map +1 -0
  132. package/dist/types/types/onboarding-card.d.ts +37 -0
  133. package/dist/types/types/onboarding-card.d.ts.map +1 -0
  134. package/dist/types/types/sensitive-input.d.ts +9 -0
  135. package/dist/types/types/sensitive-input.d.ts.map +1 -0
  136. package/dist/types/types/utils.d.ts +13 -0
  137. package/dist/types/types/utils.d.ts.map +1 -0
  138. package/dist/types/utils/code-block.d.ts +3 -0
  139. package/dist/types/utils/code-block.d.ts.map +1 -0
  140. package/dist/types/utils/managed-by.d.ts +25 -0
  141. package/dist/types/utils/managed-by.d.ts.map +1 -0
  142. package/dist/types/utils/shiki.d.ts +4 -0
  143. package/dist/types/utils/shiki.d.ts.map +1 -0
  144. package/package.json +5 -5
@@ -0,0 +1,695 @@
1
+ import N from "axios";
2
+ import { inject as D, ref as y, computed as b, unref as H, toValue as g, watch as re, toRef as oe, provide as W } from "vue";
3
+ import { createI18n as Y, i18nTComponent as ie } from "@kong-ui-public/i18n";
4
+ const at = /* @__PURE__ */ Symbol("PLUGIN_FORM_LAYOUT_STATE"), J = /* @__PURE__ */ Symbol("DECK_COMMAND_EDITOR"), S = "[entities-shared] DeckCommandEditor was not provided. Provide it via the `DECK_COMMAND_EDITOR_KEY` injection key or the `provideDeckCommandEditor` helper (see @kong-ui-public/entities-shared/deck-editor).", nt = "50vh", rt = 2e5, ce = {
5
+ /** Surfaces the `managed_by` ownership field in entity lists and detail cards. */
6
+ MANAGED_BY: "KM-3018-entity-managed-by"
7
+ };
8
+ function le() {
9
+ return {
10
+ getAxiosInstance: (e = {}) => {
11
+ try {
12
+ const n = D("get-axios-instance", void 0);
13
+ return typeof n == "function" ? n(e) : N.create({
14
+ withCredentials: !0,
15
+ timeout: 3e4,
16
+ ...e
17
+ });
18
+ } catch (n) {
19
+ return console.warn("getAxiosInstance:", n.message || n), N.create({
20
+ withCredentials: !0,
21
+ timeout: 3e4,
22
+ ...e
23
+ });
24
+ }
25
+ },
26
+ getTraceIdFromError: (e) => e?.response?.headers["x-datadog-trace-id"] || ""
27
+ };
28
+ }
29
+ function ue() {
30
+ return {
31
+ debounce: (e, n) => {
32
+ let o;
33
+ return (...t) => {
34
+ clearTimeout(o), o = window?.setTimeout(() => {
35
+ e(...t);
36
+ }, n);
37
+ };
38
+ }
39
+ };
40
+ }
41
+ const L = "khcp-user-table-preferences", de = {
42
+ pageSize: 30,
43
+ sortColumnKey: void 0,
44
+ sortColumnOrder: void 0,
45
+ columnVisibility: {}
46
+ };
47
+ function ot() {
48
+ const e = (o) => {
49
+ if (typeof o == "string")
50
+ try {
51
+ return JSON.parse(o);
52
+ } catch (t) {
53
+ console.error("useTablePreferences(tryParseJson)", t);
54
+ return;
55
+ }
56
+ }, n = () => {
57
+ const o = e(localStorage.getItem(L));
58
+ return !o || !Object.keys(o).length ? /* @__PURE__ */ new Map() : new Map(Object.entries(o));
59
+ };
60
+ return {
61
+ setTablePreferences: (o, t) => {
62
+ try {
63
+ const s = n();
64
+ s.set(o, t), localStorage.setItem(L, JSON.stringify(Object.fromEntries(s.entries())));
65
+ } catch (s) {
66
+ console.error("useTablePreferences(setTablePreferences)", s);
67
+ }
68
+ },
69
+ getTablePreferences: (o, t) => n()?.get(o) || void 0 || t || de,
70
+ deleteAllTablePreferences: () => {
71
+ localStorage.removeItem(L);
72
+ }
73
+ };
74
+ }
75
+ function T(e = {}) {
76
+ const { getAxiosInstance: n } = le();
77
+ return {
78
+ axiosInstance: n(e)
79
+ };
80
+ }
81
+ const fe = { actions: { copyId: "Copy ID", copied_id: 'Copied "{id}" to the clipboard', copyToClipboard: "Copied successfully!", copyToClipboardFailed: "Failed to copy to the clipboard" } }, pe = { message: "Are you sure you want to delete this {entityType}?", messageWithName: "Are you sure you want to delete this {entityType} {entityName}?" }, ge = { actions: { viewConfiguration: "View configuration", hideConfiguration: "Hide configuration", save: "Save", cancel: "Cancel", back: "Back" }, configuration: { title: "Configuration", message: "Export configurations for core Kong Gateway objects, like services, routes, and plugins, to either YAML or JSON. This allows for straightforward importing into APIOps tools like decK with YAML, or Insomnia and cURL with JSON.", yaml: "YAML", json: "JSON", terraform: "Terraform", deck: "decK" }, errors: { edit: "The entity could not be edited at this time." } }, me = { emptyState: { noSearchResultsTitle: "No results found", noSearchResultsMessage: "Please adjust the criteria and try again.", noSearchResultsCtaText: "Clear" } }, ye = { title: "Configuration", actions: { copy: "Copy JSON", deck_customize: "Customize before copying to CLI", deck_customize_cancel: "Cancel", sensitive_fields: "Show sensitive fields", sensitive_fields_tooltip: "View masked sensitive data in your configurations if any field values have been redacted." }, sections: { advanced: "Advanced", plugin: "Plugin specific configuration", policy: "Policy specific configuration" }, commonFields: { id_label: "ID", name_label: "Name", enabled_label: "Enabled", enabled_tooltip: "Enabled is FTW", updated_at_label: "Last updated", created_at_label: "Created", managed_by_label: "Managed By", tags_label: "Tags", link: "Link", partial_label: "Redis configuration" }, statusBadge: { enabledLabel: "Enabled", disabledLabel: "Disabled" }, copy: { tooltip: "Copy {label}", success: "Copied!" }, errors: { load: "The entity configuration data could not be loaded at this time.", copy: "Failed to copy to clipboard" }, general: { entryTitle: "Entry {index}", structuredFormat: "Structured" } }, he = { learnMore: "Learn more", pricingTitle: "Pricing: " }, be = { filterButtonText: "Filter", fieldLabel: "Filter by:", inputPlaceholder: "Enter a value", selectPlaceholder: "Select an item", applyButtonText: "Apply", clearButtonText: "Clear", clearAllButtonText: "Clear all filters" }, ve = { errors: { fetch: "Could not fetch available items", invalid: "Please select a valid value" } }, _e = { unexpected: "An unexpected error has occurred", dataKeyUndefined: 'The data key "{dataKey}" does not exist in the response.' }, Ae = { utf8Name: "The name can be any string containing characters, letters, numbers, or the following characters: ., -, _, or ~. Do not use spaces." }, we = { enable: { title: "Enable {entityType}", message: "Are you sure you want to enable the {entityType} {entityName}?", confirmText: "Yes, enable" }, disable: { title: "Disable {entityType}", message: "Are you sure you want to disable the {entityType} {entityName}?", confirmText: "Yes, disable" } }, ke = { hint: { konnect: "The {token} environment variable must be added first. See {link} for details.", kongManager: "If your Admin API is secured, set up authentication following {link}." }, documentation: "the documentation", steps: { step_1: "Step 1: Export token", step_2: "Step 2: Apply configuration" }, customization: { title: "Customize before copying to CLI", copy_pat: "Make sure to copy your personal access token now. You won't be able to see it again.", reuse_pat: "Use an existing PAT if you've already generated one.", generate_pat: "Generate PAT", footer_reminder: "Changes you make here won't affect your configuration. After you apply changes with decK in the CLI, refresh the page to view them.", secret_advise: "Command may contain sensitive values. Treat it as a secret." }, copy_tooltip: "Copy" }, Ce = { body: "Want a ready-to-use CLI command? {cta} to view this configuration as a decK sync snippet you can copy directly.", cta: "Switch to decK format" }, Ie = { title: "Generate a Personal Access Token", description: "Personal access tokens are used to authenticate decK commands and Konnect API requests.", fields: { name: { label: "Name", placeholder: "Enter token name" }, expiresAt: { label: "Expiration date", placeholder: "Select an expiration date", n_days: "{n} days" } }, actions: { cancel: "Cancel", generate: "Generate", generating: "Generating…" } }, xe = { dismissLabel: "Dismiss" }, Ee = { rotateKey: "Rotate key", generateKey: "Generate key", placeholder: "Enter or generate a key", oneTimeHint: "The key is shown only once. Copy it now and store it securely.", copy: "Copy", showKey: "Show key", hideKey: "Hide key" }, Q = {
82
+ global: fe,
83
+ deleteModal: pe,
84
+ baseForm: ge,
85
+ baseTable: me,
86
+ baseConfigCard: ye,
87
+ emptyState: he,
88
+ filter: be,
89
+ debouncedFilter: ve,
90
+ errors: _e,
91
+ validationErrors: Ae,
92
+ toggleModal: we,
93
+ deckCodeBlock: ke,
94
+ deckCallout: Ce,
95
+ generatePatModal: Ie,
96
+ onboardingCard: xe,
97
+ sensitiveInput: Ee
98
+ };
99
+ function K() {
100
+ const e = Y("en-us", Q);
101
+ return {
102
+ i18n: e,
103
+ i18nT: ie(e)
104
+ // Translation component <i18n-t>
105
+ };
106
+ }
107
+ var I = /* @__PURE__ */ ((e) => (e[e.InitialLoad = 0] = "InitialLoad", e[e.Loading = 1] = "Loading", e[e.Idle = 2] = "Idle", e[e.NoResults = 3] = "NoResults", e[e.NoRecords = 4] = "NoRecords", e[e.Error = 5] = "Error", e))(I || {}), X = /* @__PURE__ */ ((e) => (e.CaCertificate = "ca_certificate", e.Certificate = "certificate", e.Consumer = "consumer", e.ConsumerGroup = "consumer_group", e.GatewayService = "service", e.Key = "key", e.KeySet = "set", e.Plugin = "plugin", e.Route = "route", e.SNI = "sni", e.Upstream = "upstream", e.Target = "target", e.Vault = "vault", e.Partial = "partial", e.CloudGatewayAddon = "cloud_gateway_addon", e.BackendCluster = "backend_cluster", e.VirtualCluster = "virtual_cluster", e.Listener = "listener", e.ProducePolicy = "produce_policy", e.ConsumePolicy = "consume_policy", e.ClusterPolicy = "cluster_policy", e.ListenerPolicy = "listener_policy", e.SchemaRegistry = "schema_registry", e.StaticKey = "static_key", e.TlsTrustBundle = "tls_trust_bundle", e.AuthServer = "auth_server", e.AuthServerScopes = "auth_server_scopes", e.AuthServerClaims = "auth_server_claims", e.AuthServerClients = "auth_server_clients", e.Other = "other", e.PluginSchema = "plugin_schema", e.CustomPlugin = "custom_plugin", e.ClonedPlugin = "cloned_plugin", e))(X || {});
108
+ const it = Object.values(X), De = [
109
+ "ca_certificate",
110
+ "certificate",
111
+ "consumer",
112
+ "consumer_group",
113
+ "service",
114
+ "key",
115
+ "set",
116
+ "plugin",
117
+ "plugin_schema",
118
+ "custom_plugin",
119
+ "cloned_plugin",
120
+ "route",
121
+ "upstream",
122
+ "target",
123
+ "vault",
124
+ "partial"
125
+ /* Partial */
126
+ ];
127
+ function Z(e) {
128
+ return De.includes(e);
129
+ }
130
+ const ct = ["backend_cluster", "virtual_cluster", "listener", "produce_policy", "consume_policy", "cluster_policy", "listener_policy", "schema_registry", "static_key", "tls_trust_bundle"], lt = ["auth_server", "auth_server_scopes", "auth_server_claims", "auth_server_clients"];
131
+ var R = /* @__PURE__ */ ((e) => (e.ID = "id", e.IdArray = "id-array", e.Text = "plain-text", e.Date = "date", e.Redacted = "redacted", e.RedactedArray = "redacted-array", e.Json = "json", e.JsonArray = "json-array", e.BadgeTag = "badge-tag", e.CopyBadge = "copy-badge", e.BadgeStatus = "badge-status", e.BadgeMethod = "badge-method", e.LinkInternal = "link-internal", e.LinkExternal = "link-external", e.ManagedBy = "managed-by", e))(R || {}), Me = /* @__PURE__ */ ((e) => (e.Basic = "basic", e.Advanced = "advanced", e.Plugin = "plugin", e.Policy = "policy", e))(Me || {});
132
+ const ut = ["structured", "yaml", "json", "terraform", "deck"];
133
+ function q() {
134
+ const e = (i, r) => r?.[i] ?? void 0, n = (i, r) => {
135
+ if (i.length !== r.length) return !1;
136
+ const d = /* @__PURE__ */ new Set([...i, ...r]);
137
+ for (const c of d) {
138
+ const f = i.filter((A) => A === c).length, h = r.filter((A) => A === c).length;
139
+ if (f !== h) return !1;
140
+ }
141
+ return !0;
142
+ }, o = (i, r, d) => {
143
+ if (d) {
144
+ if (Object.keys(i).length === Object.keys(r).length)
145
+ for (const c in i)
146
+ if (Array.isArray(i[c]) && Array.isArray(r[c])) {
147
+ if (n(i[c], r[c]))
148
+ continue;
149
+ return !1;
150
+ } else {
151
+ if (i[c] === r[c])
152
+ continue;
153
+ return !1;
154
+ }
155
+ else
156
+ return !1;
157
+ return !0;
158
+ }
159
+ try {
160
+ return JSON.stringify(i) === JSON.stringify(r);
161
+ } catch {
162
+ return !1;
163
+ }
164
+ }, t = (i) => (r, d) => {
165
+ let c = r[i] === void 0 || r[i] === null ? "" : r[i], f = d[i] === void 0 || d[i] === null ? "" : d[i];
166
+ return Array.isArray(r[i]) && (c = r[i][0]), Array.isArray(d[i]) && (f = d[i][0]), c.localeCompare(f);
167
+ }, s = (i) => i ? /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/.test(i) : !1, l = "********", a = (i) => !!i && typeof i == "object" && !Array.isArray(i), u = (i, r) => i?.find((c) => Object.keys(c)?.[0] === r)?.[r], m = (i, r) => {
168
+ if (!r || i === null || i === void 0)
169
+ return i;
170
+ if (r.type === "string")
171
+ return r.encrypted ? l : i;
172
+ if (r.type === "record" || r.type === "map") {
173
+ if (!a(i))
174
+ return i;
175
+ if (r.type === "map" && !r.values)
176
+ return { ...i };
177
+ const d = {};
178
+ for (const c in i)
179
+ if (r.type === "record") {
180
+ const f = u(r.fields, c);
181
+ d[c] = f ? m(i[c], f) : i[c];
182
+ } else if (r.type === "map") {
183
+ const f = r.values;
184
+ d[c] = m(i[c], {
185
+ ...f,
186
+ encrypted: !!(r.encrypted || f.encrypted)
187
+ });
188
+ }
189
+ return d;
190
+ }
191
+ if ((r.type === "array" || r.type === "set") && Array.isArray(i)) {
192
+ const d = r.elements;
193
+ return d ? i.map((c) => m(c, {
194
+ ...d,
195
+ // encryption set if either parent or child is encrypted
196
+ encrypted: !!(r.encrypted || d.encrypted)
197
+ })) : i.slice();
198
+ }
199
+ return i;
200
+ }, v = (i, r) => {
201
+ if (Array.isArray(i))
202
+ return i.map((c) => v(c, r));
203
+ if (!a(i))
204
+ return i;
205
+ const d = {};
206
+ for (const c in i) {
207
+ if (r[c]?.type === R.Redacted) {
208
+ d[c] = l;
209
+ continue;
210
+ }
211
+ if (r[c]?.type === R.RedactedArray && Array.isArray(i[c])) {
212
+ d[c] = i[c].map(() => l);
213
+ continue;
214
+ }
215
+ d[c] = v(i[c], r);
216
+ }
217
+ return d;
218
+ };
219
+ return {
220
+ getPropValue: e,
221
+ objectsAreEqual: o,
222
+ sortAlpha: t,
223
+ isValidUuid: s,
224
+ isObjectRecord: a,
225
+ getApiSchemaField: u,
226
+ redactByApiSchema: m,
227
+ redactByConfigSchema: v
228
+ };
229
+ }
230
+ function Oe(e, n, o, t = {
231
+ fetchedItemsKey: "data",
232
+ searchKeys: ["id"]
233
+ }) {
234
+ o || (o = "1000");
235
+ const { axiosInstance: s } = T(e.axiosRequestConfig), { i18n: { t: l } } = K(), { debounce: a } = ue(), u = a(async (p) => {
236
+ await x(p);
237
+ }, 200), m = y(!1), v = y(""), i = y(""), r = y([]), d = y([]), c = y(void 0), f = b(() => {
238
+ let p = `${e.apiBaseUrl}${H(n)}`;
239
+ return e.app === "konnect" && (p = p.replace(/{controlPlaneId}/gi, e?.controlPlaneId || "")), p.replace(/\/{workspace}/gi, e?.workspace ? `/${e.workspace}` : "");
240
+ }), { isValidUuid: h } = q(), A = async () => {
241
+ try {
242
+ m.value = !0;
243
+ const { data: p } = await s.get(`${f.value}?size=${o}`);
244
+ p?.next || (c.value = t.fetchedItemsKey in p ? p[t.fetchedItemsKey] : []), d.value = t.fetchedItemsKey in p ? p[t.fetchedItemsKey] : [], r.value = d.value;
245
+ } catch {
246
+ r.value = [], v.value = l("debouncedFilter.errors.fetch");
247
+ } finally {
248
+ m.value = !1;
249
+ }
250
+ }, C = y(""), x = async (p) => {
251
+ if (C.value !== p) {
252
+ if (C.value = p ?? "", !p) {
253
+ r.value = d.value;
254
+ return;
255
+ }
256
+ if (c.value === void 0)
257
+ try {
258
+ if (m.value = !0, v.value = "", i.value = "", e.app === "konnect") {
259
+ const _ = `${f.value}/${p}`, { data: w } = await s.get(`${_}?size=${o}`);
260
+ t.fetchedItemsKey in w ? r.value = w[t.fetchedItemsKey] : w?.[t.exactMatchKey ?? "id"] ? r.value = [w] : r.value = [];
261
+ } else {
262
+ const _ = [];
263
+ h(p) && t.searchKeys.includes("id") ? _.push((async () => {
264
+ const { data: k } = await s.get(`${f.value}/${p}`);
265
+ return [k[t.fetchedItemsKey] ?? k];
266
+ })()) : _.push(
267
+ ...t.searchKeys.filter((k) => k !== "id").map(async (k) => {
268
+ const { data: M } = await s.get(`${f.value}?${k}=${p}`);
269
+ return M[t.fetchedItemsKey];
270
+ })
271
+ );
272
+ const w = await Promise.all(_), E = /* @__PURE__ */ new Set();
273
+ r.value = [], w?.forEach?.((k) => {
274
+ k?.forEach?.((M) => {
275
+ E.has(M.id) || (E.add(M.id), r.value.push(M));
276
+ });
277
+ });
278
+ }
279
+ } catch (_) {
280
+ _?.response?.status === 404 ? i.value = l("debouncedFilter.errors.invalid") : (r.value = [], v.value = l("debouncedFilter.errors.fetch"));
281
+ } finally {
282
+ m.value = !1;
283
+ }
284
+ else
285
+ m.value = !0, i.value = "", r.value = c.value?.filter((_) => {
286
+ let w = !1;
287
+ for (const E of t.searchKeys)
288
+ (typeof _[E] == "string" ? _[E]?.toLowerCase() : _[E])?.includes(p.toLowerCase()) && (w = !0);
289
+ return w;
290
+ }), (!r.value || !r.value.length) && (i.value = l("debouncedFilter.errors.invalid")), m.value = !1;
291
+ }
292
+ };
293
+ return {
294
+ loading: m,
295
+ error: v,
296
+ validationError: i,
297
+ results: r,
298
+ allRecords: c,
299
+ loadItems: A,
300
+ debouncedQueryChange: u
301
+ };
302
+ }
303
+ function Ke(e, n) {
304
+ const o = D(J, null), t = b(() => {
305
+ const a = g(e);
306
+ return (a.app === "kongManager" || !!(a.app === "konnect" && a.enableDeckConfig)) && Z(g(n));
307
+ }), s = b(() => {
308
+ const a = g(e), u = a.app === "konnect" && a.enableDeckConfig && typeof a.enableDeckConfig != "boolean" ? a.enableDeckConfig.customization : void 0;
309
+ if (u && !o) {
310
+ console.warn(S);
311
+ return;
312
+ }
313
+ return u;
314
+ }), l = b(() => {
315
+ const a = g(e);
316
+ return a.app === "konnect" && a.enableDeckConfig && typeof a.enableDeckConfig != "boolean" ? a.enableDeckConfig.calloutPreferenceKey : a.app === "kongManager" ? a.deckCalloutPreferenceKey : void 0;
317
+ });
318
+ return {
319
+ isDeckEnabled: t,
320
+ deckCustomizationOptions: s,
321
+ deckCalloutPreferenceKey: l
322
+ };
323
+ }
324
+ function Le(e, n) {
325
+ const o = D(J, null), t = b(() => {
326
+ const a = g(e);
327
+ return (a.app === "kongManager" || !!(a.app === "konnect" && a.enableDeckTab)) && Z(g(n));
328
+ }), s = b(() => {
329
+ const a = g(e), u = a.app === "konnect" && a.enableDeckTab && typeof a.enableDeckTab != "boolean" ? a.enableDeckTab.customization : void 0;
330
+ if (u && !o) {
331
+ console.warn(S);
332
+ return;
333
+ }
334
+ return u;
335
+ }), l = b(() => {
336
+ const a = g(e);
337
+ return a.app === "konnect" && a.enableDeckTab && typeof a.enableDeckTab != "boolean" ? a.enableDeckTab.calloutPreferenceKey : a.app === "kongManager" ? a.deckCalloutPreferenceKey : void 0;
338
+ });
339
+ return {
340
+ isDeckEnabled: t,
341
+ deckCustomizationOptions: s,
342
+ deckCalloutPreferenceKey: l
343
+ };
344
+ }
345
+ function Pe(e, n) {
346
+ const o = H(n), t = b(
347
+ () => e.apiBaseUrl.startsWith("/") ? new URL(`${window.location.origin}${o}`) : new URL(o)
348
+ );
349
+ return t.value.search = "", (s) => `${t.value.href}/${s}`;
350
+ }
351
+ function Re() {
352
+ const { i18n: { t: e } } = K();
353
+ return {
354
+ getErrorFieldsFromError: (t) => {
355
+ if (!t)
356
+ return {
357
+ messages: [e("errors.unexpected")],
358
+ fields: []
359
+ };
360
+ if (t?.response?.status === 401)
361
+ return {
362
+ messages: [],
363
+ fields: []
364
+ };
365
+ let s = [e("errors.unexpected")];
366
+ const l = [];
367
+ if (t?.response?.data) {
368
+ if (t.response.data.details?.length)
369
+ return s = [], t.response.data.details.forEach((a) => {
370
+ let u = e("errors.unexpected");
371
+ a.messages && Array.isArray(a.messages) && a.messages.length && (u = a.messages.join(", ")), a.field && l.push({ field: a.field, message: u }), s.push(`${a.field ?? ""} ${u}`);
372
+ }), { messages: s, fields: l };
373
+ if (t.response.data.message && Array.isArray(t.response.data.message))
374
+ return s = [], t.response.data.message.forEach((a) => {
375
+ if (a?.constraints) {
376
+ const u = Object.values(a.constraints).join(", ");
377
+ s.push(u), a.property && l.push({ field: a.property, message: u });
378
+ } else a?.property && a?.message ? (l.push({ field: a.property, message: a.message }), s.push(a.message)) : s.push(a);
379
+ }), { messages: s, fields: l };
380
+ if (typeof t.response.data.message == "string" || typeof t.response.data == "string")
381
+ return {
382
+ messages: [t.response.data.message],
383
+ fields: []
384
+ };
385
+ if (typeof t.response.data == "object")
386
+ return s = [], Object.keys(t.response.data).forEach((a) => {
387
+ l.push({ field: a, message: t.response.data[a] }), s.push(t.response.data[a]);
388
+ }), { messages: s, fields: l };
389
+ }
390
+ return {
391
+ messages: [t.message || e("errors.unexpected")],
392
+ fields: []
393
+ };
394
+ },
395
+ getMessageFromError: (t) => {
396
+ if (!t)
397
+ return e("errors.unexpected");
398
+ if (t?.response?.status === 401)
399
+ return console.warn("getMessageFromError: User auth token is expired or missing, returning empty message."), "";
400
+ if (t?.response?.data) {
401
+ if (t.response.data.detail)
402
+ return t.response.data.detail;
403
+ if (t.response.data.details?.length)
404
+ return t.response.data.details.map((s) => {
405
+ let l = e("errors.unexpected");
406
+ return s.messages && typeof s.messages == "object" && s.messages.length && (l = s.messages.join(", ")), s.field ? `${s.field} - ${l}` : l;
407
+ }).join("; ");
408
+ if (t.response.data.message) {
409
+ const { message: s } = t.response.data;
410
+ return Array.isArray(s) ? s[0]?.constraints ? Object.values(s[0].constraints)[0] : s[0] : s;
411
+ }
412
+ if (typeof t.response.data == "string")
413
+ return t.response.data;
414
+ if (typeof t.response.data == "object")
415
+ return Object.keys(t.response.data).map((s) => `${s} ${t.response.data[s]}`).join(", ");
416
+ }
417
+ return t.message || e("errors.unexpected");
418
+ }
419
+ };
420
+ }
421
+ function Te(e) {
422
+ const n = window.location.origin, o = n.endsWith("/") ? n : `${n}/`;
423
+ try {
424
+ const t = e.join("/"), s = `${o}${t}`, l = e.some((u) => u.trim() === "");
425
+ if (/^(https:\/\/(www\.)?([a-zA-Z0-9-]+\.){1,}[a-zA-Z]{2,}(:[0-9]+)?(\/[^\/]+)*)$|^(https|http):\/\/localhost(:[0-9]+)?(\/[^\/]+)*$/.test(s) && !l && new URL(s))
426
+ return `${o}${t}`;
427
+ throw new Error("Invalid url");
428
+ } catch (t) {
429
+ return console.warn("Failed to build valid URL:", t), "";
430
+ }
431
+ }
432
+ function ee(e, n) {
433
+ const o = b(() => {
434
+ const s = g(e);
435
+ return typeof s.isExactMatch == "boolean" ? s.isExactMatch : s.app === "konnect";
436
+ }), t = b(() => {
437
+ const s = g(n);
438
+ return s.startsWith("/") ? new URL(`${window.location.origin}${s}`) : new URL(s);
439
+ });
440
+ return (s) => {
441
+ const { page: l, pageSize: a, offset: u, sortColumnKey: m, sortColumnOrder: v, query: i } = s;
442
+ try {
443
+ let r = new URL(t.value.href);
444
+ if (o.value && i) {
445
+ const d = new URLSearchParams(t.value.search);
446
+ r.search = "", r = g(e).isExactMatch ? new URL(`${r.href}/${i}`) : new URL(`${r.href}?filter[name][contains]=${i}`), d.forEach((c, f) => r.searchParams.append(f, c));
447
+ } else
448
+ o.value || new URLSearchParams(i).forEach((d, c) => {
449
+ r.searchParams.append(c, d);
450
+ }), m && r.searchParams.append("sort_by", m), v === "desc" && r.searchParams.append("sort_desc", "1"), r.searchParams.append("size", String(a));
451
+ return u && l !== 1 && r.searchParams.append("offset", String(u)), r.href;
452
+ } catch (r) {
453
+ return console.error("RouteList(fetcher)", r), g(n);
454
+ }
455
+ };
456
+ }
457
+ const $ = /* @__PURE__ */ new Map();
458
+ function Ne(e, n, o) {
459
+ const t = y(!0), s = g(e), { axiosInstance: l } = T(s.axiosRequestConfig), a = ee(e, n), u = y({
460
+ status: I.Idle
461
+ }), m = async (r) => {
462
+ const d = g(o) || "data";
463
+ try {
464
+ u.value = t.value ? { status: I.InitialLoad } : { status: I.Loading }, t.value = !1;
465
+ let c = a(r);
466
+ c.includes("filter[name]") && (c = `${c}&page[size]=${r.pageSize}&page[number]=${r.page}`);
467
+ const f = await l.get(c);
468
+ if (f.status >= 400)
469
+ throw f;
470
+ const h = f.data, A = d && d.replace(/[^\w-_]/gi, "");
471
+ let C;
472
+ h[A] ? C = Array.isArray(h[A]) ? h[A] : [h[A]] : Array.isArray(h) ? C = h : C = Object.keys(h).length ? [h] : [];
473
+ const x = {
474
+ data: C,
475
+ total: C.length,
476
+ ...h.offset ? {
477
+ pagination: {
478
+ offset: h.offset
479
+ }
480
+ } : null
481
+ };
482
+ return x.data.length === 0 && !r.query ? u.value = {
483
+ status: I.NoRecords,
484
+ response: x
485
+ } : u.value = {
486
+ status: I.Idle,
487
+ response: x
488
+ }, x;
489
+ } catch (c) {
490
+ const f = {
491
+ data: [],
492
+ total: 0
493
+ };
494
+ return r.query && (c.response?.status === 404 || c.status === 404) ? (u.value = {
495
+ status: I.NoResults,
496
+ response: f,
497
+ error: c.response ? c : { response: c }
498
+ }, f) : (u.value = {
499
+ status: I.Error,
500
+ response: f,
501
+ error: c.response ? c : { response: c }
502
+ }, f);
503
+ }
504
+ }, v = s.cacheIdentifier, i = te(v);
505
+ return { fetcher: m, fetcherState: u, fetcherCacheKey: i };
506
+ }
507
+ function te(e) {
508
+ if (e) {
509
+ let n = $.get(e);
510
+ return n || (n = y(1), $.set(e, n)), n;
511
+ }
512
+ return y(1);
513
+ }
514
+ function $e() {
515
+ const e = (t, s = "_") => t ? t.split(s).map((l) => l.toLowerCase() === "id" ? l.toUpperCase() : l.charAt(0).toUpperCase() + l.substring(1)).join(" ") : "", n = /(?:^|[\s-:'"])\w/g;
516
+ return {
517
+ capitalize: (t) => t ? t.replace(n, (s) => s.toUpperCase()) : "",
518
+ convertKeyToTitle: e
519
+ };
520
+ }
521
+ const se = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i, U = (e) => {
522
+ if (typeof e != "string")
523
+ throw new TypeError("Invalid argument expected string");
524
+ const n = e.match(se);
525
+ if (!n)
526
+ throw new Error(`Invalid argument not valid semver ('${e}' received)`);
527
+ return n.shift(), n;
528
+ }, B = (e) => e === "*" || e === "x" || e === "X", j = (e) => {
529
+ const n = parseInt(e, 10);
530
+ return isNaN(n) ? e : n;
531
+ }, Ue = (e, n) => typeof e != typeof n ? [String(e), String(n)] : [e, n], Be = (e, n) => {
532
+ if (B(e) || B(n))
533
+ return 0;
534
+ const [o, t] = Ue(j(e), j(n));
535
+ return o > t ? 1 : o < t ? -1 : 0;
536
+ }, F = (e, n) => {
537
+ for (let o = 0; o < Math.max(e.length, n.length); o++) {
538
+ const t = Be(e[o] || "0", n[o] || "0");
539
+ if (t !== 0)
540
+ return t;
541
+ }
542
+ return 0;
543
+ }, je = (e, n) => {
544
+ const o = U(e), t = U(n), s = o.pop(), l = t.pop(), a = F(o, t);
545
+ return a !== 0 ? a : s && l ? F(s.split("."), l.split(".")) : s || l ? s ? -1 : 1 : 0;
546
+ }, G = (e, n, o) => {
547
+ Fe(o);
548
+ const t = je(e, n);
549
+ return ae[o].includes(t);
550
+ }, ae = {
551
+ ">": [1],
552
+ ">=": [0, 1],
553
+ "=": [0],
554
+ "<=": [-1, 0],
555
+ "<": [-1],
556
+ "!=": [-1, 1]
557
+ }, z = Object.keys(ae), Fe = (e) => {
558
+ if (typeof e != "string")
559
+ throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);
560
+ if (z.indexOf(e) === -1)
561
+ throw new Error(`Invalid operator, expected one of ${z.join("|")}`);
562
+ }, Ge = (e) => typeof e == "string" && /^[v\d]/.test(e) && se.test(e);
563
+ function ze(e) {
564
+ const { gatewayInfo: n, supportedRange: o } = e;
565
+ if (!n)
566
+ return !0;
567
+ const { edition: t, version: s } = n;
568
+ if (!Ge(s))
569
+ return console.error("Invalid version"), !1;
570
+ const l = o[t];
571
+ if (!l)
572
+ return !1;
573
+ const [a, u] = l;
574
+ return !(a && G(s, a, "<") || u && G(s, u, ">"));
575
+ }
576
+ function Ve(e) {
577
+ const n = y(0), o = y(0), t = y(!1);
578
+ return re(e, (l) => {
579
+ l && !t.value && (n.value = l.offsetWidth, o.value = l.scrollWidth, t.value = !0);
580
+ }), {
581
+ isTruncated: b(() => n.value < o.value)
582
+ };
583
+ }
584
+ function He() {
585
+ const { i18n: { t: e } } = K();
586
+ return {
587
+ utf8Name: (o) => /^[\p{N}\p{L}.\-_~]*$/u.test(o) ? "" : e("validationErrors.utf8Name")
588
+ };
589
+ }
590
+ const O = /* @__PURE__ */ Symbol("schema"), We = (e) => {
591
+ W(O, e);
592
+ }, Ye = () => D(O, void 0), Je = (e) => {
593
+ const o = D(O, void 0)?.value?.fields?.find((s) => Object.keys(s)[0] === e), t = oe(o?.[e]);
594
+ return W(O, t), t;
595
+ };
596
+ function Se(e) {
597
+ let n = "";
598
+ const o = y(!1), t = y(null), s = b(() => {
599
+ let a;
600
+ return o.value ? a = !0 : t.value ? a = t.value.hasData || e && g(e) : a = !1, !a;
601
+ });
602
+ return {
603
+ tableState: t,
604
+ hasRecords: o,
605
+ hideTableToolbar: s,
606
+ handleStateChange: (a) => {
607
+ a.hasData ? o.value = !0 : a.state === "success" && !a.hasData && (!e || !n) && (o.value = !1), e && (n = g(e)), t.value = { ...a };
608
+ }
609
+ };
610
+ }
611
+ function ne() {
612
+ const e = D(ce.MANAGED_BY, !1);
613
+ return b(() => !!g(e));
614
+ }
615
+ const Qe = (e) => e?.service || e?.tool || null, Xe = "Custom", V = {
616
+ "terraform-provider-konnect": "Terraform",
617
+ deck: "decK",
618
+ "kong-gateway-operator": "Kong Gateway Operator",
619
+ "gw-manager": "Konnect UI",
620
+ "ai-manager": "AI Manager",
621
+ "dev-portal": "Dev Portal"
622
+ }, dt = (e) => {
623
+ const n = Qe(e);
624
+ return n ? Object.hasOwn(V, n) ? V[n] : Xe : null;
625
+ };
626
+ let P;
627
+ const Ze = () => (P === void 0 && (P = Y("en-us", Q).t("baseConfigCard.commonFields.managed_by_label")), P);
628
+ function qe(e, n = {}) {
629
+ const o = ne();
630
+ return {
631
+ defaultTablePreferences: {
632
+ columnVisibility: {
633
+ managed_by: !1,
634
+ ...n
635
+ }
636
+ },
637
+ tableHeaders: b(() => ({
638
+ ...g(e),
639
+ ...o.value ? { managed_by: { label: Ze(), sortable: !1 } } : {}
640
+ }))
641
+ };
642
+ }
643
+ const ft = {
644
+ useAxios: T,
645
+ useDebouncedFilter: Oe,
646
+ useDeleteUrlBuilder: Pe,
647
+ useBaseEntityDeckOptions: Ke,
648
+ useBaseFormDeckOptions: Le,
649
+ useErrors: Re,
650
+ useExternalLinkCreator: Te,
651
+ useFetcher: Ne,
652
+ useFetcherCacheKey: te,
653
+ useFetchUrlBuilder: ee,
654
+ useHelpers: q,
655
+ useStringHelpers: $e,
656
+ useI18n: K,
657
+ useGatewayFeatureSupported: ze,
658
+ useTruncationDetector: Ve,
659
+ useValidators: He,
660
+ useSchema: Ye,
661
+ useSchemaProvider: We,
662
+ useSubSchema: Je,
663
+ useTableState: Se,
664
+ useManagedByEnabled: ne,
665
+ useManagedByColumn: qe
666
+ }, pt = (e, n) => {
667
+ const o = e.__vccOpts || e;
668
+ for (const [t, s] of n)
669
+ o[t] = s;
670
+ return o;
671
+ };
672
+ export {
673
+ R as C,
674
+ J as D,
675
+ ct as E,
676
+ I as F,
677
+ lt as I,
678
+ at as P,
679
+ rt as S,
680
+ pt as _,
681
+ nt as a,
682
+ X as b,
683
+ ft as c,
684
+ it as d,
685
+ S as e,
686
+ ut as f,
687
+ dt as g,
688
+ Me as h,
689
+ ot as i,
690
+ ce as j,
691
+ De as k,
692
+ Ze as l,
693
+ Z as m,
694
+ de as n
695
+ };