@mastra/playground-ui 40.0.0-alpha.3 → 40.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/components/CodeBlock.cjs.js +1 -1
  3. package/dist/components/CodeBlock.es.js +1 -1
  4. package/dist/components/MessageScroller.cjs.js +538 -0
  5. package/dist/components/MessageScroller.cjs.js.map +1 -0
  6. package/dist/components/MessageScroller.d.ts +2 -0
  7. package/dist/components/MessageScroller.es.js +505 -0
  8. package/dist/components/MessageScroller.es.js.map +1 -0
  9. package/dist/components/Tabs.cjs.js +1 -1
  10. package/dist/components/Tabs.es.js +1 -1
  11. package/dist/components/ThreadRail.cjs.js +432 -0
  12. package/dist/components/ThreadRail.cjs.js.map +1 -0
  13. package/dist/components/ThreadRail.d.ts +2 -0
  14. package/dist/components/ThreadRail.es.js +407 -0
  15. package/dist/components/ThreadRail.es.js.map +1 -0
  16. package/dist/components/Tree.cjs.js +2 -2
  17. package/dist/components/Tree.cjs.js.map +1 -1
  18. package/dist/components/Tree.es.js +1 -1
  19. package/dist/components/Tree.es.js.map +1 -1
  20. package/dist/domains/metrics/components/latency-card-view.cjs.js +64 -42
  21. package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
  22. package/dist/domains/metrics/components/latency-card-view.es.js +65 -43
  23. package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
  24. package/dist/domains/metrics/components/memory-card-view.cjs.js +1 -1
  25. package/dist/domains/metrics/components/memory-card-view.es.js +1 -1
  26. package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
  27. package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
  28. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +1 -1
  29. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +1 -1
  30. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +1 -1
  31. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +1 -1
  32. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +1 -1
  33. package/dist/domains/metrics/components/traces-volume-card-view.es.js +1 -1
  34. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  35. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  36. package/dist/ee/signals/components/signal-details-page.cjs.js +1 -1
  37. package/dist/ee/signals/components/signal-details-page.es.js +1 -1
  38. package/dist/hooks/use-isomorphic-layout-effect.cjs.js +29 -0
  39. package/dist/hooks/use-isomorphic-layout-effect.cjs.js.map +1 -0
  40. package/dist/hooks/use-isomorphic-layout-effect.d.ts +2 -0
  41. package/dist/hooks/use-isomorphic-layout-effect.es.js +6 -0
  42. package/dist/hooks/use-isomorphic-layout-effect.es.js.map +1 -0
  43. package/dist/hooks/use-measured-auto-height.cjs.js +75 -0
  44. package/dist/hooks/use-measured-auto-height.cjs.js.map +1 -0
  45. package/dist/hooks/use-measured-auto-height.d.ts +2 -0
  46. package/dist/hooks/use-measured-auto-height.es.js +52 -0
  47. package/dist/hooks/use-measured-auto-height.es.js.map +1 -0
  48. package/dist/message-scroller-hooks-CdsHnth6.js +62 -0
  49. package/dist/message-scroller-hooks-CdsHnth6.js.map +1 -0
  50. package/dist/message-scroller-hooks-DdXqrmC2.cjs +98 -0
  51. package/dist/message-scroller-hooks-DdXqrmC2.cjs.map +1 -0
  52. package/dist/src/ds/components/MessageScroller/index.d.ts +2 -0
  53. package/dist/src/ds/components/MessageScroller/message-scroller-context.d.ts +38 -0
  54. package/dist/src/ds/components/MessageScroller/message-scroller-hooks.d.ts +26 -0
  55. package/dist/src/ds/components/MessageScroller/message-scroller.d.ts +44 -0
  56. package/dist/src/ds/components/Tabs/tabs-tab.d.ts +2 -1
  57. package/dist/src/ds/components/ThreadRail/index.d.ts +2 -0
  58. package/dist/src/ds/components/ThreadRail/thread-rail-turns.d.ts +11 -0
  59. package/dist/src/ds/components/ThreadRail/thread-rail.d.ts +12 -0
  60. package/dist/src/hooks/use-isomorphic-layout-effect.d.ts +2 -0
  61. package/dist/src/hooks/use-measured-auto-height.d.ts +8 -0
  62. package/dist/style.css +249 -5
  63. package/dist/{tabs-tab-CaZnZdY8.js → tabs-tab-1KGOybMG.js} +27 -17
  64. package/dist/tabs-tab-1KGOybMG.js.map +1 -0
  65. package/dist/{tabs-tab-BeUPTvaP.cjs → tabs-tab-DkeS2Iv0.cjs} +27 -17
  66. package/dist/tabs-tab-DkeS2Iv0.cjs.map +1 -0
  67. package/package.json +7 -7
  68. package/dist/tabs-tab-BeUPTvaP.cjs.map +0 -1
  69. package/dist/tabs-tab-CaZnZdY8.js.map +0 -1
package/dist/style.css CHANGED
@@ -708,6 +708,10 @@
708
708
  inset-block: var(--spacing-0_5);
709
709
  }
710
710
 
711
+ .inset-s-1\/2 {
712
+ inset-inline-start: 50%;
713
+ }
714
+
711
715
  .top-0 {
712
716
  top: var(--spacing-0);
713
717
  }
