@railtownai/railtracks-visualizer 0.0.58 → 0.0.60

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/cjs/index.js CHANGED
@@ -29,6 +29,12 @@ var LoadingOutlined = require('@ant-design/icons/es/icons/LoadingOutlined');
29
29
  var RcColorPicker = require('@rc-component/color-picker');
30
30
  var RightOutlined = require('@ant-design/icons/es/icons/RightOutlined');
31
31
  var RcCollapse = require('@rc-component/collapse');
32
+ var CheckCircleFilled = require('@ant-design/icons/es/icons/CheckCircleFilled');
33
+ var CloseCircleFilled = require('@ant-design/icons/es/icons/CloseCircleFilled');
34
+ var ExclamationCircleFilled = require('@ant-design/icons/es/icons/ExclamationCircleFilled');
35
+ var InfoCircleFilled = require('@ant-design/icons/es/icons/InfoCircleFilled');
36
+ var notification = require('@rc-component/notification');
37
+ var RcTooltip = require('@rc-component/tooltip');
32
38
  var RcTree = require('@rc-component/tree');
33
39
  var FileOutlined = require('@ant-design/icons/es/icons/FileOutlined');
34
40
  var FolderOpenOutlined = require('@ant-design/icons/es/icons/FolderOpenOutlined');
@@ -39,16 +45,10 @@ var HolderOutlined = require('@ant-design/icons/es/icons/HolderOutlined');
39
45
  var CaretDownFilled = require('@ant-design/icons/es/icons/CaretDownFilled');
40
46
  var MinusSquareOutlined = require('@ant-design/icons/es/icons/MinusSquareOutlined');
41
47
  var PlusSquareOutlined = require('@ant-design/icons/es/icons/PlusSquareOutlined');
42
- var CheckCircleFilled = require('@ant-design/icons/es/icons/CheckCircleFilled');
43
- var CloseCircleFilled = require('@ant-design/icons/es/icons/CloseCircleFilled');
44
- var ExclamationCircleFilled = require('@ant-design/icons/es/icons/ExclamationCircleFilled');
45
- var InfoCircleFilled = require('@ant-design/icons/es/icons/InfoCircleFilled');
46
- var notification = require('@rc-component/notification');
47
48
  var EditOutlined = require('@ant-design/icons/es/icons/EditOutlined');
48
49
  var ResizeObserver$1 = require('@rc-component/resize-observer');
49
50
  require('@rc-component/util/es/Dom/canUseDom');
50
51
  var styleChecker = require('@rc-component/util/es/Dom/styleChecker');
51
- var RcTooltip = require('@rc-component/tooltip');
52
52
  var EnterOutlined = require('@ant-design/icons/es/icons/EnterOutlined');
53
53
  var KeyCode = require('@rc-component/util/es/KeyCode');
54
54
  var RcTextArea = require('@rc-component/textarea');
@@ -57,9 +57,6 @@ var focus$1 = require('@rc-component/util/es/Dom/focus');
57
57
  var CheckOutlined = require('@ant-design/icons/es/icons/CheckOutlined');
58
58
  var CopyOutlined = require('@ant-design/icons/es/icons/CopyOutlined');
59
59
  var RcSwitch = require('@rc-component/switch');
60
- var EllipsisOutlined = require('@ant-design/icons/es/icons/EllipsisOutlined');
61
- var PlusOutlined = require('@ant-design/icons/es/icons/PlusOutlined');
62
- var RcTabs = require('@rc-component/tabs');
63
60
  var RcSelect = require('@rc-component/select');
64
61
  var DownOutlined = require('@ant-design/icons/es/icons/DownOutlined');
65
62
  var SearchOutlined = require('@ant-design/icons/es/icons/SearchOutlined');
@@ -70,6 +67,7 @@ var LeftOutlined = require('@ant-design/icons/es/icons/LeftOutlined');
70
67
  var RcDropdown = require('@rc-component/dropdown');
71
68
  var RcMenu = require('@rc-component/menu');
72
69
  var BarsOutlined = require('@ant-design/icons/es/icons/BarsOutlined');
70
+ var EllipsisOutlined = require('@ant-design/icons/es/icons/EllipsisOutlined');
73
71
  require('@rc-component/util/es/Dom/findDOMNode');
74
72
  var useColumns = require('@rc-component/table/es/hooks/useColumns');
75
73
  var DoubleLeftOutlined = require('@ant-design/icons/es/icons/DoubleLeftOutlined');
@@ -78,6 +76,8 @@ var RcPagination = require('@rc-component/pagination');
78
76
  var FilterFilled = require('@ant-design/icons/es/icons/FilterFilled');
79
77
  var CaretDownOutlined = require('@ant-design/icons/es/icons/CaretDownOutlined');
80
78
  var CaretUpOutlined = require('@ant-design/icons/es/icons/CaretUpOutlined');
79
+ var PlusOutlined = require('@ant-design/icons/es/icons/PlusOutlined');
80
+ var RcTabs = require('@rc-component/tabs');
81
81
 
