@mastra/playground-ui 29.0.0-alpha.8 → 29.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.
package/dist/index.css CHANGED
@@ -183,7 +183,6 @@
183
183
  --blur-xs: 4px;
184
184
  --blur-sm: 8px;
185
185
  --blur-md: 12px;
186
- --blur-xl: 24px;
187
186
  --default-transition-duration: .15s;
188
187
  --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
189
188
  --default-font-family: var(--font-sans);
@@ -1256,6 +1255,10 @@
1256
1255
  height: calc(100vh - 6rem) !important;
1257
1256
  }
1258
1257
 
1258
+ .h-\[var\(--collapsible-panel-height\)\] {
1259
+ height: var(--collapsible-panel-height);
1260
+ }
1261
+
1259
1262
  .h-auto {
1260
1263
  height: auto;
1261
1264
  }
@@ -1858,10 +1861,6 @@
1858
1861
  min-width: var(--spacing-80);
1859
1862
  }
1860
1863
 
1861
- .min-w-\[8rem\] {
1862
- min-width: 8rem;
1863
- }
1864
-
1865
1864
  .min-w-\[12rem\] {
1866
1865
  min-width: 12rem;
1867
1866
  }
@@ -4181,12 +4180,6 @@
4181
4180
  backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );
4182
4181
  }
4183
4182
 
4184
- .backdrop-blur-xl {
4185
- --tw-backdrop-blur: blur(var(--blur-xl));
4186
- -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );
4187
- backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );
4188
- }
4189
-
4190
4183
  .backdrop-blur-xs {
4191
4184
  --tw-backdrop-blur: blur(var(--blur-xs));
4192
4185
  -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );
@@ -4199,6 +4192,12 @@
4199
4192
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4200
4193
  }
4201
4194
 
4195
+ .transition-\[height\] {
4196
+ transition-property: height;
4197
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4198
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
4199
+ }
4200
+
4202
4201
  .transition-\[transform\,scale\,opacity\] {
4203
4202
  transition-property: transform, scale, opacity;
4204
4203
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -5431,6 +5430,10 @@
5431
5430
  opacity: .5;
5432
5431
  }
5433
5432
 
5433
+ .data-\[ending-style\]\:h-0[data-ending-style] {
5434
+ height: var(--spacing-0);
5435
+ }
5436
+
5434
5437
  .data-\[ending-style\]\:scale-95[data-ending-style] {
5435
5438
  --tw-scale-x: 95%;
5436
5439
  --tw-scale-y: 95%;
@@ -5675,6 +5678,10 @@
5675
5678
  --tw-enter-translate-y: calc(1*var(--spacing));
5676
5679
  }
5677
5680
 
5681
+ .data-\[starting-style\]\:h-0[data-starting-style] {
5682
+ height: var(--spacing-0);
5683
+ }
5684
+
5678
5685
  .data-\[starting-style\]\:scale-95[data-starting-style] {
5679
5686
  --tw-scale-x: 95%;
5680
5687
  --tw-scale-y: 95%;
@@ -5760,10 +5767,6 @@
5760
5767
  --tw-exit-translate-x: calc(1 / 4*100%);
5761
5768
  }
5762
5769
 
5763
- .data-\[state\=closed\]\:slide-out-to-top-1[data-state="closed"] {
5764
- --tw-exit-translate-y: calc(1*var(--spacing)*-1);
5765
- }
5766
-
5767
5770
  .data-\[state\=open\]\:animate-in[data-state="open"] {
5768
5771
  animation: enter var(--tw-animation-duration, var(--tw-duration, .15s))var(--tw-ease, ease)var(--tw-animation-delay, 0s)var(--tw-animation-iteration-count, 1)var(--tw-animation-direction, normal)var(--tw-animation-fill-mode, none);
5769
5772
  }
@@ -5806,10 +5809,6 @@
5806
5809
  --tw-enter-translate-x: calc(1 / 4*100%);
5807
5810
  }
5808
5811
 
5809
- .data-\[state\=open\]\:slide-in-from-top-1[data-state="open"] {
5810
- --tw-enter-translate-y: calc(1*var(--spacing)*-1);
5811
- }
5812
-
5813
5812
  .data-\[state\=unchecked\]\:translate-x-0[data-state="unchecked"] {
5814
5813
  --tw-translate-x: var(--spacing-0);
5815
5814
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -7091,7 +7090,7 @@
7091
7090
  height: var(--height-table-row-small);
7092
7091
  }
