-
{deployment.shortCode}
+
{deployment.shortCode}
{deployment.label && (
{titleCase(deployment.label)}
)}
@@ -388,14 +390,26 @@ export default function Page() {
)}
- {deploymentParam && (
- <>
-
-
-
-
- >
- )}
+
+
{}}
+ collapsedSize="0px"
+ collapseAnimation={RESIZABLE_PANEL_ANIMATION}
+ >
+
+
+
+
@@ -405,8 +419,8 @@ export default function Page() {
export function UserTag({ name, avatarUrl }: { name: string; avatarUrl?: string }) {
return (
);
}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.logs/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.logs/route.tsx
index 80a5c6ef232..fc9cdb92a5b 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.logs/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.logs/route.tsx
@@ -32,9 +32,12 @@ import { LogsTaskFilter } from "~/components/logs/LogsTaskFilter";
import { LogsRunIdFilter } from "~/components/logs/LogsRunIdFilter";
import { TimeFilter } from "~/components/runs/v3/SharedFilters";
import {
+ RESIZABLE_PANEL_ANIMATION,
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
+ collapsibleHandleClassName,
+ useFrozenValue,
} from "~/components/primitives/Resizable";
import { Button } from "~/components/primitives/Buttons";
import { FEATURE_FLAG, validateFeatureFlagValue } from "~/v3/featureFlags";
@@ -148,7 +151,7 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
from,
to,
defaultPeriod: "1h",
- retentionLimitDays
+ retentionLimitDays,
})
.catch((error) => {
if (error instanceof ServiceValidationError) {
@@ -165,8 +168,7 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
};
export default function Page() {
- const { data, defaultPeriod, retentionLimitDays } =
- useTypedLoaderData
();
+ const { data, defaultPeriod, retentionLimitDays } = useTypedLoaderData();
return (
@@ -192,10 +194,7 @@ export default function Page() {
resolve={data}
errorElement={
-
+
Unable to load your logs. Please refresh the page or try again in a moment.
@@ -228,10 +227,7 @@ export default function Page() {
defaultPeriod={defaultPeriod}
retentionLimitDays={retentionLimitDays}
/>
-
+
);
}}
@@ -409,6 +405,11 @@ function LogsList({
return accumulatedLogs.find((log) => log.id === selectedLogId);
}, [selectedLogId, accumulatedLogs]);
+ const frozenLogId = useFrozenValue(selectedLogId);
+ const frozenLog = useFrozenValue(selectedLog);
+ const displayLogId = selectedLogId ?? frozenLogId;
+ const displayLog = selectedLog ?? frozenLog;
+
const updateUrlWithLog = useCallback((logId: string | undefined) => {
const url = new URL(window.location.href);
if (logId) {
@@ -464,11 +465,21 @@ function LogsList({
onLogSelect={handleLogSelect}
/>
- {/* Side panel for log details */}
- {selectedLogId && (
- <>
-
-
+
+ {}}
+ collapsedSize="0px"
+ collapseAnimation={RESIZABLE_PANEL_ANIMATION}
+ >
+
+ {displayLogId && (
@@ -477,15 +488,15 @@ function LogsList({
}
>
-
- >
- )}
+ )}
+
+
);
}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx
index 394530b6335..2c39461ab2a 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.models._index/route.tsx
@@ -36,9 +36,12 @@ import { Header2 } from "~/components/primitives/Headers";
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
import * as Property from "~/components/primitives/PropertyTable";
import {
+ RESIZABLE_PANEL_ANIMATION,
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
+ collapsibleHandleClassName,
+ useFrozenValue,
} from "~/components/primitives/Resizable";
import { SearchInput } from "~/components/primitives/SearchInput";
import { Switch } from "~/components/primitives/Switch";
@@ -707,7 +710,7 @@ function ModelDetailPanel({
className="pl-1"
/>
-
+
(null);
+ const frozenModel = useFrozenValue(selectedModel);
+ const displayModel = selectedModel ?? frozenModel;
const popularMap = useMemo(() => {
const map = new Map();
@@ -1162,21 +1167,37 @@ export default function ModelsPage() {
/>
- {selectedModel && (
- <>
-
-
+
+ {
+ if (isCollapsed) setSelectedModel(null);
+ }}
+ collapsedSize="0px"
+ collapseAnimation={RESIZABLE_PANEL_ANIMATION}
+ >
+
+ {displayModel && (
setSelectedModel(null)}
/>
-
- >
- )}
+ )}
+
+
}
/>
@@ -309,12 +309,9 @@ export default function Page() {
security portal or{" "}
+
get in touch
-
+
}
defaultValue="help"
/>
@@ -345,20 +342,21 @@ function SetDefaultDialog({
- Set as default…
+ Set as default…
Set as default region
-
+
+
Are you sure you want to set {newDefaultRegion.name} as your new default region?
@@ -441,6 +439,7 @@ function SetDefaultDialog({
Runs triggered from now on will execute in "{newDefaultRegion.name}", unless you{" "}
override when triggering .
+
setIsOpen(false)}>
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
index dc1f3fa2703..8a01627f308 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
@@ -48,10 +48,13 @@ import { Paragraph } from "~/components/primitives/Paragraph";
import { Popover, PopoverArrowTrigger, PopoverContent } from "~/components/primitives/Popover";
import * as Property from "~/components/primitives/PropertyTable";
import {
+ RESIZABLE_PANEL_ANIMATION,
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
type ResizableSnapshot,
+ collapsibleHandleClassName,
+ useFrozenValue,
} from "~/components/primitives/Resizable";
import { ShortcutKey, variants } from "~/components/primitives/ShortcutKey";
import { Slider } from "~/components/primitives/Slider";
@@ -112,7 +115,7 @@ import { SpanView } from "../resources.orgs.$organizationSlug.projects.$projectP
const resizableSettings = {
parent: {
- autosaveId: "panel-run-parent",
+ autosaveId: "panel-run-parent-v2",
handleId: "parent-handle",
main: {
id: "run",
@@ -468,6 +471,8 @@ function TraceView({
const environment = useEnvironment();
const { searchParams, replaceSearchParam } = useReplaceSearchParams();
const selectedSpanId = searchParams.get("span") ?? undefined;
+ const frozenSpanId = useFrozenValue(selectedSpanId);
+ const displaySpanId = selectedSpanId ?? frozenSpanId;
if (!trace) {
return <>>;
@@ -498,12 +503,16 @@ function TraceView({
}, [streamedEvents]); // eslint-disable-line react-hooks/exhaustive-deps
const spanOverrides = selectedSpanId ? overridesBySpanId?.[selectedSpanId] : undefined;
+ const frozenSpanOverrides = useFrozenValue(spanOverrides);
+ const displaySpanOverrides = selectedSpanId ? spanOverrides : frozenSpanOverrides;
// Get the linked run ID for cached spans (map built during RunPresenter walk)
const { linkedRunIdBySpanId } = trace;
const selectedSpanLinkedRunId = selectedSpanId
? linkedRunIdBySpanId?.[selectedSpanId]
: undefined;
+ const frozenLinkedRunId = useFrozenValue(selectedSpanLinkedRunId);
+ const displayLinkedRunId = selectedSpanId ? selectedSpanLinkedRunId : frozenLinkedRunId;
return (
@@ -542,24 +551,36 @@ function TraceView({
treeSnapshot={resizable.tree as ResizableSnapshot}
/>
-
- {selectedSpanId && (
-
+
{}}
+ collapsedSize="0px"
+ collapseAnimation={RESIZABLE_PANEL_ANIMATION}
+ >
+
- {" "}
- replaceSearchParam("span")}
- linkedRunId={selectedSpanLinkedRunId}
- />
-
- )}
+ {displaySpanId && (
+ replaceSearchParam("span")}
+ linkedRunId={displayLinkedRunId}
+ />
+ )}
+
+
);
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
index 9f8cf278bef..ca7e8b7b0c1 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
@@ -20,9 +20,11 @@ import { InfoPanel } from "~/components/primitives/InfoPanel";
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
import { Paragraph } from "~/components/primitives/Paragraph";
import {
+ RESIZABLE_PANEL_ANIMATION,
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
+ collapsibleHandleClassName,
} from "~/components/primitives/Resizable";
import { SelectedItemsProvider } from "~/components/primitives/SelectedItemsProvider";
import { ShortcutKey } from "~/components/primitives/ShortcutKey";
@@ -305,18 +307,32 @@ function RunsList({
>
- {isShowingBulkActionInspector && (
- <>
-
-
+
+ {}}
+ collapsedSize="0px"
+ collapseAnimation={RESIZABLE_PANEL_ANIMATION}
+ >
+
+ {isShowingBulkActionInspector && (
0}
/>
-
- >
- )}
+ )}
+
+
);
}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
index d32f9ecb5b4..769aa10cd75 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules/route.tsx
@@ -25,9 +25,11 @@ import { PaginationControls } from "~/components/primitives/Pagination";
import { Paragraph } from "~/components/primitives/Paragraph";
import * as Property from "~/components/primitives/PropertyTable";
import {
+ RESIZABLE_PANEL_ANIMATION,
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
+ collapsibleHandleClassName,
} from "~/components/primitives/Resizable";
import {
Table,
@@ -304,14 +306,25 @@ export default function Page() {
)}
- {(isShowingNewPane || isShowingSchedule) && (
- <>
-