@rfkit/charts 1.10.1 → 1.10.2

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/index.js CHANGED
@@ -121,9 +121,15 @@ var __webpack_modules__ = {
121
121
  --tw-skew-x: initial;
122
122
  --tw-skew-y: initial;
123
123
  --tw-space-y-reverse: 0;
124
+ --tw-divide-y-reverse: 0;
124
125
  --tw-border-style: solid;
125
126
  --tw-leading: initial;
126
127
  --tw-font-weight: initial;
128
+ --tw-ordinal: initial;
129
+ --tw-slashed-zero: initial;
130
+ --tw-numeric-figure: initial;
131
+ --tw-numeric-spacing: initial;
132
+ --tw-numeric-fraction: initial;
127
133
  --tw-shadow: 0 0 #0000;
128
134
  --tw-shadow-color: initial;
129
135
  --tw-shadow-alpha: 100%;
@@ -202,9 +208,15 @@ var __webpack_modules__ = {
202
208
  --tw-skew-x: initial;
203
209
  --tw-skew-y: initial;
204
210
  --tw-space-y-reverse: 0;
211
+ --tw-divide-y-reverse: 0;
205
212
  --tw-border-style: solid;
206
213
  --tw-leading: initial;
207
214
  --tw-font-weight: initial;
215
+ --tw-ordinal: initial;
216
+ --tw-slashed-zero: initial;
217
+ --tw-numeric-figure: initial;
218
+ --tw-numeric-spacing: initial;
219
+ --tw-numeric-fraction: initial;
208
220
  --tw-shadow: 0 0 #0000;
209
221
  --tw-shadow-color: initial;
210
222
  --tw-shadow-alpha: 100%;
@@ -493,6 +505,10 @@ var __webpack_modules__ = {
493
505
  inset-inline: 0;
494
506
  }
495
507
 
508
+ [data-rfkit-charts-root] .inset-y-0 {
509
+ inset-block: 0;
510
+ }
511
+
496
512
  [data-rfkit-charts-root] .top-0 {
497
513
  top: 0;
498
514
  }
@@ -597,6 +613,10 @@ var __webpack_modules__ = {
597
613
  isolation: isolate;
598
614
  }
599
615
 
616
+ [data-rfkit-charts-root] .z-0 {
617
+ z-index: 0;
618
+ }
619
+
600
620
  [data-rfkit-charts-root] .z-10 {
601
621
  z-index: 10;
602
622
  }
@@ -759,6 +779,14 @@ var __webpack_modules__ = {
759
779
  margin-bottom: calc(var(--spacing) * 2);
760
780
  }
761
781
 
782
+ [data-rfkit-charts-root] .ml-4 {
783
+ margin-left: calc(var(--spacing) * 4);
784
+ }
785
+
786
+ [data-rfkit-charts-root] .ml-6 {
787
+ margin-left: calc(var(--spacing) * 6);
788
+ }
789
+
762
790
  [data-rfkit-charts-root] .ml-\\[-0\\.5px\\] {
763
791
  margin-left: -.5px;
764
792
  }
@@ -811,6 +839,11 @@ var __webpack_modules__ = {
811
839
  display: inline-flex;
812
840
  }
813
841
 
842
+ [data-rfkit-charts-root] .size-2 {
843
+ width: calc(var(--spacing) * 2);
844
+ height: calc(var(--spacing) * 2);
845
+ }
846
+
814
847
  [data-rfkit-charts-root] .size-3 {
815
848
  width: calc(var(--spacing) * 3);
816
849
  height: calc(var(--spacing) * 3);
@@ -839,6 +872,10 @@ var __webpack_modules__ = {
839
872
  height: calc(var(--spacing) * 1.5);
840
873
  }
841
874
 
875
+ [data-rfkit-charts-root] .h-2 {
876
+ height: calc(var(--spacing) * 2);
877
+ }
878
+
842
879
  [data-rfkit-charts-root] .h-2\\.5 {
843
880
  height: calc(var(--spacing) * 2.5);
844
881
  }
@@ -939,6 +976,10 @@ var __webpack_modules__ = {
939
976
  max-height: calc(var(--spacing) * 96);
940
977
  }
941
978
 
979
+ [data-rfkit-charts-root] .max-h-\\[var\\(--radix-dropdown-menu-content-available-height\\)\\] {
980
+ max-height: var(--radix-dropdown-menu-content-available-height);
981
+ }
982
+
942
983
  [data-rfkit-charts-root] .min-h-0 {
943
984
  min-height: 0;
944
985
  }
@@ -987,6 +1028,10 @@ var __webpack_modules__ = {
987
1028
  width: calc(var(--spacing) * 9);
988
1029
  }
989
1030
 
1031
+ [data-rfkit-charts-root] .w-10 {
1032
+ width: calc(var(--spacing) * 10);
1033
+ }
1034
+
990
1035
  [data-rfkit-charts-root] .w-14 {
991
1036
  width: calc(var(--spacing) * 14);
992
1037
  }
@@ -1044,6 +1089,10 @@ var __webpack_modules__ = {
1044
1089
  width: 100%;
1045
1090
  }
1046
1091
 
1092
+ [data-rfkit-charts-root] .w-max {
1093
+ width: max-content;
1094
+ }
1095
+
1047
1096
  [data-rfkit-charts-root] .w-px {
1048
1097
  width: 1px;
1049
1098
  }
@@ -1072,6 +1121,10 @@ var __webpack_modules__ = {
1072
1121
  max-width: 520px;
1073
1122
  }
1074
1123
 
1124
+ [data-rfkit-charts-root] .max-w-\\[calc\\(100vw-1rem\\)\\] {
1125
+ max-width: calc(100vw - 1rem);
1126
+ }
1127
+
1075
1128
  [data-rfkit-charts-root] .max-w-full {
1076
1129
  max-width: 100%;
1077
1130
  }
@@ -1351,6 +1404,12 @@ var __webpack_modules__ = {
1351
1404
  gap: var(--size-gap-base);
1352
1405
  }
1353
1406
 
1407
+ [data-rfkit-charts-root] :where(.space-y-0\\.5 > :not(:last-child)) {
1408
+ --tw-space-y-reverse: 0;
1409
+ margin-block-start: calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));
1410
+ margin-block-end: calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)));
1411
+ }
1412
+
1354
1413
  [data-rfkit-charts-root] :where(.space-y-1 > :not(:last-child)) {
1355
1414
  --tw-space-y-reverse: 0;
1356
1415
  margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
@@ -1385,6 +1444,24 @@ var __webpack_modules__ = {
1385
1444
  row-gap: calc(var(--spacing) * 2);
1386
1445
  }
1387
1446
 
1447
+ [data-rfkit-charts-root] :where(.divide-y > :not(:last-child)) {
1448
+ --tw-divide-y-reverse: 0;
1449
+ border-bottom-style: var(--tw-border-style);
1450
+ border-top-style: var(--tw-border-style);
1451
+ border-top-width: calc(1px * var(--tw-divide-y-reverse));
1452
+ border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
1453
+ }
1454
+
1455
+ [data-rfkit-charts-root] :where(.divide-border\\/40 > :not(:last-child)) {
1456
+ border-color: var(--border);
1457
+ }
1458
+
1459
+ @supports (color: color-mix(in lab, red, red)) {
1460
+ [data-rfkit-charts-root] :where(.divide-border\\/40 > :not(:last-child)) {
1461
+ border-color: color-mix(in oklab, var(--border) 40%, transparent);
1462
+ }
1463
+ }
1464
+
1388
1465
  [data-rfkit-charts-root] .self-center {
1389
1466
  align-self: center;
1390
1467
  }
@@ -1576,7 +1653,17 @@ var __webpack_modules__ = {
1576
1653
  border-left-color: #0000;
1577
1654
  }
1578
1655
 
1579
- [data-rfkit-charts-root] .bg-accent, [data-rfkit-charts-root] .bg-accent\\/80 {
1656
+ [data-rfkit-charts-root] .bg-accent, [data-rfkit-charts-root] .bg-accent\\/72 {
1657
+ background-color: var(--accent);
1658
+ }
1659
+
1660
+ @supports (color: color-mix(in lab, red, red)) {
1661
+ [data-rfkit-charts-root] .bg-accent\\/72 {
1662
+ background-color: color-mix(in oklab, var(--accent) 72%, transparent);
1663
+ }
1664
+ }
1665
+
1666
+ [data-rfkit-charts-root] .bg-accent\\/80 {
1580
1667
  background-color: var(--accent);
1581
1668
  }
1582
1669
 
@@ -1886,8 +1973,8 @@ var __webpack_modules__ = {
1886
1973
  padding-top: 0;
1887
1974
  }
1888
1975
 
1889
- [data-rfkit-charts-root] .pt-1 {
1890
- padding-top: var(--spacing);
1976
+ [data-rfkit-charts-root] .pt-2 {
1977
+ padding-top: calc(var(--spacing) * 2);
1891
1978
  }
1892
1979
 
1893
1980
  [data-rfkit-charts-root] .pt-\\[calc\\(var\\(--size-gap-base\\)\\/2\\)\\] {
@@ -1922,6 +2009,10 @@ var __webpack_modules__ = {
1922
2009
  padding-left: calc(var(--spacing) * .5);
1923
2010
  }
1924
2011
 
2012
+ [data-rfkit-charts-root] .pl-1 {
2013
+ padding-left: var(--spacing);
2014
+ }
2015
+
1925
2016
  [data-rfkit-charts-root] .pl-8 {
1926
2017
  padding-left: calc(var(--spacing) * 8);
1927
2018
  }
@@ -2021,6 +2112,10 @@ var __webpack_modules__ = {
2021
2112
  font-weight: var(--font-weight-semibold);
2022
2113
  }
2023
2114
 
2115
+ [data-rfkit-charts-root] .break-words {
2116
+ overflow-wrap: break-word;
2117
+ }
2118
+
2024
2119
  [data-rfkit-charts-root] .text-ellipsis {
2025
2120
  text-overflow: ellipsis;
2026
2121
  }
@@ -2105,6 +2200,11 @@ var __webpack_modules__ = {
2105
2200
  color: var(--color-white);
2106
2201
  }
2107
2202
 
2203
+ [data-rfkit-charts-root] .tabular-nums {
2204
+ --tw-numeric-spacing: tabular-nums;
2205
+ font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, );
2206
+ }
2207
+
2108
2208
  [data-rfkit-charts-root] .\\[font-variant-numeric\\:tabular-nums\\] {
2109
2209
  font-variant-numeric: tabular-nums;
2110
2210
  }
@@ -2125,6 +2225,10 @@ var __webpack_modules__ = {
2125
2225
  opacity: .3;
2126
2226
  }
2127
2227
 
2228
+ [data-rfkit-charts-root] .opacity-35 {
2229
+ opacity: .35;
2230
+ }
2231
+
2128
2232
  [data-rfkit-charts-root] .opacity-40 {
2129
2233
  opacity: .4;
2130
2234
  }
@@ -2180,6 +2284,20 @@ var __webpack_modules__ = {
2180
2284
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2181
2285
  }
2182
2286
 
2287
+ [data-rfkit-charts-root] .shadow-\\[inset_0_0_0_1px_color-mix\\(in_srgb\\,var\\(--primary\\)_28\\%\\,transparent\\)\\] {
2288
+ --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--primary));
2289
+ }
2290
+
2291
+ @supports (color: color-mix(in lab, red, red)) {
2292
+ [data-rfkit-charts-root] .shadow-\\[inset_0_0_0_1px_color-mix\\(in_srgb\\,var\\(--primary\\)_28\\%\\,transparent\\)\\] {
2293
+ --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, color-mix(in srgb, var(--primary) 28%, transparent));
2294
+ }
2295
+ }
2296
+
2297
+ [data-rfkit-charts-root] .shadow-\\[inset_0_0_0_1px_color-mix\\(in_srgb\\,var\\(--primary\\)_28\\%\\,transparent\\)\\] {
2298
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2299
+ }
2300
+
2183
2301
  [data-rfkit-charts-root] .shadow-lg {
2184
2302
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, #0000001a), 0 4px 6px -4px var(--tw-shadow-color, #0000001a);
2185
2303
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -2215,6 +2333,11 @@ var __webpack_modules__ = {
2215
2333
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2216
2334
  }
2217
2335
 
2336
+ [data-rfkit-charts-root] .ring-1 {
2337
+ --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2338
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2339
+ }
2340
+
2218
2341
  [data-rfkit-charts-root] .\\[box-shadow\\:0_0_0_1px_color-mix\\(in_srgb\\,var\\(--background\\)_82\\%\\,transparent\\)\\,[data-rfkit-charts-root] 0_1px_4px_color-mix\\(in_srgb\\,var\\(--foreground\\)_32\\%\\,transparent\\)\\] {
2219
2342
  box-shadow: 0 0 0 1px var(--background), 0 1px 4px var(--foreground);
2220
2343
  }
@@ -2235,6 +2358,20 @@ var __webpack_modules__ = {
2235
2358
  }
2236
2359
  }