@@ -812,6 +816,10 @@
812
816
  left: 50%;
813
817
  }
814
818
 
819
+ .left-full {
820
+ left: 100%;
821
+ }
822
+
815
823
  .isolate {
816
824
  isolation: isolate;
817
825
  }
@@ -828,6 +836,10 @@
828
836
  z-index: 20;
829
837
  }
830
838
 
839
+ .z-30 {
840
+ z-index: 30;
841
+ }
842
+
831
843
  .z-50 {
832
844
  z-index: 50;
833
845
  }
@@ -868,6 +880,14 @@
868
880
  grid-column: 1 / -1;
869
881
  }
870
882
 
883
+ .col-start-1 {
884
+ grid-column-start: 1;
885
+ }
886
+
887
+ .row-start-1 {
888
+ grid-row-start: 1;
889
+ }
890
+
871
891
  .container {
872
892
  width: 100%;
873
893
  }
@@ -1179,6 +1199,13 @@
1179
1199
  overflow: hidden;
1180
1200
  }
1181
1201
 
1202
+ .line-clamp-3 {
1203
+ -webkit-line-clamp: 3;
1204
+ -webkit-box-orient: vertical;
1205
+ display: -webkit-box;
1206
+ overflow: hidden;
1207
+ }
1208
+
1182
1209
  .block {
1183
1210
  display: block;
1184
1211
  }
@@ -1274,6 +1301,11 @@
1274
1301
  height: var(--spacing-10);
1275
1302
  }
1276
1303
 
1304
+ .size-full {
1305
+ width: 100%;
1306
+ height: 100%;
1307
+ }
1308
+
1277
1309
  .h-0\.5 {
1278
1310
  height: var(--spacing-0_5);
1279
1311
  }
@@ -1522,6 +1554,10 @@
1522
1554
  height: var(--height-header-default);
1523
1555
  }
1524
1556
 
1557
+ .h-max {
1558
+ height: max-content;
1559
+ }
1560
+
1525
1561
  .h-px {
1526
1562
  height: 1px;
1527
1563
  height: var(--spacing-px);
@@ -2068,6 +2104,10 @@
2068
2104
  max-width: var(--spacing-24);
2069
2105
  }
2070
2106
 
2107
+ .max-w-44 {
2108
+ max-width: var(--spacing-44);
2109
+ }
2110
+
2071
2111
  .max-w-60 {
2072
2112
  max-width: var(--spacing-60);
2073
2113
  }
@@ -2272,6 +2312,10 @@
2272
2312
  transform-origin: var(--transform-origin);
2273
2313
  }
2274
2314
 
2315
+ .origin-left {
2316
+ transform-origin: 0;
2317
+ }
2318
+
2275
2319
  .-translate-x-1 {
2276
2320
  --tw-translate-x: calc(var(--spacing-1) * -1);
2277
2321
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -2334,6 +2378,13 @@
2334
2378
  scale: var(--tw-scale-x) var(--tw-scale-y);
2335
2379
  }
2336
2380
 
2381
+ .scale-100 {
2382
+ --tw-scale-x: 100%;
2383
+ --tw-scale-y: 100%;
2384
+ --tw-scale-z: 100%;
2385
+ scale: var(--tw-scale-x) var(--tw-scale-y);
2386
+ }
2387
+
2337
2388
  .scale-110 {
2338
2389
  --tw-scale-x: 110%;
2339
2390
  --tw-scale-y: 110%;
@@ -3549,11 +3600,17 @@
3549
3600
  background-color: var(--color-neutral2);
3550
3601
  }
3551
3602
 
3552
- .bg-neutral3 {
3603
+ .bg-neutral3, .bg-neutral3\/60 {
3553
3604
  background-color: var(--color-neutral3);
3554
3605
  }
3555
3606
 
3556
- .bg-neutral4\/30 {
3607
+ @supports (color: color-mix(in lab, red, red)) {
3608
+ .bg-neutral3\/60 {
3609
+ background-color: color-mix(in oklab, var(--color-neutral3) 60%, transparent);
3610
+ }
3611
+ }
3612
+
3613
+ .bg-neutral4, .bg-neutral4\/30 {
3557
3614
  background-color: var(--color-neutral4);
3558
3615
  }
3559
3616
 
@@ -3563,6 +3620,10 @@
3563
3620
  }
3564
3621
  }
3565
3622
 
3623
+ .bg-neutral5 {
3624
+ background-color: var(--color-neutral5);
3625
+ }
3626
+
3566
3627
  .bg-neutral6, .bg-neutral6\/5 {
3567
3628
  background-color: var(--color-neutral6);
3568
3629
  }
@@ -4034,6 +4095,10 @@
4034
4095
  padding: var(--spacing-3);
4035
4096
  }
4036
4097
 
4098
+ .p-3\.5 {
4099
+ padding: var(--spacing-3_5);
4100
+ }
4101
+
4037
4102
  .p-4 {
4038
4103
  padding: var(--spacing-4);
4039
4104
  }
@@ -4215,6 +4280,10 @@
4215
4280
  padding-top: var(--spacing-2);
4216
4281
  }
4217
4282
 
