@oneuptime/common 12.0.26 → 12.0.27

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 (27) hide show
  1. package/Tests/Types/API/HostnameAuthorityParsing.test.ts +1 -0
  2. package/Tests/Types/API/URLMailtoQueryString.test.ts +439 -0
  3. package/Tests/Types/API/URLQueryString.test.ts +33 -24
  4. package/Tests/Types/API/URLRouteQuerySeparation.test.ts +491 -0
  5. package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +393 -0
  6. package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +248 -0
  7. package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +205 -0
  8. package/Tests/UI/Components/UseHistogramZoom.test.tsx +262 -0
  9. package/Types/API/URL.ts +55 -18
  10. package/UI/Components/Charts/Utils/useHistogramZoom.ts +101 -0
  11. package/UI/Components/LogsViewer/LogsViewer.tsx +19 -3
  12. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +52 -1
  13. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +18 -2
  14. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +52 -1
  15. package/build/dist/Types/API/URL.js +48 -17
  16. package/build/dist/Types/API/URL.js.map +1 -1
  17. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +47 -0
  18. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -0
  19. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -3
  20. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  21. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +33 -5
  22. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  23. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +14 -2
  24. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  25. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +33 -5
  26. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  27. package/package.json +1 -1
@@ -66,6 +66,9 @@ import ProjectUtil from "../../Utils/Project";
66
66
  import TelemetryServiceUtil from "../../Utils/TelemetryService";
67
67
  import ObjectID from "../../../Types/ObjectID";
68
68
  import OneUptimeDate from "../../../Types/Date";
69
+ import useHistogramZoom, {
70
+ HistogramZoomState,
71
+ } from "../Charts/Utils/useHistogramZoom";
69
72
 
70
73
  export interface ComponentProps {
71
74
  logs: Array<Log>;
@@ -282,6 +285,18 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
282
285
  const [showKeyboardShortcuts, setShowKeyboardShortcuts] =
283
286
  useState<boolean>(false);
284
287
 
288
+ /*
289
+ * Drag-zooming the histogram is a one-way trip on its own: it swaps the
290
+ * window for a custom one and nothing remembers what the reader was
291
+ * looking at. This keeps that window so a double-click on the chart can
292
+ * hand it back.
293
+ */
294
+ const histogramZoom: HistogramZoomState = useHistogramZoom({
295
+ timeRange: props.timeRange,
296
+ onTimeRangeSelect: props.onHistogramTimeRangeSelect,
297
+ onTimeRangeChange: props.onTimeRangeChange,
298
+ });
299
+
285
300
  useEffect(() => {
286
301
  setFilterData(props.filterData);
287
302
  }, [props.filterData]);
@@ -1074,10 +1089,10 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
1074
1089
  exportLogs(displayedLogs, LogExportFormat.JSON, selectedColumns);
1075
1090
  },
1076
1091
  ...(props.liveOptions ? { liveOptions: props.liveOptions } : {}),
1077
- ...(props.timeRange && props.onTimeRangeChange
1092
+ ...(props.timeRange && histogramZoom.onTimeRangeChange
1078
1093
  ? {
1079
1094
  timeRange: props.timeRange,
1080
- onTimeRangeChange: props.onTimeRangeChange,
1095
+ onTimeRangeChange: histogramZoom.onTimeRangeChange,
1081
1096
  }
1082
1097
  : {}),
1083
1098
  showKeyboardShortcuts,
@@ -1130,7 +1145,8 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
1130
1145
  <LogsHistogram
1131
1146
  buckets={props.histogramBuckets}
1132
1147
  isLoading={props.histogramLoading || false}
1133
- onTimeRangeSelect={props.onHistogramTimeRangeSelect}
1148
+ onTimeRangeSelect={histogramZoom.onTimeRangeSelect}
1149
+ onZoomOut={histogramZoom.onZoomOut}
1134
1150
  />
1135
1151
  )}
1136
1152
 