2237
2360
 
2361
+ [data-rfkit-charts-root] .ring-background\\/30 {
2362
+ --tw-ring-color: var(--background);
2363
+ }
2364
+
2365
+ @supports (color: color-mix(in lab, red, red)) {
2366
+ [data-rfkit-charts-root] .ring-background\\/30 {
2367
+ --tw-ring-color: color-mix(in oklab, var(--background) 30%, transparent);
2368
+ }
2369
+ }
2370
+
2371
+ [data-rfkit-charts-root] .ring-border {
2372
+ --tw-ring-color: var(--border);
2373
+ }
2374
+
2238
2375
  [data-rfkit-charts-root] .ring-offset-background {
2239
2376
  --tw-ring-offset-color: var(--background);
2240
2377
  }
@@ -2404,6 +2541,10 @@ var __webpack_modules__ = {
2404
2541
  animation-play-state: paused;
2405
2542
  }
2406
2543
 
2544
+ [data-rfkit-charts-root] .ring-inset {
2545
+ --tw-ring-inset: inset;
2546
+ }
2547
+
2407
2548
  [data-rfkit-charts-root] .group-focus-within\\:opacity-90:is(:where(.group):focus-within *) {
2408
2549
  opacity: .9;
2409
2550
  }
@@ -2539,6 +2680,16 @@ var __webpack_modules__ = {
2539
2680
  }
2540
2681
  }
2541
2682
 
2683
+ [data-rfkit-charts-root] .hover\\:bg-accent\\/80:hover {
2684
+ background-color: var(--accent);
2685
+ }
2686
+
2687
+ @supports (color: color-mix(in lab, red, red)) {
2688
+ [data-rfkit-charts-root] .hover\\:bg-accent\\/80:hover {
2689
+ background-color: color-mix(in oklab, var(--accent) 80%, transparent);
2690
+ }
2691
+ }
2692
+
2542
2693
  [data-rfkit-charts-root] .hover\\:bg-background\\/70:hover {
2543
2694
  background-color: var(--background);
2544
2695
  }
@@ -2924,16 +3075,12 @@ var __webpack_modules__ = {
2924
3075
  translate: var(--tw-translate-x) var(--tw-translate-y);
2925
3076
  }
2926
3077
 