7093
7092
 
7094
- .\[\&\[data-state\=open\]\>svg\]\:rotate-90[data-state="open"] > svg {
7093
+ .\[\&\[data-panel-open\]\>svg\]\:rotate-90[data-panel-open] > svg {
7095
7094
  rotate: 90deg;
7096
7095
  }
7097
7096
 
@@ -9346,19 +9345,26 @@ html.light {
9346
9345
  }
9347
9346
  }
9348
9347
 
9349
- .dialog-overlay-anim[data-state='open'] {
9348
+ /* Open/close state attributes: Radix (`data-state`) for AlertDialog, Base UI
9349
+ * (`data-open` / `data-closed`) for Dialog. Both share these animation classes. */
9350
+
9351
+ .dialog-overlay-anim[data-state='open'],
9352
+ .dialog-overlay-anim[data-open] {
9350
9353
  animation: dialog-overlay-in 320ms cubic-bezier(0.22, 1, 0.36, 1);
9351
9354
  }
9352
9355
 
9353
- .dialog-overlay-anim[data-state='closed'] {
9356
+ .dialog-overlay-anim[data-state='closed'],
9357
+ .dialog-overlay-anim[data-closed] {
9354
9358
  animation: dialog-overlay-out 240ms cubic-bezier(0.32, 0, 0.67, 0);
9355
9359
  }
9356
9360
 
9357
- .dialog-content-anim[data-state='open'] {
9361
+ .dialog-content-anim[data-state='open'],
9362
+ .dialog-content-anim[data-open] {
9358
9363
  animation: dialog-content-in 680ms cubic-bezier(0.16, 1, 0.3, 1);
9359
9364
  }
9360
9365
 
9361
- .dialog-content-anim[data-state='closed'] {
9366
+ .dialog-content-anim[data-state='closed'],
9367
+ .dialog-content-anim[data-closed] {
9362
9368
  animation: dialog-content-out 180ms cubic-bezier(0.5, 0, 0.75, 0);
9363
9369
  }
9364
9370
  .brand-loader svg {
package/dist/index.es.js CHANGED
@@ -17,13 +17,13 @@ import { autocompletion } from '@codemirror/autocomplete';
17
17
  import { CheckIcon as CheckIcon$1, CopyIcon, Wand2, ShieldX, LogIn, Check, ChevronsUpDown, Search, X, ChevronDown, Circle, TriangleAlertIcon, SearchIcon, XIcon, TrendingUpIcon, TrendingDownIcon, EllipsisVerticalIcon, SaveIcon, Trash2Icon, LockIcon, ListFilterPlusIcon, ArrowLeftIcon, FilterIcon, PlusIcon, ChevronRightIcon, Monitor, Sun, Moon, CalendarIcon, CircleAlertIcon, InfoIcon as InfoIcon$1, ArrowRightIcon, Type, Hash, ToggleLeft, AlignLeft, Braces, List, MenuIcon, PanelRightIcon, KeyboardIcon, AlignLeftIcon, AlignJustifyIcon, ArrowUpIcon, ArrowDownIcon, ChevronsRightIcon, ChevronLeftIcon, ClockIcon, BanIcon, FileTextIcon, OctagonAlertIcon, LightbulbIcon, ChevronRight, Folder, File, ListTreeIcon, CornerDownRightIcon, AlertTriangle, CircleXIcon, ExpandIcon, ExternalLinkIcon, Link2Icon, Ban, ListX, ChevronsLeft, ChevronsRight, ChevronLeft, Text, TextSearch, EqualNot, Equal, Plus, Component, ArrowRight, ArrowLeft, LogsIcon as LogsIcon$1, EyeIcon, GaugeIcon, BrainIcon, ChevronUpIcon, ChevronDownIcon, ChevronsUpIcon, ChevronsDownIcon, FoldVerticalIcon, UnfoldVerticalIcon, ChevronsDownUpIcon, ChevronsUpDownIcon, CircleGaugeIcon, FileInputIcon, FileOutputIcon, BracesIcon, CircleSlashIcon } from 'lucide-react';
18
18
  import { toast as toast$1, Toaster as Toaster$1 } from 'sonner';
19
19
  import { useMastraClient } from '@mastra/react';
20
- import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
20
+ import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
21
21
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
22
- import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
22
+ import { Collapsible as Collapsible$1 } from '@base-ui/react/collapsible';
23
23
  import { Combobox as Combobox$1 } from '@base-ui/react/combobox';
24
24
  export { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';
25
25
  import { Command as Command$1 } from 'cmdk';
26
- import * as DialogPrimitive from '@radix-ui/react-dialog';
26
+ import { Dialog as Dialog$2 } from '@base-ui/react/dialog';
27
27
  import * as SelectPrimitive from '@radix-ui/react-select';
28
28
  import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
29
29
  import { Menu } from '@base-ui/react/menu';
@@ -42,11 +42,11 @@ import { format, isValid, formatDate, isThisYear, isToday as isToday$1, parse }
42
42
  import { DayPicker } from 'react-day-picker';
43
43
  import * as HoverCard from '@radix-ui/react-hover-card';
44
44
  import { Slot } from '@radix-ui/react-slot';
45
+ import * as Dialog$1 from '@radix-ui/react-dialog';
45
46
  import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd';
46
47
  import { MergeView } from '@codemirror/merge';
47
48
  import { format as format$1 } from 'date-fns/format';
48
49
  import { isToday } from 'date-fns/isToday';
49
- import { Portal, SubContent } from '@radix-ui/react-dropdown-menu';
50
50
  import { SearchCursor } from '@codemirror/search';
51
51
  import { ResponsiveContainer, LineChart, CartesianGrid, XAxis, YAxis, Tooltip as Tooltip$2, Line } from 'recharts';
52
52
  import { usePanelRef, Panel, Separator as Separator$1 } from 'react-resizable-panels';
@@ -6035,9 +6035,7 @@ const Textarea = React.forwardRef(
6035
6035
  );
6036
6036
  Textarea.displayName = "Textarea";
6037
6037
 
6038
- const AlertDialogRoot = AlertDialogPrimitive.Root;
6039
- const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
6040
- const AlertDialogPortal = AlertDialogPrimitive.Portal;
6038
+ const AlertDialogRoot = AlertDialog$1.Root;
6041
6039
  function AlertDialog({
6042
6040
  open,
6043
6041
  onOpenChange,
@@ -6045,21 +6043,30 @@ function AlertDialog({
6045
6043
  }) {
6046
6044
  return /* @__PURE__ */ jsx(AlertDialogRoot, { open, onOpenChange, children });
6047
6045
  }
6046
+ const AlertDialogTrigger = React.forwardRef(
6047
+ ({ asChild, children, ...props }, ref) => {
6048
+ const renderProps = asChild && React.isValidElement(children) ? { render: children } : {};
6049
+ return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, { ref, ...renderProps, ...props, children: asChild ? void 0 : children });
6050
+ }
6051
+ );
6052
+ AlertDialogTrigger.displayName = "AlertDialogTrigger";
6053
+ const AlertDialogPortal = AlertDialog$1.Portal;
6048
6054
  const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6049
- AlertDialogPrimitive.Overlay,
6055
+ AlertDialog$1.Backdrop,
6050
6056
  {
6051
6057
  ref,
6052
6058
  className: cn("dialog-overlay-anim fixed inset-0 z-50 bg-overlay backdrop-blur-xs", className),
6053
6059
  ...props
6054
6060
  }
6055
6061
  ));
6056
- AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
6062
+ AlertDialogOverlay.displayName = "AlertDialogOverlay";
6057
6063
  const AlertDialogContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
6058
6064
  /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
6059
6065
  /* @__PURE__ */ jsx(
6060
- AlertDialogPrimitive.Content,
6066
+ AlertDialog$1.Popup,
6061
6067
  {
6062
6068
  ref,
6069
+ "data-slot": "alert-dialog-content",
6063
6070
  className: cn(
6064
6071
  "dialog-content-anim",
6065
6072
  "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
@@ -6071,35 +6078,41 @@ const AlertDialogContent = React.forwardRef(({ className, ...props }, ref) => /*
6071
6078
  }
6072
6079
  )
6073
6080
  ] }));
6074
- AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
6081
+ AlertDialogContent.displayName = "AlertDialogContent";
6075
6082
  const AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-0.5 px-4 py-3 text-left", className), ...props });
6076
6083
  AlertDialogHeader.displayName = "AlertDialogHeader";
6077
6084
  const AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse gap-1.5 px-4 py-2.5 sm:flex-row sm:justify-end", className), ...props });
6078
6085
  AlertDialogFooter.displayName = "AlertDialogFooter";
6079
6086
  const AlertDialogBody = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("overflow-y-auto px-4 py-3.5 max-h-[50vh]", className), ...props });
6080
6087
  AlertDialogBody.displayName = "AlertDialogBody";
6081
- const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Title, { ref, className: cn("text-ui-md font-medium", className), ...props }));
6082
- AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
6083
- const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Description, { ref, className: cn("text-ui-sm text-neutral3", className), ...props }));
6084
- AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
6085
- const AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6086
- AlertDialogPrimitive.Action,
6087
- {
6088
- ref,
6089
- className: cn(buttonVariants({ variant: "primary", size: "default" }), className),
6090
- ...props
6091
- }
6092
- ));
6093
- AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
6094
- const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6095
- AlertDialogPrimitive.Cancel,
6096
- {
6097
- ref,
6098
- className: cn(buttonVariants({ variant: "default", size: "default" }), className),
6099
- ...props
6100
- }
6101
- ));
6102
- AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
6088
+ const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialog$1.Title, { ref, className: cn("text-ui-md font-medium", className), ...props }));
6089
+ AlertDialogTitle.displayName = "AlertDialogTitle";
6090
+ const AlertDialogDescription = React.forwardRef(
6091
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialog$1.Description, { ref, className: cn("text-ui-sm text-neutral3", className), ...props })
6092
+ );
6093
+ AlertDialogDescription.displayName = "AlertDialogDescription";
6094
+ const AlertDialogAction = React.forwardRef(
6095
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6096
+ AlertDialog$1.Close,
6097
+ {
6098
+ ref,
6099
+ className: cn(buttonVariants({ variant: "primary", size: "default" }), className),
6100
+ ...props
6101
+ }
6102
+ )
6103
+ );
6104
+ AlertDialogAction.displayName = "AlertDialogAction";
6105
+ const AlertDialogCancel = React.forwardRef(
6106
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6107
+ AlertDialog$1.Close,
6108
+ {
6109
+ ref,
6110
+ className: cn(buttonVariants({ variant: "default", size: "default" }), className),
6111
+ ...props
6112
+ }
6113
+ )
6114
+ );
6115
+ AlertDialogCancel.displayName = "AlertDialogCancel";
6103
6116
  AlertDialog.Trigger = AlertDialogTrigger;
6104
6117
  AlertDialog.Portal = AlertDialogPortal;
6105
6118
  AlertDialog.Overlay = AlertDialogOverlay;
@@ -6142,41 +6155,54 @@ const Checkbox = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
6142
6155
  ));
6143
6156
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
6144
6157
 
6145
- const Collapsible = CollapsiblePrimitive.Root;
6146
- const CollapsibleTrigger = React__default.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
6147
- CollapsiblePrimitive.CollapsibleTrigger,
6148
- {
6149
- ref,
6150
- className: cn(
6151
- "-outline-offset-2",
6152
- transitions.colors,
6153
- focusRing.visible,
6154
- "hover:text-neutral5",
6155
- "[&>svg]:transition-transform [&>svg]:duration-normal [&>svg]:ease-out-custom",
6156
- "[&[data-state=open]>svg]:rotate-90",
6157
- className
6158
- ),
6159
- ...props,
6160
- children
6161
- }
6162
- ));
6163
- CollapsibleTrigger.displayName = CollapsiblePrimitive.CollapsibleTrigger.displayName;
6164
- const CollapsibleContent = React__default.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
6165
- CollapsiblePrimitive.CollapsibleContent,
6166
- {
6167
- ref,
6168
- className: cn(
6169
- "overflow-hidden",
6170
- "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-top-1",
6171
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-1",
6172
- "duration-normal ease-out-custom",
6173
- className
6174
- ),
6175
- ...props,
6176
- children
6158
+ const Collapsible = Collapsible$1.Root;
6159
+ const CollapsibleTrigger = React__default.forwardRef(
6160
+ ({ className, asChild, children, ...props }, ref) => {
6161
+ const renderProps = asChild && React__default.isValidElement(children) ? { render: children } : {};
6162
+ return /* @__PURE__ */ jsx(
6163
+ Collapsible$1.Trigger,
6164
+ {
6165
+ ref,
6166
+ "data-slot": "collapsible-trigger",
6167
+ className: cn(
6168
+ "-outline-offset-2",
6169
+ transitions.colors,
6170
+ focusRing.visible,
6171
+ "hover:text-neutral5",
6172
+ "[&>svg]:transition-transform [&>svg]:duration-normal [&>svg]:ease-out-custom",
6173
+ "[&[data-panel-open]>svg]:rotate-90",
6174
+ className
6175
+ ),
6176
+ ...renderProps,
6177
+ ...props,
6178
+ children: asChild ? void 0 : children
6179
+ }
6180
+ );
6177
6181
  }
6178
- ));
6179
- CollapsibleContent.displayName = CollapsiblePrimitive.CollapsibleContent.displayName;
6182
+ );
6183
+ CollapsibleTrigger.displayName = "CollapsibleTrigger";
6184
+ const CollapsibleContent = React__default.forwardRef(
6185
+ ({ className, children, ...props }, ref) => (
6186
+ // Base UI animates the panel's `height` between 0 and `--collapsible-panel-height`.
6187
+ // Padding/margin/borders must live on an inner wrapper — if applied to the panel
6188
+ // itself they keep it from collapsing to 0, which makes the animation jump.
6189
+ /* @__PURE__ */ jsx(
6190
+ Collapsible$1.Panel,
6191
+ {
6192
+ ref,
6193
+ "data-slot": "collapsible-content",
6194
+ className: cn(
6195
+ "overflow-hidden",
6196
+ "h-[var(--collapsible-panel-height)] transition-[height] duration-normal ease-out-custom",
6197
+ "data-[starting-style]:h-0 data-[ending-style]:h-0"
6198
+ ),
6199
+ ...props,
6200
+ children: /* @__PURE__ */ jsx("div", { className, children })
6201
+ }
6202
+ )
6203
+ )
6204
+ );
6205
+ CollapsibleContent.displayName = "CollapsibleContent";
6180
6206
 
6181
6207
  const comboboxStyles = {
6182
6208
  /** Root wrapper */
@@ -6452,51 +6478,70 @@ function MultiCombobox({
6452
6478
  ] });
6453
6479
  }
6454
6480
 
6455
- const Dialog = DialogPrimitive.Root;
6456
- const DialogTrigger = DialogPrimitive.Trigger;
6457
- const DialogPortal = DialogPrimitive.Portal;
6458
- const DialogClose = DialogPrimitive.Close;
6481
+ const Dialog = Dialog$2.Root;
6482
+ const DialogTrigger = React.forwardRef(
6483
+ ({ asChild, children, ...props }, ref) => {
6484
+ const renderProps = asChild && React.isValidElement(children) ? { render: children } : {};
6485
+ return /* @__PURE__ */ jsx(Dialog$2.Trigger, { ref, ...renderProps, ...props, children: asChild ? void 0 : children });
6486
+ }
6487
+ );
6488
+ DialogTrigger.displayName = "DialogTrigger";
6489
+ const DialogPortal = Dialog$2.Portal;
6490
+ const DialogClose = React.forwardRef(({ asChild, children, ...props }, ref) => {
6491
+ const renderProps = asChild && React.isValidElement(children) ? { render: children } : {};
6492
+ return /* @__PURE__ */ jsx(Dialog$2.Close, { ref, ...renderProps, ...props, children: asChild ? void 0 : children });
6493
+ });
6494
+ DialogClose.displayName = "DialogClose";
6459
6495
  const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6460
- DialogPrimitive.Overlay,
6496
+ Dialog$2.Backdrop,
6461
6497
  {
6462
6498
  ref,
6463
6499
  className: cn("dialog-overlay-anim fixed inset-0 z-50 bg-overlay backdrop-blur-xs", className),
6464
6500
  ...props
6465
6501
  }
6466
6502
  ));
6467
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
6503
+ DialogOverlay.displayName = "DialogOverlay";
6468
6504
  const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
6469
6505
  /* @__PURE__ */ jsx(DialogOverlay, {}),
6470
6506
  /* @__PURE__ */ jsxs(
6471
- DialogPrimitive.Content,
6507
+ Dialog$2.Popup,
6472
6508
  {
6473
6509
  ref,
6510
+ "data-slot": "dialog-content",
6474
6511
  className: cn(
6475
6512
  "dialog-content-anim",
6476
6513
  "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
6477
6514
  "w-full max-w-[calc(100%-2rem)] sm:max-w-lg",
6478
6515
  "rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog",
6516
+ "focus-visible:outline-hidden",
6479
6517
  className
6480
6518
  ),
6481
6519
  ...props,
6482
6520
  children: [
6483
6521
  children,
6484
- /* @__PURE__ */ jsx(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsx(X, {}) }) })
6522
+ /* @__PURE__ */ jsx(
6523
+ Dialog$2.Close,
6524
+ {
6525
+ render: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsx(X, {}) })
6526
+ }
6527
+ )
6485
6528
  ]
