@tangle-network/sandbox-ui 0.45.0 → 0.46.0
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/{WorkflowGraph-7YYGIBNV.js → WorkflowGraph-6IKZYPST.js} +2 -1
- package/dist/assets.js +1 -0
- package/dist/assistant.js +2 -1
- package/dist/auth.js +1 -0
- package/dist/chat.js +4 -3
- package/dist/{chunk-6NDOA4SB.js → chunk-2ISY4R72.js} +112 -104
- package/dist/{chunk-KIRJZUX2.js → chunk-BR2LMUAE.js} +61 -34
- package/dist/{chunk-H7GMPMPB.js → chunk-CXV6X33U.js} +19 -1
- package/dist/{chunk-CUUUFJF5.js → chunk-KOUYJ6QP.js} +23 -23
- package/dist/{chunk-3RNYDTQ3.js → chunk-LQHTCM56.js} +21 -27
- package/dist/chunk-NXUSLH7H.js +7528 -0
- package/dist/{chunk-2XNT74ZX.js → chunk-OMUIPJQZ.js} +28 -20
- package/dist/{chunk-KCWIC3SJ.js → chunk-PZ62T5PM.js} +281 -214
- package/dist/chunk-U67V476Y.js +35 -0
- package/dist/chunk-VIREDUBF.js +215 -0
- package/dist/dashboard.d.ts +82 -66
- package/dist/dashboard.js +5 -4
- package/dist/editor.js +2 -0
- package/dist/files.d.ts +5 -0
- package/dist/files.js +1 -0
- package/dist/globals.css +1149 -48
- package/dist/hooks.js +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +95 -65
- package/dist/integrations.js +2 -1
- package/dist/markdown.js +2 -0
- package/dist/openui.d.ts +0 -5
- package/dist/openui.js +1 -0
- package/dist/pages.d.ts +1 -1
- package/dist/pages.js +89 -88
- package/dist/ports-list-DfG0VfPt.d.ts +17 -0
- package/dist/primitives.js +1 -0
- package/dist/run.js +1 -0
- package/dist/sdk-hooks.js +1 -0
- package/dist/stores.js +1 -0
- package/dist/styles.css +1149 -48
- package/dist/terminal.js +5 -209
- package/dist/utils.js +1 -0
- package/dist/workbench.d.ts +227 -0
- package/dist/workbench.js +40 -0
- package/dist/workflows.js +2 -1
- package/dist/workspace.d.ts +6 -2
- package/dist/workspace.js +2 -1
- package/package.json +13 -7
|
@@ -82,7 +82,7 @@ function ResizeHandle({ label, onDragStart, onStep, className }) {
|
|
|
82
82
|
className
|
|
83
83
|
),
|
|
84
84
|
children: [
|
|
85
|
-
/* @__PURE__ */ jsx("span", { className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-
|
|
85
|
+
/* @__PURE__ */ jsx("span", { className: "absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
|
|
86
86
|
/* @__PURE__ */ jsx("span", { className: "absolute inset-y-0 left-1/2 w-[3px] -translate-x-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
|
|
87
87
|
]
|
|
88
88
|
}
|
|
@@ -119,7 +119,7 @@ function HorizontalResizeHandle({ label, onDragStart, onStep, className }) {
|
|
|
119
119
|
className
|
|
120
120
|
),
|
|
121
121
|
children: [
|
|
122
|
-
/* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-
|
|
122
|
+
/* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-[var(--md3-outline-variant)] transition-colors" }),
|
|
123
123
|
/* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 top-1/2 h-[3px] -translate-y-1/2 rounded-full bg-transparent hover:bg-primary/30 focus-visible:bg-primary/40" })
|
|
124
124
|
]
|
|
125
125
|
}
|
|
@@ -140,11 +140,11 @@ function MobileDrawer({ side, title, header, onClose, children }) {
|
|
|
140
140
|
"aside",
|
|
141
141
|
{
|
|
142
142
|
className: cn(
|
|
143
|
-
"relative flex h-full w-[min(88vw,24rem)] flex-col border-
|
|
143
|
+
"relative flex h-full w-[min(88vw,24rem)] flex-col border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]",
|
|
144
144
|
side === "left" ? "border-r" : "ml-auto border-l"
|
|
145
145
|
),
|
|
146
146
|
children: [
|
|
147
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-
|
|
147
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-[var(--md3-outline-variant)] px-3 py-2", children: [
|
|
148
148
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: header ?? /* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium text-foreground", children: title }) }),
|
|
149
149
|
/* @__PURE__ */ jsx(
|
|
150
150
|
"button",
|
|
@@ -298,9 +298,9 @@ function WorkspaceLayout({
|
|
|
298
298
|
{
|
|
299
299
|
"aria-label": leftLabel,
|
|
300
300
|
style: leftStyle,
|
|
301
|
-
className: "hidden shrink-0 border-r border-
|
|
301
|
+
className: "hidden shrink-0 border-r border-[var(--md3-outline-variant)] bg-surface-container-low lg:flex lg:flex-col",
|
|
302
302
|
children: [
|
|
303
|
-
leftHeader && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-
|
|
303
|
+
leftHeader && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high", children: [
|
|
304
304
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: leftHeader }),
|
|
305
305
|
/* @__PURE__ */ jsx(
|
|
306
306
|
"button",
|
|
@@ -327,7 +327,7 @@ function WorkspaceLayout({
|
|
|
327
327
|
)
|
|
328
328
|
] }),
|
|
329
329
|
/* @__PURE__ */ jsxs("main", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
330
|
-
(centerHeader || left || right || bottom) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b border-
|
|
330
|
+
(centerHeader || left || right || bottom) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-1.5", children: [
|
|
331
331
|
left && !leftOpen && /* @__PURE__ */ jsx(
|
|
332
332
|
"button",
|
|
333
333
|
{
|
|
@@ -374,10 +374,10 @@ function WorkspaceLayout({
|
|
|
374
374
|
"section",
|
|
375
375
|
{
|
|
376
376
|
"aria-label": bottomLabel,
|
|
377
|
-
className: "border-t border-
|
|
377
|
+
className: "border-t border-[var(--md3-outline-variant)] bg-surface-container shrink-0",
|
|
378
378
|
style: { height: `${bottomHeight}px` },
|
|
379
379
|
children: /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col", children: [
|
|
380
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-
|
|
380
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high shrink-0", children: [
|
|
381
381
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: bottomHeader ?? /* @__PURE__ */ jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: "Runtime" }) }),
|
|
382
382
|
/* @__PURE__ */ jsx(
|
|
383
383
|
"button",
|
|
@@ -395,7 +395,7 @@ function WorkspaceLayout({
|
|
|
395
395
|
}
|
|
396
396
|
)
|
|
397
397
|
] }),
|
|
398
|
-
centerFooter && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-
|
|
398
|
+
centerFooter && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-low", children: centerFooter })
|
|
399
399
|
] }),
|
|
400
400
|
desktop && right && rightOpen && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
401
401
|
resizable && /* @__PURE__ */ jsx(
|
|
@@ -411,9 +411,9 @@ function WorkspaceLayout({
|
|
|
411
411
|
{
|
|
412
412
|
"aria-label": rightLabel,
|
|
413
413
|
style: rightStyle,
|
|
414
|
-
className: "hidden shrink-0 border-l border-
|
|
414
|
+
className: "hidden shrink-0 border-l border-[var(--md3-outline-variant)] bg-surface-container-low lg:flex lg:flex-col",
|
|
415
415
|
children: [
|
|
416
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-
|
|
416
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 border-b border-[var(--md3-outline-variant)] px-3 py-1.5 bg-surface-container-high", children: [
|
|
417
417
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: rightHeader ?? /* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium text-foreground", children: "Artifacts" }) }),
|
|
418
418
|
/* @__PURE__ */ jsx(
|
|
419
419
|
"button",
|
|
@@ -599,36 +599,52 @@ import { Binary, ShieldCheck, TerminalSquare } from "lucide-react";
|
|
|
599
599
|
import { Loader2, AlertCircle, CheckCircle, Wifi } from "lucide-react";
|
|
600
600
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
601
601
|
var BANNER_STYLES = {
|
|
602
|
-
provisioning: { bg: "bg-primary/5", border: "border-primary/20", icon: Loader2 },
|
|
603
|
-
connecting: { bg: "bg-[var(--code-number)]/5", border: "border-[var(--code-number)]/20", icon: Wifi },
|
|
604
|
-
error: { bg: "bg-[var(--code-error)]/5", border: "border-[var(--code-error)]/20", icon: AlertCircle },
|
|
605
|
-
success: { bg: "bg-[var(--code-success)]/5", border: "border-[var(--code-success)]/20", icon: CheckCircle },
|
|
606
|
-
info: { bg: "bg-
|
|
602
|
+
provisioning: { bg: "bg-primary/5", border: "border-primary/20", text: "text-primary", icon: Loader2 },
|
|
603
|
+
connecting: { bg: "bg-[var(--code-number)]/5", border: "border-[var(--code-number)]/20", text: "text-[var(--code-number)]", icon: Wifi },
|
|
604
|
+
error: { bg: "bg-[var(--code-error)]/5", border: "border-[var(--code-error)]/20", text: "text-[var(--code-error)]", icon: AlertCircle },
|
|
605
|
+
success: { bg: "bg-[var(--code-success)]/5", border: "border-[var(--code-success)]/20", text: "text-[var(--code-success)]", icon: CheckCircle },
|
|
606
|
+
info: { bg: "bg-surface-container-high", border: "border-[var(--md3-outline-variant)]", text: "text-muted-foreground", icon: AlertCircle }
|
|
607
607
|
};
|
|
608
608
|
function StatusBanner({ type, message, detail, onDismiss, className }) {
|
|
609
609
|
const style = BANNER_STYLES[type];
|
|
610
610
|
const Icon = style.icon;
|
|
611
611
|
const isAnimated = type === "provisioning" || type === "connecting";
|
|
612
|
-
return /* @__PURE__ */ jsxs3(
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
612
|
+
return /* @__PURE__ */ jsxs3(
|
|
613
|
+
"div",
|
|
614
|
+
{
|
|
615
|
+
className: cn(
|
|
616
|
+
"flex items-center gap-2.5 px-4 py-2 border-b font-sans text-sm",
|
|
617
|
+
style.bg,
|
|
618
|
+
style.border,
|
|
619
|
+
className
|
|
620
|
+
),
|
|
621
|
+
children: [
|
|
622
|
+
/* @__PURE__ */ jsx3(Icon, { className: cn("h-4 w-4 shrink-0", style.text, isAnimated && "animate-spin") }),
|
|
623
|
+
/* @__PURE__ */ jsx3("span", { className: "font-medium text-foreground", children: message }),
|
|
624
|
+
detail && /* @__PURE__ */ jsx3("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: detail }),
|
|
625
|
+
onDismiss && /* @__PURE__ */ jsx3(
|
|
626
|
+
"button",
|
|
627
|
+
{
|
|
628
|
+
onClick: onDismiss,
|
|
629
|
+
className: "ml-auto font-sans text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",
|
|
630
|
+
children: "Dismiss"
|
|
631
|
+
}
|
|
632
|
+
)
|
|
633
|
+
]
|
|
634
|
+
}
|
|
635
|
+
);
|
|
618
636
|
}
|
|
619
637
|
|
|
620
638
|
// src/workspace/status-bar.tsx
|
|
621
639
|
import { Zap, FileText, X as X2 } from "lucide-react";
|
|
622
640
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
623
641
|
var STATUS_LABELS = {
|
|
624
|
-
connected: { label: "", color: "bg-[var(--code-success)]" },
|
|
625
|
-
connecting: { label: "Connecting
|
|
642
|
+
connected: { label: "Connected", color: "bg-[var(--code-success)]" },
|
|
643
|
+
connecting: { label: "Connecting\u2026", color: "bg-[var(--code-number)]" },
|
|
626
644
|
disconnected: { label: "Disconnected", color: "bg-[var(--code-error)]" },
|
|
627
|
-
provisioning: { label: "Provisioning
|
|
645
|
+
provisioning: { label: "Provisioning\u2026", color: "bg-[var(--code-number)]" }
|
|
628
646
|
};
|
|
629
647
|
function StatusBar({
|
|
630
|
-
modelLabel,
|
|
631
|
-
onModelClick,
|
|
632
648
|
credits,
|
|
633
649
|
contextBadges = [],
|
|
634
650
|
onRemoveBadge,
|
|
@@ -640,26 +656,18 @@ function StatusBar({
|
|
|
640
656
|
"div",
|
|
641
657
|
{
|
|
642
658
|
className: cn(
|
|
643
|
-
"flex items-center gap-3 px-3 py-1 border-t border-
|
|
659
|
+
"flex items-center gap-3 px-3 py-1 border-t border-[var(--md3-outline-variant)] bg-surface-container-high font-sans text-[12px]",
|
|
644
660
|
className
|
|
645
661
|
),
|
|
646
662
|
children: [
|
|
647
|
-
|
|
648
|
-
"
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
className: "inline-flex items-center gap-1.5 px-2 py-0.5 rounded-[2px] border border-border text-muted-foreground hover:border-primary/20 hover:text-foreground transition-colors",
|
|
652
|
-
children: [
|
|
653
|
-
/* @__PURE__ */ jsx4("span", { className: cn("w-1.5 h-1.5 rounded-full", statusInfo.color) }),
|
|
654
|
-
modelLabel
|
|
655
|
-
]
|
|
656
|
-
}
|
|
657
|
-
),
|
|
658
|
-
statusInfo.label && /* @__PURE__ */ jsx4("span", { className: "text-muted-foreground", children: statusInfo.label }),
|
|
663
|
+
/* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-1.5 text-muted-foreground", children: [
|
|
664
|
+
/* @__PURE__ */ jsx4("span", { className: cn("w-1.5 h-1.5 rounded-full", statusInfo.color) }),
|
|
665
|
+
statusInfo.label
|
|
666
|
+
] }),
|
|
659
667
|
contextBadges.map((badge) => /* @__PURE__ */ jsxs4(
|
|
660
668
|
"span",
|
|
661
669
|
{
|
|
662
|
-
className: "inline-flex items-center gap-1 px-2 py-0.5 rounded-[2px] border border-
|
|
670
|
+
className: "inline-flex items-center gap-1 px-2 py-0.5 rounded-[2px] border border-[var(--md3-outline-variant)] text-foreground bg-[var(--border-accent)]/5",
|
|
663
671
|
children: [
|
|
664
672
|
/* @__PURE__ */ jsx4(FileText, { className: "h-3 w-3" }),
|
|
665
673
|
badge.label,
|
|
@@ -678,9 +686,9 @@ function StatusBar({
|
|
|
678
686
|
)),
|
|
679
687
|
/* @__PURE__ */ jsx4("div", { className: "flex-1" }),
|
|
680
688
|
credits !== void 0 && /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-1 text-muted-foreground", children: [
|
|
681
|
-
/* @__PURE__ */ jsx4(Zap, { className: "h-3 w-3" }),
|
|
682
|
-
credits.toLocaleString(),
|
|
683
|
-
" credits"
|
|
689
|
+
/* @__PURE__ */ jsx4(Zap, { className: "h-3 w-3 shrink-0" }),
|
|
690
|
+
/* @__PURE__ */ jsx4("span", { className: "font-mono tabular-nums", children: credits.toLocaleString() }),
|
|
691
|
+
/* @__PURE__ */ jsx4("span", { children: "credits" })
|
|
684
692
|
] })
|
|
685
693
|
]
|
|
686
694
|
}
|
|
@@ -718,7 +726,7 @@ function TerminalPanel({
|
|
|
718
726
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
719
727
|
}
|
|
720
728
|
}, [lines, isCollapsed]);
|
|
721
|
-
return /* @__PURE__ */ jsxs5("div", { className: cn("border-t border-
|
|
729
|
+
return /* @__PURE__ */ jsxs5("div", { className: cn("border-t border-[var(--md3-outline-variant)] bg-surface-container", className), children: [
|
|
722
730
|
/* @__PURE__ */ jsxs5(
|
|
723
731
|
"button",
|
|
724
732
|
{
|
|
@@ -727,7 +735,7 @@ function TerminalPanel({
|
|
|
727
735
|
children: [
|
|
728
736
|
/* @__PURE__ */ jsx5(TerminalIcon, { className: "h-3.5 w-3.5" }),
|
|
729
737
|
/* @__PURE__ */ jsx5("span", { className: "font-medium", children: title }),
|
|
730
|
-
lines.length > 0 && /* @__PURE__ */ jsx5("span", { className: "px-1.5 py-0.5 rounded-full bg-
|
|
738
|
+
lines.length > 0 && /* @__PURE__ */ jsx5("span", { className: "px-1.5 py-0.5 rounded-full bg-surface-container-high text-[10px] tabular-nums", children: lines.length }),
|
|
731
739
|
/* @__PURE__ */ jsx5("div", { className: "flex-1" }),
|
|
732
740
|
onClose && /* @__PURE__ */ jsx5(X3, { className: "h-3 w-3 hover:text-foreground", onClick: (e) => {
|
|
733
741
|
e.stopPropagation();
|
|
@@ -741,7 +749,7 @@ function TerminalPanel({
|
|
|
741
749
|
"div",
|
|
742
750
|
{
|
|
743
751
|
ref: scrollRef,
|
|
744
|
-
className: "overflow-auto px-3 pb-2 font-mono text-xs leading-[1.6]",
|
|
752
|
+
className: "overflow-auto px-3 pb-2 font-mono text-xs leading-[1.6] bg-surface-container-lowest",
|
|
745
753
|
style: { maxHeight },
|
|
746
754
|
children: [
|
|
747
755
|
lines.map((line) => /* @__PURE__ */ jsxs5("div", { className: cn("whitespace-pre-wrap", LINE_COLORS[line.type]), children: [
|
|
@@ -773,19 +781,19 @@ function RuntimePane({
|
|
|
773
781
|
"section",
|
|
774
782
|
{
|
|
775
783
|
className: cn(
|
|
776
|
-
"flex h-full min-h-0 flex-col overflow-hidden bg-
|
|
784
|
+
"flex h-full min-h-0 flex-col overflow-hidden bg-surface-container text-foreground",
|
|
777
785
|
className
|
|
778
786
|
),
|
|
779
787
|
children: [
|
|
780
|
-
/* @__PURE__ */ jsxs6("header", { className: "border-b border-
|
|
788
|
+
/* @__PURE__ */ jsxs6("header", { className: "border-b border-[var(--md3-outline-variant)] bg-surface-container-high bg-[linear-gradient(180deg,rgba(255,255,255,0.03),transparent)] px-4 py-3", children: [
|
|
781
789
|
/* @__PURE__ */ jsx6("div", { className: "mb-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground", children: "Sandbox" }),
|
|
782
790
|
/* @__PURE__ */ jsx6("div", { className: "text-sm font-semibold text-foreground", children: title }),
|
|
783
791
|
/* @__PURE__ */ jsx6("div", { className: "mt-1 text-xs text-muted-foreground", children: subtitle })
|
|
784
792
|
] }),
|
|
785
793
|
statusBanner && /* @__PURE__ */ jsx6(StatusBanner, { ...statusBanner }),
|
|
786
794
|
statusBar && /* @__PURE__ */ jsx6(StatusBar, { ...statusBar }),
|
|
787
|
-
content ? /* @__PURE__ */ jsx6("div", { className: "min-h-0 flex-1 overflow-hidden", children: content }) : /* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 flex-1 gap-px bg-
|
|
788
|
-
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-
|
|
795
|
+
content ? /* @__PURE__ */ jsx6("div", { className: "min-h-0 flex-1 overflow-hidden", children: content }) : /* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 flex-1 gap-px bg-[var(--md3-outline-variant)] lg:grid-cols-[minmax(0,1.35fr)_minmax(20rem,0.9fr)]", children: [
|
|
796
|
+
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: terminal ? /* @__PURE__ */ jsx6(
|
|
789
797
|
TerminalPanel,
|
|
790
798
|
{
|
|
791
799
|
...terminal,
|
|
@@ -795,18 +803,18 @@ function RuntimePane({
|
|
|
795
803
|
/* @__PURE__ */ jsx6(TerminalSquare, { className: "h-4 w-4" }),
|
|
796
804
|
"No terminal activity yet"
|
|
797
805
|
] }) }) }),
|
|
798
|
-
/* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 gap-px bg-
|
|
799
|
-
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-
|
|
806
|
+
/* @__PURE__ */ jsxs6("div", { className: "grid min-h-0 gap-px bg-[var(--md3-outline-variant)]", children: [
|
|
807
|
+
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: audit ? audit : /* @__PURE__ */ jsx6("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
|
|
800
808
|
/* @__PURE__ */ jsx6(ShieldCheck, { className: "h-4 w-4" }),
|
|
801
809
|
"No audit data available"
|
|
802
810
|
] }) }) }),
|
|
803
|
-
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-
|
|
811
|
+
/* @__PURE__ */ jsx6("div", { className: "min-h-0 overflow-auto bg-surface-container", children: inspector ? inspector : /* @__PURE__ */ jsx6("div", { className: "flex h-full items-center justify-center p-6 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
|
|
804
812
|
/* @__PURE__ */ jsx6(Binary, { className: "h-4 w-4" }),
|
|
805
813
|
"No runtime inspector attached"
|
|
806
814
|
] }) }) })
|
|
807
815
|
] })
|
|
808
816
|
] }),
|
|
809
|
-
footer && /* @__PURE__ */ jsx6("footer", { className: "shrink-0 border-t border-
|
|
817
|
+
footer && /* @__PURE__ */ jsx6("footer", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: footer })
|
|
810
818
|
]
|
|
811
819
|
}
|
|
812
820
|
);
|
|
@@ -939,7 +947,7 @@ function badgeTone(tone = "neutral") {
|
|
|
939
947
|
case "danger":
|
|
940
948
|
return "border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]";
|
|
941
949
|
default:
|
|
942
|
-
return "border-
|
|
950
|
+
return "border-[var(--md3-outline-variant)] bg-surface-container-high text-muted-foreground";
|
|
943
951
|
}
|
|
944
952
|
}
|
|
945
953
|
function navigateToHref(href) {
|
|
@@ -1045,10 +1053,10 @@ function SessionSidebar({
|
|
|
1045
1053
|
return /* @__PURE__ */ jsxs7(
|
|
1046
1054
|
"aside",
|
|
1047
1055
|
{
|
|
1048
|
-
className: cn("relative flex shrink-0 flex-col border-r border-
|
|
1056
|
+
className: cn("relative flex shrink-0 flex-col border-r border-[var(--md3-outline-variant)] bg-surface-container-low", className),
|
|
1049
1057
|
style: { width: resizable ? resize.width : defaultWidth },
|
|
1050
1058
|
children: [
|
|
1051
|
-
/* @__PURE__ */ jsx7("div", { className: "flex shrink-0 items-center border-b border-
|
|
1059
|
+
/* @__PURE__ */ jsx7("div", { className: "flex shrink-0 items-center border-b border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-1.5", children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full items-center justify-between gap-2", children: [
|
|
1052
1060
|
/* @__PURE__ */ jsxs7("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
1053
1061
|
/* @__PURE__ */ jsx7("div", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary", children: /* @__PURE__ */ jsx7(MessageSquareText, { className: "h-3.5 w-3.5" }) }),
|
|
1054
1062
|
/* @__PURE__ */ jsxs7("div", { className: "min-w-0", children: [
|
|
@@ -1064,13 +1072,13 @@ function SessionSidebar({
|
|
|
1064
1072
|
type: "button",
|
|
1065
1073
|
onClick: onCreate,
|
|
1066
1074
|
title: createLabel,
|
|
1067
|
-
className: "flex h-7 w-7 items-center justify-center rounded-[var(--radius-sm)] border border-
|
|
1075
|
+
className: "flex h-7 w-7 items-center justify-center rounded-[var(--radius-sm)] border border-[var(--md3-outline-variant)] text-muted-foreground transition-colors hover:bg-[var(--accent-surface-soft)] hover:text-foreground",
|
|
1068
1076
|
children: /* @__PURE__ */ jsx7(Plus, { className: "h-3.5 w-3.5" })
|
|
1069
1077
|
}
|
|
1070
1078
|
)
|
|
1071
1079
|
] })
|
|
1072
1080
|
] }) }),
|
|
1073
|
-
(enableSearch && items.length > 0 || filters.length > 0) && /* @__PURE__ */ jsxs7("div", { className: "shrink-0 border-b border-
|
|
1081
|
+
(enableSearch && items.length > 0 || filters.length > 0) && /* @__PURE__ */ jsxs7("div", { className: "shrink-0 border-b border-[var(--md3-outline-variant)] px-3 py-2.5", children: [
|
|
1074
1082
|
enableSearch && effectiveItems.length > 0 && /* @__PURE__ */ jsxs7("div", { className: "relative", children: [
|
|
1075
1083
|
/* @__PURE__ */ jsx7(Search2, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
|
|
1076
1084
|
/* @__PURE__ */ jsx7(
|
|
@@ -1080,7 +1088,7 @@ function SessionSidebar({
|
|
|
1080
1088
|
onChange: (event) => setQuery(event.target.value),
|
|
1081
1089
|
placeholder: searchPlaceholder,
|
|
1082
1090
|
"aria-label": searchPlaceholder,
|
|
1083
|
-
className: "h-8 w-full rounded-[var(--radius-sm)] border border-
|
|
1091
|
+
className: "h-8 w-full rounded-[var(--radius-sm)] border border-[var(--md3-outline-variant)] bg-surface-container-lowest pl-7 pr-2 text-sm text-foreground placeholder:text-muted-foreground transition-colors focus-visible:border-[var(--border-accent)] focus-visible:bg-transparent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-accent)]"
|
|
1084
1092
|
}
|
|
1085
1093
|
)
|
|
1086
1094
|
] }),
|
|
@@ -1093,7 +1101,7 @@ function SessionSidebar({
|
|
|
1093
1101
|
onClick: () => setActiveFilterId(filter.id),
|
|
1094
1102
|
className: cn(
|
|
1095
1103
|
"inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium transition-colors",
|
|
1096
|
-
isSelected ? "border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary" : "border-
|
|
1104
|
+
isSelected ? "border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary" : "border-[var(--md3-outline-variant)] text-muted-foreground hover:text-foreground"
|
|
1097
1105
|
),
|
|
1098
1106
|
children: [
|
|
1099
1107
|
/* @__PURE__ */ jsx7("span", { children: filter.label }),
|
|
@@ -1174,8 +1182,8 @@ function SessionSidebar({
|
|
|
1174
1182
|
}
|
|
1175
1183
|
) }, item.id);
|
|
1176
1184
|
}) }) }),
|
|
1177
|
-
activityMonitor && /* @__PURE__ */ jsx7("div", { className: "border-t border-
|
|
1178
|
-
links.length > 0 && /* @__PURE__ */ jsx7("nav", { "aria-label": "Workspace sections", className: "border-t border-
|
|
1185
|
+
activityMonitor && /* @__PURE__ */ jsx7("div", { className: "border-t border-[var(--md3-outline-variant)] px-2 py-1.5", children: activityMonitor }),
|
|
1186
|
+
links.length > 0 && /* @__PURE__ */ jsx7("nav", { "aria-label": "Workspace sections", className: "border-t border-[var(--md3-outline-variant)] px-1.5 py-1.5", children: /* @__PURE__ */ jsx7("div", { className: "space-y-px", children: links.map((link) => {
|
|
1179
1187
|
const Icon = iconForLink(link.icon);
|
|
1180
1188
|
return /* @__PURE__ */ jsxs7(
|
|
1181
1189
|
"button",
|
|
@@ -1264,7 +1272,7 @@ function SessionActivityMonitor({
|
|
|
1264
1272
|
const sessionLookup = Object.keys(sessionsById).length > 0 ? sessionsById : Object.fromEntries(trackedSessions.map((session) => [session.sessionId, session]));
|
|
1265
1273
|
if (projectActivity.length === 0) {
|
|
1266
1274
|
if (compact) return null;
|
|
1267
|
-
return /* @__PURE__ */ jsx8("div", { className: cn("rounded-[var(--radius-lg)] border border-
|
|
1275
|
+
return /* @__PURE__ */ jsx8("div", { className: cn("rounded-[var(--radius-lg)] border border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2.5 text-xs text-muted-foreground", className), children: emptyMessage });
|
|
1268
1276
|
}
|
|
1269
1277
|
return /* @__PURE__ */ jsxs8("div", { className: cn("space-y-1.5", className), children: [
|
|
1270
1278
|
/* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between", children: [
|
|
@@ -1279,7 +1287,7 @@ function SessionActivityMonitor({
|
|
|
1279
1287
|
return /* @__PURE__ */ jsxs8(
|
|
1280
1288
|
"div",
|
|
1281
1289
|
{
|
|
1282
|
-
className: "overflow-hidden rounded-[var(--radius-lg)] border border-
|
|
1290
|
+
className: "overflow-hidden rounded-[var(--radius-lg)] border border-[var(--md3-outline-variant)] bg-surface-container",
|
|
1283
1291
|
children: [
|
|
1284
1292
|
/* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between gap-2 px-2.5 py-1.5", children: [
|
|
1285
1293
|
/* @__PURE__ */ jsxs8("div", { className: "min-w-0", children: [
|
|
@@ -1295,7 +1303,7 @@ function SessionActivityMonitor({
|
|
|
1295
1303
|
" live"
|
|
1296
1304
|
] })
|
|
1297
1305
|
] }),
|
|
1298
|
-
!compact && project.runningSessionIds.length > 0 && /* @__PURE__ */ jsx8("div", { className: "border-t border-
|
|
1306
|
+
!compact && project.runningSessionIds.length > 0 && /* @__PURE__ */ jsx8("div", { className: "border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-1 py-0.5", children: project.runningSessionIds.map((sessionId) => {
|
|
1299
1307
|
const session = sessionLookup[sessionId];
|
|
1300
1308
|
if (!session) return null;
|
|
1301
1309
|
return /* @__PURE__ */ jsxs8(
|
|
@@ -1370,15 +1378,15 @@ function ArtifactTabs({
|
|
|
1370
1378
|
onClose
|
|
1371
1379
|
}) {
|
|
1372
1380
|
if (artifacts.length === 0) return null;
|
|
1373
|
-
return /* @__PURE__ */ jsx9("div", { className: "flex items-center overflow-x-auto border-b border-
|
|
1381
|
+
return /* @__PURE__ */ jsx9("div", { className: "flex items-center overflow-x-auto border-b border-[var(--md3-outline-variant)] bg-surface-container-high", children: artifacts.map((artifact) => {
|
|
1374
1382
|
const Icon = getArtifactTabIcon(artifact.kind);
|
|
1375
1383
|
const isActive = artifact.id === activeArtifactId;
|
|
1376
1384
|
return /* @__PURE__ */ jsxs9(
|
|
1377
1385
|
"div",
|
|
1378
1386
|
{
|
|
1379
1387
|
className: cn(
|
|
1380
|
-
"group flex shrink-0 items-center border-r border-
|
|
1381
|
-
isActive ? "text-foreground after:absolute after:top-0 after:left-0 after:right-0 after:h-[2px] after:bg-primary" : "text-muted-foreground hover:bg-
|
|
1388
|
+
"group flex shrink-0 items-center border-r border-[var(--md3-outline-variant)] bg-surface-container relative",
|
|
1389
|
+
isActive ? "text-foreground after:absolute after:top-0 after:left-0 after:right-0 after:h-[2px] after:bg-primary" : "text-muted-foreground hover:bg-surface-container-high cursor-pointer"
|
|
1382
1390
|
),
|
|
1383
1391
|
children: [
|
|
1384
1392
|
/* @__PURE__ */ jsxs9(
|
|
@@ -1550,7 +1558,7 @@ function SandboxWorkbench({
|
|
|
1550
1558
|
}
|
|
1551
1559
|
onArtifactChange?.(artifactId);
|
|
1552
1560
|
};
|
|
1553
|
-
const centerHeader = /* @__PURE__ */ jsxs9("div", { className: "flex min-w-0 items-start justify-between gap-4 rounded-[var(--radius-xl)] border border-
|
|
1561
|
+
const centerHeader = /* @__PURE__ */ jsxs9("div", { className: "flex min-w-0 items-start justify-between gap-4 rounded-[var(--radius-xl)] border border-[var(--md3-outline-variant)] bg-surface-container px-4 py-3.5", children: [
|
|
1554
1562
|
/* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
|
|
1555
1563
|
/* @__PURE__ */ jsx9("div", { className: "text-[10px] font-semibold uppercase tracking-[0.18em] text-primary", children: "Tangle Sandbox" }),
|
|
1556
1564
|
/* @__PURE__ */ jsx9("div", { className: "truncate text-[17px] font-semibold tracking-[0.01em] text-foreground", children: title }),
|
|
@@ -1574,7 +1582,7 @@ function SandboxWorkbench({
|
|
|
1574
1582
|
meta: session.meta,
|
|
1575
1583
|
headerActions: session.headerActions,
|
|
1576
1584
|
className: "h-full",
|
|
1577
|
-
contentClassName: "bg-
|
|
1585
|
+
contentClassName: "bg-surface-container",
|
|
1578
1586
|
children: /* @__PURE__ */ jsxs9("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
1579
1587
|
/* @__PURE__ */ jsx9(
|
|
1580
1588
|
ChatContainer,
|
|
@@ -1584,11 +1592,11 @@ function SandboxWorkbench({
|
|
|
1584
1592
|
presentation: session.presentation ?? "timeline"
|
|
1585
1593
|
}
|
|
1586
1594
|
),
|
|
1587
|
-
composerControls && /* @__PURE__ */ jsx9("div", { className: "shrink-0 border-t border-
|
|
1595
|
+
composerControls && /* @__PURE__ */ jsx9("div", { className: "shrink-0 border-t border-[var(--md3-outline-variant)] bg-surface-container-high px-3 py-2", children: composerControls })
|
|
1588
1596
|
] })
|
|
1589
1597
|
}
|
|
1590
1598
|
);
|
|
1591
|
-
const artifactPanel = artifacts.length > 0 ? /* @__PURE__ */ jsxs9("section", { className: "flex h-full min-h-0 flex-col bg-
|
|
1599
|
+
const artifactPanel = artifacts.length > 0 ? /* @__PURE__ */ jsxs9("section", { className: "flex h-full min-h-0 flex-col bg-surface-container", children: [
|
|
1592
1600
|
/* @__PURE__ */ jsx9(
|
|
1593
1601
|
ArtifactTabs,
|
|
1594
1602
|
{
|
|
@@ -1598,7 +1606,7 @@ function SandboxWorkbench({
|
|
|
1598
1606
|
onClose: onArtifactClose
|
|
1599
1607
|
}
|
|
1600
1608
|
),
|
|
1601
|
-
/* @__PURE__ */ jsx9("div", { className: "min-h-0 flex-1 overflow-auto bg-
|
|
1609
|
+
/* @__PURE__ */ jsx9("div", { className: "min-h-0 flex-1 overflow-auto bg-surface-container", children: activeArtifact ? renderArtifact(activeArtifact) : /* @__PURE__ */ jsx9("div", { className: "flex h-full items-center justify-center p-6", children: emptyArtifactState ?? /* @__PURE__ */ jsx9(
|
|
1602
1610
|
EmptyState2,
|
|
1603
1611
|
{
|
|
1604
1612
|
icon: /* @__PURE__ */ jsx9(Boxes, { className: "h-8 w-8" }),
|
|
@@ -1690,7 +1698,7 @@ function AuditResults({ forms, crossFormChecks = [], overallScore, className })
|
|
|
1690
1698
|
const totalPassed = forms.reduce((s, f) => s + f.passed, 0);
|
|
1691
1699
|
const totalChecks = forms.reduce((s, f) => s + f.passed + f.failed, 0);
|
|
1692
1700
|
return /* @__PURE__ */ jsxs10("div", { className: cn("space-y-3 p-3", className), children: [
|
|
1693
|
-
/* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-3 px-3 py-2 rounded-[var(--radius-md)] bg-
|
|
1701
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-3 px-3 py-2 rounded-[var(--radius-md)] bg-surface-container-high border border-[var(--md3-outline-variant)]", children: [
|
|
1694
1702
|
/* @__PURE__ */ jsx10(Shield, { className: cn("h-5 w-5", totalChecks === totalPassed ? "text-[var(--code-success)]" : "text-[var(--code-number)]") }),
|
|
1695
1703
|
/* @__PURE__ */ jsxs10("div", { children: [
|
|
1696
1704
|
/* @__PURE__ */ jsxs10("div", { className: "text-sm font-semibold text-foreground", children: [
|
|
@@ -1716,7 +1724,7 @@ function AuditResults({ forms, crossFormChecks = [], overallScore, className })
|
|
|
1716
1724
|
function FormAuditCard({ form }) {
|
|
1717
1725
|
const [expanded, setExpanded] = useState6(form.failed > 0);
|
|
1718
1726
|
const allPassed = form.failed === 0 && form.found;
|
|
1719
|
-
return /* @__PURE__ */ jsxs10("div", { className: "rounded-[var(--radius-md)] border border-
|
|
1727
|
+
return /* @__PURE__ */ jsxs10("div", { className: "rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)] bg-surface-container-high overflow-hidden", children: [
|
|
1720
1728
|
/* @__PURE__ */ jsxs10(
|
|
1721
1729
|
"button",
|
|
1722
1730
|
{
|
|
@@ -1734,7 +1742,7 @@ function FormAuditCard({ form }) {
|
|
|
1734
1742
|
]
|
|
1735
1743
|
}
|
|
1736
1744
|
),
|
|
1737
|
-
expanded && /* @__PURE__ */ jsx10("div", { className: "border-t border-
|
|
1745
|
+
expanded && /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--md3-outline-variant)] px-3 py-1.5 space-y-0.5", children: form.checks.map((check, i) => /* @__PURE__ */ jsx10(CheckRow, { check }, i)) })
|
|
1738
1746
|
] });
|
|
1739
1747
|
}
|
|
1740
1748
|
function CheckRow({ check }) {
|
|
@@ -1801,17 +1809,17 @@ function TaskBoard({
|
|
|
1801
1809
|
event.preventDefault();
|
|
1802
1810
|
onClickItem(item);
|
|
1803
1811
|
},
|
|
1804
|
-
className: "group w-full rounded-lg border border-
|
|
1812
|
+
className: "group w-full rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container-high p-3 text-left transition-colors hover:border-accent/50",
|
|
1805
1813
|
children: [
|
|
1806
1814
|
/* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-foreground", children: item.title }),
|
|
1807
1815
|
item.description && /* @__PURE__ */ jsx11("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }),
|
|
1808
1816
|
(item.priority || item.tags?.length) && /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex flex-wrap gap-1.5", children: [
|
|
1809
|
-
item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx11("span", { className: "rounded-full border border-
|
|
1817
|
+
item.priority && (renderBadge ? renderBadge(item.priority, "priority") : /* @__PURE__ */ jsx11("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: item.priority })),
|
|
1810
1818
|
item.tags?.map(
|
|
1811
1819
|
(tag) => renderBadge ? /* @__PURE__ */ jsx11("span", { children: renderBadge(tag, "tag") }, tag) : /* @__PURE__ */ jsx11(
|
|
1812
1820
|
"span",
|
|
1813
1821
|
{
|
|
1814
|
-
className: "rounded-full border border-
|
|
1822
|
+
className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground",
|
|
1815
1823
|
children: tag
|
|
1816
1824
|
},
|
|
1817
1825
|
tag
|
|
@@ -1831,14 +1839,14 @@ function TaskBoard({
|
|
|
1831
1839
|
"div",
|
|
1832
1840
|
{
|
|
1833
1841
|
className: cn(
|
|
1834
|
-
"flex w-72 shrink-0 flex-col rounded-xl border border-
|
|
1842
|
+
"flex w-72 shrink-0 flex-col rounded-xl border border-[var(--md3-outline-variant)] bg-surface-container border-t-2",
|
|
1835
1843
|
col.accent ?? "border-t-muted-foreground/30"
|
|
1836
1844
|
),
|
|
1837
1845
|
children: [
|
|
1838
1846
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between px-4 py-3", children: [
|
|
1839
1847
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2", children: [
|
|
1840
1848
|
/* @__PURE__ */ jsx11("h3", { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: col.label }),
|
|
1841
|
-
/* @__PURE__ */ jsx11("span", { className: "inline-flex h-5 min-w-[20px] items-center justify-center rounded-full border border-
|
|
1849
|
+
/* @__PURE__ */ jsx11("span", { className: "inline-flex h-5 min-w-[20px] items-center justify-center rounded-full border border-[var(--md3-outline-variant)] px-1.5 text-[10px] font-medium text-muted-foreground", children: colItems.length })
|
|
1842
1850
|
] }),
|
|
1843
1851
|
renderColumnAction?.(col)
|
|
1844
1852
|
] }),
|
|
@@ -1943,8 +1951,8 @@ function CalendarView({
|
|
|
1943
1951
|
});
|
|
1944
1952
|
const selectedDayEvents = selectedDay ? eventsByDate[selectedDay] ?? [] : [];
|
|
1945
1953
|
return /* @__PURE__ */ jsxs12("div", { className: cn("flex flex-1 min-h-0 overflow-hidden", className), children: [
|
|
1946
|
-
/* @__PURE__ */ jsxs12("div", { className: "flex-1 flex flex-col overflow-hidden border-r border-
|
|
1947
|
-
/* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-between border-b border-
|
|
1954
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex-1 flex flex-col overflow-hidden border-r border-[var(--md3-outline-variant)]", children: [
|
|
1955
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-between border-b border-[var(--md3-outline-variant)] px-4 py-2.5 shrink-0", children: [
|
|
1948
1956
|
/* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2", children: [
|
|
1949
1957
|
headerLeft,
|
|
1950
1958
|
/* @__PURE__ */ jsx12(
|
|
@@ -1952,7 +1960,7 @@ function CalendarView({
|
|
|
1952
1960
|
{
|
|
1953
1961
|
type: "button",
|
|
1954
1962
|
onClick: prevMonth,
|
|
1955
|
-
className: "h-7 w-7 rounded-md hover:bg-
|
|
1963
|
+
className: "h-7 w-7 rounded-md hover:bg-surface-container-high flex items-center justify-center text-muted-foreground",
|
|
1956
1964
|
children: /* @__PURE__ */ jsx12("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx12("path", { d: "m15 18-6-6 6-6" }) })
|
|
1957
1965
|
}
|
|
1958
1966
|
),
|
|
@@ -1962,7 +1970,7 @@ function CalendarView({
|
|
|
1962
1970
|
{
|
|
1963
1971
|
type: "button",
|
|
1964
1972
|
onClick: nextMonth,
|
|
1965
|
-
className: "h-7 w-7 rounded-md hover:bg-
|
|
1973
|
+
className: "h-7 w-7 rounded-md hover:bg-surface-container-high flex items-center justify-center text-muted-foreground",
|
|
1966
1974
|
children: /* @__PURE__ */ jsx12("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx12("path", { d: "m9 18 6-6-6-6" }) })
|
|
1967
1975
|
}
|
|
1968
1976
|
),
|
|
@@ -1974,14 +1982,14 @@ function CalendarView({
|
|
|
1974
1982
|
setMonth(today.getFullYear(), today.getMonth());
|
|
1975
1983
|
selectDay(todayKey);
|
|
1976
1984
|
},
|
|
1977
|
-
className: "h-7 px-2 rounded-md border border-
|
|
1985
|
+
className: "h-7 px-2 rounded-md border border-[var(--md3-outline-variant)] text-xs font-medium text-muted-foreground hover:text-foreground",
|
|
1978
1986
|
children: "Today"
|
|
1979
1987
|
}
|
|
1980
1988
|
)
|
|
1981
1989
|
] }),
|
|
1982
1990
|
headerRight
|
|
1983
1991
|
] }),
|
|
1984
|
-
/* @__PURE__ */ jsx12("div", { className: "grid grid-cols-7 border-b border-
|
|
1992
|
+
/* @__PURE__ */ jsx12("div", { className: "grid grid-cols-7 border-b border-[var(--md3-outline-variant)] shrink-0", children: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((d) => /* @__PURE__ */ jsx12(
|
|
1985
1993
|
"div",
|
|
1986
1994
|
{
|
|
1987
1995
|
className: "px-2 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground text-center",
|
|
@@ -2000,10 +2008,10 @@ function CalendarView({
|
|
|
2000
2008
|
onClick: () => selectDay(key),
|
|
2001
2009
|
onDoubleClick: () => onDoubleClickDay?.(key),
|
|
2002
2010
|
className: cn(
|
|
2003
|
-
"flex flex-col items-start p-1.5 border-b border-r border-
|
|
2011
|
+
"flex flex-col items-start p-1.5 border-b border-r border-[var(--md3-outline-variant)] text-left transition-colors min-h-[72px]",
|
|
2004
2012
|
!inMonth && "bg-muted/30",
|
|
2005
2013
|
isSelected && "bg-primary/5 ring-1 ring-inset ring-primary/20",
|
|
2006
|
-
!isSelected && "hover:bg-
|
|
2014
|
+
!isSelected && "hover:bg-surface-container-high"
|
|
2007
2015
|
),
|
|
2008
2016
|
children: [
|
|
2009
2017
|
/* @__PURE__ */ jsx12(
|
|
@@ -2043,7 +2051,7 @@ function CalendarView({
|
|
|
2043
2051
|
}) })
|
|
2044
2052
|
] }),
|
|
2045
2053
|
showDayPanel && /* @__PURE__ */ jsx12("div", { className: "w-80 shrink-0 flex flex-col overflow-hidden", children: renderDayDetail ? renderDayDetail(selectedDay ?? todayKey, selectedDayEvents) : /* @__PURE__ */ jsxs12(Fragment3, { children: [
|
|
2046
|
-
/* @__PURE__ */ jsxs12("div", { className: "px-4 py-3 border-b border-
|
|
2054
|
+
/* @__PURE__ */ jsxs12("div", { className: "px-4 py-3 border-b border-[var(--md3-outline-variant)] shrink-0", children: [
|
|
2047
2055
|
/* @__PURE__ */ jsx12("h3", { className: "text-sm font-semibold text-foreground", children: selectedDay === todayKey ? "Today" : selectedDay ? (/* @__PURE__ */ new Date(selectedDay + "T00:00:00")).toLocaleDateString(
|
|
2048
2056
|
"en-US",
|
|
2049
2057
|
{ weekday: "long", month: "long", day: "numeric" }
|
|
@@ -2059,10 +2067,10 @@ function CalendarView({
|
|
|
2059
2067
|
selectedDayEvents.map((evt) => /* @__PURE__ */ jsxs12(
|
|
2060
2068
|
"div",
|
|
2061
2069
|
{
|
|
2062
|
-
className: "rounded-lg border border-
|
|
2070
|
+
className: "rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-3",
|
|
2063
2071
|
children: [
|
|
2064
2072
|
/* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-foreground", children: evt.title }),
|
|
2065
|
-
evt.type && /* @__PURE__ */ jsx12("span", { className: "mt-1 inline-block rounded-full border border-
|
|
2073
|
+
evt.type && /* @__PURE__ */ jsx12("span", { className: "mt-1 inline-block rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: evt.type })
|
|
2066
2074
|
]
|
|
2067
2075
|
},
|
|
2068
2076
|
evt.id
|
|
@@ -2122,9 +2130,9 @@ function ApprovalQueue({
|
|
|
2122
2130
|
stats.length > 0 && /* @__PURE__ */ jsx13("div", { className: "flex gap-3 mb-6 flex-wrap", children: renderStats ? renderStats(stats) : stats.map((s) => /* @__PURE__ */ jsxs13(
|
|
2123
2131
|
"div",
|
|
2124
2132
|
{
|
|
2125
|
-
className: "flex-1 min-w-[120px] rounded-lg border border-
|
|
2133
|
+
className: "flex-1 min-w-[120px] rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-3",
|
|
2126
2134
|
children: [
|
|
2127
|
-
/* @__PURE__ */ jsx13("div", { className: "flex items-center gap-2 mb-1", children: renderTypeBadge ? renderTypeBadge(s.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-
|
|
2135
|
+
/* @__PURE__ */ jsx13("div", { className: "flex items-center gap-2 mb-1", children: renderTypeBadge ? renderTypeBadge(s.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] font-medium text-muted-foreground", children: s.type }) }),
|
|
2128
2136
|
/* @__PURE__ */ jsx13("div", { className: "flex items-baseline gap-1", children: /* @__PURE__ */ jsxs13("span", { className: "text-xl font-semibold text-foreground", children: [
|
|
2129
2137
|
s.rate,
|
|
2130
2138
|
"%"
|
|
@@ -2148,13 +2156,13 @@ function ApprovalQueue({
|
|
|
2148
2156
|
/* @__PURE__ */ jsx13("div", { className: "space-y-3", children: pending.map((item) => /* @__PURE__ */ jsxs13(
|
|
2149
2157
|
"div",
|
|
2150
2158
|
{
|
|
2151
|
-
className: "rounded-lg border border-primary/20 bg-
|
|
2159
|
+
className: "rounded-lg border border-primary/20 bg-surface-container p-4",
|
|
2152
2160
|
children: [
|
|
2153
2161
|
/* @__PURE__ */ jsxs13("div", { className: "flex items-start gap-3", children: [
|
|
2154
2162
|
/* @__PURE__ */ jsxs13("div", { className: "flex-1 min-w-0", children: [
|
|
2155
2163
|
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
2156
2164
|
/* @__PURE__ */ jsx13("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
|
|
2157
|
-
renderTypeBadge ? renderTypeBadge(item.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-
|
|
2165
|
+
renderTypeBadge ? renderTypeBadge(item.type) : /* @__PURE__ */ jsx13("span", { className: "rounded-full border border-[var(--md3-outline-variant)] px-2 py-0.5 text-[10px] text-muted-foreground", children: item.type })
|
|
2158
2166
|
] }),
|
|
2159
2167
|
item.description && /* @__PURE__ */ jsx13("p", { className: "text-xs text-muted-foreground line-clamp-2", children: item.description }),
|
|
2160
2168
|
renderItemDetail?.(item)
|
|
@@ -2165,7 +2173,7 @@ function ApprovalQueue({
|
|
|
2165
2173
|
{
|
|
2166
2174
|
type: "button",
|
|
2167
2175
|
onClick: () => onApprove?.(item),
|
|
2168
|
-
className: "h-8 px-3 rounded-md border border-
|
|
2176
|
+
className: "h-8 px-3 rounded-md border border-[var(--md3-outline-variant)] text-xs font-medium text-emerald-500 hover:bg-emerald-500/10 hover:border-emerald-500/30 transition-colors",
|
|
2169
2177
|
children: "Approve"
|
|
2170
2178
|
}
|
|
2171
2179
|
),
|
|
@@ -2179,20 +2187,20 @@ function ApprovalQueue({
|
|
|
2179
2187
|
);
|
|
2180
2188
|
setRejectReason("");
|
|
2181
2189
|
},
|
|
2182
|
-
className: "h-8 px-3 rounded-md border border-
|
|
2190
|
+
className: "h-8 px-3 rounded-md border border-[var(--md3-outline-variant)] text-xs font-medium text-destructive hover:bg-destructive/10 hover:border-destructive/30 transition-colors",
|
|
2183
2191
|
children: "Reject"
|
|
2184
2192
|
}
|
|
2185
2193
|
)
|
|
2186
2194
|
] })
|
|
2187
2195
|
] }),
|
|
2188
|
-
rejectingId === item.id && /* @__PURE__ */ jsxs13("div", { className: "mt-3 border-t border-
|
|
2196
|
+
rejectingId === item.id && /* @__PURE__ */ jsxs13("div", { className: "mt-3 border-t border-[var(--md3-outline-variant)] pt-3", children: [
|
|
2189
2197
|
/* @__PURE__ */ jsx13(
|
|
2190
2198
|
"textarea",
|
|
2191
2199
|
{
|
|
2192
2200
|
placeholder: "Why are you rejecting this?",
|
|
2193
2201
|
value: rejectReason,
|
|
2194
2202
|
onChange: (e) => setRejectReason(e.target.value),
|
|
2195
|
-
className: "w-full rounded-md border border-
|
|
2203
|
+
className: "w-full rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-low px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary/40 mb-2",
|
|
2196
2204
|
rows: 2
|
|
2197
2205
|
}
|
|
2198
2206
|
),
|
|
@@ -2262,7 +2270,7 @@ function ApprovalQueue({
|
|
|
2262
2270
|
showResolved && /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: resolved.map((item) => /* @__PURE__ */ jsxs13(
|
|
2263
2271
|
"div",
|
|
2264
2272
|
{
|
|
2265
|
-
className: "rounded-lg border border-
|
|
2273
|
+
className: "rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container p-4 opacity-60",
|
|
2266
2274
|
children: [
|
|
2267
2275
|
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
2268
2276
|
/* @__PURE__ */ jsx13("h4", { className: "text-sm font-medium text-foreground", children: item.title }),
|