2927
- [data-rfkit-charts-root] .data-\\[state\\=checked\\]\\:border-current[data-state="checked"] {
2928
- border-color: currentColor;
2929
- }
2930
-
2931
- [data-rfkit-charts-root] .data-\\[state\\=checked\\]\\:bg-current[data-state="checked"] {
2932
- background-color: currentColor;
3078
+ [data-rfkit-charts-root] .data-\\[state\\=checked\\]\\:border-primary[data-state="checked"] {
3079
+ border-color: var(--primary);
2933
3080
  }
2934
3081
 
2935
- [data-rfkit-charts-root] .data-\\[state\\=checked\\]\\:text-background[data-state="checked"] {
2936
- color: var(--background);
3082
+ [data-rfkit-charts-root] .data-\\[state\\=checked\\]\\:text-primary-foreground[data-state="checked"] {
3083
+ color: var(--primary-foreground, #fff);
2937
3084
  }
2938
3085
 
2939
3086
  [data-rfkit-charts-root] .data-\\[state\\=closed\\]\\:animate-out[data-state="closed"] {
@@ -2948,6 +3095,18 @@ var __webpack_modules__ = {
2948
3095
  --tw-exit-scale: .95;
2949
3096
  }
2950
3097
 
3098
+ [data-rfkit-charts-root] .data-\\[state\\=indeterminate\\]\\:border-primary[data-state="indeterminate"] {
3099
+ border-color: var(--primary);
3100
+ }
3101
+
3102
+ [data-rfkit-charts-root] .data-\\[state\\=indeterminate\\]\\:bg-primary[data-state="indeterminate"] {
3103
+ background-color: var(--primary);
3104
+ }
3105
+
3106
+ [data-rfkit-charts-root] .data-\\[state\\=indeterminate\\]\\:text-primary-foreground[data-state="indeterminate"] {
3107
+ color: var(--primary-foreground, #fff);
3108
+ }
3109
+
2951
3110
  [data-rfkit-charts-root] .data-\\[state\\=open\\]\\:animate-in[data-state="open"] {
2952
3111
  animation: enter var(--tw-animation-duration, var(--tw-duration, .15s)) var(--tw-ease, ease) var(--tw-animation-delay, 0s) var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal) var(--tw-animation-fill-mode, none);
2953
3112
  }
@@ -3126,6 +3285,14 @@ var __webpack_modules__ = {
3126
3285
  justify-content: center;
3127
3286
  }
3128
3287
 
3288
+ [data-rfkit-charts-root] .\\[\\&\\>span\\:last-child\\]\\:ml-0 > span:last-child {
3289
+ margin-left: 0;
3290
+ }
3291
+
3292
+ [data-rfkit-charts-root] .\\[\\&\\>span\\:last-child\\]\\:text-primary > span:last-child {
3293
+ color: var(--primary);
3294
+ }
3295
+
3129
3296
  [data-rfkit-charts-root] .\\[\\&\\>svg\\]\\:h-full > svg {
3130
3297
  height: 100%;
3131
3298
  }
@@ -3471,6 +3638,12 @@ var __webpack_modules__ = {
3471
3638
  initial-value: 0;
3472
3639
  }
3473
3640
 
3641
+ @property --tw-divide-y-reverse {
3642
+ syntax: "*";
3643
+ inherits: false;
3644
+ initial-value: 0;
3645
+ }
3646
+
3474
3647
  @property --tw-border-style {
3475
3648
  syntax: "*";
3476
3649
  inherits: false;
@@ -3487,6 +3660,31 @@ var __webpack_modules__ = {
3487
3660
  inherits: false
3488
3661
  }
3489
3662
 
3663
+ @property --tw-ordinal {
3664
+ syntax: "*";
3665
+ inherits: false
3666
+ }
3667
+
3668
+ @property --tw-slashed-zero {
3669
+ syntax: "*";
3670
+ inherits: false
3671
+ }
3672
+
3673
+ @property --tw-numeric-figure {
3674
+ syntax: "*";
3675
+ inherits: false
3676
+ }
3677
+
3678
+ @property --tw-numeric-spacing {
3679
+ syntax: "*";
3680
+ inherits: false
3681
+ }
3682
+
3683
+ @property --tw-numeric-fraction {
3684
+ syntax: "*";
3685
+ inherits: false
3686
+ }
3687
+
3490
3688
  @property --tw-shadow {
3491
3689
  syntax: "*";
3492
3690
  inherits: false;
@@ -5789,6 +5987,7 @@ function createParams() {
5789
5987
  show: true,
5790
5988
  display: false,
5791
5989
  data: [],
5990
+ hiddenCategoryKeys: [],
5792
5991
  onChange: ()=>{}
5793
5992
  },
5794
5993
  signalAnalysis: {
@@ -17401,14 +17600,15 @@ const ScrollBar = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(({
17401
17600
  })
17402
17601
  }));
17403
17602
  ScrollBar.displayName = ScrollAreaScrollbar.displayName;
17404
- const scroll_area_ScrollArea = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(({ className, children, ...props }, ref)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(react_scroll_area_dist_Root, {
17603
+ const scroll_area_ScrollArea = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(({ className, viewportClassName, children, ...props }, ref)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(react_scroll_area_dist_Root, {
17405
17604
  ref: ref,
17406
17605
  "data-slot": "scroll-area",
17407
17606
  className: cn_cn('relative overflow-hidden', className),
17408
17607
  ...props,
17409
17608
  children: [
17410
17609
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Viewport, {
17411
- className: "h-full w-full rounded-[inherit]",
17610
+ "data-slot": "scroll-area-viewport",
17611
+ className: cn_cn('h-full w-full rounded-[inherit]', viewportClassName),
17412
17612
  children: children
17413
17613
  }),
17414
17614
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ScrollBar, {}),
@@ -18114,7 +18314,7 @@ const Tooltip_Tooltip = ({ children, content, delay = 200, duration = 3000, offs
18114
18314
  });
18115
18315
  };
18116
18316
  const Overlay_Tooltip = Tooltip_Tooltip;
18117
- const Dropdown_Dropdown = ({ value: value1, options, onChange, placeholder = "\u8BF7\u9009\u62E9", triggerContent, triggerTitle, closeOnSelect = true, triggerVariant = 'default', showChevron = true, triggerClassName, contentClassName })=>{
18317
+ const Dropdown_Dropdown = ({ value: value1, options, onChange, placeholder = "\u8BF7\u9009\u62E9", triggerContent, triggerTitle, closeOnSelect = true, triggerVariant = 'default', showChevron = true, triggerClassName, contentClassName, contentAlignOffset, customContent, triggerTestId })=>{
18118
18318
  const [open, setOpen] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
18119
18319
  const handleSelect = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((option)=>{
18120
18320
  const nextValue = option.value ?? null;
@@ -18144,6 +18344,7 @@ const Dropdown_Dropdown = ({ value: value1, options, onChange, placeholder = "\u
18144
18344
  asChild: true,
18145
18345
  children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("button", {
18146
18346
  type: "button",
18347
+ "data-testid": triggerTestId,
18147
18348
  className: cn_cn('cursor-pointer appearance-none select-none border-0 bg-transparent text-left', 'default' === triggerVariant && TOOLBAR_OUTLINED_TRIGGER_CLASS_NAME, 'default' === triggerVariant && TOOLBAR_OUTLINED_TRIGGER_OPEN_CLASS_NAME, 'plain' === triggerVariant && TOOLBAR_INLINE_TRIGGER_CLASS_NAME, triggerClassName),
18148
18349
  children: [
18149
18350
  resolvedTriggerContent,
@@ -18166,10 +18367,11 @@ const Dropdown_Dropdown = ({ value: value1, options, onChange, placeholder = "\u
18166
18367
  }) : triggerNode,
18167
18368
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dropdown_menu_DropdownMenuContent, {
18168
18369
  align: "start",
18370
+ alignOffset: contentAlignOffset,
18169
18371
  collisionPadding: 8,
18170
18372
  className: cn_cn('min-w-[140px] [min-width:var(--radix-dropdown-menu-trigger-width)]', contentClassName),
18171
- children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(scroll_area_ScrollArea, {
18172
- className: "max-h-64",
18373
+ children: customContent ?? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(scroll_area_ScrollArea, {
18374
+ viewportClassName: "h-auto max-h-64",
18173
18375
  children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
18174
18376
  children: options.map((option, index)=>'separator' === option.type ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dropdown_menu_DropdownMenuSeparator, {
18175
18377
  style: option.style
@@ -18697,6 +18899,7 @@ const ToolbarGroupSeparator = ({ className })=>/*#__PURE__*/ (0, __WEBPACK_EXTER
18697
18899
  className: cn_cn(TOOLBAR_GROUP_SEPARATOR_CLASS_NAME, className),
18698
18900
  orientation: "vertical"
18699
18901
  });
18902
+ const TOOLBAR_DROPDOWN_GROUP_ALIGN_OFFSET = -27;
18700
18903
  const ToolbarDropdown = (props)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Dropdown, {
18701
18904
  ...props,
18702
18905
  triggerVariant: "default",
@@ -18718,13 +18921,14 @@ const ToolbarIconDropdown = ({ icon, title, triggerClassName, ...props })=>{
18718
18921
  triggerContent: iconNode
18719
18922
  });
18720
18923
  };
18721
- const ToolbarDropdownGroup = ({ leading, triggerClassName, ...props })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(ToolbarGroup, {
18924
+ const ToolbarDropdownGroup = ({ leading, triggerClassName, contentAlignOffset = TOOLBAR_DROPDOWN_GROUP_ALIGN_OFFSET, ...props })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(ToolbarGroup, {
18722
18925
  children: [
18723
18926
  leading,
18724
18927
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Dropdown, {
18725
18928
  ...props,
18726
18929
  triggerVariant: "plain",
18727
18930
  contentClassName: cn_cn(TOOLBAR_DROPDOWN_CONTENT_CLASS_NAME, props.contentClassName),
18931
+ contentAlignOffset: contentAlignOffset,
18728
18932
  triggerClassName: cn_cn(TOOLBAR_INLINE_INSET_CLASS_NAME, triggerClassName)
18729
18933
  })
18730
18934
  ]
@@ -22846,28 +23050,196 @@ const OccupancyCursorPopover = ({ id })=>{
22846
23050
  });
22847
23051
  };
22848
23052
  const Occupancy_CursorPopover = OccupancyCursorPopover;
23053
+ const SignalType = {
23054
+ LEGITIMATE: 'Legitimate',
23055
+ UNKNOWN: 'UnKnown',
23056
+ KNOWN: 'Know',
23057
+ VIOLATION: 'Violation',
23058
+ ILLEGAL: 'Illegal'
23059
+ };
22849
23060
  const SIGNAL_TYPE_MAP = {
22850
23061
  Legitimate: {
22851
23062
  name: "\u5408\u6CD5",
22852
- color: '#52c41a',
23063
+ color: 'var(--success)',
22853
23064
  isLegitimate: true
22854
23065
  },
23066
+ UnKnown: {
23067
+ name: "\u672A\u77E5",
23068
+ color: 'var(--muted-foreground)',
23069
+ isLegitimate: false
23070
+ },
22855
23071
  Know: {
22856
23072
  name: "\u5DF2\u77E5",
22857
- color: '#ff9900',
23073
+ color: 'var(--primary)',
22858
23074
  isLegitimate: true
22859
23075
  },
22860
- UnKnown: {
22861
- name: "\u672A\u77E5",
22862
- color: '#bfbfbf',
23076
+ Violation: {
23077
+ name: "\u8FDD\u89C4",
23078
+ color: 'var(--warning)',
22863
23079
  isLegitimate: false
22864
23080
  },
22865
23081
  Illegal: {
22866
- name: "\u4E0D\u5408\u6CD5",
22867
- color: '#f5222d',
23082
+ name: "\u975E\u6CD5",
23083
+ color: 'var(--destructive)',
22868
23084
  isLegitimate: false
22869
23085
  }
22870
23086
  };
23087
+ const SIGNAL_TYPE_ORDER = [
23088
+ SignalType.LEGITIMATE,
23089
+ SignalType.UNKNOWN,
23090
+ SignalType.KNOWN,
23091
+ SignalType.VIOLATION,
23092
+ SignalType.ILLEGAL
23093
+ ];
23094
+ const normalizeSignalType = (value1)=>{
23095
+ if ('string' == typeof value1 && SIGNAL_TYPE_ORDER.includes(value1)) return value1;
23096
+ return SignalType.UNKNOWN;
23097
+ };
23098
+ const SIGNAL_LEVEL_UNASSIGNED = -1;
23099
+ const SIGNAL_LEVEL_FIRST = 0;
23100
+ const SIGNAL_LEVEL_SECOND = 1;
23101
+ const SIGNAL_LEVEL_THIRD = 2;
23102
+ const SIGNAL_LEVEL_ORDER = [
23103
+ SIGNAL_LEVEL_UNASSIGNED,
23104
+ SIGNAL_LEVEL_FIRST,
23105
+ SIGNAL_LEVEL_SECOND,
23106
+ SIGNAL_LEVEL_THIRD
23107
+ ];
23108
+ const SIGNAL_LEVEL_MAP = {
23109
+ [SIGNAL_LEVEL_UNASSIGNED]: {
23110
+ name: "\u672A\u5206\u914D",
23111
+ color: 'color-mix(in oklab, var(--success) 35%, var(--background))'
23112
+ },
23113
+ [SIGNAL_LEVEL_FIRST]: {
23114
+ name: "\u4E00\u7EA7",
23115
+ color: 'color-mix(in oklab, var(--success) 55%, var(--background))'
23116
+ },
23117
+ [SIGNAL_LEVEL_SECOND]: {
23118
+ name: "\u4E8C\u7EA7",
23119
+ color: 'color-mix(in oklab, var(--success) 75%, var(--background))'
23120
+ },
23121
+ [SIGNAL_LEVEL_THIRD]: {
23122
+ name: "\u4E09\u7EA7",
23123
+ color: 'var(--success)'
23124
+ }
23125
+ };
23126
+ const normalizeSignalLevel = (value1)=>{
23127
+ if ('number' != typeof value1 || !Number.isInteger(value1)) return SIGNAL_LEVEL_UNASSIGNED;
23128
+ if (value1 === SIGNAL_LEVEL_UNASSIGNED || value1 === SIGNAL_LEVEL_FIRST || value1 === SIGNAL_LEVEL_SECOND || value1 === SIGNAL_LEVEL_THIRD) return value1;
23129
+ return SIGNAL_LEVEL_UNASSIGNED;
23130
+ };
23131
+ const resolveSignalColor = (item)=>{
23132
+ if (item.color) return item.color;
23133
+ const signalType = normalizeSignalType(item.signalType);
23134
+ if ('simple' === item.source && signalType === SignalType.LEGITIMATE) return SIGNAL_LEVEL_MAP[normalizeSignalLevel(item.level)].color;
23135
+ return SIGNAL_TYPE_MAP[signalType].color;
23136
+ };
23137
+ const SIGNAL_SOURCE_ORDER = [
23138
+ 'station',
23139
+ 'simple'
23140
+ ];
23141
+ const SIGNAL_SOURCE_LABEL = {
23142
+ station: "\u53F0\u7AD9\u5E93",
23143
+ simple: "\u4FE1\u53F7\u5E93"
23144
+ };
23145
+ function tree_isStationInfo(item) {
23146
+ return 'signalName' in item && 'orgName' in item;
23147
+ }
23148
+ const resolveSignalSource = (item)=>tree_isStationInfo(item) ? 'station' : 'simple';
23149
+ const getSignalLeafKey = (item)=>`${resolveSignalSource(item)}:${normalizeSignalType(item.signalType)}:${normalizeSignalLevel(item.level)}`;
23150
+ function getUnifiedSignalKey(item) {
23151
+ const source = resolveSignalSource(item);
23152
+ if (item.id) return `${source}:${item.id}`;
23153
+ if (tree_isStationInfo(item)) return `${source}:${item.signalName}-${item.frequency}`;
23154
+ if (null != item.startFrequency && null != item.stopFrequency) return `${source}:${item.startFrequency}-${item.stopFrequency}`;
23155
+ return `${source}:${item.frequency}-${item.bandwidth}`;
23156
+ }
23157
+ const buildSignalTree = (signalItems)=>{
23158
+ const leafKeysWithData = new Set(signalItems.map(getSignalLeafKey));
23159
+ const sources = [];
23160
+ for (const source of SIGNAL_SOURCE_ORDER){
23161
+ const sourceDataLeafKeys = [
23162
+ ...leafKeysWithData
23163
+ ].filter((key)=>key.startsWith(`${source}:`));
23164
+ if (0 === sourceDataLeafKeys.length) continue;
23165
+ if ('station' === source) {
23166
+ sources.push({
23167
+ source,
23168
+ label: SIGNAL_SOURCE_LABEL[source],
23169
+ leafKeys: sourceDataLeafKeys,
23170
+ dataLeafKeys: sourceDataLeafKeys,
23171
+ hasData: true,
23172
+ types: []
23173
+ });
23174
+ continue;
23175
+ }
23176
+ const types = SIGNAL_TYPE_ORDER.flatMap((signalType)=>{
23177
+ const levels = SIGNAL_LEVEL_ORDER.map((level)=>{
23178
+ const leafKey = `${source}:${signalType}:${level}`;
23179
+ return {
23180
+ level,
23181
+ label: SIGNAL_LEVEL_MAP[level].name,
23182
+ leafKey,
23183
+ hasData: leafKeysWithData.has(leafKey)
23184
+ };
23185
+ });
23186
+ const leafKeys = levels.map((level)=>level.leafKey);
23187
+ const dataLeafKeys = leafKeys.filter((key)=>leafKeysWithData.has(key));
23188
+ if (0 === dataLeafKeys.length) return [];
23189
+ return {
23190
+ signalType,
23191
+ label: SIGNAL_TYPE_MAP[signalType].name,
23192
+ leafKeys,
23193
+ dataLeafKeys,
23194
+ hasData: dataLeafKeys.length > 0,
23195
+ levels: signalType === SignalType.LEGITIMATE ? levels.filter((level)=>level.hasData) : []
23196
+ };
23197
+ });
23198
+ if (0 === types.length) continue;
23199
+ const leafKeys = types.flatMap((type)=>type.leafKeys);
23200
+ const dataLeafKeys = leafKeys.filter((key)=>leafKeysWithData.has(key));
23201
+ sources.push({
23202
+ source,
23203
+ label: SIGNAL_SOURCE_LABEL[source],
23204
+ leafKeys,
23205
+ dataLeafKeys,
23206
+ hasData: true,
23207
+ types
23208
+ });
23209
+ }
23210
+ return {
23211
+ sources
23212
+ };
23213
+ };
23214
+ const resolveNodeCheckState = (leafKeysWithData, hiddenCategoryKeys, fixedLeafKeys)=>{
23215
+ const dataLeafKeys = fixedLeafKeys.filter((key)=>leafKeysWithData.has(key));
23216
+ if (0 === dataLeafKeys.length) return 'disabled';
23217
+ const hiddenCount = dataLeafKeys.filter((key)=>hiddenCategoryKeys.has(key)).length;
23218
+ if (0 === hiddenCount) return 'checked';
23219
+ if (hiddenCount === dataLeafKeys.length) return 'unchecked';
23220
+ return 'indeterminate';
23221
+ };
23222
+ const toggleNodeHiddenKeys = (hiddenCategoryKeys, fixedLeafKeys, leafKeysWithData)=>{
23223
+ const next = new Set(hiddenCategoryKeys);
23224
+ const dataLeafKeys = fixedLeafKeys.filter((key)=>leafKeysWithData.has(key));
23225
+ const hiddenDataCount = dataLeafKeys.filter((key)=>next.has(key)).length;
23226
+ const allDataVisible = dataLeafKeys.length > 0 && 0 === hiddenDataCount;
23227
+ if (allDataVisible) {
23228
+ for (const key of fixedLeafKeys)next.add(key);
23229
+ return [
23230
+ ...next
23231
+ ];
23232
+ }
23233
+ for (const key of fixedLeafKeys)next.delete(key);
23234
+ return [
23235
+ ...next
23236
+ ];
23237
+ };
23238
+ const filterSignalItemsByHiddenKeys = (signalItems, hiddenCategoryKeys)=>{
23239
+ if (!hiddenCategoryKeys.length) return signalItems;
23240
+ const hiddenKeys = new Set(hiddenCategoryKeys);
23241
+ return signalItems.filter((item)=>!hiddenKeys.has(getSignalLeafKey(item)));
23242
+ };
22871
23243
  const SIGNAL_INDEX_MATCH_TOLERANCE = 1;
22872
23244
  const getRangeCenter = (range)=>(range.startFreq + range.stopFreq) / 2;
22873
23245
  const getRangeWidth = (range)=>Math.abs(range.stopFreq - range.startFreq);
@@ -22885,7 +23257,7 @@ const compareFrequencyMatchedCandidates = (currentFrequency, a, b)=>{
22885
23257
  if (0 !== widthDiff) return widthDiff;
22886
23258
  const centerDistanceDiff = Math.abs(getRangeCenter(a.range) - currentFrequency) - Math.abs(getRangeCenter(b.range) - currentFrequency);
22887
23259
  if (0 !== centerDistanceDiff) return centerDistanceDiff;
22888
- const stationPriorityDiff = Number(utils_isStationInfo(b.item)) - Number(utils_isStationInfo(a.item));
23260
+ const stationPriorityDiff = Number(tree_isStationInfo(b.item)) - Number(tree_isStationInfo(a.item));
22889
23261
  if (0 !== stationPriorityDiff) return stationPriorityDiff;
22890
23262
  return getUnifiedSignalKey(a.item).localeCompare(getUnifiedSignalKey(b.item));
22891
23263
  };
@@ -22896,18 +23268,10 @@ const compareIndexMatchedCandidates = (currentFrequency, currentPointIndex, a, b
22896
23268
  if (0 !== widthDiff) return widthDiff;
22897
23269
  const frequencyDistanceDiff = getFrequencyDistanceToRange(currentFrequency, a.range) - getFrequencyDistanceToRange(currentFrequency, b.range);
22898
23270
  if (0 !== frequencyDistanceDiff) return frequencyDistanceDiff;
22899
- const stationPriorityDiff = Number(utils_isStationInfo(b.item)) - Number(utils_isStationInfo(a.item));
23271
+ const stationPriorityDiff = Number(tree_isStationInfo(b.item)) - Number(tree_isStationInfo(a.item));
22900
23272
  if (0 !== stationPriorityDiff) return stationPriorityDiff;
22901
23273
  return getUnifiedSignalKey(a.item).localeCompare(getUnifiedSignalKey(b.item));
22902
23274
  };
22903
- function utils_isStationInfo(item) {
22904
- return 'signalName' in item && 'orgName' in item;
22905
- }
22906
- function getUnifiedSignalKey(item) {
22907
- if (utils_isStationInfo(item)) return `${item.signalName}-${item.frequency}`;
22908
- if (null != item.startFrequency && null != item.stopFrequency) return `${item.startFrequency}-${item.stopFrequency}`;
22909
- return `${item.frequency}-${item.bandwidth}`;
22910
- }
22911
23275
  function toFrequencyRangeInput(item) {
22912
23276
  return {
22913
23277
  frequency: null != item.frequency ? Number(item.frequency) : void 0,
@@ -22916,7 +23280,7 @@ function toFrequencyRangeInput(item) {
22916
23280
  stopFrequency: null != item.stopFrequency ? Number(item.stopFrequency) : void 0
22917
23281
  };
22918
23282
  }
22919
- function utils_resolveBestSignalMatch(candidates, options) {
23283
+ function match_resolveBestSignalMatch(candidates, options) {
22920
23284
  const { currentFrequency, currentPointIndex } = options;
22921
23285
  const indexTolerance = options.indexTolerance ?? SIGNAL_INDEX_MATCH_TOLERANCE;
22922
23286
  if (!Number.isFinite(currentFrequency) || !Number.isFinite(currentPointIndex) || !candidates.length) return;
@@ -22928,24 +23292,39 @@ function utils_resolveBestSignalMatch(candidates, options) {
22928
23292
  }, indexTolerance)).sort((a, b)=>compareIndexMatchedCandidates(currentFrequency, currentPointIndex, a, b));
22929
23293
  return indexMatched[0];
22930
23294
  }
23295
+ const resolveFrequencyPresentation = (item)=>{
23296
+ if (null != item.frequency) return `${item.frequency}MHz`;
23297
+ if (null != item.startFrequency && null != item.stopFrequency) return `${item.startFrequency}-${item.stopFrequency}MHz`;
23298
+ };
22931
23299
  const resolveSignalPresentation = (item)=>{
22932
- if (utils_isStationInfo(item)) {
22933
- const signalType = item.signalType;
22934
- const signalTypeInfo = SIGNAL_TYPE_MAP[signalType];
22935
- const signalTypeName = signalTypeInfo?.name || item.signalType;
22936
- return {
22937
- color: signalTypeInfo?.color || 'var(--primary)',
22938
- tooltip: [
22939
- item.signalName,
22940
- `${item.frequency}MHz`,
22941
- item.orgName && `\u{5355}\u{4F4D}: ${item.orgName}`,
22942
- signalTypeName && `\u{7C7B}\u{578B}: ${signalTypeName}`
22943
- ].filter(Boolean).join(' | ')
22944
- };
22945
- }
23300
+ const source = resolveSignalSource(item);
23301
+ const signalType = normalizeSignalType(item.signalType);
23302
+ const signalTypeName = SIGNAL_TYPE_MAP[signalType].name;
23303
+ const levelName = SIGNAL_LEVEL_MAP[normalizeSignalLevel(item.level)].name;
23304
+ const color = resolveSignalColor({
23305
+ ...item,
23306
+ source
23307
+ });
23308
+ const frequencyText = resolveFrequencyPresentation(item);
23309
+ const bandwidthText = null != item.bandwidth ? `\u{5E26}\u{5BBD}: ${item.bandwidth}kHz` : void 0;
23310
+ if (tree_isStationInfo(item)) return {
23311
+ color,
23312
+ tooltip: [
23313
+ item.signalName,
23314
+ frequencyText,
23315
+ item.orgName && `\u{5355}\u{4F4D}: ${item.orgName}`,
23316
+ signalTypeName && `\u{7C7B}\u{578B}: ${signalTypeName}`
23317
+ ].filter(Boolean).join(' | ')
23318
+ };
22946
23319
  return {
22947
- color: item.color || 'var(--primary)',
22948
- tooltip: void 0
23320
+ color,
23321
+ tooltip: [
23322
+ SIGNAL_SOURCE_LABEL[source],
23323
+ frequencyText,
23324
+ bandwidthText,
23325
+ signalTypeName && `\u{7C7B}\u{578B}: ${signalTypeName}`,
23326
+ signalType === SignalType.LEGITIMATE && levelName && `\u{7B49}\u{7EA7}: ${levelName}`
23327
+ ].filter(Boolean).join(' | ')
22949
23328
  };
22950
23329
  };
22951
23330
  const resolveSignalMatchCandidates = (signalItems, segment)=>signalItems.flatMap((item)=>{
@@ -23001,26 +23380,23 @@ const resolveActiveSignalKey = ({ segmentData, isCursorActive, currentFrequency,
23001
23380
  if (!isCursorActive || !Number.isFinite(currentFrequency) || currentPosition.segmentIndex < 0) return;
23002
23381
  const currentSegmentData = segmentData[currentPosition.segmentIndex];
23003
23382
  if (!currentSegmentData) return;
23004
- return utils_resolveBestSignalMatch(currentSegmentData.signalPositions, {
23383
+ return match_resolveBestSignalMatch(currentSegmentData.signalPositions, {
23005
23384
  currentFrequency,
23006
23385
  currentPointIndex: currentPosition.pointIndex
23007
23386
  })?.key;
23008
23387
  };
23009
- const createStationRangeIndex = ({ signalItems, segments })=>{
23388
+ const createSignalRangeIndex = ({ signalItems, segments })=>{
23010
23389
  if (!signalItems.length || !segments.length) return [];
23011
- const stationItems = signalItems.filter(utils_isStationInfo);
23012
- if (!stationItems.length) return [];
23013
- return segments.map((segment)=>resolveSignalMatchCandidates(stationItems, segment));
23390
+ return segments.map((segment)=>resolveSignalMatchCandidates(signalItems, segment));
23014
23391
  };
23015
- const findStationInRangeIndex = ({ frequency, stationRangeIndex, currentPosition })=>{
23392
+ const findSignalInRangeIndex = ({ frequency, signalRangeIndex, currentPosition })=>{
23016
23393
  if (!Number.isFinite(frequency)) return;
23017
- const candidates = stationRangeIndex[currentPosition.segmentIndex];
23394
+ const candidates = signalRangeIndex[currentPosition.segmentIndex];
23018
23395
  if (!candidates?.length) return;
23019
- const matchedSignal = utils_resolveBestSignalMatch(candidates, {
23396
+ return match_resolveBestSignalMatch(candidates, {
23020
23397
  currentFrequency: frequency,
23021
23398
  currentPointIndex: currentPosition.pointIndex
23022
- });
23023
- return matchedSignal && utils_isStationInfo(matchedSignal.item) ? matchedSignal.item : void 0;
23399
+ })?.item;
23024
23400
  };
23025
23401
  const withStationDataUpdate = (globalID, name, func)=>{
23026
23402
  const subscriptionId = `stationData-update-${globalID}`;
@@ -23035,11 +23411,12 @@ const STATION_DATA = (globalID, data)=>{
23035
23411
  }
23036
23412
  return result;
23037
23413
  };
23038
- function useUnifiedSignals({ respectVisibility = false } = {}) {
23414
+ function useUnifiedSignals({ respectVisibility = false, filterHidden = true } = {}) {
23039
23415
  const globalID = useStore_useSelector((state)=>state.globalID);
23040
23416
  const signalData = useStore_useSelector((state)=>state.signal.data);
23041
23417
  const signalDisplay = useStore_useSelector((state)=>state.signal.display);
23042
23418
  const signalShow = useStore_useSelector((state)=>state.signal.show);
23419
+ const hiddenCategoryKeys = useStore_useSelector((state)=>state.signal.hiddenCategoryKeys);
23043
23420
  const [updateTrigger, setUpdateTrigger] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(0);
23044
23421
  (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
23045
23422
  const subscriberName = `useUnifiedSignals-${globalID}-${Date.now()}`;
@@ -23058,32 +23435,44 @@ function useUnifiedSignals({ respectVisibility = false } = {}) {
23058
23435
  if (respectVisibility && (!signalShow || !signalDisplay)) return [];
23059
23436
  const stationData = STATION_DATA(globalID);
23060
23437
  const nextSignalData = signalData || [];
23061
- return [
23438
+ const combined = [
23062
23439
  ...stationData,
23063
23440
  ...nextSignalData
23064
23441
  ];
23442
+ if (!filterHidden || !hiddenCategoryKeys?.length) return combined;
23443
+ return filterSignalItemsByHiddenKeys(combined, hiddenCategoryKeys);
23065
23444
  }, [
23066
23445
  globalID,
23067
23446
  signalData,
23068
23447
  signalDisplay,
23069
23448
  signalShow,
23070
23449
  respectVisibility,
23450
+ filterHidden,
23451
+ hiddenCategoryKeys,
23071
23452
  updateTrigger
23072
23453
  ]);
23073
23454
  }
23074
- function useStationInfoAtCursor({ frequency, enabled = true, cursorSample }) {
23455
+ const useSignalMatchAtCursor = ({ frequency, enabled = true, cursorSample }, source)=>{
23075
23456
  const cursor = useStore_useSelector((state)=>state.cursor);
23076
23457
  const segments = useStore_useSelector((state)=>state.segments);
23077
23458
  const left = cursorSample?.coord.left ?? cursor.coord.left;
23078
23459
  const signalItems = useUnifiedSignals({
23079
23460
  respectVisibility: enabled
23080
23461
  });
23081
- const stationRangeIndex = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>createStationRangeIndex({
23082
- signalItems,
23462
+ const matchingSignalItems = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
23463
+ if (!enabled) return [];
23464
+ return 'station' === source ? signalItems.filter(tree_isStationInfo) : signalItems;
23465
+ }, [
23466
+ enabled,
23467
+ signalItems,
23468
+ source
23469
+ ]);
23470
+ const signalRangeIndex = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>createSignalRangeIndex({
23471
+ signalItems: matchingSignalItems,
23083
23472
  segments
23084
23473
  }), [
23085
- segments,
23086
- signalItems
23474
+ matchingSignalItems,
23475
+ segments
23087
23476
  ]);
23088
23477
  const isCursorActive = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>enabled && (cursorSample ? true : cursor_hasActiveSpectrumCursor(cursor)), [
23089
23478
  cursor,
@@ -23099,100 +23488,142 @@ function useStationInfoAtCursor({ frequency, enabled = true, cursorSample }) {
23099
23488
  segments
23100
23489
  ]);
23101
23490
  return (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
23102
- if (!enabled || 'number' != typeof left || !Number.isFinite(left) || left < 0 || !stationRangeIndex.length || !segments?.length) return;
23491
+ if (!enabled || 'number' != typeof left || !Number.isFinite(left) || left < 0 || !signalRangeIndex.length || !segments?.length) return;
23103
23492
  if (!isCursorActive) return;
23104
23493
  const currentFrequency = frequencyCalculation_getCursorFrequencyAtPosition(segments, currentPosition);
23105
23494
  if (!Number.isFinite(currentFrequency)) {
23106
23495
  const fallbackFrequency = Number(frequency);
23107
23496
  if (!Number.isFinite(fallbackFrequency)) return;
23108
- return findStationInRangeIndex({
23497
+ return findSignalInRangeIndex({
23109
23498
  frequency: fallbackFrequency,
23110
- stationRangeIndex,
23499
+ signalRangeIndex,
23111
23500
  currentPosition
23112
23501
  });
23113
23502
  }
23114
- return findStationInRangeIndex({
23503
+ return findSignalInRangeIndex({
23115
23504
  frequency: currentFrequency,
23116
- stationRangeIndex,
23505
+ signalRangeIndex,
23117
23506
  currentPosition
23118
23507
  });
23119
23508
  }, [
23120
23509
  enabled,
23121
23510
  frequency,
23122
- stationRangeIndex,
23511
+ signalRangeIndex,
23123
23512
  segments,
23124
23513
  currentPosition,
23125
23514
  left,
23126
23515
  isCursorActive
23127
23516
  ]);
23517
+ };
23518
+ function useSignalInfoAtCursor(props) {
23519
+ return useSignalMatchAtCursor(props, 'all');
23128
23520
  }
23129
- const StationInfoPanel = ({ stationInfo })=>{
23130
- const signalTypeInfo = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
23131
- if (!stationInfo?.signalType) return null;
23132
- return SIGNAL_TYPE_MAP[stationInfo.signalType];
23133
- }, [
23134
- stationInfo?.signalType
23135
- ]);
23136
- const signalColor = signalTypeInfo?.color;
23137
- const signalTypeName = signalTypeInfo?.name || stationInfo?.signalType;
23138
- if (!stationInfo) return null;
23139
- return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23140
- className: "mt-1 border-t border-dashed border-border/70 pt-1 text-xs leading-5 text-foreground",
23521
+ const SignalInfoRow = ({ label, value: value1, tabular = false })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23522
+ className: `flex gap-2${tabular ? ' tabular-nums' : ''}`,
23141
23523
  children: [
23142
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23143
- children: [
23144
- "\u540D\u79F0\uFF1A",
23145
- stationInfo.signalName
23146
- ]
23524
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
23525
+ className: "w-10 shrink-0 text-muted-foreground",
23526
+ children: label
23147
23527
  }),
23148
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23149
- children: [
23150
- "\u5355\u4F4D\uFF1A",
23151
- stationInfo.orgName
23152
- ]
23153
- }),
23154
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23155
- children: [
23156
- "\u9891\u7387\uFF1A",
23157
- stationInfo.frequency,
23158
- "MHz"
23159
- ]
23160
- }),
23161
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23162
- children: [
23163
- "\u5E26\u5BBD\uFF1A",
23164
- stationInfo.bandwidth,
23165
- "kHz"
23166
- ]
23167
- }),
23168
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23169
- children: [
23170
- "\u8C03\u5236\uFF1A",
23171
- stationInfo.modulation
23172
- ]
23528
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
23529
+ className: "min-w-0 break-words",
23530
+ children: value1
23531
+ })
23532
+ ]
23533
+ });
23534
+ const SignalMetaValue = ({ color, label, testId })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("span", {
23535
+ className: "inline-flex items-center gap-1.5 font-medium text-foreground",
23536
+ children: [
23537
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
23538
+ "aria-hidden": "true",
23539
+ className: "size-2 shrink-0 rounded-full ring-1 ring-inset ring-border",
23540
+ "data-testid": testId,
23541
+ style: {
23542
+ backgroundColor: color
23543
+ }
23173
23544
  }),
23174
- signalTypeName ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23175
- children: [
23176
- "\u7C7B\u578B\uFF1A",
23177
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
23178
- style: {
23179
- color: signalColor
23180
- },
23181
- children: signalTypeName
23182
- })
23183
- ]
23184
- }) : null,
23185
- stationInfo.remark ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23186
- children: [
23187
- "\u5907\u6CE8\uFF1A",
23188
- stationInfo.remark
23189
- ]
23190
- }) : null
23545
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
23546
+ children: label
23547
+ })
23191
23548
  ]
23192
23549
  });
23550
+ const SignalInfoPanel = ({ signalInfo })=>{
23551
+ if (!signalInfo) return null;
23552
+ const source = resolveSignalSource(signalInfo);
23553
+ const stationInfo = tree_isStationInfo(signalInfo) ? signalInfo : void 0;
23554
+ const signalType = normalizeSignalType(signalInfo.signalType);
23555
+ const signalTypeInfo = SIGNAL_TYPE_MAP[signalType];
23556
+ const levelInfo = SIGNAL_LEVEL_MAP[normalizeSignalLevel(signalInfo.level)];
23557
+ const showLevel = 'simple' === source && signalType === SignalType.LEGITIMATE;
23558
+ const resolvedColor = resolveSignalColor({
23559
+ ...signalInfo,
23560
+ source
23561
+ });
23562
+ const typeColor = showLevel ? signalTypeInfo.color : resolvedColor;
23563
+ const hasFrequencyRange = null != signalInfo.startFrequency && null != signalInfo.stopFrequency;
23564
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
23565
+ className: "mt-2 border-t border-border/60 pt-2 text-xs leading-5 text-foreground",
23566
+ "data-signal-source": source,
23567
+ "data-testid": "signal-info-panel",
23568
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
23569
+ className: "space-y-0.5",
23570
+ children: [
23571
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23572
+ label: "\u6765\u6E90",
23573
+ value: SIGNAL_SOURCE_LABEL[source]
23574
+ }),
23575
+ stationInfo?.signalName ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23576
+ label: "\u540D\u79F0",
23577
+ value: stationInfo.signalName
23578
+ }) : null,
23579
+ stationInfo?.orgName ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23580
+ label: "\u5355\u4F4D",
23581
+ value: stationInfo.orgName
23582
+ }) : null,
23583
+ null != signalInfo.frequency ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23584
+ label: "\u9891\u7387",
23585
+ value: `${signalInfo.frequency}MHz`,
23586
+ tabular: true
23587
+ }) : hasFrequencyRange ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23588
+ label: "\u8303\u56F4",
23589
+ value: `${signalInfo.startFrequency}-${signalInfo.stopFrequency}MHz`,
23590
+ tabular: true
23591
+ }) : null,
23592
+ null != signalInfo.bandwidth ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23593
+ label: "\u5E26\u5BBD",
23594
+ value: `${signalInfo.bandwidth}kHz`,
23595
+ tabular: true
23596
+ }) : null,
23597
+ stationInfo?.modulation ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23598
+ label: "\u8C03\u5236",
23599
+ value: stationInfo.modulation
23600
+ }) : null,
23601
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23602
+ label: "\u7C7B\u578B",
23603
+ value: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalMetaValue, {
23604
+ color: typeColor,
23605
+ label: signalTypeInfo.name,
23606
+ testId: "signal-info-type-swatch"
23607
+ })
23608
+ }),
23609
+ showLevel ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23610
+ label: "\u7B49\u7EA7",
23611
+ value: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalMetaValue, {
23612
+ color: resolvedColor,
23613
+ label: levelInfo.name,
23614
+ testId: "signal-info-level-swatch"
23615
+ })
23616
+ }) : null,
23617
+ stationInfo?.remark ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalInfoRow, {
23618
+ label: "\u5907\u6CE8",
23619
+ value: stationInfo.remark
23620
+ }) : null
23621
+ ]
23622
+ })
23623
+ });
23193
23624
  };
