@tangle-network/sandbox-ui 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dashboard.js CHANGED
@@ -34,7 +34,7 @@ import {
34
34
  SidebarRailNav,
35
35
  VariantList,
36
36
  useSidebar
37
- } from "./chunk-7YWFOGKQ.js";
37
+ } from "./chunk-2XCOGNZP.js";
38
38
  import {
39
39
  BillingDashboard,
40
40
  PricingPage,
@@ -769,7 +769,7 @@ function formatDate(dateStr) {
769
769
  if (Number.isNaN(d.getTime())) return dateStr;
770
770
  return d.toLocaleDateString(void 0, { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" });
771
771
  }
772
- function SnapshotList({ snapshots, onCreate, onRestore, loading = false, className }) {
772
+ function SnapshotList({ snapshots, onCreate, onRestore, onSaveAsTemplate, loading = false, className }) {
773
773
  const [showCreate, setShowCreate] = React6.useState(false);
774
774
  const [tags, setTags] = React6.useState("");
775
775
  const handleCreate = () => {
@@ -853,19 +853,31 @@ function SnapshotList({ snapshots, onCreate, onRestore, loading = false, classNa
853
853
  formatBytes(s.sizeBytes)
854
854
  ] }) }),
855
855
  /* @__PURE__ */ jsx8("td", { className: "px-4 py-3", children: s.tags?.length ? /* @__PURE__ */ jsx8("div", { className: "flex items-center gap-1 flex-wrap", children: s.tags.map((tag) => /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground border border-border", children: tag }, tag)) }) : /* @__PURE__ */ jsx8("span", { className: "text-xs text-muted-foreground", children: "-" }) }),
856
- /* @__PURE__ */ jsx8("td", { className: "px-4 py-3 text-right", children: /* @__PURE__ */ jsxs8(
857
- "button",
858
- {
859
- type: "button",
860
- onClick: () => onRestore(s.id),
861
- className: "inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-foreground hover:bg-muted/80 transition-colors border border-border",
862
- title: "Restore to new sandbox",
863
- children: [
864
- /* @__PURE__ */ jsx8(RotateCcw, { className: "h-3 w-3" }),
865
- "Restore"
866
- ]
867
- }
868
- ) })
856
+ /* @__PURE__ */ jsx8("td", { className: "px-4 py-3 text-right", children: /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-2", children: [
857
+ /* @__PURE__ */ jsxs8(
858
+ "button",
859
+ {
860
+ type: "button",
861
+ onClick: () => onRestore(s.id),
862
+ className: "inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-foreground hover:bg-muted/80 transition-colors border border-border",
863
+ title: "Restore to new sandbox",
864
+ children: [
865
+ /* @__PURE__ */ jsx8(RotateCcw, { className: "h-3 w-3" }),
866
+ "Restore"
867
+ ]
868
+ }
869
+ ),
870
+ onSaveAsTemplate && /* @__PURE__ */ jsx8(
871
+ "button",
872
+ {
873
+ type: "button",
874
+ onClick: () => onSaveAsTemplate(s.id),
875
+ className: "inline-flex items-center gap-1.5 rounded-md bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary/20 transition-colors border border-primary/20",
876
+ title: "Save as reusable template",
877
+ children: "Save as Template"
878
+ }
879
+ )
880
+ ] }) })
869
881
  ] }, s.id)) })
870
882
  ] }) }) : /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-muted/20 p-6 text-center", children: [
871
883
  /* @__PURE__ */ jsx8(Camera, { className: "mx-auto h-8 w-8 text-muted-foreground mb-2" }),
package/dist/globals.css CHANGED
@@ -720,6 +720,9 @@
720
720
  .top-0\.5 {
721
721
  top: calc(var(--spacing) * 0.5);
722
722
  }
723
+ .top-1 {
724
+ top: calc(var(--spacing) * 1);
725
+ }
723
726
  .top-1\/2 {
724
727
  top: calc(1 / 2 * 100%);
725
728
  }
@@ -735,12 +738,18 @@
735
738
  .top-\[50\%\] {
736
739
  top: 50%;
737
740
  }
741
+ .top-full {
742
+ top: 100%;
743
+ }
738
744
  .-right-1 {
739
745
  right: calc(var(--spacing) * -1);
740
746
  }
741
747
  .right-0 {
742
748
  right: calc(var(--spacing) * 0);
743
749
  }
750
+ .right-1 {
751
+ right: calc(var(--spacing) * 1);
752
+ }
744
753
  .right-2 {
745
754
  right: calc(var(--spacing) * 2);
746
755
  }
@@ -1116,8 +1125,8 @@
1116
1125
  .max-h-\[90vh\] {
1117
1126
  max-height: 90vh;
1118
1127
  }
