@unblind/react 0.1.0-alpha.19 → 0.1.0-alpha.20

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.
package/dist/index.d.ts CHANGED
@@ -60,8 +60,11 @@ declare function useRefresh(): () => Promise<void>;
60
60
 
61
61
  interface TooltipProps {
62
62
  timestamp: number;
63
- items: TooltipItem[];
63
+ tooltipSerieList: TooltipSerie[];
64
64
  timeZone?: string;
65
+ stacked?: boolean;
66
+ invertSort?: boolean;
67
+ visibilityLimit?: number;
65
68
  }
66
69
 
67
70
  /**
@@ -73,13 +76,6 @@ type MetricType = "gauge" | "sum" | "histogram" | "summary" | "exphistogram";
73
76
  * Aggregation operators available for metric queries.
74
77
  */
75
78
  type AggregationOperator = "avg" | "sum" | "max" | "min" | "p90" | "p99" | "p50";
76
- /**
77
- * Attribute filter with a specific value.
78
- */
79
- interface AttributeWithValue {
80
- name: string;
81
- value: string;
82
- }
83
79
  /**
84
80
  * Metric metadata returned by the API.
85
81
  */
@@ -133,19 +129,20 @@ type ChartType = "bar" | "line" | "area" | "step" | "spline";
133
129
  type TimeRange = StringValue;
134
130
  interface Log {
135
131
  timestamp: number;
136
- trace_id?: string;
137
- span_id?: string;
138
- severity_text: Severity;
132
+ traceId?: string;
133
+ spanId?: string;
134
+ logId?: string;
135
+ severity: Severity;
139
136
  attributes?: Record<string, string>;
140
- service_name?: string;
141
137
  body?: string;
138
+ serviceName?: string;
142
139
  }
143
140
  /**
144
141
  * Default paginated response structure
145
142
  */
146
143
  type PaginatedResponse<T> = {
147
144
  data: Array<T>;
148
- next_page?: string;
145
+ nextPage?: string;
149
146
  };
150
147
  /**
151
148
  * Different severity values based on OTEL
@@ -207,11 +204,6 @@ interface ChartVisualConfig {
207
204
  * Optional color configuration
208
205
  */
209
206
  colors?: Colors;
210
- /**
211
- * Optional labeling order.
212
- * Defaults to false
213
- */
214
- sortByValues?: boolean;
215
207
  /**
216
208
  * Optional to fill charts.
217
209
  *
@@ -222,13 +214,57 @@ interface ChartVisualConfig {
222
214
  * Optional tooltip configuration.
223
215
  */
224
216
  tooltip?: TooltipConfig;
217
+ /**
218
+ * Chart type. Defaults to "line".
219
+ */
220
+ type?: ChartType;
221
+ /**
222
+ * Optional threshold
223
+ */
224
+ thresholds?: Array<Threshold>;
225
+ /**
226
+ * Optional min value
227
+ */
228
+ min?: number;
229
+ /**
230
+ * Optional max value
231
+ */
232
+ max?: number;
233
+ /**
234
+ * Optional boolean to hide both axis
235
+ */
236
+ hideAxis?: boolean;
237
+ /**
238
+ * Optional boolean to hide cursor
239
+ */
240
+ hideCursor?: boolean;
241
+ /**
242
+ * Optional boolean to display relative time axis
243
+ *
244
+ * e.g. a day ago ------ a few seconds ago
245
+ */
246
+ relativeTimeAxis?: boolean;
247
+ /**
248
+ * Unit of measurement for the value.
249
+ *
250
+ * Supports standard unit identifiers:
251
+ * - Data: 'bytes', 'decbytes', 'bits', 'decbits'
252
+ * - Time: 'ms', 's', 'm', 'h', 'd'
253
+ * - Throughput: 'Bps', 'Mbps', 'Gbps'
254
+ * - Percentage: 'percent', 'percentunit'
255
+ * - And many more standard units
256
+ *
257
+ */
258
+ unit?: string;
259
+ /**
260
+ * Optional invert value order.
261
+ * Defaults to false
262
+ */
263
+ invertSort?: boolean;
225
264
  }
226
265
  interface TooltipConfig {
227
- layout?: TooltipLayout;
228
- labelFormat?: TooltipLabelFormat;
229
- hideAttributeKey?: boolean;
230
- hideAttributes?: boolean;
231
- hideMetric?: boolean;
266
+ hide?: boolean;
267
+ visibilityLimit?: number;
232
268
  }