4283
+ .pt-2\.5 {
4284
+ padding-top: var(--spacing-2_5);
4285
+ }
4286
+
4218
4287
  .pt-3 {
4219
4288
  padding-top: var(--spacing-3);
4220
4289
  }
@@ -5084,6 +5153,16 @@
5084
5153
  filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
5085
5154
  }
5086
5155
 
5156
+ .blur-none {
5157
+ --tw-blur: ;
5158
+ filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
5159
+ }
5160
+
5161
+ .blur-xs {
5162
+ --tw-blur: blur(var(--blur-xs));
5163
+ filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
5164
+ }
5165
+
5087
5166
  .drop-shadow {
5088
5167
  --tw-drop-shadow-size: drop-shadow(0 1px 2px var(--tw-drop-shadow-color, #0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color, #0000000f));
5089
5168
  --tw-drop-shadow: drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);
@@ -5148,12 +5227,24 @@
5148
5227
  transition-duration: var(--tw-duration, var(--default-transition-duration));
5149
5228
  }
5150
5229
 
5230
+ .transition-\[height\,translate\,opacity\] {
5231
+ transition-property: height, translate, opacity;
5232
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5233
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5234
+ }
5235
+
5151
5236
  .transition-\[height\] {
5152
5237
  transition-property: height;
5153
5238
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5154
5239
  transition-duration: var(--tw-duration, var(--default-transition-duration));
5155
5240
  }
5156
5241
 
5242
+ .transition-\[opacity\,filter\,scale\] {
5243
+ transition-property: opacity, filter, scale;
5244
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5245
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5246
+ }
5247
+
5157
5248
  .transition-\[opacity\,scale\] {
5158
5249
  transition-property: opacity, scale;
5159
5250
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -5190,6 +5281,18 @@
5190
5281
  transition-duration: var(--tw-duration, var(--default-transition-duration));
5191
5282
  }
5192
5283
 
5284
+ .transition-\[translate\,scale\,opacity\] {
5285
+ transition-property: translate, scale, opacity;
5286
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5287
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5288
+ }
5289
+
5290
+ .transition-\[width\,background-color\] {
5291
+ transition-property: width, background-color;
5292
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5293
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5294
+ }
5295
+
5193
5296
  .transition-\[width\] {
5194
5297
  transition-property: width;
5195
5298
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -5250,6 +5353,11 @@
5250
5353
  transition-duration: .3s;
5251
5354
  }
5252
5355
 
5356
+ .duration-360 {
5357
+ --tw-duration: .36s;
5358
+ transition-duration: .36s;
5359
+ }
5360
+
5253
5361
  .duration-1000, .duration-\[1s\] {
5254
5362
  --tw-duration: 1s;
5255
5363
  transition-duration: 1s;
@@ -5275,6 +5383,14 @@
5275
5383
  transition-timing-function: var(--ease-out-custom);
5276
5384
  }
5277
5385
 
5386
+ .will-change-\[height\,translate\,opacity\] {
5387
+ will-change: height,translate,opacity;
5388
+ }
5389
+
5390
+ .will-change-\[opacity\,filter\,scale\] {
5391
+ will-change: opacity,filter,scale;
5392
+ }
5393
+
5278
5394
  .will-change-transform {
5279
5395
  will-change: transform;
5280
5396
  }
@@ -5306,6 +5422,14 @@
5306
5422
  --studio-frame-radius: 1.5rem;
5307
5423
  }
5308
5424
 
5425
+ .\[contain-intrinsic-size\:auto_10rem\] {
5426
+ contain-intrinsic-size: auto 10rem;
5427
+ }
5428
+
5429
+ .\[content-visibility\:auto\] {
5430
+ content-visibility: auto;
5431
+ }
5432
+
5309
5433
  .\[scrollbar-width\:none\] {
5310
5434
  scrollbar-width: none;
5311
5435
  }
@@ -5679,6 +5803,11 @@
5679
5803
  inset-inline: var(--spacing-0);
5680
5804
  }
5681
5805
 
5806
+ .before\:-inset-y-1:before {
5807
+ content: var(--tw-content);
5808
+ inset-block: calc(var(--spacing-1) * -1);
5809
+ }
5810
+
5682
5811
  .before\:inset-y-1:before {
5683
5812
  content: var(--tw-content);
5684
5813
  inset-block: var(--spacing-1);
@@ -5790,7 +5919,7 @@
5790
5919
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
5791
5920
  }
5792
5921
 
5793
- .before\:content-\[\"\"\]:before {
5922
+ .before\:content-\[\"\"\]:before, .before\:content-\[\'\'\]:before {
5794
5923
  --tw-content: "";
5795
5924
  content: var(--tw-content);
5796
5925
  }
@@ -6390,10 +6519,16 @@
6390
6519
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
6391
6520
  }
6392
6521
 