23194
- const panels_StationInfoPanel = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__["default"].memo(StationInfoPanel);
23195
- const FrequencyDataBoard = ({ left, updateKey, onChange, showStationInfo = true, cursorSample })=>{
23625
+ const StationInfoPanel = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__["default"].memo(SignalInfoPanel);
23626
+ const FrequencyDataBoard = ({ left, updateKey, onChange, showSignalInfo = true, cursorSample })=>{
23196
23627
  const axisYUnit = useStore_useSelector((state)=>state.axisY.unit);
23197
23628
  const frequencyFormat = useStore_useSelector((state)=>state.axisX.frequencyFormat);
23198
23629
  const unit = useStore_useSelector((state)=>state.axisX.unit);
@@ -23328,17 +23759,17 @@ const FrequencyDataBoard = ({ left, updateKey, onChange, showStationInfo = true,
23328
23759
  frequency,
23329
23760
  onChange
23330
23761
  ]);
23331
- const matchedStation = useStationInfoAtCursor({
23762
+ const matchedSignal = useSignalInfoAtCursor({
23332
23763
  frequency,
23333
- enabled: showStationInfo,
23764
+ enabled: showSignalInfo,
23334
23765
  cursorSample
23335
23766
  });
23336
- const hasStationInfo = showStationInfo && !!matchedStation;
23767
+ const hasSignalInfo = showSignalInfo && !!matchedSignal;
23337
23768
  const hasValue = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>value1 && (Array.isArray(value1) ? value1.length > 0 : true), [
23338
23769
  value1
23339
23770
  ]);
23340
23771
  if (left < 0) return null;
23341
- if (!hasValue && !hasStationInfo) return null;
23772
+ if (!hasValue && !hasSignalInfo) return null;
23342
23773
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(components_Mask, {
23343
23774
  children: [
23344
23775
  frequency && /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
@@ -23352,8 +23783,8 @@ const FrequencyDataBoard = ({ left, updateKey, onChange, showStationInfo = true,
23352
23783
  className: "mt-2 space-y-1",
23353
23784
  children: value1
23354
23785
  }) : null,
23355
- showStationInfo ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(panels_StationInfoPanel, {
23356
- stationInfo: matchedStation
23786
+ showSignalInfo ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(StationInfoPanel, {
23787
+ signalInfo: matchedSignal
23357
23788
  }) : null
23358
23789
  ]
23359
23790
  });
@@ -23368,7 +23799,7 @@ const SpectrumCursorPopover = ({ id })=>{
23368
23799
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Spectrum_FrequencyDataBoard, {
23369
23800
  left: 'number' == typeof left ? left : -1,
23370
23801
  updateKey: updateKey,
23371
- showStationInfo: signalShow && signalDisplay,
23802
+ showSignalInfo: signalShow && signalDisplay,
23372
23803
  cursorSample: sample
23373
23804
  });
23374
23805
  };
@@ -27590,7 +28021,7 @@ const FluorescenceSwitch = ()=>{
27590
28021
  })
27591
28022
  });
27592
28023
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ToolbarDropdownGroup, {
27593
- leading: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(primitives_IconBox, {
28024
+ leading: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ToolbarGroupIconBox, {
27594
28025
  active: display,
27595
28026
  tone: "primary",
27596
28027
  onClick: toggleDisplay,
@@ -28208,10 +28639,497 @@ const Markers_Switch_Switch = ()=>{
28208
28639
  });
28209
28640
  };
28210
28641
  const Markers_Switch = Markers_Switch_Switch;
28642
+ /**
28643
+ * @license lucide-react v0.577.0 - ISC
28644
+ *
28645
+ * This source code is licensed under the ISC license.
28646
+ * See the LICENSE file in the root directory of this source tree.
28647
+ */ const chevron_down_iconNode = [
28648
+ [
28649
+ "path",
28650
+ {
28651
+ d: "m6 9 6 6 6-6",
28652
+ key: "qrunsl"
28653
+ }
28654
+ ]
28655
+ ];
28656
+ const ChevronDown = createLucideIcon("chevron-down", chevron_down_iconNode);
28657
+ /**
28658
+ * @license lucide-react v0.577.0 - ISC
28659
+ *
28660
+ * This source code is licensed under the ISC license.
28661
+ * See the LICENSE file in the root directory of this source tree.
28662
+ */ const chevron_right_iconNode = [
28663
+ [
28664
+ "path",
28665
+ {
28666
+ d: "m9 18 6-6-6-6",
28667
+ key: "mthhwq"
28668
+ }
28669
+ ]
28670
+ ];
28671
+ const ChevronRight = createLucideIcon("chevron-right", chevron_right_iconNode);
28672
+ "use client";
28673
+ var react_checkbox_dist_defProp = Object.defineProperty;
28674
+ var react_checkbox_dist_name = (target, value1)=>react_checkbox_dist_defProp(target, "name", {
28675
+ value: value1,
28676
+ configurable: true
28677
+ });
28678
+ var CHECKBOX_NAME = "Checkbox";
28679
+ var [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);
28680
+ var [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
28681
+ function CheckboxProvider(props) {
28682
+ const { __scopeCheckbox, checked: checkedProp, children, defaultChecked, disabled, form, name, onCheckedChange, required, value: value1 = "on", internal_do_not_use_render } = props;
28683
+ const [checked, setChecked] = dist_useControllableState({
28684
+ prop: checkedProp,
28685
+ defaultProp: defaultChecked ?? false,
28686
+ onChange: onCheckedChange,
28687
+ caller: CHECKBOX_NAME
28688
+ });
28689
+ const [control, setControl] = __WEBPACK_EXTERNAL_MODULE_react__.useState(null);
28690
+ const [bubbleInput, setBubbleInput] = __WEBPACK_EXTERNAL_MODULE_react__.useState(null);
28691
+ const hasConsumerStoppedPropagationRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(false);
28692
+ const [userInteractionCount, onUserInteraction] = __WEBPACK_EXTERNAL_MODULE_react__.useReducer((count)=>count + 1, 0);
28693
+ const isFormControl = control ? !!form || !!control.closest("form") : true;
28694
+ const context = {
28695
+ checked,
28696
+ disabled,
28697
+ setChecked,
28698
+ control,
28699
+ setControl,
28700
+ name,
28701
+ form,
28702
+ value: value1,
28703
+ hasConsumerStoppedPropagationRef,
28704
+ userInteractionCount,
28705
+ onUserInteraction,
28706
+ required,
28707
+ defaultChecked: dist_isIndeterminate(defaultChecked) ? false : defaultChecked,
28708
+ isFormControl,
28709
+ bubbleInput,
28710
+ setBubbleInput
28711
+ };
28712
+ return /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(CheckboxProviderImpl, {
28713
+ scope: __scopeCheckbox,
28714
+ ...context,
28715
+ children: dist_isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
28716
+ });
28717
+ }
28718
+ react_checkbox_dist_name(CheckboxProvider, "CheckboxProvider");
28719
+ var react_checkbox_dist_TRIGGER_NAME = "CheckboxTrigger";
28720
+ var CheckboxTrigger = /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(/* @__PURE__ */ react_checkbox_dist_name(function({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) {
28721
+ const { control, value: value1, disabled, checked, required, setControl, setChecked, hasConsumerStoppedPropagationRef, onUserInteraction, isFormControl, bubbleInput } = useCheckboxContext(react_checkbox_dist_TRIGGER_NAME, __scopeCheckbox);
28722
+ const composedRefs = dist_useComposedRefs(forwardedRef, setControl);
28723
+ const initialCheckedStateRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(checked);
28724
+ __WEBPACK_EXTERNAL_MODULE_react__.useEffect(()=>{
28725
+ const form = control?.form;
28726
+ if (form) {
28727
+ const reset = /* @__PURE__ */ react_checkbox_dist_name(()=>setChecked(initialCheckedStateRef.current), "reset");
28728
+ form.addEventListener("reset", reset);
28729
+ return ()=>form.removeEventListener("reset", reset);
28730
+ }
28731
+ }, [
28732
+ control,
28733
+ setChecked
28734
+ ]);
28735
+ return /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dist_Primitive.button, {
28736
+ type: "button",
28737
+ role: "checkbox",
28738
+ "aria-checked": dist_isIndeterminate(checked) ? "mixed" : checked,
28739
+ "aria-required": required,
28740
+ "data-state": getState(checked),
28741
+ "data-disabled": disabled ? "" : void 0,
28742
+ disabled,
28743
+ value: value1,
28744
+ ...checkboxProps,
28745
+ ref: composedRefs,
28746
+ onKeyDown: dist_composeEventHandlers(onKeyDown, (event)=>{
28747
+ if ("Enter" === event.key) event.preventDefault();
28748
+ }),
28749
+ onClick: dist_composeEventHandlers(onClick, (event)=>{
28750
+ onUserInteraction();
28751
+ setChecked((prevChecked)=>dist_isIndeterminate(prevChecked) ? true : !prevChecked);
28752
+ if (bubbleInput && isFormControl) {
28753
+ hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
28754
+ if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
28755
+ }
28756
+ })
28757
+ });
28758
+ }, "CheckboxTrigger"));
28759
+ var Checkbox = /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(/* @__PURE__ */ react_checkbox_dist_name(function(props, forwardedRef) {
28760
+ const { __scopeCheckbox, name, checked, defaultChecked, required, disabled, value: value1, onCheckedChange, form, ...checkboxProps } = props;
28761
+ return /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(CheckboxProvider, {
28762
+ __scopeCheckbox,
28763
+ checked,
28764
+ defaultChecked,
28765
+ disabled,
28766
+ required,
28767
+ onCheckedChange,
28768
+ name,
28769
+ form,
28770
+ value: value1,
28771
+ internal_do_not_use_render: ({ isFormControl })=>/* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.Fragment, {
28772
+ children: [
28773
+ /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(CheckboxTrigger, {
28774
+ ...checkboxProps,
28775
+ ref: forwardedRef,
28776
+ __scopeCheckbox
28777
+ }),
28778
+ isFormControl && /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(CheckboxBubbleInput, {
28779
+ __scopeCheckbox
28780
+ })
28781
+ ]
28782
+ })
28783
+ });
28784
+ }, "Checkbox"));
28785
+ var INDICATOR_NAME = "CheckboxIndicator";
28786
+ var CheckboxIndicator = /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(/* @__PURE__ */ react_checkbox_dist_name(function(props, forwardedRef) {
28787
+ const { __scopeCheckbox, forceMount, ...indicatorProps } = props;
28788
+ const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);
28789
+ return /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dist_Presence, {
28790
+ present: forceMount || dist_isIndeterminate(context.checked) || true === context.checked,
28791
+ children: /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dist_Primitive.span, {
28792
+ "data-state": getState(context.checked),
28793
+ "data-disabled": context.disabled ? "" : void 0,
28794
+ ...indicatorProps,
28795
+ ref: forwardedRef,
28796
+ style: {
28797
+ pointerEvents: "none",
28798
+ ...props.style
28799
+ }
28800
+ })
28801
+ });
28802
+ }, "CheckboxIndicator"));
28803
+ var BUBBLE_INPUT_NAME = "CheckboxBubbleInput";
28804
+ var CheckboxBubbleInput = /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(/* @__PURE__ */ react_checkbox_dist_name(function({ __scopeCheckbox, onClick, ...props }, forwardedRef) {
28805
+ const { control, hasConsumerStoppedPropagationRef, userInteractionCount, checked, defaultChecked, required, disabled, name, value: value1, form, bubbleInput, setBubbleInput } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);
28806
+ const composedRefs = dist_useComposedRefs(forwardedRef, setBubbleInput);
28807
+ const controlSize = useSize(control);
28808
+ const shouldStopClickPropagationRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(false);
28809
+ const prevCheckedRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(checked);
28810
+ const prevUserInteractionCountRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(userInteractionCount);
28811
+ __WEBPACK_EXTERNAL_MODULE_react__.useEffect(()=>{
28812
+ const input = bubbleInput;
28813
+ if (!input) return;
28814
+ const inputProto = window.HTMLInputElement.prototype;
28815
+ const descriptor = Object.getOwnPropertyDescriptor(inputProto, "checked");
28816
+ const setChecked = descriptor.set;
28817
+ const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;
28818
+ prevUserInteractionCountRef.current = userInteractionCount;
28819
+ const checkedChanged = prevCheckedRef.current !== checked;
28820
+ prevCheckedRef.current = checked;
28821
+ const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);
28822
+ if (checkedChanged && setChecked) {
28823
+ shouldStopClickPropagationRef.current = !isUserInteraction;
28824
+ const event = new Event("click", {
28825
+ bubbles
28826
+ });
28827
+ input.indeterminate = dist_isIndeterminate(checked);
28828
+ setChecked.call(input, dist_isIndeterminate(checked) ? false : checked);
28829
+ input.dispatchEvent(event);
28830
+ shouldStopClickPropagationRef.current = false;
28831
+ }
28832
+ }, [
28833
+ bubbleInput,
28834
+ checked,
28835
+ hasConsumerStoppedPropagationRef,
28836
+ userInteractionCount
28837
+ ]);
28838
+ const defaultCheckedRef = __WEBPACK_EXTERNAL_MODULE_react__.useRef(dist_isIndeterminate(checked) ? false : checked);
28839
+ return /* @__PURE__ */ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(dist_Primitive.input, {
28840
+ type: "checkbox",
28841
+ "aria-hidden": true,
28842
+ defaultChecked: defaultChecked ?? defaultCheckedRef.current,
28843
+ required,
28844
+ disabled,
28845
+ name,
28846
+ value: value1,
28847
+ form,
28848
+ ...props,
28849
+ tabIndex: -1,
28850
+ ref: composedRefs,
28851
+ onClick: dist_composeEventHandlers(onClick, (event)=>{
28852
+ if (shouldStopClickPropagationRef.current) event.stopPropagation();
28853
+ }),
28854
+ style: {
28855
+ ...props.style,
28856
+ ...controlSize,
28857
+ position: "absolute",
28858
+ pointerEvents: "none",
28859
+ opacity: 0,
28860
+ margin: 0,
28861
+ transform: "translateX(-100%)"
28862
+ }
28863
+ });
28864
+ }, "CheckboxBubbleInput"));
28865
+ function dist_isFunction(value1) {
28866
+ return "function" == typeof value1;
28867
+ }
28868
+ react_checkbox_dist_name(dist_isFunction, "isFunction");
28869
+ function dist_isIndeterminate(checked) {
28870
+ return "indeterminate" === checked;
28871
+ }
28872
+ react_checkbox_dist_name(dist_isIndeterminate, "isIndeterminate");
28873
+ function getState(checked) {
28874
+ return dist_isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
28875
+ }
28876
+ react_checkbox_dist_name(getState, "getState");
28877
+ /**
28878
+ * @license lucide-react v0.577.0 - ISC
28879
+ *
28880
+ * This source code is licensed under the ISC license.
28881
+ * See the LICENSE file in the root directory of this source tree.
28882
+ */ const minus_iconNode = [
28883
+ [
28884
+ "path",
28885
+ {
28886
+ d: "M5 12h14",
28887
+ key: "1ays0h"
28888
+ }
28889
+ ]
28890
+ ];
28891
+ const Minus = createLucideIcon("minus", minus_iconNode);
28892
+ /**
28893
+ * @license lucide-react v0.577.0 - ISC
28894
+ *
28895
+ * This source code is licensed under the ISC license.
28896
+ * See the LICENSE file in the root directory of this source tree.
28897
+ */ const check_iconNode = [
28898
+ [
28899
+ "path",
28900
+ {
28901
+ d: "M20 6 9 17l-5-5",
28902
+ key: "1gmf2c"
28903
+ }
28904
+ ]
28905
+ ];
28906
+ const Check = createLucideIcon("check", check_iconNode);
28907
+ const checkbox_Checkbox = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Checkbox, {
28908
+ ref: ref,
28909
+ "data-slot": "checkbox",
28910
+ className: cn_cn('peer inline-flex size-4 shrink-0 items-center justify-center rounded-[var(--radius-micro)] border border-border bg-background text-primary shadow-xs transition-colors outline-none', 'focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50', 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground', 'data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground', className),
28911
+ ...props,
28912
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(CheckboxIndicator, {
28913
+ "data-slot": "checkbox-indicator",
28914
+ className: "flex items-center justify-center text-current",
28915
+ children: 'indeterminate' === props.checked ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Minus, {
28916
+ className: "size-3.5"
28917
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(Check, {
28918
+ className: "size-3.5"
28919
+ })
28920
+ })
28921
+ }));
28922
+ checkbox_Checkbox.displayName = Checkbox.displayName;
28923
+ const toCheckboxValue = (state)=>{
28924
+ if ('checked' === state) return true;
28925
+ if ('indeterminate' === state) return 'indeterminate';
28926
+ return false;
28927
+ };
28928
+ const SignalTypeRow = ({ source, type, leafKeysWithData, hiddenKeys, expanded, onToggleExpanded, onToggleNode })=>{
28929
+ const state = resolveNodeCheckState(leafKeysWithData, hiddenKeys, type.leafKeys);
28930
+ const checkboxId = `signal-tree-type-checkbox-${source.source}-${type.signalType}`;
28931
+ const hasLevels = type.levels.length > 0;
28932
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
28933
+ children: [
28934
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
28935
+ className: "group flex items-center gap-1.5 rounded-[var(--radius-control)] px-[var(--size-gap-base)] py-[calc(var(--size-gap-base)/2)] transition-colors hover:bg-accent/80",
28936
+ "data-testid": `signal-tree-type-${source.source}-${type.signalType}`,
28937
+ children: [
28938
+ hasLevels ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("button", {
28939
+ type: "button",
28940
+ "aria-label": expanded ? "\u6298\u53E0\u4FE1\u53F7\u7C7B\u578B" : "\u5C55\u5F00\u4FE1\u53F7\u7C7B\u578B",
28941
+ className: "flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
28942
+ onClick: onToggleExpanded,
28943
+ children: expanded ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ChevronDown, {
28944
+ className: "size-3.5"
28945
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ChevronRight, {
28946
+ className: "size-3.5"
28947
+ })
28948
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
28949
+ "aria-hidden": "true",
28950
+ className: "size-4 shrink-0"
28951
+ }),
28952
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("label", {
28953
+ htmlFor: checkboxId,
28954
+ className: cn_cn('flex min-w-0 flex-1 items-center gap-1.5', 'disabled' === state ? 'cursor-not-allowed' : 'cursor-pointer'),
28955
+ children: [
28956
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(checkbox_Checkbox, {
28957
+ id: checkboxId,
28958
+ "aria-label": `${source.label} ${type.label}`,
28959
+ checked: toCheckboxValue(state),
28960
+ disabled: 'disabled' === state,
28961
+ onCheckedChange: ()=>onToggleNode(type.leafKeys)
28962
+ }),
28963
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
28964
+ "aria-hidden": "true",
28965
+ className: cn_cn('size-2 shrink-0 rounded-full ring-1 ring-inset ring-background/30', 'disabled' === state && 'opacity-35'),
28966
+ "data-testid": `signal-tree-type-color-${source.source}-${type.signalType}`,
28967
+ style: {
28968
+ backgroundColor: SIGNAL_TYPE_MAP[type.signalType].color
28969
+ }
28970
+ }),
28971
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
28972
+ className: cn_cn('min-w-0 truncate text-xs font-medium', 'disabled' === state ? 'text-muted-foreground' : 'text-foreground/90'),
28973
+ children: type.label
28974
+ })
28975
+ ]
28976
+ })
28977
+ ]
28978
+ }),
28979
+ expanded && hasLevels ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
28980
+ className: "relative ml-6 border-l border-border/60 pl-1",
28981
+ children: type.levels.map((level)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalLevelRow, {
28982
+ source: source.source,
28983
+ signalType: type.signalType,
28984
+ level: level,
28985
+ leafKeysWithData: leafKeysWithData,
28986
+ hiddenKeys: hiddenKeys,
28987
+ onToggleNode: onToggleNode
28988
+ }, level.leafKey))
28989
+ }) : null
28990
+ ]
28991
+ }, type.signalType);
28992
+ };
28993
+ const SignalLevelRow = ({ source, signalType, level, leafKeysWithData, hiddenKeys, onToggleNode })=>{
28994
+ const state = resolveNodeCheckState(leafKeysWithData, hiddenKeys, [
28995
+ level.leafKey
28996
+ ]);
28997
+ const checkboxId = `signal-tree-level-checkbox-${source}-${signalType}-${level.level}`;
28998
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
28999
+ className: "group flex items-center gap-1.5 rounded-[var(--radius-control)] px-[var(--size-gap-base)] py-[calc(var(--size-gap-base)/2)] transition-colors hover:bg-accent/80",
29000
+ "data-testid": `signal-tree-level-${source}-${signalType}-${level.level}`,
29001
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("label", {
29002
+ htmlFor: checkboxId,
29003
+ className: cn_cn('flex min-w-0 flex-1 items-center gap-1.5', 'disabled' === state ? 'cursor-not-allowed' : 'cursor-pointer'),
29004
+ children: [
29005
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(checkbox_Checkbox, {
29006
+ id: checkboxId,
29007
+ "aria-label": `${signalType} ${level.label}`,
29008
+ checked: toCheckboxValue(state),
29009
+ disabled: 'disabled' === state,
29010
+ onCheckedChange: ()=>onToggleNode([
29011
+ level.leafKey
29012
+ ])
29013
+ }),
29014
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
29015
+ "aria-hidden": "true",
29016
+ className: cn_cn('size-2 shrink-0 rounded-full ring-1 ring-inset ring-background/30', 'disabled' === state && 'opacity-35'),
29017
+ "data-testid": `signal-tree-level-color-${source}-${signalType}-${level.level}`,
29018
+ style: {
29019
+ backgroundColor: SIGNAL_LEVEL_MAP[level.level].color
29020
+ }
29021
+ }),
29022
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
29023
+ className: cn_cn('text-xs', 'disabled' === state ? 'text-muted-foreground' : 'text-foreground/80'),
29024
+ children: level.label
29025
+ })
29026
+ ]
29027
+ })
29028
+ });
29029
+ };
29030
+ const SignalAnnotationTree = ({ tree, leafKeysWithData, hiddenKeys, onToggleNode })=>{
29031
+ const [collapsedKeys, setCollapsedKeys] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(()=>new Set());
29032
+ const [collapsedSourceKeys, setCollapsedSourceKeys] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(()=>new Set());
29033
+ const toggleExpanded = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((key)=>{
29034
+ setCollapsedKeys((prev)=>{
29035
+ const next = new Set(prev);
29036
+ if (next.has(key)) next.delete(key);
29037
+ else next.add(key);
29038
+ return next;
29039
+ });
29040
+ }, []);
29041
+ const toggleSourceExpanded = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((source)=>{
29042
+ setCollapsedSourceKeys((prev)=>{
29043
+ const next = new Set(prev);
29044
+ if (next.has(source)) next.delete(source);
29045
+ else next.add(source);
29046
+ return next;
29047
+ });
29048
+ }, []);
29049
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(scroll_area_ScrollArea, {
29050
+ viewportClassName: "h-auto max-h-[var(--radix-dropdown-menu-content-available-height)]",
29051
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
29052
+ className: "p-[calc(var(--size-gap-base)/2)]",
29053
+ children: tree.sources.map((source, sourceIndex)=>{
29054
+ const sourceState = resolveNodeCheckState(leafKeysWithData, hiddenKeys, source.leafKeys);
29055
+ const checkboxId = `signal-tree-source-checkbox-${source.source}`;
29056
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
29057
+ className: cn_cn(sourceIndex > 0 && 'mt-[calc(var(--size-gap-base)/2)] border-t border-border/60 pt-[calc(var(--size-gap-base)/2)]'),
29058
+ "data-testid": `signal-tree-source-${source.source}`,
29059
+ children: [
29060
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
29061
+ className: "flex items-center gap-1.5 rounded-[var(--radius-control)] px-[var(--size-gap-base)] py-[calc(var(--size-gap-base)/2)] transition-colors hover:bg-accent/80",
29062
+ "data-testid": `signal-tree-source-row-${source.source}`,
29063
+ children: [
29064
+ source.types.length > 0 ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("button", {
29065
+ type: "button",
29066
+ "aria-label": collapsedSourceKeys.has(source.source) ? "\u5C55\u5F00\u6570\u636E\u6765\u6E90" : "\u6298\u53E0\u6570\u636E\u6765\u6E90",
29067
+ className: "flex size-4 shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
29068
+ onClick: ()=>toggleSourceExpanded(source.source),
29069
+ children: collapsedSourceKeys.has(source.source) ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ChevronRight, {
29070
+ className: "size-3.5"
29071
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ChevronDown, {
29072
+ className: "size-3.5"
29073
+ })
29074
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
29075
+ "aria-hidden": "true",
29076
+ className: "size-4 shrink-0"
29077
+ }),
29078
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("label", {
29079
+ htmlFor: checkboxId,
29080
+ className: cn_cn('flex min-w-0 flex-1 items-center gap-1.5', 'disabled' === sourceState ? 'cursor-not-allowed' : 'cursor-pointer'),
29081
+ children: [
29082
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(checkbox_Checkbox, {
29083
+ id: checkboxId,
29084
+ "aria-label": `${source.label}\u{7B5B}\u{9009}`,
29085
+ checked: toCheckboxValue(sourceState),
29086
+ disabled: 'disabled' === sourceState,
29087
+ onCheckedChange: ()=>onToggleNode(source.leafKeys)
29088
+ }),
29089
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
29090
+ className: "text-xs font-medium text-foreground",
29091
+ children: source.label
29092
+ })
29093
+ ]
29094
+ })
29095
+ ]
29096
+ }),
29097
+ collapsedSourceKeys.has(source.source) ? null : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
29098
+ className: "ml-4 divide-y divide-border/40 border-l border-border/60 pl-1",
29099
+ children: source.types.map((type)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalTypeRow, {
29100
+ source: source,
29101
+ type: type,
29102
+ leafKeysWithData: leafKeysWithData,
29103
+ hiddenKeys: hiddenKeys,
29104
+ expanded: !collapsedKeys.has(`${source.source}:${type.signalType}`),
29105
+ onToggleExpanded: ()=>toggleExpanded(`${source.source}:${type.signalType}`),
29106
+ onToggleNode: onToggleNode
29107
+ }, type.signalType))
29108
+ })
29109
+ ]
29110
+ }, source.source);
29111
+ })
29112
+ })
29113
+ });
29114
+ };
28211
29115
  const Signal_Switch_Switch = ()=>{
28212
29116
  const { state: { signal }, dispatch } = useStore_useStore();
28213
29117
  const isActive = signal.display;
28214
29118
  const shouldShow = signal.show;
29119
+ const signalItems = useUnifiedSignals({
29120
+ respectVisibility: false,
29121
+ filterHidden: false
29122
+ });
29123
+ const tree = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>buildSignalTree(signalItems), [
29124
+ signalItems
29125
+ ]);
29126
+ const leafKeysWithData = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>new Set(tree.sources.flatMap((source)=>source.dataLeafKeys)), [
29127
+ tree
29128
+ ]);
29129
+ const hiddenKeys = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>new Set(signal.hiddenCategoryKeys ?? []), [
29130
+ signal.hiddenCategoryKeys
29131
+ ]);
29132
+ const hasCategoryFilter = (signal.hiddenCategoryKeys?.length ?? 0) > 0;
28215
29133
  const setActive = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((active)=>{
28216
29134
  dispatch({
28217
29135
  payload: {
@@ -28225,22 +29143,58 @@ const Signal_Switch_Switch = ()=>{
28225
29143
  signal,
28226
29144
  dispatch
28227
29145
  ]);
29146
+ const toggleNode = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((fixedLeafKeys)=>{
29147
+ const next = toggleNodeHiddenKeys(signal.hiddenCategoryKeys ?? [], fixedLeafKeys, leafKeysWithData);
29148
+ dispatch({
29149
+ payload: {
29150
+ signal: {
29151
+ ...signal,
29152
+ hiddenCategoryKeys: next
29153
+ }
29154
+ }
29155
+ });
29156
+ }, [
29157
+ signal,
29158
+ leafKeysWithData,
29159
+ dispatch
29160
+ ]);
28228
29161
  if (!shouldShow) return null;
28229
- return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(primitives_IconBox, {
28230
- active: isActive,
28231
- tone: "primary",
28232
- onClick: ()=>{
28233
- setActive(!isActive);
28234
- },
28235
- title: `\u{4FE1}\u{53F7}\u{6807}\u{6CE8}-\u{5DF2}${isActive ? "\u663E\u793A" : "\u9690\u85CF"}`,
28236
- children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", {
28237
- viewBox: "0 0 1024 1024",
28238
- xmlns: "http://www.w3.org/2000/svg",
28239
- children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", {
28240
- fill: "currentColor",
28241
- d: "M563.072 376.48a79.456 79.456 0 0 0 28.928-61.12 80 80 0 1 0-160 0c0 24.672 11.392 46.432 28.928 61.12l-202.88 540.256a32 32 0 1 0 59.904 22.496l49.28-131.264h289.504l49.28 131.264a32.064 32.064 0 0 0 41.248 18.752c16.544-6.208 24.896-24.672 18.72-41.216l-202.912-540.288z m-1.312 178.624h-99.552L512 422.56l49.76 132.544z m-170.464 188.896l46.912-124.896h147.616l46.912 124.896h-241.44zM662.464 417.408a32 32 0 1 0 53.12 35.648 254.72 254.72 0 0 0 43.136-142.304 255.04 255.04 0 0 0-43.136-142.304 32 32 0 1 0-53.12 35.68 190.944 190.944 0 0 1 32.288 106.624 190.816 190.816 0 0 1-32.288 106.656zM289.888 453.024a32 32 0 1 0 53.184-35.616 191.36 191.36 0 0 1-32.32-106.656 191.328 191.328 0 0 1 32.32-106.656 32.064 32.064 0 0 0-8.768-44.416 32.096 32.096 0 0 0-44.416 8.768 254.976 254.976 0 0 0-43.136 142.304 254.976 254.976 0 0 0 43.136 142.272zM210.656 117.12A32 32 0 1 0 157.44 81.536a420.032 420.032 0 0 0-70.848 233.824 419.744 419.744 0 0 0 70.88 233.856 31.936 31.936 0 0 0 44.416 8.768 32 32 0 0 0 8.768-44.416 355.168 355.168 0 0 1-60.032-198.24A355.36 355.36 0 0 1 210.656 117.12zM896.224 154.304a416.96 416.96 0 0 0-38.912-72.768 32 32 0 1 0-53.184 35.584 354.912 354.912 0 0 1 60.064 198.24 355.2 355.2 0 0 1-60.064 198.208 32.032 32.032 0 0 0 53.184 35.648 418.816 418.816 0 0 0 70.88-233.856c0-55.68-10.752-109.856-31.968-161.056z"
29162
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ToolbarDropdownGroup, {
29163
+ leading: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(ToolbarGroupIconBox, {
29164
+ active: isActive,
29165
+ tone: "primary",
29166
+ onClick: ()=>{
29167
+ setActive(!isActive);
29168
+ },
29169
+ title: `\u{5168}\u{90E8}\u{4FE1}\u{53F7}\u{6807}\u{6CE8}\u{FF1A}${isActive ? "\u663E\u793A" : "\u9690\u85CF"}`,
29170
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("svg", {
29171
+ viewBox: "0 0 1024 1024",
29172
+ xmlns: "http://www.w3.org/2000/svg",
29173
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("path", {
29174
+ fill: "currentColor",
29175
+ d: "M563.072 376.48a79.456 79.456 0 0 0 28.928-61.12 80 80 0 1 0-160 0c0 24.672 11.392 46.432 28.928 61.12l-202.88 540.256a32 32 0 1 0 59.904 22.496l49.28-131.264h289.504l49.28 131.264a32.064 32.064 0 0 0 41.248 18.752c16.544-6.208 24.896-24.672 18.72-41.216l-202.912-540.288z m-1.312 178.624h-99.552L512 422.56l49.76 132.544z m-170.464 188.896l46.912-124.896h147.616l46.912 124.896h-241.44zM662.464 417.408a32 32 0 1 0 53.12 35.648 254.72 254.72 0 0 0 43.136-142.304 255.04 255.04 0 0 0-43.136-142.304 32 32 0 1 0-53.12 35.68 190.944 190.944 0 0 1 32.288 106.624 190.816 190.816 0 0 1-32.288 106.656zM289.888 453.024a32 32 0 1 0 53.184-35.616 191.36 191.36 0 0 1-32.32-106.656 191.328 191.328 0 0 1 32.32-106.656 32.064 32.064 0 0 0-8.768-44.416 32.096 32.096 0 0 0-44.416 8.768 254.976 254.976 0 0 0-43.136 142.304 254.976 254.976 0 0 0 43.136 142.272zM210.656 117.12A32 32 0 1 0 157.44 81.536a420.032 420.032 0 0 0-70.848 233.824 419.744 419.744 0 0 0 70.88 233.856 31.936 31.936 0 0 0 44.416 8.768 32 32 0 0 0 8.768-44.416 355.168 355.168 0 0 1-60.032-198.24A355.36 355.36 0 0 1 210.656 117.12zM896.224 154.304a416.96 416.96 0 0 0-38.912-72.768 32 32 0 1 0-53.184 35.584 354.912 354.912 0 0 1 60.064 198.24 355.2 355.2 0 0 1-60.064 198.208 32.032 32.032 0 0 0 53.184 35.648 418.816 418.816 0 0 0 70.88-233.856c0-55.68-10.752-109.856-31.968-161.056z"
29176
+ })
28242
29177
  })
28243
- })
29178
+ }),
29179
+ value: null,
29180
+ options: [],
29181
+ triggerTitle: `\u{7B5B}\u{9009}\u{4FE1}\u{53F7}\u{6807}\u{6CE8}\u{7C7B}\u{522B}${hasCategoryFilter ? "\uFF08\u5DF2\u5E94\u7528\u7B5B\u9009\uFF09" : ''}`,
29182
+ triggerTestId: "signal-tree-trigger",
29183
+ triggerContent: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
29184
+ className: "sr-only",
29185
+ children: hasCategoryFilter ? "\u4FE1\u53F7\u6807\u6CE8\u7C7B\u522B\u7B5B\u9009\uFF08\u5DF2\u5E94\u7528\uFF09" : "\u4FE1\u53F7\u6807\u6CE8\u7C7B\u522B\u7B5B\u9009"
29186
+ }),
29187
+ customContent: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
29188
+ "data-testid": "signal-tree-popover",
29189
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalAnnotationTree, {
29190
+ tree: tree,
29191
+ leafKeysWithData: leafKeysWithData,
29192
+ hiddenKeys: hiddenKeys,
29193
+ onToggleNode: toggleNode
29194
+ })
29195
+ }),
29196
+ contentClassName: "w-max max-w-[calc(100vw-1rem)] p-0",
29197
+ triggerClassName: cn_cn('justify-center [&>span:last-child]:ml-0', hasCategoryFilter && 'bg-accent/72 shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--primary)_28%,transparent)] [&>span:last-child]:text-primary')
28244
29198
  });
