@kong-ui-public/analytics-metric-provider 9.1.7-pr.2345.670f75491.0 → 9.1.7-pr.2346.6852d85bd.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import type { ExploreFilterAll, QueryDatasource, Timeframe } from '@kong-ui-public/analytics-utilities';
1
+ import type { ExploreFilterAll, QueryDatasource } from '@kong-ui-public/analytics-utilities';
2
2
  type __VLS_Props = {
3
3
  render: 'global' | 'single' | 'multi' | 'latencyCard';
4
4
  datasource?: QueryDatasource;
@@ -9,7 +9,6 @@ type __VLS_Props = {
9
9
  containerTitle?: string;
10
10
  description?: string;
11
11
  percentileLatency?: boolean;
12
- overrideTimeframe?: Timeframe;
13
12
  };
14
13
  declare const _default: import("vue").DefineComponent<__VLS_Props, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
15
14
  refreshInterval: number;
@@ -17,7 +16,6 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, void, {}, {},
17
16
  datasource: QueryDatasource;
18
17
  additionalFilter: ExploreFilterAll[];
19
18
  queryReady: boolean;
20
- overrideTimeframe: Timeframe;
21
19
  longCardTitles: boolean;
22
20
  containerTitle: string;
23
21
  percentileLatency: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsTestHarness.vue.d.ts","sourceRoot":"","sources":["../../../src/components/MetricsTestHarness.vue"],"names":[],"mappings":"AAmGA,OAAO,KAAK,EAAE,gBAAgB,EAA+B,eAAe,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAGpI,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAA;IACrD,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACrC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,SAAS,CAAA;CAC9B,CAAC;;qBAPkB,MAAM;iBAIV,MAAM;gBANP,eAAe;sBAGT,gBAAgB,EAAE;gBAFxB,OAAO;uBAOA,SAAS;oBAJZ,OAAO;oBACP,MAAM;uBAEH,OAAO;;AAwM7B,wBAKG"}
1
+ {"version":3,"file":"MetricsTestHarness.vue.d.ts","sourceRoot":"","sources":["../../../src/components/MetricsTestHarness.vue"],"names":[],"mappings":"AAiGA,OAAO,KAAK,EAAE,gBAAgB,EAA+B,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAGzH,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAA;IACrD,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACrC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAC;;qBANkB,MAAM;iBAIV,MAAM;gBANP,eAAe;sBAGT,gBAAgB,EAAE;gBAFxB,OAAO;oBAGH,OAAO;oBACP,MAAM;uBAEH,OAAO;;AAqM7B,wBAKG"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMetricFetcher.d.ts","sourceRoot":"","sources":["../../../src/composables/useMetricFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAKpD,eAAO,MAAM,WAAW,eAAoB,CAAA;AAC5C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;AAM5G,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,GAAG,EAAE,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;IACrC,MAAM,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACvC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACxB;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,GAAG,0BAA0B,CAiDzG;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAuGlF"}
1
+ {"version":3,"file":"useMetricFetcher.d.ts","sourceRoot":"","sources":["../../../src/composables/useMetricFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAKpD,eAAO,MAAM,WAAW,eAAoB,CAAA;AAC5C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;AAM5G,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,GAAG,EAAE,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;IACrC,MAAM,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACvC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACxB;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,GAAG,0BAA0B,CAiDzG;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,aAAa,CA2FlF"}
@@ -1,10 +1,9 @@
1
1
  import type { CyHttpMessages } from 'cypress/types/net-stubbing';
2
- import type { ExploreQuery, ExploreResultV4, Timeframe } from '@kong-ui-public/analytics-utilities';
2
+ import type { ExploreQuery, ExploreResultV4 } from '@kong-ui-public/analytics-utilities';
3
3
  export interface MockOptions {
4
4
  dimensionNames?: string[];
5
5
  injectErrors?: 'latency' | 'traffic' | 'all';
6
6
  deterministic?: boolean;
7
- timeFrame?: Timeframe;
8
7
  }
9
8
  export declare const mockExploreResponseFromCypress: (req: CyHttpMessages.IncomingHttpRequest, opts?: MockOptions) => void;
10
9
  export declare const mockExploreResponse: (body: ExploreQuery, opts?: MockOptions) => ExploreResultV4;
@@ -1 +1 @@
1
- {"version":3,"file":"mockExploreResponse.d.ts","sourceRoot":"","sources":["../../src/mockExploreResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAGf,SAAS,EACV,MAAM,qCAAqC,CAAA;AAM5C,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,CAAA;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,eAAO,MAAM,8BAA8B,GACzC,KAAK,cAAc,CAAC,mBAAmB,EACvC,OAAO,WAAW,SAQnB,CAAA;AAQD,eAAO,MAAM,mBAAmB,GAC9B,MAAM,YAAY,EAClB,OAAO,WAAW,KAsFb,eACN,CAAA"}
1
+ {"version":3,"file":"mockExploreResponse.d.ts","sourceRoot":"","sources":["../../src/mockExploreResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAGhB,MAAM,qCAAqC,CAAA;AAM5C,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,CAAA;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,eAAO,MAAM,8BAA8B,GACzC,KAAK,cAAc,CAAC,mBAAmB,EACvC,OAAO,WAAW,SAQnB,CAAA;AAQD,eAAO,MAAM,mBAAmB,GAC9B,MAAM,YAAY,EAClB,OAAO,WAAW,KAsFb,eACN,CAAA"}
@@ -1,4 +1,4 @@
1
- import { ref as H, watchEffect as Fe, computed as g, getCurrentInstance as xe, reactive as qe, onMounted as Ue, onUnmounted as ze, watch as Ke, isReadonly as Pe, toRefs as $e, defineComponent as Q, inject as Se, toRef as X, provide as Be, renderSlot as Ie, resolveComponent as Ae, createElementBlock as S, openBlock as T, normalizeClass as K, createElementVNode as x, createCommentVNode as V, createBlock as q, unref as _, resolveDynamicComponent as re, withCtx as ye, createTextVNode as De, toDisplayString as w, createVNode as M, Fragment as he, renderList as Xe, mergeProps as Ge, normalizeProps as je, guardReactiveProps as He } from "vue";
1
+ import { ref as H, watchEffect as Me, computed as h, getCurrentInstance as xe, reactive as qe, onMounted as Ue, onUnmounted as ze, watch as Ke, isReadonly as Pe, toRefs as $e, defineComponent as Q, inject as _e, toRef as X, provide as Be, renderSlot as Ie, resolveComponent as Ae, createElementBlock as _, openBlock as T, normalizeClass as K, createElementVNode as x, createCommentVNode as V, createBlock as q, unref as E, resolveDynamicComponent as re, withCtx as ye, createTextVNode as De, toDisplayString as w, createVNode as F, Fragment as he, renderList as Xe, mergeProps as Ge, normalizeProps as je, guardReactiveProps as He } from "vue";
2
2
  import { stripUnknownFilters as Ye, TimeframeKeys as se, queryableExploreDimensions as Qe, TimePeriods as be, DeltaQueryTime as We, UnaryQueryTime as Je } from "@kong-ui-public/analytics-utilities";
3
3
  import { createI18n as Ze, i18nTComponent as er } from "@kong-ui-public/i18n";
4
4
  import "axios";
@@ -26,9 +26,7 @@ const cr = {
26
26
  p99Latency: "P99 latency"
27
27
  }
28
28
  }, fr = {
29
- custom_days: "vs previous {numDays, plural, =1 {day} other {# days}}",
30
- custom_hours: "vs previous {numHours, plural, =1 {hour} other {# hours}}",
31
- custom_minutes: "vs previous {numMinutes, plural, =1 {minute} other {# minutes}}",
29
+ custom: "vs previous {numDays, plural, =1 {day} other {# days}}",
32
30
  "15m": "vs previous 15 minutes",
33
31
  "1h": "vs previous hour",
34
32
  "6h": "vs previous 6 hours",
@@ -67,7 +65,7 @@ function Rr(e = H({}), r, t, o = pr) {
67
65
  "PENDING"
68
66
  /* PENDING */
69
67
  );
70
- return Fe(() => {
68
+ return Me(() => {
71
69
  const n = o(e.value);
72
70
  if (e.value && n && t.value) {
73
71
  a.value = "VALIDATING_HAS_DATA";
@@ -117,8 +115,8 @@ function Tr(e, r) {
117
115
  });
118
116
  }
119
117
  function Er(e) {
120
- e.queryReady === void 0 && (e.queryReady = g(() => !0));
121
- const { i18n: r } = N.useI18n(), t = g(() => {
118
+ e.queryReady === void 0 && (e.queryReady = h(() => !0));
119
+ const { i18n: r } = N.useI18n(), t = h(() => {
122
120
  var u, d;
123
121
  return {
124
122
  metrics: e.metrics.value,
@@ -130,12 +128,12 @@ function Er(e) {
130
128
  ...(d = e.filter.value) != null && d.length ? { filters: e.filter.value } : {},
131
129
  time_range: e.timeframe.value.v4Query(e.tz.value)
132
130
  };
133
- }), o = g(() => {
134
- var d, v, h, R;
131
+ }), o = h(() => {
132
+ var d, v, g, R;
135
133
  if (!((d = e.queryReady) != null && d.value))
136
134
  return null;
137
135
  const u = (v = e.filter) != null && v.value ? JSON.stringify(e.filter.value) : "";
138
- return `metric-fetcher-${e.timeframe.value.cacheKey()}-${(h = e.dimensions) == null ? void 0 : h.join("-")}-${(R = e.metrics.value) == null ? void 0 : R.join("-")}-${u}-${e.refreshCounter.value}`;
136
+ return `metric-fetcher-${e.timeframe.value.cacheKey()}-${(g = e.dimensions) == null ? void 0 : g.join("-")}-${(R = e.metrics.value) == null ? void 0 : R.join("-")}-${u}-${e.refreshCounter.value}`;
139
137
  }), { response: a, error: n, isValidating: l } = N.useRequest(
140
138
  () => o.value,
141
139
  () => e.queryFn({
@@ -149,23 +147,23 @@ function Er(e) {
149
147
  revalidateOnFocus: !1,
150
148
  errorRetryCount: yr
151
149
  }
152
- ), { state: c, swrvState: f } = Rr(a, n, l), i = g(() => {
153
- var u, d, v, h, R, m, E;
154
- return !((d = (u = a.value) == null ? void 0 : u.data) != null && d.length) || !((h = (v = a.value) == null ? void 0 : v.meta) != null && h.display) || !((E = (m = (R = a.value) == null ? void 0 : R.meta) == null ? void 0 : m.metric_names) != null && E.length) ? { current: {}, previous: {} } : Tr(a.value, e.withTrend.value);
155
- }), s = g(() => {
150
+ ), { state: c, swrvState: f } = Rr(a, n, l), i = h(() => {
151
+ var u, d, v, g, R, m, C;
152
+ return !((d = (u = a.value) == null ? void 0 : u.data) != null && d.length) || !((g = (v = a.value) == null ? void 0 : v.meta) != null && g.display) || !((C = (m = (R = a.value) == null ? void 0 : R.meta) == null ? void 0 : m.metric_names) != null && C.length) ? { current: {}, previous: {} } : Tr(a.value, e.withTrend.value);
153
+ }), s = h(() => {
156
154
  var u, d;
157
155
  if (e.timeframe.value.key === "custom") {
158
156
  if (!((d = (u = a.value) == null ? void 0 : u.meta) != null && d.start_ms))
159
157
  return "";
160
- const { start_ms: v, end_ms: h } = a.value.meta;
161
- let R = (h - v) / (1e3 * 60 * 60 * 24), m = (h - v) / (1e3 * 60 * 60), E = (h - v) / (1e3 * 60);
162
- return e.withTrend.value && (R /= 2, m /= 2, E /= 2), R >= 1 ? r.t("trendRange.custom_days", { numDays: R }) : m >= 1 ? r.t("trendRange.custom_hours", { numHours: m }) : E >= 1 ? r.t("trendRange.custom_minutes", { numMinutes: E }) : r.t("trendRange.custom_days", { numDays: Math.round(R) });
158
+ const { start_ms: v, end_ms: g } = a.value.meta;
159
+ let R = (g - v) / (1e3 * 60 * 60 * 24);
160
+ return e.withTrend.value && (R /= 2), r.t("trendRange.custom", { numDays: Math.round(R) });
163
161
  } else
164
162
  return e.withTrend.value ? r.t(`trendRange.${e.timeframe.value.key}`) : "";
165
163
  });
166
164
  return {
167
- isLoading: g(() => f.PENDING === c.value),
168
- hasError: g(() => f.ERROR === c.value),
165
+ isLoading: h(() => f.PENDING === c.value),
166
+ hasError: h(() => f.ERROR === c.value),
169
167
  raw: a,
170
168
  mapped: i,
171
169
  trendRange: s
@@ -175,7 +173,7 @@ const P = (e, r, t = L, o) => (o ?? [L]).reduce((n, l) => {
175
173
  const c = e[r][t];
176
174
  return c ? n + (c[l] || 0) : n;
177
175
  }, 0);
178
- function _r(e) {
176
+ function Cr(e) {
179
177
  const {
180
178
  cardType: r,
181
179
  title: t,
@@ -186,7 +184,7 @@ function _r(e) {
186
184
  formatValueFn: c,
187
185
  trendRange: f
188
186
  } = e;
189
- return g(() => {
187
+ return h(() => {
190
188
  let i = 0, s = 0;
191
189
  if (a != null && a.value)
192
190
  try {
@@ -212,7 +210,7 @@ function _r(e) {
212
210
  });
213
211
  }
214
212
  var ne = /* @__PURE__ */ new WeakMap(), Re = 0;
215
- function Cr(e) {
213
+ function Sr(e) {
216
214
  if (!e.length)
217
215
  return "";
218
216
  for (var r = "arg", t = 0; t < e.length; ++t) {
@@ -221,14 +219,14 @@ function Cr(e) {
221
219
  }
222
220
  return r;
223
221
  }
224
- function Sr(e) {
222
+ function _r(e) {
225
223
  if (typeof e == "function")
226
224
  try {
227
225
  e = e();
228
226
  } catch {
229
227
  e = "";
230
228
  }
231
- return Array.isArray(e) ? e = Cr(e) : e = String(e || ""), e;
229
+ return Array.isArray(e) ? e = Sr(e) : e = String(e || ""), e;
232
230
  }
233
231
  var ue = (
234
232
  /** @class */
@@ -237,7 +235,7 @@ var ue = (
237
235
  r === void 0 && (r = 0), this.items = /* @__PURE__ */ new Map(), this.ttl = r;
238
236
  }
239
237
  return e.prototype.serializeKey = function(r) {
240
- return Sr(r);
238
+ return _r(r);
241
239
  }, e.prototype.get = function(r) {
242
240
  var t = this.serializeKey(r);
243
241
  return this.items.get(t);
@@ -449,8 +447,8 @@ var Te = function(e, r, t, o) {
449
447
  return d.key === e;
450
448
  }), s.forEach(function(d, v) {
451
449
  typeof f.data < "u" && (d.data = f.data), d.error = f.error, d.isValidating = f.isValidating, d.isLoading = f.isValidating;
452
- var h = v === s.length - 1;
453
- h || delete s[v];
450
+ var g = v === s.length - 1;
451
+ g || delete s[v];
454
452
  }), s = s.filter(Boolean)), [2, f];
455
453
  }
456
454
  });
@@ -474,13 +472,13 @@ function Vr() {
474
472
  isLoading: !0,
475
473
  key: null
476
474
  }));
477
- var h = function(p, y) {
475
+ var g = function(p, y) {
478
476
  return U(e, void 0, void 0, function() {
479
- var I, C, A, F, W, de, J, fe = this;
477
+ var I, S, A, M, W, de, J, fe = this;
480
478
  return z(this, function(Z) {
481
479
  switch (Z.label) {
482
480
  case 0:
483
- return I = v.data === void 0, C = d.value, C ? (A = n.cache.get(C), F = A && A.data, v.isValidating = !0, v.isLoading = !F, F && (v.data = F.data, v.error = F.error), W = p || a, !W || !n.isDocumentVisible() && !I || (y == null ? void 0 : y.forceRevalidate) !== void 0 && !(y != null && y.forceRevalidate) ? (v.isValidating = !1, v.isLoading = !1, [
481
+ return I = v.data === void 0, S = d.value, S ? (A = n.cache.get(S), M = A && A.data, v.isValidating = !0, v.isLoading = !M, M && (v.data = M.data, v.error = M.error), W = p || a, !W || !n.isDocumentVisible() && !I || (y == null ? void 0 : y.forceRevalidate) !== void 0 && !(y != null && y.forceRevalidate) ? (v.isValidating = !1, v.isLoading = !1, [
484
482
  2
485
483
  /*return*/
486
484
  ]) : A && (de = !!(Date.now() - A.createdAt >= n.dedupingInterval || y != null && y.forceRevalidate), !de) ? (v.isValidating = !1, v.isLoading = !1, [
@@ -492,22 +490,22 @@ function Vr() {
492
490
  return z(this, function(B) {
493
491
  switch (B.label) {
494
492
  case 0:
495
- return k = ie.get(C), k ? [3, 2] : (ve = Array.isArray(C) ? C : [C], ee = W.apply(void 0, wr([], br(ve), !1)), ie.set(C, ee, n.dedupingInterval), [4, Te(C, ee, n.cache, u)]);
493
+ return k = ie.get(S), k ? [3, 2] : (ve = Array.isArray(S) ? S : [S], ee = W.apply(void 0, wr([], br(ve), !1)), ie.set(S, ee, n.dedupingInterval), [4, Te(S, ee, n.cache, u)]);
496
494
  case 1:
497
495
  return B.sent(), [3, 4];
498
496
  case 2:
499
- return [4, Te(C, k.data, n.cache, u)];
497
+ return [4, Te(S, k.data, n.cache, u)];
500
498
  case 3:
501
499
  B.sent(), B.label = 4;
502
500
  case 4:
503
- return v.isValidating = !1, v.isLoading = !1, ie.delete(C), v.error !== void 0 && (me = !l && n.shouldRetryOnError && (y ? y.shouldRetryOnError : !0), me && Lr(h, y ? y.errorRetryCount : 1, n)), [
501
+ return v.isValidating = !1, v.isLoading = !1, ie.delete(S), v.error !== void 0 && (me = !l && n.shouldRetryOnError && (y ? y.shouldRetryOnError : !0), me && Lr(g, y ? y.errorRetryCount : 1, n)), [
504
502
  2
505
503
  /*return*/
506
504
  ];
507
505
  }
508
506
  });
509
507
  });
510
- }, F && n.revalidateDebounce ? (setTimeout(function() {
508
+ }, M && n.revalidateDebounce ? (setTimeout(function() {
511
509
  return U(fe, void 0, void 0, function() {
512
510
  return z(this, function(k) {
513
511
  switch (k.label) {
@@ -542,7 +540,7 @@ function Vr() {
542
540
  }, R = function() {
543
541
  return U(e, void 0, void 0, function() {
544
542
  return z(this, function(p) {
545
- return [2, h(null, { shouldRetryOnError: !1 })];
543
+ return [2, g(null, { shouldRetryOnError: !1 })];
546
544
  });
547
545
  });
548
546
  }, m = null;
@@ -552,7 +550,7 @@ function Vr() {
552
550
  return z(this, function(y) {
553
551
  switch (y.label) {
554
552
  case 0:
555
- return !v.error && n.isOnline() ? [4, h()] : [3, 2];
553
+ return !v.error && n.isOnline() ? [4, g()] : [3, 2];
556
554
  case 1:
557
555
  return y.sent(), [3, 3];
558
556
  case 2:
@@ -576,16 +574,16 @@ function Vr() {
576
574
  });
577
575
  try {
578
576
  Ke(d, function(p) {
579
- Pe(d) || (d.value = p), v.key = p, v.isValidating = !!p, Or(d.value, v, u), !s && !c && d.value && h(), c = !1;
577
+ Pe(d) || (d.value = p), v.key = p, v.isValidating = !!p, Or(d.value, v, u), !s && !c && d.value && g(), c = !1;
580
578
  }, {
581
579
  immediate: !0
582
580
  });
583
581
  } catch {
584
582
  }
585
- var E = b(b({}, $e(v)), { mutate: function(p, y) {
586
- return h(p, b(b({}, y), { forceRevalidate: !0 }));
583
+ var C = b(b({}, $e(v)), { mutate: function(p, y) {
584
+ return g(p, b(b({}, y), { forceRevalidate: !0 }));
587
585
  } });
588
- return E;
586
+ return C;
589
587
  }
590
588
  function kr(e) {
591
589
  return e !== null && typeof e == "object" && typeof e.then == "function";
@@ -603,7 +601,7 @@ function Nr(e, r, t) {
603
601
  ...t
604
602
  });
605
603
  return {
606
- data: g(() => o.value),
604
+ data: h(() => o.value),
607
605
  response: o,
608
606
  error: a,
609
607
  isValidating: n,
@@ -612,10 +610,10 @@ function Nr(e, r, t) {
612
610
  }
613
611
  const N = {
614
612
  useI18n: mr,
615
- useMetricCardBuilder: _r,
613
+ useMetricCardBuilder: Cr,
616
614
  useMetricFetcher: Er,
617
615
  useRequest: Nr
618
- }, Ne = Symbol("METRICS_PROVIDER_KEY"), Mr = (e) => {
616
+ }, Ne = Symbol("METRICS_PROVIDER_KEY"), Fr = (e) => {
619
617
  const {
620
618
  datasource: r,
621
619
  dimension: t,
@@ -632,7 +630,7 @@ const N = {
632
630
  } = e;
633
631
  if (o && !t)
634
632
  throw new Error("Must provide a dimension if filtering by a value");
635
- const v = !!(t && o), h = !!(t && !o), R = g(() => {
633
+ const v = !!(t && o), g = !!(t && !o), R = h(() => {
636
634
  const I = [];
637
635
  return v && I.push({
638
636
  field: t,
@@ -655,14 +653,14 @@ const N = {
655
653
  timeframe: l,
656
654
  tz: c,
657
655
  // Traffic and error rate cards can't query trend if multiple entities are expected.
658
- withTrend: g(() => f.value && !h),
656
+ withTrend: h(() => f.value && !g),
659
657
  refreshInterval: i,
660
658
  queryFn: u,
661
659
  abortController: s,
662
660
  refreshCounter: e.refreshCounter
663
- }, E = {
661
+ }, C = {
664
662
  datasource: r,
665
- metrics: g(() => [
663
+ metrics: h(() => [
666
664
  d.value ? "response_latency_average" : "response_latency_p99"
667
665
  ]),
668
666
  // To keep single-entity queries consistent, don't bother querying the dimension for latency
@@ -673,12 +671,12 @@ const N = {
673
671
  timeframe: l,
674
672
  tz: c,
675
673
  // Don't query latency trends in the multi-entity case: it's possible, but wasteful.
676
- withTrend: g(() => f.value && !h),
674
+ withTrend: h(() => f.value && !g),
677
675
  refreshInterval: i,
678
676
  queryFn: u,
679
677
  abortController: s,
680
678
  refreshCounter: e.refreshCounter
681
- }, p = N.useMetricFetcher(m), y = N.useMetricFetcher(E);
679
+ }, p = N.useMetricFetcher(m), y = N.useMetricFetcher(C);
682
680
  return {
683
681
  trafficData: p,
684
682
  latencyData: y
@@ -706,13 +704,13 @@ const N = {
706
704
  const r = e;
707
705
  if (r.dimension && Qe.findIndex((v) => v === r.dimension) === -1)
708
706
  throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);
709
- const t = Se(gr);
707
+ const t = _e(gr);
710
708
  let o;
711
709
  t ? o = t.queryFn : (console.warn("Analytics dashboards require a query bridge supplied via provide / inject."), console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"), console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/analytics-metric-provider/README.md#requirements"), o = () => Promise.reject(new Error("Query bridge required")));
712
- const a = rr(), n = g(() => !0), l = g(() => !a.loading && r.queryReady), c = g(() => r.tz ? r.tz : new Intl.DateTimeFormat().resolvedOptions().timeZone), f = g(() => r.datasource ? r.datasource : "basic"), i = g(() => r.overrideTimeframe || be.get(se.SEVEN_DAY)), s = g(() => !r.percentileLatency), {
710
+ const a = rr(), n = h(() => !0), l = h(() => !a.loading && r.queryReady), c = h(() => r.tz ? r.tz : new Intl.DateTimeFormat().resolvedOptions().timeZone), f = h(() => r.datasource ? r.datasource : "basic"), i = h(() => r.overrideTimeframe || be.get(se.SEVEN_DAY)), s = h(() => !r.percentileLatency), {
713
711
  trafficData: u,
714
712
  latencyData: d
715
- } = Mr({
713
+ } = Fr({
716
714
  datasource: f,
717
715
  dimension: r.dimension,
718
716
  dimensionFilterValue: r.filterValue,
@@ -737,24 +735,24 @@ const N = {
737
735
  hasTrendAccess: n,
738
736
  longCardTitles: r.longCardTitles,
739
737
  averageLatencies: s
740
- }), (v, h) => Ie(v.$slots, "default", {
738
+ }), (v, g) => Ie(v.$slots, "default", {
741
739
  hasTrendAccess: n.value,
742
740
  timeframe: i.value
743
741
  });
744
742
  }
745
743
  });
746
- function Fr(e) {
744
+ function Mr(e) {
747
745
  return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
748
746
  }
749
- var Me = { exports: {} };
747
+ var Fe = { exports: {} };
750
748
  (function(e) {
751
749
  (function() {
752
750
  function r(i, s) {
753
751
  if (s.separator === !1 || i < 1e3)
754
752
  return i.toString();
755
753
  var u = typeof s.separator == "string" ? s.separator : ",", d = [], v = Math.round(i).toString().split("");
756
- return v.reverse().forEach(function(h, R) {
757
- R && R % 3 === 0 && d.push(u), d.push(h);
754
+ return v.reverse().forEach(function(g, R) {
755
+ R && R % 3 === 0 && d.push(u), d.push(g);
758
756
  }), d.reverse().join("");
759
757
  }
760
758
  function t(i, s, u) {
@@ -772,14 +770,14 @@ var Me = { exports: {} };
772
770
  }
773
771
  f.addCommas = r, e.exports = f;
774
772
  })();
775
- })(Me);
776
- var xr = Me.exports;
777
- const qr = /* @__PURE__ */ Fr(xr);
773
+ })(Fe);
774
+ var xr = Fe.exports;
775
+ const qr = /* @__PURE__ */ Mr(xr);
778
776
  var O = /* @__PURE__ */ ((e) => (e.GENERIC_COUNT = "GenericCount", e.TRAFFIC = "Traffic", e.ERROR_RATE = "ErrorRate", e.LATENCY = "Latency", e))(O || {}), D = /* @__PURE__ */ ((e) => (e.Small = "sm", e.Medium = "md", e.Large = "lg", e.ExtraLarge = "xl", e))(D || {});
779
777
  const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
780
778
  let o = !r || Number(e.toFixed(Ee)) === 0 ? 0 : Number(e.toFixed(Ee)) > 0 ? 1 : -1;
781
779
  return t && (o *= -1), o;
782
- }, zr = (e, r, t) => r ? `${Math.abs(e * 100).toFixed(le)}%` : t, Kr = (e, r) => r === 0 ? 0 : e / r - 1, Pr = (e, r = !1) => (r && (e *= -1), e > 0 ? tr : e < 0 ? nr : we), $r = "#ad000e", oe = "#6c7489", _e = "#52596e", Br = "#007d60", G = "16px", Xr = "20px", Gr = {
780
+ }, zr = (e, r, t) => r ? `${Math.abs(e * 100).toFixed(le)}%` : t, Kr = (e, r) => r === 0 ? 0 : e / r - 1, Pr = (e, r = !1) => (r && (e *= -1), e > 0 ? tr : e < 0 ? nr : we), $r = "#ad000e", oe = "#6c7489", Ce = "#52596e", Br = "#007d60", G = "16px", Xr = "20px", Gr = {
783
781
  key: 0,
784
782
  class: "metricscard-description"
785
783
  }, jr = { class: "metricscard-valuetrend" }, Hr = {
@@ -872,23 +870,23 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
872
870
  const f = {
873
871
  red: `var(--kui-color-text-danger-strong, ${$r})`,
874
872
  green: `var(--kui-color-text-success, ${Br})`,
875
- grey: `var(--kui-color-text-neutral-strong, ${_e})`
873
+ grey: `var(--kui-color-text-neutral-strong, ${Ce})`
876
874
  };
877
875
  return c > 0 ? f.green : c < 0 ? f.red : f.grey;
878
876
  }, a = (c) => c > 0 ? "positive" : c < 0 ? "negative" : "neutral", n = [D.Medium, D.Large].includes(t.cardSize), l = [D.Small].includes(t.cardSize);
879
877
  return (c, f) => {
880
878
  const i = Ae("KTooltip");
881
- return T(), S("div", {
879
+ return T(), _("div", {
882
880
  class: K(["metricscard", e.cardSize])
883
881
  }, [
884
882
  x("div", {
885
883
  class: K(["metricscard-title", e.cardSize])
886
884
  }, [
887
- _(l) ? V("", !0) : (T(), q(re(_(r).get(e.cardType)), {
885
+ E(l) ? V("", !0) : (T(), q(re(E(r).get(e.cardType)), {
888
886
  key: 0,
889
887
  class: "metricscard-icon",
890
- color: `var(--kui-color-text-neutral, ${_(oe)})`,
891
- size: _(G)
888
+ color: `var(--kui-color-text-neutral, ${E(oe)})`,
889
+ size: E(G)
892
890
  }, null, 8, ["color", "size"])),
893
891
  (T(), q(re(e.titleTag), null, {
894
892
  default: ye(() => [
@@ -903,30 +901,30 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
903
901
  text: e.tooltip
904
902
  }, {
905
903
  default: ye(() => [
906
- M(_(ur), {
907
- color: `var(--kui-color-text-neutral, ${_(oe)})`,
908
- size: _(G)
904
+ F(E(ur), {
905
+ color: `var(--kui-color-text-neutral, ${E(oe)})`,
906
+ size: E(G)
909
907
  }, null, 8, ["color", "size"])
910
908
  ]),
911
909
  _: 1
912
910
  }, 8, ["text"])) : V("", !0)
913
911
  ], 2),
914
- e.description && _(n) ? (T(), S("div", Gr, [
912
+ e.description && E(n) ? (T(), _("div", Gr, [
915
913
  x("span", null, w(e.description), 1)
916
914
  ])) : V("", !0),
917
915
  x("div", jr, [
918
- e.hasError ? (T(), S("div", Hr, [
919
- M(_(Oe), {
920
- color: `var(--kui-color-text-neutral, ${_(oe)})`,
921
- size: _(Xr)
916
+ e.hasError ? (T(), _("div", Hr, [
917
+ F(E(Oe), {
918
+ color: `var(--kui-color-text-neutral, ${E(oe)})`,
919
+ size: E(Xr)
922
920
  }, null, 8, ["color", "size"]),
923
921
  x("div", null, " " + w(e.errorMessage), 1)
924
- ])) : (T(), S("div", {
922
+ ])) : (T(), _("div", {
925
923
  key: 1,
926
924
  class: K(["metricscard-value", e.cardSize]),
927
925
  "data-testid": "metric-value"
928
926
  }, w(e.metricValue), 3)),
929
- _(n) ? (T(), S("div", Yr, [
927
+ E(n) ? (T(), _("div", Yr, [
930
928
  x("div", {
931
929
  class: K(["metricscard-trend-change", a(e.changePolarity)]),
932
930
  "data-testid": "metric-trend-parent"
@@ -934,15 +932,15 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
934
932
  e.changePolarity !== 0 ? (T(), q(re(e.trendIcon), {
935
933
  key: 0,
936
934
  color: o(e.changePolarity),
937
- size: _(G)
938
- }, null, 8, ["color", "size"])) : (T(), q(_(lr), {
935
+ size: E(G)
936
+ }, null, 8, ["color", "size"])) : (T(), q(E(lr), {
939
937
  key: 1,
940
- color: `var(--kui-color-text-neutral-strong, ${_(_e)})`,
941
- size: _(G)
938
+ color: `var(--kui-color-text-neutral-strong, ${E(Ce)})`,
939
+ size: E(G)
942
940
  }, null, 8, ["color", "size"])),
943
941
  x("div", Qr, w(e.metricChange), 1)
944
942
  ], 2),
945
- e.trendRange ? (T(), S("div", Wr, w(e.trendRange), 1)) : V("", !0)
943
+ e.trendRange ? (T(), _("div", Wr, w(e.trendRange), 1)) : V("", !0)
946
944
  ])) : V("", !0)
947
945
  ])
948
946
  ], 2);
@@ -956,9 +954,9 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
956
954
  }, Zr = /* @__PURE__ */ ce(Jr, [["__scopeId", "data-v-b1513f6f"]]), et = {}, rt = { class: "loading-tabs" };
957
955
  function tt(e, r) {
958
956
  const t = Ae("KSkeletonBox");
959
- return T(), S("div", rt, [
960
- M(t, { width: "100" }),
961
- M(t, { width: "75" })
957
+ return T(), _("div", rt, [
958
+ F(t, { width: "100" }),
959
+ F(t, { width: "75" })
962
960
  ]);
963
961
  }
964
962
  const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d7"]]), at = {
@@ -1019,7 +1017,7 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1019
1017
  }
1020
1018
  },
1021
1019
  setup(e) {
1022
- const r = e, t = g(() => r.cards.every((a) => (a == null ? void 0 : a.hasError) === !0)), o = (a) => {
1020
+ const r = e, t = h(() => r.cards.every((a) => (a == null ? void 0 : a.hasError) === !0)), o = (a) => {
1023
1021
  const n = Kr(a.currentValue, a.previousValue) || 0, l = Ur(n, r.hasTrendAccess, a.increaseIsBad);
1024
1022
  return {
1025
1023
  metricValue: a.formatValueFn ? a.formatValueFn(a.currentValue) : qr(a.currentValue, { capital: !0, round: !0 }) || "0",
@@ -1030,24 +1028,24 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1030
1028
  hasContainerTitle: !!r.containerTitle
1031
1029
  };
1032
1030
  };
1033
- return (a, n) => (T(), S("div", {
1031
+ return (a, n) => (T(), _("div", {
1034
1032
  class: K(["kong-ui-public-metric-card-container", e.cardSize])
1035
1033
  }, [
1036
- r.containerTitle || r.containerDescription ? (T(), S("div", at, [
1034
+ r.containerTitle || r.containerDescription ? (T(), _("div", at, [
1037
1035
  De(w(r.containerTitle) + " ", 1),
1038
- r.containerDescription ? (T(), S("div", it, w(r.containerDescription), 1)) : V("", !0)
1036
+ r.containerDescription ? (T(), _("div", it, w(r.containerDescription), 1)) : V("", !0)
1039
1037
  ])) : V("", !0),
1040
- t.value ? (T(), S("div", ot, [
1041
- M(_(Oe), { class: "error-display-icon" }),
1042
- e.errorMessage ? (T(), S("div", st, w(e.errorMessage), 1)) : V("", !0)
1043
- ])) : (T(), S("div", ut, [
1044
- (T(!0), S(he, null, Xe(e.cards, (l, c) => (T(), S(he, null, [
1045
- e.loading ? (T(), S("div", {
1038
+ t.value ? (T(), _("div", ot, [
1039
+ F(E(Oe), { class: "error-display-icon" }),
1040
+ e.errorMessage ? (T(), _("div", st, w(e.errorMessage), 1)) : V("", !0)
1041
+ ])) : (T(), _("div", ut, [
1042
+ (T(!0), _(he, null, Xe(e.cards, (l, c) => (T(), _(he, null, [
1043
+ e.loading ? (T(), _("div", {
1046
1044
  key: `skeleton-${c}`,
1047
1045
  class: "loading-tab"
1048
1046
  }, [
1049
- M(nt, {
1050
- class: K(e.cardSize === _(D).Small ? "loading-tabs-small" : "loading-tabs-large")
1047
+ F(nt, {
1048
+ class: K(e.cardSize === E(D).Small ? "loading-tabs-small" : "loading-tabs-large")
1051
1049
  }, null, 8, ["class"])
1052
1050
  ])) : (T(), q(Zr, Ge({ key: c }, { ref_for: !0 }, o(l), {
1053
1051
  "card-size": e.cardSize,
@@ -1072,19 +1070,19 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1072
1070
  cardToDisplay: { default: void 0 }
1073
1071
  },
1074
1072
  setup(e) {
1075
- const r = e, t = Se(Ne);
1073
+ const r = e, t = _e(Ne);
1076
1074
  if (!t)
1077
1075
  throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");
1078
- const { traffic: o, latency: a } = t.data, { i18n: n } = N.useI18n(), l = g(() => t.containerTitle.value ? D.Medium : r.cardSize), c = N.useMetricCardBuilder({
1076
+ const { traffic: o, latency: a } = t.data, { i18n: n } = N.useI18n(), l = h(() => t.containerTitle.value ? D.Medium : r.cardSize), c = N.useMetricCardBuilder({
1079
1077
  cardType: O.TRAFFIC,
1080
- title: g(() => t.longCardTitles ? n.t("metricCard.long.traffic") : n.t("metricCard.short.traffic")),
1078
+ title: h(() => t.longCardTitles ? n.t("metricCard.long.traffic") : n.t("metricCard.short.traffic")),
1081
1079
  record: o.mapped,
1082
1080
  hasError: o.hasError,
1083
1081
  lookupKey: r.lookupKey,
1084
1082
  sumGroupedValues: $,
1085
1083
  trendRange: o.trendRange
1086
- }), f = (m) => `${m.toFixed(le)}%`, i = g(() => {
1087
- const m = o.mapped.value, E = P(m, "current", r.lookupKey, ge), p = P(m, "current", r.lookupKey, $), y = E / p * 100 || 0, I = P(m, "previous", r.lookupKey, ge), C = P(m, "previous", r.lookupKey, $), A = I / C * 100 || 0;
1084
+ }), f = (m) => `${m.toFixed(le)}%`, i = h(() => {
1085
+ const m = o.mapped.value, C = P(m, "current", r.lookupKey, ge), p = P(m, "current", r.lookupKey, $), y = C / p * 100 || 0, I = P(m, "previous", r.lookupKey, ge), S = P(m, "previous", r.lookupKey, $), A = I / S * 100 || 0;
1088
1086
  return {
1089
1087
  cardType: O.ERROR_RATE,
1090
1088
  hasError: o.hasError.value,
@@ -1097,8 +1095,8 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1097
1095
  };
1098
1096
  }), s = (m) => `${m}ms`, u = N.useMetricCardBuilder({
1099
1097
  cardType: O.LATENCY,
1100
- title: g(() => {
1101
- const { longCardTitles: m, averageLatencies: E } = t, p = E.value ? "averageLatency" : "p99Latency";
1098
+ title: h(() => {
1099
+ const { longCardTitles: m, averageLatencies: C } = t, p = C.value ? "averageLatency" : "p99Latency";
1102
1100
  return m ? n.t(`metricCard.long.${p}`) : l.value === D.Small ? n.t(`metricCard.small.${p}`) : n.t(`metricCard.short.${p}`);
1103
1101
  }),
1104
1102
  hasError: a.hasError,
@@ -1107,7 +1105,7 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1107
1105
  increaseIsBad: !0,
1108
1106
  formatValueFn: s,
1109
1107
  trendRange: a.trendRange
1110
- }), d = g(() => r.cardToDisplay === "TRAFFIC" ? [c.value] : r.cardToDisplay === "ERROR_RATE" ? [i.value] : r.cardToDisplay === "LATENCY" ? [u.value] : [c.value, i.value, u.value]), v = g(() => r.cardToDisplay === "TRAFFIC" || r.cardToDisplay === "ERROR_RATE" ? o.isLoading.value : r.cardToDisplay === "LATENCY" ? a.isLoading.value : o.isLoading.value || a.isLoading.value), h = g(() => ({
1108
+ }), d = h(() => r.cardToDisplay === "TRAFFIC" ? [c.value] : r.cardToDisplay === "ERROR_RATE" ? [i.value] : r.cardToDisplay === "LATENCY" ? [u.value] : [c.value, i.value, u.value]), v = h(() => r.cardToDisplay === "TRAFFIC" || r.cardToDisplay === "ERROR_RATE" ? o.isLoading.value : r.cardToDisplay === "LATENCY" ? a.isLoading.value : o.isLoading.value || a.isLoading.value), g = h(() => ({
1111
1109
  cards: d.value,
1112
1110
  containerTitle: t.containerTitle.value,
1113
1111
  containerDescription: t.description.value,
@@ -1116,16 +1114,16 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1116
1114
  fallbackDisplayText: n.t("general.notAvailable"),
1117
1115
  cardSize: l.value,
1118
1116
  hideTitle: !0
1119
- })), R = g(() => ({
1120
- loading: h.value.loading,
1117
+ })), R = h(() => ({
1118
+ loading: g.value.loading,
1121
1119
  trafficCard: c.value,
1122
1120
  errorRateCard: i.value,
1123
1121
  latencyCard: u.value,
1124
1122
  errorRateFormatted: f(i.value.currentValue),
1125
1123
  latencyFormatted: s(u.value.currentValue)
1126
1124
  }));
1127
- return (m, E) => Ie(m.$slots, "default", { cardValues: R.value }, () => [
1128
- M(ct, je(He(h.value)), null, 16)
1125
+ return (m, C) => Ie(m.$slots, "default", { cardValues: R.value }, () => [
1126
+ F(ct, je(He(g.value)), null, 16)
1129
1127
  ]);
1130
1128
  }
1131
1129
  }), j = (e) => new Date(e), Et = (e, r) => {
@@ -1134,17 +1132,17 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1134
1132
  statusCode: 200,
1135
1133
  body: dt(t, r)
1136
1134
  });
1137
- }, Ce = (e) => e.reduce((r, t) => (r[t] = { name: t }, r), {}), dt = (e, r) => {
1138
- var h, R;
1139
- const t = (r == null ? void 0 : r.timeFrame) || be.get(se.ONE_DAY), o = e.granularity === "trend" ? new We(t) : new Je(t), a = o.endMs(), n = o.startMs(), l = o.granularityMs(), c = e.granularity === "trend" ? 2 : 1;
1135
+ }, Se = (e) => e.reduce((r, t) => (r[t] = { name: t }, r), {}), dt = (e, r) => {
1136
+ var g, R;
1137
+ const t = be.get(se.ONE_DAY), o = e.granularity === "trend" ? new We(t) : new Je(t), a = o.endMs(), n = o.startMs(), l = o.granularityMs(), c = e.granularity === "trend" ? 2 : 1;
1140
1138
  if ((e.dimensions ?? []).length > 2)
1141
1139
  throw new Error(`Explore only supports 0-2 dimensions; got: ${JSON.stringify(e.dimensions)}`);
1142
1140
  const f = (e.dimensions ?? []).find((m) => m !== "time"), i = (r == null ? void 0 : r.dimensionNames) ?? [], s = Math.max(i.length, 1), u = e.metrics || [], d = [];
1143
1141
  for (let m = 0; m < c; m++)
1144
- for (let E = 0; E < s; E++) {
1145
- const p = f ? { [f]: i[E] } : {};
1146
- (h = e.dimensions) != null && h.includes("status_code_grouped") ? $.forEach((y) => {
1147
- const I = u.reduce((C, A) => ((r == null ? void 0 : r.deterministic) ?? !0 ? C[A] = (c - m) * 1e3 + 100 * E + 1 : C[A] = Math.round(Math.random() * 1e3), C), { ...p, status_code_grouped: y });
1142
+ for (let C = 0; C < s; C++) {
1143
+ const p = f ? { [f]: i[C] } : {};
1144
+ (g = e.dimensions) != null && g.includes("status_code_grouped") ? $.forEach((y) => {
1145
+ const I = u.reduce((S, A) => ((r == null ? void 0 : r.deterministic) ?? !0 ? S[A] = (c - m) * 1e3 + 100 * C + 1 : S[A] = Math.round(Math.random() * 1e3), S), { ...p, status_code_grouped: y });
1148
1146
  d.push({
1149
1147
  version: "v1",
1150
1148
  timestamp: m === 0 ? j(n).toISOString() : j(n + l).toISOString(),
@@ -1153,7 +1151,7 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1153
1151
  }) : d.push({
1154
1152
  version: "v1",
1155
1153
  timestamp: m === 0 ? j(n).toISOString() : j(n + l).toISOString(),
1156
- event: u.reduce((y, I) => ((r == null ? void 0 : r.deterministic) ?? !0 ? y[I] = (c - m) * 1e3 + 100 * E + 1 : y[I] = Math.round(Math.random() * 1e3), y), { ...p })
1154
+ event: u.reduce((y, I) => ((r == null ? void 0 : r.deterministic) ?? !0 ? y[I] = (c - m) * 1e3 + 100 * C + 1 : y[I] = Math.round(Math.random() * 1e3), y), { ...p })
1157
1155
  });
1158
1156
  }
1159
1157
  const v = {
@@ -1163,8 +1161,8 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-9c7113d
1163
1161
  end: new Date(a).toISOString(),
1164
1162
  granularity_ms: l,
1165
1163
  display: f ? {
1166
- [f]: Ce(i),
1167
- ...(R = e.dimensions) != null && R.includes("status_code_grouped") ? { status_code_grouped: Ce($) } : {}
1164
+ [f]: Se(i),
1165
+ ...(R = e.dimensions) != null && R.includes("status_code_grouped") ? { status_code_grouped: Se($) } : {}
1168
1166
  } : {},
1169
1167
  metric_names: e.metrics,
1170
1168
  query_id: "test"
@@ -1 +1 @@
1
- (function(R,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("@kong-ui-public/analytics-utilities"),require("@kong-ui-public/i18n"),require("axios"),require("@kong-ui-public/analytics-config-store"),require("@kong/icons")):typeof define=="function"&&define.amd?define(["exports","vue","@kong-ui-public/analytics-utilities","@kong-ui-public/i18n","axios","@kong-ui-public/analytics-config-store","@kong/icons"],t):(R=typeof globalThis<"u"?globalThis:R||self,t(R["kong-ui-public-vitals-metric-provider"]={},R.Vue,R["kong-ui-public-analytics-utilities"],R["kong-ui-public-i18n"],R.axios,R["kong-ui-public-analytics-config-store"],R.KongIcons))})(this,function(R,t,D,re,Rr,Te,_){"use strict";const Ce={general:{notAvailable:"N/A"},metricCard:{small:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Avg. latency",p99Latency:"P99 latency"},short:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Average latency",p99Latency:"P99 latency"},long:{traffic:"Number of requests",errorRate:"Average error rate",averageLatency:"Average latency",p99Latency:"P99 latency"}},trendRange:{custom_days:"vs previous {numDays, plural, =1 {day} other {# days}}",custom_hours:"vs previous {numHours, plural, =1 {hour} other {# hours}}",custom_minutes:"vs previous {numMinutes, plural, =1 {minute} other {# minutes}}","15m":"vs previous 15 minutes","1h":"vs previous hour","6h":"vs previous 6 hours","12h":"vs previous 12 hours","24h":"vs previous 24 hours","7d":"vs previous 7 days","30d":"vs previous 30 days",current_week:"vs previous week",current_month:"vs previous month",current_quarter:"vs previous quarter",previous_week:"vs previous time period",previous_month:"vs previous time period",previous_quarter:"vs previous quarter"}};function Se(){const e=re.createI18n("en-us",Ce);return{i18n:e,i18nT:re.i18nTComponent(e)}}const te=2,w=["1XX","2XX","3XX","4XX","5XX"],K=["4XX","5XX"],_e=["1XX","2XX","3XX"],ne=30*1e3,ae="analytics-query-provider";var ie=(e=>(e.VALIDATING="VALIDATING",e.VALIDATING_HAS_DATA="VALIDATING_HAS_DATA",e.PENDING="PENDING",e.SUCCESS="SUCCESS",e.SUCCESS_HAS_DATA="SUCCESS_HAS_DATA",e.ERROR="ERROR",e.STALE_IF_ERROR="STALE_IF_ERROR",e))(ie||{});const Ie=e=>{var r,n,s,i,a;return e?!!((r=Object.keys(e))!=null&&r.length||(n=e.data)!=null&&n.length||(i=(s=e.data)==null?void 0:s.data)!=null&&i.length||!((a=e.data)!=null&&a.data)&&typeof e.data=="object"&&Object.keys(e==null?void 0:e.data).length):!1};function ke(e=t.ref({}),r,n,s=Ie){const i=t.ref("PENDING");return t.watchEffect(()=>{const a=s(e.value);if(e.value&&a&&n.value){i.value="VALIDATING_HAS_DATA";return}if(e.value&&n.value){i.value="VALIDATING";return}if(e.value&&r.value){i.value="STALE_IF_ERROR";return}if(e.value===void 0&&!r.value){i.value="PENDING";return}if(e.value&&!r.value&&a){i.value="SUCCESS_HAS_DATA";return}if(e.value&&!r.value){i.value="SUCCESS";return}e.value===void 0&&r&&(i.value="ERROR")}),{state:i,swrvState:ie}}const V=Symbol("default"),U="status_code_grouped",oe=(e,r,n,s,i)=>{e[r][n]||(e[r][n]={}),e[r][n][s]=i};function Ae(e,r){var d;const n=((d=e.meta.metric_names)==null?void 0:d[0])||"",s=e.meta.start_ms,i=Object.keys(e.meta.display||{}),a=!!i.find(m=>m===U),u=i.find(m=>m!==U);return i.length>2||i.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",i),{previous:{[V]:{[V]:0}},current:{[V]:{[V]:0}}}):e.data.reduce((m,o)=>{const l=o.event[n],c=u?o.event[u]:V,f=a?o.event[U]:V;return new Date(o.timestamp).getTime()===s&&r?oe(m,"previous",c,f,l):oe(m,"current",c,f,l),m},{previous:{},current:{}})}function De(e){e.queryReady===void 0&&(e.queryReady=t.computed(()=>!0));const{i18n:r}=N.useI18n(),n=t.computed(()=>{var c,f;return{metrics:e.metrics.value,dimensions:[...(c=e.dimensions)!=null&&c.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(f=e.filter.value)!=null&&f.length?{filters:e.filter.value}:{},time_range:e.timeframe.value.v4Query(e.tz.value)}}),s=t.computed(()=>{var f,y,p,E;if(!((f=e.queryReady)!=null&&f.value))return null;const c=(y=e.filter)!=null&&y.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${e.timeframe.value.cacheKey()}-${(p=e.dimensions)==null?void 0:p.join("-")}-${(E=e.metrics.value)==null?void 0:E.join("-")}-${c}-${e.refreshCounter.value}`}),{response:i,error:a,isValidating:u}=N.useRequest(()=>s.value,()=>e.queryFn({datasource:e.datasource.value,query:n.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:te}),{state:d,swrvState:m}=ke(i,a,u),o=t.computed(()=>{var c,f,y,p,E,g,T;return!((f=(c=i.value)==null?void 0:c.data)!=null&&f.length)||!((p=(y=i.value)==null?void 0:y.meta)!=null&&p.display)||!((T=(g=(E=i.value)==null?void 0:E.meta)==null?void 0:g.metric_names)!=null&&T.length)?{current:{},previous:{}}:Ae(i.value,e.withTrend.value)}),l=t.computed(()=>{var c,f;if(e.timeframe.value.key==="custom"){if(!((f=(c=i.value)==null?void 0:c.meta)!=null&&f.start_ms))return"";const{start_ms:y,end_ms:p}=i.value.meta;let E=(p-y)/(1e3*60*60*24),g=(p-y)/(1e3*60*60),T=(p-y)/(1e3*60);return e.withTrend.value&&(E/=2,g/=2,T/=2),E>=1?r.t("trendRange.custom_days",{numDays:E}):g>=1?r.t("trendRange.custom_hours",{numHours:g}):T>=1?r.t("trendRange.custom_minutes",{numMinutes:T}):r.t("trendRange.custom_days",{numDays:Math.round(E)})}else return e.withTrend.value?r.t(`trendRange.${e.timeframe.value.key}`):""});return{isLoading:t.computed(()=>m.PENDING===d.value),hasError:t.computed(()=>m.ERROR===d.value),raw:i,mapped:o,trendRange:l}}const L=(e,r,n=V,s)=>(s??[V]).reduce((a,u)=>{const d=e[r][n];return d?a+(d[u]||0):a},0);function be(e){const{cardType:r,title:n,description:s,record:i,hasError:a,increaseIsBad:u,formatValueFn:d,trendRange:m}=e;return t.computed(()=>{let o=0,l=0;if(i!=null&&i.value)try{o=L(i.value,"current",e.lookupKey,e.sumGroupedValues),l=L(i.value,"previous",e.lookupKey,e.sumGroupedValues)}catch(c){console.error("Metric card data doesn't have the expected structure:",c)}return{cardType:r,hasError:a.value,currentValue:o,previousValue:l,title:n.value,description:s,increaseIsBad:!!u,formatValueFn:d,trendRange:m==null?void 0:m.value}})}var $=new WeakMap,se=0;function Ve(e){if(!e.length)return"";for(var r="arg",n=0;n<e.length;++n){var s=void 0;e[n]===null||typeof e[n]!="object"&&typeof e[n]!="function"?typeof e[n]=="string"?s='"'+e[n]+'"':s=String(e[n]):$.has(e[n])?s=$.get(e[n]):(s=se,$.set(e[n],se++)),r+="@"+s}return r}function Ne(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=Ve(e):e=String(e||""),e}var X=function(){function e(r){r===void 0&&(r=0),this.items=new Map,this.ttl=r}return e.prototype.serializeKey=function(r){return Ne(r)},e.prototype.get=function(r){var n=this.serializeKey(r);return this.items.get(n)},e.prototype.set=function(r,n,s){var i=this.serializeKey(r),a=s||this.ttl,u=Date.now(),d={data:n,createdAt:u,expiresAt:a?u+a:1/0};this.dispatchExpire(a,d,i),this.items.set(i,d)},e.prototype.dispatchExpire=function(r,n,s){var i=this;r&&setTimeout(function(){var a=Date.now(),u=a>=n.expiresAt;u&&i.delete(s)},r)},e.prototype.delete=function(r){this.items.delete(r)},e}();function Oe(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function we(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var Le=function(e){return fetch(e).then(function(r){return r.json()})};const G={isOnline:Oe,isDocumentVisible:we,fetcher:Le};var b=function(){return b=Object.assign||function(e){for(var r,n=1,s=arguments.length;n<s;n++){r=arguments[n];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},b.apply(this,arguments)},F=function(e,r,n,s){function i(a){return a instanceof n?a:new n(function(u){u(a)})}return new(n||(n=Promise))(function(a,u){function d(l){try{o(s.next(l))}catch(c){u(c)}}function m(l){try{o(s.throw(l))}catch(c){u(c)}}function o(l){l.done?a(l.value):i(l.value).then(d,m)}o((s=s.apply(e,r||[])).next())})},M=function(e,r){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},s,i,a,u;return u={next:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(o){return function(l){return m([o,l])}}function m(o){if(s)throw new TypeError("Generator is already executing.");for(;n;)try{if(s=1,i&&(a=o[0]&2?i.return:o[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,o[1])).done)return a;switch(i=0,a&&(o=[o[0]&2,a.value]),o[0]){case 0:case 1:a=o;break;case 4:return n.label++,{value:o[1],done:!1};case 5:n.label++,i=o[1],o=[0];continue;case 7:o=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){n.label=o[1];break}if(o[0]===6&&n.label<a[1]){n.label=a[1],a=o;break}if(a&&n.label<a[2]){n.label=a[2],n.ops.push(o);break}a[2]&&n.ops.pop(),n.trys.pop();continue}o=r.call(e,n)}catch(l){o=[6,l],i=0}finally{s=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Fe=function(e,r){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],u;try{for(;(r===void 0||r-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(d){u={error:d}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(u)throw u.error}}return a},Me=function(e,r,n){if(n||arguments.length===2)for(var s=0,i=r.length,a;s<i;s++)(a||!(s in r))&&(a||(a=Array.prototype.slice.call(r,0,s)),a[s]=r[s]);return e.concat(a||Array.prototype.slice.call(r))},le=new X,q=new X,j=new X,ce={cache:le,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:G.fetcher,isOnline:G.isOnline,isDocumentVisible:G.isDocumentVisible};function Be(e,r,n){var s=q.get(e);if(s)s.data.push(r);else{var i=5e3;q.set(e,[r],n>0?n+i:n)}}function qe(e,r,n){if(n.isDocumentVisible()&&!(n.errorRetryCount!==void 0&&r>n.errorRetryCount)){var s=Math.min(r||0,n.errorRetryCount),i=s*n.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:s+1,shouldRetryOnError:!0})},i)}}var ue=function(e,r,n,s){return n===void 0&&(n=le),s===void 0&&(s=ce.ttl),F(void 0,void 0,void 0,function(){var i,a,u,d,m,o,l;return M(this,function(c){switch(c.label){case 0:if(!ze(r))return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,r];case 2:return i=c.sent(),[3,4];case 3:return d=c.sent(),a=d,[3,4];case 4:return[3,6];case 5:i=r,c.label=6;case 6:if(u=!1,m={data:i,error:a,isValidating:u},typeof i<"u")try{n.set(e,m,s)}catch(f){console.error("swrv(mutate): failed to set cache",f)}return o=q.get(e),o&&o.data.length&&(l=o.data.filter(function(f){return f.key===e}),l.forEach(function(f,y){typeof m.data<"u"&&(f.data=m.data),f.error=m.error,f.isValidating=m.isValidating,f.isLoading=m.isValidating;var p=y===l.length-1;p||delete l[y]}),l=l.filter(Boolean)),[2,m]}})})};function xe(){for(var e=this,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var s,i,a=b({},ce),u=!1,d=!1,m=t.getCurrentInstance(),o=(m==null?void 0:m.proxy)||m;if(!o)return console.error("Could not get current instance, check to make sure that `useSwrv` is declared in the top level of the setup function."),null;var l=(o==null?void 0:o.$isServer)||!1;r.length>=1&&(s=r[0]),r.length>=2&&(i=r[1]),r.length>2&&(a=b(b({},a),r[2]));var c=l?a.serverTTL:a.ttl,f=typeof s=="function"?s:t.ref(s);typeof i>"u"&&(i=a.fetcher);var y=null;y||(y=t.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var p=function(v,h){return F(e,void 0,void 0,function(){var S,C,A,B,W,pe,J,ve=this;return M(this,function(Z){switch(Z.label){case 0:return S=y.data===void 0,C=f.value,C?(A=a.cache.get(C),B=A&&A.data,y.isValidating=!0,y.isLoading=!B,B&&(y.data=B.data,y.error=B.error),W=v||i,!W||!a.isDocumentVisible()&&!S||(h==null?void 0:h.forceRevalidate)!==void 0&&!(h!=null&&h.forceRevalidate)?(y.isValidating=!1,y.isLoading=!1,[2]):A&&(pe=!!(Date.now()-A.createdAt>=a.dedupingInterval||h!=null&&h.forceRevalidate),!pe)?(y.isValidating=!1,y.isLoading=!1,[2]):(J=function(){return F(ve,void 0,void 0,function(){var O,Ee,ee,Re;return M(this,function(P){switch(P.label){case 0:return O=j.get(C),O?[3,2]:(Ee=Array.isArray(C)?C:[C],ee=W.apply(void 0,Me([],Fe(Ee),!1)),j.set(C,ee,a.dedupingInterval),[4,ue(C,ee,a.cache,c)]);case 1:return P.sent(),[3,4];case 2:return[4,ue(C,O.data,a.cache,c)];case 3:P.sent(),P.label=4;case 4:return y.isValidating=!1,y.isLoading=!1,j.delete(C),y.error!==void 0&&(Re=!u&&a.shouldRetryOnError&&(h?h.shouldRetryOnError:!0),Re&&qe(p,h?h.errorRetryCount:1,a)),[2]}})})},B&&a.revalidateDebounce?(setTimeout(function(){return F(ve,void 0,void 0,function(){return M(this,function(O){switch(O.label){case 0:return u?[3,2]:[4,J()];case 1:O.sent(),O.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,J()];case 2:Z.sent(),Z.label=3;case 3:return[2]}})})},E=function(){return F(e,void 0,void 0,function(){return M(this,function(v){return[2,p(null,{shouldRetryOnError:!1})]})})},g=null;t.onMounted(function(){var v=function(){return F(e,void 0,void 0,function(){return M(this,function(h){switch(h.label){case 0:return!y.error&&a.isOnline()?[4,p()]:[3,2];case 1:return h.sent(),[3,3];case 2:g&&clearTimeout(g),h.label=3;case 3:return a.refreshInterval&&!u&&(g=setTimeout(v,a.refreshInterval)),[2]}})})};a.refreshInterval&&(g=setTimeout(v,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",E,!1),window.addEventListener("focus",E,!1))}),t.onUnmounted(function(){u=!0,g&&clearTimeout(g),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",E,!1),window.removeEventListener("focus",E,!1));var v=q.get(f.value);v&&(v.data=v.data.filter(function(h){return h!==y}))});try{t.watch(f,function(v){t.isReadonly(f)||(f.value=v),y.key=v,y.isValidating=!!v,Be(f.value,y,c),!l&&!d&&f.value&&p(),d=!1},{immediate:!0})}catch{}var T=b(b({},t.toRefs(y)),{mutate:function(v,h){return p(v,b(b({},h),{forceRevalidate:!0}))}});return T}function ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function Pe(e,r,n){const{data:s,error:i,isValidating:a,mutate:u}=xe(e,r,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:t.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:u}}const N={useI18n:Se,useMetricCardBuilder:be,useMetricFetcher:De,useRequest:Pe},de=Symbol("METRICS_PROVIDER_KEY"),Ke=e=>{const{datasource:r,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeframe:u,tz:d,hasTrendAccess:m,refreshInterval:o,abortController:l,queryFn:c,averageLatencies:f}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const y=!!(n&&s),p=!!(n&&!s),E=t.computed(()=>{const S=[];return y&&S.push({field:n,operator:"in",value:[s]}),i.value&&S.push(...D.stripUnknownFilters(r.value,i.value)),S}),g={datasource:r,metrics:t.ref(["request_count"]),dimensions:[...n&&!y?[n]:[],"status_code_grouped"],filter:E,queryReady:a,timeframe:u,tz:d,withTrend:t.computed(()=>m.value&&!p),refreshInterval:o,queryFn:c,abortController:l,refreshCounter:e.refreshCounter},T={datasource:r,metrics:t.computed(()=>[f.value?"response_latency_average":"response_latency_p99"]),...n&&!y?{dimensions:[n]}:{},filter:E,queryReady:a,timeframe:u,tz:d,withTrend:t.computed(()=>m.value&&!p),refreshInterval:o,queryFn:c,abortController:l,refreshCounter:e.refreshCounter},v=N.useMetricFetcher(g),h=N.useMetricFetcher(T);return{trafficData:v,latencyData:h}},Ue=t.defineComponent({__name:"MetricsProvider",props:{datasource:{default:void 0},maxTimeframe:{default:D.TimeframeKeys.THIRTY_DAY},overrideTimeframe:{default:void 0},tz:{default:void 0},dimension:{default:void 0},filterValue:{default:void 0},additionalFilter:{default:void 0},queryReady:{type:Boolean,default:!0},refreshInterval:{default:ne},longCardTitles:{type:Boolean,default:!1},containerTitle:{default:void 0},description:{default:void 0},percentileLatency:{type:Boolean,default:void 0},abortController:{default:void 0},refreshCounter:{default:0}},setup(e){const r=e;if(r.dimension&&D.queryableExploreDimensions.findIndex(y=>y===r.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);const n=t.inject(ae);let s;n?s=n.queryFn:(console.warn("Analytics dashboards require a query bridge supplied via provide / inject."),console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"),console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/analytics-metric-provider/README.md#requirements"),s=()=>Promise.reject(new Error("Query bridge required")));const i=Te.useAnalyticsConfigStore(),a=t.computed(()=>!0),u=t.computed(()=>!i.loading&&r.queryReady),d=t.computed(()=>r.tz?r.tz:new Intl.DateTimeFormat().resolvedOptions().timeZone),m=t.computed(()=>r.datasource?r.datasource:"basic"),o=t.computed(()=>r.overrideTimeframe||D.TimePeriods.get(D.TimeframeKeys.SEVEN_DAY)),l=t.computed(()=>!r.percentileLatency),{trafficData:c,latencyData:f}=Ke({datasource:m,dimension:r.dimension,dimensionFilterValue:r.filterValue,additionalFilter:t.toRef(r,"additionalFilter"),queryReady:u,timeframe:o,tz:d,hasTrendAccess:a,refreshInterval:r.refreshInterval,queryFn:s,averageLatencies:l,abortController:r.abortController,refreshCounter:t.toRef(r,"refreshCounter")});return t.provide(de,{data:{traffic:c,latency:f},description:t.toRef(()=>r.description),containerTitle:t.toRef(()=>r.containerTitle),hasTrendAccess:a,longCardTitles:r.longCardTitles,averageLatencies:l}),(y,p)=>t.renderSlot(y.$slots,"default",{hasTrendAccess:a.value,timeframe:o.value})}});function $e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fe={exports:{}};(function(e){(function(){function r(o,l){if(l.separator===!1||o<1e3)return o.toString();var c=typeof l.separator=="string"?l.separator:",",f=[],y=Math.round(o).toString().split("");return y.reverse().forEach(function(p,E){E&&E%3===0&&f.push(c),f.push(p)}),f.reverse().join("")}function n(o,l,c){var f=o/l,y=c.round?"round":"floor";return c.decimal===!1?(o=Math[y](f),o.toString()):(c.precision?o=f:o=f<10?Math[y](f*10)/10:Math[y](f),o=o.toString(),typeof c.decimal=="string"&&(o=o.replace(".",c.decimal)),o)}var s=1e3,i=1e4,a=1e6,u=1e9,d=1e12;function m(o,l){var c;l=l||{};var f=o<0;f&&(o=Math.abs(o)),l.precision&&(o=parseFloat(o.toPrecision(l.precision)));var y=l.min10k?i:s;return o<y||l.precision&&l.precision>Math.log10(o)?c=r(n(o,1,l),l):o<a?c=n(o,s,l)+"k":o<u?c=n(o,a,l)+"m":o<d?c=r(n(o,u,l),l)+"b":c=r(n(o,d,l),l)+"t",f&&(c="-"+c),l.capital&&(c=c.toUpperCase()),l.prefix&&(c=l.prefix+c),l.suffix&&(c=c+l.suffix),c}m.addCommas=r,e.exports=m})()})(fe);var Xe=fe.exports;const Ge=$e(Xe);var k=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(k||{}),I=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(I||{});const H=2,me=H+2,je=(e,r,n=!1)=>{let s=!r||Number(e.toFixed(me))===0?0:Number(e.toFixed(me))>0?1:-1;return n&&(s*=-1),s},He=(e,r,n)=>r?`${Math.abs(e*100).toFixed(H)}%`:n,Ye=(e,r)=>r===0?0:e/r-1,Qe=(e,r=!1)=>(r&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),We="#ad000e",Y="#6c7489",ye="#52596e",Je="#007d60",x="16px",Ze="20px",er={key:0,class:"metricscard-description"},rr={class:"metricscard-valuetrend"},tr={key:0,class:"metricscard-error"},nr={key:2,class:"metricscard-trend"},ar={"data-testid":"metric-trend-change"},ir={key:0,class:"metricscard-trend-range"},or=t.defineComponent({__name:"MetricsCard",props:{cardType:{type:String,required:!0,default:k.GENERIC_COUNT},title:{type:String,default:"0%",required:!0},description:{type:String,default:"",required:!1},tooltip:{type:String,required:!1,default:""},timeframe:{type:String,required:!1,default:""},metricValue:{type:String,default:""},metricChange:{type:String,required:!0},changePolarity:{type:Number,required:!0},trendIcon:{type:Object,default:_.IndeterminateSmallIcon},trendRange:{type:String,default:""},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:"Vitals data error"},cardSize:{type:String,required:!1,default:()=>I.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const r=new Map([[k.GENERIC_COUNT,_.VitalsIcon],[k.TRAFFIC,_.CloudUploadIcon],[k.ERROR_RATE,_.WarningOutlineIcon],[k.LATENCY,_.ResponseIcon]]),n=e,s=d=>{const m={red:`var(--kui-color-text-danger-strong, ${We})`,green:`var(--kui-color-text-success, ${Je})`,grey:`var(--kui-color-text-neutral-strong, ${ye})`};return d>0?m.green:d<0?m.red:m.grey},i=d=>d>0?"positive":d<0?"negative":"neutral",a=[I.Medium,I.Large].includes(n.cardSize),u=[I.Small].includes(n.cardSize);return(d,m)=>{const o=t.resolveComponent("KTooltip");return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["metricscard",e.cardSize])},[t.createElementVNode("div",{class:t.normalizeClass(["metricscard-title",e.cardSize])},[t.unref(u)?t.createCommentVNode("",!0):(t.openBlock(),t.createBlock(t.resolveDynamicComponent(t.unref(r).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(x)},null,8,["color","size"])),(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.titleTag),null,{default:t.withCtx(()=>[t.createTextVNode(t.toDisplayString(e.title),1)]),_:1})),e.tooltip?(t.openBlock(),t.createBlock(o,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:t.withCtx(()=>[t.createVNode(t.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(x)},null,8,["color","size"])]),_:1},8,["text"])):t.createCommentVNode("",!0)],2),e.description&&t.unref(a)?(t.openBlock(),t.createElementBlock("div",er,[t.createElementVNode("span",null,t.toDisplayString(e.description),1)])):t.createCommentVNode("",!0),t.createElementVNode("div",rr,[e.hasError?(t.openBlock(),t.createElementBlock("div",tr,[t.createVNode(t.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(Ze)},null,8,["color","size"]),t.createElementVNode("div",null," "+t.toDisplayString(e.errorMessage),1)])):(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},t.toDisplayString(e.metricValue),3)),t.unref(a)?(t.openBlock(),t.createElementBlock("div",nr,[t.createElementVNode("div",{class:t.normalizeClass(["metricscard-trend-change",i(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.trendIcon),{key:0,color:s(e.changePolarity),size:t.unref(x)},null,8,["color","size"])):(t.openBlock(),t.createBlock(t.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${t.unref(ye)})`,size:t.unref(x)},null,8,["color","size"])),t.createElementVNode("div",ar,t.toDisplayString(e.metricChange),1)],2),e.trendRange?(t.openBlock(),t.createElementBlock("div",ir,t.toDisplayString(e.trendRange),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0)])],2)}}}),Q=(e,r)=>{const n=e.__vccOpts||e;for(const[s,i]of r)n[s]=i;return n},sr=Q(or,[["__scopeId","data-v-b1513f6f"]]),lr={},cr={class:"loading-tabs"};function ur(e,r){const n=t.resolveComponent("KSkeletonBox");return t.openBlock(),t.createElementBlock("div",cr,[t.createVNode(n,{width:"100"}),t.createVNode(n,{width:"75"})])}const dr=Q(lr,[["render",ur],["__scopeId","data-v-9c7113d7"]]),fr={key:0,class:"container-title"},mr={key:0,class:"container-description"},yr={key:1,class:"error-display"},gr={key:0,class:"error-display-message"},hr={key:2,class:"cards-wrapper"},pr=Q(t.defineComponent({__name:"MetricCardContainer",props:{fallbackDisplayText:{type:String,required:!0},cards:{type:Array,required:!0},errorMessage:{type:String,required:!1,default:""},loading:{type:Boolean,required:!1,default:!1},hasTrendAccess:{type:Boolean,required:!1,default:!0},cardSize:{type:String,required:!1,default:()=>I.Large},containerTitle:{type:String,required:!1,default:""},containerDescription:{type:String,required:!1,default:""}},setup(e){const r=e,n=t.computed(()=>r.cards.every(i=>(i==null?void 0:i.hasError)===!0)),s=i=>{const a=Ye(i.currentValue,i.previousValue)||0,u=je(a,r.hasTrendAccess,i.increaseIsBad);return{metricValue:i.formatValueFn?i.formatValueFn(i.currentValue):Ge(i.currentValue,{capital:!0,round:!0})||"0",metricChange:i.formatChangeFn?i.formatChangeFn(a):He(a,r.hasTrendAccess,r.fallbackDisplayText),changePolarity:u,trendIcon:Qe(u,i.increaseIsBad),cardSize:r.cardSize,hasContainerTitle:!!r.containerTitle}};return(i,a)=>(t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[r.containerTitle||r.containerDescription?(t.openBlock(),t.createElementBlock("div",fr,[t.createTextVNode(t.toDisplayString(r.containerTitle)+" ",1),r.containerDescription?(t.openBlock(),t.createElementBlock("div",mr,t.toDisplayString(r.containerDescription),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0),n.value?(t.openBlock(),t.createElementBlock("div",yr,[t.createVNode(t.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(t.openBlock(),t.createElementBlock("div",gr,t.toDisplayString(e.errorMessage),1)):t.createCommentVNode("",!0)])):(t.openBlock(),t.createElementBlock("div",hr,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.cards,(u,d)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[e.loading?(t.openBlock(),t.createElementBlock("div",{key:`skeleton-${d}`,class:"loading-tab"},[t.createVNode(dr,{class:t.normalizeClass(e.cardSize===t.unref(I).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(t.openBlock(),t.createBlock(sr,t.mergeProps({key:d},{ref_for:!0},s(u),{"card-size":e.cardSize,"card-type":u.cardType,description:u.description,"error-message":e.errorMessage,"has-error":u.hasError,title:u.title,"title-tag":u.titleTag,tooltip:u.tooltip,"trend-range":u.trendRange}),null,16,["card-size","card-type","description","error-message","has-error","title","title-tag","tooltip","trend-range"]))],64))),256))]))],2))}}),[["__scopeId","data-v-7080ba56"]]),vr=t.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:I.Large},cardToDisplay:{default:void 0}},setup(e){const r=e,n=t.inject(de);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=N.useI18n(),u=t.computed(()=>n.containerTitle.value?I.Medium:r.cardSize),d=N.useMetricCardBuilder({cardType:k.TRAFFIC,title:t.computed(()=>n.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:s.mapped,hasError:s.hasError,lookupKey:r.lookupKey,sumGroupedValues:w,trendRange:s.trendRange}),m=g=>`${g.toFixed(H)}%`,o=t.computed(()=>{const g=s.mapped.value,T=L(g,"current",r.lookupKey,K),v=L(g,"current",r.lookupKey,w),h=T/v*100||0,S=L(g,"previous",r.lookupKey,K),C=L(g,"previous",r.lookupKey,w),A=S/C*100||0;return{cardType:k.ERROR_RATE,hasError:s.hasError.value,currentValue:h,previousValue:A,formatValueFn:m,title:n.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:s.trendRange.value}}),l=g=>`${g}ms`,c=N.useMetricCardBuilder({cardType:k.LATENCY,title:t.computed(()=>{const{longCardTitles:g,averageLatencies:T}=n,v=T.value?"averageLatency":"p99Latency";return g?a.t(`metricCard.long.${v}`):u.value===I.Small?a.t(`metricCard.small.${v}`):a.t(`metricCard.short.${v}`)}),hasError:i.hasError,record:i.mapped,lookupKey:r.lookupKey,increaseIsBad:!0,formatValueFn:l,trendRange:i.trendRange}),f=t.computed(()=>r.cardToDisplay==="TRAFFIC"?[d.value]:r.cardToDisplay==="ERROR_RATE"?[o.value]:r.cardToDisplay==="LATENCY"?[c.value]:[d.value,o.value,c.value]),y=t.computed(()=>r.cardToDisplay==="TRAFFIC"||r.cardToDisplay==="ERROR_RATE"?s.isLoading.value:r.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),p=t.computed(()=>({cards:f.value,containerTitle:n.containerTitle.value,containerDescription:n.description.value,loading:y.value,hasTrendAccess:n.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:u.value,hideTitle:!0})),E=t.computed(()=>({loading:p.value.loading,trafficCard:d.value,errorRateCard:o.value,latencyCard:c.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:l(c.value.currentValue)}));return(g,T)=>t.renderSlot(g.$slots,"default",{cardValues:E.value},()=>[t.createVNode(pr,t.normalizeProps(t.guardReactiveProps(p.value)),null,16)])}}),z=e=>new Date(e),Er=(e,r)=>{const n=e.body;e.reply({statusCode:200,body:he(n,r)})},ge=e=>e.reduce((r,n)=>(r[n]={name:n},r),{}),he=(e,r)=>{var p,E;const n=(r==null?void 0:r.timeFrame)||D.TimePeriods.get(D.TimeframeKeys.ONE_DAY),s=e.granularity==="trend"?new D.DeltaQueryTime(n):new D.UnaryQueryTime(n),i=s.endMs(),a=s.startMs(),u=s.granularityMs(),d=e.granularity==="trend"?2:1;if((e.dimensions??[]).length>2)throw new Error(`Explore only supports 0-2 dimensions; got: ${JSON.stringify(e.dimensions)}`);const m=(e.dimensions??[]).find(g=>g!=="time"),o=(r==null?void 0:r.dimensionNames)??[],l=Math.max(o.length,1),c=e.metrics||[],f=[];for(let g=0;g<d;g++)for(let T=0;T<l;T++){const v=m?{[m]:o[T]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?w.forEach(h=>{const S=c.reduce((C,A)=>((r==null?void 0:r.deterministic)??!0?C[A]=(d-g)*1e3+100*T+1:C[A]=Math.round(Math.random()*1e3),C),{...v,status_code_grouped:h});f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:S})}):f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:c.reduce((h,S)=>((r==null?void 0:r.deterministic)??!0?h[S]=(d-g)*1e3+100*T+1:h[S]=Math.round(Math.random()*1e3),h),{...v})})}const y={start_ms:a,end_ms:i,start:new Date(a).toISOString(),end:new Date(i).toISOString(),granularity_ms:u,display:m?{[m]:ge(o),...(E=e.dimensions)!=null&&E.includes("status_code_grouped")?{status_code_grouped:ge(w)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:f,meta:y}};R.ALL_STATUS_CODE_GROUPS=w,R.DEFAULT_REFRESH_INTERVAL=ne,R.INJECT_QUERY_PROVIDER=ae,R.MAX_ANALYTICS_REQUEST_RETRIES=te,R.MetricCardSize=I,R.MetricCardType=k,R.MetricsConsumer=vr,R.MetricsProvider=Ue,R.STATUS_CODES_FAILED=K,R.STATUS_CODES_SUCCESS=_e,R.mockExploreResponse=he,R.mockExploreResponseFromCypress=Er,Object.defineProperty(R,Symbol.toStringTag,{value:"Module"})});
1
+ (function(R,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("vue"),require("@kong-ui-public/analytics-utilities"),require("@kong-ui-public/i18n"),require("axios"),require("@kong-ui-public/analytics-config-store"),require("@kong/icons")):typeof define=="function"&&define.amd?define(["exports","vue","@kong-ui-public/analytics-utilities","@kong-ui-public/i18n","axios","@kong-ui-public/analytics-config-store","@kong/icons"],r):(R=typeof globalThis<"u"?globalThis:R||self,r(R["kong-ui-public-vitals-metric-provider"]={},R.Vue,R["kong-ui-public-analytics-utilities"],R["kong-ui-public-i18n"],R.axios,R["kong-ui-public-analytics-config-store"],R.KongIcons))})(this,function(R,r,D,re,Rr,Te,_){"use strict";const Ce={general:{notAvailable:"N/A"},metricCard:{small:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Avg. latency",p99Latency:"P99 latency"},short:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Average latency",p99Latency:"P99 latency"},long:{traffic:"Number of requests",errorRate:"Average error rate",averageLatency:"Average latency",p99Latency:"P99 latency"}},trendRange:{custom:"vs previous {numDays, plural, =1 {day} other {# days}}","15m":"vs previous 15 minutes","1h":"vs previous hour","6h":"vs previous 6 hours","12h":"vs previous 12 hours","24h":"vs previous 24 hours","7d":"vs previous 7 days","30d":"vs previous 30 days",current_week:"vs previous week",current_month:"vs previous month",current_quarter:"vs previous quarter",previous_week:"vs previous time period",previous_month:"vs previous time period",previous_quarter:"vs previous quarter"}};function Se(){const e=re.createI18n("en-us",Ce);return{i18n:e,i18nT:re.i18nTComponent(e)}}const te=2,w=["1XX","2XX","3XX","4XX","5XX"],K=["4XX","5XX"],_e=["1XX","2XX","3XX"],ne=30*1e3,ae="analytics-query-provider";var ie=(e=>(e.VALIDATING="VALIDATING",e.VALIDATING_HAS_DATA="VALIDATING_HAS_DATA",e.PENDING="PENDING",e.SUCCESS="SUCCESS",e.SUCCESS_HAS_DATA="SUCCESS_HAS_DATA",e.ERROR="ERROR",e.STALE_IF_ERROR="STALE_IF_ERROR",e))(ie||{});const Ie=e=>{var t,n,s,i,a;return e?!!((t=Object.keys(e))!=null&&t.length||(n=e.data)!=null&&n.length||(i=(s=e.data)==null?void 0:s.data)!=null&&i.length||!((a=e.data)!=null&&a.data)&&typeof e.data=="object"&&Object.keys(e==null?void 0:e.data).length):!1};function ke(e=r.ref({}),t,n,s=Ie){const i=r.ref("PENDING");return r.watchEffect(()=>{const a=s(e.value);if(e.value&&a&&n.value){i.value="VALIDATING_HAS_DATA";return}if(e.value&&n.value){i.value="VALIDATING";return}if(e.value&&t.value){i.value="STALE_IF_ERROR";return}if(e.value===void 0&&!t.value){i.value="PENDING";return}if(e.value&&!t.value&&a){i.value="SUCCESS_HAS_DATA";return}if(e.value&&!t.value){i.value="SUCCESS";return}e.value===void 0&&t&&(i.value="ERROR")}),{state:i,swrvState:ie}}const V=Symbol("default"),U="status_code_grouped",oe=(e,t,n,s,i)=>{e[t][n]||(e[t][n]={}),e[t][n][s]=i};function Ae(e,t){var d;const n=((d=e.meta.metric_names)==null?void 0:d[0])||"",s=e.meta.start_ms,i=Object.keys(e.meta.display||{}),a=!!i.find(m=>m===U),u=i.find(m=>m!==U);return i.length>2||i.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",i),{previous:{[V]:{[V]:0}},current:{[V]:{[V]:0}}}):e.data.reduce((m,o)=>{const l=o.event[n],c=u?o.event[u]:V,f=a?o.event[U]:V;return new Date(o.timestamp).getTime()===s&&t?oe(m,"previous",c,f,l):oe(m,"current",c,f,l),m},{previous:{},current:{}})}function De(e){e.queryReady===void 0&&(e.queryReady=r.computed(()=>!0));const{i18n:t}=N.useI18n(),n=r.computed(()=>{var c,f;return{metrics:e.metrics.value,dimensions:[...(c=e.dimensions)!=null&&c.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(f=e.filter.value)!=null&&f.length?{filters:e.filter.value}:{},time_range:e.timeframe.value.v4Query(e.tz.value)}}),s=r.computed(()=>{var f,y,p,E;if(!((f=e.queryReady)!=null&&f.value))return null;const c=(y=e.filter)!=null&&y.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${e.timeframe.value.cacheKey()}-${(p=e.dimensions)==null?void 0:p.join("-")}-${(E=e.metrics.value)==null?void 0:E.join("-")}-${c}-${e.refreshCounter.value}`}),{response:i,error:a,isValidating:u}=N.useRequest(()=>s.value,()=>e.queryFn({datasource:e.datasource.value,query:n.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:te}),{state:d,swrvState:m}=ke(i,a,u),o=r.computed(()=>{var c,f,y,p,E,g,T;return!((f=(c=i.value)==null?void 0:c.data)!=null&&f.length)||!((p=(y=i.value)==null?void 0:y.meta)!=null&&p.display)||!((T=(g=(E=i.value)==null?void 0:E.meta)==null?void 0:g.metric_names)!=null&&T.length)?{current:{},previous:{}}:Ae(i.value,e.withTrend.value)}),l=r.computed(()=>{var c,f;if(e.timeframe.value.key==="custom"){if(!((f=(c=i.value)==null?void 0:c.meta)!=null&&f.start_ms))return"";const{start_ms:y,end_ms:p}=i.value.meta;let E=(p-y)/(1e3*60*60*24);return e.withTrend.value&&(E/=2),t.t("trendRange.custom",{numDays:Math.round(E)})}else return e.withTrend.value?t.t(`trendRange.${e.timeframe.value.key}`):""});return{isLoading:r.computed(()=>m.PENDING===d.value),hasError:r.computed(()=>m.ERROR===d.value),raw:i,mapped:o,trendRange:l}}const L=(e,t,n=V,s)=>(s??[V]).reduce((a,u)=>{const d=e[t][n];return d?a+(d[u]||0):a},0);function be(e){const{cardType:t,title:n,description:s,record:i,hasError:a,increaseIsBad:u,formatValueFn:d,trendRange:m}=e;return r.computed(()=>{let o=0,l=0;if(i!=null&&i.value)try{o=L(i.value,"current",e.lookupKey,e.sumGroupedValues),l=L(i.value,"previous",e.lookupKey,e.sumGroupedValues)}catch(c){console.error("Metric card data doesn't have the expected structure:",c)}return{cardType:t,hasError:a.value,currentValue:o,previousValue:l,title:n.value,description:s,increaseIsBad:!!u,formatValueFn:d,trendRange:m==null?void 0:m.value}})}var $=new WeakMap,se=0;function Ve(e){if(!e.length)return"";for(var t="arg",n=0;n<e.length;++n){var s=void 0;e[n]===null||typeof e[n]!="object"&&typeof e[n]!="function"?typeof e[n]=="string"?s='"'+e[n]+'"':s=String(e[n]):$.has(e[n])?s=$.get(e[n]):(s=se,$.set(e[n],se++)),t+="@"+s}return t}function Ne(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=Ve(e):e=String(e||""),e}var X=function(){function e(t){t===void 0&&(t=0),this.items=new Map,this.ttl=t}return e.prototype.serializeKey=function(t){return Ne(t)},e.prototype.get=function(t){var n=this.serializeKey(t);return this.items.get(n)},e.prototype.set=function(t,n,s){var i=this.serializeKey(t),a=s||this.ttl,u=Date.now(),d={data:n,createdAt:u,expiresAt:a?u+a:1/0};this.dispatchExpire(a,d,i),this.items.set(i,d)},e.prototype.dispatchExpire=function(t,n,s){var i=this;t&&setTimeout(function(){var a=Date.now(),u=a>=n.expiresAt;u&&i.delete(s)},t)},e.prototype.delete=function(t){this.items.delete(t)},e}();function Oe(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function we(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var Le=function(e){return fetch(e).then(function(t){return t.json()})};const G={isOnline:Oe,isDocumentVisible:we,fetcher:Le};var b=function(){return b=Object.assign||function(e){for(var t,n=1,s=arguments.length;n<s;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},b.apply(this,arguments)},B=function(e,t,n,s){function i(a){return a instanceof n?a:new n(function(u){u(a)})}return new(n||(n=Promise))(function(a,u){function d(l){try{o(s.next(l))}catch(c){u(c)}}function m(l){try{o(s.throw(l))}catch(c){u(c)}}function o(l){l.done?a(l.value):i(l.value).then(d,m)}o((s=s.apply(e,t||[])).next())})},F=function(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},s,i,a,u;return u={next:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(o){return function(l){return m([o,l])}}function m(o){if(s)throw new TypeError("Generator is already executing.");for(;n;)try{if(s=1,i&&(a=o[0]&2?i.return:o[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,o[1])).done)return a;switch(i=0,a&&(o=[o[0]&2,a.value]),o[0]){case 0:case 1:a=o;break;case 4:return n.label++,{value:o[1],done:!1};case 5:n.label++,i=o[1],o=[0];continue;case 7:o=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){n.label=o[1];break}if(o[0]===6&&n.label<a[1]){n.label=a[1],a=o;break}if(a&&n.label<a[2]){n.label=a[2],n.ops.push(o);break}a[2]&&n.ops.pop(),n.trys.pop();continue}o=t.call(e,n)}catch(l){o=[6,l],i=0}finally{s=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Be=function(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],u;try{for(;(t===void 0||t-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(d){u={error:d}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(u)throw u.error}}return a},Fe=function(e,t,n){if(n||arguments.length===2)for(var s=0,i=t.length,a;s<i;s++)(a||!(s in t))&&(a||(a=Array.prototype.slice.call(t,0,s)),a[s]=t[s]);return e.concat(a||Array.prototype.slice.call(t))},le=new X,q=new X,j=new X,ce={cache:le,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:G.fetcher,isOnline:G.isOnline,isDocumentVisible:G.isDocumentVisible};function Me(e,t,n){var s=q.get(e);if(s)s.data.push(t);else{var i=5e3;q.set(e,[t],n>0?n+i:n)}}function qe(e,t,n){if(n.isDocumentVisible()&&!(n.errorRetryCount!==void 0&&t>n.errorRetryCount)){var s=Math.min(t||0,n.errorRetryCount),i=s*n.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:s+1,shouldRetryOnError:!0})},i)}}var ue=function(e,t,n,s){return n===void 0&&(n=le),s===void 0&&(s=ce.ttl),B(void 0,void 0,void 0,function(){var i,a,u,d,m,o,l;return F(this,function(c){switch(c.label){case 0:if(!ze(t))return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,t];case 2:return i=c.sent(),[3,4];case 3:return d=c.sent(),a=d,[3,4];case 4:return[3,6];case 5:i=t,c.label=6;case 6:if(u=!1,m={data:i,error:a,isValidating:u},typeof i<"u")try{n.set(e,m,s)}catch(f){console.error("swrv(mutate): failed to set cache",f)}return o=q.get(e),o&&o.data.length&&(l=o.data.filter(function(f){return f.key===e}),l.forEach(function(f,y){typeof m.data<"u"&&(f.data=m.data),f.error=m.error,f.isValidating=m.isValidating,f.isLoading=m.isValidating;var p=y===l.length-1;p||delete l[y]}),l=l.filter(Boolean)),[2,m]}})})};function xe(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var s,i,a=b({},ce),u=!1,d=!1,m=r.getCurrentInstance(),o=(m==null?void 0:m.proxy)||m;if(!o)return console.error("Could not get current instance, check to make sure that `useSwrv` is declared in the top level of the setup function."),null;var l=(o==null?void 0:o.$isServer)||!1;t.length>=1&&(s=t[0]),t.length>=2&&(i=t[1]),t.length>2&&(a=b(b({},a),t[2]));var c=l?a.serverTTL:a.ttl,f=typeof s=="function"?s:r.ref(s);typeof i>"u"&&(i=a.fetcher);var y=null;y||(y=r.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var p=function(v,h){return B(e,void 0,void 0,function(){var S,C,A,M,W,pe,J,ve=this;return F(this,function(Z){switch(Z.label){case 0:return S=y.data===void 0,C=f.value,C?(A=a.cache.get(C),M=A&&A.data,y.isValidating=!0,y.isLoading=!M,M&&(y.data=M.data,y.error=M.error),W=v||i,!W||!a.isDocumentVisible()&&!S||(h==null?void 0:h.forceRevalidate)!==void 0&&!(h!=null&&h.forceRevalidate)?(y.isValidating=!1,y.isLoading=!1,[2]):A&&(pe=!!(Date.now()-A.createdAt>=a.dedupingInterval||h!=null&&h.forceRevalidate),!pe)?(y.isValidating=!1,y.isLoading=!1,[2]):(J=function(){return B(ve,void 0,void 0,function(){var O,Ee,ee,Re;return F(this,function(P){switch(P.label){case 0:return O=j.get(C),O?[3,2]:(Ee=Array.isArray(C)?C:[C],ee=W.apply(void 0,Fe([],Be(Ee),!1)),j.set(C,ee,a.dedupingInterval),[4,ue(C,ee,a.cache,c)]);case 1:return P.sent(),[3,4];case 2:return[4,ue(C,O.data,a.cache,c)];case 3:P.sent(),P.label=4;case 4:return y.isValidating=!1,y.isLoading=!1,j.delete(C),y.error!==void 0&&(Re=!u&&a.shouldRetryOnError&&(h?h.shouldRetryOnError:!0),Re&&qe(p,h?h.errorRetryCount:1,a)),[2]}})})},M&&a.revalidateDebounce?(setTimeout(function(){return B(ve,void 0,void 0,function(){return F(this,function(O){switch(O.label){case 0:return u?[3,2]:[4,J()];case 1:O.sent(),O.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,J()];case 2:Z.sent(),Z.label=3;case 3:return[2]}})})},E=function(){return B(e,void 0,void 0,function(){return F(this,function(v){return[2,p(null,{shouldRetryOnError:!1})]})})},g=null;r.onMounted(function(){var v=function(){return B(e,void 0,void 0,function(){return F(this,function(h){switch(h.label){case 0:return!y.error&&a.isOnline()?[4,p()]:[3,2];case 1:return h.sent(),[3,3];case 2:g&&clearTimeout(g),h.label=3;case 3:return a.refreshInterval&&!u&&(g=setTimeout(v,a.refreshInterval)),[2]}})})};a.refreshInterval&&(g=setTimeout(v,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",E,!1),window.addEventListener("focus",E,!1))}),r.onUnmounted(function(){u=!0,g&&clearTimeout(g),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",E,!1),window.removeEventListener("focus",E,!1));var v=q.get(f.value);v&&(v.data=v.data.filter(function(h){return h!==y}))});try{r.watch(f,function(v){r.isReadonly(f)||(f.value=v),y.key=v,y.isValidating=!!v,Me(f.value,y,c),!l&&!d&&f.value&&p(),d=!1},{immediate:!0})}catch{}var T=b(b({},r.toRefs(y)),{mutate:function(v,h){return p(v,b(b({},h),{forceRevalidate:!0}))}});return T}function ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function Pe(e,t,n){const{data:s,error:i,isValidating:a,mutate:u}=xe(e,t,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:r.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:u}}const N={useI18n:Se,useMetricCardBuilder:be,useMetricFetcher:De,useRequest:Pe},de=Symbol("METRICS_PROVIDER_KEY"),Ke=e=>{const{datasource:t,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeframe:u,tz:d,hasTrendAccess:m,refreshInterval:o,abortController:l,queryFn:c,averageLatencies:f}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const y=!!(n&&s),p=!!(n&&!s),E=r.computed(()=>{const S=[];return y&&S.push({field:n,operator:"in",value:[s]}),i.value&&S.push(...D.stripUnknownFilters(t.value,i.value)),S}),g={datasource:t,metrics:r.ref(["request_count"]),dimensions:[...n&&!y?[n]:[],"status_code_grouped"],filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:c,abortController:l,refreshCounter:e.refreshCounter},T={datasource:t,metrics:r.computed(()=>[f.value?"response_latency_average":"response_latency_p99"]),...n&&!y?{dimensions:[n]}:{},filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:c,abortController:l,refreshCounter:e.refreshCounter},v=N.useMetricFetcher(g),h=N.useMetricFetcher(T);return{trafficData:v,latencyData:h}},Ue=r.defineComponent({__name:"MetricsProvider",props:{datasource:{default:void 0},maxTimeframe:{default:D.TimeframeKeys.THIRTY_DAY},overrideTimeframe:{default:void 0},tz:{default:void 0},dimension:{default:void 0},filterValue:{default:void 0},additionalFilter:{default:void 0},queryReady:{type:Boolean,default:!0},refreshInterval:{default:ne},longCardTitles:{type:Boolean,default:!1},containerTitle:{default:void 0},description:{default:void 0},percentileLatency:{type:Boolean,default:void 0},abortController:{default:void 0},refreshCounter:{default:0}},setup(e){const t=e;if(t.dimension&&D.queryableExploreDimensions.findIndex(y=>y===t.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${t.dimension}`);const n=r.inject(ae);let s;n?s=n.queryFn:(console.warn("Analytics dashboards require a query bridge supplied via provide / inject."),console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"),console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/analytics-metric-provider/README.md#requirements"),s=()=>Promise.reject(new Error("Query bridge required")));const i=Te.useAnalyticsConfigStore(),a=r.computed(()=>!0),u=r.computed(()=>!i.loading&&t.queryReady),d=r.computed(()=>t.tz?t.tz:new Intl.DateTimeFormat().resolvedOptions().timeZone),m=r.computed(()=>t.datasource?t.datasource:"basic"),o=r.computed(()=>t.overrideTimeframe||D.TimePeriods.get(D.TimeframeKeys.SEVEN_DAY)),l=r.computed(()=>!t.percentileLatency),{trafficData:c,latencyData:f}=Ke({datasource:m,dimension:t.dimension,dimensionFilterValue:t.filterValue,additionalFilter:r.toRef(t,"additionalFilter"),queryReady:u,timeframe:o,tz:d,hasTrendAccess:a,refreshInterval:t.refreshInterval,queryFn:s,averageLatencies:l,abortController:t.abortController,refreshCounter:r.toRef(t,"refreshCounter")});return r.provide(de,{data:{traffic:c,latency:f},description:r.toRef(()=>t.description),containerTitle:r.toRef(()=>t.containerTitle),hasTrendAccess:a,longCardTitles:t.longCardTitles,averageLatencies:l}),(y,p)=>r.renderSlot(y.$slots,"default",{hasTrendAccess:a.value,timeframe:o.value})}});function $e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fe={exports:{}};(function(e){(function(){function t(o,l){if(l.separator===!1||o<1e3)return o.toString();var c=typeof l.separator=="string"?l.separator:",",f=[],y=Math.round(o).toString().split("");return y.reverse().forEach(function(p,E){E&&E%3===0&&f.push(c),f.push(p)}),f.reverse().join("")}function n(o,l,c){var f=o/l,y=c.round?"round":"floor";return c.decimal===!1?(o=Math[y](f),o.toString()):(c.precision?o=f:o=f<10?Math[y](f*10)/10:Math[y](f),o=o.toString(),typeof c.decimal=="string"&&(o=o.replace(".",c.decimal)),o)}var s=1e3,i=1e4,a=1e6,u=1e9,d=1e12;function m(o,l){var c;l=l||{};var f=o<0;f&&(o=Math.abs(o)),l.precision&&(o=parseFloat(o.toPrecision(l.precision)));var y=l.min10k?i:s;return o<y||l.precision&&l.precision>Math.log10(o)?c=t(n(o,1,l),l):o<a?c=n(o,s,l)+"k":o<u?c=n(o,a,l)+"m":o<d?c=t(n(o,u,l),l)+"b":c=t(n(o,d,l),l)+"t",f&&(c="-"+c),l.capital&&(c=c.toUpperCase()),l.prefix&&(c=l.prefix+c),l.suffix&&(c=c+l.suffix),c}m.addCommas=t,e.exports=m})()})(fe);var Xe=fe.exports;const Ge=$e(Xe);var k=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(k||{}),I=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(I||{});const Y=2,me=Y+2,je=(e,t,n=!1)=>{let s=!t||Number(e.toFixed(me))===0?0:Number(e.toFixed(me))>0?1:-1;return n&&(s*=-1),s},Ye=(e,t,n)=>t?`${Math.abs(e*100).toFixed(Y)}%`:n,He=(e,t)=>t===0?0:e/t-1,Qe=(e,t=!1)=>(t&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),We="#ad000e",H="#6c7489",ye="#52596e",Je="#007d60",x="16px",Ze="20px",er={key:0,class:"metricscard-description"},rr={class:"metricscard-valuetrend"},tr={key:0,class:"metricscard-error"},nr={key:2,class:"metricscard-trend"},ar={"data-testid":"metric-trend-change"},ir={key:0,class:"metricscard-trend-range"},or=r.defineComponent({__name:"MetricsCard",props:{cardType:{type:String,required:!0,default:k.GENERIC_COUNT},title:{type:String,default:"0%",required:!0},description:{type:String,default:"",required:!1},tooltip:{type:String,required:!1,default:""},timeframe:{type:String,required:!1,default:""},metricValue:{type:String,default:""},metricChange:{type:String,required:!0},changePolarity:{type:Number,required:!0},trendIcon:{type:Object,default:_.IndeterminateSmallIcon},trendRange:{type:String,default:""},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:"Vitals data error"},cardSize:{type:String,required:!1,default:()=>I.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const t=new Map([[k.GENERIC_COUNT,_.VitalsIcon],[k.TRAFFIC,_.CloudUploadIcon],[k.ERROR_RATE,_.WarningOutlineIcon],[k.LATENCY,_.ResponseIcon]]),n=e,s=d=>{const m={red:`var(--kui-color-text-danger-strong, ${We})`,green:`var(--kui-color-text-success, ${Je})`,grey:`var(--kui-color-text-neutral-strong, ${ye})`};return d>0?m.green:d<0?m.red:m.grey},i=d=>d>0?"positive":d<0?"negative":"neutral",a=[I.Medium,I.Large].includes(n.cardSize),u=[I.Small].includes(n.cardSize);return(d,m)=>{const o=r.resolveComponent("KTooltip");return r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["metricscard",e.cardSize])},[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-title",e.cardSize])},[r.unref(u)?r.createCommentVNode("",!0):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(r.unref(t).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])),(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.titleTag),null,{default:r.withCtx(()=>[r.createTextVNode(r.toDisplayString(e.title),1)]),_:1})),e.tooltip?(r.openBlock(),r.createBlock(o,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:r.withCtx(()=>[r.createVNode(r.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])]),_:1},8,["text"])):r.createCommentVNode("",!0)],2),e.description&&r.unref(a)?(r.openBlock(),r.createElementBlock("div",er,[r.createElementVNode("span",null,r.toDisplayString(e.description),1)])):r.createCommentVNode("",!0),r.createElementVNode("div",rr,[e.hasError?(r.openBlock(),r.createElementBlock("div",tr,[r.createVNode(r.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(Ze)},null,8,["color","size"]),r.createElementVNode("div",null," "+r.toDisplayString(e.errorMessage),1)])):(r.openBlock(),r.createElementBlock("div",{key:1,class:r.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},r.toDisplayString(e.metricValue),3)),r.unref(a)?(r.openBlock(),r.createElementBlock("div",nr,[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-trend-change",i(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.trendIcon),{key:0,color:s(e.changePolarity),size:r.unref(x)},null,8,["color","size"])):(r.openBlock(),r.createBlock(r.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${r.unref(ye)})`,size:r.unref(x)},null,8,["color","size"])),r.createElementVNode("div",ar,r.toDisplayString(e.metricChange),1)],2),e.trendRange?(r.openBlock(),r.createElementBlock("div",ir,r.toDisplayString(e.trendRange),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0)])],2)}}}),Q=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},sr=Q(or,[["__scopeId","data-v-b1513f6f"]]),lr={},cr={class:"loading-tabs"};function ur(e,t){const n=r.resolveComponent("KSkeletonBox");return r.openBlock(),r.createElementBlock("div",cr,[r.createVNode(n,{width:"100"}),r.createVNode(n,{width:"75"})])}const dr=Q(lr,[["render",ur],["__scopeId","data-v-9c7113d7"]]),fr={key:0,class:"container-title"},mr={key:0,class:"container-description"},yr={key:1,class:"error-display"},gr={key:0,class:"error-display-message"},hr={key:2,class:"cards-wrapper"},pr=Q(r.defineComponent({__name:"MetricCardContainer",props:{fallbackDisplayText:{type:String,required:!0},cards:{type:Array,required:!0},errorMessage:{type:String,required:!1,default:""},loading:{type:Boolean,required:!1,default:!1},hasTrendAccess:{type:Boolean,required:!1,default:!0},cardSize:{type:String,required:!1,default:()=>I.Large},containerTitle:{type:String,required:!1,default:""},containerDescription:{type:String,required:!1,default:""}},setup(e){const t=e,n=r.computed(()=>t.cards.every(i=>(i==null?void 0:i.hasError)===!0)),s=i=>{const a=He(i.currentValue,i.previousValue)||0,u=je(a,t.hasTrendAccess,i.increaseIsBad);return{metricValue:i.formatValueFn?i.formatValueFn(i.currentValue):Ge(i.currentValue,{capital:!0,round:!0})||"0",metricChange:i.formatChangeFn?i.formatChangeFn(a):Ye(a,t.hasTrendAccess,t.fallbackDisplayText),changePolarity:u,trendIcon:Qe(u,i.increaseIsBad),cardSize:t.cardSize,hasContainerTitle:!!t.containerTitle}};return(i,a)=>(r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[t.containerTitle||t.containerDescription?(r.openBlock(),r.createElementBlock("div",fr,[r.createTextVNode(r.toDisplayString(t.containerTitle)+" ",1),t.containerDescription?(r.openBlock(),r.createElementBlock("div",mr,r.toDisplayString(t.containerDescription),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0),n.value?(r.openBlock(),r.createElementBlock("div",yr,[r.createVNode(r.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(r.openBlock(),r.createElementBlock("div",gr,r.toDisplayString(e.errorMessage),1)):r.createCommentVNode("",!0)])):(r.openBlock(),r.createElementBlock("div",hr,[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(e.cards,(u,d)=>(r.openBlock(),r.createElementBlock(r.Fragment,null,[e.loading?(r.openBlock(),r.createElementBlock("div",{key:`skeleton-${d}`,class:"loading-tab"},[r.createVNode(dr,{class:r.normalizeClass(e.cardSize===r.unref(I).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(r.openBlock(),r.createBlock(sr,r.mergeProps({key:d},{ref_for:!0},s(u),{"card-size":e.cardSize,"card-type":u.cardType,description:u.description,"error-message":e.errorMessage,"has-error":u.hasError,title:u.title,"title-tag":u.titleTag,tooltip:u.tooltip,"trend-range":u.trendRange}),null,16,["card-size","card-type","description","error-message","has-error","title","title-tag","tooltip","trend-range"]))],64))),256))]))],2))}}),[["__scopeId","data-v-7080ba56"]]),vr=r.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:I.Large},cardToDisplay:{default:void 0}},setup(e){const t=e,n=r.inject(de);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=N.useI18n(),u=r.computed(()=>n.containerTitle.value?I.Medium:t.cardSize),d=N.useMetricCardBuilder({cardType:k.TRAFFIC,title:r.computed(()=>n.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:s.mapped,hasError:s.hasError,lookupKey:t.lookupKey,sumGroupedValues:w,trendRange:s.trendRange}),m=g=>`${g.toFixed(Y)}%`,o=r.computed(()=>{const g=s.mapped.value,T=L(g,"current",t.lookupKey,K),v=L(g,"current",t.lookupKey,w),h=T/v*100||0,S=L(g,"previous",t.lookupKey,K),C=L(g,"previous",t.lookupKey,w),A=S/C*100||0;return{cardType:k.ERROR_RATE,hasError:s.hasError.value,currentValue:h,previousValue:A,formatValueFn:m,title:n.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:s.trendRange.value}}),l=g=>`${g}ms`,c=N.useMetricCardBuilder({cardType:k.LATENCY,title:r.computed(()=>{const{longCardTitles:g,averageLatencies:T}=n,v=T.value?"averageLatency":"p99Latency";return g?a.t(`metricCard.long.${v}`):u.value===I.Small?a.t(`metricCard.small.${v}`):a.t(`metricCard.short.${v}`)}),hasError:i.hasError,record:i.mapped,lookupKey:t.lookupKey,increaseIsBad:!0,formatValueFn:l,trendRange:i.trendRange}),f=r.computed(()=>t.cardToDisplay==="TRAFFIC"?[d.value]:t.cardToDisplay==="ERROR_RATE"?[o.value]:t.cardToDisplay==="LATENCY"?[c.value]:[d.value,o.value,c.value]),y=r.computed(()=>t.cardToDisplay==="TRAFFIC"||t.cardToDisplay==="ERROR_RATE"?s.isLoading.value:t.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),p=r.computed(()=>({cards:f.value,containerTitle:n.containerTitle.value,containerDescription:n.description.value,loading:y.value,hasTrendAccess:n.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:u.value,hideTitle:!0})),E=r.computed(()=>({loading:p.value.loading,trafficCard:d.value,errorRateCard:o.value,latencyCard:c.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:l(c.value.currentValue)}));return(g,T)=>r.renderSlot(g.$slots,"default",{cardValues:E.value},()=>[r.createVNode(pr,r.normalizeProps(r.guardReactiveProps(p.value)),null,16)])}}),z=e=>new Date(e),Er=(e,t)=>{const n=e.body;e.reply({statusCode:200,body:he(n,t)})},ge=e=>e.reduce((t,n)=>(t[n]={name:n},t),{}),he=(e,t)=>{var p,E;const n=D.TimePeriods.get(D.TimeframeKeys.ONE_DAY),s=e.granularity==="trend"?new D.DeltaQueryTime(n):new D.UnaryQueryTime(n),i=s.endMs(),a=s.startMs(),u=s.granularityMs(),d=e.granularity==="trend"?2:1;if((e.dimensions??[]).length>2)throw new Error(`Explore only supports 0-2 dimensions; got: ${JSON.stringify(e.dimensions)}`);const m=(e.dimensions??[]).find(g=>g!=="time"),o=(t==null?void 0:t.dimensionNames)??[],l=Math.max(o.length,1),c=e.metrics||[],f=[];for(let g=0;g<d;g++)for(let T=0;T<l;T++){const v=m?{[m]:o[T]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?w.forEach(h=>{const S=c.reduce((C,A)=>((t==null?void 0:t.deterministic)??!0?C[A]=(d-g)*1e3+100*T+1:C[A]=Math.round(Math.random()*1e3),C),{...v,status_code_grouped:h});f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:S})}):f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:c.reduce((h,S)=>((t==null?void 0:t.deterministic)??!0?h[S]=(d-g)*1e3+100*T+1:h[S]=Math.round(Math.random()*1e3),h),{...v})})}const y={start_ms:a,end_ms:i,start:new Date(a).toISOString(),end:new Date(i).toISOString(),granularity_ms:u,display:m?{[m]:ge(o),...(E=e.dimensions)!=null&&E.includes("status_code_grouped")?{status_code_grouped:ge(w)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:f,meta:y}};R.ALL_STATUS_CODE_GROUPS=w,R.DEFAULT_REFRESH_INTERVAL=ne,R.INJECT_QUERY_PROVIDER=ae,R.MAX_ANALYTICS_REQUEST_RETRIES=te,R.MetricCardSize=I,R.MetricCardType=k,R.MetricsConsumer=vr,R.MetricsProvider=Ue,R.STATUS_CODES_FAILED=K,R.STATUS_CODES_SUCCESS=_e,R.mockExploreResponse=he,R.mockExploreResponseFromCypress=Er,Object.defineProperty(R,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kong-ui-public/analytics-metric-provider",
3
- "version": "9.1.7-pr.2345.670f75491.0",
3
+ "version": "9.1.7-pr.2346.6852d85bd.0",
4
4
  "type": "module",
5
5
  "main": "./dist/vitals-metric-provider.umd.js",
6
6
  "module": "./dist/vitals-metric-provider.es.js",
@@ -40,17 +40,17 @@
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@kong/kongponents": "^9.34.2",
43
- "@kong-ui-public/analytics-utilities": "^10.1.5",
44
- "@kong-ui-public/i18n": "^2.4.3",
45
- "@kong-ui-public/analytics-config-store": "^1.1.5"
43
+ "@kong-ui-public/analytics-config-store": "^1.1.6-pr.2346.6852d85bd.0",
44
+ "@kong-ui-public/analytics-utilities": "^10.1.6-pr.2346.6852d85bd.0",
45
+ "@kong-ui-public/i18n": "^2.4.3"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@kong/design-tokens": "1.18.0",
49
49
  "@kong/kongponents": "9.38.3",
50
50
  "pinia": ">= 2.1.7 < 3",
51
51
  "@kong-ui-public/i18n": "^2.4.3",
52
- "@kong-ui-public/analytics-utilities": "^10.1.5",
53
- "@kong-ui-public/analytics-config-store": "^1.1.5"
52
+ "@kong-ui-public/analytics-config-store": "^1.1.6-pr.2346.6852d85bd.0",
53
+ "@kong-ui-public/analytics-utilities": "^10.1.6-pr.2346.6852d85bd.0"
54
54
  },
55
55
  "scripts": {
56
56
  "dev": "cross-env USE_SANDBOX=true vite",