@gravitee/gamma-lib-observability 1.6.0 → 1.6.1-feat-gma-413-expose-full-analytics-capability.c4db44a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/INTEGRATION.md +14 -14
  2. package/QUERYING.md +192 -0
  3. package/USAGE_GUIDE.md +8 -6
  4. package/dist/dashboards/adapters/time-series-adapter.d.ts +1 -1
  5. package/dist/dashboards/adapters/time-series-adapter.d.ts.map +1 -1
  6. package/dist/dashboards/renderers/BarWidgetRenderer.d.ts.map +1 -1
  7. package/dist/dashboards/renderers/CartesianWidgetRenderer.d.ts.map +1 -1
  8. package/dist/dashboards/renderers/DoughnutWidgetRenderer.d.ts.map +1 -1
  9. package/dist/dashboards/renderers/MetricGroupWidgetRenderer.d.ts.map +1 -1
  10. package/dist/dashboards/templates/dashboard-template.d.ts +0 -2
  11. package/dist/dashboards/templates/dashboard-template.d.ts.map +1 -1
  12. package/dist/dashboards/widget-data.d.ts +1 -1
  13. package/dist/data-sources/http-data-source.d.ts.map +1 -1
  14. package/dist/hooks/query-keys.d.ts +13 -5
  15. package/dist/hooks/query-keys.d.ts.map +1 -1
  16. package/dist/hooks/use-facets-query.d.ts +14 -2
  17. package/dist/hooks/use-facets-query.d.ts.map +1 -1
  18. package/dist/hooks/use-time-series-query.d.ts +2 -1
  19. package/dist/hooks/use-time-series-query.d.ts.map +1 -1
  20. package/dist/index.js +699 -642
  21. package/dist/routing/DashboardListPage.d.ts.map +1 -1
  22. package/dist/styles/observability.css +1 -1
  23. package/dist/testing/graphene-core-icons-mock.d.ts +1 -0
  24. package/dist/testing/graphene-core-icons-mock.d.ts.map +1 -1
  25. package/dist/testing/mock-metrics-data-source.d.ts.map +1 -1
  26. package/dist/types/domain.d.ts +70 -7
  27. package/dist/types/domain.d.ts.map +1 -1
  28. package/dist/types/requests.d.ts +11 -10
  29. package/dist/types/requests.d.ts.map +1 -1
  30. package/dist/types-entry.d.ts +1 -1
  31. package/dist/types-entry.d.ts.map +1 -1
  32. package/package.json +2 -1
package/INTEGRATION.md CHANGED
@@ -67,6 +67,8 @@ import '@gravitee/gamma-lib-observability/styles';
67
67
 
68
68
  This ships all required Tailwind utilities and graphene theme tokens. No additional Tailwind configuration is needed. The stylesheet is self-contained: it includes the utility classes used by the `@gravitee/graphene-charts` and `@gravitee/graphene-core` components this library renders, so you do **not** need to scan those packages in your own Tailwind config.
69
69
 
70
+ > **No global resets (preflight-free).** This stylesheet intentionally ships **without** Tailwind preflight (the `@layer base` global reset). It therefore only adds scoped utility classes and theme tokens — importing it never alters your host's base element styling (box-sizing, table borders, margins, etc.). Your host app is expected to provide its own base layer through its Tailwind setup or `@gravitee/graphene-core/styles`. Standalone consumers with no Tailwind base of their own can import `tailwindcss/preflight.css` (or graphene-core's styles) separately.
71
+
70
72
  > **Fonts:** this stylesheet does **not** embed the DM Sans font (doing so would reference font files not shipped in the package). Load the font from the host via `@gravitee/graphene-core/fonts` (or your own `@fontsource/dm-sans` import):
71
73
  >
72
74
  > ```ts
@@ -225,12 +227,10 @@ Each module defines its own preset dashboards using `defineDashboardTemplate`:
225
227
 
226
228
  ```ts
227
229
  import { defineDashboardTemplate } from '@gravitee/gamma-lib-observability';
228
- import { LayoutDashboardIcon } from '@gravitee/graphene-core/icons';
229
230
 