6486
6529
  }
6487
6530
  )
6488
6531
  ] }));
6489
- DialogContent.displayName = DialogPrimitive.Content.displayName;
6532
+ DialogContent.displayName = "DialogContent";
6490
6533
  const DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-0.5 px-4 py-3 text-left", className), ...props });
6491
6534
  DialogHeader.displayName = "DialogHeader";
6492
6535
  const DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse gap-1.5 px-4 py-2.5 sm:flex-row sm:justify-end", className), ...props });
6493
6536
  DialogFooter.displayName = "DialogFooter";
6494
6537
  const DialogBody = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("overflow-y-auto px-4 py-3.5 max-h-[50vh]", className), ...props });
6495
6538
  DialogBody.displayName = "DialogBody";
6496
- const DialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Title, { ref, className: cn("text-ui-md font-medium", className), ...props }));
6497
- DialogTitle.displayName = DialogPrimitive.Title.displayName;
6498
- const DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("sr-only", className), ...props }));
6499
- DialogDescription.displayName = DialogPrimitive.Description.displayName;
6539
+ const DialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$2.Title, { ref, className: cn("text-ui-md font-medium", className), ...props }));
6540
+ DialogTitle.displayName = "DialogTitle";
6541
+ const DialogDescription = React.forwardRef(
6542
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(Dialog$2.Description, { ref, className: cn("sr-only", className), ...props })
6543
+ );
6544
+ DialogDescription.displayName = "DialogDescription";
6500
6545
 
