@mastra/playground-ui 34.1.0-alpha.3 → 35.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/dist/{code-block-CcVa6fM8.cjs → code-block-C4Zp_ewI.cjs} +18 -7
  3. package/dist/code-block-C4Zp_ewI.cjs.map +1 -0
  4. package/dist/{code-block-DPy5IAR8.js → code-block-CnRVTecy.js} +18 -7
  5. package/dist/code-block-CnRVTecy.js.map +1 -0
  6. package/dist/components/CodeBlock.cjs.js +1 -1
  7. package/dist/components/CodeBlock.es.js +1 -1
  8. package/dist/components/DateTimePicker.cjs.js +1 -1
  9. package/dist/components/DateTimePicker.es.js +1 -1
  10. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  11. package/dist/components/DateTimeRangePicker.es.js +1 -1
  12. package/dist/components/MainSidebar.cjs.js +1 -1
  13. package/dist/components/MainSidebar.es.js +1 -1
  14. package/dist/components/Popover.cjs.js +1 -1
  15. package/dist/components/Popover.es.js +1 -1
  16. package/dist/components/PropertyFilter.cjs.js +1 -1
  17. package/dist/components/PropertyFilter.es.js +1 -1
  18. package/dist/components/Tabs.cjs.js +1 -1
  19. package/dist/components/Tabs.es.js +1 -1
  20. package/dist/{date-time-picker-t67keTZg.js → date-time-picker-BKSdFrHR.js} +2 -2
  21. package/dist/{date-time-picker-t67keTZg.js.map → date-time-picker-BKSdFrHR.js.map} +1 -1
  22. package/dist/{date-time-picker-BKqGpw5w.cjs → date-time-picker-Bjr6V3AR.cjs} +2 -2
  23. package/dist/{date-time-picker-BKqGpw5w.cjs.map → date-time-picker-Bjr6V3AR.cjs.map} +1 -1
  24. package/dist/{date-time-range-picker-iMvwOfiZ.js → date-time-range-picker-DKvS9c4j.js} +2 -2
  25. package/dist/{date-time-range-picker-iMvwOfiZ.js.map → date-time-range-picker-DKvS9c4j.js.map} +1 -1
  26. package/dist/{date-time-range-picker-Do-3VVvo.cjs → date-time-range-picker-DjcVeD-Z.cjs} +2 -2
  27. package/dist/{date-time-range-picker-Do-3VVvo.cjs.map → date-time-range-picker-DjcVeD-Z.cjs.map} +1 -1
  28. package/dist/index.cjs.js +344 -26
  29. package/dist/index.cjs.js.map +1 -1
  30. package/dist/index.css +114 -26
  31. package/dist/index.es.js +349 -32
  32. package/dist/index.es.js.map +1 -1
  33. package/dist/{main-sidebar-Bk2U9O57.js → main-sidebar-1GVDTtcD.js} +16 -33
  34. package/dist/main-sidebar-1GVDTtcD.js.map +1 -0
  35. package/dist/{main-sidebar-CWoM-yrH.cjs → main-sidebar-Djs_3tGw.cjs} +16 -33
  36. package/dist/main-sidebar-Djs_3tGw.cjs.map +1 -0
  37. package/dist/{popover-ttQgAb0m.cjs → popover-B8RFw-D-.cjs} +12 -2
  38. package/dist/popover-B8RFw-D-.cjs.map +1 -0
  39. package/dist/{popover-CRLP2Ay_.js → popover-C65fxQ7m.js} +12 -2
  40. package/dist/popover-C65fxQ7m.js.map +1 -0
  41. package/dist/{property-filter-creator-CnuA0Otn.js → property-filter-creator-B9tK0VY3.js} +2 -2
  42. package/dist/{property-filter-creator-CnuA0Otn.js.map → property-filter-creator-B9tK0VY3.js.map} +1 -1
  43. package/dist/{property-filter-creator-Cl7xhaML.cjs → property-filter-creator-DU8pl6-6.cjs} +2 -2
  44. package/dist/{property-filter-creator-Cl7xhaML.cjs.map → property-filter-creator-DU8pl6-6.cjs.map} +1 -1
  45. package/dist/src/ds/components/CodeBlock/code-block.d.ts +3 -1
  46. package/dist/src/ds/components/Popover/popover.d.ts +1 -1
  47. package/dist/src/hooks/use-is-mobile.d.ts +1 -0
  48. package/dist/src/index.d.ts +4 -1
  49. package/dist/src/lib/resize/collapsible-panel.d.ts +1 -1
  50. package/dist/src/lib/resize/panel-drawer.d.ts +8 -0
  51. package/dist/src/lib/resize/panel-edge-icon.d.ts +4 -0
  52. package/dist/src/lib/resize/panel-icon-button.d.ts +1 -0
  53. package/dist/src/lib/resize/use-clamped-element-cursor.d.ts +16 -0
  54. package/dist/{tabs-tab-Cjv_3xGC.js → tabs-tab-Bv9aRRTl.js} +15 -15
  55. package/dist/tabs-tab-Bv9aRRTl.js.map +1 -0
  56. package/dist/{tabs-tab-Dl9FqQhm.cjs → tabs-tab-CulV7e_n.cjs} +15 -15
  57. package/dist/tabs-tab-CulV7e_n.cjs.map +1 -0
  58. package/package.json +7 -7
  59. package/dist/code-block-CcVa6fM8.cjs.map +0 -1
  60. package/dist/code-block-DPy5IAR8.js.map +0 -1
  61. package/dist/main-sidebar-Bk2U9O57.js.map +0 -1
  62. package/dist/main-sidebar-CWoM-yrH.cjs.map +0 -1
  63. package/dist/popover-CRLP2Ay_.js.map +0 -1
  64. package/dist/popover-ttQgAb0m.cjs.map +0 -1
  65. package/dist/src/hooks/index.d.ts +0 -3
  66. package/dist/src/lib/resize/index.d.ts +0 -2
  67. package/dist/tabs-tab-Cjv_3xGC.js.map +0 -1
  68. package/dist/tabs-tab-Dl9FqQhm.cjs.map +0 -1