28245
29199
  };
28246
29200
  const Signal_Switch = Signal_Switch_Switch;
@@ -30408,7 +31362,7 @@ const Board = ({ id })=>{
30408
31362
  left: left,
30409
31363
  updateKey: updateKey,
30410
31364
  onChange: handleChange,
30411
- showStationInfo: false
31365
+ showSignalInfo: false
30412
31366
  })
30413
31367
  });
30414
31368
  };
@@ -32176,27 +33130,47 @@ const Scope = ()=>{
32176
33130
  });
32177
33131
  };
32178
33132
  const Spectrum_Scope = Scope;
32179
- const SignalSegments_SignalSegments = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react__.memo)(({ style, signalPositions, activeSignalKey, segmentIndex })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
33133
+ const SignalSegments = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react__.memo)(({ style, signalPositions, activeSignalKey, segmentIndex })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
32180
33134
  className: "absolute h-full box-border",
32181
33135
  style: style,
32182
- children: signalPositions.map(({ key, position, color, tooltip })=>{
33136
+ children: signalPositions.map(({ item, key, position, color, tooltip })=>{
32183
33137
  const isActive = activeSignalKey === key;
32184
- const itemStyle = {
33138
+ const positionStyle = {
32185
33139
  left: position.left,
32186
33140
  width: position.width,
32187
- minWidth: '1px',
32188
- backgroundColor: color,
32189
- opacity: isActive ? 0.5 : 1,
32190
- height: isActive ? '100%' : '8px'
33141
+ minWidth: '1px'
32191
33142
  };
32192
- return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
32193
- className: "pointer-events-none absolute top-0 flex min-w-px items-center justify-center overflow-hidden text-ellipsis whitespace-nowrap text-center text-xs text-foreground",
32194
- style: itemStyle,
32195
- title: tooltip
33143
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE_react__.Fragment, {
33144
+ children: [
33145
+ isActive ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
33146
+ "aria-hidden": "true",
33147
+ className: "pointer-events-none absolute inset-y-0 z-0 box-border",
33148
+ "data-testid": "signal-annotation-highlight",
33149
+ style: {
33150
+ ...positionStyle,
33151
+ backgroundColor: `color-mix(in srgb, ${color} 14%, transparent)`,
33152
+ borderLeft: `1px solid ${color}`,
33153
+ borderRight: `1px solid ${color}`
33154
+ }
33155
+ }) : null,
33156
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
33157
+ className: "pointer-events-none absolute top-0 flex h-2 min-w-px items-center justify-center overflow-hidden text-ellipsis whitespace-nowrap text-center text-xs text-foreground",
33158
+ "data-signal-active": isActive ? 'true' : 'false',
33159
+ "data-signal-key": key,
33160
+ "data-signal-source": resolveSignalSource(item),
33161
+ "data-testid": "signal-annotation",
33162
+ style: {
33163
+ ...positionStyle,
33164
+ backgroundColor: color,
33165
+ zIndex: isActive ? 2 : 1
33166
+ },
33167
+ title: tooltip
33168
+ })
33169
+ ]
32196
33170
  }, `segment-${segmentIndex}-signal-${key}`);
32197
33171
  })