6393
- .focus-visible\:ring-accent1:focus-visible {
6522
+ .focus-visible\:ring-accent1:focus-visible, .focus-visible\:ring-accent1\/40:focus-visible {
6394
6523
  --tw-ring-color: var(--color-accent1);
6395
6524
  }
6396
6525
 
6526
+ @supports (color: color-mix(in lab, red, red)) {
6527
+ .focus-visible\:ring-accent1\/40:focus-visible {
6528
+ --tw-ring-color: color-mix(in oklab, var(--color-accent1) 40%, transparent);
6529
+ }
6530
+ }
6531
+
6397
6532
  .focus-visible\:outline-hidden:focus-visible {
6398
6533
  --tw-outline-style: none;
6399
6534
  outline-style: none;
@@ -6531,6 +6666,12 @@
6531
6666
  opacity: .5;
6532
6667
  }
6533
6668
 
6669
+ @media (hover: hover) {
6670
+ .disabled\:hover\:text-neutral3:disabled:hover {
6671
+ color: var(--color-neutral3);
6672
+ }
6673
+ }
6674
+
6534
6675
  :where([data-sidebar-gesture="active"]) .in-data-\[sidebar-gesture\=active\]\:via-neutral6\/45 {
6535
6676
  --tw-gradient-via: var(--color-neutral6);
6536
6677
  }
@@ -6633,7 +6774,25 @@
6633
6774
  padding-left: var(--spacing-1);
6634
6775
  }
6635
6776
 
6636
- .aria-checked\:bg-surface3[aria-checked="true"], .aria-pressed\:bg-surface3[aria-pressed="true"] {
6777
+ .aria-checked\:bg-surface3[aria-checked="true"] {
6778
+ background-color: var(--color-surface3);
6779
+ }
6780
+
6781
+ .aria-disabled\:cursor-not-allowed[aria-disabled="true"] {
6782
+ cursor: not-allowed;
6783
+ }
6784
+
6785
+ .aria-disabled\:opacity-50[aria-disabled="true"] {
6786
+ opacity: .5;
6787
+ }
6788
+
6789
+ @media (hover: hover) {
6790
+ .aria-disabled\:hover\:text-neutral3[aria-disabled="true"]:hover {
6791
+ color: var(--color-neutral3);
6792
+ }
6793
+ }
6794
+
6795
+ .aria-pressed\:bg-surface3[aria-pressed="true"] {
6637
6796
  background-color: var(--color-surface3);
6638
6797
  }
6639
6798
 
@@ -6727,6 +6886,52 @@
6727
6886
  color: var(--color-neutral5);
6728
6887
  }
6729
6888
 
6889
+ .data-\[active\=false\]\:pointer-events-none[data-active="false"] {
6890
+ pointer-events: none;
6891
+ }
6892
+
6893
+ .data-\[active\=false\]\:scale-95[data-active="false"] {
6894
+ --tw-scale-x: 95%;
6895
+ --tw-scale-y: 95%;
6896
+ --tw-scale-z: 95%;
6897
+ scale: var(--tw-scale-x) var(--tw-scale-y);
6898
+ }
6899
+
6900
+ .data-\[active\=false\]\:opacity-0[data-active="false"] {
6901
+ opacity: 0;
6902
+ }
6903
+
6904
+ .data-\[active\=false\]\:duration-400[data-active="false"] {
6905
+ --tw-duration: .4s;
6906
+ transition-duration: .4s;
6907
+ }
6908
+
6909
+ .data-\[active\=false\]\:ease-\[cubic-bezier\(0\.7\,0\,0\.84\,0\)\][data-active="false"] {
6910
+ --tw-ease: cubic-bezier(.7,0,.84,0);
6911
+ transition-timing-function: cubic-bezier(.7, 0, .84, 0);
6912
+ }
6913
+
6914
+ .data-\[active\=true\]\:translate-y-0[data-active="true"] {
6915
+ --tw-translate-y: var(--spacing-0);
6916
+ translate: var(--tw-translate-x) var(--tw-translate-y);
6917
+ }
6918
+
6919
+ .data-\[active\=true\]\:scale-100[data-active="true"] {
6920
+ --tw-scale-x: 100%;
6921
+ --tw-scale-y: 100%;
6922
+ --tw-scale-z: 100%;
6923
+ scale: var(--tw-scale-x) var(--tw-scale-y);
6924
+ }
6925
+
6926
+ .data-\[active\=true\]\:opacity-100[data-active="true"] {
6927
+ opacity: 1;
6928
+ }
6929
+
6930
+ .data-\[active\=true\]\:ease-\[cubic-bezier\(0\.23\,1\,0\.32\,1\)\][data-active="true"] {
6931
+ --tw-ease: cubic-bezier(.23,1,.32,1);
6932
+ transition-timing-function: cubic-bezier(.23, 1, .32, 1);
6933
+ }
6934
+
6730
6935
  .data-\[checked\]\:translate-x-3[data-checked] {
6731
6936
  --tw-translate-x: var(--spacing-3);
6732
6937
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -6808,6 +7013,15 @@
6808
7013
  --tw-exit-scale: .95;
6809
7014
  }
6810
7015
 
7016
+ .data-\[direction\=end\]\:bottom-4[data-direction="end"] {
7017
+ bottom: var(--spacing-4);
7018
+ }
7019
+
7020
+ .data-\[direction\=end\]\:data-\[active\=false\]\:translate-y-full[data-direction="end"][data-active="false"] {
7021
+ --tw-translate-y: 100%;
7022
+ translate: var(--tw-translate-x) var(--tw-translate-y);
7023
+ }
7024
+
6811
7025
  .data-\[direction\=left\]\:left-0[data-direction="left"] {
6812
7026
  left: var(--spacing-0);
6813
7027
  }