230
231
  export const apiOverviewTemplate = defineDashboardTemplate({
231
232
  id: 'api-overview',
232
233
  label: 'API Overview',
233
- icon: LayoutDashboardIcon,
234
234
  description: 'High-level view of all API traffic and key metrics.',
235
235
  requiredCapabilities: ['observability.dashboards.read'],
236
236
  dashboard: {
@@ -260,20 +260,22 @@ export const apiOverviewTemplate = defineDashboardTemplate({
260
260
  | ---------------------- | --------------------------------- | ----------------------------------------------------------- |
261
261
  | `id` | `string` | Unique identifier (used in URL path) |
262
262
  | `label` | `string` | Display name in list and detail pages |
263
- | `icon` | `ElementType` | Icon from `@gravitee/graphene-core/icons` |
264
263
  | `description` | `string` | Shown in the dashboard list table |
265
264
  | `requiredCapabilities` | `CapabilityKey[]` | Template hidden when user lacks any listed capability |
266
265
  | `dashboard` | `Dashboard \| (ctx) => Dashboard` | Static definition or factory receiving capabilities context |
267
266
 
268
267
  ### Widget types
269
268
 
270
- | Type | Description | Key properties |
271
- | -------------- | ------------------------- | ---------------------------------------------------------------------------------------- |
272
- | `cartesian` | Line, area, bar charts | `series[].metric`, `series[].representation`, `series[].measure?` (defaults to `COUNT`) |
273
- | `doughnut` | Pie / doughnut chart | `field`, `limit?` |
274
- | `bar` | Horizontal / vertical bar | `field`, `limit?`, `barLayout?` |
275
- | `metric` | Single KPI value | `metric`, `measure?`, `showTrend?` / `showSparkline?` (both default to `false` — opt in) |
276
- | `metric-group` | Multiple KPI values | `items[].metric`, `items[].measure?`, `items[].showTrend?` |
269
+ | Type | Description | Key properties |
270
+ | -------------- | ------------------------- | ------------------------------------------------------------------------------------------------------ |
271
+ | `cartesian` | Line, area, bar charts | `series[].metric`, `series[].representation`, `series[].measure?`, `series[].by?`, `sorts?`, `ranges?` |
272
+ | `doughnut` | Pie / doughnut chart | `by`, `metric?`, `measure?`, `sorts?`, `ranges?`, `limit?` |
273
+ | `bar` | Horizontal / vertical bar | `by`, `metric?`, `measure?`, `sorts?`, `ranges?`, `limit?`, `barLayout?` |
274
+ | `metric` | Single KPI value | `metric`, `measure?`, `showTrend?` / `showSparkline?` (both default to `false` — opt in) |
275
+ | `metric-group` | Multiple KPI values | `items[].metric`, `items[].measure?`, `items[].filters?`, `items[].showTrend?` |
276
+
277
+ > The full request-capability reference (every field accepted by the `measures` / `facets` / `time-series`
278
+ > endpoints, defaults, and widget → request mapping) lives in [`QUERYING.md`](./QUERYING.md).
277
279
 
278
280
  ### Widget layout
279
281
 
@@ -601,7 +603,7 @@ The capability key `observability.traces.read` is already wired. When a traces e
601
603
  const { navGroup } = observability;
602
604
  // navGroup.label → 'Observability'
603
605
  // navGroup.items → [
604
- // { key: 'observe/dashboards', title: 'Dashboards', icon: LayoutDashboardIcon },
606
+ // { key: 'observe/dashboards', title: 'Dashboards', icon: ChartLineIcon },
605
607
  // { key: 'observe/logs', title: 'Logs', icon: FileTextIcon },
606
608
  // ]
607
609
  ```
@@ -992,12 +994,10 @@ Here is a full example showing a module that enables both dashboards and logs:
992
994
  ```ts
993
995
  // src/config/observability.ts
994
996
  import { defineObservabilityFeatures, defineDashboardTemplate } from '@gravitee/gamma-lib-observability';
995
- import { LayoutDashboardIcon, ActivityIcon } from '@gravitee/graphene-core/icons';
996
997
 
997
998
  const trafficTemplate = defineDashboardTemplate({
998
999
  id: 'traffic-overview',
999
1000
  label: 'Traffic Overview',
1000
- icon: ActivityIcon,
1001
1001
  description: 'Request volume, latency, and error rates.',
1002
1002
  dashboard: {
1003
1003
  id: 'traffic-overview',
@@ -1029,7 +1029,7 @@ const trafficTemplate = defineDashboardTemplate({
1029
1029
  title: 'Status Codes',
1030
1030
  type: 'doughnut',
1031
1031
  metric: 'request_count',
1032
- groupBy: 'status_code',
1032
+ by: ['status_code'],
1033
1033
  layout: { x: 8, y: 2, cols: 4, rows: 2 },
1034
1034
  },
1035
1035
  ],
package/QUERYING.md ADDED
@@ -0,0 +1,192 @@
1
+ # Querying & Widgets — @gravitee/gamma-lib-observability
2
+
3
+ How dashboard widgets map to the Gravitee Management **v2 analytics** compute endpoints, every
4
+ request field they expose, the defaults the library injects, and copy-pasteable examples.
5
+
6
+ > Source of truth: `openapi-analytics.yaml` (`MeasuresRequest` / `FacetsRequest` / `TimeSeriesRequest`
7
+ > / `MetricRequest` / `FacetMetricRequest` / `Sort` / `NumberRange`). Keep this doc in sync with the
8
+ > spec and the analytics definition (allowed metrics / measures / facets per API type).
9
+
10
+ ---
11
+
12
+ ## 1. Endpoints
13
+
14
+ | Endpoint | Used by widgets | Returns |
15
+ | ----------------------------- | ------------------------ | ------------------------------------------- |
16
+ | `POST /analytics/measures` | `metric`, `metric-group` | aggregated metric values (`MetricResult[]`) |
17
+ | `POST /analytics/facets` | `doughnut`, `bar` | grouped buckets (`FacetBucket[]`) |
18
+ | `POST /analytics/time-series` | `cartesian` | data points over time (`TimeSeriesGroup[]`) |
19
+
20
+ ### Capability matrix
21
+
22
+ Which request fields each endpoint accepts (✅ supported, — not applicable):
23
+
24
+ | Field | measures | facets | time-series | Notes |
25
+ | -------------------------- | :------: | :------: | :----------: | ----------------------------------------- |
26
+ | `timeRange` | ✅ | ✅ | ✅ | ISO 8601 string or epoch |
27
+ | `interval` | — | — | ✅ | ms (number) or `1s` / `1m` / `5h` / `2d` |
28
+ | top-level `filters[]` | ✅ | ✅ | ✅ | `Filter` (string / number / array) |
29
+ | `by[]` (dimensions) | — | ✅ (1–3) | ✅ (up to 2) | multi-dimensional grouping |
30
+ | `limit` | — | ✅ | ✅ | bucket cap |
31
+ | `ranges` (`NumberRange[]`) | — | ✅ | ✅ | numeric bucketing (e.g. status `100–399`) |
32
+ | `metrics[]` | ✅ | ✅ | ✅ | one or more metrics per request |
33
+ | metric `measures[]` | ✅ | ✅ | ✅ | e.g. `[COUNT, AVG]` |
34
+ | metric `filters[]` | ✅ | ✅ | ✅ | per-metric filters |
35
+ | metric `sorts` | — | ✅ | ✅ | `Sort { measure, order: ASC \| DESC }` |
36
+
37
+ ---
38
+
39
+ ## 2. Field reference
40
+
41
+ | Field | Type | Allowed values / constraints |
42
+ | -------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
43
+ | `timeRange` | `TimeRange` | Relative (`{ type:'relative', period }`) or absolute (`{ type:'absolute', from, to }`); resolved to ISO 8601 on the wire. |
44
+ | `interval` | `number` | Bucket width in ms. The bundled renderers compute it from the range targeting ~48 buckets (1-minute floor). |
45
+ | `by` | `string[]` | Facet names. **facets:** up to 3 dimensions. **time-series:** up to 2. e.g. `API`, `HTTP_STATUS_CODE_GROUP`, `LLM_PROXY_MODEL`. |
46
+ | `limit` | `number` | Max buckets returned (`>= 1`). |
47
+ | `ranges` | `NumericRange[]` | `{ from: number; to: number }[]` — inclusive `from`, exclusive `to`. |
48
+ | `metrics[].name` | `string` | Metric name, e.g. `HTTP_REQUESTS`, `HTTP_GATEWAY_RESPONSE_TIME`, `LLM_PROMPT_TOTAL_TOKEN`. |
49
+ | `metrics[].measures` | `string[]` | `AVG`, `MIN`, `MAX`, `P50`, `P90`, `P95`, `P99`, `COUNT`, `PERCENTAGE`. |
50
+ | `metrics[].filters` | `FilterCondition[]` | Per-metric filters (same shape as top-level filters). |
51
+ | `metrics[].sorts` | `MeasureSort[]` | `{ measure, order: 'ASC' \| 'DESC' }[]` (facets & grouped time-series only). |
52
+ | filter `operator` | `eq` / `in` / `gte` / `lte` | Mapped to wire `EQ` / `IN` / `GTE` / `LTE`. Other lib operators throw at serialization time. |
53
+
54
+ Allowed metric / measure / facet names depend on the API type and are defined by the analytics
55
+ definition; the lists above mirror the v2 OpenAPI enums.
56
+
57
+ ---
58
+
59
+ ## 3. Defaults injected by the library
60
+
61
+ | Concern | Default | Where |
62
+ | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------ |
63
+ | Facet metric (when none) | `{ name: 'HTTP_REQUESTS', measures: ['COUNT'] }` | `createHttpDataSource({ defaultFacetMetric })` — overridable |
64
+ | Measure (when omitted) | `COUNT` | `resolveMeasure()` / `DEFAULT_MEASURE` |
65
+ | Time-series interval | ~48 buckets across the range (1-minute floor) | `computeBucketInterval` / `DASHBOARD_BUCKET_TARGET` |
66
+ | Query `staleTime` | `30_000` ms | `DEFAULT_STALE_TIME` |
67
+ | Sort | none (backend default order) | — |
68
+
69
+ Keeping the public `metrics[].measures` populated (rather than relying on the wire-level fallback)
70
+ preserves the React Query cache-key contract, so overlapping widgets (e.g. a chart and a sparkline on
71
+ the same metric/range) dedupe.
72
+
73
+ ---
74
+
75
+ ## 4. Widget → request mapping
76
+
77
+ | Widget | Endpoint | Mapping |
78
+ | -------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
79
+ | `metric` | measures | `{ metric, measure }` → one `MetricRequest`. Widget `filters` → top-level filters. |
80
+ | `metric-group` | measures | each `items[]` → one `MetricRequest` (`metric`, `measure`, per-item `filters`). Identical (metric+filters) items are deduped. |
81
+ | `cartesian` | time-series | each `series[]` → one query. `metric`/`measure` → `metrics[0]`; `by` → `by[]`; `filters`/`sorts`/`ranges`/`limit` forwarded. |
82
+ | `doughnut` | facets | `by` → `by[]`; `metric`/`measure`/`sorts` → `metrics[0]`; `ranges`/`limit` forwarded. |
83
+ | `bar` | facets | same as `doughnut`, plus `barLayout`. |
84
+
85
+ **Color & total**: `cartesian` resolves series color from `color` / `colorByGroup` / the status
86
+ palette (when the first `by` dimension is a known status field); `showTotal` / `totalLabel` drive the
87
+ chart total.
88
+
89
+ **Rendering limits (request stays fully reachable):**
90
+
91
+ - `doughnut` / `bar` are single-dimension charts. With a multi-dimension `by`, the bundled renderer
92
+ flattens leaf buckets into composite categories (`API 1 › 2xx`). Prefer a single dimension for these.
93
+ - `cartesian` renders the first `by` dimension as the grouped/stacked series; deeper dimensions are
94
+ sent to the backend but flattened onto the first level.
95
+ - Distinct visual series for several measures of one metric are best expressed as one `series[]` entry
96
+ per measure (e.g. P90/P95/P99), which the renderer keys apart by measure.
97
+
98
+ ---
99
+
100
+ ## 5. Examples
101
+
102
+ Each example shows the widget config and the resulting request payload.
103
+
104
+ ### 5.1 Percentile band (multi-measure, one series per measure)
105
+
106
+ ```ts
107
+ {
108
+ id: 'latency-band', type: 'cartesian', title: 'Gateway latency',
109
+ layout: { x: 0, y: 0, cols: 12, rows: 2 },
110
+ series: [
111
+ { metric: 'HTTP_GATEWAY_RESPONSE_TIME', measure: 'P90', representation: 'line' },
112
+ { metric: 'HTTP_GATEWAY_RESPONSE_TIME', measure: 'P95', representation: 'line' },
113
+ { metric: 'HTTP_GATEWAY_RESPONSE_TIME', measure: 'P99', representation: 'line' },
114
+ ],
115
+ }
116
+ ```
117
+
118
+ → three `time-series` calls, e.g. `{ metrics: [{ name: 'HTTP_GATEWAY_RESPONSE_TIME', measures: ['P95'] }], interval, timeRange }`.
119
+
120
+ ### 5.2 Stacked-by-facet time series
121
+
122
+ ```ts
123
+ {
124
+ id: 'traffic-by-status', type: 'cartesian', title: 'Traffic by status',
125
+ layout: { x: 0, y: 0, cols: 12, rows: 2 },
126
+ series: [
127
+ { metric: 'HTTP_REQUESTS', representation: 'bar', by: ['HTTP_STATUS_CODE_GROUP'], stackId: 'status' },
128
+ ],
129
+ }
130
+ ```
131
+
132
+ → `{ metrics: [{ name: 'HTTP_REQUESTS', measures: ['COUNT'] }], by: ['HTTP_STATUS_CODE_GROUP'], interval, timeRange }`
133
+
134
+ ### 5.3 Top-N sorted facet (doughnut/bar)
135
+
136
+ ```ts
137
+ {
138
+ id: 'slowest-apis', type: 'bar', title: 'Slowest APIs', barLayout: 'horizontal',
139
+ layout: { x: 0, y: 0, cols: 6, rows: 2 },
140
+ by: ['API'], metric: 'HTTP_GATEWAY_RESPONSE_TIME', measure: 'AVG',
141
+ sorts: [{ measure: 'AVG', order: 'DESC' }], limit: 5,
142
+ }
143
+ ```
144
+
145
+ → `{ by: ['API'], metrics: [{ name: 'HTTP_GATEWAY_RESPONSE_TIME', measures: ['AVG'], sorts: [{ measure: 'AVG', order: 'DESC' }] }], limit: 5, timeRange }`
146
+
147
+ ### 5.4 Numeric ranges
148
+
149
+ ```ts
150
+ {
151
+ id: 'latency-ranges', type: 'doughnut', title: 'Latency buckets',
152
+ layout: { x: 0, y: 0, cols: 4, rows: 2 },
153
+ by: ['API'], metric: 'HTTP_GATEWAY_RESPONSE_TIME', measure: 'AVG',
154
+ ranges: [{ from: 0, to: 100 }, { from: 100, to: 500 }, { from: 500, to: 5000 }],
155
+ }
156
+ ```
157
+
158
+ → `{ by: ['API'], metrics: [...], ranges: [{ from: 0, to: 100 }, ...], timeRange }`
159
+
160
+ ### 5.5 Multi-metric KPI tiles with per-item filters
161
+
162
+ ```ts
163
+ {
164
+ id: 'kpis', type: 'metric-group', title: 'Key metrics',
165
+ layout: { x: 0, y: 0, cols: 12, rows: 1 },
166
+ items: [
167
+ { metric: 'HTTP_REQUESTS', measure: 'COUNT', label: 'Requests' },
168
+ { metric: 'HTTP_ERRORS', measure: 'COUNT', label: '5xx errors',
169
+ filters: [{ field: 'HTTP_STATUS_CODE_GROUP', label: 'Status', operator: 'eq', value: ['5xx'] }] },
170
+ ],
171
+ }
172
+ ```
173
+
174
+ → `{ metrics: [ { name: 'HTTP_REQUESTS', measures: ['COUNT'] }, { name: 'HTTP_ERRORS', measures: ['COUNT'], filters: [{ name: 'HTTP_STATUS_CODE_GROUP', operator: 'EQ', value: '5xx' }] } ], timeRange }`
175
+
176
+ ---
177
+
178
+ ## 6. Filter semantics
179
+
180
+ Filters merge in this order, later layers win on a field conflict:
181
+
182
+ ```
183
+ context (dashboard scope) → view (active dashboard filters) → widget (widget.filters) → series/item (series[].filters / items[].filters)
184
+ ```
185
+
186
+ - The merged top-level filters are sent as the request `filters[]`; series/item filters are sent as
187
+ per-metric `filters[]`.
188
+ - Operators are mapped to the v2 wire format: `eq → EQ`, `in → IN`, `gte → GTE`, `lte → LTE`.
189
+ `eq`/`gte`/`lte` take a single value; `in` takes an array. Unsupported operators throw with a clear
190
+ error rather than silently dropping the filter.
191
+ - HTTP auth (headers, credentials) is configured once on the data source via
192
+ `createHttpDataSource(baseUrl, options)` — see [`INTEGRATION.md`](./INTEGRATION.md).
package/USAGE_GUIDE.md CHANGED
@@ -152,9 +152,10 @@ import { useTimeSeriesQuery, useMeasuresQuery } from '@gravitee/gamma-lib-observ
152
152
 
153
153
  function RequestRateChart() {
154
154
  const { data, isLoading, error } = useTimeSeriesQuery({
155
- metric: 'http_requests_total',
155
+ metrics: [{ name: 'HTTP_REQUESTS', measures: ['COUNT'] }],
156
156
  timeRange: { type: 'relative', period: '1h' },
157
- groupBy: 'status_code',
157
+ interval: 60_000,
158
+ by: ['HTTP_STATUS_CODE_GROUP'],
158
159
  });
159
160
 
160
161
  if (isLoading) return <Spinner />;
@@ -173,6 +174,10 @@ Hooks available:
173
174
  | `useLogsQuery<TRow>` | `LogsDataSource<TRow>` | `LogsQueryResult<TRow>` |
174
175
  | `useLogsPagedQuery<TRow>` | `LogsDataSource<TRow>` | `UseLogsPagedQueryResult<TRow>` |
175
176
 
177
+ > For the full analytics request capability (measures / facets / time-series fields, `by`, `sorts`,
178
+ > `ranges`, per-metric filters, defaults, and the widget → request mapping), see
179
+ > [`QUERYING.md`](./QUERYING.md).
180
+
176
181
  All hooks:
177
182
 
178
183
  - Use `observabilityQueryKeys` for cache key derivation
@@ -563,12 +568,10 @@ Modules define their own preset dashboards using `defineDashboardTemplate`:
563
568
 
564
569
  ```tsx
565
570
  import { defineDashboardTemplate } from '@gravitee/gamma-lib-observability';
566
- import { LayoutDashboardIcon } from '@gravitee/graphene-core/icons';
567
571
 
568
572
  export const apiOverviewTemplate = defineDashboardTemplate({
569
573
  id: 'api-overview',
570
574
  label: 'API Overview',
571
- icon: LayoutDashboardIcon,
572
575
  description: 'High-level view of all API traffic and key metrics.',
573
576
  requiredCapabilities: ['observability.dashboards.read'],
574
577
  dashboard: {
@@ -593,7 +596,6 @@ Template properties:
593
596
  | ---------------------- | --------------------------------- | ----------------------------------------------------- |
594
597
  | `id` | `string` | Unique identifier (used in URL path) |
595
598
  | `label` | `string` | Display name in list and detail pages |
596
- | `icon` | `ElementType` (optional) | Icon component from graphene-core/icons |
597
599
  | `description` | `string` (optional) | Shown in the dashboard list table |
598
600
  | `requiredCapabilities` | `CapabilityKey[]` (opt.) | Template hidden when user lacks any listed capability |
599
601
  | `dashboard` | `Dashboard \| (ctx) => Dashboard` | Static dashboard or factory receiving capabilities |
@@ -731,7 +733,7 @@ Use `observability.navGroup` to register items in your module's sidenav:
731
733
  ```tsx
732
734
  const { navGroup } = observability;
733
735
  // navGroup.label → 'Observability'
734
- // navGroup.items → [{ key: 'observe/dashboards', title: 'Dashboards', icon: LayoutDashboardIcon }]
736
+ // navGroup.items → [{ key: 'observe/dashboards', title: 'Dashboards', icon: ChartLineIcon }]
735
737
  ```
736
738
 
737
739
  Breadcrumbs are rendered by the calling module — the library does not own the layout shell — but the lib supplies the breadcrumb **data** (group + feature) via `observability.breadcrumbSegments(activeNavKey)`. See the [`ObservabilityFeatures` API reference](#observabilityfeatures-api-reference) above.
@@ -4,7 +4,7 @@ import { TimeSeriesGroup } from '../../types/responses';
4
4
  /**
5
5
  * A single renderable cartesian element resolved from a series definition and
6
6
  * its fetched data. One `SeriesDefinition` produces one element when ungrouped,
7
- * or one element per returned group when it defines `groupBy`.
7
+ * or one element per returned group when it defines `by`.
8
8
  */
9
9
  export interface CartesianElement {
10
10
  /** Unique key used as the data property, config key and chart element key. */
@@ -1 +1 @@
1
- {"version":3,"file":"time-series-adapter.d.ts","sourceRoot":"","sources":["../../../src/dashboards/adapters/time-series-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AA6BD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,aAAa,EAAE,SAAS,CAAC,SAAS,eAAe,EAAE,GAAG,SAAS,CAAC,EAAE,GACjE;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,CAAA;CAAE,CAkCtF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,GAC5D,kBAAkB,EAAE,CAmDtB"}
1
+ {"version":3,"file":"time-series-adapter.d.ts","sourceRoot":"","sources":["../../../src/dashboards/adapters/time-series-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AA6BD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,aAAa,EAAE,SAAS,CAAC,SAAS,eAAe,EAAE,GAAG,SAAS,CAAC,EAAE,GACjE;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,CAAA;CAAE,CAmCtF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,GAC5D,kBAAkB,EAAE,CAmDtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"BarWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/BarWidgetRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,SAAS,CAAC,2CA+B/F"}
1
+ {"version":3,"file":"BarWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/BarWidgetRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,SAAS,CAAC,2CAmC/F"}
@@ -1 +1 @@
1
- {"version":3,"file":"CartesianWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/CartesianWidgetRenderer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AAM5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,eAAe,CAAC,2CAoE3G"}
1
+ {"version":3,"file":"CartesianWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/CartesianWidgetRenderer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AAO5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,eAAe,CAAC,2CAqF3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"DoughnutWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/DoughnutWidgetRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,sBAAsB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,cAAc,CAAC,2CAkCzG"}
1
+ {"version":3,"file":"DoughnutWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/DoughnutWidgetRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,wBAAgB,sBAAsB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,cAAc,CAAC,2CAsCzG"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetricGroupWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/MetricGroupWidgetRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAM5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAoBvE,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,2CAoF/G"}
1
+ {"version":3,"file":"MetricGroupWidgetRenderer.d.ts","sourceRoot":"","sources":["../../../src/dashboards/renderers/MetricGroupWidgetRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAM7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AA6CvE,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,2CA4E/G"}
@@ -1,4 +1,3 @@
1
- import { ElementType } from 'react';
2
1
  import { Dashboard, DashboardCapabilities } from '../../types/domain';
3
2
  type CapabilityKey = keyof DashboardCapabilities;
4
3
  export interface DashboardTemplateContext {
@@ -7,7 +6,6 @@ export interface DashboardTemplateContext {
7
6
  export interface DashboardTemplate {
8
7
  readonly id: string;
9
8
  readonly label: string;
10
- readonly icon?: ElementType;
11
9
  readonly description?: string;
12
10
  readonly requiredCapabilities?: readonly CapabilityKey[];
13
11
  readonly dashboard: Dashboard | ((ctx: DashboardTemplateContext) => Dashboard);
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-template.d.ts","sourceRoot":"","sources":["../../../src/dashboards/templates/dashboard-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,KAAK,aAAa,GAAG,MAAM,qBAAqB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,wBAAwB,KAAK,SAAS,CAAC,CAAC;CAChF;AAED,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAuB1F;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,wBAAwB,GAAG,SAAS,CAKlH;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,YAAY,EAAE,qBAAqB,GAClC,iBAAiB,EAAE,CAKrB"}
1
+ {"version":3,"file":"dashboard-template.d.ts","sourceRoot":"","sources":["../../../src/dashboards/templates/dashboard-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,KAAK,aAAa,GAAG,MAAM,qBAAqB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,wBAAwB,KAAK,SAAS,CAAC,CAAC;CAChF;AAED,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAsB1F;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,wBAAwB,GAAG,SAAS,CAKlH;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,YAAY,EAAE,qBAAqB,GAClC,iBAAiB,EAAE,CAKrB"}
@@ -40,7 +40,7 @@ export interface CartesianWidgetData {
40
40
  * Maps each chart data key to the series definition it renders from. The
41
41
  * connected renderer provides this so the presentation can resolve a series
42
42
  * for composite keys (multi-measure of one metric) and grouped keys (one
43
- * element per `groupBy` value). When omitted (manual mode), the presentation
43
+ * element per `by` group value). When omitted (manual mode), the presentation
44
44
  * falls back to matching keys against `series[].metric`.
45
45
  */
46
46
  readonly seriesByKey?: Readonly<Record<string, SeriesDefinition>>;
@@ -1 +1 @@
1
- {"version":3,"file":"http-data-source.d.ts","sourceRoot":"","sources":["../../src/data-sources/http-data-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAY9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAuB/D,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACrE;AAuHD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,iBAAiB,CA+CxG"}
1
+ {"version":3,"file":"http-data-source.d.ts","sourceRoot":"","sources":["../../src/data-sources/http-data-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAY9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAuB/D,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACrE;AAoJD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,iBAAiB,CA+CxG"}
@@ -1,19 +1,27 @@
1
- import { FilterCondition, TimeRange } from '../types/domain';
1
+ import { FilterCondition, NumericRange, TimeRange } from '../types/domain';
2
2
  import { FacetMetricRequest, MetricRequest } from '../types/requests';
3
3
  export declare const observabilityQueryKeys: {
4
4
  readonly all: readonly ["observability"];
5
- readonly timeSeries: (metrics: readonly FacetMetricRequest[], timeRange: TimeRange, interval: number, filters?: FilterCondition[], by?: string[], limit?: number) => readonly ["observability", "timeSeries", {
5
+ readonly timeSeries: (metrics: readonly FacetMetricRequest[], timeRange: TimeRange, interval: number, filters?: FilterCondition[], by?: readonly string[], limit?: number, ranges?: readonly NumericRange[]) => readonly ["observability", "timeSeries", {
6
6
  readonly metrics: Record<string, unknown>[];
7
7
  readonly timeRange: TimeRange;
8
8
  readonly interval: number;
9
9
  readonly filters: FilterCondition[] | undefined;
10
- readonly by: string[] | undefined;
10
+ readonly by: readonly string[] | undefined;
11
11
  readonly limit: number | undefined;
12
+ readonly ranges: readonly NumericRange[] | undefined;
12
13
  }];
13
- readonly facets: (field: string, timeRange: TimeRange, filters?: FilterCondition[], limit?: number, search?: string) => readonly ["observability", "facets", {
14
- readonly field: string;
14
+ readonly facets: (by: readonly string[], timeRange: TimeRange, filters?: FilterCondition[], options?: {
15
+ metrics?: readonly FacetMetricRequest[];
16
+ ranges?: readonly NumericRange[];
17
+ limit?: number;
18
+ search?: string;
19
+ }) => readonly ["observability", "facets", {
20
+ readonly by: readonly string[];
15
21
  readonly timeRange: TimeRange;
16
22
  readonly filters: FilterCondition[] | undefined;
23
+ readonly metrics: Record<string, unknown>[] | undefined;
24
+ readonly ranges: readonly NumericRange[] | undefined;
17
25
  readonly limit: number | undefined;
18
26
  readonly search: string | undefined;
19
27
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"query-keys.d.ts","sourceRoot":"","sources":["../../src/hooks/query-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmB3E,eAAO,MAAM,sBAAsB;;mCAItB,SAAS,kBAAkB,EAAE,aAC3B,SAAS,YACV,MAAM,YACN,eAAe,EAAE,OACtB,MAAM,EAAE,UACL,MAAM;;;;;;;;6BAQA,MAAM,aAAa,SAAS,YAAY,eAAe,EAAE,UAAU,MAAM,WAAW,MAAM;;;;;;;iCAGtF,SAAS,aAAa,EAAE,aAAa,SAAS,YAAY,eAAe,EAAE;;;;;+BAO7E,SAAS,YAAY,eAAe,EAAE,WAAW,MAAM;;;;;6BAGzD,MAAM;iCAEF,SAAS,YAAY,eAAe,EAAE,gBAAgB,MAAM;;;;;6BAGhE,MAAM;iCAEF,MAAM;CAClB,CAAC"}
1
+ {"version":3,"file":"query-keys.d.ts","sourceRoot":"","sources":["../../src/hooks/query-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmB3E,eAAO,MAAM,sBAAsB;;mCAItB,SAAS,kBAAkB,EAAE,aAC3B,SAAS,YACV,MAAM,YACN,eAAe,EAAE,OACtB,SAAS,MAAM,EAAE,UACd,MAAM,WACL,SAAS,YAAY,EAAE;;;;;;;;;0BAS5B,SAAS,MAAM,EAAE,aACV,SAAS,YACV,eAAe,EAAE,YACjB;QACR,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;;;;;;;;;iCAgBiB,SAAS,aAAa,EAAE,aAAa,SAAS,YAAY,eAAe,EAAE;;;;;+BAO7E,SAAS,YAAY,eAAe,EAAE,WAAW,MAAM;;;;;6BAGzD,MAAM;iCAEF,SAAS,YAAY,eAAe,EAAE,gBAAgB,MAAM;;;;;6BAGhE,MAAM;iCAEF,MAAM;CAClB,CAAC"}
@@ -1,9 +1,21 @@
1
1
  import { UseQueryOptions } from '@tanstack/react-query';
2
- import { FilterCondition, TimeRange } from '../types/domain';
2
+ import { FilterCondition, MeasureSort, NumericRange, TimeRange } from '../types/domain';
3
3
  import { FacetBucket } from '../types/responses';
4
4
  export interface UseFacetsQueryParams {
5
- field: string;
5
+ /** Facet dimensions to group by (v2 `facets` allows up to 3). */
6
+ by: string[];
6
7
  timeRange: TimeRange;
8
+ /**
9
+ * Facet metric to count per bucket. When omitted, the data source injects
10
+ * its default facet metric. `measure` and `sorts` require `metric` to be set.
11
+ */
12
+ metric?: string;
13
+ /** Measure read from `metric` to size each bucket. Defaults to `COUNT`. */
14
+ measure?: string;
15
+ /** Orders buckets by a measure (requires `metric`). */
16
+ sorts?: MeasureSort[];
17
+ /** Numeric ranges used to bucket values. */
18
+ ranges?: NumericRange[];
7
19
  filters?: FilterCondition[];
8
20
  limit?: number;
9
21
  search?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"use-facets-query.d.ts","sourceRoot":"","sources":["../../src/hooks/use-facets-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIvE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,iFA2B9E"}
1
+ {"version":3,"file":"use-facets-query.d.ts","sourceRoot":"","sources":["../../src/hooks/use-facets-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIvE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAYD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,iFA6B9E"}
@@ -1,5 +1,5 @@
1
1
  import { UseQueryOptions } from '@tanstack/react-query';
2
- import { FilterCondition, TimeRange } from '../types/domain';
2
+ import { FilterCondition, NumericRange, TimeRange } from '../types/domain';
3
3
  import { FacetMetricRequest } from '../types/requests';
4
4
  import { TimeSeriesGroup } from '../types/responses';
5
5
  export interface UseTimeSeriesQueryParams {
@@ -8,6 +8,7 @@ export interface UseTimeSeriesQueryParams {
8
8
  interval: number;
9
9
  filters?: FilterCondition[];
10
10
  by?: string[];
11
+ ranges?: NumericRange[];
11
12
  limit?: number;
12
13
  enabled?: boolean;
13
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-time-series-query.d.ts","sourceRoot":"","sources":["../../src/hooks/use-time-series-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,qFA8BlF"}
1
+ {"version":3,"file":"use-time-series-query.d.ts","sourceRoot":"","sources":["../../src/hooks/use-time-series-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,qFAgClF"}