3
3
ComponentPropsWithoutRef ,
4
4
ReactNode ,
5
5
useEffect ,
6
+ useMemo ,
6
7
useReducer ,
7
8
useRef ,
8
9
} from "react"
@@ -24,7 +25,8 @@ import {
24
25
} from "./icons"
25
26
import QueryMdx from "./api-gateway-query.mdx"
26
27
import ResponseMdx from "./api-gateway-response.mdx"
27
- import classes from "./wires.module.css"
28
+ import styles from "./wires.module.css"
29
+ import { throttle } from "@/app/conf/_design-system/utils/throttle"
28
30
29
31
function ClientEdges ( {
30
32
highlightedEdge,
@@ -171,14 +173,9 @@ function ClientBoxes({ highlighted }: { highlighted?: number }) {
171
173
< Box
172
174
key = { index }
173
175
transform = { transform }
174
- fill = {
175
- isHighlighted
176
- ? "hsl(var(--color-neu-300))"
177
- : "hsl(var(--color-neu-100))"
178
- }
179
176
className = {
180
177
isHighlighted
181
- ? "[&_path]:fill-neu-800 dark:[&_path]:fill-neu-0 dark:[&_rect]:fill-neu-400"
178
+ ? "[&_path]:fill-neu-800 dark:[&_path]:fill-neu-0 [&_rect]:fill-neu-300 dark:[&_rect]:fill-neu-400"
182
179
: undefined
183
180
}
184
181
>
@@ -468,9 +465,10 @@ const components = {
468
465
pre : ( props : ComponentPropsWithoutRef < typeof Pre > ) => (
469
466
< Pre
470
467
{ ...props }
471
- containerClassName = "!absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 max-sm:scale-75"
468
+ tabIndex = { - 1 }
469
+ containerClassName = "!absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 max-sm:scale-75 pointer-events-auto"
472
470
// the border color on white and black backgrounds blends into border-neu-200 (and border-neu-50 in dark mode)
473
- className = "safari:after:[backdrop-filter:blur(12px)] overflow-hidden border-none !bg-transparent before:absolute before:inset-0 before:-z-10 before:rounded-md before:border before:border-transparent before:bg-[rgba(55,72,13,0.12)] before:bg-clip-border before:[backdrop-filter:url(#what-is-graphql--code-backdrop)] after:absolute after:inset-[1.5px] after:z-[-9] after:rounded-[5px] after:bg-[linear-gradient(to_right,transparent,hsl(var(--color-neu-0))_15%,hsl(var(--color-neu-0))_85%,transparent)] after:[backdrop-filter:url(#what-is-graphql--code-backdrop-2)] dark:before:border-[rgba(235,252,191,0.2)] dark:before:bg-none dark:before:backdrop-blur-xl dark:before:[backdrop-filter:url(#what-is-graphql--code-backdrop-2-dark)] dark:after:bg-[linear-gradient(to_right,hsl(var(--color-neu-0)/0.5),hsl(var(--color-neu-0)/.8)_10%,hsl(var(--color-neu-0)/.8)_83%,hsl(var(--color-neu-0)/0.4))] dark:after:[backdrop-filter:blur(24px)]"
471
+ className = "overflow-hidden border-none !bg-transparent before:absolute before:inset-0 before:-z-10 before:rounded-md before:border before:border-transparent before:bg-[rgba(55,72,13,0.12)] before:bg-clip-border before:[backdrop-filter:url(#what-is-graphql--code-backdrop)] after:absolute after:inset-[1.5px] after:z-[-9] after:rounded-[5px] after:bg-[linear-gradient(to_right,transparent,hsl(var(--color-neu-0))_15%,hsl(var(--color-neu-0))_85%,transparent)] after:[backdrop-filter:url(#what-is-graphql--code-backdrop-2)] safari:after:[backdrop-filter:blur(12px )] dark:before:border-[rgba(235,252,191,0.2)] dark:before:bg-none dark:before:backdrop-blur-xl dark:before:[backdrop-filter:url(#what-is-graphql--code-backdrop-2-dark)] dark:after:bg-[linear-gradient(to_right,hsl(var(--color-neu-0)/0.5),hsl(var(--color-neu-0)/.8)_10%,hsl(var(--color-neu-0)/.8)_83%,hsl(var(--color-neu-0)/0.4))] dark:after:[backdrop-filter:blur(24px)]"
474
472
>
475
473
{ props . children }
476
474
</ Pre >
@@ -496,22 +494,10 @@ export function Wires({ className }: { className?: string }) {
496
494
return ( ) => animate ?. removeEventListener ( "repeatEvent" , inc )
497
495
} , [ ] )
498
496
499
- useEffect ( ( ) => {
500
- const handleKeyDown = ( e : KeyboardEvent ) => {
501
- console . log ( e . key )
502
- if ( e . key === "x" ) {
503
- inc ( )
504
- }
505
- }
506
-
507
- document . addEventListener ( "keydown" , handleKeyDown )
508
- return ( ) => document . removeEventListener ( "keydown" , handleKeyDown )
509
- } , [ ] )
510
-
511
- console . log ( { step } )
497
+ const onBackgroundClick = useMemo ( ( ) => throttle ( inc , 150 ) , [ ] )
512
498
513
499
return (
514
- < div className = { clsx ( className , "relative isolate" , classes . wires ) } >
500
+ < div className = { clsx ( className , "relative isolate" , styles . wires ) } >
515
501
< svg
516
502
id = "what-is-graphql--wires"
517
503
width = "1248"
@@ -529,12 +515,25 @@ export function Wires({ className }: { className?: string }) {
529
515
< ServerBoxes highlighted = { step > 0 ? [ 1 , 6 ] : [ ] } />
530
516
< SVGDefinitions />
531
517
</ svg >
518
+ < button
519
+ tabIndex = { - 1 }
520
+ onClick = { onBackgroundClick }
521
+ aria-label = { step === 2 ? "Show query again" : "Next step" }
522
+ className = "absolute inset-0 outline-none"
523
+ />
532
524
< div
533
525
aria-hidden = { step === 2 }
534
- className = { clsx ( "absolute inset-0 transition" , classes . highlightsQuery ) }
526
+ className = { clsx (
527
+ "pointer-events-none absolute inset-0 transition duration-[600ms]" ,
528
+ styles . highlightsQuery ,
529
+ step === 2
530
+ ? "[transform:rotateX(90deg)_translateY(60px)_translateZ(150px)]"
531
+ : "[transform:rotateX(0deg)_translateY(0px)_translateZ(150px)]" ,
532
+ ) }
535
533
style = {
536
534
{
537
535
"--highlight-opacity" : step === 1 ? 1 : 0 ,
536
+ animation : step === 2 ? `${ styles [ "query-exit" ] } 600ms` : undefined ,
538
537
} as React . CSSProperties
539
538
}
540
539
>
@@ -543,8 +542,13 @@ export function Wires({ className }: { className?: string }) {
543
542
< div
544
543
aria-hidden = { step !== 2 }
545
544
className = { clsx (
546
- "absolute inset-0 translate-y-full" ,
547
- classes . highlightsResponse ,
545
+ "pointer-events-none absolute inset-0 transition duration-[600ms]" ,
546
+ styles . highlightsResponse ,
547
+ step === 2
548
+ ? "[transform:rotateX(0deg)_translateY(0px)_translateZ(150px)]"
549
+ : step === 1
550
+ ? "duration-0 [transform:rotateX(90deg)_translateY(60px)_translateZ(150px)]"
551
+ : "[transform:rotateX(-90deg)_translateY(-60px)_translateZ(150px)]" ,
548
552
) }
549
553
>
550
554
< ResponseMdx components = { components } />
0 commit comments