@@ -6816,6 +7030,15 @@
6816
7030
  right: var(--spacing-0);
6817
7031
  }
6818
7032
 
7033
+ .data-\[direction\=start\]\:top-4[data-direction="start"] {
7034
+ top: var(--spacing-4);
7035
+ }
7036
+
7037
+ .data-\[direction\=start\]\:data-\[active\=false\]\:-translate-y-full[data-direction="start"][data-active="false"] {
7038
+ --tw-translate-y: -100%;
7039
+ translate: var(--tw-translate-x) var(--tw-translate-y);
7040
+ }
7041
+
6819
7042
  .data-\[disabled\]\:pointer-events-none[data-disabled] {
6820
7043
  pointer-events: none;
6821
7044
  }
@@ -7406,6 +7629,18 @@
7406
7629
  }
7407
7630
 
7408
7631
  @media (prefers-reduced-motion: reduce) {
7632
+ .motion-reduce\:scale-100 {
7633
+ --tw-scale-x: 100%;
7634
+ --tw-scale-y: 100%;
7635
+ --tw-scale-z: 100%;
7636
+ scale: var(--tw-scale-x) var(--tw-scale-y);
7637
+ }
7638
+
7639
+ .motion-reduce\:blur-none {
7640
+ --tw-blur: ;
7641
+ filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
7642
+ }
7643
+
7409
7644
  .motion-reduce\:transition-none {
7410
7645
  transition-property: none;
7411
7646
  }
@@ -7704,6 +7939,11 @@
7704
7939
  }
7705
7940
  }
7706
7941
 
7942
+ .rtl\:translate-x-1\/2:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) {
7943
+ --tw-translate-x: calc(1 / 2 * 100%);
7944
+ translate: var(--tw-translate-x) var(--tw-translate-y);
7945
+ }
7946
+
7707
7947
  .dark\:border-transparent:is(.dark *) {
7708
7948
  border-color: #0000;
7709
7949
  }
@@ -8130,6 +8370,10 @@
8130
8370
  transition-duration: var(--tw-duration, var(--default-transition-duration));
8131
8371
  }
8132
8372
 
8373
+ .data-\[direction\=start\]\:\[\&_svg\]\:rotate-180[data-direction="start"] svg {
8374
+ rotate: 180deg;
8375
+ }
8376
+
8133
8377
  .data-\[selected\=true\]\:\[\&_svg\]\:text-neutral6[data-selected="true"] svg {
8134
8378
  color: var(--color-neutral6);
8135
8379
  }
@@ -1,23 +1,11 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
3
- import { c as cn } from './cn-BakJzhuv.js';
4
3
  import { c as cva } from './index-CSm06eOE.js';
4
+ import { c as cn } from './cn-BakJzhuv.js';
5
5
  import { X } from 'lucide-react';
6
+ import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-CjjqIvhJ.js';
6
7
  import { transitions, focusRing } from './primitives/transitions.es.js';
7
8
 
8
- const Tabs = ({ children, defaultTab, value, onValueChange, className }) => {
9
- return /* @__PURE__ */ jsx(
10
- Tabs$1.Root,
11
- {
12
- defaultValue: defaultTab,
13
- value,
14
- onValueChange: onValueChange ? (next) => onValueChange(next) : void 0,
15
- className: cn("overflow-y-auto", className),
16
- children
17
- }
18
- );
19
- };
20
-
21
9
  const tabListVariants = cva("flex items-center relative text-ui-lg", {
22
10
  variants: {
23
11
  variant: {
@@ -67,8 +55,21 @@ const TabList = ({ children, className, variant, sticky, style }) => {
67
55
  ) });
68
56
  };
69
57
 
70
- const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
71
- return /* @__PURE__ */ jsxs(
58
+ const Tabs = ({ children, defaultTab, value, onValueChange, className }) => {
59
+ return /* @__PURE__ */ jsx(
60
+ Tabs$1.Root,
61
+ {
62
+ defaultValue: defaultTab,
63
+ value,
64
+ onValueChange: onValueChange ? (next) => onValueChange(next) : void 0,
65
+ className: cn("overflow-y-auto", className),
66
+ children
67
+ }
68
+ );
69
+ };
70
+
71
+ const Tab = ({ children, value, onClick, onClose, disabled, disabledTooltip, className }) => {
72
+ const tab = /* @__PURE__ */ jsxs(
72
73
  Tabs$1.Tab,
73
74
  {
74
75
  value,
@@ -80,6 +81,8 @@ const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
80
81
  focusRing.visible,
81
82
  "hover:text-neutral4",
82
83
  "data-[active]:text-neutral5",
84
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-neutral3",
85
+ "aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:hover:text-neutral3",
83
86
  "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:text-neutral3",
84
87
  // Line variant legacy fallback — active state drawn by <Tabs.Indicator> in TabList
85
88
  "group-data-[variant=line]/tabs-list:py-2 group-data-[variant=line]/tabs-list:px-5",
@@ -113,7 +116,14 @@ const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
113
116
  ]
114
117
  }
115
118
  );
119
+ if (disabled && disabledTooltip) {
120
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [
121
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: tab }),
122
+ /* @__PURE__ */ jsx(TooltipContent, { children: disabledTooltip })
123
+ ] });
124
+ }
125
+ return tab;
116
126
  };