6501
6546
  const Command = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
6502
6547
  Command$1,
@@ -11149,9 +11194,9 @@ function MainSidebarRoot({ children, className }) {
11149
11194
  [setOpenMobile]
11150
11195
  );
11151
11196
  if (isMobile) {
11152
- return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open: openMobile, onOpenChange: setOpenMobile, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
11197
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { open: openMobile, onOpenChange: setOpenMobile, children: /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [
11153
11198
  /* @__PURE__ */ jsx(
11154
- DialogPrimitive.Overlay,
11199
+ Dialog$1.Overlay,
11155
11200
  {
11156
11201
  className: cn(
11157
11202
  "fixed inset-0 z-40 bg-overlay backdrop-blur-sm",
@@ -11161,7 +11206,7 @@ function MainSidebarRoot({ children, className }) {
11161
11206
  }
11162
11207
  ),
11163
11208
  /* @__PURE__ */ jsxs(
11164
- DialogPrimitive.Content,
11209
+ Dialog$1.Content,
11165
11210
  {
11166
11211
  className: cn(
11167
11212
  "fixed inset-y-0 left-0 z-50 flex h-full flex-col",
@@ -11173,8 +11218,8 @@ function MainSidebarRoot({ children, className }) {
11173
11218
  className
11174
11219
  ),
11175
11220
  children: [
11176
- /* @__PURE__ */ jsx(VisuallyHidden$1, { asChild: true, children: /* @__PURE__ */ jsx(DialogPrimitive.Title, { children: "Navigation" }) }),
11177
- /* @__PURE__ */ jsx(VisuallyHidden$1, { asChild: true, children: /* @__PURE__ */ jsx(DialogPrimitive.Description, { children: "Primary site navigation drawer" }) }),
11221
+ /* @__PURE__ */ jsx(VisuallyHidden$1, { asChild: true, children: /* @__PURE__ */ jsx(Dialog$1.Title, { children: "Navigation" }) }),
11222
+ /* @__PURE__ */ jsx(VisuallyHidden$1, { asChild: true, children: /* @__PURE__ */ jsx(Dialog$1.Description, { children: "Primary site navigation drawer" }) }),
11178
11223
  /* @__PURE__ */ jsx("div", { onClick: closeOnAnchor, className: "flex flex-col h-full min-h-0 px-4 py-2 overflow-hidden", children })
11179
11224
  ]
11180
11225
  }
@@ -11696,9 +11741,9 @@ function SideDialogRoot({
11696
11741
  className
11697
11742
  }) {
11698
11743
  const isConfirmation = variant === "confirmation";
11699
- return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
11744
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [
11700
11745
  !isConfirmation && /* @__PURE__ */ jsx(
11701
- DialogPrimitive.Overlay,
11746
+ Dialog$1.Overlay,
11702
11747
  {
11703
11748
  className: cn(
11704
11749
  "bg-overlay backdrop-blur-sm top-0 bottom-0 right-0 left-0 fixed z-50",
@@ -11708,7 +11753,7 @@ function SideDialogRoot({
11708
11753
  }
11709
11754
  ),
11710
11755
  /* @__PURE__ */ jsxs(
11711
- DialogPrimitive.Content,
11756
+ Dialog$1.Content,
11712
11757
  {
11713
11758
  className: cn(
11714
11759
  "fixed top-0 bottom-0 right-0 border-l border-border2 z-50 bg-surface2",
@@ -11724,10 +11769,10 @@ function SideDialogRoot({
11724
11769
  ),
11725
11770
  children: [
11726
11771
  /* @__PURE__ */ jsxs(VisuallyHidden.Root, { children: [
11727
- /* @__PURE__ */ jsx(DialogPrimitive.Title, { children: dialogTitle }),
11728
- /* @__PURE__ */ jsx(DialogPrimitive.Description, { children: dialogDescription })
11772
+ /* @__PURE__ */ jsx(Dialog$1.Title, { children: dialogTitle }),
11773
+ /* @__PURE__ */ jsx(Dialog$1.Description, { children: dialogDescription })
11729
11774
  ] }),
11730
- !isConfirmation && /* @__PURE__ */ jsx(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx(
11775
+ !isConfirmation && /* @__PURE__ */ jsx(Dialog$1.Close, { asChild: true, children: /* @__PURE__ */ jsx(
11731
11776
  "button",
11732
11777
  {
11733
11778
  className: cn(
@@ -12895,15 +12940,6 @@ const Tree = Object.assign(TreeRoot, {
12895
12940
  });
12896
12941
 
12897
12942
  const SUBMENU_SEARCH_THRESHOLD = 6;
12898
- const subContentClass = cn(
12899
- "bg-surface5 backdrop-blur-xl z-50 min-w-[8rem] overflow-auto rounded-lg p-2 shadow-md",
12900
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
12901
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
12902
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"
12903
- );
12904
- function PortalSubContent({ className, children, ...props }) {
12905
- return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(SubContent, { className: cn(subContentClass, className), ...props, children }) });
12906
- }
12907
12943
  function SubMenuSearch({
12908
12944
  value,
12909
12945
  onChange,
@@ -13008,7 +13044,7 @@ function SelectDataFilter({
13008
13044
  /* @__PURE__ */ jsx("span", { className: cn("truncate"), children: cat.label }),
13009
13045
  selectedCount > 0 && /* @__PURE__ */ jsx("span", { className: cn("ml-auto text-ui-sm text-accent1"), children: selectedCount })
13010
13046
  ] }),
13011
- /* @__PURE__ */ jsxs(PortalSubContent, { className: cn("max-h-[20rem]"), children: [
13047
+ /* @__PURE__ */ jsxs(DropdownMenu.SubContent, { className: cn("max-h-[20rem]"), children: [
13012
13048
  cat.values.length >= searchThreshold && /* @__PURE__ */ jsx(SubMenuSearch, { value: subSearch, onChange: setSubSearch, label: `Search ${cat.label.toLowerCase()}` }),
13013
13049
  mode === "single" ? /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, { value: selected[0] ?? "", onValueChange: (val) => handleSelect(cat.id, val, mode), children: cat.values.filter((v) => !subSearch || v.label.toLowerCase().includes(subSearch.toLowerCase())).map((v) => /* @__PURE__ */ jsx(DropdownMenu.RadioItem, { value: v.value, children: /* @__PURE__ */ jsx("span", { className: cn("truncate"), children: v.label }) }, v.value)) }) : cat.values.filter((v) => !subSearch || v.label.toLowerCase().includes(subSearch.toLowerCase())).map((v) => /* @__PURE__ */ jsx(
13014
13050
  DropdownMenu.CheckboxItem,
@@ -13072,7 +13108,7 @@ function SelectDataFilter({
13072
13108
  }
13073
13109
  return /* @__PURE__ */ jsxs(DropdownMenu.Sub, { children: [
13074
13110
  /* @__PURE__ */ jsx(DropdownMenu.SubTrigger, { children: group.label }),
13075
- /* @__PURE__ */ jsx(PortalSubContent, { className: cn("max-h-[20rem]"), children: group.items.map((cat) => renderCategory(cat)) })
13111
+ /* @__PURE__ */ jsx(DropdownMenu.SubContent, { className: cn("max-h-[20rem]"), children: group.items.map((cat) => renderCategory(cat)) })
13076
13112
  ] }, group.key);
13077
13113
  }),
13078
13114
  activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -16720,18 +16756,70 @@ function MetricsProvider({
16720
16756
  return /* @__PURE__ */ jsx(MetricsContext.Provider, { value, children });
16721
16757
  }
16722
16758
 
16759
+ const METRICS_PRESETS = [
16760
+ "last-24h",
16761
+ "last-3d",
16762
+ "last-7d",
16763
+ "last-14d",
16764
+ "last-30d",
16765
+ "custom"
16766
+ ];
16767
+ function toPickerPreset(preset) {
16768
+ switch (preset) {
16769
+ case "3d":
16770
+ return "last-3d";
16771
+ case "7d":
16772
+ return "last-7d";
16773
+ case "14d":
16774
+ return "last-14d";
16775
+ case "30d":
16776
+ return "last-30d";
16777
+ case "custom":
16778
+ return "custom";
16779
+ default:
16780
+ return "last-24h";
16781
+ }
16782
+ }
16783
+ function fromPickerPreset(preset) {
16784
+ switch (preset) {
16785
+ case "last-3d":
16786
+ return "3d";
16787
+ case "last-7d":
16788
+ return "7d";
16789
+ case "last-14d":
16790
+ return "14d";
16791
+ case "last-30d":
16792
+ return "30d";
16793
+ case "custom":
16794
+ return "custom";
16795
+ default:
16796
+ return "24h";
16797
+ }
16798
+ }
16723
16799
  function DateRangeSelector() {
16724
- const { datePreset, setDatePreset } = useMetrics();
16800
+ const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();
16801
+ const presetRef = useRef(datePreset);
16802
+ presetRef.current = datePreset;
16803
+ const customRangeRef = useRef(customRange);
16804
+ customRangeRef.current = customRange;
16725
16805
  return /* @__PURE__ */ jsx(
16726
- SelectFieldBlock,
16806
+ DateTimeRangePicker,
16727
16807
  {
16728
- name: "date-range",
16729
- labelIsHidden: true,
16730
- value: datePreset,
16731
- options: DATE_PRESETS.map((p) => ({ label: p.label, value: p.value })),
16732
- onValueChange: (value) => {
16733
- if (isValidPreset(value)) setDatePreset(value);
16734
- }
16808
+ preset: toPickerPreset(datePreset),
16809
+ onPresetChange: (next) => {
16810
+ const mapped = fromPickerPreset(next);
16811
+ presetRef.current = mapped;
16812
+ setDatePreset(mapped);
16813
+ },
16814
+ dateFrom: customRange?.from,
16815
+ dateTo: customRange?.to,
16816
+ onDateChange: (value, type) => {
16817
+ if (presetRef.current !== "custom") return;
16818
+ const next = { ...customRangeRef.current, [type]: value };
16819
+ customRangeRef.current = next;
16820
+ setCustomRange(next);
16821
+ },
16822
+ presets: METRICS_PRESETS
16735
16823
  }
16736
16824
  );
16737
16825
  }