82
82
  function _interopNamespaceDefault(e) {
83
83
  var n = Object.create(null);
@@ -12923,7 +12923,7 @@ const createLucideIcon = (iconName, iconNode)=>{
12923
12923
  return Component;
12924
12924
  };
12925
12925
 
12926
- const __iconNode$u = [
12926
+ const __iconNode$x = [
12927
12927
  [
12928
12928
  "path",
12929
12929
  {
@@ -12939,9 +12939,9 @@ const __iconNode$u = [
12939
12939
  }
12940
12940
  ]
12941
12941
  ];
12942
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$u);
12942
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$x);
12943
12943
 
12944
- const __iconNode$t = [
12944
+ const __iconNode$w = [
12945
12945
  [
12946
12946
  "path",
12947
12947
  {
@@ -12957,9 +12957,9 @@ const __iconNode$t = [
12957
12957
  }
12958
12958
  ]
12959
12959
  ];
12960
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$t);
12960
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$w);
12961
12961
 
12962
- const __iconNode$s = [
12962
+ const __iconNode$v = [
12963
12963
  [
12964
12964
  "path",
12965
12965
  {
@@ -13007,9 +13007,9 @@ const __iconNode$s = [
13007
13007
  }
13008
13008
  ]
13009
13009
  ];
13010
- const Bot = createLucideIcon("bot", __iconNode$s);
13010
+ const Bot = createLucideIcon("bot", __iconNode$v);
13011
13011
 
13012
- const __iconNode$r = [
13012
+ const __iconNode$u = [
13013
13013
  [
13014
13014
  "path",
13015
13015
  {
@@ -13043,9 +13043,9 @@ const __iconNode$r = [
13043
13043
  }
13044
13044
  ]
13045
13045
  ];
13046
- const Calendar = createLucideIcon("calendar", __iconNode$r);
13046
+ const Calendar = createLucideIcon("calendar", __iconNode$u);
13047
13047
 
13048
- const __iconNode$q = [
13048
+ const __iconNode$t = [
13049
13049
  [
13050
13050
  "path",
13051
13051
  {
@@ -13102,9 +13102,9 @@ const __iconNode$q = [
13102
13102
  }
13103
13103
  ]
13104
13104
  ];
13105
- const ChartNetwork = createLucideIcon("chart-network", __iconNode$q);
13105
+ const ChartNetwork = createLucideIcon("chart-network", __iconNode$t);
13106
13106
 
13107
- const __iconNode$p = [
13107
+ const __iconNode$s = [
13108
13108
  [
13109
13109
  "path",
13110
13110
  {
@@ -13113,9 +13113,9 @@ const __iconNode$p = [
13113
13113
  }
13114
13114
  ]
13115
13115
  ];
13116
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$p);
13116
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$s);
13117
13117
 
13118
- const __iconNode$o = [
13118
+ const __iconNode$r = [
13119
13119
  [
13120
13120
  "path",
13121
13121
  {
@@ -13124,9 +13124,9 @@ const __iconNode$o = [
13124
13124
  }
13125
13125
  ]
13126
13126
  ];
13127
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$o);
13127
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$r);
13128
13128
 
13129
- const __iconNode$n = [
13129
+ const __iconNode$q = [
13130
13130
  [
13131
13131
  "path",
13132
13132
  {
@@ -13142,9 +13142,9 @@ const __iconNode$n = [
13142
13142
  }
13143
13143
  ]
13144
13144
  ];
13145
- const ChevronsDown = createLucideIcon("chevrons-down", __iconNode$n);
13145
+ const ChevronsDown = createLucideIcon("chevrons-down", __iconNode$q);
13146
13146
 
13147
- const __iconNode$m = [
13147
+ const __iconNode$p = [
13148
13148
  [
13149
13149
  "path",
13150
13150
  {
@@ -13160,9 +13160,9 @@ const __iconNode$m = [
13160
13160
  }
13161
13161
  ]
13162
13162
  ];
13163
- const ChevronsUp = createLucideIcon("chevrons-up", __iconNode$m);
13163
+ const ChevronsUp = createLucideIcon("chevrons-up", __iconNode$p);
13164
13164
 
13165
- const __iconNode$l = [
13165
+ const __iconNode$o = [
13166
13166
  [
13167
13167
  "circle",
13168
13168
  {
@@ -13193,9 +13193,9 @@ const __iconNode$l = [
13193
13193
  }
13194
13194
  ]
13195
13195
  ];
13196
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$l);
13196
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$o);
13197
13197
 
13198
- const __iconNode$k = [
13198
+ const __iconNode$n = [
13199
13199
  [
13200
13200
  "path",
13201
13201
  {
@@ -13211,9 +13211,36 @@ const __iconNode$k = [
13211
13211
  }
13212
13212
  ]
13213
13213
  ];
13214
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$k);
13214
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$n);
13215
13215
 
13216
- const __iconNode$j = [
13216
+ const __iconNode$m = [
13217
+ [
13218
+ "circle",
13219
+ {
13220
+ cx: "12",
13221
+ cy: "12",
13222
+ r: "10",
13223
+ key: "1mglay"
13224
+ }
13225
+ ],
13226
+ [
13227
+ "path",
13228
+ {
13229
+ d: "M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8",
13230
+ key: "1h4pet"
13231
+ }
13232
+ ],
13233
+ [
13234
+ "path",
13235
+ {
13236
+ d: "M12 18V6",
13237
+ key: "zqpxq5"
13238
+ }
13239
+ ]
13240
+ ];
13241
+ const CircleDollarSign = createLucideIcon("circle-dollar-sign", __iconNode$m);
13242
+
13243
+ const __iconNode$l = [
13217
13244
  [
13218
13245
  "circle",
13219
13246
  {
@@ -13231,9 +13258,9 @@ const __iconNode$j = [
13231
13258
  }
13232
13259
  ]
13233
13260
  ];
13234
- const Clock = createLucideIcon("clock", __iconNode$j);
13261
+ const Clock = createLucideIcon("clock", __iconNode$l);
13235
13262
 
13236
- const __iconNode$i = [
13263
+ const __iconNode$k = [
13237
13264
  [
13238
13265
  "path",
13239
13266
  {
@@ -13249,9 +13276,9 @@ const __iconNode$i = [
13249
13276
  }
13250
13277
  ]
13251
13278
  ];
13252
- const CloudLightning = createLucideIcon("cloud-lightning", __iconNode$i);
13279
+ const CloudLightning = createLucideIcon("cloud-lightning", __iconNode$k);
13253
13280
 
13254
- const __iconNode$h = [
13281
+ const __iconNode$j = [
13255
13282
  [
13256
13283
  "rect",
13257
13284
  {
@@ -13272,9 +13299,9 @@ const __iconNode$h = [
13272
13299
  }
13273
13300
  ]
13274
13301
  ];
13275
- const Copy = createLucideIcon("copy", __iconNode$h);
13302
+ const Copy = createLucideIcon("copy", __iconNode$j);
13276
13303
 
13277
- const __iconNode$g = [
13304
+ const __iconNode$i = [
13278
13305
  [
13279
13306
  "path",
13280
13307
  {
@@ -13382,9 +13409,9 @@ const __iconNode$g = [
13382
13409
  }
13383
13410
  ]
13384
13411
  ];
13385
- const Cpu = createLucideIcon("cpu", __iconNode$g);
13412
+ const Cpu = createLucideIcon("cpu", __iconNode$i);
13386
13413
 
13387
- const __iconNode$f = [
13414
+ const __iconNode$h = [
13388
13415
  [
13389
13416
  "line",
13390
13417
  {
@@ -13403,9 +13430,9 @@ const __iconNode$f = [
13403
13430
  }
13404
13431
  ]
13405
13432
  ];
13406
- const DollarSign = createLucideIcon("dollar-sign", __iconNode$f);
13433
+ const DollarSign = createLucideIcon("dollar-sign", __iconNode$h);
13407
13434
 
13408
- const __iconNode$e = [
13435
+ const __iconNode$g = [
13409
13436
  [
13410
13437
  "path",
13411
13438
  {
@@ -13435,9 +13462,9 @@ const __iconNode$e = [
13435
13462
  }
13436
13463
  ]
13437
13464
  ];
13438
- const FileInput = createLucideIcon("file-input", __iconNode$e);
13465
+ const FileInput = createLucideIcon("file-input", __iconNode$g);
13439
13466
 
13440
- const __iconNode$d = [
13467
+ const __iconNode$f = [
13441
13468
  [
13442
13469
  "path",
13443
13470
  {
@@ -13467,9 +13494,69 @@ const __iconNode$d = [
13467
13494
  }
13468
13495
  ]
13469
13496
  ];
13470
- const FileOutput = createLucideIcon("file-output", __iconNode$d);
13497
+ const FileOutput = createLucideIcon("file-output", __iconNode$f);
13471
13498
 
13472
- const __iconNode$c = [
13499
+ const __iconNode$e = [
13500
+ [
13501
+ "path",
13502
+ {
13503
+ d: "M12 22v-6",
13504
+ key: "6o8u61"
13505
+ }
13506
+ ],
13507
+ [
13508
+ "path",
13509
+ {
13510
+ d: "M12 8V2",
13511
+ key: "1wkif3"
13512
+ }
13513
+ ],
13514
+ [
13515
+ "path",
13516
+ {
13517
+ d: "M4 12H2",
13518
+ key: "rhcxmi"
13519
+ }
13520
+ ],
13521
+ [
13522
+ "path",
13523
+ {
13524
+ d: "M10 12H8",
13525
+ key: "s88cx1"
13526
+ }
13527
+ ],
13528
+ [
13529
+ "path",
13530
+ {
13531
+ d: "M16 12h-2",
13532
+ key: "10asgb"
13533
+ }
13534
+ ],
13535
+ [
13536
+ "path",
13537
+ {
13538
+ d: "M22 12h-2",
13539
+ key: "14jgyd"
13540
+ }
13541
+ ],
13542
+ [
13543
+ "path",
13544
+ {
13545
+ d: "m15 19-3-3-3 3",
13546
+ key: "e37ymu"
13547
+ }
13548
+ ],
13549
+ [
13550
+ "path",
13551
+ {
13552
+ d: "m15 5-3 3-3-3",
13553
+ key: "19d6lf"
13554
+ }
13555
+ ]
13556
+ ];
13557
+ const FoldVertical = createLucideIcon("fold-vertical", __iconNode$e);
13558
+
13559
+ const __iconNode$d = [
13473
13560
  [
13474
13561
  "line",
13475
13562
  {
@@ -13511,9 +13598,9 @@ const __iconNode$c = [
13511
13598
  }
13512
13599
  ]
13513
13600
  ];
13514
- const Hash = createLucideIcon("hash", __iconNode$c);
13601
+ const Hash = createLucideIcon("hash", __iconNode$d);
13515
13602
 
13516
- const __iconNode$b = [
13603
+ const __iconNode$c = [
13517
13604
  [
13518
13605
  "circle",
13519
13606
  {
@@ -13538,9 +13625,9 @@ const __iconNode$b = [
13538
13625
  }
13539
13626
  ]
13540
13627
  ];
13541
- const Info = createLucideIcon("info", __iconNode$b);
13628
+ const Info = createLucideIcon("info", __iconNode$c);
13542
13629
 
13543
- const __iconNode$a = [
13630
+ const __iconNode$b = [
13544
13631
  [
13545
13632
  "path",
13546
13633
  {
@@ -13577,9 +13664,9 @@ const __iconNode$a = [
13577
13664
  }
13578
13665
  ]
13579
13666
  ];
13580
- const ListChecks = createLucideIcon("list-checks", __iconNode$a);
13667
+ const ListChecks = createLucideIcon("list-checks", __iconNode$b);
13581
13668
 
13582
- const __iconNode$9 = [
13669
+ const __iconNode$a = [
13583
13670
  [
13584
13671
  "path",
13585
13672
  {
@@ -13595,9 +13682,9 @@ const __iconNode$9 = [
13595
13682
  }
13596
13683
  ]
13597
13684
  ];
13598
- const MessagesSquare = createLucideIcon("messages-square", __iconNode$9);
13685
+ const MessagesSquare = createLucideIcon("messages-square", __iconNode$a);
13599
13686
 
13600
- const __iconNode$8 = [
13687
+ const __iconNode$9 = [
13601
13688
  [
13602
13689
  "path",
13603
13690
  {
@@ -13606,9 +13693,9 @@ const __iconNode$8 = [
13606
13693
  }
13607
13694
  ]
13608
13695
  ];
13609
- const MessageSquare = createLucideIcon("message-square", __iconNode$8);
13696
+ const MessageSquare = createLucideIcon("message-square", __iconNode$9);
13610
13697
 
13611
- const __iconNode$7 = [
13698
+ const __iconNode$8 = [
13612
13699
  [
13613
13700
  "rect",
13614
13701
  {
@@ -13628,9 +13715,9 @@ const __iconNode$7 = [
13628
13715
  }
13629
13716
  ]
13630
13717
  ];
13631
- const PanelLeft = createLucideIcon("panel-left", __iconNode$7);
13718
+ const PanelLeft = createLucideIcon("panel-left", __iconNode$8);
13632
13719
 
13633
- const __iconNode$6 = [
13720
+ const __iconNode$7 = [
13634
13721
  [
13635
13722
  "path",
13636
13723
  {
@@ -13660,9 +13747,9 @@ const __iconNode$6 = [
13660
13747
  }
13661
13748
  ]
13662
13749
  ];
13663
- const RefreshCw = createLucideIcon("refresh-cw", __iconNode$6);
13750
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$7);
13664
13751
 
13665
- const __iconNode$5 = [
13752
+ const __iconNode$6 = [
13666
13753
  [
13667
13754
  "path",
13668
13755
  {
@@ -13699,9 +13786,9 @@ const __iconNode$5 = [
13699
13786
  }
13700
13787
  ]
13701
13788
  ];
13702
- const Scale = createLucideIcon("scale", __iconNode$5);
13789
+ const Scale = createLucideIcon("scale", __iconNode$6);
13703
13790
 
13704
- const __iconNode$4 = [
13791
+ const __iconNode$5 = [
13705
13792
  [
13706
13793
  "path",
13707
13794
  {
@@ -13724,9 +13811,9 @@ const __iconNode$4 = [
13724
13811
  }
13725
13812
  ]
13726
13813
  ];
13727
- const Share = createLucideIcon("share", __iconNode$4);
13814
+ const Share = createLucideIcon("share", __iconNode$5);
13728
13815
 
13729
- const __iconNode$3 = [
13816
+ const __iconNode$4 = [
13730
13817
  [
13731
13818
  "circle",
13732
13819
  {
@@ -13755,9 +13842,9 @@ const __iconNode$3 = [
13755
13842
  }
13756
13843
  ]
13757
13844
  ];
13758
- const Target = createLucideIcon("target", __iconNode$3);
13845
+ const Target = createLucideIcon("target", __iconNode$4);
13759
13846
 
13760
- const __iconNode$2 = [
13847
+ const __iconNode$3 = [
13761
13848
  [
13762
13849
  "line",
13763
13850
  {
@@ -13788,7 +13875,67 @@ const __iconNode$2 = [
13788
13875
  }
13789
13876
  ]
13790
13877
  ];
13791
- const Timer = createLucideIcon("timer", __iconNode$2);
13878
+ const Timer = createLucideIcon("timer", __iconNode$3);
13879
+
13880
+ const __iconNode$2 = [
13881
+ [
13882
+ "path",
13883
+ {
13884
+ d: "M12 22v-6",
13885
+ key: "6o8u61"
13886
+ }
13887
+ ],
13888
+ [
13889
+ "path",
13890
+ {
13891
+ d: "M12 8V2",
13892
+ key: "1wkif3"
13893
+ }
13894
+ ],
13895
+ [
13896
+ "path",
13897
+ {
13898
+ d: "M4 12H2",
13899
+ key: "rhcxmi"
13900
+ }
13901
+ ],
13902
+ [
13903
+ "path",
13904
+ {
13905
+ d: "M10 12H8",
13906
+ key: "s88cx1"
13907
+ }
13908
+ ],
13909
+ [
13910
+ "path",
13911
+ {
13912
+ d: "M16 12h-2",
13913
+ key: "10asgb"
13914
+ }
13915
+ ],
13916
+ [
13917
+ "path",
13918
+ {
13919
+ d: "M22 12h-2",
13920
+ key: "14jgyd"
13921
+ }
13922
+ ],
13923
+ [
13924
+ "path",
13925
+ {
13926
+ d: "m15 19-3 3-3-3",
13927
+ key: "11eu04"
13928
+ }
13929
+ ],
13930
+ [
13931
+ "path",
13932
+ {
13933
+ d: "m15 5-3-3-3 3",
13934
+ key: "itvq4r"
13935
+ }
13936
+ ]
13937
+ ];
13938
+ const UnfoldVertical = createLucideIcon("unfold-vertical", __iconNode$2);
13792
13939
 
13793
13940
  const __iconNode$1 = [
13794
13941
  [
@@ -15973,19 +16120,18 @@ const useComponentTheme = (themeProp)=>{
15973
16120
  return themeProp || contextTheme;
15974
16121
  };
15975
16122
 
15976
- const Edge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, markerEnd, bidirectional = false, data, clientToSvgCoords, svgRef })=>{
16123
+ const Edge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, animated = false, style = {}, markerEnd, bidirectional = false, data, clientToSvgCoords, svgRef })=>{
15977
16124
  const [isHovered, setIsHovered] = React.useState(false);
15978
16125
  const { theme } = useTheme$1();
15979
16126
  const themeColors = theme.colors;
15980
- // Function to determine stroke color based on edge status and theme
15981
16127
  const getStrokeColor = ()=>{
15982
16128
  const status = data?.details?.status;
15983
- data?.details?.output;
15984
- // Check for error indicators
15985
- const hasError = status === "Failed";
15986
- if (hasError) {
16129
+ if (status === "Failed") {
15987
16130
  return themeColors.destructive;
15988
16131
  }
16132
+ if (animated) {
16133
+ return themeColors.primary;
16134
+ }
15989
16135
  return themeColors.mutedForeground;
15990
16136
  };
15991
16137
  const [edgePath] = React.useMemo(()=>{
@@ -20873,6 +21019,25 @@ function cn(...inputs) {
20873
21019
  }
20874
21020
  return text.substring(0, maxLength - 3) + "...";
20875
21021
  }
21022
+ /**
21023
+ * True for plain object literals (own enumerable keys, not arrays, Date, etc.).
21024
+ */ function isPlainObject(value) {
21025
+ return value !== null && typeof value === "object" && !Array.isArray(value) && value.constructor === Object;
21026
+ }
21027
+ /**
21028
+ * Escapes `\` and `.` in a segment so dot-delimited path keys stay unambiguous (e.g. JSON tree UIs).
21029
+ */ function escapeDotPathSegment(segment) {
21030
+ return segment.replace(/\\/g, "\\\\").replace(/\./g, "\\.");
21031
+ }
21032
+ /**
21033
+ * Compact JSON-like string for tree / debug views: strings use JSON quoting; null and undefined as words.
21034
+ */ function formatJsonTreePrimitive(value) {
21035
+ if (value === null) return "null";
21036
+ if (value === undefined) return "undefined";
21037
+ if (typeof value === "string") return JSON.stringify(value);
21038
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
21039
+ return String(value);
21040
+ }
20876
21041
  /**
20877
21042
  * Styled-components utility for conditional styling
20878
21043
  * @param condition - The condition to check
@@ -21148,500 +21313,6 @@ const AppleIcon = ({ width = "1.5rem", height = "1.5rem" })=>/*#__PURE__*/ React
21148
21313
  d: "M18.71 19.5C17.88 20.74 17 21.95 15.66 21.97C14.32 22 13.89 21.18 12.37 21.18C10.84 21.18 10.37 21.95 9.09997 22C7.78997 22.05 6.79997 20.68 5.95997 19.47C4.24997 17 2.93997 12.45 4.69997 9.39C5.56997 7.87 7.12997 6.91 8.81997 6.88C10.1 6.86 11.32 7.75 12.11 7.75C12.89 7.75 14.37 6.68 15.92 6.84C16.57 6.87 18.39 7.1 19.56 8.82C19.47 8.88 17.39 10.1 17.41 12.63C17.44 15.65 20.06 16.66 20.09 16.67C20.06 16.74 19.67 18.11 18.71 19.5ZM13 3.5C13.73 2.67 14.94 2.04 15.94 2C16.07 3.17 15.6 4.35 14.9 5.19C14.21 6.04 13.07 6.7 11.95 6.61C11.8 5.46 12.36 4.26 13 3.5Z"
21149
21314
  }));
21150
21315
 
21151
- const TooltipContainer = styled.div`
21152
- position: relative;
21153
- display: inline-block;
21154
- `;
21155
- const TooltipContent = styled.div`
21156
- position: absolute;
21157
- z-index: 1000;
21158
- padding: 8px 12px;
21159
- font-weight: 400;
21160
- background-color: ${({ themeColors })=>themeColors.popover};
21161
- color: ${({ themeColors })=>themeColors.popoverForeground};
21162
- border: 1px solid ${({ themeColors })=>themeColors.border};
21163
- border-radius: 6px;
21164
- font-size: 12px;
21165
- line-height: 1.4;
21166
- white-space: nowrap;
21167
- box-shadow:
21168
- 0 4px 6px -1px rgba(0, 0, 0, 0.1),
21169
- 0 2px 4px -1px rgba(0, 0, 0, 0.06);
21170
- opacity: ${({ isVisible })=>isVisible ? 1 : 0};
21171
- visibility: ${({ isVisible })=>isVisible ? "visible" : "hidden"};
21172
- transition:
21173
- opacity 0.15s ease-in-out,
21174
- visibility 0.15s ease-in-out;
21175
- pointer-events: none;
21176
-
21177
- /* Arrow */
21178
- &::before {
21179
- content: "";
21180
- position: absolute;
21181
- width: 0;
21182
- height: 0;
21183
- border: 4px solid transparent;
21184
- }
21185
-
21186
- /* Placement-specific positioning and arrow */
21187
- ${({ placement, themeColors })=>{
21188
- switch(placement){
21189
- case "top":
21190
- return `
21191
- bottom: 100%;
21192
- left: 50%;
21193
- transform: translateX(-50%);
21194
- margin-bottom: 8px;
21195
- &::before {
21196
- top: 100%;
21197
- left: 50%;
21198
- transform: translateX(-50%);
21199
- border-top-color: ${themeColors.border};
21200
- }
21201
- &::after {
21202
- content: "";
21203
- position: absolute;
21204
- top: 100%;
21205
- left: 50%;
21206
- transform: translateX(-50%);
21207
- width: 0;
21208
- height: 0;
21209
- border: 3px solid transparent;
21210
- border-top-color: ${themeColors.popover};
21211
- }
21212
- `;
21213
- case "bottom":
21214
- return `
21215
- top: 100%;
21216
- left: 50%;
21217
- transform: translateX(-50%);
21218
- margin-top: 8px;
21219
- &::before {
21220
- bottom: 100%;
21221
- left: 50%;
21222
- transform: translateX(-50%);
21223
- border-bottom-color: ${themeColors.border};
21224
- }
21225
- &::after {
21226
- content: "";
21227
- position: absolute;
21228
- bottom: 100%;
21229
- left: 50%;
21230
- transform: translateX(-50%);
21231
- width: 0;
21232
- height: 0;
21233
- border: 3px solid transparent;
21234
- border-bottom-color: ${themeColors.popover};
21235
- }
21236
- `;
21237
- case "left":
21238
- return `
21239
- right: 100%;
21240
- top: 50%;
21241
- transform: translateY(-50%);
21242
- margin-right: 8px;
21243
- &::before {
21244
- left: 100%;
21245
- top: 50%;
21246
- transform: translateY(-50%);
21247
- border-left-color: ${themeColors.border};
21248
- }
21249
- &::after {
21250
- content: "";
21251
- position: absolute;
21252
- left: 100%;
21253
- top: 50%;
21254
- transform: translateY(-50%);
21255
- width: 0;
21256
- height: 0;
21257
- border: 3px solid transparent;
21258
- border-left-color: ${themeColors.popover};
21259
- }
21260
- `;
21261
- case "right":
21262
- return `
21263
- left: 100%;
21264
- top: 50%;
21265
- transform: translateY(-50%);
21266
- margin-left: 8px;
21267
- &::before {
21268
- right: 100%;
21269
- top: 50%;
21270
- transform: translateY(-50%);
21271
- border-right-color: ${themeColors.border};
21272
- }
21273
- &::after {
21274
- content: "";
21275
- position: absolute;
21276
- right: 100%;
21277
- top: 50%;
21278
- transform: translateY(-50%);
21279
- width: 0;
21280
- height: 0;
21281
- border: 3px solid transparent;
21282
- border-right-color: ${themeColors.popover};
21283
- }
21284
- `;
21285
- case "topLeft":
21286
- return `
21287
- bottom: 100%;
21288
- right: 0;
21289
- margin-bottom: 8px;
21290
- &::before {
21291
- top: 100%;
21292
- right: 8px;
21293
- border-top-color: ${themeColors.border};
21294
- }
21295
- &::after {
21296
- content: "";
21297
- position: absolute;
21298
- top: 100%;
21299
- right: 8px;
21300
- width: 0;
21301
- height: 0;
21302
- border: 3px solid transparent;
21303
- border-top-color: ${themeColors.popover};
21304
- }
21305
- `;
21306
- case "topRight":
21307
- return `
21308
- bottom: 100%;
21309
- left: 0;
21310
- margin-bottom: 8px;
21311
- &::before {
21312
- top: 100%;
21313
- left: 8px;
21314
- border-top-color: ${themeColors.border};
21315
- }
21316
- &::after {
21317
- content: "";
21318
- position: absolute;
21319
- top: 100%;
21320
- left: 8px;
21321
- width: 0;
21322
- height: 0;
21323
- border: 3px solid transparent;
21324
- border-top-color: ${themeColors.popover};
21325
- }
21326
- `;
21327
- case "bottomLeft":
21328
- return `
21329
- top: 100%;
21330
- right: 0;
21331
- margin-top: 8px;
21332
- &::before {
21333
- bottom: 100%;
21334
- right: 8px;
21335
- border-bottom-color: ${themeColors.border};
21336
- }
21337
- &::after {
21338
- content: "";
21339
- position: absolute;
21340
- bottom: 100%;
21341
- right: 8px;
21342
- width: 0;
21343
- height: 0;
21344
- border: 3px solid transparent;
21345
- border-bottom-color: ${themeColors.popover};
21346
- }
21347
- `;
21348
- case "bottomRight":
21349
- return `
21350
- top: 100%;
21351
- left: 0;
21352
- margin-top: 8px;
21353
- &::before {
21354
- bottom: 100%;
21355
- left: 8px;
21356
- border-bottom-color: ${themeColors.border};
21357
- }
21358
- &::after {
21359
- content: "";
21360
- position: absolute;
21361
- bottom: 100%;
21362
- left: 8px;
21363
- width: 0;
21364
- height: 0;
21365
- border: 3px solid transparent;
21366
- border-bottom-color: ${themeColors.popover};
21367
- }
21368
- `;
21369
- case "leftTop":
21370
- return `
21371
- right: 100%;
21372
- bottom: 0;
21373
- margin-right: 8px;
21374
- &::before {
21375
- left: 100%;
21376
- bottom: 8px;
21377
- border-left-color: ${themeColors.border};
21378
- }
21379
- &::after {
21380
- content: "";
21381
- position: absolute;
21382
- left: 100%;
21383
- bottom: 8px;
21384
- width: 0;
21385
- height: 0;
21386
- border: 3px solid transparent;
21387
- border-left-color: ${themeColors.popover};
21388
- }
21389
- `;
21390
- case "leftBottom":
21391
- return `
21392
- right: 100%;
21393
- top: 0;
21394
- margin-right: 8px;
21395
- &::before {
21396
- left: 100%;
21397
- top: 8px;
21398
- border-left-color: ${themeColors.border};
21399
- }
21400
- &::after {
21401
- content: "";
21402
- position: absolute;
21403
- left: 100%;
21404
- top: 8px;
21405
- width: 0;
21406
- height: 0;
21407
- border: 3px solid transparent;
21408
- border-left-color: ${themeColors.popover};
21409
- }
21410
- `;
21411
- case "rightTop":
21412
- return `
21413
- left: 100%;
21414
- bottom: 0;
21415
- margin-left: 8px;
21416
- &::before {
21417
- right: 100%;
21418
- bottom: 8px;
21419
- border-right-color: ${themeColors.border};
21420
- }
21421
- &::after {
21422
- content: "";
21423
- position: absolute;
21424
- right: 100%;
21425
- bottom: 8px;
21426
- width: 0;
21427
- height: 0;
21428
- border: 3px solid transparent;
21429
- border-right-color: ${themeColors.popover};
21430
- }
21431
- `;
21432
- case "rightBottom":
21433
- return `
21434
- left: 100%;
21435
- top: 0;
21436
- margin-left: 8px;
21437
- &::before {
21438
- right: 100%;
21439
- top: 8px;
21440
- border-right-color: ${themeColors.border};
21441
- }
21442
- &::after {
21443
- content: "";
21444
- position: absolute;
21445
- right: 100%;
21446
- top: 8px;
21447
- width: 0;
21448
- height: 0;
21449
- border: 3px solid transparent;
21450
- border-right-color: ${themeColors.popover};
21451
- }
21452
- `;
21453
- default:
21454
- return `
21455
- bottom: 100%;
21456
- left: 50%;
21457
- transform: translateX(-50%);
21458
- margin-bottom: 8px;
21459
- &::before {
21460
- top: 100%;
21461
- left: 50%;
21462
- transform: translateX(-50%);
21463
- border-top-color: ${themeColors.border};
21464
- }
21465
- &::after {
21466
- content: "";
21467
- position: absolute;
21468
- top: 100%;
21469
- left: 50%;
21470
- transform: translateX(-50%);
21471
- width: 0;
21472
- height: 0;
21473
- border: 3px solid transparent;
21474
- border-top-color: ${themeColors.popover};
21475
- }
21476
- `;
21477
- }
21478
- }}
21479
- `;
21480
- const Tooltip$1 = ({ children, content, placement = "top", delay = 300 })=>{
21481
- const { theme } = useTheme$1();
21482
- const [isVisible, setIsVisible] = React__namespace.useState(false);
21483
- const timeoutRef = React__namespace.useRef();
21484
- const showTooltip = ()=>{
21485
- if (timeoutRef.current) {
21486
- clearTimeout(timeoutRef.current);
21487
- }
21488
- timeoutRef.current = setTimeout(()=>{
21489
- setIsVisible(true);
21490
- }, delay);
21491
- };
21492
- const hideTooltip = ()=>{
21493
- if (timeoutRef.current) {
21494
- clearTimeout(timeoutRef.current);
21495
- }
21496
- setIsVisible(false);
21497
- };
21498
- React__namespace.useEffect(()=>{
21499
- return ()=>{
21500
- if (timeoutRef.current) {
21501
- clearTimeout(timeoutRef.current);
21502
- }
21503
- };
21504
- }, []);
21505
- return /*#__PURE__*/ React__namespace.createElement(TooltipContainer, {
21506
- onMouseEnter: showTooltip,
21507
- onMouseLeave: hideTooltip,
21508
- onFocus: showTooltip,
21509
- onBlur: hideTooltip
21510
- }, children, /*#__PURE__*/ React__namespace.createElement(TooltipContent, {
21511
- isVisible: isVisible,
21512
- placement: placement,
21513
- themeColors: theme.colors,
21514
- role: "tooltip"
21515
- }, content));
21516
- };
21517
-
21518
- const BadgeContainer$3 = styled.div`
21519
- display: inline-flex;
21520
- align-items: center;
21521
- border-radius: 9999px;
21522
- border: 1px solid transparent;
21523
- padding: 0.125rem 0.625rem;
21524
- font-size: 0.75rem;
21525
- font-weight: 600;
21526
- transition: colors 0.2s ease-in-out;
21527
- outline: none;
21528
-
21529
- &:focus {
21530
- outline: none;
21531
- box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2);
21532
- }
21533
-
21534
- ${({ variant, themeColors })=>{
21535
- switch(variant){
21536
- case "default":
21537
- return `
21538
- background-color: ${themeColors.primary};
21539
- color: ${themeColors.primaryForeground};
21540
- &:hover {
21541
- background-color: ${themeColors.primary};
21542
- opacity: 0.9;
21543
- }
21544
- `;
21545
- case "secondary":
21546
- return `
21547
- background-color: ${themeColors.secondary};
21548
- color: ${themeColors.secondaryForeground};
21549
- &:hover {
21550
- background-color: ${themeColors.muted};
21551
- }
21552
- `;
21553
- case "destructive":
21554
- return `
21555
- background-color: ${themeColors.destructive};
21556
- color: ${themeColors.destructiveForeground};
21557
- &:hover {
21558
- background-color: ${themeColors.destructive};
21559
- opacity: 0.9;
21560
- }
21561
- `;
21562
- case "outline":
21563
- return `
21564
- background-color: transparent;
21565
- color: ${themeColors.cardForeground};
21566
- border-color: ${themeColors.border};
21567
- `;
21568
- case "cost":
21569
- return `
21570
- background-color: ${themeColors.secondary};
21571
- color: ${themeColors.secondaryForeground};
21572
- &:hover {
21573
- background-color: ${themeColors.muted};
21574
- }
21575
- `;
21576
- case "gray":
21577
- return `
21578
- background-color: ${themeColors.secondary};
21579
- color: ${themeColors.secondaryForeground};
21580
- &:hover {
21581
- background-color: ${themeColors.muted};
21582
- }
21583
- `;
21584
- case "latency":
21585
- return `
21586
- background-color: ${themeColors.secondary};
21587
- color: ${themeColors.secondaryForeground};
21588
- &:hover {
21589
- background-color: ${themeColors.muted};
21590
- }
21591
- `;
21592
- case "latencyLow":
21593
- return `
21594
- background-color: ${themeColors.secondary};
21595
- color: ${themeColors.secondaryForeground};
21596
- &:hover {
21597
- background-color: ${themeColors.muted};
21598
- }
21599
- `;
21600
- case "latencyMedium":
21601
- return `
21602
- background-color: ${themeColors.secondary};
21603
- color: ${themeColors.secondaryForeground};
21604
- &:hover {
21605
- background-color: ${themeColors.muted};
21606
- }
21607
- `;
21608
- case "latencyHigh":
21609
- return `
21610
- background-color: ${themeColors.destructive};
21611
- color: ${themeColors.destructiveForeground};
21612
- &:hover {
21613
- background-color: ${themeColors.destructive};
21614
- opacity: 0.9;
21615
- }
21616
- `;
21617
- default:
21618
- return `
21619
- background-color: ${themeColors.primary};
21620
- color: ${themeColors.primaryForeground};
21621
- &:hover {
21622
- background-color: ${themeColors.primary};
21623
- opacity: 0.9;
21624
- }
21625
- `;
21626
- }
21627
- }}
21628
- `;
21629
- const Badge = ({ variant = "default", children, title, placement = "top" })=>{
21630
- const { theme } = useTheme$1();
21631
- const themeColors = theme.colors;
21632
- const badgeContent = /*#__PURE__*/ React__namespace.createElement(BadgeContainer$3, {
21633
- variant: variant,
21634
- themeColors: themeColors
21635
- }, children);
21636
- if (title) {
21637
- return /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
21638
- content: title,
21639
- placement: placement
21640
- }, badgeContent);
21641
- }
21642
- return badgeContent;
21643
- };
21644
-
21645
21316
  function noop$2() {}
21646
21317
  const { resetWarned: rcResetWarned } = util.warning;
21647
21318
  let deprecatedWarnList = null;
@@ -23668,7 +23339,7 @@ const genActionStyle = (token)=>{
23668
23339
  }
23669
23340
  };
23670
23341
  };
23671
- const prepareComponentToken$n = (token)=>{
23342
+ const prepareComponentToken$m = (token)=>{
23672
23343
  const paddingHorizontal = 12; // Fixed value here.
23673
23344
  return {
23674
23345
  withDescriptionIconSize: token.fontSizeHeading3,
@@ -23676,11 +23347,11 @@ const prepareComponentToken$n = (token)=>{
23676
23347
  withDescriptionPadding: `${token.paddingMD}px ${token.paddingContentHorizontalLG}px`
23677
23348
  };
23678
23349
  };
23679
- var useStyle$u = genStyleHooks('Alert', (token)=>[
23350
+ var useStyle$t = genStyleHooks('Alert', (token)=>[
23680
23351
  genBaseStyle$6(token),
23681
23352
  genTypeStyle(token),
23682
23353
  genActionStyle(token)
23683
- ], prepareComponentToken$n);
23354
+ ], prepareComponentToken$m);
23684
23355
 
23685
23356
  const IconNode = (props)=>{
23686
23357
  const { icon, type, className, style, successIcon, infoIcon, warningIcon, errorIcon } = props;
@@ -23732,7 +23403,7 @@ const Alert$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref$1)=>{
23732
23403
  }));
23733
23404
  const { getPrefixCls, direction, closable: contextClosable, closeIcon: contextCloseIcon, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles, successIcon, infoIcon, warningIcon, errorIcon } = useComponentConfig('alert');
23734
23405
  const prefixCls = getPrefixCls('alert', customizePrefixCls);
23735
- const [hashId, cssVarCls] = useStyle$u(prefixCls);
23406
+ const [hashId, cssVarCls] = useStyle$t(prefixCls);
23736
23407
  const { onClose: closableOnClose, afterClose: closableAfterClose } = closable && typeof closable === 'object' ? closable : {};
23737
23408
  const handleClose = (e)=>{
23738
23409
  setClosed(true);
@@ -24772,19 +24443,19 @@ const genMessageStyle = (token)=>{
24772
24443
  }
24773
24444
  ];
24774
24445
  };
24775
- const prepareComponentToken$m = (token)=>({
24446
+ const prepareComponentToken$l = (token)=>({
24776
24447
  zIndexPopup: token.zIndexPopupBase + CONTAINER_MAX_OFFSET + 10,
24777
24448
  contentBg: token.colorBgElevated,
24778
24449
  contentPadding: `${(token.controlHeightLG - token.fontSize * token.lineHeight) / 2}px ${token.paddingSM}px`
24779
24450
  });
24780
24451
  // ============================== Export ==============================
24781
- var useStyle$t = genStyleHooks('Message', (token)=>{
24452
+ var useStyle$s = genStyleHooks('Message', (token)=>{
24782
24453
  // Gen-style functions here
24783
24454
  const combinedToken = cssinjsUtils.mergeToken(token, {
24784
24455
  height: 150
24785
24456
  });
24786
24457
  return genMessageStyle(combinedToken);
24787
- }, prepareComponentToken$m);
24458
+ }, prepareComponentToken$l);
24788
24459
 
24789
24460
  const TypeIcon = {
24790
24461
  info: /*#__PURE__*/ React__namespace.createElement(InfoCircleFilled, null),
@@ -24818,7 +24489,7 @@ const PureContent = (props)=>{
24818
24489
  const { getPrefixCls, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles } = useComponentConfig('message');
24819
24490
  const prefixCls = staticPrefixCls || getPrefixCls('message');
24820
24491
  const rootCls = useCSSVarCls(prefixCls);
24821
- const [hashId, cssVarCls] = useStyle$t(prefixCls, rootCls);
24492
+ const [hashId, cssVarCls] = useStyle$s(prefixCls, rootCls);
24822
24493
  const [mergedClassNames, mergedStyles] = useMergeSemantic([
24823
24494
  contextClassNames,
24824
24495
  messageClassNames
@@ -24873,7 +24544,7 @@ const DEFAULT_OFFSET = 8;
24873
24544
  const DEFAULT_DURATION = 3;
24874
24545
  const Wrapper = ({ children, prefixCls })=>{
24875
24546
  const rootCls = useCSSVarCls(prefixCls);
24876
- const [hashId, cssVarCls] = useStyle$t(prefixCls, rootCls);
24547
+ const [hashId, cssVarCls] = useStyle$s(prefixCls, rootCls);
24877
24548
  return /*#__PURE__*/ React__namespace.createElement(notification.NotificationProvider, {
24878
24549
  classNames: {
24879
24550
  list: clsx(hashId, cssVarCls, rootCls)
@@ -25151,7 +24822,7 @@ const genWaveStyle = (token)=>{
25151
24822
  }
25152
24823
  };
25153
24824
  };
25154
- var useStyle$s = genComponentStyleHook('Wave', genWaveStyle);
24825
+ var useStyle$r = genComponentStyleHook('Wave', genWaveStyle);
25155
24826
 
25156
24827
  const TARGET_CLS = `${defaultPrefixCls}-wave-target`;
25157
24828
 
@@ -25326,7 +24997,7 @@ const Wave = (props)=>{
25326
24997
  const containerRef = React.useRef(null);
25327
24998
  // ============================== Style ===============================
25328
24999
  const prefixCls = getPrefixCls('wave');
25329
- const hashId = useStyle$s(prefixCls);
25000
+ const hashId = useStyle$r(prefixCls);
25330
25001
  // =============================== Wave ===============================
25331
25002
  const showWave = useWave(containerRef, clsx(prefixCls, hashId), component, colorSource);
25332
25003
  // ============================== Effect ==============================
@@ -25404,7 +25075,7 @@ const genSpaceCompactStyle = (token)=>{
25404
25075
  };
25405
25076
  };
25406
25077
  // ============================== Export ==============================
25407
- var useStyle$r = genStyleHooks([
25078
+ var useStyle$q = genStyleHooks([
25408
25079
  'Space',
25409
25080
  'Compact'
25410
25081
  ], genSpaceCompactStyle, ()=>({}), {
@@ -25463,7 +25134,7 @@ const Compact$1 = (props)=>{
25463
25134
  const [mergedOrientation, mergedVertical] = useOrientation(orientation, vertical, direction);
25464
25135
  const mergedSize = useSize((ctx)=>size ?? ctx);
25465
25136
  const prefixCls = getPrefixCls('space-compact', customizePrefixCls);
25466
- const [hashId] = useStyle$r(prefixCls);
25137
+ const [hashId] = useStyle$q(prefixCls);
25467
25138
  const clx = clsx(prefixCls, hashId, {
25468
25139
  [`${prefixCls}-rtl`]: directionConfig === 'rtl',
25469
25140
  [`${prefixCls}-block`]: block,
@@ -26678,7 +26349,7 @@ const genGhostStyle = (token)=>{
26678
26349
  }
26679
26350
  };
26680
26351
  };
26681
- const prepareComponentToken$l = (token)=>({
26352
+ const prepareComponentToken$k = (token)=>({
26682
26353
  headerPadding: `${token.paddingSM}px ${token.padding}px`,
26683
26354
  headerBg: token.colorFillAlter,
26684
26355
  contentPadding: `${token.padding}px 16px`,
@@ -26687,7 +26358,7 @@ const prepareComponentToken$l = (token)=>({
26687
26358
  borderlessContentPadding: `${token.paddingXXS}px 16px ${token.padding}px`,
26688
26359
  borderlessContentBg: 'transparent'
26689
26360
  });
26690
- var useStyle$q = genStyleHooks('Collapse', (token)=>{
26361
+ var useStyle$p = genStyleHooks('Collapse', (token)=>{
26691
26362
  const collapseToken = cssinjsUtils.mergeToken(token, {
26692
26363
  collapseHeaderPaddingSM: `${cssinjs.unit(token.paddingXS)} ${cssinjs.unit(token.paddingSM)}`,
26693
26364
  collapseHeaderPaddingLG: `${cssinjs.unit(token.padding)} ${cssinjs.unit(token.paddingLG)}`,
@@ -26700,7 +26371,7 @@ var useStyle$q = genStyleHooks('Collapse', (token)=>{
26700
26371
  genArrowStyle(collapseToken),
26701
26372
  genCollapseMotion(collapseToken)
26702
26373
  ];
26703
- }, prepareComponentToken$l);
26374
+ }, prepareComponentToken$k);
26704
26375
 
26705
26376
  const Collapse$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
26706
26377
  const { getPrefixCls, direction, expandIcon: contextExpandIcon, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles } = useComponentConfig('collapse');
@@ -26708,7 +26379,7 @@ const Collapse$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
26708
26379
  const mergedSize = useSize((ctx)=>customizeSize ?? ctx ?? 'middle');
26709
26380
  const prefixCls = getPrefixCls('collapse', customizePrefixCls);
26710
26381
  const rootPrefixCls = getPrefixCls();
26711
- const [hashId, cssVarCls] = useStyle$q(prefixCls);
26382
+ const [hashId, cssVarCls] = useStyle$p(prefixCls);
26712
26383
  const mergedPlacement = expandIconPlacement ?? expandIconPosition ?? 'start';
26713
26384
  // =========== Merged Props for Semantic ===========
26714
26385
  const mergedProps = {
@@ -26831,7 +26502,7 @@ const prepareToken$2 = (token)=>{
26831
26502
  });
26832
26503
  return buttonToken;
26833
26504
  };
26834
- const prepareComponentToken$k = (token)=>{
26505
+ const prepareComponentToken$j = (token)=>{
26835
26506
  const contentFontSize = token.contentFontSize ?? token.fontSize;
26836
26507
  const contentFontSizeSM = token.contentFontSizeSM ?? token.fontSize;
26837
26508
  const contentFontSizeLG = token.contentFontSizeLG ?? token.fontSizeLG;
@@ -27341,7 +27012,7 @@ const genBlockButtonStyle = (token)=>{
27341
27012
  };
27342
27013
  };
27343
27014
  // ============================== Export ==============================
27344
- var useStyle$p = genStyleHooks('Button', (token)=>{
27015
+ var useStyle$o = genStyleHooks('Button', (token)=>{
27345
27016
  const buttonToken = prepareToken$2(token);
27346
27017
  return [
27347
27018
  // Shared
@@ -27357,7 +27028,7 @@ var useStyle$p = genStyleHooks('Button', (token)=>{
27357
27028
  // Button Group
27358
27029
  genGroupStyle$1(buttonToken)
27359
27030
  ];
27360
- }, prepareComponentToken$k, {
27031
+ }, prepareComponentToken$j, {
27361
27032
  unitless: {
27362
27033
  fontWeight: true,
27363
27034
  contentLineHeight: true,
@@ -27541,7 +27212,7 @@ var Compact = genSubStyleComponent([
27541
27212
  genCompactItemVerticalStyle(buttonToken),
27542
27213
  genButtonCompactStyle(buttonToken)
27543
27214
  ];
27544
- }, prepareComponentToken$k);
27215
+ }, prepareComponentToken$j);
27545
27216
 
27546
27217
  function getLoadingConfig(loading) {
27547
27218
  if (typeof loading === 'object' && loading) {
@@ -27649,7 +27320,7 @@ const InternalCompoundedButton = /*#__PURE__*/ React.forwardRef((props, ref)=>{
27649
27320
  const mergedColorText = isDanger ? 'dangerous' : mergedColor;
27650
27321
  const mergedInsertSpace = autoInsertSpace ?? contextAutoInsertSpace ?? true;
27651
27322
  const prefixCls = getPrefixCls('btn', customizePrefixCls);
27652
- const [hashId, cssVarCls] = useStyle$p(prefixCls);
27323
+ const [hashId, cssVarCls] = useStyle$o(prefixCls);
27653
27324
  const disabled = React.useContext(DisabledContext);
27654
27325
  const mergedDisabled = customDisabled ?? disabled;
27655
27326
  const groupSize = React.useContext(GroupSizeContext);
@@ -28219,7 +27890,7 @@ const genBaseStyle$4 = (token)=>{
28219
27890
  };
28220
27891
  };
28221
27892
  // ============================== Export ==============================
28222
- const prepareComponentToken$j = (token)=>{
27893
+ const prepareComponentToken$i = (token)=>{
28223
27894
  const { colorFillContent, colorFill } = token;
28224
27895
  const gradientFromColor = colorFillContent;
28225
27896
  const gradientToColor = colorFill;
@@ -28234,7 +27905,7 @@ const prepareComponentToken$j = (token)=>{
28234
27905
  paragraphLiHeight: token.controlHeight / 2
28235
27906
  };
28236
27907
  };
28237
- var useStyle$o = genStyleHooks('Skeleton', (token)=>{
27908
+ var useStyle$n = genStyleHooks('Skeleton', (token)=>{
28238
27909
  const { componentCls, calc } = token;
28239
27910
  const skeletonToken = cssinjsUtils.mergeToken(token, {
28240
27911
  skeletonAvatarCls: `${componentCls}-avatar`,
@@ -28251,7 +27922,7 @@ var useStyle$o = genStyleHooks('Skeleton', (token)=>{
28251
27922
  skeletonLoadingMotionDuration: '1.4s'
28252
27923
  });
28253
27924
  return genBaseStyle$4(skeletonToken);
28254
- }, prepareComponentToken$j, {
27925
+ }, prepareComponentToken$i, {
28255
27926
  deprecatedTokens: [
28256
27927
  [
28257
27928
  'color',
@@ -28268,7 +27939,7 @@ const SkeletonAvatar = (props)=>{
28268
27939
  const { prefixCls: customizePrefixCls, className, classNames, rootClassName, active, style, styles, shape = 'circle', size = 'default', ...rest } = props;
28269
27940
  const { getPrefixCls } = React__namespace.useContext(ConfigContext);
28270
27941
  const prefixCls = getPrefixCls('skeleton', customizePrefixCls);
28271
- const [hashId, cssVarCls] = useStyle$o(prefixCls);
27942
+ const [hashId, cssVarCls] = useStyle$n(prefixCls);
28272
27943
  const cls = clsx(prefixCls, `${prefixCls}-element`, {
28273
27944
  [`${prefixCls}-active`]: active
28274
27945
  }, classNames?.root, className, rootClassName, hashId, cssVarCls);
@@ -28292,7 +27963,7 @@ const SkeletonButton = (props)=>{
28292
27963
  const { prefixCls: customizePrefixCls, className, rootClassName, classNames, active, style, styles, block = false, size = 'default', ...rest } = props;
28293
27964
  const { getPrefixCls } = React__namespace.useContext(ConfigContext);
28294
27965
  const prefixCls = getPrefixCls('skeleton', customizePrefixCls);
28295
- const [hashId, cssVarCls] = useStyle$o(prefixCls);
27966
+ const [hashId, cssVarCls] = useStyle$n(prefixCls);
28296
27967
  const cls = clsx(prefixCls, `${prefixCls}-element`, {
28297
27968
  [`${prefixCls}-active`]: active,
28298
27969
  [`${prefixCls}-block`]: block
@@ -28316,7 +27987,7 @@ const SkeletonNode = (props)=>{
28316
27987
  const { prefixCls: customizePrefixCls, className, classNames, rootClassName, internalClassName, style, styles, active, children } = props;
28317
27988
  const { getPrefixCls } = React__namespace.useContext(ConfigContext);
28318
27989
  const prefixCls = getPrefixCls('skeleton', customizePrefixCls);
28319
- const [hashId, cssVarCls] = useStyle$o(prefixCls);
27990
+ const [hashId, cssVarCls] = useStyle$n(prefixCls);
28320
27991
  const cls = clsx(prefixCls, `${prefixCls}-element`, {
28321
27992
  [`${prefixCls}-active`]: active
28322
27993
  }, hashId, classNames?.root, className, rootClassName, cssVarCls);
@@ -28352,7 +28023,7 @@ const SkeletonInput = (props)=>{
28352
28023
  const { prefixCls: customizePrefixCls, className, classNames, rootClassName, active, block, style, styles, size = 'default', ...rest } = props;
28353
28024
  const { getPrefixCls } = React__namespace.useContext(ConfigContext);
28354
28025
  const prefixCls = getPrefixCls('skeleton', customizePrefixCls);
28355
- const [hashId, cssVarCls] = useStyle$o(prefixCls);
28026
+ const [hashId, cssVarCls] = useStyle$n(prefixCls);
28356
28027
  const cls = clsx(prefixCls, `${prefixCls}-element`, {
28357
28028
  [`${prefixCls}-active`]: active,
28358
28029
  [`${prefixCls}-block`]: block
@@ -28460,7 +28131,7 @@ const Skeleton = (props)=>{
28460
28131
  const { prefixCls: customizePrefixCls, loading, className, rootClassName, classNames, style, styles, children, avatar = false, title = true, paragraph = true, active, round } = props;
28461
28132
  const { getPrefixCls, direction, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles } = useComponentConfig('skeleton');
28462
28133
  const prefixCls = getPrefixCls('skeleton', customizePrefixCls);
28463
- const [hashId, cssVarCls] = useStyle$o(prefixCls);
28134
+ const [hashId, cssVarCls] = useStyle$n(prefixCls);
28464
28135
  const mergedProps = {
28465
28136
  ...props,
28466
28137
  avatar,
@@ -28986,7 +28657,7 @@ const genSharedEmptyStyle = (token)=>{
28986
28657
  };
28987
28658
  };
28988
28659
  // ============================== Export ==============================
28989
- var useStyle$n = genStyleHooks('Empty', (token)=>{
28660
+ var useStyle$m = genStyleHooks('Empty', (token)=>{
28990
28661
  const { componentCls, controlHeightLG, calc } = token;
28991
28662
  const emptyToken = cssinjsUtils.mergeToken(token, {
28992
28663
  emptyImgCls: `${componentCls}-img`,
@@ -29003,7 +28674,7 @@ const Empty = (props)=>{
29003
28674
  const { className, rootClassName, prefixCls: customizePrefixCls, image, description, children, imageStyle, style, classNames, styles, ...restProps } = props;
29004
28675
  const { getPrefixCls, direction, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles, image: contextImage } = useComponentConfig('empty');
29005
28676
  const prefixCls = getPrefixCls('empty', customizePrefixCls);
29006
- const [hashId, cssVarCls] = useStyle$n(prefixCls);
28677
+ const [hashId, cssVarCls] = useStyle$m(prefixCls);
29007
28678
  const [mergedClassNames, mergedStyles] = useMergeSemantic([
29008
28679
  contextClassNames,
29009
28680
  classNames
@@ -29795,7 +29466,7 @@ const genSelectInputStyle = (token)=>{
29795
29466
  };
29796
29467
  };
29797
29468
 
29798
- const prepareComponentToken$i = (token)=>{
29469
+ const prepareComponentToken$h = (token)=>{
29799
29470
  const { fontSize, lineHeight, lineWidth, controlHeight, controlHeightSM, controlHeightLG, paddingXXS, controlPaddingHorizontal, zIndexPopupBase, colorText, fontWeightStrong, controlItemBgActive, controlItemBgHover, colorBgContainer, colorFillSecondary, colorBgContainerDisabled, colorTextDisabled, colorPrimaryHover, colorPrimary, controlOutline } = token;
29800
29471
  // Item height default use `controlHeight - 2 * paddingXXS`,
29801
29472
  // but some case `paddingXXS=0`.
@@ -29963,7 +29634,7 @@ var useSelectStyle = genStyleHooks('Select', (token, { rootPrefixCls })=>{
29963
29634
  genSelectStyle(selectToken),
29964
29635
  genSelectInputStyle(selectToken)
29965
29636
  ];
29966
- }, prepareComponentToken$i, {
29637
+ }, prepareComponentToken$h, {
29967
29638
  unitless: {
29968
29639
  optionLineHeight: true,
29969
29640
  optionSelectedFontWeight: true
@@ -30281,16 +29952,6 @@ const getResponsiveMap = (token)=>({
30281
29952
  });
30282
29953
  return token;
30283
29954
  };
30284
- const matchScreen = (screens, screenSizes)=>{
30285
- if (!screenSizes) {
30286
- return;
30287
- }
30288
- for (const breakpoint of responsiveArray){
30289
- if (screens[breakpoint] && screenSizes?.[breakpoint] !== undefined) {
30290
- return screenSizes[breakpoint];
30291
- }
30292
- }
30293
- };
30294
29955
  const useResponsiveObserver = ()=>{
30295
29956
  const [, token] = useToken();
30296
29957
  const responsiveMap = getResponsiveMap(validateBreakpoints(token));
@@ -31004,7 +30665,7 @@ const genTooltipStyle = (token)=>{
31004
30665
  ];
31005
30666
  };
31006
30667
  // ============================== Export ==============================
31007
- const prepareComponentToken$h = (token)=>({
30668
+ const prepareComponentToken$g = (token)=>({
31008
30669
  zIndexPopup: token.zIndexPopupBase + 70,
31009
30670
  maxWidth: 250,
31010
30671
  ...getArrowOffsetToken({
@@ -31015,7 +30676,7 @@ const prepareComponentToken$h = (token)=>({
31015
30676
  borderRadiusOuter: Math.min(token.borderRadiusOuter, 4)
31016
30677
  }))
31017
30678
  });
31018
- var useStyle$m = ((prefixCls, rootCls, injectStyle = true)=>{
30679
+ var useStyle$l = ((prefixCls, rootCls, injectStyle = true)=>{
31019
30680
  const useStyle = genStyleHooks('Tooltip', (token)=>{
31020
30681
  const { borderRadius, colorTextLightSolid, colorBgSpotlight, maxWidth } = token;
31021
30682
  const TooltipToken = cssinjsUtils.mergeToken(token, {
@@ -31029,7 +30690,7 @@ var useStyle$m = ((prefixCls, rootCls, injectStyle = true)=>{
31029
30690
  genTooltipStyle(TooltipToken),
31030
30691
  initZoomMotion(token, 'zoom-big-fast')
31031
30692
  ];
31032
- }, prepareComponentToken$h, {
30693
+ }, prepareComponentToken$g, {
31033
30694
  resetStyle: false,
31034
30695
  // Popover use Tooltip as internal component. We do not need to handle this.
31035
30696
  injectStyle
@@ -31088,7 +30749,7 @@ const parseColor = (rootPrefixCls, prefixCls, color)=>{
31088
30749
  const prefixCls = getPrefixCls('tooltip', customizePrefixCls);
31089
30750
  const rootPrefixCls = getPrefixCls();
31090
30751
  const rootCls = useCSSVarCls(prefixCls);
31091
- const [hashId, cssVarCls] = useStyle$m(prefixCls, rootCls);
30752
+ const [hashId, cssVarCls] = useStyle$l(prefixCls, rootCls);
31092
30753
  // Color
31093
30754
  const colorInfo = parseColor(rootPrefixCls, prefixCls, color);
31094
30755
  const arrowContentStyle = colorInfo.arrowStyle;
@@ -31250,7 +30911,7 @@ const InternalTooltip = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>
31250
30911
  const childCls = !childProps.className || typeof childProps.className === 'string' ? clsx(childProps.className, openClassName || `${prefixCls}-open`) : childProps.className;
31251
30912
  // Style
31252
30913
  const rootCls = useCSSVarCls(prefixCls);
31253
- const [hashId, cssVarCls] = useStyle$m(prefixCls, rootCls, !injectFromPopover);
30914
+ const [hashId, cssVarCls] = useStyle$l(prefixCls, rootCls, !injectFromPopover);
31254
30915
  // Color
31255
30916
  const colorInfo = parseColor(rootPrefixCls, prefixCls, color);
31256
30917
  const arrowContentStyle = colorInfo.arrowStyle;
@@ -31314,12 +30975,12 @@ const InternalTooltip = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>
31314
30975
  value: contextZIndex
31315
30976
  }, content);
31316
30977
  });
31317
- const Tooltip = InternalTooltip;
30978
+ const Tooltip$1 = InternalTooltip;
31318
30979
  if (process.env.NODE_ENV !== 'production') {
31319
- Tooltip.displayName = 'Tooltip';
30980
+ Tooltip$1.displayName = 'Tooltip';
31320
30981
  }
31321
- Tooltip._InternalPanelDoNotUseOrYouWillBeFired = PurePanel$2;
31322
- Tooltip.UniqueProvider = UniqueProvider;
30982
+ Tooltip$1._InternalPanelDoNotUseOrYouWillBeFired = PurePanel$2;
30983
+ Tooltip$1.UniqueProvider = UniqueProvider;
31323
30984
 
31324
30985
  const isPrimitive = (value)=>typeof value !== 'object' && typeof value !== 'function' || value === null;
31325
30986
 
@@ -31388,7 +31049,7 @@ const genLayoutStyle = (token)=>{
31388
31049
  }
31389
31050
  };
31390
31051
  };
31391
- const prepareComponentToken$g = (token)=>{
31052
+ const prepareComponentToken$f = (token)=>{
31392
31053
  const { colorBgLayout, controlHeight, controlHeightLG, colorText, controlHeightSM, marginXXS, colorTextLightSolid, colorBgContainer } = token;
31393
31054
  const paddingInline = controlHeightLG * 1.25;
31394
31055
  return {
@@ -31429,7 +31090,7 @@ const DEPRECATED_TOKENS = [
31429
31090
  'triggerBg'
31430
31091
  ]
31431
31092
  ];
31432
- genStyleHooks('Layout', genLayoutStyle, prepareComponentToken$g, {
31093
+ genStyleHooks('Layout', genLayoutStyle, prepareComponentToken$f, {
31433
31094
  deprecatedTokens: DEPRECATED_TOKENS
31434
31095
  });
31435
31096
 
@@ -31523,10 +31184,10 @@ const genSiderStyle = (token)=>{
31523
31184
  }
31524
31185
  };
31525
31186
  };
31526
- var useStyle$l = genStyleHooks([
31187
+ var useStyle$k = genStyleHooks([
31527
31188
  'Layout',
31528
31189
  'Sider'
31529
- ], genSiderStyle, prepareComponentToken$g, {
31190
+ ], genSiderStyle, prepareComponentToken$f, {
31530
31191
  deprecatedTokens: DEPRECATED_TOKENS
31531
31192
  });
31532
31193
 
@@ -31569,7 +31230,7 @@ const Sider = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
31569
31230
  // =========================== Prefix ===========================
31570
31231
  const { getPrefixCls, direction } = React.useContext(ConfigContext);
31571
31232
  const prefixCls = getPrefixCls('layout-sider', customizePrefixCls);
31572
- const [hashId, cssVarCls] = useStyle$l(prefixCls);
31233
+ const [hashId, cssVarCls] = useStyle$k(prefixCls);
31573
31234
  // ========================= Responsive =========================
31574
31235
  const responsiveHandlerRef = React.useRef(null);
31575
31236
  responsiveHandlerRef.current = (mql)=>{
@@ -31764,7 +31425,7 @@ const MenuItem = (props)=>{
31764
31425
  const resolvedClassNames = tooltipConfig.classNames(info);
31765
31426
  return mergeTooltipRootClassName(resolvedClassNames);
31766
31427
  } : mergeTooltipRootClassName(tooltipConfig?.classNames);
31767
- returnNode = /*#__PURE__*/ React__namespace.createElement(Tooltip, {
31428
+ returnNode = /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
31768
31429
  ...tooltipProps,
31769
31430
  placement: mergedTooltipPlacement,
31770
31431
  classNames: mergedTooltipClassNames
@@ -32561,7 +32222,7 @@ const getBaseStyle = (token)=>{
32561
32222
  }
32562
32223
  ];
32563
32224
  };
32564
- const prepareComponentToken$f = (token)=>{
32225
+ const prepareComponentToken$e = (token)=>{
32565
32226
  const { colorPrimary, colorError, colorTextDisabled, colorErrorBg, colorText, colorTextDescription, colorBgContainer, colorFillAlter, colorFillContent, lineWidth, lineWidthBold, controlItemBgActive, colorBgTextHover, controlHeightLG, lineHeight, colorBgElevated, marginXXS, padding, fontSize, controlHeightSM, fontSizeLG, colorTextLightSolid, colorErrorHover } = token;
32566
32227
  const activeBarWidth = token.activeBarWidth ?? 0;
32567
32228
  const activeBarBorderWidth = token.activeBarBorderWidth ?? lineWidth;
@@ -32655,7 +32316,7 @@ const prepareComponentToken$f = (token)=>{
32655
32316
  };
32656
32317
  };
32657
32318
  // ============================== Export ==============================
32658
- var useStyle$k = ((prefixCls, rootCls = prefixCls, injectStyle = true)=>{
32319
+ var useStyle$j = ((prefixCls, rootCls = prefixCls, injectStyle = true)=>{
32659
32320
  const useStyle = genStyleHooks('Menu', (token)=>{
32660
32321
  const { colorBgElevated, controlHeightLG, fontSize, darkItemColor, darkDangerItemColor, darkItemBg, darkSubMenuItemBg, darkItemSelectedColor, darkItemSelectedBg, darkDangerItemSelectedBg, darkItemHoverBg, darkGroupTitleColor, darkItemHoverColor, darkItemDisabledColor, darkDangerItemHoverColor, darkDangerItemSelectedColor, darkDangerItemActiveBg, popupBg, darkPopupBg } = token;
32661
32322
  const menuArrowSize = token.calc(fontSize).div(7).mul(5).equal();
@@ -32715,7 +32376,7 @@ var useStyle$k = ((prefixCls, rootCls = prefixCls, injectStyle = true)=>{
32715
32376
  initSlideMotion(menuToken, 'slide-down'),
32716
32377
  initZoomMotion(menuToken, 'zoom-big')
32717
32378
  ];
32718
- }, prepareComponentToken$f, {
32379
+ }, prepareComponentToken$e, {
32719
32380
  deprecatedTokens: [
32720
32381
  [
32721
32382
  'colorGroupTitle',
@@ -32953,7 +32614,7 @@ const InternalMenu = /*#__PURE__*/ React.forwardRef((props, ref)=>{
32953
32614
  };
32954
32615
  const prefixCls = getPrefixCls('menu', customizePrefixCls || overrideObj.prefixCls);
32955
32616
  const rootCls = useCSSVarCls(prefixCls);
32956
- const [hashId, cssVarCls] = useStyle$k(prefixCls, rootCls, !override);
32617
+ const [hashId, cssVarCls] = useStyle$j(prefixCls, rootCls, !override);
32957
32618
  const menuClassName = clsx(`${prefixCls}-${theme}`, contextClassName, className);
32958
32619
  // ====================== ExpandIcon ========================
32959
32620
  const mergedExpandIcon = React__namespace.useMemo(()=>{
@@ -33340,7 +33001,7 @@ const genBaseStyle$2 = (token)=>{
33340
33001
  ];
33341
33002
  };
33342
33003
  // ============================== Export ==============================
33343
- const prepareComponentToken$e = (token)=>({
33004
+ const prepareComponentToken$d = (token)=>({
33344
33005
  zIndexPopup: token.zIndexPopupBase + 50,
33345
33006
  paddingBlock: (token.controlHeight - token.fontSize * token.lineHeight) / 2,
33346
33007
  ...getArrowOffsetToken({
@@ -33349,7 +33010,7 @@ const prepareComponentToken$e = (token)=>({
33349
33010
  }),
33350
33011
  ...getArrowToken(token)
33351
33012
  });
33352
- var useStyle$j = genStyleHooks('Dropdown', (token)=>{
33013
+ var useStyle$i = genStyleHooks('Dropdown', (token)=>{
33353
33014
  const { marginXXS, sizePopupArrow, paddingXXS, componentCls } = token;
33354
33015
  const dropdownToken = cssinjsUtils.mergeToken(token, {
33355
33016
  menuCls: `${componentCls}-menu`,
@@ -33360,7 +33021,7 @@ var useStyle$j = genStyleHooks('Dropdown', (token)=>{
33360
33021
  genBaseStyle$2(dropdownToken),
33361
33022
  genStatusStyle(dropdownToken)
33362
33023
  ];
33363
- }, prepareComponentToken$e, {
33024
+ }, prepareComponentToken$d, {
33364
33025
  resetStyle: false
33365
33026
  });
33366
33027
 
@@ -33432,7 +33093,7 @@ const Dropdown$1 = (props)=>{
33432
33093
  ]);
33433
33094
  const prefixCls = getPrefixCls('dropdown', customizePrefixCls);
33434
33095
  const rootCls = useCSSVarCls(prefixCls);
33435
- const [hashId, cssVarCls] = useStyle$j(prefixCls, rootCls);
33096
+ const [hashId, cssVarCls] = useStyle$i(prefixCls, rootCls);
33436
33097
  const [, token] = useToken();
33437
33098
  const child = React__namespace.Children.only(isPrimitive(children) ? /*#__PURE__*/ React__namespace.createElement("span", null, children) : children);
33438
33099
  const popupTrigger = cloneElement(child, {
@@ -33995,7 +33656,7 @@ const getRadioButtonStyle = (token)=>{
33995
33656
  };
33996
33657
  };
33997
33658
  // ============================== Export ==============================
33998
- const prepareComponentToken$d = (token)=>{
33659
+ const prepareComponentToken$c = (token)=>{
33999
33660
  const { wireframe, padding, marginXS, lineWidth, fontSizeLG, colorText, colorBgContainer, colorTextDisabled, controlItemBgActiveDisabled, colorTextLightSolid, colorPrimary, colorPrimaryHover, colorPrimaryActive, colorWhite } = token;
34000
33661
  const dotPadding = 4; // Fixed value
34001
33662
  const radioSize = fontSizeLG;
@@ -34022,7 +33683,7 @@ const prepareComponentToken$d = (token)=>{
34022
33683
  radioBgColor: wireframe ? colorBgContainer : colorPrimary
34023
33684
  };
34024
33685
  };
34025
- var useStyle$i = genStyleHooks('Radio', (token)=>{
33686
+ var useStyle$h = genStyleHooks('Radio', (token)=>{
34026
33687
  const { controlOutline, controlOutlineWidth } = token;
34027
33688
  const radioFocusShadow = `0 0 0 ${cssinjs.unit(controlOutlineWidth)} ${controlOutline}`;
34028
33689
  const radioButtonFocusShadow = radioFocusShadow;
@@ -34035,7 +33696,7 @@ var useStyle$i = genStyleHooks('Radio', (token)=>{
34035
33696
  getRadioBasicStyle(radioToken),
34036
33697
  getRadioButtonStyle(radioToken)
34037
33698
  ];
34038
- }, prepareComponentToken$d, {
33699
+ }, prepareComponentToken$c, {
34039
33700
  unitless: {
34040
33701
  radioSize: true,
34041
33702
  dotSize: true
@@ -34063,7 +33724,7 @@ const InternalRadio = (props, ref$1)=>{
34063
33724
  const prefixCls = isButtonType ? `${radioPrefixCls}-button` : radioPrefixCls;
34064
33725
  // Style
34065
33726
  const rootCls = useCSSVarCls(radioPrefixCls);
34066
- const [hashId, cssVarCls] = useStyle$i(radioPrefixCls, rootCls);
33727
+ const [hashId, cssVarCls] = useStyle$h(radioPrefixCls, rootCls);
34067
33728
  const radioProps = {
34068
33729
  ...restProps
34069
33730
  };
@@ -34162,7 +33823,7 @@ const RadioGroup = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
34162
33823
  const groupPrefixCls = `${prefixCls}-group`;
34163
33824
  // Style
34164
33825
  const rootCls = useCSSVarCls(prefixCls);
34165
- const [hashId, cssVarCls] = useStyle$i(prefixCls, rootCls);
33826
+ const [hashId, cssVarCls] = useStyle$h(prefixCls, rootCls);
34166
33827
  let childrenToRender = children;
34167
33828
  // 如果存在 options, 优先使用
34168
33829
  if (options && options.length > 0) {
@@ -35126,7 +34787,7 @@ const useSharedStyle = genStyleHooks([
35126
34787
  }, initComponentToken$1, {
35127
34788
  resetFont: false
35128
34789
  });
35129
- var useStyle$h = genStyleHooks([
34790
+ var useStyle$g = genStyleHooks([
35130
34791
  'Input',
35131
34792
  'Component'
35132
34793
  ], (token)=>{
@@ -36012,7 +35673,7 @@ const genTabsStyle = (token)=>{
36012
35673
  }
36013
35674
  };
36014
35675
  };
36015
- const prepareComponentToken$c = (token)=>{
35676
+ const prepareComponentToken$b = (token)=>{
36016
35677
  const { cardHeight, cardHeightSM, cardHeightLG, controlHeight, controlHeightLG } = token;
36017
35678
  const mergedCardHeight = cardHeight || controlHeightLG;
36018
35679
  const mergedCardHeightSM = cardHeightSM || controlHeight;
@@ -36053,7 +35714,7 @@ const prepareComponentToken$c = (token)=>{
36053
35714
  };
36054
35715
  };
36055
35716
  // ============================== Export ==============================
36056
- var useStyle$g = genStyleHooks('Tabs', (token)=>{
35717
+ var useStyle$f = genStyleHooks('Tabs', (token)=>{
36057
35718
  const tabsToken = cssinjsUtils.mergeToken(token, {
36058
35719
  // `cardPadding` is empty by default, so we could calculate with dynamic `cardHeight`
36059
35720
  tabsCardPadding: token.cardPadding,
@@ -36072,7 +35733,7 @@ var useStyle$g = genStyleHooks('Tabs', (token)=>{
36072
35733
  genTabsStyle(tabsToken),
36073
35734
  genMotionStyle$1(tabsToken)
36074
35735
  ];
36075
- }, prepareComponentToken$c);
35736
+ }, prepareComponentToken$b);
36076
35737
 
36077
35738
  const TabPane = ()=>null;
36078
35739
  if (process.env.NODE_ENV !== 'production') {
@@ -36086,7 +35747,7 @@ const InternalTabs = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
36086
35747
  const { tabs } = React__namespace.useContext(ConfigContext);
36087
35748
  const prefixCls = getPrefixCls('tabs', customizePrefixCls);
36088
35749
  const rootCls = useCSSVarCls(prefixCls);
36089
- const [hashId, cssVarCls] = useStyle$g(prefixCls, rootCls);
35750
+ const [hashId, cssVarCls] = useStyle$f(prefixCls, rootCls);
36090
35751
  const tabsRef = React__namespace.useRef(null);
36091
35752
  React__namespace.useImperativeHandle(ref, ()=>({
36092
35753
  nativeElement: tabsRef.current
@@ -36518,7 +36179,7 @@ const genCardSizeStyle = (token)=>{
36518
36179
  }
36519
36180
  };
36520
36181
  };
36521
- const prepareComponentToken$b = (token)=>({
36182
+ const prepareComponentToken$a = (token)=>({
36522
36183
  headerBg: 'transparent',
36523
36184
  headerFontSize: token.fontSizeLG,
36524
36185
  headerFontSizeSM: token.fontSize,
@@ -36535,7 +36196,7 @@ const prepareComponentToken$b = (token)=>({
36535
36196
  headerPadding: token.headerPadding ?? token.paddingLG
36536
36197
  });
36537
36198
  // ============================== Export ==============================
36538
- var useStyle$f = genStyleHooks('Card', (token)=>{
36199
+ var useStyle$e = genStyleHooks('Card', (token)=>{
36539
36200
  const cardToken = cssinjsUtils.mergeToken(token, {
36540
36201
  cardShadow: token.boxShadowCard,
36541
36202
  cardHeadPadding: token.padding,
@@ -36548,7 +36209,7 @@ var useStyle$f = genStyleHooks('Card', (token)=>{
36548
36209
  // Size
36549
36210
  genCardSizeStyle(cardToken)
36550
36211
  ];
36551
- }, prepareComponentToken$b);
36212
+ }, prepareComponentToken$a);
36552
36213
 
36553
36214
  const ActionNode = (props)=>{
36554
36215
  const { actionClasses, actions = [], actionStyle } = props;
@@ -36619,7 +36280,7 @@ const Card$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
36619
36280
  children
36620
36281
  ]);
36621
36282
  const prefixCls = getPrefixCls('card', customizePrefixCls);
36622
- const [hashId, cssVarCls] = useStyle$f(prefixCls);
36283
+ const [hashId, cssVarCls] = useStyle$e(prefixCls);
36623
36284
  const loadingBlock = /*#__PURE__*/ React__namespace.createElement(Skeleton, {
36624
36285
  loading: true,
36625
36286
  active: true,
@@ -36975,7 +36636,7 @@ function getStyle(prefixCls, token) {
36975
36636
  });
36976
36637
  return genCheckboxStyle(checkboxToken);
36977
36638
  }
36978
- var useStyle$e = genStyleHooks('Checkbox', (token, { prefixCls })=>[
36639
+ var useStyle$d = genStyleHooks('Checkbox', (token, { prefixCls })=>[
36979
36640
  getStyle(prefixCls, token)
36980
36641
  ]);
36981
36642
 
@@ -37039,7 +36700,7 @@ const InternalCheckbox = (props, ref$1)=>{
37039
36700
  // ============================== Style ===============================
37040
36701
  const prefixCls = getPrefixCls('checkbox', customizePrefixCls);
37041
36702
  const rootCls = useCSSVarCls(prefixCls);
37042
- const [hashId, cssVarCls] = useStyle$e(prefixCls, rootCls);
36703
+ const [hashId, cssVarCls] = useStyle$d(prefixCls, rootCls);
37043
36704
  const checkboxProps = {
37044
36705
  ...restProps
37045
36706
  };
@@ -37157,7 +36818,7 @@ const CheckboxGroup = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
37157
36818
  const prefixCls = getPrefixCls('checkbox', customizePrefixCls);
37158
36819
  const groupPrefixCls = `${prefixCls}-group`;
37159
36820
  const rootCls = useCSSVarCls(prefixCls);
37160
- const [hashId, cssVarCls] = useStyle$e(prefixCls, rootCls);
36821
+ const [hashId, cssVarCls] = useStyle$d(prefixCls, rootCls);
37161
36822
  const domProps = util.omit(restProps, [
37162
36823
  'value',
37163
36824
  'disabled'
@@ -37367,7 +37028,7 @@ function useMergedPropByScreen(oriProp, screen) {
37367
37028
  ]);
37368
37029
  return prop;
37369
37030
  }
37370
- const Row$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
37031
+ const Row = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
37371
37032
  const { prefixCls: customizePrefixCls, justify, align, className, style, children, gutter = 0, wrap, ...others } = props;
37372
37033
  const { getPrefixCls, direction } = React__namespace.useContext(ConfigContext);
37373
37034
  const screens = useBreakpoint(true, null);
@@ -37416,7 +37077,7 @@ const Row$1 = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
37416
37077
  }, children));
37417
37078
  });
37418
37079
  if (process.env.NODE_ENV !== 'production') {
37419
- Row$1.displayName = 'Row';
37080
+ Row.displayName = 'Row';
37420
37081
  }
37421
37082
 
37422
37083
  // ============================== Size ================================
@@ -37577,13 +37238,13 @@ const genSharedDividerStyle = (token)=>{
37577
37238
  }
37578
37239
  };
37579
37240
  };
37580
- const prepareComponentToken$a = (token)=>({
37241
+ const prepareComponentToken$9 = (token)=>({
37581
37242
  textPaddingInline: '1em',
37582
37243
  orientationMargin: 0.05,
37583
37244
  verticalMarginInline: token.marginXS
37584
37245
  });
37585
37246
  // ============================== Export ==============================
37586
- var useStyle$d = genStyleHooks('Divider', (token)=>{
37247
+ var useStyle$c = genStyleHooks('Divider', (token)=>{
37587
37248
  const dividerToken = cssinjsUtils.mergeToken(token, {
37588
37249
  dividerHorizontalWithTextGutterMargin: token.margin,
37589
37250
  sizePaddingEdgeHorizontal: 0
@@ -37592,7 +37253,7 @@ var useStyle$d = genStyleHooks('Divider', (token)=>{
37592
37253
  genSharedDividerStyle(dividerToken),
37593
37254
  genSizeDividerStyle(dividerToken)
37594
37255
  ];
37595
- }, prepareComponentToken$a, {
37256
+ }, prepareComponentToken$9, {
37596
37257
  unitless: {
37597
37258
  orientationMargin: true
37598
37259
  }
@@ -37614,7 +37275,7 @@ const Divider = (props)=>{
37614
37275
  const { prefixCls: customizePrefixCls, type, orientation, vertical, titlePlacement, orientationMargin, className, rootClassName, children, dashed, variant = 'solid', plain, style, size: customSize, classNames, styles, ...restProps } = props;
37615
37276
  const prefixCls = getPrefixCls('divider', customizePrefixCls);
37616
37277
  const railCls = `${prefixCls}-rail`;
37617
- const [hashId, cssVarCls] = useStyle$d(prefixCls);
37278
+ const [hashId, cssVarCls] = useStyle$c(prefixCls);
37618
37279
  const sizeFullName = useSize(customSize);
37619
37280
  const sizeCls = sizeClassNameMap[sizeFullName];
37620
37281
  const hasChildren = !!children;
@@ -37832,7 +37493,7 @@ const genSpaceAddonStyle = (token)=>{
37832
37493
  };
37833
37494
  };
37834
37495
  // ============================== Export ==============================
37835
- var useStyle$c = genStyleHooks([
37496
+ var useStyle$b = genStyleHooks([
37836
37497
  'Space',
37837
37498
  'Addon'
37838
37499
  ], (token)=>[
@@ -37846,7 +37507,7 @@ const SpaceAddon = /*#__PURE__*/ React.forwardRef((props, ref)=>{
37846
37507
  const { className, children, style, prefixCls: customizePrefixCls, variant = 'outlined', disabled, status, ...restProps } = props;
37847
37508
  const { getPrefixCls, direction: directionConfig } = React.useContext(ConfigContext);
37848
37509
  const prefixCls = getPrefixCls('space-addon', customizePrefixCls);
37849
- const [hashId, cssVarCls] = useStyle$c(prefixCls);
37510
+ const [hashId, cssVarCls] = useStyle$b(prefixCls);
37850
37511
  const { compactItemClassnames, compactSize } = useCompactItemContext(prefixCls, directionConfig);
37851
37512
  const statusCls = getStatusClassNames(prefixCls, status);
37852
37513
  const classes = clsx(prefixCls, hashId, compactItemClassnames, cssVarCls, `${prefixCls}-variant-${variant}`, statusCls, {
@@ -37926,7 +37587,7 @@ const Input = /*#__PURE__*/ React.forwardRef((props, ref$1)=>{
37926
37587
  // Style
37927
37588
  const rootCls = useCSSVarCls(prefixCls);
37928
37589
  const [hashId, cssVarCls] = useSharedStyle(prefixCls, rootClassName);
37929
- useStyle$h(prefixCls, rootCls);
37590
+ useStyle$g(prefixCls, rootCls);
37930
37591
  // ===================== Compact Item =====================
37931
37592
  const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction);
37932
37593
  // ===================== Size =====================
@@ -38041,583 +37702,6 @@ if (process.env.NODE_ENV !== 'production') {
38041
37702
  Input.displayName = 'Input';
38042
37703
  }
38043
37704
 
38044
- const DEFAULT_COLUMN_MAP = {
38045
- xxxl: 4,
38046
- xxl: 3,
38047
- xl: 3,
38048
- lg: 3,
38049
- md: 3,
38050
- sm: 2,
38051
- xs: 1
38052
- };
38053
-
38054
- const DescriptionsContext = /*#__PURE__*/ React.createContext(null);
38055
-
38056
- // Convert children into items
38057
- const transChildren2Items = (childNodes)=>util.toArray(childNodes).map((node)=>({
38058
- ...node?.props,
38059
- key: node.key
38060
- }));
38061
- function useItems(screens, items, children) {
38062
- const mergedItems = React__namespace.useMemo(()=>// Take `items` first or convert `children` into items
38063
- items || transChildren2Items(children), [
38064
- items,
38065
- children
38066
- ]);
38067
- const responsiveItems = React__namespace.useMemo(()=>mergedItems.map(({ span, ...restItem })=>{
38068
- if (span === 'filled') {
38069
- return {
38070
- ...restItem,
38071
- filled: true
38072
- };
38073
- }
38074
- return {
38075
- ...restItem,
38076
- span: typeof span === 'number' ? span : matchScreen(screens, span)
38077
- };
38078
- }), [
38079
- mergedItems,
38080
- screens
38081
- ]);
38082
- return responsiveItems;
38083
- }
38084
-
38085
- // Calculate the sum of span in a row
38086
- function getCalcRows(rowItems, mergedColumn) {
38087
- let rows = [];
38088
- let tmpRow = [];
38089
- let exceed = false;
38090
- let count = 0;
38091
- rowItems.filter((n)=>n).forEach((rowItem)=>{
38092
- const { filled, ...restItem } = rowItem;
38093
- if (filled) {
38094
- tmpRow.push(restItem);
38095
- rows.push(tmpRow);
38096
- // reset
38097
- tmpRow = [];
38098
- count = 0;
38099
- return;
38100
- }
38101
- const restSpan = mergedColumn - count;
38102
- count += rowItem.span || 1;
38103
- if (count >= mergedColumn) {
38104
- if (count > mergedColumn) {
38105
- exceed = true;
38106
- tmpRow.push({
38107
- ...restItem,
38108
- span: restSpan
38109
- });
38110
- } else {
38111
- tmpRow.push(restItem);
38112
- }
38113
- rows.push(tmpRow);
38114
- // reset
38115
- tmpRow = [];
38116
- count = 0;
38117
- } else {
38118
- tmpRow.push(restItem);
38119
- }
38120
- });
38121
- if (tmpRow.length > 0) {
38122
- rows.push(tmpRow);
38123
- }
38124
- rows = rows.map((rows)=>{
38125
- const count = rows.reduce((acc, item)=>acc + (item.span || 1), 0);
38126
- if (count < mergedColumn) {
38127
- // If the span of the last element in the current row is less than the column, then add its span to the remaining columns
38128
- const last = rows[rows.length - 1];
38129
- last.span = mergedColumn - (count - (last.span || 1));
38130
- return rows;
38131
- }
38132
- return rows;
38133
- });
38134
- return [
38135
- rows,
38136
- exceed
38137
- ];
38138
- }
38139
- const useRow = (mergedColumn, items)=>{
38140
- const [rows, exceed] = React.useMemo(()=>getCalcRows(items, mergedColumn), [
38141
- items,
38142
- mergedColumn
38143
- ]);
38144
- if (process.env.NODE_ENV !== 'production') {
38145
- const warning = devUseWarning('Descriptions');
38146
- process.env.NODE_ENV !== "production" ? warning(!exceed, 'usage', 'Sum of column `span` in a line not match `column` of Descriptions.') : void 0;
38147
- }
38148
- return rows;
38149
- };
38150
-
38151
- // JSX Structure Syntactic Sugar. Never reach the render code.
38152
- /* istanbul ignore next */ const DescriptionsItem = (props)=>{
38153
- return props.children;
38154
- };
38155
-
38156
- const Cell = (props)=>{
38157
- const { itemPrefixCls, component, span, className, style, labelStyle, contentStyle, bordered, label, content, colon, type, styles, classNames } = props;
38158
- const Component = component;
38159
- const { classNames: contextClassNames, styles: contextStyles } = React.useContext(DescriptionsContext);
38160
- const [mergedClassNames, mergedStyles] = useMergeSemantic([
38161
- contextClassNames,
38162
- classNames
38163
- ], [
38164
- contextStyles,
38165
- styles
38166
- ], {
38167
- props
38168
- });
38169
- const mergedLabelStyle = {
38170
- ...labelStyle,
38171
- ...mergedStyles.label
38172
- };
38173
- const mergedContentStyle = {
38174
- ...contentStyle,
38175
- ...mergedStyles.content
38176
- };
38177
- if (bordered) {
38178
- return /*#__PURE__*/ React.createElement(Component, {
38179
- colSpan: span,
38180
- style: style,
38181
- className: clsx(className, {
38182
- [`${itemPrefixCls}-item-${type}`]: type === 'label' || type === 'content',
38183
- [mergedClassNames.label]: mergedClassNames.label && type === 'label',
38184
- [mergedClassNames.content]: mergedClassNames.content && type === 'content'
38185
- })
38186
- }, isNonNullable(label) && /*#__PURE__*/ React.createElement("span", {
38187
- style: mergedLabelStyle
38188
- }, label), isNonNullable(content) && /*#__PURE__*/ React.createElement("span", {
38189
- style: mergedContentStyle
38190
- }, content));
38191
- }
38192
- return /*#__PURE__*/ React.createElement(Component, {
38193
- className: clsx(`${itemPrefixCls}-item`, className),
38194
- style: style,
38195
- colSpan: span
38196
- }, /*#__PURE__*/ React.createElement("div", {
38197
- className: `${itemPrefixCls}-item-container`
38198
- }, isNonNullable(label) && /*#__PURE__*/ React.createElement("span", {
38199
- style: mergedLabelStyle,
38200
- className: clsx(`${itemPrefixCls}-item-label`, mergedClassNames.label, {
38201
- [`${itemPrefixCls}-item-no-colon`]: !colon
38202
- })
38203
- }, label), isNonNullable(content) && /*#__PURE__*/ React.createElement("span", {
38204
- style: mergedContentStyle,
38205
- className: clsx(`${itemPrefixCls}-item-content`, mergedClassNames.content)
38206
- }, content)));
38207
- };
38208
-
38209
- function renderCells(items, { colon, prefixCls, bordered }, { component, type, showLabel, showContent, labelStyle: rootLabelStyle, contentStyle: rootContentStyle, styles: rootStyles }) {
38210
- return items.map(({ label, children, prefixCls: itemPrefixCls = prefixCls, className, style, labelStyle, contentStyle, span = 1, key, styles, classNames }, index)=>{
38211
- if (typeof component === 'string') {
38212
- return /*#__PURE__*/ React__namespace.createElement(Cell, {
38213
- key: `${type}-${key || index}`,
38214
- className: className,
38215
- style: style,
38216
- classNames: classNames,
38217
- styles: {
38218
- label: {
38219
- ...rootLabelStyle,
38220
- ...rootStyles?.label,
38221
- ...labelStyle,
38222
- ...styles?.label
38223
- },
38224
- content: {
38225
- ...rootContentStyle,
38226
- ...rootStyles?.content,
38227
- ...contentStyle,
38228
- ...styles?.content
38229
- }
38230
- },
38231
- span: span,
38232
- colon: colon,
38233
- component: component,
38234
- itemPrefixCls: itemPrefixCls,
38235
- bordered: bordered,
38236
- label: showLabel ? label : null,
38237
- content: showContent ? children : null,
38238
- type: type
38239
- });
38240
- }
38241
- return [
38242
- /*#__PURE__*/ React__namespace.createElement(Cell, {
38243
- key: `label-${key || index}`,
38244
- className: className,
38245
- style: {
38246
- ...rootLabelStyle,
38247
- ...rootStyles?.label,
38248
- ...style,
38249
- ...labelStyle,
38250
- ...styles?.label
38251
- },
38252
- span: 1,
38253
- colon: colon,
38254
- component: component[0],
38255
- itemPrefixCls: itemPrefixCls,
38256
- bordered: bordered,
38257
- label: label,
38258
- type: "label"
38259
- }),
38260
- /*#__PURE__*/ React__namespace.createElement(Cell, {
38261
- key: `content-${key || index}`,
38262
- className: className,
38263
- style: {
38264
- ...rootContentStyle,
38265
- ...rootStyles?.content,
38266
- ...style,
38267
- ...contentStyle,
38268
- ...styles?.content
38269
- },
38270
- span: span * 2 - 1,
38271
- component: component[1],
38272
- itemPrefixCls: itemPrefixCls,
38273
- bordered: bordered,
38274
- content: children,
38275
- type: "content"
38276
- })
38277
- ];
38278
- });
38279
- }
38280
- const Row = (props)=>{
38281
- const descContext = React__namespace.useContext(DescriptionsContext);
38282
- const { prefixCls, vertical, row, index, bordered } = props;
38283
- if (vertical) {
38284
- return /*#__PURE__*/ React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/ React__namespace.createElement("tr", {
38285
- key: `label-${index}`,
38286
- className: `${prefixCls}-row`
38287
- }, renderCells(row, props, {
38288
- component: 'th',
38289
- type: 'label',
38290
- showLabel: true,
38291
- ...descContext
38292
- })), /*#__PURE__*/ React__namespace.createElement("tr", {
38293
- key: `content-${index}`,
38294
- className: `${prefixCls}-row`
38295
- }, renderCells(row, props, {
38296
- component: 'td',
38297
- type: 'content',
38298
- showContent: true,
38299
- ...descContext
38300
- })));
38301
- }
38302
- return /*#__PURE__*/ React__namespace.createElement("tr", {
38303
- key: index,
38304
- className: `${prefixCls}-row`
38305
- }, renderCells(row, props, {
38306
- component: bordered ? [
38307
- 'th',
38308
- 'td'
38309
- ] : 'td',
38310
- type: 'item',
38311
- showLabel: true,
38312
- showContent: true,
38313
- ...descContext
38314
- }));
38315
- };
38316
-
38317
- const genBorderedStyle$2 = (token)=>{
38318
- const { componentCls, labelBg } = token;
38319
- return {
38320
- [`&${componentCls}-bordered`]: {
38321
- [`> ${componentCls}-view`]: {
38322
- border: `${cssinjs.unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
38323
- '> table': {
38324
- tableLayout: 'auto'
38325
- },
38326
- [`${componentCls}-row`]: {
38327
- borderBottom: `${cssinjs.unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
38328
- '&:first-child': {
38329
- '> th:first-child, > td:first-child': {
38330
- borderStartStartRadius: token.borderRadiusLG
38331
- }
38332
- },
38333
- '&:last-child': {
38334
- borderBottom: 'none',
38335
- '> th:first-child, > td:first-child': {
38336
- borderEndStartRadius: token.borderRadiusLG
38337
- }
38338
- },
38339
- [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {
38340
- padding: `${cssinjs.unit(token.padding)} ${cssinjs.unit(token.paddingLG)}`,
38341
- borderInlineEnd: `${cssinjs.unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
38342
- '&:last-child': {
38343
- borderInlineEnd: 'none'
38344
- }
38345
- },
38346
- [`> ${componentCls}-item-label`]: {
38347
- color: token.colorTextSecondary,
38348
- backgroundColor: labelBg,
38349
- '&::after': {
38350
- display: 'none'
38351
- }
38352
- }
38353
- }
38354
- },
38355
- [`&${componentCls}-middle`]: {
38356
- [`${componentCls}-row`]: {
38357
- [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {
38358
- padding: `${cssinjs.unit(token.paddingSM)} ${cssinjs.unit(token.paddingLG)}`
38359
- }
38360
- }
38361
- },
38362
- [`&${componentCls}-small`]: {
38363
- [`${componentCls}-row`]: {
38364
- [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {
38365
- padding: `${cssinjs.unit(token.paddingXS)} ${cssinjs.unit(token.padding)}`
38366
- }
38367
- }
38368
- }
38369
- }
38370
- };
38371
- };
38372
- const genDescriptionStyles = (token)=>{
38373
- const { componentCls, extraColor, itemPaddingBottom, itemPaddingEnd, colonMarginRight, colonMarginLeft, titleMarginBottom } = token;
38374
- return {
38375
- [componentCls]: {
38376
- ...resetComponent(token),
38377
- ...genBorderedStyle$2(token),
38378
- '&-rtl': {
38379
- direction: 'rtl'
38380
- },
38381
- [`${componentCls}-header`]: {
38382
- display: 'flex',
38383
- alignItems: 'center',
38384
- marginBottom: titleMarginBottom
38385
- },
38386
- [`${componentCls}-title`]: {
38387
- ...textEllipsis,
38388
- flex: 'auto',
38389
- color: token.titleColor,
38390
- fontWeight: token.fontWeightStrong,
38391
- fontSize: token.fontSizeLG,
38392
- lineHeight: token.lineHeightLG
38393
- },
38394
- [`${componentCls}-extra`]: {
38395
- marginInlineStart: 'auto',
38396
- color: extraColor,
38397
- fontSize: token.fontSize
38398
- },
38399
- [`${componentCls}-view`]: {
38400
- width: '100%',
38401
- borderRadius: token.borderRadiusLG,
38402
- table: {
38403
- width: '100%',
38404
- tableLayout: 'fixed',
38405
- borderCollapse: 'collapse'
38406
- }
38407
- },
38408
- [`${componentCls}-row`]: {
38409
- '> th, > td': {
38410
- paddingBottom: itemPaddingBottom,
38411
- paddingInlineEnd: itemPaddingEnd
38412
- },
38413
- '> th:last-child, > td:last-child': {
38414
- paddingInlineEnd: 0
38415
- },
38416
- '&:last-child': {
38417
- borderBottom: 'none',
38418
- '> th, > td': {
38419
- paddingBottom: 0
38420
- }
38421
- }
38422
- },
38423
- [`${componentCls}-item-label`]: {
38424
- color: token.labelColor,
38425
- fontWeight: 'normal',
38426
- fontSize: token.fontSize,
38427
- lineHeight: token.lineHeight,
38428
- textAlign: 'start',
38429
- '&::after': {
38430
- content: '":"',
38431
- position: 'relative',
38432
- top: -0.5,
38433
- // magic for position
38434
- marginInline: `${cssinjs.unit(colonMarginLeft)} ${cssinjs.unit(colonMarginRight)}`
38435
- },
38436
- [`&${componentCls}-item-no-colon::after`]: {
38437
- content: '""'
38438
- }
38439
- },
38440
- [`${componentCls}-item-no-label`]: {
38441
- '&::after': {
38442
- margin: 0,
38443
- content: '""'
38444
- }
38445
- },
38446
- [`${componentCls}-item-content`]: {
38447
- display: 'table-cell',
38448
- flex: 1,
38449
- color: token.contentColor,
38450
- fontSize: token.fontSize,
38451
- lineHeight: token.lineHeight,
38452
- wordBreak: 'break-word',
38453
- overflowWrap: 'break-word'
38454
- },
38455
- [`${componentCls}-item`]: {
38456
- paddingBottom: 0,
38457
- verticalAlign: 'top',
38458
- '&-container': {
38459
- display: 'flex',
38460
- [`${componentCls}-item-label`]: {
38461
- display: 'inline-flex',
38462
- alignItems: 'baseline'
38463
- },
38464
- [`${componentCls}-item-content`]: {
38465
- display: 'inline-flex',
38466
- alignItems: 'baseline',
38467
- minWidth: '1em'
38468
- }
38469
- }
38470
- },
38471
- '&-middle': {
38472
- [`${componentCls}-row`]: {
38473
- '> th, > td': {
38474
- paddingBottom: token.paddingSM
38475
- }
38476
- }
38477
- },
38478
- '&-small': {
38479
- [`${componentCls}-row`]: {
38480
- '> th, > td': {
38481
- paddingBottom: token.paddingXS
38482
- }
38483
- }
38484
- }
38485
- }
38486
- };
38487
- };
38488
- const prepareComponentToken$9 = (token)=>({
38489
- labelBg: token.colorFillAlter,
38490
- labelColor: token.colorTextTertiary,
38491
- titleColor: token.colorText,
38492
- titleMarginBottom: token.fontSizeSM * token.lineHeightSM,
38493
- itemPaddingBottom: token.padding,
38494
- itemPaddingEnd: token.padding,
38495
- colonMarginRight: token.marginXS,
38496
- colonMarginLeft: token.marginXXS / 2,
38497
- contentColor: token.colorText,
38498
- extraColor: token.colorText
38499
- });
38500
- // ============================== Export ==============================
38501
- var useStyle$b = genStyleHooks('Descriptions', (token)=>{
38502
- const descriptionToken = cssinjsUtils.mergeToken(token, {});
38503
- return genDescriptionStyles(descriptionToken);
38504
- }, prepareComponentToken$9);
38505
-
38506
- const Descriptions = (props)=>{
38507
- const { prefixCls: customizePrefixCls, title, extra, column, colon = true, bordered, layout, children, className, rootClassName, style, size: customizeSize, labelStyle, contentStyle, styles, items, classNames, ...restProps } = props;
38508
- const { getPrefixCls, direction, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles } = useComponentConfig('descriptions');
38509
- const prefixCls = getPrefixCls('descriptions', customizePrefixCls);
38510
- const screens = useBreakpoint();
38511
- // ============================== Warn ==============================
38512
- if (process.env.NODE_ENV !== 'production') {
38513
- const warning = devUseWarning('Descriptions');
38514
- [
38515
- [
38516
- 'labelStyle',
38517
- 'styles.label'
38518
- ],
38519
- [
38520
- 'contentStyle',
38521
- 'styles.content'
38522
- ]
38523
- ].forEach(([deprecatedName, newName])=>{
38524
- warning.deprecated(!(deprecatedName in props), deprecatedName, newName);
38525
- });
38526
- }
38527
- // Column count
38528
- const mergedColumn = React__namespace.useMemo(()=>{
38529
- if (typeof column === 'number') {
38530
- return column;
38531
- }
38532
- return matchScreen(screens, {
38533
- ...DEFAULT_COLUMN_MAP,
38534
- ...column
38535
- }) ?? 3;
38536
- }, [
38537
- screens,
38538
- column
38539
- ]);
38540
- // Items with responsive
38541
- const mergedItems = useItems(screens, items, children);
38542
- const mergedSize = useSize(customizeSize);
38543
- const rows = useRow(mergedColumn, mergedItems);
38544
- const [hashId, cssVarCls] = useStyle$b(prefixCls);
38545
- // =========== Merged Props for Semantic ==========
38546
- const mergedProps = {
38547
- ...props,
38548
- column: mergedColumn,
38549
- items: mergedItems,
38550
- size: mergedSize
38551
- };
38552
- const [mergedClassNames, mergedStyles] = useMergeSemantic([
38553
- contextClassNames,
38554
- classNames
38555
- ], [
38556
- contextStyles,
38557
- styles
38558
- ], {
38559
- props: mergedProps
38560
- });
38561
- // ======================== Render ========================
38562
- const memoizedValue = React__namespace.useMemo(()=>({
38563
- labelStyle,
38564
- contentStyle,
38565
- styles: {
38566
- label: mergedStyles.label,
38567
- content: mergedStyles.content
38568
- },
38569
- classNames: {
38570
- label: mergedClassNames.label,
38571
- content: mergedClassNames.content
38572
- }
38573
- }), [
38574
- labelStyle,
38575
- contentStyle,
38576
- mergedStyles.label,
38577
- mergedStyles.content,
38578
- mergedClassNames.label,
38579
- mergedClassNames.content
38580
- ]);
38581
- return /*#__PURE__*/ React__namespace.createElement(DescriptionsContext.Provider, {
38582
- value: memoizedValue
38583
- }, /*#__PURE__*/ React__namespace.createElement("div", {
38584
- className: clsx(prefixCls, contextClassName, mergedClassNames.root, {
38585
- [`${prefixCls}-${mergedSize}`]: mergedSize && mergedSize !== 'default',
38586
- [`${prefixCls}-bordered`]: !!bordered,
38587
- [`${prefixCls}-rtl`]: direction === 'rtl'
38588
- }, className, rootClassName, hashId, cssVarCls),
38589
- style: {
38590
- ...contextStyle,
38591
- ...mergedStyles.root,
38592
- ...style
38593
- },
38594
- ...restProps
38595
- }, (title || extra) && /*#__PURE__*/ React__namespace.createElement("div", {
38596
- className: clsx(`${prefixCls}-header`, mergedClassNames.header),
38597
- style: mergedStyles.header
38598
- }, title && /*#__PURE__*/ React__namespace.createElement("div", {
38599
- className: clsx(`${prefixCls}-title`, mergedClassNames.title),
38600
- style: mergedStyles.title
38601
- }, title), extra && /*#__PURE__*/ React__namespace.createElement("div", {
38602
- className: clsx(`${prefixCls}-extra`, mergedClassNames.extra),
38603
- style: mergedStyles.extra
38604
- }, extra)), /*#__PURE__*/ React__namespace.createElement("div", {
38605
- className: `${prefixCls}-view`
38606
- }, /*#__PURE__*/ React__namespace.createElement("table", null, /*#__PURE__*/ React__namespace.createElement("tbody", null, rows.map((row, index)=>/*#__PURE__*/ React__namespace.createElement(Row, {
38607
- key: index,
38608
- index: index,
38609
- colon: colon,
38610
- prefixCls: prefixCls,
38611
- vertical: layout === 'vertical',
38612
- bordered: bordered,
38613
- row: row
38614
- })))))));
38615
- };
38616
- if (process.env.NODE_ENV !== 'production') {
38617
- Descriptions.displayName = 'Descriptions';
38618
- }
38619
- Descriptions.Item = DescriptionsItem;
38620
-
38621
37705
  const DrawerPanel = (props)=>{
38622
37706
  const { prefixCls, ariaId, title, footer, extra, closable, loading, onClose, headerStyle, bodyStyle, footerStyle, children, classNames: drawerClassNames, styles: drawerStyles } = props;
38623
37707
  const drawerContext = useComponentConfig('drawer');
@@ -44384,11 +43468,11 @@ const injectSorter = (prefixCls, columns, sorterStates, triggerSorter, defaultSo
44384
43468
  if (typeof showSorterTooltip !== 'boolean' && showSorterTooltip?.target === 'sorter-icon') {
44385
43469
  return /*#__PURE__*/ React__namespace.createElement("div", {
44386
43470
  className: clsx(columnSortersClass, `${columnSortersClass}-tooltip-target-sorter`)
44387
- }, renderColumnTitleWrapper, /*#__PURE__*/ React__namespace.createElement(Tooltip, {
43471
+ }, renderColumnTitleWrapper, /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
44388
43472
  ...tooltipProps
44389
43473
  }, sorter));
44390
43474
  }
44391
- return /*#__PURE__*/ React__namespace.createElement(Tooltip, {
43475
+ return /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
44392
43476
  ...tooltipProps
44393
43477
  }, renderSortTitle);
44394
43478
  }
@@ -47471,7 +46555,7 @@ const CopyBtn = ({ prefixCls, copied, locale, iconOnly, tooltips, icon, tabIndex
47471
46555
  const systemStr = copied ? copiedText : copyText;
47472
46556
  const copyTitle = getNode(tooltipNodes[copied ? 1 : 0], systemStr);
47473
46557
  const ariaLabel = typeof copyTitle === 'string' ? copyTitle : systemStr;
47474
- return /*#__PURE__*/ React__namespace.createElement(Tooltip, {
46558
+ return /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
47475
46559
  title: copyTitle
47476
46560
  }, /*#__PURE__*/ React__namespace.createElement("button", {
47477
46561
  type: "button",
@@ -47715,7 +46799,7 @@ const EllipsisTooltip = ({ enableEllipsis, isEllipsis, open, children, tooltipPr
47715
46799
  return children;
47716
46800
  }
47717
46801
  const mergedOpen = open && isEllipsis;
47718
- return /*#__PURE__*/ React__namespace.createElement(Tooltip, {
46802
+ return /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
47719
46803
  open: mergedOpen,
47720
46804
  ...tooltipProps
47721
46805
  }, children);
@@ -47969,7 +47053,7 @@ const Base = /*#__PURE__*/ React__namespace.forwardRef((props, ref$1)=>{
47969
47053
  const { icon, tooltip, tabIndex } = editConfig;
47970
47054
  const editTitle = util.toArray(tooltip)[0] || textLocale?.edit;
47971
47055
  const ariaLabel = typeof editTitle === 'string' ? editTitle : '';
47972
- return triggerType.includes('icon') ? /*#__PURE__*/ React__namespace.createElement(Tooltip, {
47056
+ return triggerType.includes('icon') ? /*#__PURE__*/ React__namespace.createElement(Tooltip$1, {
47973
47057
  key: "edit",
47974
47058
  title: tooltip === false ? '' : editTitle
47975
47059
  }, /*#__PURE__*/ React__namespace.createElement("button", {
@@ -48577,7 +47661,10 @@ const JsonTreeViewer = ({ data, maxDepth = 4, initialExpanded = false, expanded
48577
47661
  })()));
48578
47662
  };
48579
47663
 
48580
- const NODE_MAX_WIDTH = 500;
47664
+ /** Max width for rich content (drawer output blocks, etc.) */ const NODE_MAX_WIDTH = 500;
47665
+ /** Compact xyflow node card width range */ const FLOW_NODE_MIN_WIDTH = 176;
47666
+ const FLOW_NODE_MAX_WIDTH = 250;
47667
+ /** Used by auto-layout horizontal spacing (~typical card width between min and max) */ const LAYOUT_NODE_WIDTH = Math.round((FLOW_NODE_MIN_WIDTH + FLOW_NODE_MAX_WIDTH) / 2);
48581
47668
 
48582
47669
  const OutputRenderer = ({ data })=>{
48583
47670
  const [isExpanded, setIsExpanded] = React.useState(false);
@@ -49098,6 +48185,25 @@ const CountUpLatency = ({ value })=>{
49098
48185
  });
49099
48186
  }
49100
48187
  };
48188
+ /** Merged tool internals + first edge detail (same shape ToolNode used on-canvas). */ function buildToolDrawerPayload(nodeData) {
48189
+ const internals = nodeData.details?.internals;
48190
+ const base = internals && typeof internals === "object" ? {
48191
+ ...internals
48192
+ } : {};
48193
+ const edges = nodeData.edgeDetails;
48194
+ if (edges && edges.length > 0) {
48195
+ const d0 = edges[0];
48196
+ return {
48197
+ ...base,
48198
+ input: {
48199
+ ...d0?.input_kwargs ?? {}
48200
+ },
48201
+ output: d0?.output,
48202
+ status: d0?.status
48203
+ };
48204
+ }
48205
+ return Object.keys(base).length > 0 ? base : null;
48206
+ }
49101
48207
  const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49102
48208
  const { theme } = useTheme$1();
49103
48209
  const [selectedRowIndex, setSelectedRowIndex] = React.useState(null);
@@ -49131,12 +48237,16 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49131
48237
  }, [
49132
48238
  nodeData?.details?.internals?.llm_details?.length
49133
48239
  ]);
49134
- const llOverviewDetails = getOverviewLlmDetails(nodeData.details?.internals?.llm_details || []);
49135
- const totalCost = sumTotalCost(nodeData.details?.internals?.llm_details || []);
49136
- const totalInputTokens = sumTotalInputTokens(nodeData.details?.internals?.llm_details || []);
49137
- const totalOutputTokens = sumTotalOutputTokens(nodeData.details?.internals?.llm_details || []);
49138
- const totalLatency = sumTotalLatency(nodeData.details?.internals?.llm_details || []);
49139
- const drawerTitle = /*#__PURE__*/ React.createElement(DrawerTitleContent, null, /*#__PURE__*/ React.createElement(NodeIcon$3, null, getNodeIcon({
48240
+ const nodeType = nodeData.nodeType || "Agent";
48241
+ const llmDetailsList = nodeData.details?.internals?.llm_details || [];
48242
+ const llOverviewDetails = getOverviewLlmDetails(llmDetailsList);
48243
+ const totalCost = sumTotalCost(llmDetailsList);
48244
+ const totalInputTokens = sumTotalInputTokens(llmDetailsList);
48245
+ const totalOutputTokens = sumTotalOutputTokens(llmDetailsList);
48246
+ const totalLatency = sumTotalLatency(llmDetailsList);
48247
+ const toolDrawerPayload = nodeType === "Tool" ? buildToolDrawerPayload(nodeData) : null;
48248
+ const nodeLatencySeconds = nodeData.details?.internals?.latency?.total_time;
48249
+ const drawerTitle = /*#__PURE__*/ React.createElement(DrawerTitleContent, null, /*#__PURE__*/ React.createElement(NodeIcon$2, null, getNodeIcon({
49140
48250
  nodeType: (nodeData.nodeType || "Agent").toLowerCase(),
49141
48251
  modelProvider: llOverviewDetails?.model_provider,
49142
48252
  modelName: llOverviewDetails?.model_name
@@ -49148,7 +48258,7 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49148
48258
  onClose: onClose,
49149
48259
  closable: {
49150
48260
  closeIcon: /*#__PURE__*/ React.createElement(Button$1, {
49151
- type: "text",
48261
+ type: "link",
49152
48262
  icon: /*#__PURE__*/ React.createElement(X$1, {
49153
48263
  size: 16,
49154
48264
  color: theme.colors.foreground
@@ -49160,7 +48270,7 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49160
48270
  "aria-label": "Close drawer"
49161
48271
  })
49162
48272
  },
49163
- size: "400px",
48273
+ size: "500px",
49164
48274
  getContainer: ()=>document.body,
49165
48275
  zIndex: 1100,
49166
48276
  "data-testid": "node-details-drawer",
@@ -49176,8 +48286,15 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49176
48286
  }
49177
48287
  }, /*#__PURE__*/ React.createElement(DrawerBodyContent, {
49178
48288
  "data-testid": "node-details-drawer-content"
49179
- }, llOverviewDetails && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(InfoGrid, null, (()=>{
49180
- const llmDetails = nodeData.details?.internals?.llm_details || [];
48289
+ }, nodeType === "Tool" && /*#__PURE__*/ React.createElement(React.Fragment, null, nodeLatencySeconds != null && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(InfoItem, null, /*#__PURE__*/ React.createElement(InfoLabel, null, "Latency"), /*#__PURE__*/ React.createElement(InfoValue, null, formatLatency(nodeLatencySeconds)))), toolDrawerPayload ? /*#__PURE__*/ React.createElement(Section, {
48290
+ "data-testid": "tool-drawer-json"
48291
+ }, /*#__PURE__*/ React.createElement(JsonTreeViewer, {
48292
+ excludeKeys: [
48293
+ "latency"
48294
+ ],
48295
+ data: toolDrawerPayload
48296
+ })) : null), nodeType === "Agent" && !llOverviewDetails && nodeLatencySeconds != null && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(InfoItem, null, /*#__PURE__*/ React.createElement(InfoLabel, null, "Latency"), /*#__PURE__*/ React.createElement(InfoValue, null, formatLatency(nodeLatencySeconds)))), nodeType === "Agent" && llOverviewDetails && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(InfoGrid, null, (()=>{
48297
+ const llmDetails = llmDetailsList;
49181
48298
  const isAggregateSelected = selectedRowIndex === llmDetails.length;
49182
48299
  const selectedDetails = isAggregateSelected ? null // Use aggregate values
49183
48300
  : llmDetails[selectedRowIndex || 0];
@@ -49214,7 +48331,13 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49214
48331
  prefix: "$",
49215
48332
  suffix: " USD"
49216
48333
  }) : "N/A")));
49217
- })())), nodeData.details?.internals?.llm_details?.length > 1 && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(TableWrapper, null, /*#__PURE__*/ React.createElement("table", null, /*#__PURE__*/ React.createElement("thead", null, /*#__PURE__*/ React.createElement("tr", null, /*#__PURE__*/ React.createElement("th", {
48334
+ })())), nodeType === "Agent" && llOverviewDetails && llmDetailsList.length === 1 && /*#__PURE__*/ React.createElement(Section, {
48335
+ "data-testid": "agent-single-llm-messages"
48336
+ }, /*#__PURE__*/ React.createElement(InputArrayRenderer, {
48337
+ input: llOverviewDetails.input || []
48338
+ }), llOverviewDetails.output ? /*#__PURE__*/ React.createElement(OutputRenderer, {
48339
+ data: llOverviewDetails.output
48340
+ }) : null), nodeType === "Agent" && llmDetailsList.length > 1 && /*#__PURE__*/ React.createElement(Section, null, /*#__PURE__*/ React.createElement(TableWrapper, null, /*#__PURE__*/ React.createElement("table", null, /*#__PURE__*/ React.createElement("thead", null, /*#__PURE__*/ React.createElement("tr", null, /*#__PURE__*/ React.createElement("th", {
49218
48341
  style: {
49219
48342
  textAlign: "center"
49220
48343
  }
@@ -49234,7 +48357,7 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49234
48357
  style: {
49235
48358
  textAlign: "right"
49236
48359
  }
49237
- }, "Latency"))), /*#__PURE__*/ React.createElement("tbody", null, nodeData.details.internals.llm_details.map((details, index)=>/*#__PURE__*/ React.createElement("tr", {
48360
+ }, "Latency"))), /*#__PURE__*/ React.createElement("tbody", null, llmDetailsList.map((details, index)=>/*#__PURE__*/ React.createElement("tr", {
49238
48361
  key: index,
49239
48362
  onClick: ()=>handleShowModelDetails(details, index),
49240
48363
  className: selectedRowIndex === index ? "selected-row" : ""
@@ -49275,7 +48398,7 @@ const NodeDetailsDrawer = ({ isVisible, onClose, nodeData })=>{
49275
48398
  value: details.latency
49276
48399
  }) : "N/A"))), /*#__PURE__*/ React.createElement("tr", {
49277
48400
  key: "total",
49278
- className: `total-row ${selectedRowIndex === nodeData.details?.internals?.llm_details.length ? "selected-row" : ""}`,
48401
+ className: `total-row ${selectedRowIndex === llmDetailsList.length ? "selected-row" : ""}`,
49279
48402
  onClick: handleShowAggregateDetails
49280
48403
  }, /*#__PURE__*/ React.createElement("td", {
49281
48404
  style: {
@@ -49435,7 +48558,7 @@ const InfoValue = styled.span`
49435
48558
  color: ${(p)=>p.theme?.colors?.foreground ?? "inherit"};
49436
48559
  word-break: break-word;
49437
48560
  `;
49438
- const NodeIcon$3 = styled.div`
48561
+ const NodeIcon$2 = styled.div`
49439
48562
  font-size: ${(p)=>p.theme?.fontSize?.xl ?? "1.25rem"};
49440
48563
  display: flex;
49441
48564
  align-items: center;
@@ -49455,7 +48578,6 @@ const resolveProviderFromModelName = (modelName)=>{
49455
48578
  const { nodeType, modelProvider, modelName, size = 16 } = options ?? {};
49456
48579
  const normalizedNodeType = nodeType?.toLowerCase();
49457
48580
  if (normalizedNodeType === "tool") return "🔧";
49458
- if (normalizedNodeType === "coordinator") return "🎯";
49459
48581
  const normalizedProvider = modelProvider?.toLowerCase();
49460
48582
  const resolvedProvider = !normalizedProvider || normalizedProvider === "unknown" ? resolveProviderFromModelName(modelName) : normalizedProvider;
49461
48583
  if (resolvedProvider === "openai") return /*#__PURE__*/ React.createElement(OpenAIIcon, {
@@ -49531,18 +48653,12 @@ const AgentNode = ({ data, id, onInspect, defaultDrawerOpen })=>{
49531
48653
  primary: "hsl(221.2 83.2% 53.3%)",
49532
48654
  background: "hsl(0 0% 100%)"
49533
48655
  };
49534
- // State for inspection drawer
49535
48656
  const [isDrawerOpen, setIsDrawerOpen] = React.useState(defaultDrawerOpen ?? false);
49536
- const nodeRef = React.useRef(null);
49537
- // Check if this node has any outgoing edges (source edges)
49538
48657
  const hasOutgoingEdges = data.edges?.some((edge)=>edge.source === id) || false;
49539
- // Check if this node has any incoming edges (target edges)
49540
48658
  const hasIncomingEdges = data.edges?.some((edge)=>edge.target === id) || false;
49541
48659
  const handleNodeClick = ()=>{
49542
48660
  setIsDrawerOpen(true);
49543
- if (onInspect) {
49544
- onInspect(data);
49545
- }
48661
+ onInspect?.(data);
49546
48662
  };
49547
48663
  const handleCloseDrawer = ()=>{
49548
48664
  setIsDrawerOpen(false);
@@ -49558,12 +48674,8 @@ const AgentNode = ({ data, id, onInspect, defaultDrawerOpen })=>{
49558
48674
  });
49559
48675
  const totalCost = sumTotalCost(data.details?.internals?.llm_details || []);
49560
48676
  const totalCostFormatted = formatCurrency(totalCost);
49561
- const totalCostTooltip = `Total cost: ${formatCurrency(totalCost)} USD`;
49562
- const nodeDetails = getOverviewLlmDetails(data.details?.internals?.llm_details || []);
49563
- const inputArray = nodeDetails?.input || [];
49564
- const output = nodeDetails?.output || null;
49565
- return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(NodeContainer$2, {
49566
- ref: nodeRef,
48677
+ const providerLine = `${modelName || "—"}`;
48678
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(NodeContainer$1, {
49567
48679
  onClick: handleNodeClick,
49568
48680
  className: "nowheel agent-node"
49569
48681
  }, hasIncomingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
@@ -49577,17 +48689,21 @@ const AgentNode = ({ data, id, onInspect, defaultDrawerOpen })=>{
49577
48689
  cursor: "default"
49578
48690
  },
49579
48691
  isConnectable: false
49580
- }), /*#__PURE__*/ React.createElement(NodeHeader$2, null, /*#__PURE__*/ React.createElement(NodeIconContainer$2, null, /*#__PURE__*/ React.createElement(NodeIcon$2, null, nodeIcon), /*#__PURE__*/ React.createElement(NodeLabel$2, null, nodeLabel)), /*#__PURE__*/ React.createElement(BadgeContainer$2, null, /*#__PURE__*/ React.createElement(Badge, {
49581
- variant: "gray",
49582
- title: modelName || "Unknown"
49583
- }, modelName || "Unknown"), /*#__PURE__*/ React.createElement(Badge, {
49584
- variant: "cost",
49585
- title: totalCostTooltip
49586
- }, totalCostFormatted))), /*#__PURE__*/ React.createElement(NodeContent$2, null, /*#__PURE__*/ React.createElement(InputArrayRenderer, {
49587
- input: inputArray
49588
- }), output ? /*#__PURE__*/ React.createElement(OutputRenderer, {
49589
- data: output
49590
- }) : null), hasOutgoingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
48692
+ }), /*#__PURE__*/ React.createElement(NodeBody$1, null, /*#__PURE__*/ React.createElement(TitleRow$1, null, /*#__PURE__*/ React.createElement(NodeIcon$1, null, nodeIcon), /*#__PURE__*/ React.createElement(NodeLabel$1, {
48693
+ title: nodeLabel
48694
+ }, nodeLabel)), /*#__PURE__*/ React.createElement(MetaLine, {
48695
+ title: providerLine
48696
+ }, /*#__PURE__*/ React.createElement(MetaLineIcon, {
48697
+ "aria-hidden": true
48698
+ }, /*#__PURE__*/ React.createElement(Cpu, {
48699
+ size: 12,
48700
+ strokeWidth: 2
48701
+ })), /*#__PURE__*/ React.createElement(MetaLineText, null, providerLine)), /*#__PURE__*/ React.createElement(CostLine, null, /*#__PURE__*/ React.createElement(CostLineIcon, {
48702
+ "aria-hidden": true
48703
+ }, /*#__PURE__*/ React.createElement(CircleDollarSign, {
48704
+ size: 13,
48705
+ strokeWidth: 2
48706
+ })), totalCostFormatted)), hasOutgoingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
49591
48707
  type: "source",
49592
48708
  position: Position.Bottom,
49593
48709
  style: {
@@ -49607,16 +48723,16 @@ const AgentNode = ({ data, id, onInspect, defaultDrawerOpen })=>{
49607
48723
  }
49608
48724
  })));
49609
48725
  };
49610
- // Styled components
49611
- const NodeContainer$2 = styled.div`
48726
+ const NodeContainer$1 = styled.div`
49612
48727
  border-radius: 0.5rem;
49613
48728
  background-color: ${(props)=>props.theme?.colors?.card || "hsl(0 0% 100%)"};
49614
48729
  border: 2px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
49615
48730
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
49616
- min-width: 300px;
49617
- max-width: ${NODE_MAX_WIDTH}px;
48731
+ min-width: ${FLOW_NODE_MIN_WIDTH}px;
48732
+ max-width: ${FLOW_NODE_MAX_WIDTH}px;
49618
48733
  transition: all 0.2s ease-in-out;
49619
48734
  position: relative;
48735
+ cursor: pointer;
49620
48736
 
49621
48737
  &:hover {
49622
48738
  border-color: ${(props)=>props.theme?.colors?.primary || "hsl(221.2 83.2% 53.3%)"};
@@ -49625,68 +48741,98 @@ const NodeContainer$2 = styled.div`
49625
48741
  0 2px 4px -1px rgba(0, 0, 0, 0.06);
49626
48742
  }
49627
48743
  `;
49628
- const NodeHeader$2 = styled.div`
48744
+ const NodeBody$1 = styled.div`
49629
48745
  display: flex;
49630
- justify-content: space-between;
49631
- align-items: center;
49632
- gap: 0.5rem;
49633
- padding: 0.75rem;
49634
- border-bottom: 1px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
48746
+ flex-direction: column;
48747
+ gap: 0.35rem;
48748
+ padding: 0.5rem 0.625rem;
49635
48749
  `;
49636
- const NodeIconContainer$2 = styled.div`
48750
+ const TitleRow$1 = styled.div`
49637
48751
  display: flex;
49638
48752
  align-items: center;
49639
- gap: 0.5rem;
48753
+ gap: 0.375rem;
48754
+ min-width: 0;
48755
+ width: 100%;
49640
48756
  `;
49641
- const NodeIcon$2 = styled.div`
49642
- font-size: 1.25rem;
48757
+ const NodeIcon$1 = styled.div`
48758
+ font-size: 1.125rem;
49643
48759
  display: flex;
49644
48760
  align-items: center;
49645
48761
  justify-content: center;
48762
+ flex-shrink: 0;
49646
48763
  color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49647
48764
  `;
49648
- const NodeLabel$2 = styled.div`
48765
+ const NodeLabel$1 = styled.div`
48766
+ flex: 1 1 0;
48767
+ min-width: 0;
49649
48768
  font-weight: 600;
49650
48769
  color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49651
- font-size: 0.875rem;
49652
- word-break: break-words;
48770
+ font-size: 0.8125rem;
48771
+ line-height: 1.25;
48772
+ overflow: hidden;
48773
+ text-overflow: ellipsis;
48774
+ white-space: nowrap;
49653
48775
  `;
49654
- const BadgeContainer$2 = styled.div`
48776
+ const MetaLine = styled.div`
49655
48777
  display: flex;
49656
- gap: 0.5rem;
49657
- justify-content: flex-end;
49658
- align-items: center;
48778
+ align-items: flex-start;
48779
+ gap: 0.3rem;
48780
+ font-size: 0.6875rem;
48781
+ line-height: 1.3;
48782
+ color: ${(props)=>props.theme?.colors?.mutedForeground || "hsl(215.4 16.3% 46.9%)"};
49659
48783
  `;
49660
- const NodeContent$2 = styled.div`
49661
- padding: 0.75rem;
48784
+ const MetaLineIcon = styled.span`
48785
+ display: inline-flex;
48786
+ flex-shrink: 0;
48787
+ margin-top: 0.1em;
48788
+ color: inherit;
48789
+ `;
48790
+ const MetaLineText = styled.span`
48791
+ min-width: 0;
48792
+ flex: 1;
48793
+ word-break: break-word;
48794
+ display: -webkit-box;
48795
+ -webkit-line-clamp: 2;
48796
+ -webkit-box-orient: vertical;
48797
+ overflow: hidden;
48798
+ `;
48799
+ const CostLine = styled.div`
49662
48800
  display: flex;
49663
- flex-direction: column;
49664
- align-items: flex-start;
49665
- justify-content: center;
49666
- gap: 0.5rem;
48801
+ align-items: center;
48802
+ gap: 0.3rem;
48803
+ font-color: inherit;
48804
+ font-size: 0.75rem;
48805
+ font-weight: 600;
48806
+ `;
48807
+ const CostLineIcon = styled.span`
48808
+ display: inline-flex;
48809
+ flex-shrink: 0;
48810
+ color: inherit;
49667
48811
  `;
49668
48812
 
49669
- const CoordinatorNode = ({ data, id, onInspect })=>{
48813
+ const ToolNode = ({ data, id, onInspect })=>{
49670
48814
  const { theme } = useTheme$1();
49671
48815
  const themeColors = theme?.colors || {
49672
48816
  primary: "hsl(221.2 83.2% 53.3%)",
49673
48817
  background: "hsl(0 0% 100%)"
49674
48818
  };
49675
- // Check if this node has any outgoing edges (source edges)
48819
+ const [isDrawerOpen, setIsDrawerOpen] = React.useState(false);
49676
48820
  const hasOutgoingEdges = data.edges?.some((edge)=>edge.source === id) || false;
49677
- // Check if this node has any incoming edges (target edges)
49678
48821
  const hasIncomingEdges = data.edges?.some((edge)=>edge.target === id) || false;
49679
48822
  const handleNodeClick = ()=>{
49680
- // Console log the node data for Coordinator nodes
49681
- console.log("Coordinator node clicked:", {
49682
- label: data.label,
49683
- nodeType: data.nodeType,
49684
- details: data.details
49685
- });
48823
+ setIsDrawerOpen(true);
48824
+ onInspect?.(data);
48825
+ };
48826
+ const handleCloseDrawer = ()=>{
48827
+ setIsDrawerOpen(false);
49686
48828
  };
49687
- const nodeLabel = data.label || toTitleCase("Coordinator") || "Coordinator";
49688
- return /*#__PURE__*/ React.createElement(NodeContainer$1, {
49689
- onClick: handleNodeClick
48829
+ const nodeLabel = data.label || toTitleCase("Tool") || "Tool";
48830
+ const nodeIcon = getNodeIcon({
48831
+ nodeType: "tool"
48832
+ });
48833
+ return /*#__PURE__*/ React.createElement(NodeContainer, {
48834
+ onClick: handleNodeClick,
48835
+ className: "nowheel"
49690
48836
  }, hasIncomingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
49691
48837
  type: "target",
49692
48838
  position: Position.Top,
@@ -49698,11 +48844,9 @@ const CoordinatorNode = ({ data, id, onInspect })=>{
49698
48844
  cursor: "default"
49699
48845
  },
49700
48846
  isConnectable: false
49701
- }), /*#__PURE__*/ React.createElement(NodeHeader$1, null, /*#__PURE__*/ React.createElement(NodeIconContainer$1, null, /*#__PURE__*/ React.createElement(NodeIcon$1, null, "🎯"), /*#__PURE__*/ React.createElement(NodeLabel$1, null, nodeLabel)), /*#__PURE__*/ React.createElement(BadgeContainer$1, null, /*#__PURE__*/ React.createElement(Badge, {
49702
- variant: "gray"
49703
- }, "Coordinator"))), /*#__PURE__*/ React.createElement(NodeContent$1, null, /*#__PURE__*/ React.createElement(JsonTreeViewer, {
49704
- data: data.details?.internals || {}
49705
- })), hasOutgoingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
48847
+ }), /*#__PURE__*/ React.createElement(NodeBody, null, /*#__PURE__*/ React.createElement(TitleRow, null, /*#__PURE__*/ React.createElement(NodeIcon, null, nodeIcon), /*#__PURE__*/ React.createElement(NodeLabel, {
48848
+ title: nodeLabel
48849
+ }, nodeLabel))), hasOutgoingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
49706
48850
  type: "source",
49707
48851
  position: Position.Bottom,
49708
48852
  style: {
@@ -49713,15 +48857,22 @@ const CoordinatorNode = ({ data, id, onInspect })=>{
49713
48857
  cursor: "default"
49714
48858
  },
49715
48859
  isConnectable: false
48860
+ }), /*#__PURE__*/ React.createElement(NodeDetailsDrawer, {
48861
+ isVisible: isDrawerOpen,
48862
+ onClose: handleCloseDrawer,
48863
+ nodeData: {
48864
+ ...data,
48865
+ id
48866
+ }
49716
48867
  }));
49717
48868
  };
49718
- // Styled components
49719
- const NodeContainer$1 = styled.div`
48869
+ const NodeContainer = styled.div`
49720
48870
  border-radius: 0.5rem;
49721
48871
  background-color: ${(props)=>props.theme?.colors?.card || "hsl(0 0% 100%)"};
49722
48872
  border: 2px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
49723
48873
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
49724
- min-width: 300px;
48874
+ min-width: ${FLOW_NODE_MIN_WIDTH}px;
48875
+ max-width: ${FLOW_NODE_MAX_WIDTH}px;
49725
48876
  transition: all 0.2s ease-in-out;
49726
48877
  position: relative;
49727
48878
  cursor: pointer;
@@ -49733,205 +48884,553 @@ const NodeContainer$1 = styled.div`
49733
48884
  0 2px 4px -1px rgba(0, 0, 0, 0.06);
49734
48885
  }
49735
48886
  `;
49736
- const NodeHeader$1 = styled.div`
48887
+ const NodeBody = styled.div`
49737
48888
  display: flex;
49738
- justify-content: space-between;
49739
- align-items: center;
49740
- gap: 0.5rem;
49741
- padding: 0.75rem;
49742
- border-bottom: 1px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
48889
+ flex-direction: column;
48890
+ padding: 0.5rem 0.625rem;
49743
48891
  `;
49744
- const NodeIconContainer$1 = styled.div`
48892
+ const TitleRow = styled.div`
49745
48893
  display: flex;
49746
48894
  align-items: center;
49747
- gap: 0.5rem;
48895
+ gap: 0.375rem;
48896
+ min-width: 0;
49748
48897
  `;
49749
- const NodeIcon$1 = styled.div`
49750
- font-size: 1.25rem;
48898
+ const NodeIcon = styled.div`
48899
+ font-size: 1.125rem;
49751
48900
  display: flex;
49752
48901
  align-items: center;
49753
48902
  justify-content: center;
48903
+ flex-shrink: 0;
49754
48904
  color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49755
48905
  `;
49756
- const NodeLabel$1 = styled.div`
48906
+ const NodeLabel = styled.div`
49757
48907
  font-weight: 600;
49758
48908
  color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49759
- font-size: 0.875rem;
49760
- word-break: break-words;
48909
+ font-size: 0.8125rem;
48910
+ line-height: 1.25;
48911
+ word-break: break-word;
48912
+ min-width: 0;
49761
48913
  `;
49762
- const BadgeContainer$1 = styled.div`
49763
- display: flex;
49764
- gap: 0.5rem;
49765
- justify-content: flex-end;
49766
- align-items: center;
48914
+
48915
+ const Node$1 = ({ data, id })=>{
48916
+ const nodeType = data.nodeType || "Agent";
48917
+ const onInspect = data.onInspect;
48918
+ switch(nodeType){
48919
+ case "Agent":
48920
+ return /*#__PURE__*/ React.createElement(AgentNode, {
48921
+ data: data,
48922
+ id: id,
48923
+ onInspect: onInspect,
48924
+ defaultDrawerOpen: data.defaultDrawerOpen
48925
+ });
48926
+ case "Tool":
48927
+ return /*#__PURE__*/ React.createElement(ToolNode, {
48928
+ data: data,
48929
+ id: id,
48930
+ onInspect: onInspect
48931
+ });
48932
+ default:
48933
+ return /*#__PURE__*/ React.createElement(AgentNode, {
48934
+ data: data,
48935
+ id: id,
48936
+ onInspect: onInspect,
48937
+ defaultDrawerOpen: data.defaultDrawerOpen
48938
+ });
48939
+ }
48940
+ };
48941
+
48942
+ const TooltipContainer = styled.div`
48943
+ position: relative;
48944
+ display: inline-block;
49767
48945
  `;
49768
- const NodeContent$1 = styled.div`
49769
- padding: 0.75rem;
49770
- display: flex;
49771
- flex-direction: column;
49772
- align-items: flex-start;
49773
- justify-content: center;
49774
- gap: 0.5rem;
48946
+ const TooltipContent = styled.div`
48947
+ position: absolute;
48948
+ z-index: 1000;
48949
+ padding: 8px 12px;
48950
+ font-weight: 400;
48951
+ background-color: ${({ themeColors })=>themeColors.popover};
48952
+ color: ${({ themeColors })=>themeColors.popoverForeground};
48953
+ border: 1px solid ${({ themeColors })=>themeColors.border};
48954
+ border-radius: 6px;
48955
+ font-size: 12px;
48956
+ line-height: 1.4;
48957
+ white-space: nowrap;
48958
+ box-shadow:
48959
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
48960
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
48961
+ opacity: ${({ isVisible })=>isVisible ? 1 : 0};
48962
+ visibility: ${({ isVisible })=>isVisible ? "visible" : "hidden"};
48963
+ transition:
48964
+ opacity 0.15s ease-in-out,
48965
+ visibility 0.15s ease-in-out;
48966
+ pointer-events: none;
48967
+
48968
+ /* Arrow */
48969
+ &::before {
48970
+ content: "";
48971
+ position: absolute;
48972
+ width: 0;
48973
+ height: 0;
48974
+ border: 4px solid transparent;
48975
+ }
48976
+
48977
+ /* Placement-specific positioning and arrow */
48978
+ ${({ placement, themeColors })=>{
48979
+ switch(placement){
48980
+ case "top":
48981
+ return `
48982
+ bottom: 100%;
48983
+ left: 50%;
48984
+ transform: translateX(-50%);
48985
+ margin-bottom: 8px;
48986
+ &::before {
48987
+ top: 100%;
48988
+ left: 50%;
48989
+ transform: translateX(-50%);
48990
+ border-top-color: ${themeColors.border};
48991
+ }
48992
+ &::after {
48993
+ content: "";
48994
+ position: absolute;
48995
+ top: 100%;
48996
+ left: 50%;
48997
+ transform: translateX(-50%);
48998
+ width: 0;
48999
+ height: 0;
49000
+ border: 3px solid transparent;
49001
+ border-top-color: ${themeColors.popover};
49002
+ }
49003
+ `;
49004
+ case "bottom":
49005
+ return `
49006
+ top: 100%;
49007
+ left: 50%;
49008
+ transform: translateX(-50%);
49009
+ margin-top: 8px;
49010
+ &::before {
49011
+ bottom: 100%;
49012
+ left: 50%;
49013
+ transform: translateX(-50%);
49014
+ border-bottom-color: ${themeColors.border};
49015
+ }
49016
+ &::after {
49017
+ content: "";
49018
+ position: absolute;
49019
+ bottom: 100%;
49020
+ left: 50%;
49021
+ transform: translateX(-50%);
49022
+ width: 0;
49023
+ height: 0;
49024
+ border: 3px solid transparent;
49025
+ border-bottom-color: ${themeColors.popover};
49026
+ }
49027
+ `;
49028
+ case "left":
49029
+ return `
49030
+ right: 100%;
49031
+ top: 50%;
49032
+ transform: translateY(-50%);
49033
+ margin-right: 8px;
49034
+ &::before {
49035
+ left: 100%;
49036
+ top: 50%;
49037
+ transform: translateY(-50%);
49038
+ border-left-color: ${themeColors.border};
49039
+ }
49040
+ &::after {
49041
+ content: "";
49042
+ position: absolute;
49043
+ left: 100%;
49044
+ top: 50%;
49045
+ transform: translateY(-50%);
49046
+ width: 0;
49047
+ height: 0;
49048
+ border: 3px solid transparent;
49049
+ border-left-color: ${themeColors.popover};
49050
+ }
49051
+ `;
49052
+ case "right":
49053
+ return `
49054
+ left: 100%;
49055
+ top: 50%;
49056
+ transform: translateY(-50%);
49057
+ margin-left: 8px;
49058
+ &::before {
49059
+ right: 100%;
49060
+ top: 50%;
49061
+ transform: translateY(-50%);
49062
+ border-right-color: ${themeColors.border};
49063
+ }
49064
+ &::after {
49065
+ content: "";
49066
+ position: absolute;
49067
+ right: 100%;
49068
+ top: 50%;
49069
+ transform: translateY(-50%);
49070
+ width: 0;
49071
+ height: 0;
49072
+ border: 3px solid transparent;
49073
+ border-right-color: ${themeColors.popover};
49074
+ }
49075
+ `;
49076
+ case "topLeft":
49077
+ return `
49078
+ bottom: 100%;
49079
+ right: 0;
49080
+ margin-bottom: 8px;
49081
+ &::before {
49082
+ top: 100%;
49083
+ right: 8px;
49084
+ border-top-color: ${themeColors.border};
49085
+ }
49086
+ &::after {
49087
+ content: "";
49088
+ position: absolute;
49089
+ top: 100%;
49090
+ right: 8px;
49091
+ width: 0;
49092
+ height: 0;
49093
+ border: 3px solid transparent;
49094
+ border-top-color: ${themeColors.popover};
49095
+ }
49096
+ `;
49097
+ case "topRight":
49098
+ return `
49099
+ bottom: 100%;
49100
+ left: 0;
49101
+ margin-bottom: 8px;
49102
+ &::before {
49103
+ top: 100%;
49104
+ left: 8px;
49105
+ border-top-color: ${themeColors.border};
49106
+ }
49107
+ &::after {
49108
+ content: "";
49109
+ position: absolute;
49110
+ top: 100%;
49111
+ left: 8px;
49112
+ width: 0;
49113
+ height: 0;
49114
+ border: 3px solid transparent;
49115
+ border-top-color: ${themeColors.popover};
49116
+ }
49117
+ `;
49118
+ case "bottomLeft":
49119
+ return `
49120
+ top: 100%;
49121
+ right: 0;
49122
+ margin-top: 8px;
49123
+ &::before {
49124
+ bottom: 100%;
49125
+ right: 8px;
49126
+ border-bottom-color: ${themeColors.border};
49127
+ }
49128
+ &::after {
49129
+ content: "";
49130
+ position: absolute;
49131
+ bottom: 100%;
49132
+ right: 8px;
49133
+ width: 0;
49134
+ height: 0;
49135
+ border: 3px solid transparent;
49136
+ border-bottom-color: ${themeColors.popover};
49137
+ }
49138
+ `;
49139
+ case "bottomRight":
49140
+ return `
49141
+ top: 100%;
49142
+ left: 0;
49143
+ margin-top: 8px;
49144
+ &::before {
49145
+ bottom: 100%;
49146
+ left: 8px;
49147
+ border-bottom-color: ${themeColors.border};
49148
+ }
49149
+ &::after {
49150
+ content: "";
49151
+ position: absolute;
49152
+ bottom: 100%;
49153
+ left: 8px;
49154
+ width: 0;
49155
+ height: 0;
49156
+ border: 3px solid transparent;
49157
+ border-bottom-color: ${themeColors.popover};
49158
+ }
49159
+ `;
49160
+ case "leftTop":
49161
+ return `
49162
+ right: 100%;
49163
+ bottom: 0;
49164
+ margin-right: 8px;
49165
+ &::before {
49166
+ left: 100%;
49167
+ bottom: 8px;
49168
+ border-left-color: ${themeColors.border};
49169
+ }
49170
+ &::after {
49171
+ content: "";
49172
+ position: absolute;
49173
+ left: 100%;
49174
+ bottom: 8px;
49175
+ width: 0;
49176
+ height: 0;
49177
+ border: 3px solid transparent;
49178
+ border-left-color: ${themeColors.popover};
49179
+ }
49180
+ `;
49181
+ case "leftBottom":
49182
+ return `
49183
+ right: 100%;
49184
+ top: 0;
49185
+ margin-right: 8px;
49186
+ &::before {
49187
+ left: 100%;
49188
+ top: 8px;
49189
+ border-left-color: ${themeColors.border};
49190
+ }
49191
+ &::after {
49192
+ content: "";
49193
+ position: absolute;
49194
+ left: 100%;
49195
+ top: 8px;
49196
+ width: 0;
49197
+ height: 0;
49198
+ border: 3px solid transparent;
49199
+ border-left-color: ${themeColors.popover};
49200
+ }
49201
+ `;
49202
+ case "rightTop":
49203
+ return `
49204
+ left: 100%;
49205
+ bottom: 0;
49206
+ margin-left: 8px;
49207
+ &::before {
49208
+ right: 100%;
49209
+ bottom: 8px;
49210
+ border-right-color: ${themeColors.border};
49211
+ }
49212
+ &::after {
49213
+ content: "";
49214
+ position: absolute;
49215
+ right: 100%;
49216
+ bottom: 8px;
49217
+ width: 0;
49218
+ height: 0;
49219
+ border: 3px solid transparent;
49220
+ border-right-color: ${themeColors.popover};
49221
+ }
49222
+ `;
49223
+ case "rightBottom":
49224
+ return `
49225
+ left: 100%;
49226
+ top: 0;
49227
+ margin-left: 8px;
49228
+ &::before {
49229
+ right: 100%;
49230
+ top: 8px;
49231
+ border-right-color: ${themeColors.border};
49232
+ }
49233
+ &::after {
49234
+ content: "";
49235
+ position: absolute;
49236
+ right: 100%;
49237
+ top: 8px;
49238
+ width: 0;
49239
+ height: 0;
49240
+ border: 3px solid transparent;
49241
+ border-right-color: ${themeColors.popover};
49242
+ }
49243
+ `;
49244
+ default:
49245
+ return `
49246
+ bottom: 100%;
49247
+ left: 50%;
49248
+ transform: translateX(-50%);
49249
+ margin-bottom: 8px;
49250
+ &::before {
49251
+ top: 100%;
49252
+ left: 50%;
49253
+ transform: translateX(-50%);
49254
+ border-top-color: ${themeColors.border};
49255
+ }
49256
+ &::after {
49257
+ content: "";
49258
+ position: absolute;
49259
+ top: 100%;
49260
+ left: 50%;
49261
+ transform: translateX(-50%);
49262
+ width: 0;
49263
+ height: 0;
49264
+ border: 3px solid transparent;
49265
+ border-top-color: ${themeColors.popover};
49266
+ }
49267
+ `;
49268
+ }
49269
+ }}
49775
49270
  `;
49776
-
49777
- const ToolNode = ({ data, id, onInspect })=>{
49271
+ const Tooltip = ({ children, content, placement = "top", delay = 300 })=>{
49778
49272
  const { theme } = useTheme$1();
49779
- const themeColors = theme?.colors || {
49780
- primary: "hsl(221.2 83.2% 53.3%)",
49781
- background: "hsl(0 0% 100%)"
49273
+ const [isVisible, setIsVisible] = React__namespace.useState(false);
49274
+ const timeoutRef = React__namespace.useRef();
49275
+ const showTooltip = ()=>{
49276
+ if (timeoutRef.current) {
49277
+ clearTimeout(timeoutRef.current);
49278
+ }
49279
+ timeoutRef.current = setTimeout(()=>{
49280
+ setIsVisible(true);
49281
+ }, delay);
49782
49282
  };
49783
- // Check if this node has any outgoing edges (source edges)
49784
- const hasOutgoingEdges = data.edges?.some((edge)=>edge.source === id) || false;
49785
- // Check if this node has any incoming edges (target edges)
49786
- const hasIncomingEdges = data.edges?.some((edge)=>edge.target === id) || false;
49787
- const handleNodeClick = ()=>{
49788
- if (onInspect) {
49789
- onInspect(data);
49283
+ const hideTooltip = ()=>{
49284
+ if (timeoutRef.current) {
49285
+ clearTimeout(timeoutRef.current);
49790
49286
  }
49287
+ setIsVisible(false);
49791
49288
  };
49792
- const nodeLabel = data.label || toTitleCase("Tool") || "Tool";
49793
- const latency = data.details?.internals?.latency?.total_time;
49794
- let nodeData = null;
49795
- const baseData = data.details?.internals || {};
49796
- if (data.edgeDetails && data.edgeDetails.length > 0) {
49797
- nodeData = {
49798
- ...baseData,
49799
- input: {
49800
- ...data.edgeDetails[0]?.input_kwargs
49801
- },
49802
- output: data.edgeDetails[0]?.output,
49803
- status: data.edgeDetails[0]?.status
49289
+ React__namespace.useEffect(()=>{
49290
+ return ()=>{
49291
+ if (timeoutRef.current) {
49292
+ clearTimeout(timeoutRef.current);
49293
+ }
49804
49294
  };
49805
- }
49806
- return /*#__PURE__*/ React.createElement(NodeContainer, {
49807
- onClick: handleNodeClick,
49808
- className: "nowheel"
49809
- }, hasIncomingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
49810
- type: "target",
49811
- position: Position.Top,
49812
- style: {
49813
- width: "8px",
49814
- height: "8px",
49815
- border: `2px solid ${themeColors.primary}`,
49816
- backgroundColor: themeColors.background,
49817
- cursor: "default"
49818
- },
49819
- isConnectable: false
49820
- }), /*#__PURE__*/ React.createElement(NodeHeader, null, /*#__PURE__*/ React.createElement(NodeIconContainer, null, /*#__PURE__*/ React.createElement(NodeIcon, null, "🔧"), /*#__PURE__*/ React.createElement(NodeLabel, null, nodeLabel)), latency != null && /*#__PURE__*/ React.createElement(BadgeContainer, null, /*#__PURE__*/ React.createElement(Badge, {
49821
- variant: "latency"
49822
- }, formatLatency(latency)))), nodeData && /*#__PURE__*/ React.createElement(NodeContent, {
49823
- className: "nodrag"
49824
- }, /*#__PURE__*/ React.createElement(JsonTreeViewer, {
49825
- excludeKeys: [
49826
- "latency"
49827
- ],
49828
- data: nodeData
49829
- })), hasOutgoingEdges && /*#__PURE__*/ React.createElement(Handle$1, {
49830
- type: "source",
49831
- position: Position.Bottom,
49832
- style: {
49833
- width: "8px",
49834
- height: "8px",
49835
- border: `2px solid ${themeColors.primary}`,
49836
- backgroundColor: themeColors.background,
49837
- cursor: "default"
49838
- },
49839
- isConnectable: false
49840
- }));
49295
+ }, []);
49296
+ return /*#__PURE__*/ React__namespace.createElement(TooltipContainer, {
49297
+ onMouseEnter: showTooltip,
49298
+ onMouseLeave: hideTooltip,
49299
+ onFocus: showTooltip,
49300
+ onBlur: hideTooltip
49301
+ }, children, /*#__PURE__*/ React__namespace.createElement(TooltipContent, {
49302
+ isVisible: isVisible,
49303
+ placement: placement,
49304
+ themeColors: theme.colors,
49305
+ role: "tooltip"
49306
+ }, content));
49841
49307
  };
49842
- // Styled components
49843
- const NodeContainer = styled.div`
49844
- border-radius: 0.5rem;
49845
- background-color: ${(props)=>props.theme?.colors?.card || "hsl(0 0% 100%)"};
49846
- border: 2px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
49847
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
49848
- min-width: 300px;
49849
- max-width: ${NODE_MAX_WIDTH}px;
49850
- transition: all 0.2s ease-in-out;
49851
- position: relative;
49852
- cursor: pointer;
49853
49308
 
49854
- &:hover {
49855
- border-color: ${(props)=>props.theme?.colors?.primary || "hsl(221.2 83.2% 53.3%)"};
49856
- box-shadow:
49857
- 0 4px 6px -1px rgba(0, 0, 0, 0.1),
49858
- 0 2px 4px -1px rgba(0, 0, 0, 0.06);
49859
- }
49860
- `;
49861
- const NodeHeader = styled.div`
49862
- display: flex;
49863
- justify-content: space-between;
49864
- align-items: center;
49865
- gap: 0.5rem;
49866
- padding: 0.75rem;
49867
- border-bottom: 1px solid ${(props)=>props.theme?.colors?.border || "hsl(214.3 31.8% 91.4%)"};
49868
- `;
49869
- const NodeIconContainer = styled.div`
49870
- display: flex;
49871
- align-items: center;
49872
- gap: 0.5rem;
49873
- `;
49874
- const NodeIcon = styled.div`
49875
- font-size: 1.25rem;
49876
- display: flex;
49877
- align-items: center;
49878
- justify-content: center;
49879
- color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49880
- `;
49881
- const NodeLabel = styled.div`
49882
- font-weight: 600;
49883
- color: ${(props)=>props.theme?.colors?.foreground || "hsl(222.2 84% 4.9%)"};
49884
- font-size: 0.875rem;
49885
- word-break: break-words;
49886
- `;
49887
49309
  const BadgeContainer = styled.div`
49888
- display: flex;
49889
- gap: 0.5rem;
49890
- justify-content: flex-end;
49310
+ display: inline-flex;
49891
49311
  align-items: center;
49892
- `;
49893
- const NodeContent = styled.div`
49894
- padding: 0.75rem;
49895
- display: flex;
49896
- flex-direction: column;
49897
- align-items: flex-start;
49898
- justify-content: center;
49899
- gap: 0.5rem;
49900
- `;
49312
+ border-radius: 9999px;
49313
+ border: 1px solid transparent;
49314
+ padding: 0.125rem 0.625rem;
49315
+ font-size: 0.75rem;
49316
+ font-weight: 600;
49317
+ transition: colors 0.2s ease-in-out;
49318
+ outline: none;
49901
49319
 
49902
- const Node$1 = ({ data, id })=>{
49903
- const nodeType = data.nodeType || "Agent";
49904
- const onInspect = data.onInspect; // Extract onInspect from data
49905
- // Route to the appropriate node component based on type
49906
- switch(nodeType){
49907
- case "Agent":
49908
- return /*#__PURE__*/ React.createElement(AgentNode, {
49909
- data: data,
49910
- id: id,
49911
- onInspect: onInspect,
49912
- defaultDrawerOpen: data.defaultDrawerOpen
49913
- });
49914
- case "Tool":
49915
- return /*#__PURE__*/ React.createElement(ToolNode, {
49916
- data: data,
49917
- id: id,
49918
- onInspect: onInspect
49919
- });
49920
- case "Coordinator":
49921
- return /*#__PURE__*/ React.createElement(CoordinatorNode, {
49922
- data: data,
49923
- id: id,
49924
- onInspect: onInspect
49925
- });
49320
+ &:focus {
49321
+ outline: none;
49322
+ box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2);
49323
+ }
49324
+
49325
+ ${({ variant, themeColors })=>{
49326
+ switch(variant){
49327
+ case "default":
49328
+ return `
49329
+ background-color: ${themeColors.primary};
49330
+ color: ${themeColors.primaryForeground};
49331
+ &:hover {
49332
+ background-color: ${themeColors.primary};
49333
+ opacity: 0.9;
49334
+ }
49335
+ `;
49336
+ case "secondary":
49337
+ return `
49338
+ background-color: ${themeColors.secondary};
49339
+ color: ${themeColors.secondaryForeground};
49340
+ &:hover {
49341
+ background-color: ${themeColors.muted};
49342
+ }
49343
+ `;
49344
+ case "destructive":
49345
+ return `
49346
+ background-color: ${themeColors.destructive};
49347
+ color: ${themeColors.destructiveForeground};
49348
+ &:hover {
49349
+ background-color: ${themeColors.destructive};
49350
+ opacity: 0.9;
49351
+ }
49352
+ `;
49353
+ case "outline":
49354
+ return `
49355
+ background-color: transparent;
49356
+ color: ${themeColors.cardForeground};
49357
+ border-color: ${themeColors.border};
49358
+ `;
49359
+ case "cost":
49360
+ return `
49361
+ background-color: ${themeColors.secondary};
49362
+ color: ${themeColors.secondaryForeground};
49363
+ &:hover {
49364
+ background-color: ${themeColors.muted};
49365
+ }
49366
+ `;
49367
+ case "gray":
49368
+ return `
49369
+ background-color: ${themeColors.secondary};
49370
+ color: ${themeColors.secondaryForeground};
49371
+ &:hover {
49372
+ background-color: ${themeColors.muted};
49373
+ }
49374
+ `;
49375
+ case "latency":
49376
+ return `
49377
+ background-color: ${themeColors.secondary};
49378
+ color: ${themeColors.secondaryForeground};
49379
+ &:hover {
49380
+ background-color: ${themeColors.muted};
49381
+ }
49382
+ `;
49383
+ case "latencyLow":
49384
+ return `
49385
+ background-color: ${themeColors.secondary};
49386
+ color: ${themeColors.secondaryForeground};
49387
+ &:hover {
49388
+ background-color: ${themeColors.muted};
49389
+ }
49390
+ `;
49391
+ case "latencyMedium":
49392
+ return `
49393
+ background-color: ${themeColors.secondary};
49394
+ color: ${themeColors.secondaryForeground};
49395
+ &:hover {
49396
+ background-color: ${themeColors.muted};
49397
+ }
49398
+ `;
49399
+ case "latencyHigh":
49400
+ return `
49401
+ background-color: ${themeColors.destructive};
49402
+ color: ${themeColors.destructiveForeground};
49403
+ &:hover {
49404
+ background-color: ${themeColors.destructive};
49405
+ opacity: 0.9;
49406
+ }
49407
+ `;
49926
49408
  default:
49927
- // Fallback to Agent node for unknown types
49928
- return /*#__PURE__*/ React.createElement(AgentNode, {
49929
- data: data,
49930
- id: id,
49931
- onInspect: onInspect,
49932
- defaultDrawerOpen: data.defaultDrawerOpen
49933
- });
49409
+ return `
49410
+ background-color: ${themeColors.primary};
49411
+ color: ${themeColors.primaryForeground};
49412
+ &:hover {
49413
+ background-color: ${themeColors.primary};
49414
+ opacity: 0.9;
49415
+ }
49416
+ `;
49417
+ }
49418
+ }}
49419
+ `;
49420
+ const Badge = ({ variant = "default", children, title, placement = "top" })=>{
49421
+ const { theme } = useTheme$1();
49422
+ const themeColors = theme.colors;
49423
+ const badgeContent = /*#__PURE__*/ React__namespace.createElement(BadgeContainer, {
49424
+ variant: variant,
49425
+ themeColors: themeColors
49426
+ }, children);
49427
+ if (title) {
49428
+ return /*#__PURE__*/ React__namespace.createElement(Tooltip, {
49429
+ content: title,
49430
+ placement: placement
49431
+ }, badgeContent);
49934
49432
  }
49433
+ return badgeContent;
49935
49434
  };
49936
49435
 
49937
49436
  // Styled Components
@@ -52612,7 +52111,7 @@ SheetDescription.displayName = Description.displayName;
52612
52111
  /**
52613
52112
  * Calculates a clean tree layout: parents centered above children, siblings spaced evenly, no overlap.
52614
52113
  */ const calculateAutoLayout = (nodes, edges, options = {})=>{
52615
- const { minNodeSpacing = 200, containerWidth = 600 } = options;
52114
+ const { minNodeSpacing = 72, containerWidth = 600 } = options;
52616
52115
  // Handle undefined or null nodes
52617
52116
  if (!nodes || nodes.length === 0) {
52618
52117
  return new Map();
@@ -52662,8 +52161,8 @@ SheetDescription.displayName = Description.displayName;
52662
52161
  });
52663
52162
  // Calculate subtree widths for each node (for centering horizontally)
52664
52163
  const subtreeWidth = new Map();
52665
- const nodeWidth = 200; // Approximate node width
52666
- const nodeSpacing = Math.max(250, minNodeSpacing + 50); // Horizontal spacing between nodes (ensures minimum spacing + buffer)
52164
+ const nodeWidth = LAYOUT_NODE_WIDTH;
52165
+ const nodeSpacing = Math.max(8, Math.floor(minNodeSpacing / 8));
52667
52166
  const calcSubtreeWidth = (nodeId)=>{
52668
52167
  const children = childrenMap.get(nodeId) || [];
52669
52168
  if (children.length === 0) {
@@ -52681,8 +52180,8 @@ SheetDescription.displayName = Description.displayName;
52681
52180
  roots.forEach((root)=>calcSubtreeWidth(root.identifier));
52682
52181
  // Assign positions recursively - now top to bottom
52683
52182
  const positions = new Map();
52684
- const levelSpacing = Math.max(400, minNodeSpacing + 200); // Vertical spacing between levels (ensures minimum spacing + buffer)
52685
- const verticalMargin = 100; // Add margin to the top
52183
+ const levelSpacing = Math.max(130, minNodeSpacing + 42);
52184
+ const verticalMargin = 40;
52686
52185
  const assignPositions = (nodeId, xLeft, level)=>{
52687
52186
  const width = subtreeWidth.get(nodeId) || nodeWidth;
52688
52187
  const y = level * levelSpacing + verticalMargin; // Add margin here
@@ -52766,13 +52265,12 @@ SheetDescription.displayName = Description.displayName;
52766
52265
 
52767
52266
  const nodeTypes = {
52768
52267
  Agent: Node$1,
52769
- Tool: Node$1,
52770
- Coordinator: Node$1
52268
+ Tool: Node$1
52771
52269
  };
52772
52270
  const AgenticFlowVisualizer = ({ flowData: propFlowData, width = "100dvw", height = "100dvh", className = "", defaultZoom = 1, defaultPan = {
52773
52271
  x: 0,
52774
52272
  y: 0
52775
- }, disableAutoFit = true, defaultAutoFitDuration = 1000, defaultAutoFitDelay = 250, showTimeline = false, minNodeSpacing = 300, onInspect, panToNodeId })=>{
52273
+ }, disableAutoFit = true, defaultAutoFitDuration = 1000, defaultAutoFitDelay = 250, showTimeline = false, minNodeSpacing = 72, onInspect, panToNodeId })=>{
52776
52274
  const { theme, isDarkMode } = useTheme$1();
52777
52275
  const themeColors = theme.colors;
52778
52276
  // Helper function to determine if we should apply minimum dimensions
@@ -52964,15 +52462,17 @@ const AgenticFlowVisualizer = ({ flowData: propFlowData, width = "100dvw", heigh
52964
52462
  y: 0
52965
52463
  };
52966
52464
  const isActive = node.stamp.step === currentStep;
52465
+ const rawType = node.node_type || "Agent";
52466
+ const resolvedType = rawType === "Coordinator" ? "Agent" : rawType;
52967
52467
  // Extract edge details for Tool nodes
52968
52468
  const edgeDetails = node.node_type === "Tool" ? stepEdges.filter((edge)=>edge.target === node.identifier && edge.details).map((edge)=>edge.details) : undefined;
52969
52469
  return {
52970
52470
  id: node.identifier,
52971
- type: node.node_type || "Agent",
52471
+ type: resolvedType,
52972
52472
  position,
52973
52473
  data: {
52974
52474
  label: node.name || node.node_type,
52975
- nodeType: node.node_type,
52475
+ nodeType: resolvedType,
52976
52476
  details: node.details,
52977
52477
  isActive,
52978
52478
  id: node.identifier,
@@ -53004,7 +52504,6 @@ const AgenticFlowVisualizer = ({ flowData: propFlowData, width = "100dvw", heigh
53004
52504
  animated: isActive,
53005
52505
  bidirectional: true,
53006
52506
  style: {
53007
- stroke: isActive ? themeColors.primary : themeColors.mutedForeground,
53008
52507
  strokeWidth: isActive ? 3 : 2
53009
52508
  },
53010
52509
  label: edge.stamp?.identifier ? truncateText(String(edge.stamp.identifier), 50) : undefined,
@@ -53020,9 +52519,7 @@ const AgenticFlowVisualizer = ({ flowData: propFlowData, width = "100dvw", heigh
53020
52519
  });
53021
52520
  }, [
53022
52521
  currentStep,
53023
- getEdgesForStep,
53024
- themeColors.primary,
53025
- themeColors.mutedForeground
52522
+ getEdgesForStep
53026
52523
  ]);
53027
52524
  const [nodesState, setNodes, onNodesChange] = useNodesState(nodes);
53028
52525
  const [edgesState, setEdges, onEdgesChange] = useEdgesState(edges);
@@ -112750,7 +112247,328 @@ class ErrorBoundary extends React.Component {
112750
112247
  }
112751
112248
  }
112752
112249
 
112250
+ const MAX_TITLE_LEN = 200;
112251
+ const TOOLBAR_ICON_SIZE = 15;
112252
+ const JsonValueTree = ({ data, className, maxHeight = "auto" })=>{
112253
+ const { theme } = useTheme$1();
112254
+ const { mutedForeground } = theme.colors;
112255
+ const treeData = React.useMemo(()=>buildTreeData(data), [
112256
+ data
112257
+ ]);
112258
+ const defaultExpandedKeys = React.useMemo(()=>collectKeysToDepth(treeData, 2), [
112259
+ treeData
112260
+ ]);
112261
+ const allExpandableKeys = React.useMemo(()=>collectAllExpandableKeys(treeData), [
112262
+ treeData
112263
+ ]);
112264
+ const [expandedKeys, setExpandedKeys] = React.useState(()=>defaultExpandedKeys);
112265
+ const hasBranches = allExpandableKeys.length > 0;
112266
+ const isAllExpanded = hasBranches && allExpandableKeys.every((k)=>expandedKeys.includes(k));
112267
+ React.useEffect(()=>{
112268
+ setExpandedKeys(defaultExpandedKeys);
112269
+ }, [
112270
+ defaultExpandedKeys
112271
+ ]);
112272
+ const handleCopyJson = React.useCallback(async ()=>{
112273
+ try {
112274
+ const text = JSON.stringify(data, null, 2);
112275
+ await navigator.clipboard.writeText(text);
112276
+ staticMethods.success("JSON copied to clipboard");
112277
+ } catch {
112278
+ staticMethods.error("Could not copy to clipboard");
112279
+ }
112280
+ }, [
112281
+ data
112282
+ ]);
112283
+ const handleToggleExpandCollapse = React.useCallback(()=>{
112284
+ if (isAllExpanded) {
112285
+ setExpandedKeys([]);
112286
+ } else {
112287
+ setExpandedKeys(allExpandableKeys);
112288
+ }
112289
+ }, [
112290
+ isAllExpanded,
112291
+ allExpandableKeys
112292
+ ]);
112293
+ return /*#__PURE__*/ React.createElement("div", {
112294
+ className: className,
112295
+ style: {
112296
+ maxHeight,
112297
+ display: "flex",
112298
+ flexDirection: "column",
112299
+ borderRadius: 4,
112300
+ overflow: "hidden"
112301
+ }
112302
+ }, /*#__PURE__*/ React.createElement("div", {
112303
+ style: {
112304
+ display: "flex",
112305
+ justifyContent: "flex-end",
112306
+ alignItems: "center",
112307
+ gap: 2,
112308
+ padding: "4px 6px 2px",
112309
+ flexShrink: 0,
112310
+ background: "transparent"
112311
+ }
112312
+ }, /*#__PURE__*/ React.createElement(Tooltip$1, {
112313
+ title: "Copy JSON"
112314
+ }, /*#__PURE__*/ React.createElement(Button$1, {
112315
+ type: "text",
112316
+ size: "small",
112317
+ "aria-label": "Copy JSON to clipboard",
112318
+ icon: /*#__PURE__*/ React.createElement(Copy, {
112319
+ size: TOOLBAR_ICON_SIZE,
112320
+ color: mutedForeground
112321
+ }),
112322
+ onClick: handleCopyJson
112323
+ })), /*#__PURE__*/ React.createElement(Tooltip$1, {
112324
+ title: isAllExpanded ? "Collapse all" : "Expand all"
112325
+ }, /*#__PURE__*/ React.createElement(Button$1, {
112326
+ type: "text",
112327
+ size: "small",
112328
+ "aria-label": isAllExpanded ? "Collapse all tree nodes" : "Expand all tree nodes",
112329
+ disabled: !hasBranches,
112330
+ icon: isAllExpanded ? /*#__PURE__*/ React.createElement(FoldVertical, {
112331
+ size: TOOLBAR_ICON_SIZE,
112332
+ color: mutedForeground
112333
+ }) : /*#__PURE__*/ React.createElement(UnfoldVertical, {
112334
+ size: TOOLBAR_ICON_SIZE,
112335
+ color: mutedForeground
112336
+ }),
112337
+ onClick: handleToggleExpandCollapse
112338
+ }))), /*#__PURE__*/ React.createElement("div", {
112339
+ style: {
112340
+ flex: 1,
112341
+ minHeight: 0,
112342
+ overflow: "auto",
112343
+ padding: "4px 0"
112344
+ }
112345
+ }, /*#__PURE__*/ React.createElement(Tree, {
112346
+ // No showLine — connector lines look like a floating spine for many top-level fields.
112347
+ showLine: true,
112348
+ blockNode: true,
112349
+ expandAction: "click",
112350
+ selectable: false,
112351
+ showIcon: false,
112352
+ treeData: treeData,
112353
+ expandedKeys: expandedKeys,
112354
+ onExpand: (keys)=>setExpandedKeys(keys),
112355
+ rootStyle: {
112356
+ backgroundColor: "transparent",
112357
+ padding: "0 4px"
112358
+ }
112359
+ })));
112360
+ };
112361
+ function collectKeysToDepth(nodes, maxDepth, depth = 0) {
112362
+ if (depth >= maxDepth) return [];
112363
+ const keys = [];
112364
+ for (const n of nodes){
112365
+ if (n.children && n.children.length > 0) {
112366
+ keys.push(n.key);
112367
+ keys.push(...collectKeysToDepth(n.children, maxDepth, depth + 1));
112368
+ }
112369
+ }
112370
+ return keys;
112371
+ }
112372
+ function collectAllExpandableKeys(nodes) {
112373
+ const keys = [];
112374
+ for (const n of nodes){
112375
+ if (n.children && n.children.length > 0) {
112376
+ keys.push(n.key);
112377
+ keys.push(...collectAllExpandableKeys(n.children));
112378
+ }
112379
+ }
112380
+ return keys;
112381
+ }
112382
+ /**
112383
+ * Object keys A→Z, but any property whose value is an array is listed after all non-array properties
112384
+ * (each block still A→Z). Tree has no built-in sort — this defines `treeData` order.
112385
+ */ function sortObjectEntriesForTree(entries) {
112386
+ return [
112387
+ ...entries
112388
+ ].sort((a, b)=>{
112389
+ const aArr = Array.isArray(a[1]);
112390
+ const bArr = Array.isArray(b[1]);
112391
+ if (aArr !== bArr) {
112392
+ return aArr ? 1 : -1;
112393
+ }
112394
+ return a[0].localeCompare(b[0], undefined, {
112395
+ sensitivity: "base",
112396
+ numeric: true
112397
+ });
112398
+ });
112399
+ }
112400
+ function valueToTreeNodes(value, path) {
112401
+ if (value === null || value === undefined) {
112402
+ return [
112403
+ {
112404
+ key: path,
112405
+ title: formatJsonTreePrimitive(value),
112406
+ isLeaf: true
112407
+ }
112408
+ ];
112409
+ }
112410
+ if (Array.isArray(value)) {
112411
+ if (value.length === 0) {
112412
+ return [
112413
+ {
112414
+ key: `${path}.__empty_arr__`,
112415
+ title: "[] (0 items)",
112416
+ isLeaf: true
112417
+ }
112418
+ ];
112419
+ }
112420
+ return value.map((item, i)=>{
112421
+ const seg = `[${i}]`;
112422
+ const childPath = `${path}.${escapeDotPathSegment(seg)}`;
112423
+ if (item === null || item === undefined || typeof item !== "object") {
112424
+ return {
112425
+ key: childPath,
112426
+ title: `${seg}: ${formatJsonTreePrimitive(item)}`,
112427
+ isLeaf: true
112428
+ };
112429
+ }
112430
+ if (Array.isArray(item) || isPlainObject(item)) {
112431
+ const children = valueToTreeNodes(item, childPath);
112432
+ return {
112433
+ key: childPath,
112434
+ title: `${seg} (${Array.isArray(item) ? `Array(${item.length})` : `Object(${Object.keys(item).length})`})`,
112435
+ children
112436
+ };
112437
+ }
112438
+ return {
112439
+ key: childPath,
112440
+ title: `${seg}: ${formatJsonTreePrimitive(item)}`,
112441
+ isLeaf: true
112442
+ };
112443
+ });
112444
+ }
112445
+ if (isPlainObject(value)) {
112446
+ const entries = sortObjectEntriesForTree(Object.entries(value));
112447
+ if (entries.length === 0) {
112448
+ return [
112449
+ {
112450
+ key: `${path}.__empty_obj__`,
112451
+ title: "{} (0 keys)",
112452
+ isLeaf: true
112453
+ }
112454
+ ];
112455
+ }
112456
+ return entries.map(([k, v])=>{
112457
+ const childPath = `${path}.${escapeDotPathSegment(k)}`;
112458
+ if (v === null || v === undefined || typeof v !== "object") {
112459
+ const text = `${k}: ${formatJsonTreePrimitive(v)}`;
112460
+ const title = text.length > MAX_TITLE_LEN ? /*#__PURE__*/ React.createElement(Tooltip$1, {
112461
+ title: text
112462
+ }, /*#__PURE__*/ React.createElement("span", null, text.slice(0, MAX_TITLE_LEN), "…")) : text;
112463
+ return {
112464
+ key: childPath,
112465
+ title,
112466
+ isLeaf: true
112467
+ };
112468
+ }
112469
+ if (Array.isArray(v) || isPlainObject(v)) {
112470
+ const children = valueToTreeNodes(v, childPath);
112471
+ const summary = Array.isArray(v) ? `Array(${v.length})` : `Object(${Object.keys(v).length})`;
112472
+ return {
112473
+ key: childPath,
112474
+ title: `${k}: ${summary}`,
112475
+ children
112476
+ };
112477
+ }
112478
+ const text = `${k}: ${formatJsonTreePrimitive(v)}`;
112479
+ return {
112480
+ key: childPath,
112481
+ title: text.length > MAX_TITLE_LEN ? /*#__PURE__*/ React.createElement(Tooltip$1, {
112482
+ title: text
112483
+ }, /*#__PURE__*/ React.createElement("span", null, text.slice(0, MAX_TITLE_LEN), "…")) : text,
112484
+ isLeaf: true
112485
+ };
112486
+ });
112487
+ }
112488
+ const text = formatJsonTreePrimitive(value);
112489
+ return [
112490
+ {
112491
+ key: path,
112492
+ title: text.length > MAX_TITLE_LEN ? /*#__PURE__*/ React.createElement(Tooltip$1, {
112493
+ title: text
112494
+ }, /*#__PURE__*/ React.createElement("span", null, text.slice(0, MAX_TITLE_LEN), "…")) : text,
112495
+ isLeaf: true
112496
+ }
112497
+ ];
112498
+ }
112499
+ /** Top-level tree for tabular session output: plain object or array of plain objects. */ function buildTreeData(data) {
112500
+ if (data === null || data === undefined) {
112501
+ return [
112502
+ {
112503
+ key: "root",
112504
+ title: String(data),
112505
+ isLeaf: true
112506
+ }
112507
+ ];
112508
+ }
112509
+ if (Array.isArray(data)) {
112510
+ if (data.length === 0) {
112511
+ return [
112512
+ {
112513
+ key: "$top",
112514
+ title: "Array (0 items)",
112515
+ isLeaf: true
112516
+ }
112517
+ ];
112518
+ }
112519
+ const children = data.map((item, index)=>{
112520
+ const path = `$root[${index}]`;
112521
+ if (!isPlainObject(item)) {
112522
+ return {
112523
+ key: path,
112524
+ title: `[${index}]: ${formatJsonTreePrimitive(item)}`,
112525
+ isLeaf: true
112526
+ };
112527
+ }
112528
+ const itemChildren = valueToTreeNodes(item, path);
112529
+ return {
112530
+ key: path,
112531
+ title: `[${index}] (${Object.keys(item).length} keys)`,
112532
+ children: itemChildren
112533
+ };
112534
+ });
112535
+ return [
112536
+ {
112537
+ key: "$top",
112538
+ title: `Array (${data.length} items)`,
112539
+ children
112540
+ }
112541
+ ];
112542
+ }
112543
+ if (isPlainObject(data)) {
112544
+ const objectKeys = Object.keys(data);
112545
+ if (objectKeys.length === 0) {
112546
+ return [
112547
+ {
112548
+ key: "$top",
112549
+ title: "Object (0 keys)",
112550
+ isLeaf: true
112551
+ }
112552
+ ];
112553
+ }
112554
+ const children = valueToTreeNodes(data, "$root");
112555
+ return [
112556
+ {
112557
+ key: "$top",
112558
+ title: `Object (${objectKeys.length} keys)`,
112559
+ children
112560
+ }
112561
+ ];
112562
+ }
112563
+ return valueToTreeNodes(data, "$root");
112564
+ }
112565
+
112753
112566
  const getNodeLatency = (node)=>node.details?.internals?.latency?.total_time ?? 0;
112567
+ /** Tool/agent failure is carried on the incoming edge's details.status (e.g. Failed), same as flow edges and session I/O. */ function isNodeFailureFromIncomingEdge(run, nodeId) {
112568
+ const incoming = run.edges?.filter((e)=>e.target === nodeId) ?? [];
112569
+ const status = incoming[0]?.details?.status;
112570
+ return Boolean(status && getStatusColor(status) === "error");
112571
+ }
112754
112572
  // Parse tree node key to extract metadata (format: "node::runId::nodeId" to handle dashes in IDs)
112755
112573
  const parseTreeNodeKey = (key)=>{
112756
112574
  if (key.startsWith("flow-")) {
@@ -112860,13 +112678,15 @@ const buildNodeTree = (run)=>{
112860
112678
  const childLatency = children.reduce((s, c)=>s + (c.subtreeLatency ?? 0), 0);
112861
112679
  const subtreeLatency = getNodeLatency(node) + childLatency;
112862
112680
  const isTool = node.node_type === "Tool";
112681
+ const failed = isNodeFailureFromIncomingEdge(run, node.identifier);
112682
+ const iconBg = failed ? "#ff4d4f" : isTool ? "#1890ff" : "#52c41a";
112863
112683
  const icon = /*#__PURE__*/ React.createElement("span", {
112864
112684
  style: {
112865
112685
  display: "block",
112866
112686
  width: 22,
112867
112687
  height: 22,
112868
112688
  borderRadius: 4,
112869
- background: isTool ? "#1890ff" : "#52c41a"
112689
+ background: iconBg
112870
112690
  }
112871
112691
  }, isTool ? /*#__PURE__*/ React.createElement(Wrench, {
112872
112692
  size: 14,
@@ -112998,7 +112818,6 @@ const useShareAgentSession = (session)=>{
112998
112818
  const { Text } = Typography;
112999
112819
  // Shared theme color fallbacks
113000
112820
  const DEFAULT_THEME_COLORS = {
113001
- mutedForeground: "hsl(215.4 16.3% 46.9%)",
113002
112821
  border: "hsl(214.3 31.8% 91.4%)",
113003
112822
  foreground: "hsl(222.2 84% 4.9%)"
113004
112823
  };
@@ -113027,145 +112846,6 @@ const isTabularData = (data)=>{
113027
112846
  }
113028
112847
  return false;
113029
112848
  };
113030
- const ObjectCardRenderer = ({ data, isDarkMode })=>{
113031
- const { theme } = useTheme$1();
113032
- const themeColors = theme?.colors || DEFAULT_THEME_COLORS;
113033
- // Helper to render a value (handles nested objects/arrays)
113034
- const renderValue = (value)=>{
113035
- if (value === null || value === undefined) {
113036
- return /*#__PURE__*/ React.createElement("span", {
113037
- style: {
113038
- color: themeColors.mutedForeground
113039
- }
113040
- }, "null");
113041
- }
113042
- // Handle nested objects
113043
- if (typeof value === "object" && !Array.isArray(value) && value.constructor === Object) {
113044
- const nestedItems = Object.entries(value).map(([key, val])=>({
113045
- key: `nested-${key}`,
113046
- label: key,
113047
- children: renderValue(val)
113048
- }));
113049
- return /*#__PURE__*/ React.createElement(Collapse, {
113050
- items: [
113051
- {
113052
- key: "nested-object",
113053
- label: /*#__PURE__*/ React.createElement("span", {
113054
- style: {
113055
- fontSize: "12px"
113056
- }
113057
- }, "Object (", Object.keys(value).length, " keys)"),
113058
- children: /*#__PURE__*/ React.createElement(Descriptions, {
113059
- column: 1,
113060
- size: "small",
113061
- items: nestedItems,
113062
- style: {
113063
- marginTop: "8px"
113064
- }
113065
- })
113066
- }
113067
- ],
113068
- size: "small",
113069
- style: {
113070
- background: "transparent"
113071
- }
113072
- });
113073
- }
113074
- // Handle arrays
113075
- if (Array.isArray(value)) {
113076
- return /*#__PURE__*/ React.createElement(Collapse, {
113077
- items: [
113078
- {
113079
- key: "nested-array",
113080
- label: /*#__PURE__*/ React.createElement("span", {
113081
- style: {
113082
- fontSize: "12px"
113083
- }
113084
- }, "Array (", value.length, " items)"),
113085
- children: /*#__PURE__*/ React.createElement("div", {
113086
- style: {
113087
- marginTop: "8px"
113088
- }
113089
- }, value.map((item, idx)=>/*#__PURE__*/ React.createElement("div", {
113090
- key: idx,
113091
- style: {
113092
- marginBottom: "8px"
113093
- }
113094
- }, typeof item === "object" && item !== null && !Array.isArray(item) ? /*#__PURE__*/ React.createElement(Descriptions, {
113095
- column: 1,
113096
- size: "small",
113097
- items: Object.entries(item).map(([key, val])=>({
113098
- key: `array-item-${idx}-${key}`,
113099
- label: key,
113100
- children: renderValue(val)
113101
- }))
113102
- }) : /*#__PURE__*/ React.createElement("pre", {
113103
- style: {
113104
- margin: 0,
113105
- padding: "8px",
113106
- background: isDarkMode ? "#1f1f1f" : "#fafafa",
113107
- border: `1px solid ${themeColors.border}`,
113108
- borderRadius: "4px",
113109
- fontSize: "12px",
113110
- whiteSpace: "pre-wrap",
113111
- wordWrap: "break-word"
113112
- }
113113
- }, JSON.stringify(item, null, 2)))))
113114
- }
113115
- ],
113116
- size: "small",
113117
- style: {
113118
- background: "transparent"
113119
- }
113120
- });
113121
- }
113122
- // Handle primitive values
113123
- return /*#__PURE__*/ React.createElement("span", null, String(value));
113124
- };
113125
- // Normalize to array
113126
- const objectsArray = Array.isArray(data) ? data : [
113127
- data
113128
- ];
113129
- return /*#__PURE__*/ React.createElement("div", {
113130
- style: {
113131
- display: "flex",
113132
- flexDirection: "column",
113133
- gap: "12px"
113134
- }
113135
- }, objectsArray.map((obj, index)=>{
113136
- if (!obj || typeof obj !== "object") {
113137
- return null;
113138
- }
113139
- const items = Object.entries(obj).map(([key, value])=>({
113140
- key,
113141
- label: key,
113142
- children: renderValue(value)
113143
- }));
113144
- return /*#__PURE__*/ React.createElement(Card, {
113145
- key: index,
113146
- size: "small",
113147
- style: {
113148
- background: isDarkMode ? "#1f1f1f" : "#fff",
113149
- border: `1px solid ${themeColors.border}`
113150
- },
113151
- bodyStyle: {
113152
- padding: "16px"
113153
- }
113154
- }, /*#__PURE__*/ React.createElement(Descriptions, {
113155
- column: 1,
113156
- size: "small",
113157
- items: items,
113158
- labelStyle: {
113159
- color: themeColors.mutedForeground,
113160
- fontWeight: 500,
113161
- width: "30%"
113162
- },
113163
- contentStyle: {
113164
- color: themeColors.foreground
113165
- }
113166
- }));
113167
- }));
113168
- };
113169
112849
  // Helper function to format output as text
113170
112850
  const formatOutputAsText = (output, toolOutput)=>{
113171
112851
  if (toolOutput !== null && toolOutput !== undefined) {
@@ -113461,9 +113141,8 @@ const NodeDetailsPanel = ({ selectedNode, session, isDarkMode })=>{
113461
113141
  label: /*#__PURE__*/ React.createElement(Text, {
113462
113142
  strong: true
113463
113143
  }, "Outputs"),
113464
- children: hasOutputs ? isToolOutputTabular ? /*#__PURE__*/ React.createElement(ObjectCardRenderer, {
113465
- data: toolOutput,
113466
- isDarkMode: isDarkMode
113144
+ children: hasOutputs ? isToolOutputTabular ? /*#__PURE__*/ React.createElement(JsonValueTree, {
113145
+ data: toolOutput
113467
113146
  }) : /*#__PURE__*/ React.createElement("pre", {
113468
113147
  style: {
113469
113148
  margin: 0,
@@ -113599,7 +113278,7 @@ const RunContent = ({ run, isDarkMode, showTimeline })=>{
113599
113278
  height: "100%"
113600
113279
  })));
113601
113280
  };
113602
- const SessionDetails = ({ session, open, onClose })=>{
113281
+ const SessionDetails = ({ session, open, onClose, initialNodeId, initialRunId, loading = false })=>{
113603
113282
  const { isDarkMode, theme } = useTheme$1();
113604
113283
  const [isFullScreen, setIsFullScreen] = React.useState(false);
113605
113284
  const [selectedNodeKey, setSelectedNodeKey] = React.useState(null);
@@ -113652,8 +113331,7 @@ const SessionDetails = ({ session, open, onClose })=>{
113652
113331
  }, [
113653
113332
  open
113654
113333
  ]);
113655
- // Default to first root node when session loads (node without a parent, matching tree structure).
113656
- // Combined with session_id reset to avoid effect ordering overwriting the selection.
113334
+ // Default to first root node when session loads, or use initialNodeId/initialRunId when provided.
113657
113335
  const hasAutoSelectedRef = React.useRef(false);
113658
113336
  React.useEffect(()=>{
113659
113337
  if (!open) {
@@ -113662,6 +113340,19 @@ const SessionDetails = ({ session, open, onClose })=>{
113662
113340
  }
113663
113341
  if (!session?.runs?.length) return;
113664
113342
  if (hasAutoSelectedRef.current && selectedNodeInfo !== null) return;
113343
+ // Prefer initial node when provided (e.g. from evaluation link)
113344
+ if (initialNodeId) {
113345
+ const run = initialRunId ? session.runs.find((r)=>r.run_id === initialRunId) : session.runs.find((r)=>r.nodes?.some((n)=>n.identifier === initialNodeId));
113346
+ if (run?.run_id && getNodeFromRun(initialNodeId, run)) {
113347
+ handleSelectNode({
113348
+ nodeId: initialNodeId,
113349
+ runId: run.run_id
113350
+ });
113351
+ hasAutoSelectedRef.current = true;
113352
+ return;
113353
+ }
113354
+ }
113355
+ // Fallback: first root node
113665
113356
  for (const run of session.runs){
113666
113357
  const firstRoot = getFirstRootNodeFromRun(run);
113667
113358
  if (firstRoot && run.run_id) {
@@ -113678,7 +113369,9 @@ const SessionDetails = ({ session, open, onClose })=>{
113678
113369
  }, [
113679
113370
  open,
113680
113371
  session,
113681
- selectedNodeInfo
113372
+ selectedNodeInfo,
113373
+ initialNodeId,
113374
+ initialRunId
113682
113375
  ]);
113683
113376
  // Reset hasAutoSelectedRef when session changes so auto-select runs for the new session
113684
113377
  React.useEffect(()=>{
@@ -113723,7 +113416,7 @@ const SessionDetails = ({ session, open, onClose })=>{
113723
113416
  size: "small"
113724
113417
  })), /*#__PURE__*/ React.createElement(Divider, {
113725
113418
  type: "vertical"
113726
- }), /*#__PURE__*/ React.createElement(Tooltip, {
113419
+ }), /*#__PURE__*/ React.createElement(Tooltip$1, {
113727
113420
  title: "Show Session Details"
113728
113421
  }, /*#__PURE__*/ React.createElement(Button$1, {
113729
113422
  type: "text",
@@ -113732,7 +113425,7 @@ const SessionDetails = ({ session, open, onClose })=>{
113732
113425
  }),
113733
113426
  onClick: ()=>setIsFullScreen(false),
113734
113427
  disabled: !session?.session_id
113735
- }, "Session Details"))) : /*#__PURE__*/ React.createElement(Tooltip, {
113428
+ }, "Session Details"))) : /*#__PURE__*/ React.createElement(Tooltip$1, {
113736
113429
  title: "Open Visualizer"
113737
113430
  }, /*#__PURE__*/ React.createElement(Button$1, {
113738
113431
  type: "text",
@@ -113743,7 +113436,7 @@ const SessionDetails = ({ session, open, onClose })=>{
113743
113436
  disabled: !session?.session_id
113744
113437
  }, "Visualizer")), /*#__PURE__*/ React.createElement(Divider, {
113745
113438
  type: "vertical"
113746
- }), /*#__PURE__*/ React.createElement(Tooltip, {
113439
+ }), /*#__PURE__*/ React.createElement(Tooltip$1, {
113747
113440
  title: "Copy Session ID to Clipboard"
113748
113441
  }, /*#__PURE__*/ React.createElement(Button$1, {
113749
113442
  type: "text",
@@ -113752,7 +113445,7 @@ const SessionDetails = ({ session, open, onClose })=>{
113752
113445
  }),
113753
113446
  onClick: handleCopyId,
113754
113447
  disabled: !session?.session_id
113755
- })), /*#__PURE__*/ React.createElement(Tooltip, {
113448
+ })), /*#__PURE__*/ React.createElement(Tooltip$1, {
113756
113449
  title: "Coming Soon!"
113757
113450
  }, /*#__PURE__*/ React.createElement(Button$1, {
113758
113451
  type: "text",
@@ -113771,7 +113464,18 @@ const SessionDetails = ({ session, open, onClose })=>{
113771
113464
  flexDirection: "column"
113772
113465
  }
113773
113466
  }
113774
- }, !session ? /*#__PURE__*/ React.createElement("div", {
113467
+ }, loading ? /*#__PURE__*/ React.createElement("div", {
113468
+ style: {
113469
+ display: "flex",
113470
+ alignItems: "center",
113471
+ justifyContent: "center",
113472
+ height: "100%",
113473
+ color: isDarkMode ? "#8c8c8c" : "#595959"
113474
+ }
113475
+ }, /*#__PURE__*/ React.createElement(Spin, {
113476
+ size: "large",
113477
+ tip: "Loading session..."
113478
+ })) : !session ? /*#__PURE__*/ React.createElement("div", {
113775
113479
  style: {
113776
113480
  display: "flex",
113777
113481
  alignItems: "center",
@@ -114030,14 +113734,20 @@ function dtoMetricToMetric(def) {
114030
113734
  };
114031
113735
  }
114032
113736
  }
114033
- // Build runs from agents.agent_node_ids
114034
- const agentIds = evalDto.agents.flatMap((a)=>a.agent_node_ids);
114035
- const runs = agentIds.map((nodeId)=>({
114036
- session_id: "",
114037
- run_id: nodeId,
113737
+ // Build runs from agents.agent_node_ids (support legacy string[] and new { session_id, agent_node_id }[])
113738
+ const agentNodeEntries = evalDto.agents.flatMap((a)=>{
113739
+ const ids = a.agent_node_ids ?? [];
113740
+ return ids.map((entry)=>typeof entry === "string" ? {
113741
+ session_id: "",
113742
+ agent_node_id: entry
113743
+ } : entry);
113744
+ });
113745
+ const runs = agentNodeEntries.map(({ session_id, agent_node_id })=>({
113746
+ session_id,
113747
+ run_id: agent_node_id,
114038
113748
  results: {}
114039
113749
  }));
114040
- // Agent name(s) for display - comma-separated when multiple; include agent_node_ids for LLM tree
113750
+ // Agent name(s) for display - comma-separated when multiple; pass through agent_node_ids for LLM tree (both formats)
114041
113751
  const agents = evalDto.agents.map((a)=>({
114042
113752
  agent_name: a.agent_name,
114043
113753
  agent_node_ids: a.agent_node_ids
@@ -114455,7 +114165,7 @@ const EvaluationsCompareDrawer = ({ open, onClose, evaluationId1, evaluationId2,
114455
114165
  display: "flex",
114456
114166
  gap: 8
114457
114167
  }
114458
- }, /*#__PURE__*/ React.createElement(Tooltip, {
114168
+ }, /*#__PURE__*/ React.createElement(Tooltip$1, {
114459
114169
  title: "Copy IDs to Clipboard"
114460
114170
  }, /*#__PURE__*/ React.createElement(Button$1, {
114461
114171
  type: "text",
@@ -114464,7 +114174,7 @@ const EvaluationsCompareDrawer = ({ open, onClose, evaluationId1, evaluationId2,
114464
114174
  }),
114465
114175
  onClick: handleCopyIds,
114466
114176
  disabled: !evaluationId1 || !evaluationId2
114467
- })), /*#__PURE__*/ React.createElement(Tooltip, {
114177
+ })), /*#__PURE__*/ React.createElement(Tooltip$1, {
114468
114178
  title: "Share"
114469
114179
  }, /*#__PURE__*/ React.createElement(Button$1, {
114470
114180
  type: "text",
@@ -114526,7 +114236,7 @@ const EvaluationDetailsDrawer = ({ evaluation, open, onClose, getEvaluatorResult
114526
114236
  gap: 4,
114527
114237
  justifyContent: "space-between"
114528
114238
  }
114529
- }, /*#__PURE__*/ React.createElement("span", null, normalizedEvaluation.name || "Evaluation Details"), normalizedEvaluation.completed_at && /*#__PURE__*/ React.createElement(Tooltip, {
114239
+ }, /*#__PURE__*/ React.createElement("span", null, normalizedEvaluation.name || "Evaluation Details"), normalizedEvaluation.completed_at && /*#__PURE__*/ React.createElement(Tooltip$1, {
114530
114240
  title: formatDateFriendly(normalizedEvaluation.completed_at),
114531
114241
  getPopupContainer: ()=>document.body
114532
114242
  }, /*#__PURE__*/ React.createElement("span", {
@@ -114577,7 +114287,7 @@ const EvaluationDetailsDrawer = ({ evaluation, open, onClose, getEvaluatorResult
114577
114287
  style: {
114578
114288
  marginBottom: "24px"
114579
114289
  }
114580
- }, /*#__PURE__*/ React.createElement(Row$1, {
114290
+ }, /*#__PURE__*/ React.createElement(Row, {
114581
114291
  gutter: [
114582
114292
  24,
114583
114293
  16
@@ -114717,7 +114427,7 @@ const EvaluationDetailsDrawer = ({ evaluation, open, onClose, getEvaluatorResult
114717
114427
  key: metric.sha || `${metric.name}-${i}`,
114718
114428
  style: tagStyle
114719
114429
  }, metric.name);
114720
- return metric.description ? /*#__PURE__*/ React.createElement(Tooltip, {
114430
+ return metric.description ? /*#__PURE__*/ React.createElement(Tooltip$1, {
114721
114431
  key: metric.sha || `${metric.name}-${i}`,
114722
114432
  title: metric.description,
114723
114433
  getPopupContainer: ()=>document.body
@@ -114979,7 +114689,7 @@ const EvaluationsTable = ({ evaluations, loading = false, error = null, onRefres
114979
114689
  const bVal = b.completed_at ? moment(b.completed_at).unix() : 0;
114980
114690
  return aVal - bVal;
114981
114691
  },
114982
- render: (completedAt)=>completedAt ? /*#__PURE__*/ React.createElement(Tooltip, {
114692
+ render: (completedAt)=>completedAt ? /*#__PURE__*/ React.createElement(Tooltip$1, {
114983
114693
  title: completedAt
114984
114694
  }, /*#__PURE__*/ React.createElement("span", null, formatDateShort(completedAt))) : "-"
114985
114695
  },
@@ -117095,12 +116805,17 @@ function isLLMNode(n) {
117095
116805
  function isLLMAggregateNode(n) {
117096
116806
  return isLLMInferenceAggregate(n);
117097
116807
  }
117098
- /** Map agent_data_id to agent_name */ function buildAgentIdToNameMap(agents) {
116808
+ /** Normalize agent_node_ids to { nodeId, sessionId? }[] */ function normalizeAgentNodeEntries(agents) {
117099
116809
  const map = new Map();
117100
116810
  if (!agents) return map;
117101
116811
  for (const a of agents){
117102
- for (const nid of a.agent_node_ids ?? []){
117103
- map.set(nid, a.agent_name);
116812
+ for (const entry of a.agent_node_ids ?? []){
116813
+ const nodeId = typeof entry === "string" ? entry : entry.agent_node_id;
116814
+ const sessionId = typeof entry === "string" ? undefined : entry.session_id;
116815
+ map.set(nodeId, {
116816
+ agentName: a.agent_name,
116817
+ sessionId
116818
+ });
117104
116819
  }
117105
116820
  }
117106
116821
  return map;
@@ -117112,7 +116827,7 @@ function isLLMAggregateNode(n) {
117112
116827
  */ function buildLLMInferenceTreeFromAggregateResults(agg) {
117113
116828
  const { roots, nodes, agents } = agg;
117114
116829
  const nodeMap = nodes;
117115
- const agentIdToName = buildAgentIdToNameMap(agents);
116830
+ const agentNodeInfo = normalizeAgentNodeEntries(agents);
117116
116831
  // Resolve root IDs to aggregate nodes
117117
116832
  const rootAggregates = [];
117118
116833
  for (const id of roots){
@@ -117145,14 +116860,17 @@ function isLLMAggregateNode(n) {
117145
116860
  }
117146
116861
  const sortedCalls = Array.from(llmCallIndices).sort((a, b)=>a - b);
117147
116862
  const sortedMetrics = Array.from(metricNames).sort();
117148
- // Group agent_node_ids by agent
117149
- const agentToNodeIds = new Map();
117150
- for (const [nodeId, agentName] of agentIdToName){
117151
- if (!agentToNodeIds.has(agentName)) agentToNodeIds.set(agentName, []);
117152
- agentToNodeIds.get(agentName).push(nodeId);
116863
+ // Group agent_node_ids by agent: { nodeId, sessionId? }[]
116864
+ const agentToNodeEntries = new Map();
116865
+ for (const [nodeId, info] of agentNodeInfo){
116866
+ if (!agentToNodeEntries.has(info.agentName)) agentToNodeEntries.set(info.agentName, []);
116867
+ agentToNodeEntries.get(info.agentName).push({
116868
+ nodeId,
116869
+ sessionId: info.sessionId
116870
+ });
117153
116871
  }
117154
116872
  // If no agents provided, infer from data: collect unique agent_data_ids into "Agent (root)"
117155
- if (agentToNodeIds.size === 0) {
116873
+ if (agentToNodeEntries.size === 0) {
117156
116874
  const seen = new Set();
117157
116875
  for (const aggNode of rootAggregates){
117158
116876
  for (const childId of aggNode.children ?? []){
@@ -117164,17 +116882,21 @@ function isLLMAggregateNode(n) {
117164
116882
  }
117165
116883
  }
117166
116884
  if (seen.size > 0) {
117167
- agentToNodeIds.set("Agent (root)", Array.from(seen));
116885
+ agentToNodeEntries.set("Agent (root)", Array.from(seen).map((nodeId)=>({
116886
+ nodeId,
116887
+ sessionId: undefined
116888
+ })));
117168
116889
  }
117169
116890
  }
117170
116891
  const rows = [];
117171
- for (const [agentName, nodeIds] of agentToNodeIds){
116892
+ for (const [agentName, nodeEntries] of agentToNodeEntries){
116893
+ const nodeIds = nodeEntries.map((e)=>e.nodeId);
117172
116894
  const agentKey = `agent-${agentName.replace(/\s+/g, "-")}`;
117173
116895
  const llmCallChildren = [];
117174
116896
  for (const callIdx of sortedCalls){
117175
116897
  const callKey = `${agentKey}-call-${callIdx}`;
117176
116898
  const nodeChildren = [];
117177
- nodeIds.forEach((nodeId, idx)=>{
116899
+ nodeEntries.forEach(({ nodeId, sessionId })=>{
117178
116900
  const metrics = {};
117179
116901
  for (const m of sortedMetrics){
117180
116902
  const k = `${nodeId}|${callIdx}|${m}`;
@@ -117190,6 +116912,7 @@ function isLLMAggregateNode(n) {
117190
116912
  metrics,
117191
116913
  value: metrics[primaryMetric],
117192
116914
  agentNodeId: nodeId,
116915
+ sessionId,
117193
116916
  children: undefined
117194
116917
  });
117195
116918
  }
@@ -117268,7 +116991,19 @@ const LATENCY_RESULT_PREFIXES = [
117268
116991
  "Latency/",
117269
116992
  "Runtime/"
117270
116993
  ];
117271
- function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults) {
116994
+ /** Build map from agent_node_id -> session_id from agents (supports both formats) */ function buildAgentIdToSessionMap(agents) {
116995
+ const map = new Map();
116996
+ if (!agents) return map;
116997
+ for (const a of agents){
116998
+ for (const entry of a.agent_node_ids ?? []){
116999
+ const nodeId = typeof entry === "string" ? entry : entry.agent_node_id;
117000
+ const sessionId = typeof entry === "string" ? undefined : entry.session_id;
117001
+ if (sessionId) map.set(nodeId, sessionId);
117002
+ }
117003
+ }
117004
+ return map;
117005
+ }
117006
+ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults, agentIdToSessionId) {
117272
117007
  const toolNamesFromAgg = Array.from(new Set([
117273
117008
  ...latencyByTool.keys(),
117274
117009
  ...failureRateByTool.keys(),
@@ -117331,6 +117066,7 @@ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCount
117331
117066
  const cnt = uniqueLatencies.length;
117332
117067
  let failed = 0;
117333
117068
  const failList = failureByToolAgentIndex.get(`${toolName}|${aid}`) ?? [];
117069
+ const sessionId = agentIdToSessionId.get(aid);
117334
117070
  const leaves = uniqueLatencies.map((l, idx)=>{
117335
117071
  const failVal = failureByKey.get(l.key);
117336
117072
  const failValByIndex = failList[idx];
@@ -117338,12 +117074,15 @@ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCount
117338
117074
  const isFailed = resolvedFail !== undefined && resolvedFail >= 0.5;
117339
117075
  if (isFailed) failed++;
117340
117076
  const leafName = l.toolNodeId ?? `invocation-${idx + 1}`;
117077
+ const nodeId = l.toolNodeId ?? undefined;
117341
117078
  return {
117342
117079
  key: `${toolName}-${aid}-${idx}`,
117343
117080
  name: leafName,
117344
117081
  runtimeMs: Math.round(l.value * 1000),
117345
117082
  failureRate: isFailed ? "Failed" : "Success",
117346
117083
  level: 3,
117084
+ sessionId: sessionId ?? undefined,
117085
+ nodeId,
117347
117086
  children: undefined
117348
117087
  };
117349
117088
  });
@@ -117355,6 +117094,8 @@ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCount
117355
117094
  runtimeMs: Math.round(totalRuntimeMs),
117356
117095
  failureRate: agentFailurePct,
117357
117096
  level: 2,
117097
+ sessionId: sessionId ?? undefined,
117098
+ nodeId: aid,
117358
117099
  children: leaves.length > 0 ? leaves : undefined
117359
117100
  });
117360
117101
  }
@@ -117399,12 +117140,13 @@ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCount
117399
117140
  }
117400
117141
  const latencyResults = toolResults.filter((r)=>LATENCY_RESULT_PREFIXES.some((prefix)=>r.result_name?.startsWith(prefix)));
117401
117142
  const failureResults = toolResults.filter((r)=>r.result_name?.startsWith("FailureRate/"));
117402
- return buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults);
117143
+ const agentIdToSessionId = buildAgentIdToSessionMap(agg.agents);
117144
+ return buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults, agentIdToSessionId);
117403
117145
  }
117404
117146
  /**
117405
117147
  * Builds a tree from raw ToolUseEvaluator results (legacy flat format).
117406
117148
  * Structure: tool (level 1) → agent (level 2) → invocation (level 3).
117407
- */ function buildToolUseTreeFromRawResults(rawResults) {
117149
+ */ function buildToolUseTreeFromRawResults(rawResults, agents) {
117408
117150
  const toolResults = rawResults.filter((r)=>isToolResult(r));
117409
117151
  const toolAggregates = rawResults.filter((r)=>isToolAggregate(r));
117410
117152
  const latencyByTool = new Map();
@@ -117426,7 +117168,8 @@ function buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCount
117426
117168
  }
117427
117169
  const latencyResults = toolResults.filter((r)=>r.result_name.startsWith("Latency/") || r.result_name.startsWith("Runtime/"));
117428
117170
  const failureResults = toolResults.filter((r)=>r.result_name.startsWith("FailureRate/"));
117429
- return buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults);
117171
+ const agentIdToSessionId = buildAgentIdToSessionMap(agents);
117172
+ return buildTreeFromProcessedData(latencyByTool, failureRateByTool, usageCountByTool, latencyResults, failureResults, agentIdToSessionId);
117430
117173
  }
117431
117174
 
117432
117175
  function detectAggregateType(nodes) {
@@ -117493,7 +117236,7 @@ const DEFAULT_TITLES = {
117493
117236
  LLMInference: "LLM Inference Evaluator - Aggregate View",
117494
117237
  Judge: "Judge Evaluator - Aggregate View"
117495
117238
  };
117496
- const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, title, evaluatorName })=>{
117239
+ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, title, evaluatorName, onAgentNodeClick })=>{
117497
117240
  const { theme } = useTheme$1();
117498
117241
  const [expandedRowKeys, setExpandedRowKeys] = React.useState([]);
117499
117242
  const { aggregateType, dataSource, llmIsTree, llmExpandableKeys } = React.useMemo(()=>{
@@ -117502,7 +117245,10 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
117502
117245
  if (type === "ToolUse") {
117503
117246
  return {
117504
117247
  aggregateType: type,
117505
- dataSource: buildToolUseTreeFromAggregate(aggregateResults),
117248
+ dataSource: buildToolUseTreeFromAggregate({
117249
+ ...aggregateResults,
117250
+ agents
117251
+ }),
117506
117252
  llmIsTree: false,
117507
117253
  llmExpandableKeys: []
117508
117254
  };
@@ -117544,7 +117290,7 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
117544
117290
  if (toolResults.length > 0) {
117545
117291
  return {
117546
117292
  aggregateType: "ToolUse",
117547
- dataSource: buildToolUseTreeFromRawResults(toolResults),
117293
+ dataSource: buildToolUseTreeFromRawResults(toolResults, agents),
117548
117294
  llmIsTree: false,
117549
117295
  llmExpandableKeys: []
117550
117296
  };
@@ -117652,17 +117398,37 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
117652
117398
  }), "Name"),
117653
117399
  dataIndex: "name",
117654
117400
  key: "name",
117655
- render: (name, row)=>/*#__PURE__*/ React.createElement("span", {
117401
+ render: (name, row)=>{
117402
+ const isClickable = row.level === 3 && row.agentNodeId && onAgentNodeClick;
117403
+ return /*#__PURE__*/ React.createElement("span", {
117656
117404
  style: {
117657
117405
  display: "inline-flex",
117658
117406
  alignItems: "center",
117659
117407
  gap: 8,
117660
117408
  fontFamily: "monospace",
117661
- fontSize: 13
117662
- }
117409
+ fontSize: 13,
117410
+ ...isClickable && {
117411
+ cursor: "pointer",
117412
+ color: theme.colors.primary
117413
+ }
117414
+ },
117415
+ onClick: isClickable ? (e)=>{
117416
+ e.stopPropagation();
117417
+ onAgentNodeClick(row.sessionId, row.agentNodeId);
117418
+ } : undefined,
117419
+ onKeyDown: isClickable ? (e)=>{
117420
+ if (e.key === "Enter" || e.key === " ") {
117421
+ e.preventDefault();
117422
+ e.stopPropagation();
117423
+ onAgentNodeClick(row.sessionId, row.agentNodeId);
117424
+ }
117425
+ } : undefined,
117426
+ role: isClickable ? "button" : undefined,
117427
+ tabIndex: isClickable ? 0 : undefined
117663
117428
  }, /*#__PURE__*/ React.createElement(LLMTagForLevel, {
117664
117429
  level: row.level
117665
- }), name)
117430
+ }), name);
117431
+ }
117666
117432
  },
117667
117433
  ...METRIC_COLUMNS.map(({ key, title, Icon })=>({
117668
117434
  title: /*#__PURE__*/ React.createElement("span", {
@@ -117705,7 +117471,7 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
117705
117471
  fontSize: 16,
117706
117472
  fontWeight: 600
117707
117473
  }
117708
- }, resolvedTitle), /*#__PURE__*/ React.createElement(Tooltip, {
117474
+ }, resolvedTitle), /*#__PURE__*/ React.createElement(Tooltip$1, {
117709
117475
  title: llmExpandableKeys.length === 0 ? "No expandable rows" : undefined
117710
117476
  }, /*#__PURE__*/ React.createElement(Button$1, {
117711
117477
  type: "text",
@@ -117992,17 +117758,37 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
117992
117758
  }), "Name"),
117993
117759
  dataIndex: "name",
117994
117760
  key: "name",
117995
- render: (name, row)=>/*#__PURE__*/ React.createElement("span", {
117761
+ render: (name, row)=>{
117762
+ const isClickable = (row.level === 2 || row.level === 3) && row.nodeId && onAgentNodeClick;
117763
+ return /*#__PURE__*/ React.createElement("span", {
117996
117764
  style: {
117997
117765
  display: "inline-flex",
117998
117766
  alignItems: "center",
117999
117767
  gap: 8,
118000
117768
  fontFamily: "monospace",
118001
- fontSize: 13
118002
- }
117769
+ fontSize: 13,
117770
+ ...isClickable && {
117771
+ cursor: "pointer",
117772
+ color: theme.colors.primary
117773
+ }
117774
+ },
117775
+ onClick: isClickable ? (e)=>{
117776
+ e.stopPropagation();
117777
+ onAgentNodeClick(row.sessionId, row.nodeId);
117778
+ } : undefined,
117779
+ onKeyDown: isClickable ? (e)=>{
117780
+ if (e.key === "Enter" || e.key === " ") {
117781
+ e.preventDefault();
117782
+ e.stopPropagation();
117783
+ onAgentNodeClick(row.sessionId, row.nodeId);
117784
+ }
117785
+ } : undefined,
117786
+ role: isClickable ? "button" : undefined,
117787
+ tabIndex: isClickable ? 0 : undefined
118003
117788
  }, /*#__PURE__*/ React.createElement(TagForLevel, {
118004
117789
  level: row.level
118005
- }), name)
117790
+ }), name);
117791
+ }
118006
117792
  },
118007
117793
  {
118008
117794
  title: /*#__PURE__*/ React.createElement("span", {
@@ -118115,7 +117901,7 @@ const AggregateResultsTable = ({ rawResults = [], aggregateResults, agents, titl
118115
117901
  fontSize: 16,
118116
117902
  fontWeight: 600
118117
117903
  }
118118
- }, resolvedTitle), /*#__PURE__*/ React.createElement(Tooltip, {
117904
+ }, resolvedTitle), /*#__PURE__*/ React.createElement(Tooltip$1, {
118119
117905
  title: expandableKeys.length === 0 ? "No expandable rows" : undefined
118120
117906
  }, /*#__PURE__*/ React.createElement(Button$1, {
118121
117907
  type: "text",
@@ -118312,11 +118098,14 @@ function isCategoricalMetric(def) {
118312
118098
  /** Derive agent display name from DTO. */ function deriveAgentName(evaluation) {
118313
118099
  return evaluation.agents?.map((a)=>a.agent_name).join(", ") ?? "-";
118314
118100
  }
118315
- /** Derive runs count from DTO (agent_node_ids). */ function deriveRunsCount(evaluation) {
118316
- return evaluation.agents?.flatMap((a)=>a.agent_node_ids ?? []).length ?? 0;
118101
+ /** Derive runs count from DTO (agent_node_ids). Supports both string[] and { session_id, agent_node_id }[]. */ function deriveRunsCount(evaluation) {
118102
+ return evaluation.agents?.reduce((sum, a)=>{
118103
+ const ids = a.agent_node_ids ?? [];
118104
+ return sum + ids.length;
118105
+ }, 0) ?? 0;
118317
118106
  }
118318
118107
 
118319
- const EvaluatorResult = ({ evaluation, evaluatorId, backHref })=>{
118108
+ const EvaluatorResult = ({ evaluation, evaluatorId, backHref, onAgentNodeClick })=>{
118320
118109
  const { theme } = useTheme$1();
118321
118110
  const labelColor = theme.colors.mutedForeground;
118322
118111
  const derived = evaluation ? deriveEvaluatorResultData(evaluation, evaluatorId) : null;
@@ -118365,7 +118154,7 @@ const EvaluatorResult = ({ evaluation, evaluatorId, backHref })=>{
118365
118154
  background: theme.colors.secondary,
118366
118155
  border: `1px solid ${theme.colors.border}`
118367
118156
  }
118368
- }, /*#__PURE__*/ React.createElement(Row$1, {
118157
+ }, /*#__PURE__*/ React.createElement(Row, {
118369
118158
  gutter: [
118370
118159
  32,
118371
118160
  16
@@ -118404,7 +118193,7 @@ const EvaluatorResult = ({ evaluation, evaluatorId, backHref })=>{
118404
118193
  fontWeight: 600,
118405
118194
  fontSize: 15
118406
118195
  }
118407
- }, completed_at ? /*#__PURE__*/ React.createElement(Tooltip, {
118196
+ }, completed_at ? /*#__PURE__*/ React.createElement(Tooltip$1, {
118408
118197
  title: formatDateFriendly(completed_at)
118409
118198
  }, /*#__PURE__*/ React.createElement("span", null, formatDateRelative(completed_at))) : "-")), /*#__PURE__*/ React.createElement(Col, {
118410
118199
  xs: 24,
@@ -118458,7 +118247,8 @@ const EvaluatorResult = ({ evaluation, evaluatorId, backHref })=>{
118458
118247
  rawResults: rawResults.filter((r)=>isToolResult(r) || isToolAggregate(r)),
118459
118248
  aggregateResults: aggregateResults,
118460
118249
  agents: evaluation.agents,
118461
- evaluatorName: evaluatorName
118250
+ evaluatorName: evaluatorName,
118251
+ onAgentNodeClick: onAgentNodeClick
118462
118252
  }))));
118463
118253
  };
118464
118254
 
@@ -120485,12 +120275,14 @@ exports.createSafeTheme = createSafeTheme;
120485
120275
  exports.darkTheme = darkTheme;
120486
120276
  exports.defaultTheme = defaultTheme$1;
120487
120277
  exports.detectContentType = detectContentType;
120278
+ exports.escapeDotPathSegment = escapeDotPathSegment;
120488
120279
  exports.evaluationsHaveSameMetrics = evaluationsHaveSameMetrics;
120489
120280
  exports.formatCurrency = formatCurrency;
120490
120281
  exports.formatDateFriendly = formatDateFriendly;
120491
120282
  exports.formatDateRelative = formatDateRelative;
120492
120283
  exports.formatDateShort = formatDateShort;
120493
120284
  exports.formatDuration = formatDuration;
120285
+ exports.formatJsonTreePrimitive = formatJsonTreePrimitive;
120494
120286
  exports.formatLatency = formatLatency;
120495
120287
  exports.formatMetricValue = formatMetricValue$1;
120496
120288
  exports.formatNumberWithCommas = formatNumberWithCommas;
@@ -120502,6 +120294,7 @@ exports.getSafeThemeValue = getSafeThemeValue;
120502
120294
  exports.getSpacing = getSpacing;
120503
120295
  exports.getStatusColor = getStatusColor;
120504
120296
  exports.isEvaluationDto = isEvaluationDto;
120297
+ exports.isPlainObject = isPlainObject;
120505
120298
  exports.lightTheme = lightTheme;
120506
120299
  exports.safeStyled = safeStyled;
120507
120300
  exports.safeThemeColor = safeThemeColor;