117
127
 
118
128
  export { Tab as T, TabList as a, Tabs as b };
119
- //# sourceMappingURL=tabs-tab-CaZnZdY8.js.map
129
+ //# sourceMappingURL=tabs-tab-1KGOybMG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs-tab-1KGOybMG.js","sources":["../src/ds/components/Tabs/tabs-list.tsx","../src/ds/components/Tabs/tabs-root.tsx","../src/ds/components/Tabs/tabs-tab.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('flex items-center relative text-ui-lg', {\n variants: {\n variant: {\n line: 'w-max min-w-full border-b border-border1',\n pill: 'w-fit gap-1 rounded-full bg-surface2 p-1',\n 'pill-ghost': 'w-fit gap-1 rounded-full p-1',\n },\n },\n defaultVariants: {\n variant: 'line',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\ntype TabListVariantValue = NonNullable<TabListVariantsProps['variant']>;\n\n/**\n * @deprecated `line` remains the omitted fallback for backward compatibility.\n * Pass `variant=\"pill\"` or `variant=\"pill-ghost\"` for new tabs.\n */\nexport type DeprecatedLineTabListVariant = Extract<TabListVariantValue, 'line'>;\n\nexport type TabListVariant = DeprecatedLineTabListVariant | Exclude<TabListVariantValue, DeprecatedLineTabListVariant>;\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n /**\n * Visual treatment for the tab list.\n *\n * Defaults to `line` only for backward compatibility. New tabs should pass\n * `variant=\"pill\"` or `variant=\"pill-ghost\"` explicitly.\n */\n variant?: TabListVariant | null;\n /**\n * Optional inline styles applied to the underlying tab list element.\n * To override the active tab indicator color, set the `--tab-indicator-color`\n * CSS variable, e.g. `style={{ '--tab-indicator-color': 'var(--accent5)' } as React.CSSProperties}`.\n */\n style?: React.CSSProperties;\n};\n\nexport const TabList = ({ children, className, variant, sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'line';\n\n return (\n <div className={cn('w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-surface2')}>\n <BaseTabs.List\n data-variant={resolvedVariant}\n className={cn('group/tabs-list', tabListVariants({ variant: resolvedVariant }), className)}\n style={style}\n >\n {children}\n {resolvedVariant === 'line' && (\n <BaseTabs.Indicator\n className={cn(\n 'absolute bottom-0 left-0 bg-[var(--tab-indicator-color,var(--neutral3))]',\n 'w-[var(--active-tab-width)] h-0.5',\n 'transition-all duration-200 ease-in-out',\n )}\n style={{ transform: 'translateX(var(--active-tab-left))' }}\n />\n )}\n {(resolvedVariant === 'pill' || resolvedVariant === 'pill-ghost') && (\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--surface4))]',\n 'w-[var(--active-tab-width)] h-[calc(100%-0.5rem)]',\n 'transition-all duration-200 ease-in-out',\n )}\n style={{ transform: 'translateY(-50%) translateX(var(--active-tab-left))' }}\n />\n )}\n </BaseTabs.List>\n </div>\n );\n};\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cn } from '@/lib/utils';\n\nexport type TabsRootProps<T extends string> = {\n children: React.ReactNode;\n defaultTab: T;\n value?: T;\n onValueChange?: (value: T) => void;\n className?: string;\n};\n\nexport const Tabs = <T extends string>({ children, defaultTab, value, onValueChange, className }: TabsRootProps<T>) => {\n return (\n <BaseTabs.Root\n defaultValue={defaultTab}\n value={value}\n onValueChange={onValueChange ? next => onValueChange(next as T) : undefined}\n className={cn('overflow-y-auto', className)}\n >\n {children}\n </BaseTabs.Root>\n );\n};\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { X } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../Tooltip/tooltip';\nimport { transitions, focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type TabProps = {\n children: React.ReactNode;\n value: string;\n onClick?: () => void;\n onClose?: () => void;\n disabled?: boolean;\n disabledTooltip?: React.ReactNode;\n className?: string;\n};\n\nexport const Tab = ({ children, value, onClick, onClose, disabled, disabledTooltip, className }: TabProps) => {\n const tab = (\n <BaseTabs.Tab\n value={value}\n disabled={disabled}\n className={cn(\n 'text-ui-md font-normal text-neutral3',\n 'whitespace-nowrap shrink-0 flex items-center justify-center gap-1.5 outline-none cursor-pointer',\n transitions.colors,\n focusRing.visible,\n 'hover:text-neutral4',\n 'data-[active]:text-neutral5',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-neutral3',\n 'aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:hover:text-neutral3',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:text-neutral3',\n // Line variant legacy fallback — active state drawn by <Tabs.Indicator> in TabList\n 'group-data-[variant=line]/tabs-list:py-2 group-data-[variant=line]/tabs-list:px-5',\n 'group-data-[variant=line]/tabs-list:border-b-2 group-data-[variant=line]/tabs-list:border-transparent',\n // Pill variant\n 'group-data-[variant=pill]/tabs-list:relative group-data-[variant=pill]/tabs-list:z-10',\n 'group-data-[variant=pill]/tabs-list:py-1 group-data-[variant=pill]/tabs-list:px-3',\n 'group-data-[variant=pill]/tabs-list:rounded-full',\n // Pill-ghost variant (pill without list background)\n 'group-data-[variant=pill-ghost]/tabs-list:relative group-data-[variant=pill-ghost]/tabs-list:z-10',\n 'group-data-[variant=pill-ghost]/tabs-list:py-1 group-data-[variant=pill-ghost]/tabs-list:px-3',\n 'group-data-[variant=pill-ghost]/tabs-list:rounded-full',\n className,\n )}\n onClick={onClick}\n >\n {children}\n {onClose && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n onClose();\n }}\n className={cn('p-0.5 hover:bg-surface4 rounded', transitions.colors, 'hover:text-neutral5')}\n aria-label=\"Close tab\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </BaseTabs.Tab>\n );\n\n if (disabled && disabledTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{tab}</TooltipTrigger>\n <TooltipContent>{disabledTooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return tab;\n};\n"],"names":["BaseTabs"],"mappings":"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"}
@@ -2,24 +2,12 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const tabs = require('@base-ui/react/tabs');
5
- const utils_cn = require('./cn-vA5sWo9W.cjs');
6
5
  const index = require('./index-C-Lt4Bx_.cjs');