@@ -1,6 +1,7 @@
1
1
  import React, {
2
2
  FunctionComponent,
3
3
  ReactElement,
4
+ useEffect,
4
5
  useMemo,
5
6
  useCallback,
6
7
  useRef,
@@ -29,6 +30,12 @@ export interface LogsHistogramProps {
29
30
  buckets: Array<HistogramBucket>;
30
31
  isLoading: boolean;
31
32
  onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
33
+ /*
34
+ * Set only while the chart is showing a window the reader dragged out of
35
+ * it. Double-clicking the chart then puts them back on the window they
36
+ * started from.
37
+ */
38
+ onZoomOut?: (() => void) | undefined;
32
39
  }
33
40
 
34
41
  interface PivotedRow {
@@ -86,6 +93,12 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
86
93
  const [selectionStart, setSelectionStart] = useState<string | null>(null);
87
94
  const [selectionEnd, setSelectionEnd] = useState<string | null>(null);
88
95
  const isSelecting: React.MutableRefObject<boolean> = useRef(false);
96
+ /*
97
+ * Mirrors isSelecting for rendering. The ref stays the authority so a
98
+ * mouseup handled twice (chart *and* window, below) cannot commit the same
99
+ * drag twice; the state is only here so the drag can change what is drawn.
100
+ */
101
+ const [isDragging, setIsDragging] = useState<boolean>(false);
89
102
 
90
103
  const pivotedData: Array<PivotedRow> = useMemo(() => {
91
104
  return pivotBuckets(props.buckets);
@@ -110,6 +123,7 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
110
123
  }
111
124
 
112
125
  isSelecting.current = true;
126
+ setIsDragging(true);
113
127
  setSelectionStart(e.activeLabel as string);
114
128
  setSelectionEnd(null);
115
129
  },
@@ -132,12 +146,14 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
132
146
  !props.onTimeRangeSelect
133
147
  ) {
134
148
  isSelecting.current = false;
149
+ setIsDragging(false);
135
150
  setSelectionStart(null);
136
151
  setSelectionEnd(null);
137
152
  return;
138
153
  }
139
154
 
140
155
  isSelecting.current = false;
156
+ setIsDragging(false);
141
157
 
142
158
  const start: Date = OneUptimeDate.fromString(selectionStart);
143
159
  const end: Date = OneUptimeDate.fromString(selectionEnd);
@@ -157,6 +173,28 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
157
173
  setSelectionEnd(null);
158
174
  }, [selectionStart, selectionEnd, props.onTimeRangeSelect]);
159
175
 
