99 redirect ,
1010} from "@remix-run/server-runtime" ;
1111
12+ import { AnimatePresence , motion } from "framer-motion" ;
1213import { useCallback , useEffect , useRef , useState } from "react" ;
1314import { typedjson , useTypedLoaderData } from "remix-typedjson" ;
1415import { CodeBlock } from "~/components/code/CodeBlock" ;
@@ -474,7 +475,7 @@ export default function PromptDetailPage() {
474475 } ;
475476
476477 return (
477- < PageContainer >
478+ < PageContainer className = "grid-rows-[auto_auto_1fr]" >
478479 < NavBar >
479480 < PageTitle
480481 title = {
@@ -530,26 +531,41 @@ export default function PromptDetailPage() {
530531 </ div >
531532 </ PageAccessories >
532533 </ NavBar >
533- { overrideVersion && (
534- < div className = "flex items-center justify-between bg-amber-500/10 px-4 py-2" >
535- < span className = "text-xs text-amber-300" >
536- Override v{ overrideVersion . version } is active. API calls resolve this version instead of
537- the deployed prompt.
538- </ span >
539- < div className = "flex items-center gap-2" >
540- < Button variant = "tertiary/small" onClick = { ( ) => setOverrideDialogOpen ( true ) } >
541- Edit
542- </ Button >
543- < Button
544- variant = "tertiary/small"
545- onClick = { ( ) => fetcher . submit ( { intent : "removeOverride" } , { method : "POST" } ) }
546- disabled = { fetcher . state !== "idle" }
534+ < div >
535+ < AnimatePresence initial = { false } >
536+ { overrideVersion && (
537+ < motion . div
538+ className = "flex flex-wrap items-center justify-between gap-2 overflow-hidden border-b border-amber-500/10 bg-amber-500/10 pl-4 pr-2"
539+ initial = { { opacity : 0 , height : 0 } }
540+ animate = { { opacity : 1 , height : "auto" } }
541+ exit = { { opacity : 0 , height : 0 } }
542+ transition = { { duration : 0.2 , ease : "easeInOut" } }
547543 >
548- Remove
549- </ Button >
550- </ div >
551- </ div >
552- ) }
544+ < span className = "py-1.5 text-xs text-amber-300" >
545+ Override v{ overrideVersion . version } is active. API calls resolve to this version
546+ instead of the deployed prompt.
547+ </ span >
548+ < div className = "flex items-center gap-2 py-1.5" >
549+ < Button
550+ variant = "tertiary/small"
551+ className = "border-amber-300/50 bg-amber-400/10 text-amber-300 group-hover/button:border-amber-400/60 group-hover/button:bg-amber-500/25 group-hover/button:text-amber-200"
552+ onClick = { ( ) => setOverrideDialogOpen ( true ) }
553+ >
554+ Edit
555+ </ Button >
556+ < Button
557+ variant = "tertiary/small"
558+ className = "border-amber-300/50 bg-amber-400/10 text-amber-300 group-hover/button:border-amber-400/60 group-hover/button:bg-amber-500/25 group-hover/button:text-amber-200"
559+ onClick = { ( ) => fetcher . submit ( { intent : "removeOverride" } , { method : "POST" } ) }
560+ disabled = { fetcher . state !== "idle" }
561+ >
562+ Remove
563+ </ Button >
564+ </ div >
565+ </ motion . div >
566+ ) }
567+ </ AnimatePresence >
568+ </ div >
553569 < PageBody scrollable = { false } >
554570 < ResizablePanelGroup
555571 autosaveId = "prompt-detail"
@@ -718,10 +734,12 @@ export default function PromptDetailPage() {
718734 </ div >
719735
720736 { /* Tab content */ }
721- < div className = { cn (
722- "overflow-y-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600" ,
723- tab === "versions" ? "py-0" : "px-3 py-3"
724- ) } >
737+ < div
738+ className = { cn (
739+ "overflow-y-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600" ,
740+ tab === "versions" ? "py-0" : "px-3 py-3"
741+ ) }
742+ >
725743 { tab === "details" && (
726744 < DetailsTab prompt = { prompt } selectedVersion = { selectedVersion } />
727745 ) }
@@ -1896,11 +1914,7 @@ function VersionsTab({
18961914 < div
18971915 className = { cn (
18981916 "size-2 shrink-0 rounded-full" ,
1899- isOverride
1900- ? "bg-amber-400"
1901- : isCurrent
1902- ? "bg-green-500"
1903- : "bg-charcoal-600"
1917+ isOverride ? "bg-amber-400" : isCurrent ? "bg-green-500" : "bg-charcoal-600"
19041918 ) }
19051919 />
19061920 < span className = "font-medium text-text-bright" > v{ v . version } </ span >
@@ -1911,7 +1925,12 @@ function VersionsTab({
19111925 ) }
19121926 { isCurrent && < Badge variant = "extra-small" > current</ Badge > }
19131927 { isLatest && ! isCurrent && < Badge variant = "extra-small" > latest</ Badge > }
1914- < span className = { cn ( "text-xs" , v . source !== "code" ? "text-amber-400" : "text-text-dimmed" ) } >
1928+ < span
1929+ className = { cn (
1930+ "text-xs" ,
1931+ v . source !== "code" ? "text-amber-400" : "text-text-dimmed"
1932+ ) }
1933+ >
19151934 { v . source }
19161935 </ span >
19171936 </ div >
0 commit comments