6
+ const utils_cn = require('./cn-vA5sWo9W.cjs');
7
7
  const lucideReact = require('lucide-react');
8
+ const tooltip = require('./tooltip-fTKN3FCp.cjs');
8
9
  const primitives_transitions = require('./primitives/transitions.cjs.js');
9
10
 
10
- const Tabs = ({ children, defaultTab, value, onValueChange, className }) => {
11
- return /* @__PURE__ */ jsxRuntime.jsx(
12
- tabs.Tabs.Root,
13
- {
14
- defaultValue: defaultTab,
15
- value,
16
- onValueChange: onValueChange ? (next) => onValueChange(next) : void 0,
17
- className: utils_cn.cn("overflow-y-auto", className),
18
- children
19
- }
20
- );
21
- };
22
-
23
11
  const tabListVariants = index.cva("flex items-center relative text-ui-lg", {
24
12
  variants: {
25
13
  variant: {
@@ -69,8 +57,21 @@ const TabList = ({ children, className, variant, sticky, style }) => {
69
57
  ) });
70
58
  };
71
59
 
72
- const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
73
- return /* @__PURE__ */ jsxRuntime.jsxs(
60
+ const Tabs = ({ children, defaultTab, value, onValueChange, className }) => {
61
+ return /* @__PURE__ */ jsxRuntime.jsx(
62
+ tabs.Tabs.Root,
63
+ {
64
+ defaultValue: defaultTab,
65
+ value,
66
+ onValueChange: onValueChange ? (next) => onValueChange(next) : void 0,
67
+ className: utils_cn.cn("overflow-y-auto", className),
68
+ children
69
+ }
70
+ );
71
+ };
72
+
73
+ const Tab = ({ children, value, onClick, onClose, disabled, disabledTooltip, className }) => {
74
+ const tab = /* @__PURE__ */ jsxRuntime.jsxs(
74
75
  tabs.Tabs.Tab,
75
76
  {
76
77
  value,
@@ -82,6 +83,8 @@ const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
82
83
  primitives_transitions.focusRing.visible,
83
84
  "hover:text-neutral4",
84
85
  "data-[active]:text-neutral5",
86
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-neutral3",
87
+ "aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:hover:text-neutral3",
85
88
  "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:text-neutral3",
86
89
  // Line variant legacy fallback — active state drawn by <Tabs.Indicator> in TabList
87
90
  "group-data-[variant=line]/tabs-list:py-2 group-data-[variant=line]/tabs-list:px-5",
@@ -115,9 +118,16 @@ const Tab = ({ children, value, onClick, onClose, disabled, className }) => {
115
118
  ]
116
119
  }
117
120
  );
121
+ if (disabled && disabledTooltip) {
122
+ return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
123
+ /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipTrigger, { asChild: true, children: tab }),
124
+ /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { children: disabledTooltip })
125
+ ] });
126
+ }
127
+ return tab;
118
128
  };
119
129
 
120
130
  exports.Tab = Tab;
121
131
  exports.TabList = TabList;
122
132
  exports.Tabs = Tabs;