233
269
  /**
234
270
  * Appearance configuration for Unblind components.
@@ -266,19 +302,7 @@ type RangeThreshold = {
266
302
  label?: string;
267
303
  };
268
304
  type Threshold = LineThreshold | RangeThreshold;
269
- type TooltipLayout = "auto" | "group-by-metric" | "flat";
270
- /**
271
- * Formats for rendering attribute and metric names.
272
- * @example
273
- * nodejs.eventloop.p50
274
- * ```
275
- * original: "nodejs.eventloop.p50"
276
- * suffix: "p50"
277
- * title: "Nodejs Eventloop P50"
278
- * ```
279
- */
280
- type TooltipLabelFormat = "original" | "suffix" | "title";
281
- interface TooltipItem {
305
+ interface TooltipSerie {
282
306
  metric: MetricMetadata;
283
307
  serie: uPlot.Series;
284
308
  color: string;
@@ -345,7 +369,7 @@ type ScopeProps = ScopeConfig & {
345
369
  * }
346
370
  * ```
347
371
  */
348
- declare function Scope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, sortByValues, }: ScopeProps): react_jsx_runtime.JSX.Element;
372
+ declare function Scope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, }: ScopeProps): react_jsx_runtime.JSX.Element;
349
373
  type UseScopeReturn = TimeseriesQueryConfig & ChartVisualConfig & {
350
374
  timeRange: TimeRange;
351
375
  appearance: {
@@ -393,7 +417,7 @@ type UnblindProviderProps = UnblindClientProviderProps & ScopeProps & {
393
417
  * }
394
418
  * ```
395
419
  */
396
- declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, sortByValues, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
420
+ declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
397
421
 
398
422
  interface UseMetricsReturn {
399
423
  metrics: MetricMetadataList | undefined;
@@ -414,12 +438,13 @@ interface UseTimeseriesParams extends Pick<TimeseriesQueryConfig, "timeRange" |
414
438
  */
415
439
  queries: Array<TimeseriesQuery>;
416
440
  }
441
+ interface UseTimeseriesData {
442
+ series: Serie[];
443
+ times: number[];
444
+ metadata: Record<string, MetricMetadata>;
445
+ }
417
446
  interface UseTimeseriesReturn {
418
- data: {
419
- series: Serie[];
420
- times: number[];
421
- metadata: Record<string, MetricMetadata>;
422
- };
447
+ data: UseTimeseriesData;
423
448
  isLoading: boolean;
424
449
  isFetching: boolean;
425
450
  hasError: boolean;
@@ -431,7 +456,7 @@ interface UseTimeseriesReturn {
431
456
  * @param params - Configuration object with queries, and either timeRange or startTime/endTime, plus optional interval.
432
457
  * @returns Object containing timeseries data, loading states, and error state.
433
458
  */
434
- declare function useTimeseries({ queries, timeRange, startTime, endTime, interval, }: UseTimeseriesParams): UseTimeseriesReturn;
459
+ declare function useTimeseries(params: UseTimeseriesParams): UseTimeseriesReturn;
435
460
 
436
461
  interface Usage {
437
462
  period: {
@@ -459,13 +484,18 @@ interface UseUsageReturn {
459
484
  * @param params - Configuration object with optional timeRange.
460
485
  * @returns Object containing usage data, loading state, and error state.
461
486
  */
462
- declare function useUsage({ timeRange, startTime, endTime, }: UseUsageParams): UseUsageReturn;
487
+ declare function useUsage(params: UseUsageParams): UseUsageReturn;
463
488
 
464
489
  type UseLogsParams = {
465
490
  /**
466
491
  * Array of filters to apply to the logs query.
467
492
  */
468
- filters: Array<AttributeWithValue>;
493
+ attributes?: Record<string, Array<string>>;
494
+ body?: Array<string>;
495
+ severity?: Array<string>;
496
+ traceId?: string;
497
+ spanId?: string;
498
+ logId?: string;
469
499
  } & TimeConfig;
470
500
  interface UseLogsReturn {
471
501
  logs: Array<Log>;
@@ -482,7 +512,7 @@ interface UseLogsReturn {
482
512
  * @param params - Configuration object with timeRange and filters.
483
513
  * @returns Object containing logs data, loading states, and pagination controls.
484
514
  */
485
- declare function useLogs({ timeRange, filters, startTime, endTime, }: UseLogsParams): UseLogsReturn;
515
+ declare function useLogs(props: UseLogsParams): UseLogsReturn;
486
516
 
487
517
  type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" | "timeRange"> & ChartVisualConfig & {
488
518
  /**
@@ -500,34 +530,6 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
500
530
  * ```
501
531
  */
502
532
  metrics: Array<string> | string;
503
- /**
504
- * Chart type. Defaults to "line".
505
- */
506
- type?: ChartType;
507
- /**
508
- * Optional threshold
509
- */
510
- thresholds?: Array<Threshold>;
511
- /**
512
- * Optional min value
513
- */
514
- min?: number;
515
- /**
516
- * Optional max value
517
- */
518
- max?: number;
519
- /**
520
- * Unit of measurement for the value.
521
- *
522
- * Supports standard unit identifiers:
523
- * - Data: 'bytes', 'decbytes', 'bits', 'decbits'
524
- * - Time: 'ms', 's', 'm', 'h', 'd'
525
- * - Throughput: 'Bps', 'Mbps', 'Gbps'
526
- * - Percentage: 'percent', 'percentunit'
527
- * - And many more standard units
528
- *
529
- */
530
- unit?: string;
531
533
  /**
532
534
  * Optional className for the chart container.
533
535
  */
@@ -536,6 +538,10 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
536
538
  * Optional appearance configuration for this chart
537
539
  */
538
540
  appearance?: Appearance;
541
+ /**
542
+ * Hook to get request data
543
+ */
544
+ onResponse?: (response: UseTimeseriesReturn) => void;
539
545
  };
540
546
  /**
541
547
  * Displays a time series chart.
@@ -547,7 +553,7 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
547
553
  * <Timeseries
548
554
  * metrics="host.cpu"
549
555
  * attributes={{ "host.region": ["us-east-2"] }}
550
- * groupBy=["host.name"]
556
+ * groupBy={["host.name"]}
551
557
  * />
552
558
  * ```
553
559
  *
@@ -559,21 +565,18 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
559
565
  * </Scope>
560
566
  * ```
561
567
  */
562
- declare function Timeseries({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, interval: propInterval, type, className, appearance: propAppearance, unit: propUnit, thresholds: propThresholds, min: propMin, max: propMax, colors: propColors, tooltip: propTooltip, sortByValues: propSortByValues, fill: propFill, }: TimeseriesProps): react_jsx_runtime.JSX.Element;
568
+ declare function Timeseries({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, interval: propInterval, type, className, appearance: propAppearance, unit: propUnit, thresholds: propThresholds, min: propMin, max: propMax, colors: propColors, tooltip: propTooltip, fill: propFill, hideAxis: propHideAxis, hideCursor: propHideCursor, relativeTimeAxis: propRelativeTimeAxis, onResponse, invertSort: propInvertSort, }: TimeseriesProps): react_jsx_runtime.JSX.Element;
563
569
 
564
570
  interface ChartProps extends ChartVisualConfig {
565
571
  times: Array<number>;
566
572
  series: Serie[];
567
573
  metadata: Record<string, MetricMetadata>;
568
574
  type: ChartType;
575
+ invertSort?: boolean;
569
576
  className?: string;
570
577
  timeZone?: string;
571
578
  options?: uPlot$1.Options;
572
- unit?: string;
573
579
  tooltipComponent?: React.ComponentType<TooltipProps>;
574
- thresholds?: Array<Threshold>;
575
- min?: number;
576
- max?: number;
577
580
  }
578
581
  /**
579
582
  * Renders a chart for time series data
@@ -584,4 +587,4 @@ declare function Empty(): react_jsx_runtime.JSX.Element;
584
587
  declare function Error(): react_jsx_runtime.JSX.Element;
585
588
  declare function Loading(): react_jsx_runtime.JSX.Element;
586
589
 
587
- export { type AggregationOperator, type Appearance, type AttributeWithValue, Chart, type ChartProps, type ChartType, type ChartVisualConfig, type Colors, Empty, Error, type Interval, Loading, type Log, type MetricMetadata, type MetricMetadataList, type MetricType, type PaginatedResponse, Scope, type ScopeConfig, type ScopeProps, type Serie, type Severity, type TimeConfig, type TimeRange, Timeseries, type TimeseriesProps, type TimeseriesQuery, type TimeseriesQueryConfig, type TooltipProps, type UnblindClientConfig, UnblindProvider, type UnblindProviderProps, type Usage, type UseLogsParams, type UseLogsReturn, type UseMetricsReturn, type UseScopeReturn, type UseTimeseriesParams, type UseTimeseriesReturn, type UseUsageParams, type UseUsageReturn, useLogs, useMetrics, useRefresh, useScope, useTimeseries, useUsage };
590
+ export { type AggregationOperator, type Appearance, Chart, type ChartProps, type ChartType, type ChartVisualConfig, type Colors, Empty, Error, type Interval, Loading, type Log, type MetricMetadata, type MetricMetadataList, type MetricType, type PaginatedResponse, Scope, type ScopeConfig, type ScopeProps, type Serie, type Severity, type TimeConfig, type TimeRange, Timeseries, type TimeseriesProps, type TimeseriesQuery, type TimeseriesQueryConfig, type TooltipProps, type UnblindClientConfig, UnblindProvider, type UnblindProviderProps, type Usage, type UseLogsParams, type UseLogsReturn, type UseMetricsReturn, type UseScopeReturn, type UseTimeseriesParams, type UseTimeseriesReturn, type UseUsageParams, type UseUsageReturn, useLogs, useMetrics, useRefresh, useScope, useTimeseries, useUsage };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var it=Object.create;var ee=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var ct=(e,t)=>{for(var r in t)ee(e,r,{get:t[r],enumerable:!0})},ve=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of st(t))!ut.call(e,o)&&o!==r&&ee(e,o,{get:()=>t[o],enumerable:!(n=at(t,o))||n.enumerable});return e};var pe=(e,t,r)=>(r=e!=null?it(lt(e)):{},ve(t||!e||!e.__esModule?ee(r,"default",{value:e,enumerable:!0}):r,e)),pt=e=>ve(ee({},"__esModule",{value:!0}),e);var Wt={};ct(Wt,{Chart:()=>ue,Empty:()=>te,Error:()=>re,Loading:()=>oe,Scope:()=>ne,Timeseries:()=>nt,UnblindProvider:()=>Pe,useLogs:()=>Ie,useMetrics:()=>Se,useRefresh:()=>de,useScope:()=>G,useTimeseries:()=>ie,useUsage:()=>Ee});module.exports=pt(Wt);var H=require("@tanstack/react-query"),O=require("react"),me=require("react/jsx-runtime"),Ce=(0,O.createContext)(void 0);function xe({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:n="/api/unblind",fetchImpl:o}){let i=(0,O.useMemo)(()=>{if(t)return t;let a={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},u={defaultOptions:{queries:a}};return r?new H.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...a,...r.defaultOptions?.queries}}}):new H.QueryClient(u)},[t,r]),s=(0,O.useMemo)(()=>({apiBaseUrl:n,fetchImpl:o}),[n,o]);return(0,me.jsx)(H.QueryClientProvider,{client:i,children:(0,me.jsx)(Ce.Provider,{value:s,children:e})})}function z(){let e=(0,O.useContext)(Ce);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function de(){let e=(0,H.useQueryClient)();return(0,O.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var F=require("react");var D=require("react/jsx-runtime");function te(){return(0,D.jsx)("div",{className:"ub-default",children:(0,D.jsxs)("div",{className:"ub-empty-content",children:[(0,D.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,D.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"ub-icon",children:(0,D.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,D.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function re(){return(0,D.jsx)("div",{className:"ub-error"})}function oe(){return(0,D.jsx)("div",{className:"ub-default","data-text":"Loading"})}var Ae=require("react/jsx-runtime"),he=(0,F.createContext)(void 0);function ne({children:e,timeRange:t,startTime:r,endTime:n,interval:o,attributes:i,groupBy:s,operator:a,appearance:u,tooltip:c,colors:h,fill:m,sortByValues:d}){let l=(0,F.useContext)(he),f=u?.components?.Loading||l?.appearance?.components?.Loading,y=u?.components?.Error||l?.appearance?.components?.Error,p=u?.components?.Tooltip||l?.appearance?.components?.Tooltip,b=u?.components?.Empty||l?.appearance?.components?.Empty,C=c?.layout||l?.tooltip?.layout,T=c?.labelFormat||l?.tooltip?.labelFormat,x=typeof c?.hideAttributes=="boolean"?c?.hideAttributes:l?.tooltip?.hideAttributes,k=typeof c?.hideAttributeKey=="boolean"?c?.hideAttributeKey:l?.tooltip?.hideAttributeKey,v=typeof c?.hideMetric=="boolean"?c?.hideMetric:l?.tooltip?.hideMetric,A=(0,F.useMemo)(()=>({components:{...f&&{Loading:f},...y&&{Error:y},...p&&{Tooltip:p},...b&&{Empty:b}}}),[f,y,p,b]),L=(0,F.useMemo)(()=>({layout:C,labelFormat:T,hideAttributes:x,hideAttributeKey:k,hideMetric:v}),[C,T,x,k,v]),R=(0,F.useMemo)(()=>({timeRange:t??l?.timeRange,startTime:r??l?.startTime,endTime:n??l?.endTime,interval:o??l?.interval,attributes:i??l?.attributes,groupBy:s??l?.groupBy,operator:a??l?.operator,colors:h??l?.colors,sortByValues:typeof d=="boolean"?d:l?.sortByValues,fill:typeof m=="boolean"?m:l?.fill,appearance:A,tooltip:L}),[t,r,n,o,i,s,a,h,d,m,A,L,l]);return(0,Ae.jsx)(he.Provider,{value:R,children:e})}var mt="6h";function G(){let e=(0,F.useContext)(he);return(0,F.useMemo)(()=>({...e,timeRange:e?.timeRange||mt,appearance:{components:{Loading:e?.appearance?.components?.Loading??oe,Error:e?.appearance?.components?.Error??re,Empty:e?.appearance?.components?.Empty??te,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var fe=require("react/jsx-runtime");function Pe({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:n,timeRange:o,startTime:i,endTime:s,interval:a,attributes:u,groupBy:c,operator:h,appearance:m,tooltip:d,colors:l,sortByValues:f}){return(0,fe.jsx)(xe,{queryClient:t,apiBaseUrl:r,fetchImpl:n,children:(0,fe.jsx)(ne,{timeRange:o,startTime:i,endTime:s,interval:a,attributes:u,groupBy:c,operator:h,appearance:m,tooltip:d,colors:l,sortByValues:f,children:e})})}var ke=require("@tanstack/react-query");function Se(){let{apiBaseUrl:e,fetchImpl:t=fetch}=z(),r=(0,ke.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let n=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!n.ok)throw new Error("Error loading metrics metadata");if(n.status===200){let{data:o}=await n.json();return o}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var Le=require("@tanstack/react-query"),Q=require("react");var we=pe(require("ms"));function dt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,we.default)(e)/1e3),t]}function $(e,t,r){let n,o;if(typeof t=="number"&&typeof r=="number")n=t,o=r;else if(e){let[i,s]=dt(e);n=i,o=s}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[n,o]}function ie({queries:e,timeRange:t,startTime:r,endTime:n,interval:o}){let{apiBaseUrl:i,fetchImpl:s=fetch}=z(),a=(0,Q.useMemo)(()=>e.map(T=>T.metrics.join(",")).join(","),[e]),u=(0,Q.useMemo)(()=>e.map(T=>{let x=T.attributes;if(!x)return"";let k=Object.keys(x);return k.length===0?"":k.map(v=>v+":"+x[v]?.join(",")).join(",")}).join(","),[e]),c=(0,Q.useMemo)(()=>e.map(T=>T.operator),[e]),h=(0,Q.useMemo)(()=>e.map(T=>T.groupBy).join(", "),[e]),d=(0,Le.useQuery)({queryKey:["unblind","timeseries",a,u,r,n,t,o,c,h],queryFn:async()=>{if(!a)throw new Error("Missing required parameters");if(a.length===0)throw new Error("No series provided");let[T,x]=$(t,r,n),k={queries:e,startTime:T,endTime:x,interval:o},v=await s(`${i}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(k)});if(!v.ok)throw new Error("Error fetching metric");let{series:A,times:L,metadata:R}=await v.json();if(!A)throw console.error("Series not found"),new Error("Series not found");return{series:A,times:L,metadata:R}},enabled:!!a&&(typeof r=="number"&&typeof n=="number"||!!t)}),{metadata:l,series:f,times:y}=(0,Q.useMemo)(()=>d.data?{series:d.data.series,times:d.data.times,metadata:d.data.metadata}:{series:[],times:[],metadata:{}},[d]),p=d.isLoading,b=d.isFetching,C=d.isError;return{data:{series:f,times:y,metadata:l},isLoading:p,isFetching:b,hasError:C,refetch:d.refetch}}var Re=require("@tanstack/react-query"),Ue=require("react");function Ee({timeRange:e,startTime:t,endTime:r}){let{apiBaseUrl:n,fetchImpl:o=fetch}=z(),s=(0,Re.useQuery)({queryKey:["unblind","usage",e,t,r],queryFn:async()=>{let[h,m]=$(e,t,r),d=`${n}/tenants/usage`,l=await o(d,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:h,endTime:m})});if(!l.ok)throw new Error("Error fetching usage");let{data:f}=await l.json();if(!f)throw new Error("usage not found");return f},enabled:typeof t=="number"&&typeof r=="number"||!!e}),a=(0,Ue.useMemo)(()=>s.data?s.data||[]:[],[s]),u=s.isLoading||s.isRefetching,c=s.isError;return{usage:a,isLoading:u,hasError:c,refetch:s.refetch}}var Me=require("@tanstack/react-query"),Ne=require("react");function Ie({timeRange:e,filters:t,startTime:r,endTime:n}){let{apiBaseUrl:o,fetchImpl:i=fetch}=z(),s=typeof r=="number"&&typeof n=="number"||!!e,a=(0,Me.useInfiniteQuery)({queryKey:["unblind","logs",e,t.map(c=>c.name+":"+c.value).sort().join(",")],queryFn:async({pageParam:c})=>{let h=t.reduce((v,A)=>(v[A.name]||(v[A.name]=[]),v[A.name].push(A.value),v),{}),{body:m=[],severity:d=[],"service.name":l=[],"trace.id":f=[],"span.id":y=[],...p}=h,[b,C]=$(e,r,n),T=await i(`${o}/tenants/logs`,{method:"POST",body:JSON.stringify({filter:{attributes:p,body:m,severity:d,traceId:f,spanId:y,service:l},startTime:b,endTime:C,pagination:{page:c}}),headers:{"Content-Type":"application/json"}});if(!T.ok)throw new Error("Error fetching logs");let{data:x,next_page:k}=await T.json();if(!x)throw new Error("data not found");return{data:x,next_page:k}},enabled:s,initialPageParam:void 0,getNextPageParam:c=>c.next_page});return{logs:(0,Ne.useMemo)(()=>a.data?a.data.pages.flatMap(c=>c.data||[]):[],[a.data]),isLoading:a.isLoading,hasError:a.isError,hasNextPage:a.hasNextPage??!1,fetchNextPage:a.fetchNextPage,isFetchingNextPage:a.isFetchingNextPage,refetch:a.refetch}}var ot=require("react");var le=require("react"),tt=pe(require("uplot"));var Y=e=>"value"in e,ae=e=>"from"in e&&"to"in e;var Z=pe(require("uplot")),Qe=require("@unblind/units");var B=require("@unblind/units");var S={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},j={second:[1,2,5,10,15,30],minute:[1,2,5,10,15,30],hour:[1,2,3,4,6,8,12],day:[1,2,3,7,14],month:[1,2,3,6],year:[1,2,5,10,20,50,100]};function ht(e,t,r,n){if(t>7*S.day){let o=B.systemDateFormats.interval.year,i=Math.round(S.year/S.day)*S.day;return Math.round(t/S.day)*S.day===i?o=B.systemDateFormats.interval.year:t<=S.year?o=B.systemDateFormats.interval.month:o=B.systemDateFormats.interval.day,e.map(a=>(0,B.dateTimeFormat)(a,{format:o,timeZone:n}))}return e.map(o=>{let i=new Date(o),s=t<S.minute,a=t<S.second,u=i.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:n});return(u==="00:00"||u==="24:00")&&!s&&!a?i.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:n}):i.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:s?"2-digit":void 0,fractionalSecondDigits:a?3:void 0,hour12:!1,timeZone:n})})}function De(e){let t=[{size:S.second/1e3,increments:j.second},{size:S.minute/1e3,increments:j.minute},{size:S.hour/1e3,increments:j.hour},{size:S.day/1e3,increments:j.day},{size:S.month/1e3,increments:j.month},{size:S.year/1e3,increments:j.year}];for(let o of t)for(let i of o.increments){let s=o.size*i;if(s>=e)return{increment:s*1e3,multiplier:i}}let r=t[t.length-1],n=r.increments[r.increments.length-1];return{increment:r.size*n*1e3,multiplier:n}}function ft(e,t,r){return[t,r]}function bt(e,t,r,n){let o=r-t,i=e.width,s=Math.floor(i/100),a=o/s,{increment:u,multiplier:c}=De(a),h=u/1e3,m=[];if(o<12*3600){let l=Math.ceil(t/h)*h;for(;l<=r;l+=h)m.push(l);return m}if(o<3*86400){if(u>=6*3600*1e3){let f=u/1e3/3600,y=new Date(t*1e3);if(n==="UTC"){let b=y.getUTCHours(),C=Math.floor(b/f)*f;y.setUTCHours(C,0,0,0)}else{let b=y.getHours(),C=Math.floor(b/f)*f;y.setHours(C,0,0,0)}let p=y.getTime()/1e3;for(p<t&&(p+=h);p<=r;)m.push(p),p+=h;return m}let l=Math.ceil(t/h)*h;for(;l<=r;l+=h)m.push(l);return m}if(u>=S.day){let l=new Date(t*1e3);n==="UTC"?(l.setUTCHours(0,0,0,0),l.getTime()/1e3<t&&l.setUTCDate(l.getUTCDate()+c)):(l.setHours(0,0,0,0),l.getTime()/1e3<t&&l.setDate(l.getDate()+c));let f=l.getTime()/1e3;for(;f<=r;)m.push(f),n==="UTC"?l.setUTCDate(l.getUTCDate()+c):l.setDate(l.getDate()+c),f=l.getTime()/1e3;return m}let d=Math.ceil(t/h)*h;for(;d<=r;d+=h)m.push(d);return m}function gt(e,t,r){return t.length===0?[]:t.map((n,o)=>o===0||o===t.length-1?(0,B.dateTimeFormatTimeAgo)(n*1e3,{timeZone:r}):"")}function yt(e,t,r){let n=e.scales.x,o=((n?.max??0)-(n?.min??0))*1e3,i=Math.floor(e.width/100),s=o/1e3/i,{increment:a}=De(s),u=t.map(c=>c*1e3);return ht(u,a,o,r)}function Fe(e,t,r=!1){let n=r?(i,s,a,u)=>ft(i,a,u):(i,s,a,u)=>bt(i,a,u,t),o=r?(i,s)=>gt(i,s,t):(i,s)=>yt(i,s,t);return{font:W(e),labelFont:W(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:n,values:o,size:20}}var X=require("@floating-ui/dom"),Ve=require("react-dom/client"),Tt=4,vt=8,be=class{overlay=null;reactRoot=null;renderedUplot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Ve.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t,r){this.reactRoot?(this.reactRoot.render(r),this.renderedUplot=t):this.renderedUplot=null}show(){this.overlay&&(this.overlay.style.display="block")}hide(t){if(t!==this.renderedUplot){console.warn("Hide call plot");return}this.overlay&&(this.overlay.style.display="none"),this.render(null,null)}getRenderedUplot(){return this.renderedUplot}async positionTooltip(t){let r=this.getOverlay();if(r){let{x:n,y:o}=await(0,X.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},r,{placement:"top-start",strategy:"fixed",middleware:[(0,X.offset)({mainAxis:Tt,crossAxis:vt}),(0,X.flip)()]});r.style.left=`${n}px`,r.style.top=`${o}px`}}},U=new be;var ge=require("@unblind/units"),ye=require("react");function Ke(e){return e.metric.displayName||e.metric.name||(typeof e.serie.label=="string"?e.serie.label:e.serie.label?.textContent||"Unknown")}function Oe(e){let t=e.attributes||{};if(t["service.name"])return String(t["service.name"]);let n=Object.keys(t)[0];return n?String(t[n]):"z-fallback"}function ze(e){return[...e].sort((t,r)=>(Number(r.value)||0)-(Number(t.value)||0))}function Be(e){return[...e].sort((t,r)=>Oe(t).localeCompare(Oe(r)))}function Ct(e){let t={};return e.forEach(r=>{let n=Ke(r);t[n]||(t[n]=[]),t[n].push(r)}),t}function qe(e,t,r,n="original"){if(r==="flat")return[{label:"",items:t?ze(e):Be(e)}];let o=Ct(e);return Object.keys(o).sort((s,a)=>s.localeCompare(a)).map(s=>{let a=o[s];if(!a)return{label:J(s,n),items:[]};let u=t?ze(a):Be(a);return{label:J(s,n),items:u}})}function J(e,t,r){switch(t){case"suffix":{let n=e.split(/[._-]/),o=n[n.length-1]||"";return r?o:o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}case"title":return e.split(/[._-]/).map(n=>r?n:n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" ");default:return e}}function He(e,t){if(t&&t!=="auto")return t;let r=e.some(o=>o.attributes&&Object.keys(o.attributes).length>0),n=new Set(e.map(Ke));return r&&n.size>=1?"group-by-metric":"flat"}var g=require("react/jsx-runtime");function xt(){return(0,g.jsx)("span",{"data-text":", ",className:"ub-tooltip-item-attribute-divider"})}function At({value:e}){return(0,g.jsx)("span",{className:"ub-tooltip-item-attribute-value ub-truncate",children:e})}function Pt({keyValue:e,labelFormat:t}){return(0,g.jsxs)("span",{className:"ub-tooltip-item-attribute-key",children:[J(e,t),":"]})}function kt({children:e}){return(0,g.jsx)("div",{className:"ub-tooltip-item-attribute-container",children:e})}function St({hideAttributeKey:e,children:t}){return(0,g.jsx)("div",{className:"ub-truncate"+(e?" ub-tooltip-item-hidden-attribute-key":" ub-tooltip-item-attribute-with-key"),children:t})}function Ge({hideAttributeKey:e,attribute:t,labelFormat:r,isLastAttribute:n}){let[o,i]=t;return(0,g.jsxs)(kt,{children:[(0,g.jsxs)(St,{hideAttributeKey:e,children:[!e&&(0,g.jsx)(Pt,{keyValue:o,labelFormat:r}),(0,g.jsx)(At,{value:i})]}),!n&&e&&(0,g.jsx)(xt,{})]})}function wt({item:e,hideMetric:t,hideAttributeKey:r,hideAttributes:n,labelFormat:o}){let s=Object.entries(e.attributes||{}),a=s.length>0&&!n;return n&&t&&console.warn("Invalid configuration. Attributes and metrics are hidden."),(0,g.jsxs)("div",{className:"ub-tooltip-item-row",children:[(0,g.jsxs)("div",{className:"ub-tooltip-item-left"+(t?" ub-tooltip-item-hidden-metric":""),children:[(0,g.jsxs)("div",{className:"ub-tooltip-item-heading",children:[(0,g.jsx)("span",{className:"ub-tooltip-item-dot",style:{backgroundColor:e.color}}),t?(0,g.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,c)=>(0,g.jsx)(Ge,{hideAttributeKey:r,attribute:u,labelFormat:o,isLastAttribute:c>=s.length-1},"attr_"+u[0]))}):(0,g.jsx)("span",{className:"ub-truncate"+(a?" ub-tooltip-item-metric-name-with-attributes":" ub-tooltip-item-metric-name-without-attributes"),children:J(e.metric.name,o)})]}),a&&!t&&(0,g.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,c)=>(0,g.jsx)(Ge,{hideAttributeKey:r,attribute:u,labelFormat:o,isLastAttribute:c>=s.length-1},"attr_"+u[0]))})]}),(0,g.jsx)("div",{className:"ub-tooltip-item-value",children:e.formattedValue??(0,g.jsx)("span",{className:"ub-tooltip-item-value--empty",children:"\u2014"})})]})}function Lt({className:e="ub-tooltip-divider",...t}){return(0,g.jsx)("hr",{role:"presentation",...t,className:e})}function Rt({group:e,groupIdx:t,hideAttributeKey:r,hideMetric:n,hideAttributes:o,labelFormat:i,hideGroupLabel:s}){return(0,g.jsxs)("div",{className:"ub-tooltip-group",children:[!s&&(0,g.jsx)("div",{className:`ub-tooltip-group-header ub-truncate${t>0?" ub-tooltip-group-header--separator":""}`,children:e.label}),(0,g.jsx)("div",{className:"ub-tooltip-items",children:e.items.map((a,u)=>(0,g.jsx)(wt,{item:a,labelFormat:i,hideAttributeKey:r,hideMetric:n,hideAttributes:o},`item-${t}-${u}`))})]},e.label)}function _e({timestamp:e,items:t,timeZone:r,spansMultipleDays:n,sortByValues:o,labelFormat:i="original",layout:s="flat",hideAttributeKey:a,hideMetric:u,hideAttributes:c}){let h=n?(0,ge.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,ge.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r}),m=(0,ye.useMemo)(()=>He(t,s),[t,s]),d=m==="flat",f=typeof u=="boolean"?u:m==="group-by-metric",y=typeof a=="boolean"?a:!1,p=typeof c=="boolean"?c:!1,b=(0,ye.useMemo)(()=>qe(t,o,m,i),[t,o,m,i]);return(0,g.jsxs)("div",{className:"ub-tooltip",children:[(0,g.jsx)("div",{className:"ub-tooltip-datetime",children:h}),(0,g.jsx)(Lt,{}),b.length>0?(0,g.jsx)("div",{className:"ub-tooltip-content",children:b.map((C,T)=>(0,g.jsx)(Rt,{group:C,groupIdx:T,hideAttributeKey:y,hideMetric:f,hideAttributes:p,hideGroupLabel:d,labelFormat:i},C.label))}):(0,g.jsx)("div",{className:"ub-tooltip-no-data",children:"No data available"})]})}var Te=require("react/jsx-runtime");function Ut(e,t){if(!e||e.length===0)return!1;let r=e[0],n=e[e.length-1];if(r==null||n==null)return!1;let o=new Date(r*1e3),i=new Date(n*1e3),s=a=>t==="UTC"?`${a.getUTCFullYear()}-${a.getUTCMonth()}-${a.getUTCDate()}`:a.toLocaleDateString(void 0,{timeZone:t});return s(o)!==s(i)}function Et(e,t){let r=!1;for(let o=1;o<e.series.length;o++)if(e.data[o]?.[t]!=null){r=!0;break}if(r)return t;let n=e.data[0].length;for(let o=1;t+o<n||t-o>=0;o++){let i=t-o,s=t+o;if(i>=0){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[i]!=null)return i}if(s<n){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[s]!=null)return s}}return t}function Mt(e,t,r,n,o,i){let s=!1,a=[];for(let u=1;u<e.series.length;u++){let c=e.data[u]?.[t]??null;if(n&&c!=null&&u>1){let p=e.data[u-1]?.[t]??0;c=c-p}let h=e.series[u],m=i?.[u-1];if(!m){console.warn("Original serie not found");continue}let d=o[m.metric];if(!d){console.warn("Metric metadata not found");continue}let l=h?.stroke,f=typeof l=="function"?l(e,u):l??"#ffffff00",y=c==null?void 0:r?r(c):String(c);m?.attributes&&Object.keys(m?.attributes).length>0&&(s=!0),a.push({metric:d,color:f,value:c===null?void 0:c,formattedValue:y,attributes:m?.attributes,serie:h})}return{items:a,hasAttributes:s}}function $e(e,t,r,n,o,i,s,a,u,c,h,m){let d,l,f,y=!1;function p(){let b=d.getBoundingClientRect();l=b.left,f=b.top}return{hooks:{init:b=>{U.initialize(),d=b.over,window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),d.onmouseenter=()=>{y=!0,U.show()},d.onmouseleave=()=>{y=!1,U.getRenderedUplot()===b&&U.hide(b)},p()},setSize:()=>{p()},setCursor:b=>{let{left:C,top:T,idx:x}=b.cursor;if(!y||x==null){U.getRenderedUplot()===b&&U.hide(b);return}let v=b.data[0],A=Ut(v,o),L=Et(b,x),R=b.data[0][L];if(R===void 0)return;let{items:E}=Mt(b,L,e,t,r,s);U.show();let I=i,M=I?(0,Te.jsx)(I,{timestamp:R,items:E,timeZone:o}):(0,Te.jsx)(_e,{timestamp:R,items:E,timeZone:o,spansMultipleDays:A,stacked:t,sortByValues:n,layout:a,labelFormat:u,hideAttributeKey:c,hideAttributes:h,hideMetric:m});U.render(b,M),U.positionTooltip({left:(C||0)+l,top:(T||0)+f})},destroy(b){window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),d&&(d.onmouseenter=null,d.onmouseleave=null),U.getRenderedUplot()===b&&U.hide(b)}}}}var se=["oklch(0.70 0.24 293)","oklch(0.85 0.18 95)","oklch(0.65 0.25 255)","oklch(0.72 0.26 27)","oklch(0.70 0.22 150)","oklch(0.78 0.18 50)","oklch(0.72 0.18 215)","oklch(0.70 0.27 301)","oklch(0.75 0.20 90)","oklch(0.68 0.23 277)","oklch(0.70 0.18 193)","oklch(0.68 0.25 4)"],W=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,je=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r};function Nt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function It(e){return Array.isArray(e)}var We=(e,t,r,n,o,i)=>{if(r)return It(r)?r[t]:Nt(r)?i?r.fill[t]:r.border[t]:r(e,t,n,i);let s=i?`--ub-chart-serie-color-fill-${t+1}`:`--ub-chart-serie-color-${t+1}`,a=o.getPropertyValue(s).trim();return a||(i&&(n==="step"||n==="line"||n==="spline")?`oklch(from ${se[t%se.length]} l c h / 0.4)`:se[t%se.length])},Dt=e=>{let t=Z.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=Z.default.paths.linear({alignGaps:0}),n=Z.default.paths.spline({alignGaps:1}),o=Z.default.paths.stepped({alignGaps:1});switch(e){case"line":return r;case"bar":return t;case"area":return r;case"step":return o;case"spline":return n;default:return r}},Ft=(e,t,r,n,o)=>We(e,t,r,n,o,!0),Vt=(e,t)=>{switch(e){case"bar":return 1;case"line":return t?1.5:2;case"spline":return t?1.5:2;case"area":return 1;case"step":return 1.5;default:return 1}},Ot=(e,t,r)=>{if(t<0||r<0)return[t,r];let n=e.posToVal(t,"x"),o=e.data[0];if(!o||o.length===0)return[t,r];let i=0,s=0,a=o.length-1;for(;a-s>1;){let l=Math.floor((s+a)/2),f=o[l];f!=null&&f<n?s=l:a=l}let u=o[s],c=o[a];u!=null&&c!=null?i=Math.abs(u-n)<Math.abs(c-n)?s:a:u!=null?i=s:c!=null&&(i=a);let h=i;for(let l=i;l>=0;l--){let f=!1;for(let y=1;y<e.data.length;y++){let p=e.data[y];if(p&&p[l]!=null){f=!0;break}}if(f){h=l;break}}let m=o[h];return m==null?[t,r]:[e.valToPos(m,"x"),r]},zt=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),n=t.getPropertyValue("--ub-chart-grid-color").trim(),o=e.axes?.[0],i=e.axes?.[1];return o&&(o.stroke=r,o.grid?o.grid.stroke=n:o.grid={stroke:n}),i&&(i.stroke=r,i.grid?i.grid.stroke=n:i.grid={stroke:n}),e},Bt=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),Kt=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),qt=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},Ht=e=>e==="line"?void 0:[5,5],Gt=(e,t)=>{if(t){let r=[];return t.forEach(n=>{let o={label:n.label,stroke:Bt(e,n.level),width:qt(),dash:Ht(n.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};Y(n)||r.push(o),r.push(o)}),r}else return[]},_t=(e,t,r,n)=>{if(!n||!n.some(i=>ae(i)))return t.bands;let o=n.map((i,s)=>Y(i)?null:{series:[e.length+s*2+1,e.length+s*2+2],fill:Kt(r,i.level),dir:1}).filter(i=>i!==null);return[...t.bands,...o]},$t=(e,t,r,n,o,i,s)=>{let a=Vt(t,n);return[{},...e.map((u,c)=>({label:u.metric,stroke:We(u,c,r,t,i),width:a,points:{show:!1},spanGaps:!0,paths:Dt(t),fill:n||o?Ft(u,c,r,t,i):void 0})),...Gt(i,s)]},Qt=e=>typeof e=="string"&&String(e).toLowerCase().trim()==="by"?"bytes":e,Xe=(e,t,r,n,o,i,s,a,u,c,h,m,d,l,f,y,p,b,C,T,x,k)=>{let v=window.getComputedStyle(e),A=v.fontFamily,L=e?.clientWidth??1050,R=e?.clientHeight??250,E=Qt(n),I=(0,Qe.getValueFormat)(E==="1"?null:E),M=q=>{let w=I(q,k);return w.text+(w.suffix?.trim()||"")},N={width:L,height:R,scales:{y:{range:Ye(n,T,x)}},plugins:[$e(M,s,t,c,h,m,o,f,l,y,p,b)],padding:d?[10,15,10,15]:[8,15,8,15],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:Ot},series:$t(o,i,a,u,s,v,C),bands:_t(o,r,v,C),axes:[Fe(A,h,d),Je(I,A)],legend:{show:!1}};return zt(N,v)};var Ze=(e,t=4)=>{let r=e/t,n=Math.pow(10,Math.floor(Math.log10(r))),o=r/n,i;return o>5?i=10*n:o>2?i=5*n:o>1?i=2*n:i=n,Math.ceil(e/i)*i},P=(e,t)=>typeof e=="number"?e:t,Ye=(e,t,r)=>(n,o,i)=>{if(o===0&&i===0)return[P(t,0),P(r,100)];let s=1,a=i*(1+s),u=o<0?o*(1+s):o*(1-s);if(e==="percent"||e==="percentunit"){let m=e==="percent"?100:1;return i>m?o<0?[P(t,u),P(r,a)]:[P(t,0),P(r,a)]:o<0?[P(t,u),P(r,m)]:[P(t,0),P(r,m)]}if(i<=.9999)return o<=0?[P(t,u),P(r,1)]:[P(t,0),P(r,1)];let c=Ze(a),h=Ze(Math.abs(u));return o<0?[P(r,-h),P(r,c)]:[P(t,0),P(r,c)]},jt=(e,t,r,n)=>{let o=e.axes[r];if(n>1)return o?._size||0;let i=(o?.ticks?.size||0)+(o?.gap||0),s=(t??[]).reduce((a,u)=>u.length>a.length?u:a,"");return s!=""&&(e.ctx.font=o?.font?.[0]??e.ctx.font,i+=e.ctx.measureText(s).width/devicePixelRatio),Math.ceil(i)};function Je(e,t){return{gap:0,font:W(t),labelFont:W(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(r,n)=>n.map(o=>{let i=e(o);return i.text+(i.suffix?.trim()||"")}),size:jt,space:60}}function et(e,t){let r=[],n=e[0],o=n.length,i=Array(o).fill(0),s=[n];if(e.forEach((a,u)=>{u!==0&&(t?s.push(a):s.push(a.map((c,h)=>i[h]=i[h]+(c||0))))}),!t)for(let a=1;a<e.length-1;a++)r.push({series:[a+1,a]});return{data:s,bands:r.filter(a=>a.series[1]>-1)}}var rt=require("react/jsx-runtime");function ue(e){let{times:t,series:r,metadata:n,type:o,className:i,timeZone:s,options:a,tooltip:u,colors:c,tooltipComponent:h,sortByValues:m=!1,unit:d,fill:l=!1,thresholds:f,min:y,max:p}=e,{layout:b,labelFormat:C,hideAttributeKey:T,hideAttributes:x,hideMetric:k}=u||{},v=(0,le.useRef)(null),A=G(),L=c||A.colors;return(0,le.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let R=[t],E=d;r.forEach(w=>{let _=n[w.metric];d||(E=je(E,_)),R.push(w.values)});let I=o==="bar"||o==="area",M=et(R,!I);f&&f.forEach(w=>{Y(w)?M.data.push(new Array(t.length).fill(w.value)):ae(w)&&(M.data.push(new Array(t.length).fill(w.from)),M.data.push(new Array(t.length).fill(w.to)))});let N=v.current,q=null;if(N){let w=Xe(N,n,M,E,r,o,I,L,l,m,s,h,!1,C,b,T,x,k,f,y,p);q=new tt.default({...w,...a},M.data,N);let _=new ResizeObserver(()=>{q?.setSize({width:N.clientWidth,height:N.clientHeight})});return _.observe(N),()=>{q?.destroy(),_.disconnect()}}},[r,t,o,n,s,h,L,l,m,d,C,b,T,x,k,f,y,p,a]),(0,rt.jsx)("div",{ref:v,className:"ub-chart-container"+(i?` ${i}`:"")})}var K=require("react/jsx-runtime");function nt({metrics:e,operator:t,attributes:r,groupBy:n,interval:o,type:i="line",className:s,appearance:a,unit:u,thresholds:c,min:h,max:m,colors:d,tooltip:l,sortByValues:f,fill:y}){let p=G(),b=o??p.interval,C=r??p.attributes,T=n??p.groupBy,x=t??p.operator,k=d??p.colors,v=typeof f=="boolean"?f:p.sortByValues,A=typeof y=="boolean"?y:p.fill,L=a?.components?.Tooltip??p.appearance.components.Tooltip,R=(0,ot.useMemo)(()=>({layout:l?.layout??p.tooltip?.layout,format:l?.labelFormat??p.tooltip?.labelFormat,hideAttributes:l?.hideAttributes??p.tooltip?.hideAttributes,hideAttributeKey:l?.hideAttributeKey??p.tooltip?.hideAttributeKey,hideMetric:l?.hideMetric??p.tooltip?.hideMetric}),[l?.layout,l?.labelFormat,l?.hideAttributes,l?.hideAttributeKey,l?.hideMetric,p.tooltip?.layout,p.tooltip?.labelFormat,p.tooltip?.hideAttributes,p.tooltip?.hideAttributeKey,p.tooltip?.hideMetric]),{isLoading:E,data:I,hasError:M}=ie({queries:(Array.isArray(e)?e:[e]).map(V=>({metrics:[V],operator:x,attributes:C,groupBy:T})),timeRange:p.timeRange,startTime:p.startTime,endTime:p.endTime,interval:b}),{series:N,times:q,metadata:w}=I,_=N.every(V=>V.isEmpty),ce=`ub-chart-container${s?` ${s}`:""}`;if(E){let V=a?.components?.Loading??p.appearance.components.Loading;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}if(M){let V=a?.components?.Error??p.appearance.components.Error;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}if(_){let V=a?.components?.Empty??p.appearance.components.Empty;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}return(0,K.jsx)(ue,{times:q,series:N,metadata:w,type:i,className:s,tooltip:R,colors:k,sortByValues:v,unit:u,fill:A,tooltipComponent:L,thresholds:c,min:h,max:m})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
1
+ "use strict";var Ct=Object.create;var re=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)re(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of St(t))!Rt.call(e,i)&&i!==r&&re(e,i,{get:()=>t[i],enumerable:!(o=xt(t,i))||o.enumerable});return e};var fe=(e,t,r)=>(r=e!=null?Ct(Pt(e)):{},De(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>De(re({},"__esModule",{value:!0}),e);var pr={};kt(pr,{Chart:()=>pe,Empty:()=>oe,Error:()=>ie,Loading:()=>ne,Scope:()=>Z,Timeseries:()=>ht,UnblindProvider:()=>Ie,useLogs:()=>Ke,useMetrics:()=>qe,useRefresh:()=>ye,useScope:()=>O,useTimeseries:()=>se,useUsage:()=>We});module.exports=At(pr);var _=require("@tanstack/react-query"),q=require("react"),ge=require("react/jsx-runtime"),Ve=(0,q.createContext)(void 0);function be({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:o="/api/unblind",fetchImpl:i}){let n=(0,q.useMemo)(()=>{if(t)return t;let s={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:s}};return r?new _.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...s,...r.defaultOptions?.queries}}}):new _.QueryClient(l)},[t,r]),a=(0,q.useMemo)(()=>({apiBaseUrl:o,fetchImpl:i}),[o,i]);return(0,ge.jsx)(_.QueryClientProvider,{client:n,children:(0,ge.jsx)(Ve.Provider,{value:a,children:e})})}function N(){let e=(0,q.useContext)(Ve);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function ye(){let e=(0,_.useQueryClient)();return(0,q.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var V=require("react");var D=require("react/jsx-runtime");function oe(){return(0,D.jsx)("div",{className:"ub-default",children:(0,D.jsxs)("div",{className:"ub-empty-content",children:[(0,D.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,D.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"ub-icon",children:(0,D.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,D.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function ie(){return(0,D.jsx)("div",{className:"ub-default-error"})}function ne(){return(0,D.jsx)("div",{className:"ub-default-loading","data-text":"Loading"})}var Oe=require("react/jsx-runtime"),Te=(0,V.createContext)(void 0);function Z({children:e,timeRange:t,startTime:r,endTime:o,interval:i,attributes:n,groupBy:a,operator:s,appearance:l,tooltip:m,colors:f,fill:g,hideAxis:h,hideCursor:u,relativeTimeAxis:b,invertSort:y}){let d=(0,V.useContext)(Te),v=l?.components?.Loading||d?.appearance?.components?.Loading,T=l?.components?.Error||d?.appearance?.components?.Error,x=l?.components?.Tooltip||d?.appearance?.components?.Tooltip,p=l?.components?.Empty||d?.appearance?.components?.Empty,C=typeof m?.hide=="boolean"?m?.hide:d?.tooltip?.hide,P=typeof m?.visibilityLimit=="number"?m?.visibilityLimit:d?.tooltip?.visibilityLimit,R=(0,V.useMemo)(()=>({components:{...v&&{Loading:v},...T&&{Error:T},...x&&{Tooltip:x},...p&&{Empty:p}}}),[v,T,x,p]),k=(0,V.useMemo)(()=>({hide:C,visibilityLimit:P}),[C,P]),L=(0,V.useMemo)(()=>({timeRange:t??d?.timeRange,startTime:r??d?.startTime,endTime:o??d?.endTime,interval:i??d?.interval,attributes:n??d?.attributes,groupBy:a??d?.groupBy,operator:s??d?.operator,colors:f??d?.colors,relativeTimeAxis:typeof b=="boolean"?b:d?.relativeTimeAxis,fill:typeof g=="boolean"?g:d?.fill,hideAxis:typeof h=="boolean"?h:d?.hideAxis,hideCursor:typeof u=="boolean"?u:d?.hideCursor,invertSort:typeof y=="boolean"?y:d?.invertSort,appearance:R,tooltip:k}),[t,r,o,i,n,a,s,f,g,b,h,u,R,k,d,y]);return(0,Oe.jsx)(Te.Provider,{value:L,children:e})}var Lt="6h";function O(){let e=(0,V.useContext)(Te);return(0,V.useMemo)(()=>({...e,timeRange:e?.timeRange||Lt,appearance:{components:{Loading:e?.appearance?.components?.Loading??ne,Error:e?.appearance?.components?.Error??ie,Empty:e?.appearance?.components?.Empty??oe,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var ve=require("react/jsx-runtime");function Ie({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:o,timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T}){return(0,ve.jsx)(be,{queryClient:t,apiBaseUrl:r,fetchImpl:o,children:(0,ve.jsx)(Z,{timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T,children:e})})}var ze=require("@tanstack/react-query");function qe(){let{apiBaseUrl:e,fetchImpl:t=fetch}=N(),r=(0,ze.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let o=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!o.ok)throw new Error("Error loading metrics metadata");if(o.status===200){let{data:i}=await o.json();return i}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var Qe=require("@tanstack/react-query"),j=require("react");var Fe=fe(require("ms"));function Be({scope:e,props:t}){return t.timeRange||t.startTime&&t.endTime?t:e}function wt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,Fe.default)(e)/1e3),t]}function H(e,t,r){let o,i;if(typeof t=="number"&&typeof r=="number")o=t,i=r;else if(e){let[n,a]=wt(e);o=n,i=a}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[o,i]}var _e=require("react");function W(e){let t=O(),{timeRange:r,startTime:o,endTime:i}=Be({props:e,scope:t});return(0,_e.useMemo)(()=>({timeRange:r,startTime:o,endTime:i}),[r,o,i])}function se(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),{queries:a,interval:s}=e,l=(0,j.useMemo)(()=>a.map(p=>p.metrics.join(",")).join(","),[a]),m=(0,j.useMemo)(()=>a.map(p=>{let C=p.attributes;if(!C)return"";let P=Object.keys(C);return P.length===0?"":P.map(R=>R+":"+C[R]?.join(",")).join(",")}).join(","),[a]),f=(0,j.useMemo)(()=>a.map(p=>p.operator),[a]),g=(0,j.useMemo)(()=>a.map(p=>p.groupBy).join(", "),[a]),u=(0,Qe.useQuery)({queryKey:["unblind","timeseries",l,m,o,i,n,s,f,g],queryFn:async()=>{if(!l)throw new Error("Missing required parameters");if(l.length===0)throw new Error("No series provided");let[p,C]=H(n,o,i),P={queries:a,startTime:p,endTime:C,interval:s},R=await r(`${t}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!R.ok)throw new Error("Error fetching metric");let{series:k,times:L,metadata:E}=await R.json();if(!k)throw console.error("Series not found"),new Error("Series not found");return{series:k,times:L,metadata:E}},enabled:!!l&&(typeof o=="number"&&typeof i=="number"||!!n)}),{metadata:b,series:y,times:d}=(0,j.useMemo)(()=>u.data?{series:u.data.series,times:u.data.times,metadata:u.data.metadata}:{series:[],times:[],metadata:{}},[u]),v=u.isLoading,T=u.isFetching,x=u.isError;return{data:{series:y,times:d,metadata:b},isLoading:v,isFetching:T,hasError:x,refetch:u.refetch}}var $e=require("@tanstack/react-query"),He=require("react");function We(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),s=(0,$e.useQuery)({queryKey:["unblind","usage",n,o,i],queryFn:async()=>{let[g,h]=H(n,o,i),u=`${t}/tenants/usage`,b=await r(u,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:g,endTime:h})});if(!b.ok)throw new Error("Error fetching usage");let{data:y}=await b.json();if(!y)throw new Error("usage not found");return y},enabled:typeof o=="number"&&typeof i=="number"||!!n}),l=(0,He.useMemo)(()=>s.data?s.data||[]:[],[s]),m=s.isLoading||s.isRefetching,f=s.isError;return{usage:l,isLoading:m,hasError:f,refetch:s.refetch}}var je=require("@tanstack/react-query"),Ge=require("react");function Ke(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{timeRange:o,startTime:i,endTime:n}=W(e),{attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g}=e,h=(0,je.useInfiniteQuery)({queryKey:["unblind","logs",o,i,n,s,l,g,JSON.stringify(a)],queryFn:async({pageParam:b})=>{let[y,d]=H(o,i,n),v=await r(`${t}/tenants/logs`,{method:"POST",body:JSON.stringify({attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g,startTime:y,endTime:d,pagination:{page:b}}),headers:{"Content-Type":"application/json"}});if(!v.ok)throw new Error("Error fetching logs");let{data:T,nextPage:x}=await v.json();if(!T)throw new Error("data not found");return{data:T,nextPage:x}},initialPageParam:void 0,getNextPageParam:b=>b.nextPage});return{logs:(0,Ge.useMemo)(()=>h.data?h.data.pages.flatMap(b=>b.data||[]):[],[h.data]),isLoading:h.isLoading,hasError:h.isError,hasNextPage:h.hasNextPage??!1,fetchNextPage:h.fetchNextPage,isFetchingNextPage:h.isFetchingNextPage,refetch:h.refetch}}var me=require("react");var ue=require("react"),mt=fe(require("uplot"));var ee=e=>"value"in e,ae=e=>"from"in e&&"to"in e;var te=fe(require("uplot")),it=require("@unblind/units");var F=require("@unblind/units");var A={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},G={second:[1,2,5,10,15,30],minute:[1,2,5,10,15,30],hour:[1,2,3,4,6,8,12],day:[1,2,3,7,14],month:[1,2,3,6],year:[1,2,5,10,20,50,100]};function Ut(e,t,r,o){if(t>7*A.day){let i=F.systemDateFormats.interval.year,n=Math.round(A.year/A.day)*A.day;if(Math.round(t/A.day)*A.day===n)i=F.systemDateFormats.interval.year;else{if(t<=A.year)return e.map(s=>{let l=new Date(s);return(o==="UTC"?l.getUTCDate():l.getDate())===1?l.toLocaleDateString(void 0,{month:"short",year:"numeric",timeZone:o}):l.toLocaleDateString(void 0,{day:"numeric",month:"short",timeZone:o})});i=F.systemDateFormats.interval.day}return e.map(s=>(0,F.dateTimeFormat)(s,{format:i,timeZone:o}))}return e.map(i=>{let n=new Date(i),a=t<A.minute,s=t<A.second,l=n.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:o});return(l==="00:00"||l==="24:00")&&!a&&!s?n.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:o}):n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:a?"2-digit":void 0,fractionalSecondDigits:s?3:void 0,hour12:!1,timeZone:o})})}function Et(e){let t=[{size:A.second/1e3,increments:G.second},{size:A.minute/1e3,increments:G.minute},{size:A.hour/1e3,increments:G.hour},{size:A.day/1e3,increments:G.day},{size:A.month/1e3,increments:G.month},{size:A.year/1e3,increments:G.year}];for(let i of t)for(let n of i.increments){let a=i.size*n;if(a>=e)return{increment:a*1e3,multiplier:n}}let r=t[t.length-1],o=r.increments[r.increments.length-1];return{increment:r.size*o*1e3,multiplier:o}}function Mt(e,t,r){return[t,r]}function Nt(e,t,r){return t.length===0?[]:t.map((o,i)=>i===0||i===t.length-1?(0,F.dateTimeFormatTimeAgo)(o*1e3,{timeZone:r}):"")}function Dt(e,t,r){let o=e.scales.x,i=((o?.max??0)-(o?.min??0))*1e3,n=Math.floor(e.width/100),a=i/1e3/n,{increment:s}=Et(a),l=t.map(m=>m*1e3);return Ut(l,s,i,r)}function Xe(e,t,r=!1,o=!1){let i=r?(a,s,l,m)=>Mt(a,l,m):void 0,n=r?(a,s)=>Nt(a,s,t):(a,s)=>Dt(a,s,t);return{font:K(e),labelFont:K(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:i,values:n,size:20,show:!o,align:r?2:void 0,space:(a,s,l,m,f)=>f<400?100:f<800?150:250}}var X=require("@floating-ui/dom"),Ye=require("react-dom/client"),Vt=4,Ot=8,Ce=class{overlay=null;reactRoot=null;renderedUplot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Ye.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t,r){this.reactRoot?(this.reactRoot.render(r),this.renderedUplot=t):this.renderedUplot=null}show(){this.overlay&&(this.overlay.style.display="block")}hide(t){if(t!==this.renderedUplot){console.warn("Hide call plot");return}this.overlay&&(this.overlay.style.display="none"),this.render(null,null)}getRenderedUplot(){return this.renderedUplot}async positionTooltip(t){let r=this.getOverlay();if(r){let{x:o,y:i}=await(0,X.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},r,{placement:"top-start",strategy:"fixed",middleware:[(0,X.offset)({mainAxis:Vt,crossAxis:Ot}),(0,X.flip)()]});r.style.left=`${o}px`,r.style.top=`${i}px`}}},U=new Ce;var xe=require("@unblind/units"),Y=require("react"),c=require("react/jsx-runtime"),It=6,Je=(0,Y.createContext)(null);function le(){let e=(0,Y.useContext)(Je);if(!e)throw new Error("useTooltipSerie must be used within a SerieProvider");return e}function zt({serie:e,children:t}){return(0,c.jsx)(Je.Provider,{value:e,children:t})}function Se({className:e="ub-tooltip-divider",...t}){return(0,c.jsx)("hr",{role:"presentation",...t,className:e})}function qt({formattedTime:e,unitCategory:t,tooltipSerieList:r,visibilityLimit:o,invertSort:i}){let n=r.slice(0,o),a=r.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-metrics",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)(_t,{children:t})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map(s=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(Ze,{})}),(0,c.jsx)(we,{})]},s.metric.name)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function Ft({formattedTime:e,tooltipSerieList:t,visibilityLimit:r,invertSort:o}){let i=t[0],n=t.slice(0,r),a=t.slice(r);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(i?.metric.name||"")})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(et,{})}),(0,c.jsx)(we,{})]},"serie_"+l)),(0,c.jsx)(Pe,{series:a,invertSort:o})]})]})}function Bt({formattedTime:e,tooltipSerieList:t,unitCategory:r,visibilityLimit:o,invertSort:i}){let n=t.slice(0,o),a=t.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:r})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsxs)(Ee,{children:[(0,c.jsx)(Ze,{}),(0,c.jsx)(et,{})]}),(0,c.jsx)(we,{})]},"serie"+l)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function _t(e){return(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:e.children})}function Pe({series:e,invertSort:t}){let r=e[0]?.formattedValue,o=!e.some(n=>(n.value||0)>0),i=!e.some(n=>n.value!==void 0);return e.length>0?i?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with no data"]})}):o?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with zero values"]})}):(0,c.jsxs)("span",{className:"ub-tooltip-summary",children:[(0,c.jsxs)("span",{children:["+",e.length," more with "]}),(0,c.jsx)("span",{children:`${t?"\u2265":"\u2264"} ${r}`})]}):(0,c.jsx)(c.Fragment,{})}function Re(e){return(0,c.jsx)(zt,{serie:e.serie,children:(0,c.jsx)("div",{className:"ub-tooltip-serie",children:e.children})})}function ke(e){return(0,c.jsx)("div",{className:"ub-tooltip-content",children:e.children})}function Ae(e){return(0,c.jsx)("div",{className:"ub-tooltip-header",children:e.children})}function Le(e){return(0,c.jsx)("div",{className:"ub-tooltip-datetime",children:e.children})}function Ze(){let e=le();return(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(e.metric.name)})}function we(){let e=le();return e.formattedValue?(0,c.jsx)("span",{className:"ub-tooltip-serie-value",children:e.formattedValue}):(0,c.jsx)("span",{className:"ub-tooltip-serie-value-empty",children:"\u2013"})}function Ue(){let e=le();return(0,c.jsx)("span",{style:{backgroundColor:e.color},className:"ub-tooltip-serie-color"})}function Ee(e){return(0,c.jsx)("span",{className:"ub-tooltip-serie-label ub-truncate",children:e.children})}function et(){let{attributes:e}=le();if(!e)return null;let t=Object.values(e);return(0,c.jsx)("div",{className:"ub-tooltip-serie-attributes ub-truncate",children:t.map((r,o)=>(0,c.jsxs)(Y.Fragment,{children:[(0,c.jsx)("span",{className:"ub-tooltip-serie-attribute-value",children:r}),o<t.length-1&&(0,c.jsx)("span",{"data-text":", ",className:"ub-tooltip-serie-attribute-divider"})]},"tooltip-"+r))})}function Qt({tooltipSerieList:e,invertSort:t}){return t?e.sort((r,o)=>(Number(r.value)||0)-(Number(o.value)||0)):e.sort((r,o)=>(Number(o.value)||0)-(Number(r.value)||0))}function tt(e,t){let r=e.split(/[._-]/),o=r[r.length-1]||"";return t?o:o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}function rt({timestamp:e,tooltipSerieList:t,timeZone:r,spansMultipleDays:o,hasMultipleMetrics:i,hasAttributes:n,invertSort:a,visibilityLimit:s}){let l=Qt({tooltipSerieList:t,invertSort:a}),m=o?(0,xe.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,xe.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r}),f=s||It;return n?n&&!i?(0,c.jsx)(Ft,{formattedTime:m,tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(Bt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(qt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a})}var Me=require("react/jsx-runtime");function $t(e,t){if(!e||e.length===0)return!1;let r=e[0],o=e[e.length-1];if(r==null||o==null)return!1;let i=new Date(r*1e3),n=new Date(o*1e3),a=s=>t==="UTC"?`${s.getUTCFullYear()}-${s.getUTCMonth()}-${s.getUTCDate()}`:s.toLocaleDateString(void 0,{timeZone:t});return a(i)!==a(n)}function Ht(e,t){let r=!1;for(let i=1;i<e.series.length;i++)if(e.data[i]?.[t]!=null){r=!0;break}if(r)return t;let o=e.data[0].length;for(let i=1;t+i<o||t-i>=0;i++){let n=t-i,a=t+i;if(n>=0){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[n]!=null)return n}if(a<o){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[a]!=null)return a}}return t}function Wt(e,t,r,o,i,n,a){let s=[],l=e.data[0],m=new Set,f=new Set,g=!1;for(let h=1;h<e.series.length;h++){let u=e.data[h]?.[t]??null;if(o&&u!=null&&h>1){let C=e.data[h-1]?.[t]??0;u=u-C}let b=e.series[h],y=n?.[h-1];if(!y){console.warn("Original serie not found");continue}let d=i[y.metric];if(!d){console.warn("Metric metadata not found");continue}m.add(y.metric);let v=y?.attributes;if(v&&Object.keys(v).length>0){g=!0;for(let C in v)f.add(C)}let T=b?.stroke,x=typeof T=="function"?T(e,h):T??"#ffffff00",p=u==null?void 0:r?r(u):String(u);s.push({metric:d,color:x,value:u===null?void 0:u,formattedValue:p,attributes:v,serie:b})}return{tooltipSerieList:s,hasAttributes:g,hasMultipleMetrics:m.size>1,hasMultipleAttributes:f.size>1,spansMultipleDays:$t(l,a)}}function ot(e,t,r,o,i,n,a,s){let l,m,f,g=!1;function h(){let u=l.getBoundingClientRect();m=u.left,f=u.top}return{hooks:{init:u=>{U.initialize(),l=u.over,window.addEventListener("scroll",h,!0),window.addEventListener("resize",h),l.onmouseenter=()=>{g=!0,U.show()},l.onmouseleave=()=>{g=!1,U.getRenderedUplot()===u&&U.hide(u)},h()},setSize:()=>{h()},setCursor:u=>{let{left:b,top:y,idx:d}=u.cursor;if(!g||d==null){U.getRenderedUplot()===u&&U.hide(u);return}let T=Ht(u,d),x=u.data[0][T];if(x===void 0)return;let{tooltipSerieList:p,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,spansMultipleDays:k}=Wt(u,T,e,t,r,n,o);U.show();let L=i,E=L?(0,Me.jsx)(L,{timestamp:x,tooltipSerieList:p,timeZone:o}):(0,Me.jsx)(rt,{timestamp:x,tooltipSerieList:p,timeZone:o,spansMultipleDays:k,stacked:t,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,visibilityLimit:a,invertSort:s});U.render(u,E),U.positionTooltip({left:(b||0)+m,top:(y||0)+f})},destroy(u){window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),l&&(l.onmouseenter=null,l.onmouseleave=null),U.getRenderedUplot()===u&&U.hide(u)}}}}var ce=["oklch(0.70 0.24 293)","oklch(0.85 0.18 95)","oklch(0.65 0.25 255)","oklch(0.72 0.26 27)","oklch(0.70 0.22 150)","oklch(0.78 0.18 50)","oklch(0.72 0.18 215)","oklch(0.70 0.27 301)","oklch(0.75 0.20 90)","oklch(0.68 0.23 277)","oklch(0.70 0.18 193)","oklch(0.68 0.25 4)"],K=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,nt=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r};function jt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function Gt(e){return Array.isArray(e)}var Kt=12,Xt=({isFilling:e,useSolid:t,index:r})=>{let o=r%Kt+1;return e?t?`--ub-chart-serie-color-${o}`:`--ub-chart-serie-fill-color-${o}`:`--ub-chart-serie-color-${o}`},st=(e,t,r,o,i,n)=>{let a=o==="bar"||o==="area";if(r)return Gt(r)?r[t]:jt(r)?n?r.fill[t]:r.border[t]:r(e,t,o,n);let s=Xt({isFilling:n,useSolid:a,index:t}),l=i.getPropertyValue(s).trim();return l||(n&&a?ce[t%ce.length]?.replace(")"," / 0.4)"):ce[t%ce.length])},Yt=e=>{let t=te.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=te.default.paths.linear({alignGaps:0}),o=te.default.paths.spline({alignGaps:1}),i=te.default.paths.stepped({alignGaps:1});switch(e){case"line":return r;case"bar":return t;case"area":return r;case"step":return i;case"spline":return o;default:return r}},Jt=(e,t,r,o,i)=>st(e,t,r,o,i,!0),Zt=(e,t)=>{switch(e){case"bar":return 1;case"line":return t?1.5:2;case"spline":return t?1.5:2;case"area":return 1;case"step":return 1.5;default:return 1}},er=(e,t,r)=>{if(t<0||r<0)return[t,r];let o=e.posToVal(t,"x"),i=e.data[0];if(!i||i.length===0)return[t,r];let n=0,a=0,s=i.length-1;for(;s-a>1;){let u=Math.floor((a+s)/2),b=i[u];b!=null&&b<o?a=u:s=u}let l=i[a],m=i[s];l!=null&&m!=null?n=Math.abs(l-o)<Math.abs(m-o)?a:s:l!=null?n=a:m!=null&&(n=s);let f=n;for(let u=n;u>=0;u--){let b=!1;for(let y=1;y<e.data.length;y++){let d=e.data[y];if(d&&d[u]!=null){b=!0;break}}if(b){f=u;break}}let g=i[f];return g==null?[t,r]:[e.valToPos(g,"x"),r]},tr=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),o=t.getPropertyValue("--ub-chart-grid-color").trim(),i=e.axes?.[0],n=e.axes?.[1];return i&&(i.stroke=r,i.grid?i.grid.stroke=o:i.grid={stroke:o}),n&&(n.stroke=r,n.grid?n.grid.stroke=o:n.grid={stroke:o}),e},rr=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),or=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),ir=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},nr=e=>e==="line"?void 0:[5,5],sr=(e,t)=>{if(t){let r=[];return t.forEach(o=>{let i={label:o.label,stroke:rr(e,o.level),width:ir(),dash:nr(o.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};ee(o)||r.push(i),r.push(i)}),r}else return[]},ar=(e,t,r,o)=>{if(!o||!o.some(n=>ae(n)))return t.bands;let i=o.map((n,a)=>ee(n)?null:{series:[e.length+a*2+1,e.length+a*2+2],fill:or(r,n.level),dir:1}).filter(n=>n!==null);return[...t.bands,...i]},lr=(e,t,r,o,i,n,a)=>{let s=Zt(t,o);return[{},...e.map((l,m)=>({label:l.metric,stroke:st(l,m,r,t,n),width:s,points:{show:!1},spanGaps:!0,paths:Yt(t),fill:o||i?Jt(l,m,r,t,n):void 0})),...sr(n,a)]},cr=e=>typeof e=="string"&&String(e).toLowerCase().trim()==="by"?"bytes":e,at=(e,t,r,o,i,n,a,s,l,m,f,g,h,u,b,y,d,v,T,x)=>{let p=window.getComputedStyle(e),C=p.fontFamily,P=e?.clientWidth??1050,R=e?.clientHeight??250,k=cr(o),L=(0,it.getValueFormat)(k==="1"?null:k),E=I=>{let M=L(I);return M.text+(M.suffix?.trim()||"")},Q={width:P,height:R,scales:{y:{range:lt(o,b,y)}},plugins:h?[]:[ot(E,a,t,m,f,i,T,x)],padding:g?[8,10,8,48]:[8,10,8,18],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:er,show:!v},series:lr(i,n,s,l,a,p,u),bands:ar(i,r,p,u),axes:[Xe(C,m,g,d),ct(L,C,d)],legend:{show:!1}};return tr(Q,p)};var ut=(e,t=4)=>{let r=e/t,o=Math.pow(10,Math.floor(Math.log10(r))),i=r/o,n;return i>5?n=10*o:i>2?n=5*o:i>1?n=2*o:n=o,Math.ceil(e/n)*n},S=(e,t)=>typeof e=="number"?e:t,lt=(e,t,r)=>(o,i,n)=>{if(i===0&&n===0)return[S(t,0),S(r,100)];let a=1,s=n*(1+a),l=i<0?i*(1+a):i*(1-a);if(e==="percent"||e==="percentunit"){let g=e==="percent"?100:1;return n>g?i<0?[S(t,l),S(r,s)]:[S(t,0),S(r,s)]:i<0?[S(t,l),S(r,g)]:[S(t,0),S(r,g)]}if(n<=.9999)return i<=0?[S(t,l),S(r,1)]:[S(t,0),S(r,1)];let m=ut(s),f=ut(Math.abs(l));return i<0?[S(r,-f),S(r,m)]:[S(t,0),S(r,m)]},ur=(e,t,r,o)=>{let i=e.axes[r];if(o>1)return i?._size||0;let n=(i?.ticks?.size||0)+(i?.gap||0),a=(t??[]).reduce((s,l)=>l.length>s.length?l:s,"");return a!=""&&(e.ctx.font=i?.font?.[0]??e.ctx.font,n+=e.ctx.measureText(a).width/devicePixelRatio),Math.ceil(n)};function ct(e,t,r){return{gap:0,font:K(t),labelFont:K(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(o,i)=>i.map(n=>{let a=e(n);return a.text+(a.suffix?.trim()||"")}),size:ur,space:(o,i,n,a,s)=>{let l=o.height;return l<=100?30:l<=150?35:l<=200?45:l<=250?55:l<=300?60:70},show:!r}}function pt(e,t){let r=[],o=e[0],i=o.length,n=Array(i).fill(0),a=[o];if(e.forEach((s,l)=>{l!==0&&(t?a.push(s):a.push(s.map((m,f)=>n[f]=n[f]+(m||0))))}),!t)for(let s=1;s<e.length-1;s++)r.push({series:[s+1,s]});return{data:a,bands:r.filter(s=>s.series[1]>-1)}}var dt=require("react/jsx-runtime");function pe(e){let{times:t,series:r,metadata:o,type:i,className:n,timeZone:a,options:s,tooltip:l,colors:m,tooltipComponent:f,unit:g,fill:h=!1,thresholds:u,min:b,max:y,hideAxis:d,hideCursor:v,relativeTimeAxis:T,invertSort:x}=e,{hide:p,visibilityLimit:C}=l||{},P=(0,ue.useRef)(null),R=O(),k=m||R.colors;return(0,ue.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let L=[t],E=g;r.forEach(w=>{let $=o[w.metric];g||(E=nt(E,$)),L.push(w.values)});let Q=i==="bar"||i==="area",I=pt(L,!Q);u&&u.forEach(w=>{ee(w)?I.data.push(new Array(t.length).fill(w.value)):ae(w)&&(I.data.push(new Array(t.length).fill(w.from)),I.data.push(new Array(t.length).fill(w.to)))});let M=P.current,J=null;if(M){let w=at(M,o,I,E,r,i,Q,k,h,a,f,T,p,u,b,y,d,v,C,x);J=new mt.default({...w,...s},I.data,M);let $=new ResizeObserver(()=>{J?.setSize({width:M.clientWidth,height:M.clientHeight})});return $.observe(M),()=>{J?.destroy(),$.disconnect()}}},[r,t,i,o,a,f,T,k,h,g,p,u,b,y,s,d,v]),(0,dt.jsx)("div",{ref:P,className:"ub-chart-container"+(n?` ${n}`:"")})}var B=require("react/jsx-runtime");function ht({metrics:e,operator:t,attributes:r,groupBy:o,interval:i,type:n="line",className:a,appearance:s,unit:l,thresholds:m,min:f,max:g,colors:h,tooltip:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,onResponse:T,invertSort:x}){let p=O(),C=i??p.interval,P=r??p.attributes,R=o??p.groupBy,k=t??p.operator,L=typeof v=="boolean"?v:p.relativeTimeAxis,E=h??p.colors,Q=typeof b=="boolean"?b:p.fill,I=typeof x=="boolean"?x:p.invertSort,M=typeof y=="boolean"?y:p.hideAxis,J=typeof d=="boolean"?d:p.hideCursor,w=s?.components?.Tooltip??p.appearance.components.Tooltip,$=(0,me.useMemo)(()=>({hide:u?.hide??p.tooltip?.hide,visibilityLimit:u?.visibilityLimit??p.tooltip?.visibilityLimit}),[u?.hide,p.tooltip?.hide,u?.visibilityLimit,p.tooltip?.visibilityLimit]),de=se({queries:(Array.isArray(e)?e:[e]).map(z=>({metrics:[z],operator:k,attributes:P,groupBy:R})),timeRange:p.timeRange,startTime:p.startTime,endTime:p.endTime,interval:C}),{isLoading:ft,data:gt,hasError:bt}=de,{series:Ne,times:yt,metadata:Tt}=gt,vt=Ne.every(z=>z.isEmpty),he=`ub-chart-container${a?` ${a}`:""}`;if((0,me.useEffect)(()=>{T&&T(de)},[de,T]),ft){let z=s?.components?.Loading??p.appearance.components.Loading;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(bt){let z=s?.components?.Error??p.appearance.components.Error;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(vt){let z=s?.components?.Empty??p.appearance.components.Empty;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}return(0,B.jsx)(pe,{times:yt,series:Ne,metadata:Tt,type:n,className:a,tooltip:$,colors:E,relativeTimeAxis:L,unit:l,fill:Q,tooltipComponent:w,thresholds:m,min:f,max:g,hideAxis:M,hideCursor:J,invertSort:I})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
2
2
  //# sourceMappingURL=index.js.map