32198
33172
  }));
32199
- const SignalSegments = SignalSegments_SignalSegments;
33173
+ const presenters_SignalSegments = SignalSegments;
32200
33174
  function useSignalDataManager() {
32201
33175
  const { state, dispatch } = useStore_useStore();
32202
33176
  const globalIDRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(state.globalID);
@@ -32213,11 +33187,11 @@ function useSignalDataManager() {
32213
33187
  if (!state.globalID) return;
32214
33188
  const pendingStationData = pendingDataRef.current.station;
32215
33189
  const pendingSimpleSignalData = pendingDataRef.current.simple;
32216
- if (pendingStationData?.length) {
33190
+ if (void 0 !== pendingStationData) {
32217
33191
  STATION_DATA(state.globalID, pendingStationData);
32218
33192
  pendingDataRef.current.station = void 0;
32219
33193
  }
32220
- if (pendingSimpleSignalData?.length) {
33194
+ if (void 0 !== pendingSimpleSignalData) {
32221
33195
  dispatch({
32222
33196
  payload: {
32223
33197
  signal: {
@@ -32234,7 +33208,7 @@ function useSignalDataManager() {
32234
33208
  ]);
32235
33209
  const updateSignalData = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((params)=>{
32236
33210
  const { type, data } = params;
32237
- if (!data || !Array.isArray(data) || 0 === data.length) return;
33211
+ if (!Array.isArray(data)) return;
32238
33212
  if ('station' === type) {
32239
33213
  if (!globalIDRef.current) {
32240
33214
  pendingDataRef.current.station = data;
@@ -32310,7 +33284,7 @@ const Signal = ({ id, show = true, display = true })=>{
32310
33284
  children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
32311
33285
  className: "absolute right-0 top-0 flex h-full w-full",
32312
33286
  style: zoomOffStyle ?? void 0,
32313
- children: segmentData.map(({ segmentIndex, signalPositions, style })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(SignalSegments, {
33287
+ children: segmentData.map(({ segmentIndex, signalPositions, style })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(presenters_SignalSegments, {
32314
33288
  style: style,
32315
33289
  signalPositions: signalPositions,
32316
33290
  activeSignalKey: currentPosition.segmentIndex === segmentIndex ? activeSignalKey : void 0,