package/dist/index.es.js CHANGED
@@ -23,11 +23,12 @@ export { M as MultiCombobox, c as comboboxStyles } from './multi-combobox-Y3gT0M
23
23
  export { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';
24
24
  export { C as Command, a as CommandDialog, b as CommandEmpty, c as CommandGroup, d as CommandInput, e as CommandItem, f as CommandList, g as CommandSeparator, h as CommandShortcut } from './command-DPEUOKZw.js';
25
25
  export { C as Code } from './code-C5KVVzOZ.js';
26
- export { C as CodeBlock } from './code-block-DPy5IAR8.js';
26
+ export { C as CodeBlock } from './code-block-CnRVTecy.js';
27
27
  import { C as CopyButton } from './copy-button-BfiqaCtC.js';
28
28
  export { D as DashboardCard } from './dashboard-card-C7nmBU5A.js';
29
29
  export { D as Dialog, a as DialogBody, b as DialogClose, c as DialogContent, d as DialogDescription, e as DialogFooter, f as DialogHeader, g as DialogOverlay, h as DialogPortal, i as DialogTitle, j as DialogTrigger } from './dialog-CSSfcjSX.js';
30
- export { D as Drawer, a as DrawerBackdrop, b as DrawerBody, c as DrawerClose, d as DrawerContent, e as DrawerDescription, f as DrawerFooter, g as DrawerHeader, h as DrawerIndent, i as DrawerIndentBackground, j as DrawerInteractive, k as DrawerPopup, l as DrawerPortal, m as DrawerProvider, n as DrawerSwipeArea, o as DrawerTitle, p as DrawerTrigger, q as DrawerViewport, r as createDrawerHandle, u as useDrawerSide } from './drawer-kUj-H7_u.js';
30
+ import { D as Drawer, p as DrawerTrigger, l as DrawerPortal, a as DrawerBackdrop, q as DrawerViewport, k as DrawerPopup, o as DrawerTitle } from './drawer-kUj-H7_u.js';
31
+ export { b as DrawerBody, c as DrawerClose, d as DrawerContent, e as DrawerDescription, f as DrawerFooter, g as DrawerHeader, h as DrawerIndent, i as DrawerIndentBackground, j as DrawerInteractive, m as DrawerProvider, n as DrawerSwipeArea, r as createDrawerHandle, u as useDrawerSide } from './drawer-kUj-H7_u.js';
31
32
  import { D as DropdownMenu } from './dropdown-menu-Dh-CMMjl.js';
32
33
  export { E as Entry } from './entry-B53NXi9c.js';
33
34
  export { E as EntityHeader } from './entity-header-CpClAdJT.js';
@@ -44,9 +45,9 @@ export { L as Label } from './label-Dgz2hRMg.js';
44
45
  export { M as MarkdownRenderer } from './markdown-renderer-BYSrmn0E.js';
45
46
  import { M as MetricsCard } from './metrics-card-Bk3X19xx.js';
46
47
  export { M as MetricsFlexGrid } from './metrics-flex-grid-BqtZ5emh.js';
47
- export { H as HoverPopover, P as Popover, a as PopoverContent, b as PopoverTrigger } from './popover-CRLP2Ay_.js';
48
- import { b as PropertyFilterApplied, a as PropertyFilterActions } from './property-filter-creator-CnuA0Otn.js';
49
- export { P as PickMultiPanel, c as PropertyFilterCreator } from './property-filter-creator-CnuA0Otn.js';
48
+ export { H as HoverPopover, P as Popover, a as PopoverContent, b as PopoverTrigger } from './popover-C65fxQ7m.js';
49
+ import { b as PropertyFilterApplied, a as PropertyFilterActions } from './property-filter-creator-B9tK0VY3.js';
50
+ export { P as PickMultiPanel, c as PropertyFilterCreator } from './property-filter-creator-B9tK0VY3.js';
50
51
  export { R as RadioGroup, a as RadioGroupItem } from './radio-group-DIbajvIk.js';
51
52
  export { S as ScrollArea, a as ScrollBar, u as useAutoscroll } from './scroll-area-BtDqmqBK.js';
52
53
  export { P as PendingIndicator } from './pending-indicator-DmowRHLo.js';
@@ -69,17 +70,17 @@ export { a as ButtonsGroupSeparator, b as ButtonsGroupText, c as buttonsGroupVar
69
70
  export { M as MainContentContent, a as MainContentLayout, g as getMainContentContentClassName } from './main-content-CR0j00N1.js';
70
71
  export { M as MainHeader } from './main-header-Bp0d1TMi.js';
71
72
  export { S as Sections } from './sections-SdJxf4JD.js';
72
- export { D as DateTimePicker, a as DateTimePickerContent, b as DefaultTrigger } from './date-time-picker-t67keTZg.js';
73
+ export { D as DateTimePicker, a as DateTimePickerContent, b as DefaultTrigger } from './date-time-picker-BKSdFrHR.js';
73
74
  export { D as DatePicker, T as TimePicker } from './time-picker-BtJz6IU2.js';
74
75
  export { AddField, Field, FieldDescription, FieldList, FieldName, FieldNullable, FieldOptional, FieldRemove, FieldType, JSONSchemaForm, NestedFields, Root, createField, fieldsToJSONSchema, jsonSchemaToFields, useJSONSchemaForm, useJSONSchemaFormField, useJSONSchemaFormNestedContext } from './components/JSONSchemaForm.es.js';
75
76
  export { K as KeyValueList } from './key-value-list-BFGuMFbL.js';
76
- import { R as ResizeHandleIndicator } from './main-sidebar-Bk2U9O57.js';
77
- export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from './main-sidebar-Bk2U9O57.js';
77
+ import { R as ResizeHandleIndicator } from './main-sidebar-1GVDTtcD.js';
78
+ export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from './main-sidebar-1GVDTtcD.js';
78
79
  export { P as PageHeader } from './page-header-BS_LNnKw.js';
79
80
  export { S as Section, a as SectionRoot, b as SubSectionRoot } from './section-BUngbrvn.js';
80
81
  export { C as CardHeading, S as SectionCard } from './section-card-BMArnkcD.js';
81
82
  export { P as ProcessStepList, a as ProcessStepListItem, b as ProcessStepProgressBar, g as getStatusIcon } from './process-step-progress-bar-C0mArMKD.js';
82
- import { b as Tabs, a as TabList, T as Tab } from './tabs-tab-Cjv_3xGC.js';
83
+ import { b as Tabs, a as TabList, T as Tab } from './tabs-tab-Bv9aRRTl.js';
83
84
  import { T as TabContent } from './tabs-content-D-fKCtLW.js';
84
85
  export { T as TextAndIcon, g as getShortId } from './get-short-id-B4_2mLzM.js';
85
86
  export { C as ContentBlock, a as ContentBlocks } from './content-block-BTpK7gPz.js';
@@ -105,7 +106,7 @@ export { D as DataCodeSection } from './data-code-section-MygZlpwo.js';
105
106
  import { DataDetailsPanel } from './components/DataDetailsPanel.es.js';
106
107
  import { D as DataKeysAndValues } from './data-keys-and-values-BSeQG7jb.js';
107
108
  import { D as DataPanel } from './data-panel-DumaHQiP.js';
108
- import { D as DateTimeRangePicker } from './date-time-range-picker-iMvwOfiZ.js';
109
+ import { D as DateTimeRangePicker } from './date-time-range-picker-DKvS9c4j.js';
109
110
  import { H as HorizontalBars } from './horizontal-bars-DjLETHvH.js';
110
111
  import { M as MetricsDataTable } from './metrics-data-table-DryqJWoI.js';
111
112
  import { M as MetricsLineChart } from './metrics-line-chart-BUUqDQPW.js';
@@ -120,14 +121,14 @@ export { f as focusRing, h as hoverEffects, t as transitions } from './transitio
120
121
  import { t as toast } from './use-copy-to-clipboard-CGqfkXnN.js';
121
122
  export { T as Toaster, u as useCopyToClipboard } from './use-copy-to-clipboard-CGqfkXnN.js';
122
123
  import * as React from 'react';
123
- import { useState, useCallback, useMemo, useContext, createContext, useRef, useEffect, Fragment as Fragment$1 } from 'react';
124
+ import { useState, useCallback, useMemo, useLayoutEffect, useRef, useEffect, useContext, createContext, Fragment as Fragment$1 } from 'react';
124
125
  import { c as cn } from './utils-CzYGxqbG.js';
125
- import { create } from 'zustand';
126
- import { persist } from 'zustand/middleware';
127
126
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
128
- import { Wand2, Type, ToggleLeft, Hash, List, Braces, Ban, Check, ListX, ChevronsLeft, ChevronsRight, ChevronLeft, ChevronRight, Text, TextSearch, EqualNot, Equal, X, Plus, Component, ArrowRight, ArrowLeft, LogsIcon as LogsIcon$1, EyeIcon, GaugeIcon, BrainIcon, ChevronUpIcon, ChevronDownIcon, ChevronsUpIcon, ChevronsDownIcon, FoldVerticalIcon, UnfoldVerticalIcon, ChevronsDownUpIcon, ChevronsUpDownIcon, Link2Icon, CircleGaugeIcon, SaveIcon, Loader2Icon, DownloadIcon, FileInputIcon, FileOutputIcon, BracesIcon, ExternalLinkIcon, CircleSlashIcon, ArrowUpIcon, ArrowDownIcon, ArrowRightIcon } from 'lucide-react';
127
+ import { Wand2, Type, ToggleLeft, Hash, List, Braces, Ban, Check, ListX, ChevronsLeft, ChevronsRight, ChevronLeft, ChevronRight, Text, TextSearch, EqualNot, Equal, X, Plus, Component, LogsIcon as LogsIcon$1, EyeIcon, GaugeIcon, BrainIcon, ChevronUpIcon, ChevronDownIcon, ChevronsUpIcon, ChevronsDownIcon, FoldVerticalIcon, UnfoldVerticalIcon, ChevronsDownUpIcon, ChevronsUpDownIcon, Link2Icon, CircleGaugeIcon, SaveIcon, Loader2Icon, DownloadIcon, FileInputIcon, FileOutputIcon, BracesIcon, ExternalLinkIcon, CircleSlashIcon, ArrowUpIcon, ArrowDownIcon, ArrowRightIcon } from 'lucide-react';
129
128
  import { usePanelRef, Panel, Separator } from 'react-resizable-panels';
130
129
  import { I as Icon } from './Icon-CJEjdbjB.js';
130
+ import { create } from 'zustand';
131
+ import { persist } from 'zustand/middleware';
131
132
  import { format } from 'date-fns';
132
133
  import { EntityType } from '@mastra/core/observability';
133
134
  import { M as MetricsKpiCard } from './metrics-kpi-card-CNUpkoQO.js';
@@ -1413,6 +1414,19 @@ const useInView = () => {
1413
1414
  return { inView, setRef };
1414
1415
  };
1415
1416
 
1417
+ const useIsMobile = (breakpoint = 1024) => {
1418
+ const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);
1419
+ const [isMobile, setIsMobile] = useState(false);
1420
+ useLayoutEffect(() => {
1421
+ const mq = window.matchMedia(query);
1422
+ const update = () => setIsMobile(mq.matches);
1423
+ update();
1424
+ mq.addEventListener("change", update);
1425
+ return () => mq.removeEventListener("change", update);
1426
+ }, [query]);
1427
+ return isMobile;
1428
+ };
1429
+
1416
1430
  const lodashTitleCase = (str) => {
1417
1431
  const camelCased = str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : "").replace(/^(.)/, (char) => char.toLowerCase());
1418
1432
  return camelCased.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase()).trim();
