@tangle-network/sandbox-ui 0.10.0 → 0.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/dist/styles.css CHANGED
@@ -1125,8 +1125,8 @@
1125
1125
  .max-h-\[90vh\] {
1126
1126
  max-height: 90vh;
1127
1127
  }
1128
- .max-h-\[120px\] {
1129
- max-height: 120px;
1128
+ .max-h-\[160px\] {
1129
+ max-height: 160px;
1130
1130
  }
1131
1131
  .min-h-0 {
1132
1132
  min-height: calc(var(--spacing) * 0);
@@ -1134,6 +1134,9 @@
1134
1134
  .min-h-\[2px\] {
1135
1135
  min-height: 2px;
1136
1136
  }
1137
+ .min-h-\[6rem\] {
1138
+ min-height: 6rem;
1139
+ }
1137
1140
  .min-h-\[12rem\] {
1138
1141
  min-height: 12rem;
1139
1142
  }
@@ -1143,8 +1146,14 @@
1143
1146
  .min-h-\[16rem\] {
1144
1147
  min-height: 16rem;
1145
1148
  }
1146
- .min-h-\[32px\] {
1147
- 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;
1148
1157
  }
1149
1158
  .min-h-\[120px\] {
1150
1159
  min-height: 120px;
@@ -1158,6 +1167,9 @@
1158
1167
  .min-h-\[240px\] {
1159
1168
  min-height: 240px;
1160
1169
  }
1170
+ .min-h-full {
1171
+ min-height: 100%;
1172
+ }
1161
1173
  .min-h-screen {
1162
1174
  min-height: 100vh;
1163
1175
  }
@@ -1368,8 +1380,8 @@
1368
1380
  .max-w-\[75\%\] {
1369
1381
  max-width: 75%;
1370
1382
  }
1371
- .max-w-\[82\%\] {
1372
- max-width: 82%;
1383
+ .max-w-\[78\%\] {
1384
+ max-width: 78%;
1373
1385
  }
1374
1386
  .max-w-\[85\%\] {
1375
1387
  max-width: 85%;
@@ -1416,6 +1428,15 @@
1416
1428
  .min-w-\[8rem\] {
1417
1429
  min-width: 8rem;
1418
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
+ }
1419
1440
  .min-w-\[180px\] {
1420
1441
  min-width: 180px;
1421
1442
  }
@@ -1489,6 +1510,9 @@
1489
1510
  .rotate-90 {
1490
1511
  rotate: 90deg;
1491
1512
  }
1513
+ .rotate-180 {
1514
+ rotate: 180deg;
1515
+ }
1492
1516
  .-skew-x-12 {
1493
1517
  --tw-skew-x: skewX(calc(12deg * -1));
1494
1518
  transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
@@ -1541,6 +1565,9 @@
1541
1565
  .appearance-none {
1542
1566
  appearance: none;
1543
1567
  }
1568
+ .auto-rows-fr {
1569
+ grid-auto-rows: minmax(0, 1fr);
1570
+ }
1544
1571
  .grid-cols-1 {
1545
1572
  grid-template-columns: repeat(1, minmax(0, 1fr));
1546
1573
  }
@@ -1550,6 +1577,9 @@
1550
1577
  .grid-cols-3 {
1551
1578
  grid-template-columns: repeat(3, minmax(0, 1fr));
1552
1579
  }
1580
+ .grid-cols-7 {
1581
+ grid-template-columns: repeat(7, minmax(0, 1fr));
1582
+ }
1553
1583
  .grid-cols-12 {
1554
1584
  grid-template-columns: repeat(12, minmax(0, 1fr));
1555
1585
  }
@@ -1637,6 +1667,9 @@
1637
1667
  .gap-\[3px\] {
1638
1668
  gap: 3px;
1639
1669
  }
1670
+ .gap-\[5px\] {
1671
+ gap: 5px;
1672
+ }
1640
1673
  .gap-px {
1641
1674
  gap: 1px;
1642
1675
  }
@@ -1798,12 +1831,21 @@
1798
1831
  .rounded-\[16px\] {
1799
1832
  border-radius: 16px;
1800
1833
  }
1834
+ .rounded-\[18px\] {
1835
+ border-radius: 18px;
1836
+ }
1801
1837
  .rounded-\[20px\] {
1802
1838
  border-radius: 20px;
1803
1839
  }
1840
+ .rounded-\[22px\] {
1841
+ border-radius: 22px;
1842
+ }
1804
1843
  .rounded-\[24px\] {
1805
1844
  border-radius: 24px;
1806
1845
  }
1846
+ .rounded-\[26px\] {
1847
+ border-radius: 26px;
1848
+ }
1807
1849
  .rounded-\[28px\] {
1808
1850
  border-radius: 28px;
1809
1851
  }
@@ -1813,9 +1855,6 @@
1813
1855
  .rounded-\[calc\(var\(--radius-xl\)\+2px\)\] {
1814
1856
  border-radius: calc(var(--radius-xl) + 2px);
1815
1857
  }
1816
- .rounded-\[var\(--chat-send-radius\,var\(--radius-lg\)\)\] {
1817
- border-radius: var(--chat-send-radius,var(--radius-lg));
1818
- }
1819
1858
  .rounded-\[var\(--radius-full\)\] {
1820
1859
  border-radius: var(--radius-full);
1821
1860
  }
@@ -1869,8 +1908,8 @@
1869
1908
  border-bottom-right-radius: var(--radius-sm);
1870
1909
  border-bottom-left-radius: var(--radius-sm);
1871
1910
  }
1872
- .rounded-br-\[var\(--radius-sm\)\] {
1873
- border-bottom-right-radius: var(--radius-sm);
1911
+ .rounded-br-\[12px\] {
1912
+ border-bottom-right-radius: 12px;
1874
1913
  }
1875
1914
  .rounded-bl-lg {
1876
1915
  border-bottom-left-radius: var(--radius-lg);
@@ -1895,6 +1934,10 @@
1895
1934
  border-top-style: var(--tw-border-style);
1896
1935
  border-top-width: 0px;
1897
1936
  }
1937
+ .border-t-2 {
1938
+ border-top-style: var(--tw-border-style);
1939
+ border-top-width: 2px;
1940
+ }
1898
1941
  .border-r {
1899
1942
  border-right-style: var(--tw-border-style);
1900
1943
  border-right-width: 1px;
@@ -1929,6 +1972,9 @@
1929
1972
  .border-\[var\(--border-accent\,transparent\)\] {
1930
1973
  border-color: var(--border-accent,transparent);
1931
1974
  }
1975
+ .border-\[var\(--border-subtle\)\] {
1976
+ border-color: var(--border-subtle);
1977
+ }
1932
1978
  .border-\[var\(--border-subtle\,hsl\(var\(--border\)\)\)\] {
1933
1979
  border-color: var(--border-subtle,hsl(var(--border)));
1934
1980
  }
@@ -2091,12 +2137,21 @@
2091
2137
  .bg-\[\#ffbd2e\]\/80 {
2092
2138
  background-color: color-mix(in oklab, #ffbd2e 80%, transparent);
2093
2139
  }
2140
+ .bg-\[color\:color-mix\(in_srgb\,var\(--bg-card\)_94\%\,transparent\)\] {
2141
+ background-color: var(--bg-card);
2142
+ @supports (color: color-mix(in lab, red, red)) {
2143
+ background-color: color-mix(in srgb,var(--bg-card) 94%,transparent);
2144
+ }
2145
+ }
2094
2146
  .bg-\[var\(--accent-surface-soft\)\] {
2095
2147
  background-color: var(--accent-surface-soft);
2096
2148
  }
2097
2149
  .bg-\[var\(--accent-surface-strong\)\] {
2098
2150
  background-color: var(--accent-surface-strong);
2099
2151
  }
2152
+ .bg-\[var\(--bg-card\)\] {
2153
+ background-color: var(--bg-card);
2154
+ }
2100
2155
  .bg-\[var\(--bg-root\)\] {
2101
2156
  background-color: var(--bg-root);
2102
2157
  }
@@ -2419,6 +2474,9 @@
2419
2474
  .px-0 {
2420
2475
  padding-inline: calc(var(--spacing) * 0);
2421
2476
  }
2477
+ .px-0\.5 {
2478
+ padding-inline: calc(var(--spacing) * 0.5);
2479
+ }
2422
2480
  .px-1 {
2423
2481
  padding-inline: calc(var(--spacing) * 1);
2424
2482
  }
@@ -2434,6 +2492,9 @@
2434
2492
  .px-3 {
2435
2493
  padding-inline: calc(var(--spacing) * 3);
2436
2494
  }
2495
+ .px-3\.5 {
2496
+ padding-inline: calc(var(--spacing) * 3.5);
2497
+ }
2437
2498
  .px-4 {
2438
2499
  padding-inline: calc(var(--spacing) * 4);
2439
2500
  }
@@ -2497,6 +2558,9 @@
2497
2558
  .py-16 {
2498
2559
  padding-block: calc(var(--spacing) * 16);
2499
2560
  }
2561
+ .py-20 {
2562
+ padding-block: calc(var(--spacing) * 20);
2563
+ }
2500
2564
  .py-\[2px\] {
2501
2565
  padding-block: 2px;
2502
2566
  }
@@ -2680,9 +2744,6 @@
2680
2744
  .text-\[13px\] {
2681
2745
  font-size: 13px;
2682
2746
  }
2683
- .text-\[14px\] {
2684
- font-size: 14px;
2685
- }
2686
2747
  .text-\[15px\] {
2687
2748
  font-size: 15px;
2688
2749
  }
@@ -2696,6 +2757,10 @@
2696
2757
  --tw-leading: calc(var(--spacing) * 6);
2697
2758
  line-height: calc(var(--spacing) * 6);
2698
2759
  }
2760
+ .leading-6\.5 {
2761
+ --tw-leading: calc(var(--spacing) * 6.5);
2762
+ line-height: calc(var(--spacing) * 6.5);
2763
+ }
2699
2764
  .leading-7 {
2700
2765
  --tw-leading: calc(var(--spacing) * 7);
2701
2766
  line-height: calc(var(--spacing) * 7);
@@ -2869,8 +2934,8 @@
2869
2934
  .text-\[var\(--chat-label-size\,11px\)\] {
2870
2935
  color: var(--chat-label-size,11px);
2871
2936
  }
2872
- .text-\[var\(--chat-send-color\,var\(--accent-text\)\)\] {
2873
- color: var(--chat-send-color,var(--accent-text));
2937
+ .text-\[var\(--chat-send-color\,white\)\] {
2938
+ color: var(--chat-send-color,white);
2874
2939
  }
2875
2940
  .text-\[var\(--code-error\)\] {
2876
2941
  color: var(--code-error);
@@ -2941,6 +3006,9 @@
2941
3006
  .text-\[var\(--text-muted\,hsl\(var\(--muted-foreground\)\)\)\] {
2942
3007
  color: var(--text-muted,hsl(var(--muted-foreground)));
2943
3008
  }
3009
+ .text-\[var\(--text-primary\)\] {
3010
+ color: var(--text-primary);
3011
+ }
2944
3012
  .text-\[var\(--text-primary\,hsl\(var\(--foreground\)\)\)\] {
2945
3013
  color: var(--text-primary,hsl(var(--foreground)));
2946
3014
  }
@@ -2983,6 +3051,12 @@
2983
3051
  .text-white {
2984
3052
  color: var(--color-white);
2985
3053
  }
3054
+ .text-white\/60 {
3055
+ color: color-mix(in srgb, #fff 60%, transparent);
3056
+ @supports (color: color-mix(in lab, red, red)) {
3057
+ color: color-mix(in oklab, var(--color-white) 60%, transparent);
3058
+ }
3059
+ }
2986
3060
  .text-yellow-400 {
2987
3061
  color: var(--color-yellow-400);
2988
3062
  }
@@ -3047,16 +3121,28 @@
3047
3121
  --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
3048
3122
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3049
3123
  }
3124
+ .shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.04\)\] {
3125
+ --tw-shadow: 0 1px 2px var(--tw-shadow-color, rgba(15,23,42,0.04));
3126
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3127
+ }
3128
+ .shadow-\[0_6px_16px_rgba\(15\,23\,42\,0\.08\)\] {
3129
+ --tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(15,23,42,0.08));
3130
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3131
+ }
3132
+ .shadow-\[0_8px_20px_rgba\(15\,23\,42\,0\.12\)\] {
3133
+ --tw-shadow: 0 8px 20px var(--tw-shadow-color, rgba(15,23,42,0.12));
3134
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3135
+ }
3050
3136
  .shadow-\[inset_2px_0_0_hsl\(var\(--primary\)\)\] {
3051
3137
  --tw-shadow: inset 2px 0 0 var(--tw-shadow-color, hsl(var(--primary)));
3052
3138
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3053
3139
  }
3054
- .shadow-\[var\(--chat-input-shadow\,var\(--shadow-card\)\)\] {
3055
- --tw-shadow: var(--chat-input-shadow,var(--shadow-card));
3140
+ .shadow-\[var\(--chat-input-shadow\,0_1px_2px_rgba\(15\,23\,42\,0\.05\)\)\] {
3141
+ --tw-shadow: var(--chat-input-shadow,0 1px 2px rgba(15,23,42,0.05));
3056
3142
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3057
3143
  }
3058
- .shadow-\[var\(--chat-send-shadow\,none\)\] {
3059
- --tw-shadow: var(--chat-send-shadow,none);
3144
+ .shadow-\[var\(--chat-send-shadow\,0_6px_16px_rgba\(15\,23\,42\,0\.12\)\)\] {
3145
+ --tw-shadow: var(--chat-send-shadow,0 6px 16px rgba(15,23,42,0.12));
3060
3146
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3061
3147
  }
3062
3148
  .shadow-\[var\(--shadow-accent\)\] {
@@ -3087,6 +3173,10 @@
3087
3173
  --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));
3088
3174
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3089
3175
  }
3176
+ .shadow-none {
3177
+ --tw-shadow: 0 0 #0000;
3178
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3179
+ }
3090
3180
  .shadow-sm {
3091
3181
  --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));
3092
3182
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3234,15 +3324,18 @@
3234
3324
  -webkit-user-select: none;
3235
3325
  user-select: none;
3236
3326
  }
3237
- .\[background\:var\(--chat-input-bg\,var\(--depth-2\)\)\] {
3238
- background: var(--chat-input-bg,var(--depth-2));
3327
+ .\[background\:var\(--chat-input-bg\,var\(--bg-card\)\)\] {
3328
+ background: var(--chat-input-bg,var(--bg-card));
3239
3329
  }
3240
- .\[background\:var\(--chat-send-bg\,var\(--accent-surface-soft\)\)\] {
3241
- background: var(--chat-send-bg,var(--accent-surface-soft));
3330
+ .\[background\:var\(--chat-send-bg\,var\(--brand-primary\)\)\] {
3331
+ background: var(--chat-send-bg,var(--brand-primary));
3242
3332
  }
3243
3333
  .\[scrollbar-gutter\:stable\] {
3244
3334
  scrollbar-gutter: stable;
3245
3335
  }
3336
+ .ring-inset {
3337
+ --tw-ring-inset: inset;
3338
+ }
3246
3339
  .group-open\:rotate-180 {
3247
3340
  &:is(:where(.group):is([open], :popover-open, :open) *) {
3248
3341
  rotate: 180deg;
@@ -3428,9 +3521,9 @@
3428
3521
  border-color: var(--chat-input-focus-border,var(--border-accent));
3429
3522
  }
3430
3523
  }
3431
- .focus-within\:shadow-\[var\(--chat-input-focus-shadow\,var\(--shadow-card\)\)\] {
3524
+ .focus-within\:shadow-\[var\(--chat-input-focus-shadow\,0_10px_30px_rgba\(15\,23\,42\,0\.08\)\)\] {
3432
3525
  &:focus-within {
3433
- --tw-shadow: var(--chat-input-focus-shadow,var(--shadow-card));
3526
+ --tw-shadow: var(--chat-input-focus-shadow,0 10px 30px rgba(15,23,42,0.08));
3434
3527
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3435
3528
  }
3436
3529
  }
@@ -3471,6 +3564,16 @@
3471
3564
  }
3472
3565
  }
3473
3566
  }
3567
+ .hover\:border-emerald-500\/30 {
3568
+ &:hover {
3569
+ @media (hover: hover) {
3570
+ border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 30%, transparent);
3571
+ @supports (color: color-mix(in lab, red, red)) {
3572
+ border-color: color-mix(in oklab, var(--color-emerald-500) 30%, transparent);
3573
+ }
3574
+ }
3575
+ }
3576
+ }
3474
3577
  .hover\:border-red-500\/30 {
3475
3578
  &:hover {
3476
3579
  @media (hover: hover) {
@@ -3550,6 +3653,16 @@
3550
3653
  }
3551
3654
  }
3552
3655
  }
3656
+ .hover\:bg-emerald-500\/10 {
3657
+ &:hover {
3658
+ @media (hover: hover) {
3659
+ background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);
3660
+ @supports (color: color-mix(in lab, red, red)) {
3661
+ background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);
3662
+ }
3663
+ }
3664
+ }
3665
+ }
3553
3666
  .hover\:bg-green-600\/30 {
3554
3667
  &:hover {
3555
3668
  @media (hover: hover) {
@@ -3671,10 +3784,10 @@
3671
3784
  }
3672
3785
  }
3673
3786
  }
3674
- .hover\:\[background\:var\(--chat-send-hover-bg\,var\(--accent-surface-strong\)\)\] {
3787
+ .hover\:\[background\:var\(--chat-send-hover-bg\,var\(--brand-strong\)\)\] {
3675
3788
  &:hover {
3676
3789
  @media (hover: hover) {
3677
- background: var(--chat-send-hover-bg,var(--accent-surface-strong));
3790
+ background: var(--chat-send-hover-bg,var(--brand-strong));
3678
3791
  }
3679
3792
  }
3680
3793
  }
@@ -339,4 +339,141 @@ interface AuditResultsProps {
339
339
  }
340
340
  declare function AuditResults({ forms, crossFormChecks, overallScore, className }: AuditResultsProps): react_jsx_runtime.JSX.Element;
341
341
 
342
- export { AgentWorkbench, type AuditCheck, AuditResults, type AuditResultsProps, type BannerType, type ContextBadge, DirectoryPane, type DirectoryPaneProps, type FormAudit, RuntimePane, type RuntimePaneProps, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, SessionActivityMonitor, type SessionActivityMonitorProps, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, type TerminalLine, TerminalPanel, type TerminalProps, WorkspaceLayout, type WorkspaceLayoutProps };
342
+ interface TaskBoardItem {
343
+ id: string;
344
+ title: string;
345
+ description?: string | null;
346
+ status: string;
347
+ priority?: string | null;
348
+ tags?: string[];
349
+ dueDate?: Date | null;
350
+ assigneeId?: string | null;
351
+ meta?: Record<string, unknown>;
352
+ }
353
+ interface TaskBoardColumn {
354
+ id: string;
355
+ label: string;
356
+ accent?: string;
357
+ }
358
+ interface TaskBoardProps {
359
+ items: TaskBoardItem[];
360
+ columns: TaskBoardColumn[];
361
+ className?: string;
362
+ onMoveItem?: (itemId: string, toColumnId: string) => void;
363
+ onClickItem?: (item: TaskBoardItem) => void;
364
+ renderItemMeta?: (item: TaskBoardItem) => ReactNode;
365
+ renderColumnAction?: (column: TaskBoardColumn) => ReactNode;
366
+ renderBadge?: (value: string, type: "priority" | "tag") => ReactNode;
367
+ columnEmptyState?: ReactNode;
368
+ header?: ReactNode;
369
+ /**
370
+ * Wrap each column's item list container. Use this to inject a DnD
371
+ * droppable zone (e.g. Droppable from @hello-pangea/dnd).
372
+ *
373
+ * Receives the column ID, the default item list element, and the column's items.
374
+ * Return a ReactNode that wraps/replaces the default element.
375
+ *
376
+ * If not provided, the default unstyled div is rendered.
377
+ */
378
+ renderColumnBody?: (columnId: string, defaultChildren: ReactNode, items: TaskBoardItem[]) => ReactNode;
379
+ /**
380
+ * Wrap each item card. Use this to inject a DnD draggable
381
+ * (e.g. Draggable from @hello-pangea/dnd).
382
+ *
383
+ * Receives the item, its index, and the default card element.
384
+ * Return a ReactNode that wraps/replaces the default element.
385
+ *
386
+ * If not provided, the default button card is rendered.
387
+ */
388
+ renderItemWrapper?: (item: TaskBoardItem, index: number, defaultCard: ReactNode) => ReactNode;
389
+ }
390
+ declare function TaskBoard({ items, columns, className, onMoveItem, onClickItem, renderItemMeta, renderColumnAction, renderBadge, columnEmptyState, header, renderColumnBody, renderItemWrapper, }: TaskBoardProps): react_jsx_runtime.JSX.Element;
391
+
392
+ interface CalendarEvent {
393
+ id: string;
394
+ title: string;
395
+ type?: string;
396
+ startAt: Date | string;
397
+ endAt?: Date | string | null;
398
+ allDay?: boolean;
399
+ /** Arbitrary data passed through to render props */
400
+ meta?: Record<string, unknown>;
401
+ }
402
+ interface CalendarViewProps {
403
+ events: CalendarEvent[];
404
+ className?: string;
405
+ /** Controlled month (0-indexed). Defaults to current month. */
406
+ month?: number;
407
+ year?: number;
408
+ onMonthChange?: (year: number, month: number) => void;
409
+ /** Which day is selected (ISO date string YYYY-MM-DD) */
410
+ selectedDay?: string | null;
411
+ onSelectDay?: (dateKey: string) => void;
412
+ onDoubleClickDay?: (dateKey: string) => void;
413
+ /** Render an event dot/chip inside a calendar cell */
414
+ renderEventChip?: (event: CalendarEvent) => ReactNode;
415
+ /** Render the day detail panel (right side) */
416
+ renderDayDetail?: (dateKey: string, dayEvents: CalendarEvent[]) => ReactNode;
417
+ /** Header slot (left of navigation) */
418
+ headerLeft?: ReactNode;
419
+ /** Header slot (right of navigation) */
420
+ headerRight?: ReactNode;
421
+ /** Whether to show the day detail panel. Default true. */
422
+ showDayPanel?: boolean;
423
+ }
424
+ /**
425
+ * CalendarView — month grid calendar with event chips and optional day detail panel.
426
+ *
427
+ * Stateless by default (controlled month/selectedDay). Falls back to internal
428
+ * state when uncontrolled. All rendering is customizable via render props.
429
+ */
430
+ declare function CalendarView({ events, className, month: controlledMonth, year: controlledYear, onMonthChange, selectedDay: controlledSelectedDay, onSelectDay, onDoubleClickDay, renderEventChip, renderDayDetail, headerLeft, headerRight, showDayPanel, }: CalendarViewProps): react_jsx_runtime.JSX.Element;
431
+
432
+ interface ApprovalItem {
433
+ id: string;
434
+ title: string;
435
+ description?: string | null;
436
+ type: string;
437
+ status: "pending" | "approved" | "rejected" | "executed";
438
+ createdAt?: Date | string | null;
439
+ resolvedAt?: Date | string | null;
440
+ /** Arbitrary metadata — e.g. rejectionReason, confidence, content preview */
441
+ meta?: Record<string, unknown>;
442
+ }
443
+ interface ApprovalConfidenceStat {
444
+ type: string;
445
+ approved: number;
446
+ rejected: number;
447
+ total: number;
448
+ rate: number;
449
+ }
450
+ interface ApprovalQueueProps {
451
+ items: ApprovalItem[];
452
+ className?: string;
453
+ onApprove?: (item: ApprovalItem) => void;
454
+ onReject?: (item: ApprovalItem, reason?: string) => void;
455
+ /** Render custom content inside each approval card */
456
+ renderItemDetail?: (item: ApprovalItem) => ReactNode;
457
+ /** Render a custom badge for the item type */
458
+ renderTypeBadge?: (type: string) => ReactNode;
459
+ /** Render custom stats at the top. If not provided, auto-computed confidence stats shown. */
460
+ renderStats?: (stats: ApprovalConfidenceStat[]) => ReactNode;
461
+ /** Whether the user can approve/reject. Default true. */
462
+ canResolve?: boolean;
463
+ /** Header slot */
464
+ header?: ReactNode;
465
+ /** Empty state */
466
+ emptyState?: ReactNode;
467
+ /** Whether to show resolved items. Default: collapsed toggle. */
468
+ showResolved?: boolean;
469
+ }
470
+ /**
471
+ * ApprovalQueue — review queue for agent-proposed actions.
472
+ *
473
+ * Shows pending items with approve/reject controls, confidence stats per type,
474
+ * and a collapsible resolved history. Designed for the agent approval feedback
475
+ * loop: agent proposes → user approves/rejects → rejection reasons feed back.
476
+ */
477
+ declare function ApprovalQueue({ items, className, onApprove, onReject, renderItemDetail, renderTypeBadge, renderStats, canResolve, header, emptyState, showResolved: controlledShowResolved, }: ApprovalQueueProps): react_jsx_runtime.JSX.Element;
478
+
479
+ export { AgentWorkbench, type ApprovalConfidenceStat, type ApprovalItem, ApprovalQueue, type ApprovalQueueProps, type AuditCheck, AuditResults, type AuditResultsProps, type BannerType, type CalendarEvent, CalendarView, type CalendarViewProps, type ContextBadge, DirectoryPane, type DirectoryPaneProps, type FormAudit, RuntimePane, type RuntimePaneProps, SandboxWorkbench, type SandboxWorkbenchArtifact, type SandboxWorkbenchCustomArtifact, type SandboxWorkbenchFileArtifact, type SandboxWorkbenchLayoutOptions, type SandboxWorkbenchMarkdownArtifact, type SandboxWorkbenchOpenUIArtifact, type SandboxWorkbenchProps, type SandboxWorkbenchSessionProps, SessionActivityMonitor, type SessionActivityMonitorProps, SessionSidebar, type SessionSidebarBadge, type SessionSidebarFilter, type SessionSidebarItem, type SessionSidebarLink, type SessionSidebarProps, StatusBanner, type StatusBannerProps, StatusBar, type StatusBarProps, TaskBoard, type TaskBoardColumn, type TaskBoardItem, type TaskBoardProps, type TerminalLine, TerminalPanel, type TerminalProps, WorkspaceLayout, type WorkspaceLayoutProps };
package/dist/workspace.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  AgentWorkbench,
3
+ ApprovalQueue,
3
4
  AuditResults,
5
+ CalendarView,
4
6
  DirectoryPane,
5
7
  RuntimePane,
6
8
  SandboxWorkbench,
@@ -8,18 +10,19 @@ import {
8
10
  SessionSidebar,
9
11
  StatusBanner,
10
12
  StatusBar,
13
+ TaskBoard,
11
14
  TerminalPanel,
12
15
  WorkspaceLayout
13
- } from "./chunk-QC4BJEG6.js";
16
+ } from "./chunk-HEXQVHXJ.js";
14
17
  import "./chunk-OEX7NZE3.js";
15
18
  import "./chunk-MA7YKRUP.js";
16
- import "./chunk-JLKYXLFN.js";
19
+ import "./chunk-WKSGQVLI.js";
17
20
  import "./chunk-54SQQMMM.js";
18
- import "./chunk-EXSOPXIY.js";
21
+ import "./chunk-QOL4ZB24.js";
19
22
  import "./chunk-HRMUF35V.js";
20
23
  import "./chunk-MT5FJ3ZT.js";
21
24
  import "./chunk-BX6AQMUS.js";
22
- import "./chunk-PLTZB5BC.js";
25
+ import "./chunk-ZNCEM5CD.js";
23
26
  import "./chunk-34I7UFSX.js";
24
27
  import "./chunk-QDH5GEGY.js";
25
28
  import {
@@ -31,8 +34,10 @@ import "./chunk-MKTSMWVD.js";
31
34
  import "./chunk-RQHJBTEU.js";
32
35
  export {
33
36
  AgentWorkbench,
37
+ ApprovalQueue,
34
38
  ArtifactPane,
35
39
  AuditResults,
40
+ CalendarView,
36
41
  DirectoryPane,
37
42
  RuntimePane,
38
43
  SandboxWorkbench,
@@ -40,6 +45,7 @@ export {
40
45
  SessionSidebar,
41
46
  StatusBanner,
42
47
  StatusBar,
48
+ TaskBoard,
43
49
  TerminalPanel,
44
50
  WorkspaceLayout
45
51
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",