176
+ /*
177
+ * Readers routinely drag past the edge of a 120px-tall chart and let go
178
+ * outside it, where the chart's own mouseup never fires. Without this the
179
+ * drag would never end: the selection band would stay painted and the
180
+ * tooltip would stay suppressed until the next click.
181
+ */
182
+ useEffect(() => {
183
+ if (!isDragging) {
184
+ return undefined;
185
+ }
186
+
187
+ const finishDragOutsideChart: () => void = (): void => {
188
+ handleMouseUp();
189
+ };
190
+
191
+ window.addEventListener("mouseup", finishDragOutsideChart);
192
+
193
+ return () => {
194
+ window.removeEventListener("mouseup", finishDragOutsideChart);
195
+ };
196
+ }, [isDragging, handleMouseUp]);
197
+
160
198
  if (props.isLoading && pivotedData.length === 0) {
161
199
  return (
162
200
  <div className="flex h-32 items-center justify-center rounded-lg border border-gray-200 bg-white">
@@ -178,6 +216,11 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
178
216
  {props.onTimeRangeSelect && (
179
217
  <span className="text-[10px] text-gray-300">Drag to zoom</span>
180
218
  )}
219
+ {props.onZoomOut && (
220
+ <span className="text-[10px] text-gray-300">
221
+ Double-click to zoom out
222
+ </span>
223
+ )}
181
224
  </div>
182
225
  <div className="flex items-center gap-3">
183
226
  {activeSeverities.map((severity: string) => {
@@ -197,11 +240,12 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
197
240
 
198
241
  {/* Chart */}
199
242
  <div
200
- className="px-2 pb-1 pt-2"
243
+ className="select-none px-2 pb-1 pt-2"
201
244
  style={{
202
245
  height: 120,
203
246
  cursor: props.onTimeRangeSelect ? "crosshair" : "default",
204
247
  }}
248
+ onDoubleClick={props.onZoomOut}
205
249
  >
206
250
  <ResponsiveContainer width="100%" height="100%">
207
251
  <BarChart
@@ -237,9 +281,16 @@ const LogsHistogram: FunctionComponent<LogsHistogramProps> = (
237
281
  allowDecimals={false}
238
282
  tickFormatter={formatYAxisTick}
239
283
  />
284
+ {/*
285
+ * The tooltip is pinned shut for the length of a drag: it would
286
+ * otherwise sit over the very bars the reader is trying to read
287
+ * while they pick the range. Dropping the prop hands control back
288
+ * to recharts once the drag ends.
289
+ */}
240
290
  <Tooltip
241
291
  content={<HistogramTooltip />}
242
292
  cursor={{ fill: "rgba(99,102,241,0.06)" }}
293
+ {...(isDragging ? { active: false } : {})}
243
294
  />
244
295
  {activeSeverities.map((severity: string, index: number) => {
245
296
  const isLast: boolean = index === activeSeverities.length - 1;
@@ -21,6 +21,9 @@ import ComponentLoader from "../ComponentLoader/ComponentLoader";
21
21
  import ErrorMessage from "../ErrorMessage/ErrorMessage";
22
22
  import Icon from "../Icon/Icon";
23
23
  import IconProp from "../../../Types/Icon/IconProp";
24
+ import useHistogramZoom, {
25
+ HistogramZoomState,
26
+ } from "../Charts/Utils/useHistogramZoom";
24
27
 
25
28
  export interface TelemetryViewerProps<T> {
26
29
  // -- Data --
@@ -132,6 +135,18 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
132
135
 
133
136
  const showHistogram: boolean = props.showHistogram ?? true;
134
137
 
138
+ /*
139
+ * Drag-zooming the histogram is a one-way trip on its own: it swaps the
140
+ * window for a custom one and nothing remembers what the reader was
141
+ * looking at. This keeps that window so a double-click on the chart can
142
+ * hand it back.
143
+ */
144
+ const histogramZoom: HistogramZoomState = useHistogramZoom({
145
+ timeRange: props.timeRange,
146
+ onTimeRangeSelect: props.onHistogramTimeRangeSelect,
147
+ onTimeRangeChange: props.onTimeRangeChange,
148
+ });
149
+
135
150
  return (
136
151
  <div className="flex min-h-0 w-full flex-1 flex-col gap-3">
137
152
  {/* Toolbar */}
@@ -160,7 +175,7 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
160
175
 
161
176
  <TelemetryTimeRangePicker
162
177
  value={props.timeRange}
163
- onChange={props.onTimeRangeChange}
178
+ onChange={histogramZoom.onTimeRangeChange || props.onTimeRangeChange}
164
179
  />
165
180
 
166
181
  {props.live && (
@@ -231,7 +246,8 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
231
246
  isLoading={props.histogramLoading || false}
232
247
  series={props.histogramSeries}
233
248
  title={props.histogramTitle}
234
- onTimeRangeSelect={props.onHistogramTimeRangeSelect}
249
+ onTimeRangeSelect={histogramZoom.onTimeRangeSelect}
250
+ onZoomOut={histogramZoom.onZoomOut}
235
251
  headerActions={props.histogramHeaderActions}
236
252
  valueFormatter={props.histogramValueFormatter}
237
253
  />
@@ -2,6 +2,7 @@ import React, {
2
2
  FunctionComponent,
3
3
  ReactElement,
4
4
  ReactNode,
5
+ useEffect,
5
6
  useMemo,
6
7
  useCallback,
7
8
  useRef,
@@ -31,6 +32,12 @@ export interface TelemetryHistogramProps {
31
32
  series: Array<HistogramSeriesOption>;
32
33
  title?: string | undefined;
33
34
  onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
35
+ /*
36
+ * Set only while the chart is showing a window the reader dragged out of
37
+ * it. Double-clicking the chart then puts them back on the window they
38
+ * started from.
39
+ */
40
+ onZoomOut?: (() => void) | undefined;
34
41
  // Extra controls rendered in the chart header (e.g. a metric selector).
35
42
  headerActions?: ReactNode;
36
43
  // Formats Y-axis ticks and tooltip values (e.g. milliseconds → "1.2 s").
@@ -91,6 +98,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
91
98
  const [selectionStart, setSelectionStart] = useState<string | null>(null);
92
99
  const [selectionEnd, setSelectionEnd] = useState<string | null>(null);
93
100
  const isSelecting: React.MutableRefObject<boolean> = useRef(false);
101
+ /*
102
+ * Mirrors isSelecting for rendering. The ref stays the authority so a
103
+ * mouseup handled twice (chart *and* window, below) cannot commit the same
104
+ * drag twice; the state is only here so the drag can change what is drawn.
105
+ */
106
+ const [isDragging, setIsDragging] = useState<boolean>(false);
94
107
 
95
108
  const pivotedData: Array<PivotedRow> = useMemo(() => {
96
109
  return pivotBuckets(props.buckets);
@@ -123,6 +136,7 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
123
136
  }
124
137
 
125
138
  isSelecting.current = true;
139
+ setIsDragging(true);
126
140
  setSelectionStart(e.activeLabel as string);
127
141
  setSelectionEnd(null);
128
142
  },
@@ -145,12 +159,14 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
145
159
  !props.onTimeRangeSelect
146
160
  ) {
147
161
  isSelecting.current = false;
162
+ setIsDragging(false);
148
163
  setSelectionStart(null);
149
164
  setSelectionEnd(null);
150
165
  return;
151
166
  }
152
167
 
153
168
  isSelecting.current = false;
169
+ setIsDragging(false);
154
170
 
155
171
  const start: Date = OneUptimeDate.fromString(selectionStart);
156
172
  const end: Date = OneUptimeDate.fromString(selectionEnd);
@@ -170,6 +186,28 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
170
186
  setSelectionEnd(null);
171
187
  }, [selectionStart, selectionEnd, props.onTimeRangeSelect]);
172
188
 
189
+ /*
190
+ * Readers routinely drag past the edge of a 120px-tall chart and let go
191
+ * outside it, where the chart's own mouseup never fires. Without this the
192
+ * drag would never end: the selection band would stay painted and the
193
+ * tooltip would stay suppressed until the next click.
194
+ */
195
+ useEffect(() => {
196
+ if (!isDragging) {
197
+ return undefined;
198
+ }
199
+
200
+ const finishDragOutsideChart: () => void = (): void => {
201
+ handleMouseUp();
202
+ };
203
+
204
+ window.addEventListener("mouseup", finishDragOutsideChart);
205
+
206
+ return () => {
207
+ window.removeEventListener("mouseup", finishDragOutsideChart);
208
+ };
209
+ }, [isDragging, handleMouseUp]);
210
+
173
211
  if (props.isLoading && pivotedData.length === 0) {
174
212
  return (
175
213
  <div className="flex h-32 items-center justify-center rounded-lg border border-gray-200 bg-white">
@@ -197,6 +235,11 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
197
235
  {props.onTimeRangeSelect && (
198
236
  <span className="text-[10px] text-gray-300">Drag to zoom</span>
199
237
  )}
238
+ {props.onZoomOut && (
239
+ <span className="text-[10px] text-gray-300">
240
+ Double-click to zoom out
241
+ </span>
242
+ )}
200
243
  </div>
201
244
  <div className="flex items-center gap-3">
202
245
  {activeSeries.map((option: HistogramSeriesOption) => {
@@ -223,11 +266,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
223
266
 
224
267
  {pivotedData.length > 0 && (
225
268
  <div
226
- className="px-2 pb-1 pt-2"
269
+ className="select-none px-2 pb-1 pt-2"
227
270
  style={{
228
271
  height: 120,
229
272
  cursor: props.onTimeRangeSelect ? "crosshair" : "default",
230
273
  }}
274
+ onDoubleClick={props.onZoomOut}
231
275
  >
232
276
  <ResponsiveContainer width="100%" height="100%">
233
277
  <BarChart
@@ -263,6 +307,12 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
263
307
  allowDecimals={Boolean(props.valueFormatter)}
264
308
  tickFormatter={props.valueFormatter || formatYAxisTick}
265
309
  />
310
+ {/*
311
+ * The tooltip is pinned shut for the length of a drag: it would
312
+ * otherwise sit over the very bars the reader is trying to read
313
+ * while they pick the range. Dropping the prop hands control back
314
+ * to recharts once the drag ends.
315
+ */}
266
316
  <Tooltip
267
317
  content={
268
318
  <TelemetryHistogramTooltip
@@ -271,6 +321,7 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
271
321
  />
272
322
  }
273
323
  cursor={{ fill: "rgba(99,102,241,0.06)" }}
324
+ {...(isDragging ? { active: false } : {})}
274
325
  />
275
326
  {activeSeries.map(
276
327
  (option: HistogramSeriesOption, index: number) => {
@@ -222,21 +222,30 @@ export default class URL extends DatabaseProperty {
222
222
  return `${this.protocol}${this.opaqueValue}${this.queryStringSuffix()}`;
223
223
  }
224
224
  let urlString = `${this.protocol}${this.hostname || this.email}`;
225
- if (!this.email && !urlString.startsWith("mailto:")) {
226
- if (this.route && this.route.toString().startsWith("/")) {
227
- if (urlString.endsWith("/")) {
228
- urlString = urlString.substring(0, urlString.length - 1);
229
- }
230
- urlString += this.route.toString();
225
+ /*
226
+ * mailto: has no authority to trim and no route to append, so it skips the
227
+ * branch below — but it CAN carry a query, and "?subject=...&body=..." is
228
+ * the whole point of a prefilled mail link. The suffix used to be appended
229
+ * inside that branch, so skipping the route silently dropped the subject
230
+ * and body too, and the link opened on an empty draft. It returns here
231
+ * with the suffix attached instead, the way the opaque branch above does.
232
+ */
233
+ if (this.email || urlString.startsWith("mailto:")) {
234
+ return urlString + this.queryStringSuffix();
235
+ }
236
+ if (this.route && this.route.toString().startsWith("/")) {
237
+ if (urlString.endsWith("/")) {
238
+ urlString = urlString.substring(0, urlString.length - 1);
231
239
  }
232
- else {
233
- if (urlString.endsWith("/")) {
234
- urlString = urlString.substring(0, urlString.length - 1);
235
- }
236
- urlString += "/" + this.route.toString();
240
+ urlString += this.route.toString();
241
+ }
242
+ else {
243
+ if (urlString.endsWith("/")) {
244
+ urlString = urlString.substring(0, urlString.length - 1);
237
245
  }
238
- urlString += this.queryStringSuffix();
246
+ urlString += "/" + this.route.toString();
239
247
  }
248
+ urlString += this.queryStringSuffix();
240
249
  return urlString;
241
250
  }
242
251
  static fromURL(url) {
@@ -332,6 +341,19 @@ export default class URL extends DatabaseProperty {
332
341
  const opaqueQueryString = URL.queryStringOf(url);
333
342
  return new URL(protocol, number, undefined, opaqueQueryString);
334
343
  }
344
+ /*
345
+ * The query and the fragment come off BEFORE the authority and the route
346
+ * are read off the string.
347
+ *
348
+ * Splitting on "/" first meant a "/" inside a QUERY VALUE was read as a
349
+ * path segment whenever the URL had no path of its own:
350
+ * "https://example.com?next=/a/b" parsed to a route of "a/b" and went back
351
+ * out as "https://example.com/a/b?next=/a/b" — a path nobody wrote, on a
352
+ * request the workflow API components dispatch verbatim. The authority was
353
+ * already cut at "?"/"#" and is unchanged by this, so the host stays the
354
+ * one the SSRF check upstream resolved; what moved was the path.
355
+ */
356
+ const beforeQuery = url.split("?")[0] || "";
335
357
  /*
336
358
  * The authority ends at the first "/", "?" or "#". Splitting on "/" alone
337
359
  * left the query and fragment glued to the host for URLs with no path
@@ -339,13 +361,22 @@ export default class URL extends DatabaseProperty {
339
361
  * round-tripped wrong and handed anything that later interpolated the
340
362
  * host a way to smuggle a path.
341
363
  */
342
- const authority = (url.split("/")[0] || "").split(/[?#]/)[0] || "";
364
+ const authorityAndPath = beforeQuery.split("#")[0] || "";
365
+ /*
366
+ * A fragment is not a field on this type. It rides on the end of the route
367
+ * — which is where it has always ended up, because the route was cut at
368
+ * "?" and never at "#" — so "…/docs#section" keeps round-tripping instead
369
+ * of losing its "#section" to this change.
370
+ */
371
+ const fragment = beforeQuery.substring(authorityAndPath.length);
372
+ const authority = authorityAndPath.split("/")[0] || "";
343
373
  const hostname = new Hostname(authority);
344
374
  let route;
345
- if (url.split("/").length > 1) {
346
- const paths = url.split("/");
347
- paths.shift();
348
- route = new Route(paths.join("/").split("?")[0]);
375
+ const pathSegments = authorityAndPath.split("/");
376
+ pathSegments.shift(); // drop the authority; what is left is the path
377
+ const path = pathSegments.join("/");
378
+ if (path || fragment) {
379
+ route = new Route(path + fragment);
349
380
  }
350
381
  const queryString = URL.queryStringOf(url);
351
382
  return new URL(protocol, hostname, route, queryString);
@@ -1 +1 @@
1
- {"version":3,"file":"URL.js","sourceRoot":"","sources":["../../../../Types/API/URL.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"URL.js","sourceRoot":"","sources":["../../../../Types/API/URL.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAE5D,OAAO,KAAK,MAAM,UAAU,CAAC;AAC7B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAc,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,gBAAgB,GAAoB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEvE;;;;;;;;;GASG;AACH,MAAM,oBAAoB,GAAW,kCAAkC,CAAC;AAExE;;;GAGG;AACH,MAAM,eAAe,GACnB,gDAAgD,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,gBAAgB;IAE/C,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAW,KAAK,CAAC,CAAQ;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAGD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAW,MAAM,CAAC,CAAqB;QACrC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAGD,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAW,KAAK,CAAC,CAAQ;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAGD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,CAAW;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAGD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAW,QAAQ,CAAC,CAAW;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAOD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,IAAW,WAAW,CAAC,CAAS;QAC9B,MAAM,KAAK,GAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAgB,CACxB,eAAe,GAAG,CAAC,GAAG,0BAA0B,CACjD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IASM,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAIM,MAAM,CAAC,gBAAgB,CAAC,QAAkB;QAC/C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAa;QAC5C,MAAM,OAAO,GAAW,KAAK,CAAC,IAAI,EAAE,CAAC;QAErC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAkB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtD,MAAM,kBAAkB,GAAY,OAAO,CAAC,KAAK,CAAC,CAAC,MAAc,EAAE,EAAE;YACnE,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAa,EAAE,EAAE;YACpC,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YACE,QAAkB,EAClB,QAAmC,EACnC,KAAa,EACb,WAAoB;QAEpB,KAAK,EAAE,CAAC;QAnHF,WAAM,GAAU,IAAI,KAAK,EAAE,CAAC;QAQ5B,YAAO,GAAuB,EAAE,CAAC;QAwBjC,cAAS,GAAa,QAAQ,CAAC,KAAK,CAAC;QAQ7C;;;WAGG;QACK,iBAAY,GAAW,EAAE,CAAC;QAgBlC;;;;;WAKG;QACK,iBAAY,GAAY,KAAK,CAAC;QAK9B,cAAS,GAAW,EAAE,CAAC;QA8C7B;;;;WAIG;QACH,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,WAAW;gBACd,QAAQ,YAAY,QAAQ,IAAI,QAAQ,YAAY,KAAK;oBACvD,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBACrB,CAAC,CAAE,QAAmB,CAAC;YAC3B,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IACE,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM;YACjC,KAAK,CAAC,OAAO,CAAC,QAAkB,CAAC,EACjC,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,QAAkB,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CAAC,GAAW;QACtC,MAAM,cAAc,GAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,WAAoB;QACnD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAkB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,cAAc,GAAW,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAErD;;;;;eAKG;YACH,MAAM,GAAG,GACP,cAAc,KAAK,CAAC,CAAC;gBACnB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBACf,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC;IAC1C,CAAC;IAEO,iBAAiB;QACvB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,CACL,GAAG;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBACrB,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE;gBACnB;;;;mBAIG;gBACH,MAAM,KAAK,GAAuB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACzC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;IACJ,CAAC;IAEe,QAAQ;QACtB;;;WAGG;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC1E,CAAC;QAED,IAAI,SAAS,GAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAEzE;;;;;;;WAOG;QACH,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,OAAO,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC;QAED,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,GAAQ;QAC5B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACK,MAAM,CAAC,uBAAuB,CAAC,GAAW;QAChD,MAAM,WAAW,GAA4B,GAAG;aAC7C,IAAI,EAAE;aACN,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE/C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAW,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,kBAAkB,GAAY,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,MAAM,mBAAmB,GAAY;YACnC,YAAY;YACZ,MAAM;YACN,UAAU;YACV,MAAM;YACN,MAAM;SACP,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnB,IAAI,kBAAkB,IAAI,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,gBAAgB,CACxB,aAAa,GAAG,MAAM,GAAG,qBAAqB,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,GAAW;QAClC,IAAI,QAAQ,GAAa,QAAQ,CAAC,KAAK,CAAC;QAExC;;;;;;;WAOG;QACH,MAAM,cAAc,GAA8B;YAChD,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;YAC5B,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;YAC1B,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;YACxB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACtB,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC;YACjC,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;YAC1B,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;YACtB,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;SACvB,CAAC;QAEF,MAAM,aAAa,GAAW,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,kBAAkB,GAAY,KAAK,CAAC;QAExC,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,cAAc,CAAC;gBAC1B,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnC,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B;;;;eAIG;YACH,MAAM,OAAO,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,eAAe,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAEvD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC;;;;eAIG;YACH,MAAM,MAAM,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAEzD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED;;;;;;;;;;;WAWG;QACH,MAAM,WAAW,GAAW,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD;;;;;;WAMG;QACH,MAAM,gBAAgB,GAAW,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjE;;;;;WAKG;QACH,MAAM,QAAQ,GAAW,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAExE,MAAM,SAAS,GAAW,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/D,MAAM,QAAQ,GAAa,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,KAAwB,CAAC;QAE7B,MAAM,YAAY,GAAkB,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,+CAA+C;QACrE,MAAM,IAAI,GAAW,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,WAAW,GAAW,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEnD,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,iBAAiB,CAAC,GAAW;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,QAAgB;QAC7C;;;;;;WAMG;QACH,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC/B,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;QACxB,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,iBAAiB;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEe,MAAM;QACpB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,GAAG;YACrB,KAAK,EAAG,IAAY,CAAC,QAAQ,EAAE;SAChC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAU,QAAQ,CAAC,IAAgB;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,GAAG,CAAC,iBAAiB,CAAE,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,QAAQ,CAAC,KAAqB;QACnC,IAAI,OAAO,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,aAAa,CAClB,SAAiB,EACjB,KAAa,EACb,MAA4B;QAE5B,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,aAAa,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAEM,cAAc,CAAC,MAA0B;QAC9C,IAAI,CAAC,MAAM,mCACN,IAAI,CAAC,MAAM,GACX,MAAM,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,YAAY,CAAC,gBAAyB;QAC3C,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACO,MAAM,CAAU,UAAU,CAClC,KAA8B;QAE9B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChD,MAAM,IAAI,gBAAgB,CACxB,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,0BAA0B,CACvD,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,MAAM,CAAU,YAAY,CAAC,MAAc;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import { useCallback, useState } from "react";
2
+ /**
3
+ * Remembers the window a reader was on before they dragged a zoom out of the
4
+ * histogram, so a double-click can put them back on it.
5
+ *
6
+ * Only the *first* zoom is remembered: after drilling from "past one hour"
7
+ * into a minute and then into ten seconds, one double-click returns the whole
8
+ * hour rather than making the reader climb back out a level at a time. Any
9
+ * time range picked by other means — the toolbar picker, a saved view — is
10
+ * the reader choosing a new starting point, so it forgets what it held and
11
+ * the zoom-out affordance goes away until the next drag.
12
+ */
13
+ const useHistogramZoom = (options) => {
14
+ const [rangeBeforeZoom, setRangeBeforeZoom] = useState(null);
15
+ const timeRange = options.timeRange;
16
+ const onTimeRangeSelect = options.onTimeRangeSelect;
17
+ const onTimeRangeChange = options.onTimeRangeChange;
18
+ const handleTimeRangeSelect = useCallback((startTime, endTime) => {
19
+ if (!onTimeRangeSelect) {
20
+ return;
21
+ }
22
+ if (timeRange) {
23
+ setRangeBeforeZoom((current) => {
24
+ return current || timeRange;
25
+ });
26
+ }
27
+ onTimeRangeSelect(startTime, endTime);
28
+ }, [onTimeRangeSelect, timeRange]);
29
+ const handleZoomOut = useCallback(() => {
30
+ if (!rangeBeforeZoom || !onTimeRangeChange) {
31
+ return;
32
+ }
33
+ setRangeBeforeZoom(null);
34
+ onTimeRangeChange(rangeBeforeZoom);
35
+ }, [rangeBeforeZoom, onTimeRangeChange]);
36
+ const handleTimeRangeChange = useCallback((nextTimeRange) => {
37
+ setRangeBeforeZoom(null);
38
+ onTimeRangeChange === null || onTimeRangeChange === void 0 ? void 0 : onTimeRangeChange(nextTimeRange);
39
+ }, [onTimeRangeChange]);
40
+ return {
41
+ onTimeRangeSelect: onTimeRangeSelect ? handleTimeRangeSelect : undefined,
42
+ onZoomOut: rangeBeforeZoom && onTimeRangeChange ? handleZoomOut : undefined,
43
+ onTimeRangeChange: onTimeRangeChange ? handleTimeRangeChange : undefined,
44
+ };
45
+ };
46
+ export default useHistogramZoom;
47
+ //# sourceMappingURL=useHistogramZoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistogramZoom.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Utils/useHistogramZoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgC9C;;;;;;;;;;GAUG;AACH,MAAM,gBAAgB,GAA6B,CACjD,OAA6B,EACT,EAAE;IACtB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GACzC,QAAQ,CAAkC,IAAI,CAAC,CAAC;IAElD,MAAM,SAAS,GAAyC,OAAO,CAAC,SAAS,CAAC;IAC1E,MAAM,iBAAiB,GAEP,OAAO,CAAC,iBAAiB,CAAC;IAC1C,MAAM,iBAAiB,GAEP,OAAO,CAAC,iBAAiB,CAAC;IAE1C,MAAM,qBAAqB,GACzB,WAAW,CACT,CAAC,SAAe,EAAE,OAAa,EAAQ,EAAE;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,kBAAkB,CAAC,CAAC,OAAwC,EAAE,EAAE;gBAC9D,OAAO,OAAO,IAAI,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAC/B,CAAC;IAEJ,MAAM,aAAa,GAAe,WAAW,CAAC,GAAS,EAAE;QACvD,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzC,MAAM,qBAAqB,GACzB,WAAW,CACT,CAAC,aAAuC,EAAQ,EAAE;QAChD,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,aAAa,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEJ,OAAO;QACL,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QACxE,SAAS,EAAE,eAAe,IAAI,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC3E,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;KACzE,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -29,6 +29,7 @@ import { exportLogs, LogExportFormat } from "../../Utils/LogExport";
29
29
  import ProjectUtil from "../../Utils/Project";
30
30
  import TelemetryServiceUtil from "../../Utils/TelemetryService";
31
31
  import OneUptimeDate from "../../../Types/Date";
32
+ import useHistogramZoom from "../Charts/Utils/useHistogramZoom";
32
33
  const DEFAULT_PAGE_SIZE = 100;
33
34
  const PAGE_SIZE_OPTIONS = [100, 250, 500, 1000];
34
35
  const severityWeight = {
@@ -106,6 +107,17 @@ const LogsViewer = (props) => {
106
107
  const [internalSelectedColumns, setInternalSelectedColumns] = useState(DEFAULT_LOGS_TABLE_COLUMNS);
107
108
  const [internalViewMode, setInternalViewMode] = useState("list");
108
109
  const [showKeyboardShortcuts, setShowKeyboardShortcuts] = useState(false);
110
+ /*
111
+ * Drag-zooming the histogram is a one-way trip on its own: it swaps the
112
+ * window for a custom one and nothing remembers what the reader was
113
+ * looking at. This keeps that window so a double-click on the chart can
114
+ * hand it back.
115
+ */
116
+ const histogramZoom = useHistogramZoom({
117
+ timeRange: props.timeRange,
118
+ onTimeRangeSelect: props.onHistogramTimeRangeSelect,
119
+ onTimeRangeChange: props.onTimeRangeChange,
120
+ });
109
121
  useEffect(() => {
110
122
  setFilterData(props.filterData);
111
123
  }, [props.filterData]);
@@ -694,10 +706,10 @@ const LogsViewer = (props) => {
694
706
  exportLogs(displayedLogs, LogExportFormat.CSV, selectedColumns);
695
707
  }, onExportJSON: () => {
696
708
  exportLogs(displayedLogs, LogExportFormat.JSON, selectedColumns);
697
- } }), (props.liveOptions ? { liveOptions: props.liveOptions } : {})), (props.timeRange && props.onTimeRangeChange
709
+ } }), (props.liveOptions ? { liveOptions: props.liveOptions } : {})), (props.timeRange && histogramZoom.onTimeRangeChange
698
710
  ? {
699
711
  timeRange: props.timeRange,
700
- onTimeRangeChange: props.onTimeRangeChange,
712
+ onTimeRangeChange: histogramZoom.onTimeRangeChange,
701
713
  }
702
714
  : {})), { showKeyboardShortcuts, onToggleKeyboardShortcuts: () => {
703
715
  setShowKeyboardShortcuts((prev) => {
@@ -713,7 +725,7 @@ const LogsViewer = (props) => {
713
725
  ...(props.baseActiveFilters || []),
714
726
  ...enrichedActiveFilters,
715
727
  ], onRemove: props.onRemoveFilter || (() => { }), onClearAll: props.onClearAllFilters || (() => { }) })),
716
- props.histogramBuckets && (React.createElement(LogsHistogram, { buckets: props.histogramBuckets, isLoading: props.histogramLoading || false, onTimeRangeSelect: props.onHistogramTimeRangeSelect })),
728
+ props.histogramBuckets && (React.createElement(LogsHistogram, { buckets: props.histogramBuckets, isLoading: props.histogramLoading || false, onTimeRangeSelect: histogramZoom.onTimeRangeSelect, onZoomOut: histogramZoom.onZoomOut })),
717
729
  currentViewMode === "analytics" ? (React.createElement(LogsAnalyticsView, { timeRange: props.timeRange || { range: TimeRange.PAST_ONE_HOUR }, serviceIds: props.analyticsServiceIds, sessionIds: props.analyticsSessionIds, appliedFacetFilters: props.analyticsAppliedFacetFilters || new Map(), logAttributes: logAttributes })) : (React.createElement("div", { className: "flex gap-3" },
718
730
  showSidebar && props.facetData && (React.createElement(LogsFacetSidebar, { facetData: props.facetData, isLoading: props.facetLoading || false, serviceMap: serviceMap, hostMap: hostMap, dockerHostMap: dockerHostMap, podmanHostMap: podmanHostMap, kubernetesClusterMap: kubernetesClusterMap, onIncludeFilter: props.onFacetInclude || (() => { }), onExcludeFilter: props.onFacetExclude || (() => { }), activeFilters: props.activeFilters, savedViews: props.savedViews, selectedSavedViewId: props.selectedSavedViewId, onSavedViewSelect: props.onSavedViewSelect, onClearSavedView: props.onClearSavedView, onFacetSearchChange: props.onFacetSearchChange })),
719
731
  React.createElement("div", { className: "min-w-0 flex-1" },