@@ -2147,33 +2161,315 @@ const RuleBuilder = ({
2147
2161
  return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(RuleGroupView, { schema, group: ruleGroup, onChange: handleGroupChange, depth: 0, maxDepth }) });
2148
2162
  };
2149
2163
 
2150
- const CollapsiblePanel = ({ collapsedSize, children, direction, onResize, ...props }) => {
2164
+ const PanelEdgeIcon = ({ side }) => /* @__PURE__ */ jsxs(
2165
+ "svg",
2166
+ {
2167
+ viewBox: "0 0 24 24",
2168
+ fill: "none",
2169
+ stroke: "currentColor",
2170
+ strokeWidth: "2",
2171
+ strokeLinecap: "round",
2172
+ strokeLinejoin: "round",
2173
+ "aria-hidden": "true",
2174
+ children: [
2175
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "5" }),
2176
+ /* @__PURE__ */ jsx("path", { d: side === "left" ? "M9 3v18" : "M15 3v18" })
2177
+ ]
2178
+ }
2179
+ );
2180
+
2181
+ const panelIconButtonClass = cn(
2182
+ "flex size-8 cursor-pointer items-center justify-center rounded-full",
2183
+ "border border-transparent bg-transparent text-neutral5 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10",
2184
+ "transition-colors duration-150 ease-out-custom motion-reduce:transition-none",
2185
+ "focus-visible:outline-hidden focus-visible:border-accent1"
2186
+ );
2187
+
2188
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
2189
+ const readAxis = (point, rect, axis) => {
2190
+ return { client: point.clientY, start: rect.top, size: rect.height };
2191
+ };
2192
+ const getClampedElementCursorOffset = (point, rect, axis, margin = 0) => {
2193
+ const { client, start, size } = readAxis(point, rect);
2194
+ return clamp(client - start, margin, Math.max(margin, size - margin));
2195
+ };
2196
+ const useClampedElementCursor = ({
2197
+ axis,
2198
+ margin = 0,
2199
+ variableName
2200
+ }) => {
2201
+ const elementRef = useRef(null);
2202
+ const rectRef = useRef(null);
2203
+ const writePosition = useCallback(
2204
+ (point, refreshRect = false) => {
2205
+ const element = elementRef.current;
2206
+ if (!element) return;
2207
+ const rect = refreshRect || !rectRef.current ? element.getBoundingClientRect() : rectRef.current;
2208
+ rectRef.current = rect;
2209
+ const offset = getClampedElementCursorOffset(point, rect, axis, margin);
2210
+ element.style.setProperty(variableName, `${offset}px`);
2211
+ },
2212
+ [axis, margin, variableName]
2213
+ );
2214
+ const beginTracking = useCallback(
2215
+ (point) => {
2216
+ writePosition(point, true);
2217
+ },
2218
+ [writePosition]
2219
+ );
2220
+ const updateTracking = useCallback(
2221
+ (point) => {
2222
+ writePosition(point);
2223
+ },
2224
+ [writePosition]
2225
+ );
2226
+ const endTracking = useCallback(() => {
2227
+ rectRef.current = null;
2228
+ }, []);
2229
+ return { beginTracking, elementRef, endTracking, updateTracking };
2230
+ };
2231
+
2232
+ const PILL_EDGE_MARGIN = 22;
2233
+ const usePanelSizeTransitions = (elementRef) => {
2234
+ const [booted, setBooted] = useState(false);
2235
+ const bootedRef = useRef(false);
2236
+ const bootScheduled = useRef(false);
2237
+ const enableSizeTransitionsRef = useRef(() => {
2238
+ });
2239
+ const enableSizeTransitions = useCallback(() => {
2240
+ enableSizeTransitionsRef.current();
2241
+ }, []);
2242
+ const boot = useCallback(() => {
2243
+ if (bootScheduled.current) return;
2244
+ bootScheduled.current = true;
2245
+ requestAnimationFrame(() => {
2246
+ bootedRef.current = true;
2247
+ setBooted(true);
2248
+ enableSizeTransitionsRef.current();
2249
+ });
2250
+ }, []);
2251
+ useEffect(() => {
2252
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
2253
+ const group = elementRef.current?.parentElement;
2254
+ if (!group) return;
2255
+ const panels = Array.from(group.children).filter(
2256
+ (child) => child instanceof HTMLElement && child.hasAttribute("data-panel")
2257
+ );
2258
+ const separators = Array.from(group.children).filter(
2259
+ (child) => child instanceof HTMLElement && child.hasAttribute("data-separator")
2260
+ );
2261
+ const enable = () => {
2262
+ if (!bootedRef.current) return;
2263
+ panels.forEach(
2264
+ (panel) => panel.style.transition = "flex-grow 300ms var(--ease-out-custom, ease), flex-basis 300ms var(--ease-out-custom, ease)"
2265
+ );
2266
+ };
2267
+ const disable = () => panels.forEach((panel) => panel.style.transition = "none");
2268
+ enable();
2269
+ enableSizeTransitionsRef.current = enable;
2270
+ separators.forEach((separator) => separator.addEventListener("pointerdown", disable));
2271
+ window.addEventListener("pointerup", enable);
2272
+ window.addEventListener("pointercancel", enable);
2273
+ return () => {
2274
+ enableSizeTransitionsRef.current = () => {
2275
+ };
2276
+ separators.forEach((separator) => separator.removeEventListener("pointerdown", disable));
2277
+ window.removeEventListener("pointerup", enable);
2278
+ window.removeEventListener("pointercancel", enable);
2279
+ panels.forEach((panel) => panel.style.transition = "");
2280
+ };
2281
+ }, [elementRef]);
2282
+ return { booted, boot, enableSizeTransitions };
2283
+ };
2284
+ const useCollapsedEdgePill = ({
2285
+ collapsed,
2286
+ direction,
2287
+ elementRef
2288
+ }) => {
2289
+ const expandButtonRef = useRef(null);
2290
+ const pillRef = useRef(null);
2291
+ const {
2292
+ beginTracking: beginPillTracking,
2293
+ elementRef: stripRef,
2294
+ endTracking: endPillTracking,
2295
+ updateTracking: updatePillTracking
2296
+ } = useClampedElementCursor({
2297
+ axis: "y",
2298
+ margin: PILL_EDGE_MARGIN,
2299
+ variableName: "--pill-y"
2300
+ });
2301
+ const setEdgeHovered = useCallback((hovered) => {
2302
+ const expandButton = expandButtonRef.current;
2303
+ const pill = pillRef.current;
2304
+ if (expandButton) expandButton.dataset.edgeHovered = hovered ? "true" : "false";
2305
+ if (pill) pill.dataset.edgeHovered = hovered ? "true" : "false";
2306
+ }, []);
2307
+ const spawnPill = useCallback(
2308
+ (point) => {
2309
+ const pill = pillRef.current;
2310
+ if (!pill) return;
2311
+ beginPillTracking(point);
2312
+ pill.style.transitionProperty = "opacity, translate";
2313
+ requestAnimationFrame(() => {
2314
+ pill.style.transitionProperty = "";
2315
+ });
2316
+ },
2317
+ [beginPillTracking]
2318
+ );
2319
+ const trackPillPosition = useCallback(
2320
+ (point) => {
2321
+ updatePillTracking(point);
2322
+ },
2323
+ [updatePillTracking]
2324
+ );
2325
+ useEffect(() => {
2326
+ if (!collapsed) return;
2327
+ const panelElement = elementRef.current;
2328
+ const separator = direction === "left" ? panelElement?.nextElementSibling : panelElement?.previousElementSibling;
2329
+ if (!(separator instanceof HTMLElement) || !separator.hasAttribute("data-separator")) return;
2330
+ const show = (event) => {
2331
+ setEdgeHovered(true);
2332
+ spawnPill(event);
2333
+ };
2334
+ const hide = () => {
2335
+ setEdgeHovered(false);
2336
+ endPillTracking();
2337
+ };
2338
+ const follow = (event) => trackPillPosition(event);
2339
+ separator.addEventListener("pointerenter", show);
2340
+ separator.addEventListener("pointerleave", hide);
2341
+ separator.addEventListener("pointermove", follow);
2342
+ return () => {
2343
+ separator.removeEventListener("pointerenter", show);
2344
+ separator.removeEventListener("pointerleave", hide);
2345
+ separator.removeEventListener("pointermove", follow);
2346
+ setEdgeHovered(false);
2347
+ endPillTracking();
2348
+ };
2349
+ }, [collapsed, direction, elementRef, endPillTracking, setEdgeHovered, spawnPill, trackPillPosition]);
2350
+ return { endPillTracking, expandButtonRef, stripRef, pillRef, spawnPill, trackPillPosition };
2351
+ };
2352
+ const CollapsiblePanel = ({
2353
+ collapsedSize,
2354
+ children,
2355
+ direction,
2356
+ className,
2357
+ onResize,
2358
+ style,
2359
+ minSize,
2360
+ ...props
2361
+ }) => {
2151
2362
  const [collapsed, setCollapsed] = useState(false);
2152
2363
  const panelRef = usePanelRef();
2153
- const expand = () => {
2364
+ const elementRef = useRef(null);
2365
+ const { booted, boot, enableSizeTransitions } = usePanelSizeTransitions(elementRef);
2366
+ const { endPillTracking, expandButtonRef, stripRef, pillRef, spawnPill, trackPillPosition } = useCollapsedEdgePill({
2367
+ collapsed,
2368
+ direction,
2369
+ elementRef
2370
+ });
2371
+ const expand = useCallback(() => {
2372
+ enableSizeTransitions();
2154
2373
  if (!panelRef.current) return;
2155
2374
  panelRef.current.expand();
2156
- };
2157
- return /* @__PURE__ */ jsx(
2375
+ }, [enableSizeTransitions, panelRef]);
2376
+ const numericMinSize = typeof minSize === "number" ? minSize : null;
2377
+ return /* @__PURE__ */ jsxs(
2158
2378
  Panel,
2159
2379
  {
2160
2380
  panelRef,
2381
+ elementRef,
2161
2382
  collapsedSize,
2383
+ minSize,
2384
+ className: cn("relative", className),
2385
+ style: {
2386
+ overflow: collapsed ? "visible" : "hidden",
2387
+ "--panel-min-w": numericMinSize ? `${numericMinSize}px` : void 0,
2388
+ ...style
2389
+ },
2162
2390
  ...props,
2163
- onResize: (size, id, prevSize) => {
2164
- if (typeof collapsedSize === "number") {
2165
- if (size.inPixels <= collapsedSize) {
2166
- setCollapsed(true);
2167
- } else if (collapsed) {
2168
- setCollapsed(false);
2169
- }
2170
- }
2171
- onResize?.(size, id, prevSize);
2391
+ onResize: (size, previousSize, panel) => {
2392
+ onResize?.(size, previousSize, panel);
2393
+ if (typeof collapsedSize !== "number") return;
2394
+ setCollapsed(size.inPixels <= collapsedSize);
2395
+ boot();
2172
2396
  },
2173
- children: collapsed ? /* @__PURE__ */ jsxs(Tooltip, { children: [
2174
- /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center h-full", children: /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { onClick: expand, className: "h-48! border-none", children: /* @__PURE__ */ jsx(Icon, { children: direction === "left" ? /* @__PURE__ */ jsx(ArrowRight, {}) : /* @__PURE__ */ jsx(ArrowLeft, {}) }) }) }) }),
2175
- /* @__PURE__ */ jsx(TooltipContent, { children: "Expand" })
2176
- ] }) : children
2397
+ children: [
2398
+ /* @__PURE__ */ jsx(
2399
+ "div",
2400
+ {
2401
+ inert: collapsed,
2402
+ "data-state": collapsed ? "collapsed" : "open",
2403
+ "data-direction": direction,
2404
+ style: {
2405
+ minWidth: "var(--panel-min-w)",
2406
+ opacity: collapsed ? 0 : void 0,
2407
+ translate: collapsed ? direction === "left" ? "-100% 0" : "100% 0" : void 0
2408
+ },
2409
+ className: cn(
2410
+ "absolute inset-y-0 w-full overflow-hidden",
2411
+ "transition-[opacity,translate] duration-300 ease-out-custom motion-reduce:transition-none",
2412
+ "data-[direction=left]:left-0 data-[direction=right]:right-0",
2413
+ "data-[state=collapsed]:z-10",
2414
+ !booted && "transition-none"
2415
+ ),
2416
+ children
2417
+ }
2418
+ ),
2419
+ collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
2420
+ /* @__PURE__ */ jsx(
2421
+ "button",
2422
+ {
2423
+ ref: expandButtonRef,
2424
+ type: "button",
2425
+ "aria-label": "Expand panel",
2426
+ onClick: expand,
2427
+ className: cn(
2428
+ panelIconButtonClass,
2429
+ "absolute top-2 z-10",
2430
+ "transition-[color,background-color,opacity] duration-300 starting:opacity-0",
2431
+ direction === "left" ? "left-2" : "right-2",
2432
+ "data-[edge-hovered=true]:text-neutral6"
2433
+ ),
2434
+ children: /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(PanelEdgeIcon, { side: direction }) })
2435
+ }
2436
+ ),
2437
+ /* @__PURE__ */ jsx(
2438
+ "button",
2439
+ {
2440
+ ref: stripRef,
2441
+ type: "button",
2442
+ tabIndex: -1,
2443
+ "aria-hidden": "true",
2444
+ onClick: expand,
2445
+ onPointerEnter: (event) => spawnPill(event),
2446
+ onPointerLeave: endPillTracking,
2447
+ onPointerMove: (event) => trackPillPosition(event),
2448
+ style: { "--pill-y": "50%" },
2449
+ className: cn(
2450
+ "group/expand absolute inset-y-0 z-10 w-4 cursor-pointer focus-visible:outline-hidden",
2451
+ direction === "left" ? "left-1" : "right-1"
2452
+ ),
2453
+ children: /* @__PURE__ */ jsx(
2454
+ "span",
2455
+ {
2456
+ ref: pillRef,
2457
+ style: { top: "var(--pill-y)" },
2458
+ className: cn(
2459
+ "absolute flex size-7 -translate-y-1/2 items-center justify-center rounded-full bg-neutral6 text-surface1 shadow-dialog",
2460
+ "pointer-events-none opacity-0 transition-[opacity,translate,top] duration-150 ease-out-custom motion-reduce:transition-none",
2461
+ direction === "left" ? "left-0.5 -translate-x-1" : "right-0.5 translate-x-1",
2462
+ "group-hover/expand:pointer-events-auto group-hover/expand:translate-x-0 group-hover/expand:opacity-100",
2463
+ "group-active/expand:bg-neutral6/80",
2464
+ "data-[edge-hovered=true]:pointer-events-auto data-[edge-hovered=true]:translate-x-0 data-[edge-hovered=true]:opacity-100"
2465
+ ),
2466
+ children: /* @__PURE__ */ jsx(Icon, { children: direction === "left" ? /* @__PURE__ */ jsx(ChevronRight, {}) : /* @__PURE__ */ jsx(ChevronLeft, {}) })
2467
+ }
2468
+ )
2469
+ }
2470
+ )
2471
+ ] })
2472
+ ]
2177
2473
  }