1119
- .max-h-\[120px\] {
1120
- max-height: 120px;
1128
+ .max-h-\[160px\] {
1129
+ max-height: 160px;
1121
1130
  }
1122
1131
  .min-h-0 {
1123
1132
  min-height: calc(var(--spacing) * 0);
@@ -1125,6 +1134,9 @@
1125
1134
  .min-h-\[2px\] {
1126
1135
  min-height: 2px;
1127
1136
  }
1137
+ .min-h-\[6rem\] {
1138
+ min-height: 6rem;
1139
+ }
1128
1140
  .min-h-\[12rem\] {
1129
1141
  min-height: 12rem;
1130
1142
  }
@@ -1134,8 +1146,14 @@
1134
1146
  .min-h-\[16rem\] {
1135
1147
  min-height: 16rem;
1136
1148
  }
1137
- .min-h-\[32px\] {
1138
- min-height: 32px;
1149
+ .min-h-\[42px\] {
1150
+ min-height: 42px;
1151
+ }
1152
+ .min-h-\[72px\] {
1153
+ min-height: 72px;
1154
+ }
1155
+ .min-h-\[80px\] {
1156
+ min-height: 80px;
1139
1157
  }
1140
1158
  .min-h-\[120px\] {
1141
1159
  min-height: 120px;
@@ -1149,6 +1167,9 @@
1149
1167
  .min-h-\[240px\] {
1150
1168
  min-height: 240px;
1151
1169
  }
1170
+ .min-h-full {
1171
+ min-height: 100%;
1172
+ }
1152
1173
  .min-h-screen {
1153
1174
  min-height: 100vh;
1154
1175
  }
@@ -1359,8 +1380,8 @@
1359
1380
  .max-w-\[75\%\] {
1360
1381
  max-width: 75%;
1361
1382
  }
1362
- .max-w-\[82\%\] {
1363
- max-width: 82%;
1383
+ .max-w-\[78\%\] {
1384
+ max-width: 78%;
1364
1385
  }
1365
1386
  .max-w-\[85\%\] {
1366
1387
  max-width: 85%;
@@ -1407,6 +1428,15 @@
1407
1428
  .min-w-\[8rem\] {
1408
1429
  min-width: 8rem;
1409
1430
  }
1431
+ .min-w-\[20px\] {
1432
+ min-width: 20px;
1433
+ }
1434
+ .min-w-\[120px\] {
1435
+ min-width: 120px;
1436
+ }
1437
+ .min-w-\[160px\] {
1438
+ min-width: 160px;
1439
+ }
1410
1440
  .min-w-\[180px\] {
1411
1441
  min-width: 180px;
1412
1442
  }
@@ -1480,6 +1510,9 @@
1480
1510
  .rotate-90 {
1481
1511
  rotate: 90deg;
1482
1512
  }
1513
+ .rotate-180 {
1514
+ rotate: 180deg;
1515
+ }
1483
1516
  .-skew-x-12 {
1484
1517
  --tw-skew-x: skewX(calc(12deg * -1));
1485
1518
  transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
@@ -1532,6 +1565,9 @@
1532
1565
  .appearance-none {
1533
1566
  appearance: none;
1534
1567
  }
1568
+ .auto-rows-fr {
1569
+ grid-auto-rows: minmax(0, 1fr);
1570
+ }
1535
1571
  .grid-cols-1 {
1536
1572
  grid-template-columns: repeat(1, minmax(0, 1fr));
1537
1573
  }
@@ -1541,6 +1577,9 @@
1541
1577
  .grid-cols-3 {
1542
1578
  grid-template-columns: repeat(3, minmax(0, 1fr));
1543
1579
  }
1580
+ .grid-cols-7 {
1581
+ grid-template-columns: repeat(7, minmax(0, 1fr));
1582
+ }
1544
1583
  .grid-cols-12 {
1545
1584
  grid-template-columns: repeat(12, minmax(0, 1fr));
1546
1585
  }
@@ -1628,6 +1667,9 @@
1628
1667
  .gap-\[3px\] {
1629
1668
  gap: 3px;
1630
1669
  }
1670
+ .gap-\[5px\] {
1671
+ gap: 5px;
1672
+ }
1631
1673
  .gap-px {
1632
1674
  gap: 1px;
1633
1675
  }
@@ -1789,12 +1831,21 @@
1789
1831
  .rounded-\[16px\] {
1790
1832
  border-radius: 16px;
1791
1833
  }
1834
+ .rounded-\[18px\] {
1835
+ border-radius: 18px;
1836
+ }
1792
1837
  .rounded-\[20px\] {
1793
1838
  border-radius: 20px;
1794
1839
  }
1840
+ .rounded-\[22px\] {
1841
+ border-radius: 22px;
1842
+ }
1795
1843
  .rounded-\[24px\] {
1796
1844
  border-radius: 24px;
1797
1845
  }
1846
+ .rounded-\[26px\] {
1847
+ border-radius: 26px;
1848
+ }
1798
1849
  .rounded-\[28px\] {
1799
1850
  border-radius: 28px;
1800
1851
  }
@@ -1804,9 +1855,6 @@
1804
1855
  .rounded-\[calc\(var\(--radius-xl\)\+2px\)\] {
1805
1856
  border-radius: calc(var(--radius-xl) + 2px);
1806
1857
  }
1807
- .rounded-\[var\(--chat-send-radius\,var\(--radius-lg\)\)\] {
1808
- border-radius: var(--chat-send-radius,var(--radius-lg));
1809
- }
1810
1858
  .rounded-\[var\(--radius-full\)\] {
1811
1859
  border-radius: var(--radius-full);
1812
1860
  }
@@ -1860,8 +1908,8 @@
1860
1908
  border-bottom-right-radius: var(--radius-sm);
1861
1909
  border-bottom-left-radius: var(--radius-sm);
1862
1910
  }
1863
- .rounded-br-\[var\(--radius-sm\)\] {
1864
- border-bottom-right-radius: var(--radius-sm);
1911
+ .rounded-br-\[12px\] {
1912
+ border-bottom-right-radius: 12px;
1865
1913
  }
1866
1914
  .rounded-bl-lg {
1867
1915
  border-bottom-left-radius: var(--radius-lg);
@@ -1886,6 +1934,10 @@
1886
1934
  border-top-style: var(--tw-border-style);
1887
1935
  border-top-width: 0px;
1888
1936
  }
1937
+ .border-t-2 {
1938
+ border-top-style: var(--tw-border-style);
1939
+ border-top-width: 2px;
1940
+ }
1889
1941
  .border-r {
1890
1942
  border-right-style: var(--tw-border-style);
1891
1943
  border-right-width: 1px;
@@ -1920,6 +1972,9 @@
1920
1972
  .border-\[var\(--border-accent\,transparent\)\] {
1921
1973
  border-color: var(--border-accent,transparent);
1922
1974
  }
1975
+ .border-\[var\(--border-subtle\)\] {
1976
+ border-color: var(--border-subtle);
1977
+ }
1923
1978
  .border-\[var\(--border-subtle\,hsl\(var\(--border\)\)\)\] {
1924
1979
  border-color: var(--border-subtle,hsl(var(--border)));
1925
1980
  }
@@ -2061,6 +2116,9 @@
2061
2116
  border-color: color-mix(in oklab, var(--color-yellow-500) 30%, transparent);
2062
2117
  }
2063
2118
  }
2119
+ .border-t-blue-500 {
2120
+ border-top-color: var(--color-blue-500);
2121
+ }
2064
2122
  .border-t-transparent {
2065
2123
  border-top-color: transparent;
2066
2124
  }
@@ -2082,12 +2140,21 @@
2082
2140
  .bg-\[\#ffbd2e\]\/80 {
2083
2141
  background-color: color-mix(in oklab, #ffbd2e 80%, transparent);
2084
2142
  }
2143
+ .bg-\[color\:color-mix\(in_srgb\,var\(--bg-card\)_94\%\,transparent\)\] {
2144
+ background-color: var(--bg-card);
2145
+ @supports (color: color-mix(in lab, red, red)) {
2146
+ background-color: color-mix(in srgb,var(--bg-card) 94%,transparent);
2147
+ }
2148
+ }
2085
2149
  .bg-\[var\(--accent-surface-soft\)\] {
2086
2150
  background-color: var(--accent-surface-soft);
2087
2151
  }
2088
2152
  .bg-\[var\(--accent-surface-strong\)\] {
2089
2153
  background-color: var(--accent-surface-strong);
2090
2154
  }
2155
+ .bg-\[var\(--bg-card\)\] {
2156
+ background-color: var(--bg-card);
2157
+ }
2091
2158
  .bg-\[var\(--bg-root\)\] {
2092
2159
  background-color: var(--bg-root);
2093
2160
  }
@@ -2410,6 +2477,9 @@
2410
2477
  .px-0 {
2411
2478
  padding-inline: calc(var(--spacing) * 0);
2412
2479
  }
2480
+ .px-0\.5 {
2481
+ padding-inline: calc(var(--spacing) * 0.5);
2482
+ }
2413
2483
  .px-1 {
2414
2484
  padding-inline: calc(var(--spacing) * 1);
2415
2485
  }
@@ -2425,6 +2495,9 @@
2425
2495
  .px-3 {
2426
2496
  padding-inline: calc(var(--spacing) * 3);
2427
2497
  }
2498
+ .px-3\.5 {
2499
+ padding-inline: calc(var(--spacing) * 3.5);
2500
+ }
2428
2501
  .px-4 {
2429
2502
  padding-inline: calc(var(--spacing) * 4);
2430
2503
  }
@@ -2479,12 +2552,18 @@
2479
2552
  .py-5 {
2480
2553
  padding-block: calc(var(--spacing) * 5);
2481
2554
  }
2555
+ .py-8 {
2556
+ padding-block: calc(var(--spacing) * 8);
2557
+ }
2482
2558
  .py-12 {
2483
2559
  padding-block: calc(var(--spacing) * 12);
2484
2560
  }
2485
2561
  .py-16 {
2486
2562
  padding-block: calc(var(--spacing) * 16);
2487
2563
  }
2564
+ .py-20 {
2565
+ padding-block: calc(var(--spacing) * 20);
2566
+ }
2488
2567
  .py-\[2px\] {
2489
2568
  padding-block: 2px;
2490
2569
  }
@@ -2668,9 +2747,6 @@
2668
2747
  .text-\[13px\] {
2669
2748
  font-size: 13px;
2670
2749
  }
2671
- .text-\[14px\] {
2672
- font-size: 14px;
2673
- }
2674
2750
  .text-\[15px\] {
2675
2751
  font-size: 15px;
2676
2752
  }
@@ -2684,6 +2760,10 @@
2684
2760
  --tw-leading: calc(var(--spacing) * 6);
2685
2761
  line-height: calc(var(--spacing) * 6);
2686
2762
  }
2763
+ .leading-6\.5 {
2764
+ --tw-leading: calc(var(--spacing) * 6.5);
2765
+ line-height: calc(var(--spacing) * 6.5);
2766
+ }
2687
2767
  .leading-7 {
2688
2768
  --tw-leading: calc(var(--spacing) * 7);
2689
2769
  line-height: calc(var(--spacing) * 7);
@@ -2857,8 +2937,8 @@
2857
2937
  .text-\[var\(--chat-label-size\,11px\)\] {
2858
2938
  color: var(--chat-label-size,11px);
2859
2939
  }
2860
- .text-\[var\(--chat-send-color\,var\(--accent-text\)\)\] {
2861
- color: var(--chat-send-color,var(--accent-text));
2940
+ .text-\[var\(--chat-send-color\,white\)\] {
2941
+ color: var(--chat-send-color,white);
2862
2942
  }
2863
2943
  .text-\[var\(--code-error\)\] {
2864
2944
  color: var(--code-error);
@@ -2929,6 +3009,9 @@
2929
3009
  .text-\[var\(--text-muted\,hsl\(var\(--muted-foreground\)\)\)\] {
2930
3010
  color: var(--text-muted,hsl(var(--muted-foreground)));
2931
3011
  }
3012
+ .text-\[var\(--text-primary\)\] {
3013
+ color: var(--text-primary);
3014
+ }
2932
3015
  .text-\[var\(--text-primary\,hsl\(var\(--foreground\)\)\)\] {
2933
3016
  color: var(--text-primary,hsl(var(--foreground)));
2934
3017
  }
@@ -2971,6 +3054,12 @@
2971
3054
  .text-white {
2972
3055
  color: var(--color-white);
2973
3056
  }
3057
+ .text-white\/60 {
3058
+ color: color-mix(in srgb, #fff 60%, transparent);
3059
+ @supports (color: color-mix(in lab, red, red)) {
3060
+ color: color-mix(in oklab, var(--color-white) 60%, transparent);
3061
+ }
3062
+ }
2974
3063
  .text-yellow-400 {
2975
3064
  color: var(--color-yellow-400);
2976
3065
  }
@@ -3035,16 +3124,28 @@
3035
3124
  --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
3036
3125
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3037
3126
  }
3127
+ .shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.04\)\] {
3128
+ --tw-shadow: 0 1px 2px var(--tw-shadow-color, rgba(15,23,42,0.04));
3129
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3130
+ }
3131
+ .shadow-\[0_6px_16px_rgba\(15\,23\,42\,0\.08\)\] {
3132
+ --tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(15,23,42,0.08));
3133
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3134
+ }
3135
+ .shadow-\[0_8px_20px_rgba\(15\,23\,42\,0\.12\)\] {
3136
+ --tw-shadow: 0 8px 20px var(--tw-shadow-color, rgba(15,23,42,0.12));
3137
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3138
+ }
3038
3139
  .shadow-\[inset_2px_0_0_hsl\(var\(--primary\)\)\] {
3039
3140
  --tw-shadow: inset 2px 0 0 var(--tw-shadow-color, hsl(var(--primary)));
3040
3141
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3041
3142
  }
3042
- .shadow-\[var\(--chat-input-shadow\,var\(--shadow-card\)\)\] {
3043
- --tw-shadow: var(--chat-input-shadow,var(--shadow-card));
3143
+ .shadow-\[var\(--chat-input-shadow\,0_1px_2px_rgba\(15\,23\,42\,0\.05\)\)\] {
3144
+ --tw-shadow: var(--chat-input-shadow,0 1px 2px rgba(15,23,42,0.05));
3044
3145
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3045
3146
  }
3046
- .shadow-\[var\(--chat-send-shadow\,none\)\] {
3047
- --tw-shadow: var(--chat-send-shadow,none);
3147
+ .shadow-\[var\(--chat-send-shadow\,0_6px_16px_rgba\(15\,23\,42\,0\.12\)\)\] {
3148
+ --tw-shadow: var(--chat-send-shadow,0 6px 16px rgba(15,23,42,0.12));
3048
3149
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3049
3150
  }
3050
3151
  .shadow-\[var\(--shadow-accent\)\] {
@@ -3075,6 +3176,10 @@
3075
3176
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3076
3177
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3077
3178
  }
3179
+ .shadow-none {
3180
+ --tw-shadow: 0 0 #0000;
3181
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3182
+ }
3078
3183
  .shadow-sm {
3079
3184
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3080
3185
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3222,15 +3327,18 @@
3222
3327
  -webkit-user-select: none;
3223
3328
  user-select: none;
3224
3329
  }
3225
- .\[background\:var\(--chat-input-bg\,var\(--depth-2\)\)\] {
3226
- background: var(--chat-input-bg,var(--depth-2));
3330
+ .\[background\:var\(--chat-input-bg\,var\(--bg-card\)\)\] {
3331
+ background: var(--chat-input-bg,var(--bg-card));
3227
3332
  }
3228
- .\[background\:var\(--chat-send-bg\,var\(--accent-surface-soft\)\)\] {
3229
- background: var(--chat-send-bg,var(--accent-surface-soft));
3333
+ .\[background\:var\(--chat-send-bg\,var\(--brand-primary\)\)\] {
3334
+ background: var(--chat-send-bg,var(--brand-primary));
3230
3335
  }
3231
3336
  .\[scrollbar-gutter\:stable\] {
3232
3337
  scrollbar-gutter: stable;
3233
3338
  }
3339
+ .ring-inset {
3340
+ --tw-ring-inset: inset;
3341
+ }
3234
3342
  .group-open\:rotate-180 {
3235
3343
  &:is(:where(.group):is([open], :popover-open, :open) *) {
3236
3344
  rotate: 180deg;
@@ -3400,6 +3508,12 @@
3400
3508
  }
3401
3509
  }
3402
3510
  }
3511
+ .last\:border-0 {
3512
+ &:last-child {
3513
+ border-style: var(--tw-border-style);
3514
+ border-width: 0px;
3515
+ }
3516
+ }
3403
3517
  .focus-within\:border-\[var\(--border-accent-hover\)\] {
3404
3518
  &:focus-within {
3405
3519
  border-color: var(--border-accent-hover);
@@ -3410,9 +3524,9 @@
3410
3524
  border-color: var(--chat-input-focus-border,var(--border-accent));
3411
3525
  }
3412
3526
  }
3413
- .focus-within\:shadow-\[var\(--chat-input-focus-shadow\,var\(--shadow-card\)\)\] {
3527
+ .focus-within\:shadow-\[var\(--chat-input-focus-shadow\,0_10px_30px_rgba\(15\,23\,42\,0\.08\)\)\] {
3414
3528
  &:focus-within {
3415
- --tw-shadow: var(--chat-input-focus-shadow,var(--shadow-card));
3529
+ --tw-shadow: var(--chat-input-focus-shadow,0 10px 30px rgba(15,23,42,0.08));
3416
3530
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3417
3531
  }
3418
3532
  }
@@ -3453,6 +3567,16 @@
3453
3567
  }
3454
3568
  }
3455
3569
  }
3570
+ .hover\:border-emerald-500\/30 {
3571
+ &:hover {
3572
+ @media (hover: hover) {
3573
+ border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 30%, transparent);
3574
+ @supports (color: color-mix(in lab, red, red)) {
3575
+ border-color: color-mix(in oklab, var(--color-emerald-500) 30%, transparent);
3576
+ }
3577
+ }
3578
+ }
3579
+ }
3456
3580
  .hover\:border-red-500\/30 {
3457
3581
  &:hover {
3458
3582
  @media (hover: hover) {
@@ -3532,6 +3656,16 @@
3532
3656
  }
3533
3657
  }
3534
3658
  }
3659
+ .hover\:bg-emerald-500\/10 {
3660
+ &:hover {
3661
+ @media (hover: hover) {
3662
+ background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);
3663
+ @supports (color: color-mix(in lab, red, red)) {
3664
+ background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);
3665
+ }
3666
+ }
3667
+ }
3668
+ }
3535
3669
  .hover\:bg-green-600\/30 {
3536
3670
  &:hover {
3537
3671
  @media (hover: hover) {
@@ -3653,10 +3787,10 @@
3653
3787
  }
3654
3788
  }
3655
3789
  }
3656
- .hover\:\[background\:var\(--chat-send-hover-bg\,var\(--accent-surface-strong\)\)\] {
3790
+ .hover\:\[background\:var\(--chat-send-hover-bg\,var\(--brand-strong\)\)\] {
3657
3791
  &:hover {
3658
3792
  @media (hover: hover) {
3659
- background: var(--chat-send-hover-bg,var(--accent-surface-strong));
3793
+ background: var(--chat-send-hover-bg,var(--brand-strong));
3660
3794
  }
3661
3795
  }
3662
3796
  }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { B as Button, a as ButtonProps, b as buttonVariants } from './button-CMQuQEW_.js';
2
2
  export { Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropZone, DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateProps, Input, InputProps, Label, Logo, LogoProps, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SidebarDropZone, SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, StatCard, StatCardProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TangleKnot, TerminalDisplay, TerminalCursor as TerminalDisplayCursor, TerminalInput as TerminalDisplayInput, TerminalLine as TerminalDisplayLine, Textarea, TextareaProps, Toast, ToastContainer, ToastProvider, UploadFile, UploadProgress, UploadProgressProps, badgeVariants, useToast } from './primitives.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- export { AgentWorkbench, AuditCheck, AuditResults, AuditResultsProps, BannerType, ContextBadge, DirectoryPane, DirectoryPaneProps, FormAudit, RuntimePane, RuntimePaneProps, SandboxWorkbench, SandboxWorkbenchArtifact, SandboxWorkbenchCustomArtifact, SandboxWorkbenchFileArtifact, SandboxWorkbenchLayoutOptions, SandboxWorkbenchMarkdownArtifact, SandboxWorkbenchOpenUIArtifact, SandboxWorkbenchProps, SandboxWorkbenchSessionProps, SessionActivityMonitor, SessionActivityMonitorProps, SessionSidebar, SessionSidebarBadge, SessionSidebarFilter, SessionSidebarItem, SessionSidebarLink, SessionSidebarProps, StatusBanner, StatusBannerProps, StatusBar, StatusBarProps, TerminalLine, TerminalPanel, TerminalProps, WorkspaceLayout, WorkspaceLayoutProps } from './workspace.js';
4
+ export { AgentWorkbench, ApprovalConfidenceStat, ApprovalItem, ApprovalQueue, ApprovalQueueProps, AuditCheck, AuditResults, AuditResultsProps, BannerType, CalendarEvent, CalendarView, CalendarViewProps, ContextBadge, DirectoryPane, DirectoryPaneProps, FormAudit, RuntimePane, RuntimePaneProps, SandboxWorkbench, SandboxWorkbenchArtifact, SandboxWorkbenchCustomArtifact, SandboxWorkbenchFileArtifact, SandboxWorkbenchLayoutOptions, SandboxWorkbenchMarkdownArtifact, SandboxWorkbenchOpenUIArtifact, SandboxWorkbenchProps, SandboxWorkbenchSessionProps, SessionActivityMonitor, SessionActivityMonitorProps, SessionSidebar, SessionSidebarBadge, SessionSidebarFilter, SessionSidebarItem, SessionSidebarLink, SessionSidebarProps, StatusBanner, StatusBannerProps, StatusBar, StatusBarProps, TaskBoard, TaskBoardColumn, TaskBoardItem, TaskBoardProps, TerminalLine, TerminalPanel, TerminalProps, WorkspaceLayout, WorkspaceLayoutProps } from './workspace.js';
5
5
  export { a as ArtifactPane, A as ArtifactPaneProps } from './artifact-pane-Bh45Ssco.js';
6
6
  export { OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode } from './openui.js';
7
7
  export { AgentTimeline, AgentTimelineArtifactItem, AgentTimelineCustomItem, AgentTimelineItem, AgentTimelineMessageItem, AgentTimelineProps, AgentTimelineStatusItem, AgentTimelineTone, AgentTimelineToolGroupItem, AgentTimelineToolItem, ChatMessage, ChatMessageProps, MessageList, MessageListProps, MessageRole, ThinkingIndicator, ThinkingIndicatorProps, UserMessage, UserMessageProps } from './chat.js';
@@ -15,7 +15,7 @@ import { b as ToolPart } from './parts-CyGkM6Fp.js';
15
15
  export { R as ReasoningPart, S as SessionMessage, a as SessionPart, T as TextPart, c as ToolState, d as ToolStatus, e as ToolTime } from './parts-CyGkM6Fp.js';
16
16
  export { F as FileNode, a as FileTabData, b as FileTabs, c as FileTabsProps, d as FileTree, e as FileTreeProps, f as FileTreeVisibilityOptions, g as filterFileTree } from './file-tabs-BLfxfmAH.js';
17
17
  export { FileArtifactPane, FileArtifactPaneProps, FilePreview, FilePreviewProps } from './files.js';
18
- export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, P as PanelConfig, m as PlanCardData, n as PlanCards, o as PlanCardsProps, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_PANEL_WIDTH, G as SIDEBAR_RAIL_WIDTH, H as SIDEBAR_TOTAL_WIDTH, J as SandboxCard, K as SandboxCardData, L as SandboxCardProps, M as SandboxStatus, O as SandboxTable, Q as SandboxTableProps, T as Sidebar, U as SidebarContent, V as SidebarContentProps, W as SidebarPanel, X as SidebarPanelContent, Y as SidebarPanelContentProps, Z as SidebarPanelHeader, _ as SidebarPanelHeaderProps, $ as SidebarPanelProps, a0 as SidebarProps, a1 as SidebarProvider, a2 as SidebarProviderProps, a3 as SidebarRail, a4 as SidebarRailFooter, a5 as SidebarRailFooterProps, a6 as SidebarRailHeader, a7 as SidebarRailHeaderProps, a8 as SidebarRailNav, a9 as SidebarRailNavProps, aa as SidebarRailProps, ab as SidebarUser, ac as TopNavLink, ad as VariantList, ae as VariantListProps, af as useSidebar } from './variant-list-CsS6ydgm.js';
18
+ export { B as Backend, a as BackendSelector, b as BackendSelectorProps, C as ClusterStatusBar, c as ClusterStatusBarProps, d as ClusterStatusItem, e as CreditBalance, f as CreditBalanceProps, D as DashboardLayout, g as DashboardLayoutProps, h as DashboardUser, I as Invoice, i as InvoiceTable, j as InvoiceTableProps, N as NavItem, k as NewSandboxCard, l as NewSandboxCardProps, P as PanelConfig, m as PlanCardData, n as PlanCards, o as PlanCardsProps, p as ProductVariant, q as ProfileAvatar, r as ProfileAvatarProps, s as ProfileComparison, t as ProfileComparisonProps, u as ProfileSelector, v as ProfileSelectorProps, R as RailButton, w as RailButtonProps, x as RailModeButton, y as RailModeButtonProps, z as RailSeparator, A as RailSeparatorProps, E as ResourceMeter, F as ResourceMeterProps, S as SIDEBAR_PANEL_WIDTH, G as SIDEBAR_RAIL_WIDTH, H as SIDEBAR_TOTAL_WIDTH, J as SandboxCard, K as SandboxCardData, L as SandboxCardProps, M as SandboxStatus, O as SandboxTable, Q as SandboxTableProps, T as Sidebar, U as SidebarContent, V as SidebarContentProps, W as SidebarPanel, X as SidebarPanelContent, Y as SidebarPanelContentProps, Z as SidebarPanelHeader, _ as SidebarPanelHeaderProps, $ as SidebarPanelProps, a0 as SidebarProps, a1 as SidebarProvider, a2 as SidebarProviderProps, a3 as SidebarRail, a4 as SidebarRailFooter, a5 as SidebarRailFooterProps, a6 as SidebarRailHeader, a7 as SidebarRailHeaderProps, a8 as SidebarRailNav, a9 as SidebarRailNavProps, aa as SidebarRailProps, ab as SidebarUser, ac as TopNavLink, ad as VariantList, ae as VariantListProps, af as useSidebar } from './variant-list-BNwUOSgz.js';
19
19
  export { c as BillingDashboard, d as BillingDashboardProps, e as PricingCards, f as PricingPageProps, g as UsageChart, h as UsageChartProps, U as UsageDataPoint } from './usage-chart-SSiOgeQI.js';
20
20
  export { AuthHeader, GitHubLoginButton, LoginLayout, LoginLayoutProps, UserMenu } from './auth.js';
21
21
  export { CodeBlock, CodeBlock as CodeBlockDisplay, CopyButton, Markdown, MarkdownProps } from './markdown.js';
package/dist/index.js CHANGED
@@ -91,7 +91,9 @@ import {
91
91
  } from "./chunk-QID2OOMG.js";
92
92
  import {
93
93
  AgentWorkbench,
94
+ ApprovalQueue,
94
95
  AuditResults,
96
+ CalendarView,
95
97
  DirectoryPane,
96
98
  RuntimePane,
97
99
  SandboxWorkbench,
@@ -99,9 +101,10 @@ import {
99
101
  SessionSidebar,
100
102
  StatusBanner,
101
103
  StatusBar,
104
+ TaskBoard,
102
105
  TerminalPanel,
103
106
  WorkspaceLayout
104
- } from "./chunk-QC4BJEG6.js";
107
+ } from "./chunk-A5ALUT2B.js";
105
108
  import "./chunk-OEX7NZE3.js";
106
109
  import {
107
110
  EmptyState,
@@ -115,7 +118,7 @@ import {
115
118
  MessageList,
116
119
  ThinkingIndicator,
117
120
  UserMessage
118
- } from "./chunk-JLKYXLFN.js";
121
+ } from "./chunk-WKSGQVLI.js";
119
122
  import {
120
123
  useAutoScroll,
121
124
  useRunCollapseState,
@@ -133,7 +136,7 @@ import {
133
136
  RunGroup,
134
137
  WebSearchPreview,
135
138
  WriteFilePreview
136
- } from "./chunk-EXSOPXIY.js";
139
+ } from "./chunk-QOL4ZB24.js";
137
140
  import {
138
141
  formatDuration,
139
142
  truncateText
@@ -151,7 +154,7 @@ import {
151
154
  import {
152
155
  InlineCode,
153
156
  OpenUIArtifactRenderer
154
- } from "./chunk-PLTZB5BC.js";
157
+ } from "./chunk-ZNCEM5CD.js";
155
158
  import {
156
159
  Table,
157
160
  TableBody,
@@ -209,7 +212,7 @@ import {
209
212
  SidebarRailNav,
210
213
  VariantList,
211
214
  useSidebar
212
- } from "./chunk-7YWFOGKQ.js";
215
+ } from "./chunk-2XCOGNZP.js";
213
216
  import {
214
217
  BillingDashboard,
215
218
  PricingPage,
@@ -351,6 +354,7 @@ function ThemeToggle() {
351
354
  export {
352
355
  AgentTimeline,
353
356
  AgentWorkbench,
357
+ ApprovalQueue,
354
358
  ArtifactPane,
355
359
  AuditResults,
356
360
  AuthHeader,
@@ -361,6 +365,7 @@ export {
361
365
  Badge,
362
366
  BillingDashboard,
363
367
  Button,
368
+ CalendarView,
364
369
  Card,
365
370
  CardContent,
366
371
  CardDescription,
@@ -494,6 +499,7 @@ export {
494
499
  TabsList,
495
500
  TabsTrigger,
496
501
  TangleKnot,
502
+ TaskBoard,
497
503
  TerminalDisplay,
498
504
  TerminalCursor as TerminalDisplayCursor,
499
505
  TerminalInput as TerminalDisplayInput,
package/dist/openui.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenUIArtifactRenderer
3
- } from "./chunk-PLTZB5BC.js";
3
+ } from "./chunk-ZNCEM5CD.js";
4
4
  import "./chunk-34I7UFSX.js";
5
5
  import "./chunk-T7HMZEVO.js";
6
6
  import "./chunk-ZMNSRDMH.js";
package/dist/pages.d.ts CHANGED
@@ -34,6 +34,11 @@ interface EnvironmentEntry {
34
34
  description?: string;
35
35
  version?: string;
36
36
  }
37
+ interface ResourceLimits {
38
+ cpuMax?: number;
39
+ ramMaxGB?: number;
40
+ storageMaxGB?: number;
41
+ }
37
42
  interface ProvisioningWizardProps {
38
43
  environments?: EnvironmentOption[];
39
44
  onLoadEnvironments?: () => Promise<EnvironmentEntry[]>;
@@ -49,6 +54,8 @@ interface ProvisioningWizardProps {
49
54
  skipToReview?: boolean;
50
55
  /** Load user's startup scripts for the advanced options selector */
51
56
  onLoadStartupScripts?: () => Promise<StartupScriptEntry[]>;
57
+ /** Plan-based resource limits — caps the slider maximums */
58
+ resourceLimits?: ResourceLimits;
52
59
  }
53
60
  interface StartupScriptEntry {
54
61
  id: string;
@@ -75,7 +82,7 @@ interface ProvisioningConfig {
75
82
  startupScriptIds?: string[];
76
83
  }
77
84
  declare function resolveEnvironment(env: EnvironmentEntry): EnvironmentOption;
78
- declare function ProvisioningWizard({ environments: environmentsProp, onLoadEnvironments, onSubmit, onBack, className, variant, defaultEnvironment, defaultConfig, skipToReview, onLoadStartupScripts, }: ProvisioningWizardProps): react_jsx_runtime.JSX.Element;
85
+ declare function ProvisioningWizard({ environments: environmentsProp, onLoadEnvironments, onSubmit, onBack, className, variant, defaultEnvironment, defaultConfig, skipToReview, onLoadStartupScripts, resourceLimits, }: ProvisioningWizardProps): react_jsx_runtime.JSX.Element;
79
86
 
80
87
  type ProductVariant = "sandbox";
81
88
  interface StandalonePricingPageProps {
@@ -227,4 +234,4 @@ type TemplateCategory = "blockchain" | "ai-ml" | "frontend" | "infrastructure" |
227
234
  type TemplatePreset = Omit<ProvisioningConfig, "name" | "gitUrl" | "envVars" | "driver" | "startupScriptIds">;
228
235
  declare function getPresetForTemplate(id: string): TemplatePreset;
229
236
 
230
- export { BillingPage, type BillingPageData, type BillingPageProps, type EnvironmentEntry, type EnvironmentOption, PricingTier, type ProductVariant$1 as ProductVariant, type Profile, type ProfileFormData, type ProfileMetrics, ProfilesPage, type ProfilesPageProps, type ProvisioningConfig, ProvisioningWizard, type ProvisioningWizardProps, type ScriptType, type Secret, type SecretsApiClient, SecretsPage, type SecretsPageProps, StandalonePricingPage, type StandalonePricingPageProps, type StartupScript, type StartupScriptEntry, type StartupScriptFormData, type StartupScriptsApiClient, StartupScriptsPage, type StartupScriptsPageProps, type TemplateCategory, type TemplatePreset, TemplatesPage, type TemplatesPageProps, getPresetForTemplate, resolveEnvironment };
237
+ export { BillingPage, type BillingPageData, type BillingPageProps, type EnvironmentEntry, type EnvironmentOption, PricingTier, type ProductVariant$1 as ProductVariant, type Profile, type ProfileFormData, type ProfileMetrics, ProfilesPage, type ProfilesPageProps, type ProvisioningConfig, ProvisioningWizard, type ProvisioningWizardProps, type ResourceLimits, type ScriptType, type Secret, type SecretsApiClient, SecretsPage, type SecretsPageProps, StandalonePricingPage, type StandalonePricingPageProps, type StartupScript, type StartupScriptEntry, type StartupScriptFormData, type StartupScriptsApiClient, StartupScriptsPage, type StartupScriptsPageProps, type TemplateCategory, type TemplatePreset, TemplatesPage, type TemplatesPageProps, getPresetForTemplate, resolveEnvironment };