123
- //# sourceMappingURL=tabs-tab-BeUPTvaP.cjs.map
133
+ //# sourceMappingURL=tabs-tab-DkeS2Iv0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs-tab-DkeS2Iv0.cjs","sources":["../src/ds/components/Tabs/tabs-list.tsx","../src/ds/components/Tabs/tabs-root.tsx","../src/ds/components/Tabs/tabs-tab.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('flex items-center relative text-ui-lg', {\n variants: {\n variant: {\n line: 'w-max min-w-full border-b border-border1',\n pill: 'w-fit gap-1 rounded-full bg-surface2 p-1',\n 'pill-ghost': 'w-fit gap-1 rounded-full p-1',\n },\n },\n defaultVariants: {\n variant: 'line',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\ntype TabListVariantValue = NonNullable<TabListVariantsProps['variant']>;\n\n/**\n * @deprecated `line` remains the omitted fallback for backward compatibility.\n * Pass `variant=\"pill\"` or `variant=\"pill-ghost\"` for new tabs.\n */\nexport type DeprecatedLineTabListVariant = Extract<TabListVariantValue, 'line'>;\n\nexport type TabListVariant = DeprecatedLineTabListVariant | Exclude<TabListVariantValue, DeprecatedLineTabListVariant>;\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n /**\n * Visual treatment for the tab list.\n *\n * Defaults to `line` only for backward compatibility. New tabs should pass\n * `variant=\"pill\"` or `variant=\"pill-ghost\"` explicitly.\n */\n variant?: TabListVariant | null;\n /**\n * Optional inline styles applied to the underlying tab list element.\n * To override the active tab indicator color, set the `--tab-indicator-color`\n * CSS variable, e.g. `style={{ '--tab-indicator-color': 'var(--accent5)' } as React.CSSProperties}`.\n */\n style?: React.CSSProperties;\n};\n\nexport const TabList = ({ children, className, variant, sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'line';\n\n return (\n <div className={cn('w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-surface2')}>\n <BaseTabs.List\n data-variant={resolvedVariant}\n className={cn('group/tabs-list', tabListVariants({ variant: resolvedVariant }), className)}\n style={style}\n >\n {children}\n {resolvedVariant === 'line' && (\n <BaseTabs.Indicator\n className={cn(\n 'absolute bottom-0 left-0 bg-[var(--tab-indicator-color,var(--neutral3))]',\n 'w-[var(--active-tab-width)] h-0.5',\n 'transition-all duration-200 ease-in-out',\n )}\n style={{ transform: 'translateX(var(--active-tab-left))' }}\n />\n )}\n {(resolvedVariant === 'pill' || resolvedVariant === 'pill-ghost') && (\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--surface4))]',\n 'w-[var(--active-tab-width)] h-[calc(100%-0.5rem)]',\n 'transition-all duration-200 ease-in-out',\n )}\n style={{ transform: 'translateY(-50%) translateX(var(--active-tab-left))' }}\n />\n )}\n </BaseTabs.List>\n </div>\n );\n};\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cn } from '@/lib/utils';\n\nexport type TabsRootProps<T extends string> = {\n children: React.ReactNode;\n defaultTab: T;\n value?: T;\n onValueChange?: (value: T) => void;\n className?: string;\n};\n\nexport const Tabs = <T extends string>({ children, defaultTab, value, onValueChange, className }: TabsRootProps<T>) => {\n return (\n <BaseTabs.Root\n defaultValue={defaultTab}\n value={value}\n onValueChange={onValueChange ? next => onValueChange(next as T) : undefined}\n className={cn('overflow-y-auto', className)}\n >\n {children}\n </BaseTabs.Root>\n );\n};\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { X } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../Tooltip/tooltip';\nimport { transitions, focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type TabProps = {\n children: React.ReactNode;\n value: string;\n onClick?: () => void;\n onClose?: () => void;\n disabled?: boolean;\n disabledTooltip?: React.ReactNode;\n className?: string;\n};\n\nexport const Tab = ({ children, value, onClick, onClose, disabled, disabledTooltip, className }: TabProps) => {\n const tab = (\n <BaseTabs.Tab\n value={value}\n disabled={disabled}\n className={cn(\n 'text-ui-md font-normal text-neutral3',\n 'whitespace-nowrap shrink-0 flex items-center justify-center gap-1.5 outline-none cursor-pointer',\n transitions.colors,\n focusRing.visible,\n 'hover:text-neutral4',\n 'data-[active]:text-neutral5',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-neutral3',\n 'aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:hover:text-neutral3',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:text-neutral3',\n // Line variant legacy fallback — active state drawn by <Tabs.Indicator> in TabList\n 'group-data-[variant=line]/tabs-list:py-2 group-data-[variant=line]/tabs-list:px-5',\n 'group-data-[variant=line]/tabs-list:border-b-2 group-data-[variant=line]/tabs-list:border-transparent',\n // Pill variant\n 'group-data-[variant=pill]/tabs-list:relative group-data-[variant=pill]/tabs-list:z-10',\n 'group-data-[variant=pill]/tabs-list:py-1 group-data-[variant=pill]/tabs-list:px-3',\n 'group-data-[variant=pill]/tabs-list:rounded-full',\n // Pill-ghost variant (pill without list background)\n 'group-data-[variant=pill-ghost]/tabs-list:relative group-data-[variant=pill-ghost]/tabs-list:z-10',\n 'group-data-[variant=pill-ghost]/tabs-list:py-1 group-data-[variant=pill-ghost]/tabs-list:px-3',\n 'group-data-[variant=pill-ghost]/tabs-list:rounded-full',\n className,\n )}\n onClick={onClick}\n >\n {children}\n {onClose && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n onClose();\n }}\n className={cn('p-0.5 hover:bg-surface4 rounded', transitions.colors, 'hover:text-neutral5')}\n aria-label=\"Close tab\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </BaseTabs.Tab>\n );\n\n if (disabled && disabledTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{tab}</TooltipTrigger>\n <TooltipContent>{disabledTooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return tab;\n};\n"],"names":["cva","cn","jsxs","BaseTabs","jsx","transitions","focusRing","X","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}