2178
2474
  );
2179
2475
  };
@@ -2212,6 +2508,27 @@ const PanelSeparator = ({ variant = "line" }) => {
2212
2508
  );
2213
2509
  };
2214
2510
 
2511
+ const PanelDrawer = ({ direction, label, children }) => {
2512
+ return /* @__PURE__ */ jsxs(Drawer, { side: direction, children: [
2513
+ /* @__PURE__ */ jsx(DrawerTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
2514
+ "button",
2515
+ {
2516
+ type: "button",
2517
+ "aria-label": label,
2518
+ className: cn(panelIconButtonClass, "absolute top-2 z-10", direction === "left" ? "left-2" : "right-2"),
2519
+ children: /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(PanelEdgeIcon, { side: direction }) })
2520
+ }
2521
+ ) }),
2522
+ /* @__PURE__ */ jsxs(DrawerPortal, { keepMounted: true, children: [
2523
+ /* @__PURE__ */ jsx(DrawerBackdrop, {}),
2524
+ /* @__PURE__ */ jsx(DrawerViewport, { children: /* @__PURE__ */ jsxs(DrawerPopup, { className: "w-[calc(100vw-2.5rem)] max-w-[28rem]", children: [
2525
+ /* @__PURE__ */ jsx(DrawerTitle, { className: "sr-only", children: label }),
2526
+ /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col", children })
2527
+ ] }) })
2528
+ ] })
2529
+ ] });
2530
+ };
2531
+
2215
2532
  const EXTENSION_TO_MIME = {
2216
2533
  jpg: "image/jpg",
2217
2534
  jpeg: "image/jpeg",
@@ -8104,5 +8421,5 @@ function useLogsListNavigation(logs, featuredLogId, onFeaturedChange, featuredTr
8104
8421
  };
8105
8422
  }
8106
8423
 
8107
- export { AgentCoinIcon, AgentIcon, AgentNetworkCoinIcon, AiIcon, AmazonIcon, AnthropicChatIcon, AnthropicMessagesIcon, ApiIcon, AzureIcon, BarListContent, BranchIcon, Button, ButtonsGroup, CHART_COLORS, CONTEXT_FIELD_IDS, CheckIcon, ChevronIcon, CohereIcon, CollapsiblePanel, CommitIcon, CopyButton, CrossIcon, DATE_PRESETS, DEFAULT_LOGS_FILTERS_STORAGE_KEY, DEFAULT_TRACE_FILTERS_STORAGE_KEY, DataDetailsPanel, DataKeysAndValues, DataListSkeleton, DataPanel, DatasetsIcon, DateRangeSelector, DateTimeRangePicker, DbIcon, DebugIcon, DeploymentIcon, DividerIcon, DocsIcon, DropdownMenu, EXTENSION_TO_MIME, EmptyState, EnvIcon, ErrorState, ExperimentsIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, GroqIcon, HomeIcon, HorizontalBars, HoverCard, HoverCardContent, HoverCardTrigger, Icon, InfoIcon, Input, JudgeIcon, KpiCardView, LOGS_DATE_FROM_PARAM, LOGS_DATE_PRESET_PARAM, LOGS_DATE_PRESET_VALUES, LOGS_DATE_TO_PARAM, LOGS_PROPERTY_FILTER_FIELD_IDS, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD, LOGS_ROOT_ENTITY_TYPES, LOGS_ROOT_ENTITY_TYPE_OPTIONS, LOGS_ROOT_ENTITY_TYPE_PARAM, LOG_LEVEL_OPTIONS, LOG_LEVEL_VALUES, LatencyCardView, LatencyIcon, LogDetailsView, LogsDataList, DataListSkeleton as LogsDataListSkeleton, LogsErrorContent, LogsIcon, LogsLayout, LogsListView, LogsToolbar, MastraIcon, McpCoinIcon, McpServerIcon, MemoryCardView, MemoryIcon, MetricsCard, MetricsDataTable, MetricsIcon, MetricsLineChart, MetricsProvider, MistralIcon, ModelUsageCostCardView, NetlifyIcon, NoLogsInfo, NoTracesInfo, Notice, OPERATORS, OPERATOR_LABELS, OpenAIIcon, OpenErrorsInLogsButton, OpenInTracesButton, OpenaiChatIcon, PanelSeparator, PermissionDenied, ProcessorIcon, PromptIcon, PropertyFilterActions, PropertyFilterApplied, ROOT_ENTITY_TYPES, ROOT_ENTITY_TYPE_OPTIONS, RepoIcon, RequestContextIcon, RuleBuilder, RuleFieldSelect, RuleOperatorSelect, RuleRow, RuleValueInput, ScorersIcon, ScoresCardView, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, SessionExpired, SettingsIcon, SkillIcon, SpanDataPanelView, SpanDetailsView, SpanTokenUsage, Spinner, StackedRunsBars, TRACE_ANCHOR_SPAN_ID_PARAM, TRACE_DATE_FROM_PARAM, TRACE_DATE_PRESET_PARAM, TRACE_DATE_PRESET_VALUES, TRACE_DATE_TO_PARAM, TRACE_LIST_MODE_OPTIONS, TRACE_LIST_MODE_PARAM, TRACE_LIST_MODE_VALUES, TRACE_PROPERTY_FILTER_FIELD_IDS, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD, TRACE_ROOT_ENTITY_TYPE_PARAM, TRACE_STATUS_OPTIONS, TRACE_STATUS_PARAM, TRACE_STATUS_VALUES, TRACE_SYNTHETIC_FILTER_FIELD_IDS, Tab, TabContent, TabList, Tabs, TimelineExpandCol, TimelineNameCol, TimelineStructureSign, TimelineTimingCol, TokenUsageByAgentCardView, TokenUsageTimelineCardView, ToolCoinIcon, ToolsIcon, Tooltip, TooltipContent, TooltipTrigger, TraceDataPanelView, TraceDetailsView, TraceIcon, TraceKeysAndValues, TraceTimeline, TraceTimelineSpan, TracesDataList, TracesErrorContent, TracesLayout, TracesListModeToggle, TracesListView, TracesToolbar, TracesVolumeCardView, TsIcon, VariablesIcon, WorkflowCoinIcon, WorkflowIcon, WorkspacesIcon, XGroqIcon, applyLogsPropertyFilterTokens, applyMetricsPropertyFilterTokens, applyTracePropertyFilterTokens, buildLogsDrilldownUrl, buildLogsListFilters, buildMetricsDimensionalFilter, buildTraceListFilters, buildTracesDrilldownUrl, clearSavedLogsFilters, clearSavedMetricsFilters, clearSavedTraceFilters, cn, countLeafRules, createDefaultRule, createDefaultRuleGroup, createLogsPropertyFilterFields, createMetricsPropertyFilterFields, createTracePropertyFilterFields, downloadJson, fileToBase64, formatCompact, formatCost, formatHierarchicalSpans, formatJSON, formatTypeScript, generateDefaultValues, getAllSpanIds, getChildFieldOptions, getFieldOptionAtPath, getFieldOptionsFromSchema, getFileContentType, getInputPreview, getLogsPropertyFilterTokens, getMetricsPropertyFilterTokens, getPreservedLogsFilterParams, getPreservedTraceFilterParams, getSpanDescendantIds, getSpanTypeUi, getTokenLimitMessage, getTracePropertyFilterTokens, hasAnyLogsFilterParams, hasAnyMetricsFilterParams, hasAnyTraceFilterParams, is401UnauthorizedError, is403ForbiddenError, is404NotFoundError, isBranchesNotSupportedError, isNonRetryableError, isObjectEmpty, isRule, isRuleGroup, isTokenLimitExceeded, isValidJson, isValidPreset, loadLogsFiltersFromStorage, loadMetricsFiltersFromStorage, loadTraceFiltersFromStorage, lodashTitleCase, narrowWindowToBucket, neutralizeFilterTokens, neutralizeLogsFilterTokens, parseError, parseFieldPath, saveLogsFiltersToStorage, saveMetricsFiltersToStorage, saveTraceFiltersToStorage, shouldRetryQuery, spanTypePrefixes, stringToColor, toSigFigs, toast, truncateString, useActiveResourcesKpiMetrics, useActiveThreadsKpiMetrics, useAgentRunsKpiMetrics, useBranch, useDownloadTraceJson, useDrilldown, useEntityNames, useEnvironments, useInView, useLatencyMetrics, useLogs, useLogsFilterPersistence, useLogsListNavigation, useLogsUrlState, useMetrics, useMetricsFilters, useModelCostKpiMetrics, useModelUsageCostMetrics, usePlaygroundStore, useScoresMetrics, useServiceNames, useSpanDetail, useTags, useTokenUsageByAgentMetrics, useTokenUsageTimeSeries, useTopActiveThreadsMetrics, useTopResourcesByThreadsMetrics, useTotalTokensKpiMetrics, useTraceFilterPersistence, useTraceLightSpans, useTraceListNavigation, useTraceOrBranchSpans, useTraceSpanNavigation, useTraceSpans, useTraceUrlState, useTraceVolumeMetrics, useTraces };
8424
+ export { AgentCoinIcon, AgentIcon, AgentNetworkCoinIcon, AiIcon, AmazonIcon, AnthropicChatIcon, AnthropicMessagesIcon, ApiIcon, AzureIcon, BarListContent, BranchIcon, Button, ButtonsGroup, CHART_COLORS, CONTEXT_FIELD_IDS, CheckIcon, ChevronIcon, CohereIcon, CollapsiblePanel, CommitIcon, CopyButton, CrossIcon, DATE_PRESETS, DEFAULT_LOGS_FILTERS_STORAGE_KEY, DEFAULT_TRACE_FILTERS_STORAGE_KEY, DataDetailsPanel, DataKeysAndValues, DataListSkeleton, DataPanel, DatasetsIcon, DateRangeSelector, DateTimeRangePicker, DbIcon, DebugIcon, DeploymentIcon, DividerIcon, DocsIcon, Drawer, DrawerBackdrop, DrawerPopup, DrawerPortal, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, EXTENSION_TO_MIME, EmptyState, EnvIcon, ErrorState, ExperimentsIcon, FiltersIcon, FolderIcon, GithubCoinIcon, GithubIcon, GoogleIcon, GroqIcon, HomeIcon, HorizontalBars, HoverCard, HoverCardContent, HoverCardTrigger, Icon, InfoIcon, Input, JudgeIcon, KpiCardView, LOGS_DATE_FROM_PARAM, LOGS_DATE_PRESET_PARAM, LOGS_DATE_PRESET_VALUES, LOGS_DATE_TO_PARAM, LOGS_PROPERTY_FILTER_FIELD_IDS, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD, LOGS_ROOT_ENTITY_TYPES, LOGS_ROOT_ENTITY_TYPE_OPTIONS, LOGS_ROOT_ENTITY_TYPE_PARAM, LOG_LEVEL_OPTIONS, LOG_LEVEL_VALUES, LatencyCardView, LatencyIcon, LogDetailsView, LogsDataList, DataListSkeleton as LogsDataListSkeleton, LogsErrorContent, LogsIcon, LogsLayout, LogsListView, LogsToolbar, MastraIcon, McpCoinIcon, McpServerIcon, MemoryCardView, MemoryIcon, MetricsCard, MetricsDataTable, MetricsIcon, MetricsLineChart, MetricsProvider, MistralIcon, ModelUsageCostCardView, NetlifyIcon, NoLogsInfo, NoTracesInfo, Notice, OPERATORS, OPERATOR_LABELS, OpenAIIcon, OpenErrorsInLogsButton, OpenInTracesButton, OpenaiChatIcon, PanelDrawer, PanelSeparator, PermissionDenied, ProcessorIcon, PromptIcon, PropertyFilterActions, PropertyFilterApplied, ROOT_ENTITY_TYPES, ROOT_ENTITY_TYPE_OPTIONS, RepoIcon, RequestContextIcon, RuleBuilder, RuleFieldSelect, RuleOperatorSelect, RuleRow, RuleValueInput, ScorersIcon, ScoresCardView, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, SessionExpired, SettingsIcon, SkillIcon, SpanDataPanelView, SpanDetailsView, SpanTokenUsage, Spinner, StackedRunsBars, TRACE_ANCHOR_SPAN_ID_PARAM, TRACE_DATE_FROM_PARAM, TRACE_DATE_PRESET_PARAM, TRACE_DATE_PRESET_VALUES, TRACE_DATE_TO_PARAM, TRACE_LIST_MODE_OPTIONS, TRACE_LIST_MODE_PARAM, TRACE_LIST_MODE_VALUES, TRACE_PROPERTY_FILTER_FIELD_IDS, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD, TRACE_ROOT_ENTITY_TYPE_PARAM, TRACE_STATUS_OPTIONS, TRACE_STATUS_PARAM, TRACE_STATUS_VALUES, TRACE_SYNTHETIC_FILTER_FIELD_IDS, Tab, TabContent, TabList, Tabs, TimelineExpandCol, TimelineNameCol, TimelineStructureSign, TimelineTimingCol, TokenUsageByAgentCardView, TokenUsageTimelineCardView, ToolCoinIcon, ToolsIcon, Tooltip, TooltipContent, TooltipTrigger, TraceDataPanelView, TraceDetailsView, TraceIcon, TraceKeysAndValues, TraceTimeline, TraceTimelineSpan, TracesDataList, TracesErrorContent, TracesLayout, TracesListModeToggle, TracesListView, TracesToolbar, TracesVolumeCardView, TsIcon, VariablesIcon, WorkflowCoinIcon, WorkflowIcon, WorkspacesIcon, XGroqIcon, applyLogsPropertyFilterTokens, applyMetricsPropertyFilterTokens, applyTracePropertyFilterTokens, buildLogsDrilldownUrl, buildLogsListFilters, buildMetricsDimensionalFilter, buildTraceListFilters, buildTracesDrilldownUrl, clearSavedLogsFilters, clearSavedMetricsFilters, clearSavedTraceFilters, cn, countLeafRules, createDefaultRule, createDefaultRuleGroup, createLogsPropertyFilterFields, createMetricsPropertyFilterFields, createTracePropertyFilterFields, downloadJson, fileToBase64, formatCompact, formatCost, formatHierarchicalSpans, formatJSON, formatTypeScript, generateDefaultValues, getAllSpanIds, getChildFieldOptions, getFieldOptionAtPath, getFieldOptionsFromSchema, getFileContentType, getInputPreview, getLogsPropertyFilterTokens, getMetricsPropertyFilterTokens, getPreservedLogsFilterParams, getPreservedTraceFilterParams, getSpanDescendantIds, getSpanTypeUi, getTokenLimitMessage, getTracePropertyFilterTokens, hasAnyLogsFilterParams, hasAnyMetricsFilterParams, hasAnyTraceFilterParams, is401UnauthorizedError, is403ForbiddenError, is404NotFoundError, isBranchesNotSupportedError, isNonRetryableError, isObjectEmpty, isRule, isRuleGroup, isTokenLimitExceeded, isValidJson, isValidPreset, loadLogsFiltersFromStorage, loadMetricsFiltersFromStorage, loadTraceFiltersFromStorage, lodashTitleCase, narrowWindowToBucket, neutralizeFilterTokens, neutralizeLogsFilterTokens, parseError, parseFieldPath, saveLogsFiltersToStorage, saveMetricsFiltersToStorage, saveTraceFiltersToStorage, shouldRetryQuery, spanTypePrefixes, stringToColor, toSigFigs, toast, truncateString, useActiveResourcesKpiMetrics, useActiveThreadsKpiMetrics, useAgentRunsKpiMetrics, useBranch, useDownloadTraceJson, useDrilldown, useEntityNames, useEnvironments, useInView, useIsMobile, useLatencyMetrics, useLogs, useLogsFilterPersistence, useLogsListNavigation, useLogsUrlState, useMetrics, useMetricsFilters, useModelCostKpiMetrics, useModelUsageCostMetrics, usePlaygroundStore, useScoresMetrics, useServiceNames, useSpanDetail, useTags, useTokenUsageByAgentMetrics, useTokenUsageTimeSeries, useTopActiveThreadsMetrics, useTopResourcesByThreadsMetrics, useTotalTokensKpiMetrics, useTraceFilterPersistence, useTraceLightSpans, useTraceListNavigation, useTraceOrBranchSpans, useTraceSpanNavigation, useTraceSpans, useTraceUrlState, useTraceVolumeMetrics, useTraces };
8108
8425
  //# sourceMappingURL=index.es.js.map