@epic-web/workshop-app 4.0.0 → 4.1.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/build/client/assets/_layout-CPxDcKGb.js +2 -0
- package/build/client/assets/_layout-CPxDcKGb.js.map +1 -0
- package/build/client/assets/_layout-CV1wRoXz.js +2 -0
- package/build/client/assets/_layout-CV1wRoXz.js.map +1 -0
- package/build/client/assets/{manifest-92896199.js → manifest-fa0c8983.js} +1 -1
- package/build/client/assets/{root-BLcghf_N.js → root-D_snSGY7.js} +2 -2
- package/build/client/assets/root-D_snSGY7.js.map +1 -0
- package/build/client/assets/{tailwind-BStGdHyu.css → tailwind-BypDdelb.css} +1 -1
- package/build/server/index.js +31 -21
- package/build/server/index.js.map +1 -1
- package/package.json +4 -4
- package/build/client/assets/_layout--icRfEZS.js +0 -2
- package/build/client/assets/_layout--icRfEZS.js.map +0 -1
- package/build/client/assets/_layout-CIgVeko6.js +0 -2
- package/build/client/assets/_layout-CIgVeko6.js.map +0 -1
- package/build/client/assets/root-BLcghf_N.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as j,j as e,O as K,b as Q}from"./index-D1WEsmVZ.js";import{c as x}from"./clsx-B-dksMZM.js";import{b as q,s as Y,c as X,d as Z,e as M,m as h,u as ee,f as te}from"./progress-CBZt2pmu.js";import{T as se}from"./index-zG3_j9lj.js";import{c as f,I as b}from"./misc-CXGQ7VS9.js";import{S as I,T as ne,a as D,b as $,c as V}from"./tooltip-CVFWPOu0.js";import{b as S}from"./user-DiGtbaa7.js";import{a as O}from"./presence-u-05JV3Z.js";import{L as u,u as ae,N as W}from"./components-Dj3sm47B.js";import"./index-B8k-Gd1G.js";import"./client-hints-BHTHvBjk.js";function re(t){t.values.forEach(s=>s.stop())}function P(t,s){[...s].reverse().forEach(o=>{const l=t.getVariant(o);l&&Y(t,l),t.variantChildren&&t.variantChildren.forEach(r=>{P(r,s)})})}function oe(t,s){if(Array.isArray(s))return P(t,s);if(typeof s=="string")return P(t,[s]);Y(t,s)}function le(){const t=new Set,s={subscribe(n){return t.add(n),()=>void t.delete(n)},start(n,o){const l=[];return t.forEach(r=>{l.push(q(r,n,{transitionOverride:o}))}),Promise.all(l)},set(n){return t.forEach(o=>{oe(o,n)})},stop(){t.forEach(n=>{re(n)})},mount(){return()=>{s.stop()}}};return s}function _(){const t=X(le);return Z(t.mount,[]),t}const H=["opacity-70","opacity-80","opacity-90","opacity-100"],U=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function A(t){const s=Math.round(t*H.length-1),n=Math.round(t*U.length-1);return f("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",H[s]??"opacity-60",U[n]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function ie({isMenuOpened:t}){const s=S(),{users:n}=O(),o=t?17:0,l=n.length-o;if(!n.length)return null;const r=t&&n.length===1?e.jsx(u,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:f("h-8 w-8 rounded-full border object-cover",A(1)),src:"https://github-production-user-asset-6210df.s3.amazonaws.com/1500684/277090714-b26e5961-4ee5-4c20-abdb-b04c1c480f2b.png"})}):null,m=`${l}${t?" more ":" "}Epic Web Dev${l===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(ne,{children:[n.slice(0,o).map(({user:a,score:c})=>{const p=A(c),d=ce(a.location);return e.jsxs(D,{children:[e.jsx($,{asChild:!0,children:a.avatarUrl?e.jsx("img",{tabIndex:0,alt:a.name||"Epic Web Dev",className:f("h-8 w-8 rounded-full border object-cover",p),src:a.avatarUrl}):e.jsx("div",{tabIndex:0,"aria-label":a.name||"Epic Web Dev",className:f("flex h-8 w-8 items-center justify-center rounded-full border",p),children:e.jsx(b,{name:"User"})})}),e.jsx(V,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{children:[a.name||"An EPIC Web Dev"," ",d?` is working ${c===1&&(s==null?void 0:s.id)!==a.id?"with you":""} on`:null]}),d!=null&&d.line1?e.jsx("span",{children:d.line1}):null,d!=null&&d.line2?e.jsx("span",{children:d.line2}):null]})})]},a.id)}),r,l>0?e.jsxs(D,{children:[e.jsx($,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":m,className:f("flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:f("pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center",t?"w-8":"w-6"),children:t?`+${l}`:l})})}),e.jsx(V,{children:m})]}):null]})})}function Ce(){const t=S(),[s,n]=j.useState(!1);return e.jsxs("div",{className:"flex flex-col",children:[t?null:e.jsx(de,{}),e.jsxs("div",{className:f("flex flex-grow",{"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!t,"h-[calc(100vh-112px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":ENV.EPICSHOP_DEPLOYED,"h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":t}),children:[e.jsx(fe,{isMenuOpened:s,onMenuOpenChange:n}),e.jsx("div",{className:f("h-full w-full max-w-[calc(100%-56px)]",s?"hidden md:block":""),children:e.jsx(K,{})})]})]})}function ce(t){if(!t)return null;const{exercise:s}=t,n=[s?[s.exerciseNumber,s.stepNumber].filter(Boolean).map(o=>o.toString().padStart(2,"0")).join("/"):null,s==null?void 0:s.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:n}}function de(){return e.jsxs("div",{className:f("z-10 flex items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white",ENV.EPICSHOP_DEPLOYED?"h-[112px] md:h-[64px]":"h-16"),children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4",children:[e.jsx(b,{name:"EpicWeb",size:"lg"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(u,{to:"https://www.epicweb.dev",className:"underline",target:"_blank",children:"EpicWeb.dev"})," ","Workshop app!"]}),ENV.EPICSHOP_DEPLOYED?e.jsxs("small",{className:"text-sm",children:["This is the deployed version."," ",ENV.EPICSHOP_GITHUB_ROOT?e.jsx(u,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_ROOT,children:"Run locally"}):null," ","for full experience."]}):null]})]}),e.jsxs("div",{className:"flex h-full flex-col items-center md:flex-row",children:[e.jsxs(u,{to:"https://www.epicweb.dev",target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join Epic Web"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(u,{to:ENV.EPICSHOP_DEPLOYED?"https://www.epicweb.dev/login":"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(b,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})}const z={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function ue({exerciseNumber:t,children:s}){const n=ee(t);return e.jsx(h.li,{variants:z,className:f("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:s})})}function C({children:t,...s}){const n=te(s);return e.jsx(h.li,{variants:z,className:f("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"ml-2",children:t})})}const k=400;function fe({isMenuOpened:t,onMenuOpenChange:s}){const n=ae(),o=S(),l=M(),r=Q(),{users:m}=O(),a=n.exercises.find(i=>i.exerciseNumber===Number(r.exerciseNumber)),c=r.type==="solution"?a==null?void 0:a.solutions.find(i=>i.stepNumber===Number(r.stepNumber)):r.type==="problem"?a==null?void 0:a.problems.find(i=>i.stepNumber===Number(r.stepNumber)):null,p=_(),d={close:{width:56},open:{width:k}},g={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}},L=Number(r.exerciseNumber).toString().padStart(2,"0");return e.jsx("nav",{className:"flex border-r",children:e.jsx(h.div,{initial:t?"open":"close",variants:d,animate:p,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(he,{title:n.workshopTitle,menuControls:p,isMenuOpened:t,setMenuOpened:s}),t&&e.jsxs(h.div,{style:{width:k},className:"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsx(h.ul,{variants:g,initial:"hidden",animate:"visible",className:"flex flex-col",children:n.exercises.map(({exerciseNumber:i,title:B,steps:R})=>{const N=Number(r.exerciseNumber)===i,F=!N&&n.playground.exerciseNumber===i,v=i.toString().padStart(2,"0");return e.jsxs(ue,{exerciseNumber:i,children:[e.jsxs(u,{prefetch:"intent",to:`/${v}`,className:x("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":N}),children:[B,F?" 🛝":null]}),N?e.jsxs(h.ul,{variants:g,initial:"hidden",animate:"visible",className:"ml-4 mt-4 flex flex-col",children:[e.jsx(C,{type:"instructions",exerciseNumber:i,children:e.jsx(u,{to:`/${v}`,prefetch:"intent",className:x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!r.stepNumber}),children:"Intro"})},i),R.filter(Boolean).map(({name:y,stepNumber:w,title:T})=>{const G=Number(r.stepNumber)===w,E=w.toString().padStart(2,"0"),J=y===n.playground.appName;return e.jsx(C,{type:"step",stepNumber:w,exerciseNumber:i,children:e.jsx(u,{to:`/${v}/${E}`,prefetch:"intent",className:x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":G}),children:J?`${E}. ${T} 🛝`:`${E}. ${T}`})},w)}),e.jsx(C,{type:"finished",exerciseNumber:i,children:e.jsx(W,{to:`/${v}/finished`,prefetch:"intent",className:({isActive:y})=>x('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":y}),children:"📝 Elaboration"})})]}):null]},i)})}),e.jsx("div",{className:"mt-6",children:e.jsx(W,{to:"/finished",className:({isActive:i})=>x("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':i}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex flex-grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none",children:[a!=null&&a.title?e.jsx(u,{to:`/${L}`,children:a.title}):null,a!=null&&a.title&&(c!=null&&c.title)?" — ":null,c!=null&&c.title?e.jsx(u,{to:`/${L}/${c.stepNumber.toString().padStart(2,"0")}`,children:c.title}):null]})}),e.jsx("div",{className:f("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&m.length>4?"h-28":"h-14"),style:t?{width:k}:{},children:e.jsx(ie,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:o?e.jsx(I,{content:t?null:"Your account",children:e.jsxs(u,{className:"flex h-14 w-full items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[o.avatarUrl?e.jsx("img",{alt:o.name??o.email,src:o.avatarUrl,className:"h-full rounded-full"}):e.jsx(b,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:o&&l?e.jsx(I,{content:t?null:"Continue to next lesson",children:e.jsxs(u,{to:l,prefetch:"intent",className:x("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(b,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(h.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pl-3 pt-[15px]",children:e.jsx(se,{})})]})})})}function he({title:t,isMenuOpened:s,setMenuOpened:n,menuControls:o}){const l={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},r={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},m=_(),a=_();async function c(){o.start(s?"close":"open"),n(!s),s?(m.start(l.closed),await a.start(r.moving),a.start(r.closed)):(await a.start(r.moving),m.start(l.open),a.start(r.open))}const p=j.useRef(c);return j.useEffect(()=>{p.current=c}),j.useEffect(()=>{if(!s)return;function d(g){g.key==="Escape"&&p.current()}return document.addEventListener("keyup",d),()=>document.removeEventListener("keyup",d)},[s]),e.jsxs("div",{className:"relative inline-flex h-14 w-full items-center justify-between overflow-hidden border-b",children:[e.jsx("button",{className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:c,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(h.path,{...l.closed,animate:m,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(h.path,{...r.closed,animate:a,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),s&&e.jsx(h.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 whitespace-nowrap font-mono text-sm uppercase",children:e.jsx(u,{to:"/",children:t})})]})}export{Ce as default};
|
|
2
|
+
//# sourceMappingURL=_layout-CPxDcKGb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_layout-CPxDcKGb.js","sources":["../../../../../node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs","../../../../../node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs","../../../app/routes/_app+/_layout.tsx"],"sourcesContent":["import { invariant } from '../../utils/errors.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { animateVisualElement } from '../interfaces/visual-element.mjs';\n\nfunction stopAnimation(visualElement) {\n visualElement.values.forEach((value) => value.stop());\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\n/**\n * @public\n */\nfunction animationControls() {\n /**\n * Track whether the host component has mounted.\n */\n let hasMounted = false;\n /**\n * A collection of linked component animation controls.\n */\n const subscribers = new Set();\n const controls = {\n subscribe(visualElement) {\n subscribers.add(visualElement);\n return () => void subscribers.delete(visualElement);\n },\n start(definition, transitionOverride) {\n invariant(hasMounted, \"controls.start() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n const animations = [];\n subscribers.forEach((visualElement) => {\n animations.push(animateVisualElement(visualElement, definition, {\n transitionOverride,\n }));\n });\n return Promise.all(animations);\n },\n set(definition) {\n invariant(hasMounted, \"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n return subscribers.forEach((visualElement) => {\n setValues(visualElement, definition);\n });\n },\n stop() {\n subscribers.forEach((visualElement) => {\n stopAnimation(visualElement);\n });\n },\n mount() {\n hasMounted = true;\n return () => {\n hasMounted = false;\n controls.stop();\n };\n },\n };\n return controls;\n}\n\nexport { animationControls, setValues };\n","import { animationControls } from './animation-controls.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\n\n/**\n * Creates `AnimationControls`, which can be used to manually start, stop\n * and sequence animations on one or more components.\n *\n * The returned `AnimationControls` should be passed to the `animate` property\n * of the components you want to animate.\n *\n * These components can then be animated with the `start` method.\n *\n * ```jsx\n * import * as React from 'react'\n * import { motion, useAnimation } from 'framer-motion'\n *\n * export function MyComponent(props) {\n * const controls = useAnimation()\n *\n * controls.start({\n * x: 100,\n * transition: { duration: 0.5 },\n * })\n *\n * return <motion.div animate={controls} />\n * }\n * ```\n *\n * @returns Animation controller with `start` and `stop` methods\n *\n * @public\n */\nfunction useAnimationControls() {\n const controls = useConstant(animationControls);\n useIsomorphicLayoutEffect(controls.mount, []);\n return controls;\n}\nconst useAnimation = useAnimationControls;\n\nexport { useAnimation, useAnimationControls };\n","import {\n\textractNumbersAndTypeFromAppNameOrPath,\n\tgetExercises,\n\tgetPlaygroundAppName,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype LoaderFunctionArgs,\n\ttype HeadersFunction,\n\tjson,\n} from '@remix-run/node'\nimport {\n\tLink,\n\tNavLink,\n\tOutlet,\n\tuseLoaderData,\n\tuseParams,\n} from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport {\n\ttype AnimationControls,\n\tmotion,\n\tuseAnimationControls,\n} from 'framer-motion'\nimport * as React from 'react'\nimport {\n\tuseNextExerciseRoute,\n\tuseExerciseProgressClassName,\n\ttype ProgressItemSearch,\n\tuseProgressItemClassName,\n} from '../progress.tsx'\nimport { ThemeSwitch } from '../theme/index.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tSimpleTooltip,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from '#app/components/ui/tooltip.tsx'\nimport { useOptionalUser } from '#app/components/user.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { type User, usePresence } from '#app/utils/presence.tsx'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tconst [exercises, workshopTitle, playgroundAppName] = await Promise.all([\n\t\tgetExercises({ request, timings }),\n\t\tgetWorkshopTitle(),\n\t\tgetPlaygroundAppName(),\n\t])\n\n\tconst playground = {\n\t\tappName: playgroundAppName,\n\t\texerciseNumber: Number(\n\t\t\textractNumbersAndTypeFromAppNameOrPath(playgroundAppName ?? '')\n\t\t\t\t?.exerciseNumber,\n\t\t),\n\t}\n\n\tconst result = json(\n\t\t{\n\t\t\tworkshopTitle,\n\t\t\texercises: exercises.map(e => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t\tsolutions: e.solutions.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tproblems: e.problems.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tsteps: e.steps.map(({ stepNumber, problem, solution }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle: problem?.title ?? solution?.title ?? 'Unknown',\n\t\t\t\t\tname: problem?.name ?? solution?.name ?? 'Unknown',\n\t\t\t\t})),\n\t\t\t})),\n\t\t\tplayground,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tVary: 'Cookie',\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\tVary: 'Cookie',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst opacities = ['opacity-70', 'opacity-80', 'opacity-90', 'opacity-100']\nconst shadows = [\n\t'shadow-[0_0_2px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_4px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_7px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_10px_0_rgba(0,0,0,0.3)]',\n]\nfunction getScoreClassNames(score: number) {\n\tconst opacityNumber = Math.round(score * opacities.length - 1)\n\tconst shadowNumber = Math.round(score * shadows.length - 1)\n\treturn cn(\n\t\t'shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200',\n\t\topacities[opacityNumber] ?? 'opacity-60',\n\t\tshadows[shadowNumber] ?? 'shadow-none',\n\t\tscore === 1 ? 'animate-pulse hover:animate-none focus:animate-none' : null,\n\t)\n}\n\nfunction FacePile({ isMenuOpened }: { isMenuOpened: boolean }) {\n\tconst loggedInUser = useOptionalUser()\n\tconst { users } = usePresence()\n\tconst limit = isMenuOpened ? 17 : 0\n\tconst numberOverLimit = users.length - limit\n\tif (!users.length) return null\n\tconst tiffany =\n\t\tisMenuOpened && users.length === 1 ? (\n\t\t\t<Link\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tto=\"https://www.youtube.com/watch?v=w6Q3mHyzn78\"\n\t\t\t>\n\t\t\t\t<img\n\t\t\t\t\talt=\"Tiffany Tunes\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\tgetScoreClassNames(1),\n\t\t\t\t\t)}\n\t\t\t\t\tsrc=\"https://github-production-user-asset-6210df.s3.amazonaws.com/1500684/277090714-b26e5961-4ee5-4c20-abdb-b04c1c480f2b.png\"\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t) : null\n\tconst overLimitLabel = `${numberOverLimit}${\n\t\tisMenuOpened ? ' more ' : ' '\n\t}Epic Web Dev${numberOverLimit === 1 ? '' : 's'} working now`\n\treturn (\n\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t<TooltipProvider>\n\t\t\t\t{users.slice(0, limit).map(({ user, score }) => {\n\t\t\t\t\tconst scoreClassNames = getScoreClassNames(score)\n\t\t\t\t\tconst locationLabel = getLocationLabel(user.location)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tooltip key={user.id}>\n\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t{user.avatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\talt={user.name || 'Epic Web Dev'}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tsrc={user.avatarUrl}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\taria-label={user.name || 'Epic Web Dev'}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'flex h-8 w-8 items-center justify-center rounded-full border',\n\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"User\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t<span className=\"flex flex-col items-center justify-center gap-1\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{user.name || 'An EPIC Web Dev'}{' '}\n\t\t\t\t\t\t\t\t\t\t{locationLabel\n\t\t\t\t\t\t\t\t\t\t\t? ` is working ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tscore === 1 && loggedInUser?.id !== user.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'with you'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t} on`\n\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{locationLabel?.line1 ? (\n\t\t\t\t\t\t\t\t\t\t<span>{locationLabel.line1}</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t{locationLabel?.line2 ? (\n\t\t\t\t\t\t\t\t\t\t<span>{locationLabel.line2}</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t\t{tiffany}\n\t\t\t\t{numberOverLimit > 0 ? (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\taria-label={overLimitLabel}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground',\n\t\t\t\t\t\t\t\t\tisMenuOpened ? 'h-8 w-8' : 'h-6 w-6',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center',\n\t\t\t\t\t\t\t\t\t\tisMenuOpened ? 'w-8' : 'w-6',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMenuOpened ? `+${numberOverLimit}` : numberOverLimit}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>{overLimitLabel}</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : null}\n\t\t\t</TooltipProvider>\n\t\t</div>\n\t)\n}\n\nexport default function App() {\n\tconst user = useOptionalUser()\n\n\tconst [isMenuOpened, setMenuOpened] = React.useState(false)\n\n\treturn (\n\t\t<div className=\"flex flex-col\">\n\t\t\t{user ? null : <EpicWebBanner />}\n\t\t\t<div\n\t\t\t\tclassName={cn('flex flex-grow', {\n\t\t\t\t\t'h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\t!user,\n\t\t\t\t\t'h-[calc(100vh-112px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED,\n\t\t\t\t\t'h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\tuser,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<Navigation\n\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\tonMenuOpenChange={setMenuOpened}\n\t\t\t\t/>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-full w-full max-w-[calc(100%-56px)]',\n\t\t\t\t\t\tisMenuOpened ? 'hidden md:block' : '',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Outlet />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction getLocationLabel(location: User['location']) {\n\tif (!location) return null\n\n\tconst { exercise } = location\n\n\tconst exercisePortion = [\n\t\texercise\n\t\t\t? [exercise.exerciseNumber, exercise.stepNumber]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.map(s => s.toString().padStart(2, '0'))\n\t\t\t\t\t.join('/')\n\t\t\t: null,\n\t\texercise?.type,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' - ')\n\treturn { line1: location.workshopTitle, line2: exercisePortion }\n}\n\nfunction EpicWebBanner() {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'z-10 flex items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white',\n\t\t\t\tENV.EPICSHOP_DEPLOYED ? 'h-[112px] md:h-[64px]' : 'h-16',\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex flex-1 flex-wrap items-center gap-4\">\n\t\t\t\t<Icon name=\"EpicWeb\" size=\"lg\" />\n\t\t\t\t<div className=\"flex flex-1 flex-wrap items-center\">\n\t\t\t\t\t<p className=\"mr-2\">\n\t\t\t\t\t\tWelcome to the{' '}\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"https://www.epicweb.dev\"\n\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tEpicWeb.dev\n\t\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t\tWorkshop app!\n\t\t\t\t\t</p>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? (\n\t\t\t\t\t\t<small className=\"text-sm\">\n\t\t\t\t\t\t\tThis is the deployed version.{' '}\n\t\t\t\t\t\t\t{ENV.EPICSHOP_GITHUB_ROOT ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\tto={ENV.EPICSHOP_GITHUB_ROOT}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tRun locally\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : null}{' '}\n\t\t\t\t\t\t\tfor full experience.\n\t\t\t\t\t\t</small>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-col items-center md:flex-row\">\n\t\t\t\t<Link\n\t\t\t\t\tto=\"https://www.epicweb.dev\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"drop-shadow-sm\">Join Epic Web</span>\n\t\t\t\t\t<span>↗︎</span>\n\t\t\t\t</Link>\n\t\t\t\t<Link\n\t\t\t\t\tto={\n\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED ? 'https://www.epicweb.dev/login' : '/login'\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"User\" size=\"lg\" />\n\t\t\t\t\t<span className=\"drop-shadow-sm\">Login</span>\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst itemVariants = {\n\thidden: { opacity: 0, x: -20 },\n\tvisible: { opacity: 1, x: 0 },\n}\nfunction NavigationExerciseListItem({\n\texerciseNumber,\n\tchildren,\n}: {\n\texerciseNumber: number\n\tchildren: React.ReactNode\n}) {\n\tconst progressClassName = useExerciseProgressClassName(exerciseNumber)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"ml-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nfunction NavigationExerciseStepListItem({\n\tchildren,\n\t...progressItemSearch\n}: {\n\tchildren: React.ReactNode\n} & ProgressItemSearch) {\n\tconst progressClassName = useProgressItemClassName(progressItemSearch)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"ml-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nconst OPENED_MENU_WIDTH = 400\n\nfunction Navigation({\n\tisMenuOpened,\n\tonMenuOpenChange: setMenuOpened,\n}: {\n\tisMenuOpened: boolean\n\tonMenuOpenChange: (change: boolean) => void\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst user = useOptionalUser()\n\tconst nextExerciseRoute = useNextExerciseRoute()\n\tconst params = useParams()\n\tconst { users } = usePresence()\n\n\tconst exercise = data.exercises.find(\n\t\te => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tconst app =\n\t\tparams.type === 'solution'\n\t\t\t? exercise?.solutions.find(\n\t\t\t\t\ts => s.stepNumber === Number(params.stepNumber),\n\t\t\t\t)\n\t\t\t: params.type === 'problem'\n\t\t\t\t? exercise?.problems.find(\n\t\t\t\t\t\tp => p.stepNumber === Number(params.stepNumber),\n\t\t\t\t\t)\n\t\t\t\t: null\n\n\t// container\n\tconst menuControls = useAnimationControls()\n\tconst menuVariants = {\n\t\tclose: { width: 56 },\n\t\topen: { width: OPENED_MENU_WIDTH },\n\t}\n\n\t// items\n\tconst listVariants = {\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tduration: 0.05,\n\t\t\t\twhen: 'beforeChildren',\n\t\t\t\tstaggerChildren: 0.03,\n\t\t\t},\n\t\t},\n\t\thidden: {\n\t\t\topacity: 0,\n\t\t},\n\t}\n\tconst exNum = Number(params.exerciseNumber).toString().padStart(2, '0')\n\n\treturn (\n\t\t<nav className=\"flex border-r\">\n\t\t\t<motion.div\n\t\t\t\tinitial={isMenuOpened ? 'open' : 'close'}\n\t\t\t\tvariants={menuVariants}\n\t\t\t\tanimate={menuControls}\n\t\t\t>\n\t\t\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t\t\t<NavToggle\n\t\t\t\t\t\ttitle={data.workshopTitle}\n\t\t\t\t\t\tmenuControls={menuControls}\n\t\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\t\tsetMenuOpened={setMenuOpened}\n\t\t\t\t\t/>\n\t\t\t\t\t{isMenuOpened && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tstyle={{ width: OPENED_MENU_WIDTH }}\n\t\t\t\t\t\t\tclassName=\"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\tclassName=\"flex flex-col\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{data.exercises.map(({ exerciseNumber, title, steps }) => {\n\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\tNumber(params.exerciseNumber) === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst showPlayground =\n\t\t\t\t\t\t\t\t\t\t!isActive &&\n\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst exerciseNum = exerciseNumber.toString().padStart(2, '0')\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<NavigationExerciseListItem\n\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t{showPlayground ? ' 🛝' : null}\n\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t{isActive ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ml-4 mt-4 flex flex-col\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"instructions\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!params.stepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tIntro\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{steps\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(({ name, stepNumber, title }) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNumber(params.stepNumber) === stepNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst step = stepNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.padStart(2, '0')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isPlayground =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname === data.playground.appName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}/${step}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isPlayground\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? `${step}. ${title} 🛝`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `${step}. ${title}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={`/${exerciseNum}/finished`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-foreground text-background': isActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t📝 Elaboration\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</NavigationExerciseListItem>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t<div className=\"mt-6\">\n\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\tto=\"/finished\"\n\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t'relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[\"\"]':\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t📝 Workshop Feedback\n\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!isMenuOpened && (\n\t\t\t\t\t\t<div className=\"flex flex-grow flex-col justify-center\">\n\t\t\t\t\t\t\t<div className=\"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none\">\n\t\t\t\t\t\t\t\t{exercise?.title ? (\n\t\t\t\t\t\t\t\t\t<Link to={`/${exNum}`}>{exercise.title}</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t{exercise?.title && app?.title ? ' — ' : null}\n\t\t\t\t\t\t\t\t{app?.title ? (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={`/${exNum}/${app.stepNumber\n\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t.padStart(2, '0')}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{app.title}\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'flex w-full items-center justify-start border-t p-4 transition-[height]',\n\t\t\t\t\t\t\tisMenuOpened && users.length > 4 ? 'h-28' : 'h-14',\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={isMenuOpened ? { width: OPENED_MENU_WIDTH } : {}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FacePile isMenuOpened={isMenuOpened} />\n\t\t\t\t\t</div>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user ? (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'Your account'}>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tclassName=\"flex h-14 w-full items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline\"\n\t\t\t\t\t\t\t\tto=\"/account\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{user.avatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\talt={user.name ?? user.email}\n\t\t\t\t\t\t\t\t\t\tsrc={user.avatarUrl}\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-full rounded-full\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Icon name=\"User\" className=\"flex-shrink-0\" size=\"lg\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tYour Account\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Your account</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? (\n\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\tcontent={isMenuOpened ? null : 'Continue to next lesson'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={nextExerciseRoute}\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstate={{ from: 'continue next lesson button' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"FastForward\" className=\"flex-shrink-0\" size=\"md\" />\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tContinue to next lesson\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Continue to next lesson</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div className=\"mb-4 w-full self-start border-t pl-3 pt-[15px]\">\n\t\t\t\t\t\t<ThemeSwitch />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</nav>\n\t)\n}\n\nfunction NavToggle({\n\ttitle,\n\tisMenuOpened,\n\tsetMenuOpened,\n\tmenuControls,\n}: {\n\ttitle: string\n\tisMenuOpened: boolean\n\tsetMenuOpened: (value: boolean) => void\n\tmenuControls: AnimationControls\n}) {\n\tconst path01Variants = {\n\t\topen: { d: 'M3.06061 2.99999L21.0606 21' },\n\t\tclosed: { d: 'M0 9.5L24 9.5' },\n\t}\n\tconst path02Variants = {\n\t\topen: { d: 'M3.00006 21.0607L21 3.06064' },\n\t\tmoving: { d: 'M0 14.5L24 14.5' },\n\t\tclosed: { d: 'M0 14.5L15 14.5' },\n\t}\n\tconst path01Controls = useAnimationControls()\n\tconst path02Controls = useAnimationControls()\n\n\tasync function toggleMenu() {\n\t\tvoid menuControls.start(isMenuOpened ? 'close' : 'open')\n\t\tsetMenuOpened(!isMenuOpened)\n\t\tif (isMenuOpened) {\n\t\t\tvoid path01Controls.start(path01Variants.closed)\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path02Controls.start(path02Variants.closed)\n\t\t} else {\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path01Controls.start(path01Variants.open)\n\t\t\tvoid path02Controls.start(path02Variants.open)\n\t\t}\n\t}\n\n\tconst latestToggleMenu = React.useRef(toggleMenu)\n\tReact.useEffect(() => {\n\t\tlatestToggleMenu.current = toggleMenu\n\t})\n\n\tReact.useEffect(() => {\n\t\tif (!isMenuOpened) return\n\n\t\tfunction handleKeyUp(event: KeyboardEvent) {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tvoid latestToggleMenu.current()\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener('keyup', handleKeyUp)\n\t\treturn () => document.removeEventListener('keyup', handleKeyUp)\n\t}, [isMenuOpened])\n\n\treturn (\n\t\t<div className=\"relative inline-flex h-14 w-full items-center justify-between overflow-hidden border-b\">\n\t\t\t<button\n\t\t\t\tclassName=\"flex h-14 w-14 items-center justify-center\"\n\t\t\t\taria-label=\"Open Navigation menu\"\n\t\t\t\tonClick={toggleMenu}\n\t\t\t>\n\t\t\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path01Variants.closed}\n\t\t\t\t\t\tanimate={path01Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path02Variants.closed}\n\t\t\t\t\t\tanimate={path02Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\t\t\t{isMenuOpened && (\n\t\t\t\t<motion.p\n\t\t\t\t\ttransition={{ delay: 0.2 }}\n\t\t\t\t\tinitial={{ opacity: 0, y: 5 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\tclassName=\"absolute right-5 whitespace-nowrap font-mono text-sm uppercase\"\n\t\t\t\t>\n\t\t\t\t\t<Link to=\"/\">{title}</Link>\n\t\t\t\t</motion.p>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["stopAnimation","visualElement","value","setVariants","variantLabels","key","variant","setTarget","child","setValues","definition","animationControls","subscribers","controls","transitionOverride","animations","animateVisualElement","useAnimationControls","useConstant","useIsomorphicLayoutEffect","opacities","shadows","getScoreClassNames","score","opacityNumber","shadowNumber","cn","FacePile","isMenuOpened","loggedInUser","useOptionalUser","users","usePresence","limit","numberOverLimit","tiffany","jsx","Link","overLimitLabel","jsxs","TooltipProvider","user","scoreClassNames","locationLabel","getLocationLabel","Tooltip","TooltipTrigger","Icon","TooltipContent","headers","setMenuOpened","React.useState","EpicWebBanner","Navigation","Outlet","location","exercise","exercisePortion","s","itemVariants","NavigationExerciseListItem","exerciseNumber","children","progressClassName","motion","progressItemSearch","useProgressItemClassName","OPENED_MENU_WIDTH","data","useLoaderData","nextExerciseRoute","useNextExerciseRoute","params","useParams","e","app","p","menuControls","menuVariants","listVariants","exNum","NavToggle","title","steps","isActive","showPlayground","exerciseNum","clsx","NavigationExerciseStepListItem","name","stepNumber","title2","isPlayground","step","isActive2","NavLink","SimpleTooltip","ThemeSwitch","path01Variants","path02Variants","path01Controls","path02Controls","toggleMenu","latestToggleMenu","React.useRef","React.useEffect","handleKeyUp","event"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as i,l as he,h as xe,j as e,d as mt}from"./index-D1WEsmVZ.js";import{E as ht}from"./index-BfoHqrT5.js";import{$ as Ne,_ as B,d as Se,e as Pe,f as xt,g as te,h as z,i as Ee,j as Ce,S as J,T as bt,a as fe,b as pe,c as me,k as Ye,l as gt,m as vt,n as $t,o as jt,p as wt}from"./tooltip-CVFWPOu0.js";import{$ as yt,a as Be,b as Nt,c as St,d as Pt,e as Et,f as Ct,g as Tt,h as Dt,i as Ot,j as Rt,k as kt,l as _t,m as Mt,n as It,o as Ft,p as Lt,A as At,q as Ut,r as Ht,s as Yt,t as Bt,u as Vt,D as zt}from"./diff-MSYB00VZ.js";import{c as ee}from"./clsx-B-dksMZM.js";import{D as Gt,u as Kt}from"./discord-CsluX01E.js";import{u as Te,I as k,a as De,c as ve,b as Oe}from"./misc-CXGQ7VS9.js";import{L as Ve}from"./loading-CaagEELb.js";import{u as Wt,a as Re}from"./client-hints-BHTHvBjk.js";import{u as K,A as ze,L as ae,a as W,d as ke,F as Zt}from"./components-Dj3sm47B.js";import{A as qt}from"./index-BL4aE6WC.js";import{s as _e}from"./progress-bar-DX6yYES2.js";import{z as m}from"./index-B8k-Gd1G.js";import{B as Ge}from"./button-DnQOyJAN.js";import{E as Jt}from"./epic-video-BwJwnV_j.js";import{M as Qt,L as le,E as Xt}from"./mdx-DdywIxB6.js";import{u as en}from"./use-event-source-DXlRuRq2.js";import{G as tn}from"./error-boundary-Bg54_knF.js";import{N as nn}from"./nav-chevrons-D8c9lJW6.js";import{P as rn}from"./progress-CBZt2pmu.js";import"./user-DiGtbaa7.js";import"./index-zG3_j9lj.js";const ge="rovingFocusGroup.onEntryFocus",sn={bubbles:!1,cancelable:!0},Me="RovingFocusGroup",[$e,Ke,an]=yt(Me),[on,We]=Ne(Me,[an]),[cn,ln]=on(Me),un=i.forwardRef((t,r)=>i.createElement($e.Provider,{scope:t.__scopeRovingFocusGroup},i.createElement($e.Slot,{scope:t.__scopeRovingFocusGroup},i.createElement(dn,B({},t,{ref:r}))))),dn=i.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,orientation:n,loop:a=!1,dir:o,currentTabStopId:c,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:l,onEntryFocus:x,...d}=t,h=i.useRef(null),b=Se(r,h),w=Be(o),[S=null,f]=Pe({prop:c,defaultProp:u,onChange:l}),[y,C]=i.useState(!1),P=xt(x),M=Ke(s),A=i.useRef(!1),[D,I]=i.useState(0);return i.useEffect(()=>{const O=h.current;if(O)return O.addEventListener(ge,P),()=>O.removeEventListener(ge,P)},[P]),i.createElement(cn,{scope:s,orientation:n,dir:w,loop:a,currentTabStopId:S,onItemFocus:i.useCallback(O=>f(O),[f]),onItemShiftTab:i.useCallback(()=>C(!0),[]),onFocusableItemAdd:i.useCallback(()=>I(O=>O+1),[]),onFocusableItemRemove:i.useCallback(()=>I(O=>O-1),[])},i.createElement(te.div,B({tabIndex:y||D===0?-1:0,"data-orientation":n},d,{ref:b,style:{outline:"none",...t.style},onMouseDown:z(t.onMouseDown,()=>{A.current=!0}),onFocus:z(t.onFocus,O=>{const U=!A.current;if(O.target===O.currentTarget&&U&&!y){const Y=new CustomEvent(ge,sn);if(O.currentTarget.dispatchEvent(Y),!Y.defaultPrevented){const _=M().filter(p=>p.focusable),T=_.find(p=>p.active),Z=_.find(p=>p.id===S),j=[T,Z,..._].filter(Boolean).map(p=>p.ref.current);Ze(j)}}A.current=!1}),onBlur:z(t.onBlur,()=>C(!1))})))}),fn="RovingFocusGroupItem",pn=i.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,focusable:n=!0,active:a=!1,tabStopId:o,...c}=t,u=Ee(),l=o||u,x=ln(fn,s),d=x.currentTabStopId===l,h=Ke(s),{onFocusableItemAdd:b,onFocusableItemRemove:w}=x;return i.useEffect(()=>{if(n)return b(),()=>w()},[n,b,w]),i.createElement($e.ItemSlot,{scope:s,id:l,focusable:n,active:a},i.createElement(te.span,B({tabIndex:d?0:-1,"data-orientation":x.orientation},c,{ref:r,onMouseDown:z(t.onMouseDown,S=>{n?x.onItemFocus(l):S.preventDefault()}),onFocus:z(t.onFocus,()=>x.onItemFocus(l)),onKeyDown:z(t.onKeyDown,S=>{if(S.key==="Tab"&&S.shiftKey){x.onItemShiftTab();return}if(S.target!==S.currentTarget)return;const f=xn(S,x.orientation,x.dir);if(f!==void 0){S.preventDefault();let C=h().filter(P=>P.focusable).map(P=>P.ref.current);if(f==="last")C.reverse();else if(f==="prev"||f==="next"){f==="prev"&&C.reverse();const P=C.indexOf(S.currentTarget);C=x.loop?bn(C,P+1):C.slice(P+1)}setTimeout(()=>Ze(C))}})})))}),mn={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function hn(t,r){return r!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function xn(t,r,s){const n=hn(t.key,s);if(!(r==="vertical"&&["ArrowLeft","ArrowRight"].includes(n))&&!(r==="horizontal"&&["ArrowUp","ArrowDown"].includes(n)))return mn[n]}function Ze(t){const r=document.activeElement;for(const s of t)if(s===r||(s.focus(),document.activeElement!==r))return}function bn(t,r){return t.map((s,n)=>t[(r+n)%t.length])}const gn=un,vn=pn,qe="Tabs",[$n,ls]=Ne(qe,[We]),Je=We(),[jn,Ie]=$n(qe),wn=i.forwardRef((t,r)=>{const{__scopeTabs:s,value:n,onValueChange:a,defaultValue:o,orientation:c="horizontal",dir:u,activationMode:l="automatic",...x}=t,d=Be(u),[h,b]=Pe({prop:n,onChange:a,defaultProp:o});return i.createElement(jn,{scope:s,baseId:Ee(),value:h,onValueChange:b,orientation:c,dir:d,activationMode:l},i.createElement(te.div,B({dir:d,"data-orientation":c},x,{ref:r})))}),yn="TabsList",Nn=i.forwardRef((t,r)=>{const{__scopeTabs:s,loop:n=!0,...a}=t,o=Ie(yn,s),c=Je(s);return i.createElement(gn,B({asChild:!0},c,{orientation:o.orientation,dir:o.dir,loop:n}),i.createElement(te.div,B({role:"tablist","aria-orientation":o.orientation},a,{ref:r})))}),Sn="TabsTrigger",Pn=i.forwardRef((t,r)=>{const{__scopeTabs:s,value:n,disabled:a=!1,...o}=t,c=Ie(Sn,s),u=Je(s),l=Qe(c.baseId,n),x=Xe(c.baseId,n),d=n===c.value;return i.createElement(vn,B({asChild:!0},u,{focusable:!a,active:d}),i.createElement(te.button,B({type:"button",role:"tab","aria-selected":d,"aria-controls":x,"data-state":d?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l},o,{ref:r,onMouseDown:z(t.onMouseDown,h=>{!a&&h.button===0&&h.ctrlKey===!1?c.onValueChange(n):h.preventDefault()}),onKeyDown:z(t.onKeyDown,h=>{[" ","Enter"].includes(h.key)&&c.onValueChange(n)}),onFocus:z(t.onFocus,()=>{const h=c.activationMode!=="manual";!d&&!a&&h&&c.onValueChange(n)})})))}),En="TabsContent",Cn=i.forwardRef((t,r)=>{const{__scopeTabs:s,value:n,forceMount:a,children:o,...c}=t,u=Ie(En,s),l=Qe(u.baseId,n),x=Xe(u.baseId,n),d=n===u.value,h=i.useRef(d);return i.useEffect(()=>{const b=requestAnimationFrame(()=>h.current=!1);return()=>cancelAnimationFrame(b)},[]),i.createElement(Ce,{present:a||d},({present:b})=>i.createElement(te.div,B({"data-state":d?"active":"inactive","data-orientation":u.orientation,role:"tabpanel","aria-labelledby":l,hidden:!b,id:x,tabIndex:0},c,{ref:r,style:{...t.style,animationDuration:h.current?"0s":void 0}}),b&&o))});function Qe(t,r){return`${t}-trigger-${r}`}function Xe(t,r){return`${t}-content-${r}`}const Tn=wn,Dn=Nn,On=Pn,se=Cn;var et={exports:{}};(function(t,r){(function(s,n){t.exports=n()})(xe,function(){var s=1e3,n=6e4,a=36e5,o="millisecond",c="second",u="minute",l="hour",x="day",d="week",h="month",b="quarter",w="year",S="date",f="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,C=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,P={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(j){var p=["th","st","nd","rd"],g=j%100;return"["+j+(p[(g-20)%10]||p[g]||p[0])+"]"}},M=function(j,p,g){var N=String(j);return!N||N.length>=p?j:""+Array(p+1-N.length).join(g)+j},A={s:M,z:function(j){var p=-j.utcOffset(),g=Math.abs(p),N=Math.floor(g/60),v=g%60;return(p<=0?"+":"-")+M(N,2,"0")+":"+M(v,2,"0")},m:function j(p,g){if(p.date()<g.date())return-j(g,p);var N=12*(g.year()-p.year())+(g.month()-p.month()),v=p.clone().add(N,h),E=g-v<0,$=p.clone().add(N+(E?-1:1),h);return+(-(N+(g-v)/(E?v-$:$-v))||0)},a:function(j){return j<0?Math.ceil(j)||0:Math.floor(j)},p:function(j){return{M:h,y:w,w:d,d:x,D:S,h:l,m:u,s:c,ms:o,Q:b}[j]||String(j||"").toLowerCase().replace(/s$/,"")},u:function(j){return j===void 0}},D="en",I={};I[D]=P;var O="$isDayjsObject",U=function(j){return j instanceof Z||!(!j||!j[O])},Y=function j(p,g,N){var v;if(!p)return D;if(typeof p=="string"){var E=p.toLowerCase();I[E]&&(v=E),g&&(I[E]=g,v=E);var $=p.split("-");if(!v&&$.length>1)return j($[0])}else{var R=p.name;I[R]=p,v=R}return!N&&v&&(D=v),v||!N&&D},_=function(j,p){if(U(j))return j.clone();var g=typeof p=="object"?p:{};return g.date=j,g.args=arguments,new Z(g)},T=A;T.l=Y,T.i=U,T.w=function(j,p){return _(j,{locale:p.$L,utc:p.$u,x:p.$x,$offset:p.$offset})};var Z=function(){function j(g){this.$L=Y(g.locale,null,!0),this.parse(g),this.$x=this.$x||g.x||{},this[O]=!0}var p=j.prototype;return p.parse=function(g){this.$d=function(N){var v=N.date,E=N.utc;if(v===null)return new Date(NaN);if(T.u(v))return new Date;if(v instanceof Date)return new Date(v);if(typeof v=="string"&&!/Z$/i.test(v)){var $=v.match(y);if($){var R=$[2]-1||0,L=($[7]||"0").substring(0,3);return E?new Date(Date.UTC($[1],R,$[3]||1,$[4]||0,$[5]||0,$[6]||0,L)):new Date($[1],R,$[3]||1,$[4]||0,$[5]||0,$[6]||0,L)}}return new Date(v)}(g),this.init()},p.init=function(){var g=this.$d;this.$y=g.getFullYear(),this.$M=g.getMonth(),this.$D=g.getDate(),this.$W=g.getDay(),this.$H=g.getHours(),this.$m=g.getMinutes(),this.$s=g.getSeconds(),this.$ms=g.getMilliseconds()},p.$utils=function(){return T},p.isValid=function(){return this.$d.toString()!==f},p.isSame=function(g,N){var v=_(g);return this.startOf(N)<=v&&v<=this.endOf(N)},p.isAfter=function(g,N){return _(g)<this.startOf(N)},p.isBefore=function(g,N){return this.endOf(N)<_(g)},p.$g=function(g,N,v){return T.u(g)?this[N]:this.set(v,g)},p.unix=function(){return Math.floor(this.valueOf()/1e3)},p.valueOf=function(){return this.$d.getTime()},p.startOf=function(g,N){var v=this,E=!!T.u(N)||N,$=T.p(g),R=function(X,V){var q=T.w(v.$u?Date.UTC(v.$y,V,X):new Date(v.$y,V,X),v);return E?q:q.endOf(x)},L=function(X,V){return T.w(v.toDate()[X].apply(v.toDate("s"),(E?[0,0,0,0]:[23,59,59,999]).slice(V)),v)},F=this.$W,H=this.$M,G=this.$D,re="set"+(this.$u?"UTC":"");switch($){case w:return E?R(1,0):R(31,11);case h:return E?R(1,H):R(0,H+1);case d:var Q=this.$locale().weekStart||0,ie=(F<Q?F+7:F)-Q;return R(E?G-ie:G+(6-ie),H);case x:case S:return L(re+"Hours",0);case l:return L(re+"Minutes",1);case u:return L(re+"Seconds",2);case c:return L(re+"Milliseconds",3);default:return this.clone()}},p.endOf=function(g){return this.startOf(g,!1)},p.$set=function(g,N){var v,E=T.p(g),$="set"+(this.$u?"UTC":""),R=(v={},v[x]=$+"Date",v[S]=$+"Date",v[h]=$+"Month",v[w]=$+"FullYear",v[l]=$+"Hours",v[u]=$+"Minutes",v[c]=$+"Seconds",v[o]=$+"Milliseconds",v)[E],L=E===x?this.$D+(N-this.$W):N;if(E===h||E===w){var F=this.clone().set(S,1);F.$d[R](L),F.init(),this.$d=F.set(S,Math.min(this.$D,F.daysInMonth())).$d}else R&&this.$d[R](L);return this.init(),this},p.set=function(g,N){return this.clone().$set(g,N)},p.get=function(g){return this[T.p(g)]()},p.add=function(g,N){var v,E=this;g=Number(g);var $=T.p(N),R=function(H){var G=_(E);return T.w(G.date(G.date()+Math.round(H*g)),E)};if($===h)return this.set(h,this.$M+g);if($===w)return this.set(w,this.$y+g);if($===x)return R(1);if($===d)return R(7);var L=(v={},v[u]=n,v[l]=a,v[c]=s,v)[$]||1,F=this.$d.getTime()+g*L;return T.w(F,this)},p.subtract=function(g,N){return this.add(-1*g,N)},p.format=function(g){var N=this,v=this.$locale();if(!this.isValid())return v.invalidDate||f;var E=g||"YYYY-MM-DDTHH:mm:ssZ",$=T.z(this),R=this.$H,L=this.$m,F=this.$M,H=v.weekdays,G=v.months,re=v.meridiem,Q=function(V,q,ce,de){return V&&(V[q]||V(N,E))||ce[q].slice(0,de)},ie=function(V){return T.s(R%12||12,V,"0")},X=re||function(V,q,ce){var de=V<12?"AM":"PM";return ce?de.toLowerCase():de};return E.replace(C,function(V,q){return q||function(ce){switch(ce){case"YY":return String(N.$y).slice(-2);case"YYYY":return T.s(N.$y,4,"0");case"M":return F+1;case"MM":return T.s(F+1,2,"0");case"MMM":return Q(v.monthsShort,F,G,3);case"MMMM":return Q(G,F);case"D":return N.$D;case"DD":return T.s(N.$D,2,"0");case"d":return String(N.$W);case"dd":return Q(v.weekdaysMin,N.$W,H,2);case"ddd":return Q(v.weekdaysShort,N.$W,H,3);case"dddd":return H[N.$W];case"H":return String(R);case"HH":return T.s(R,2,"0");case"h":return ie(1);case"hh":return ie(2);case"a":return X(R,L,!0);case"A":return X(R,L,!1);case"m":return String(L);case"mm":return T.s(L,2,"0");case"s":return String(N.$s);case"ss":return T.s(N.$s,2,"0");case"SSS":return T.s(N.$ms,3,"0");case"Z":return $}return null}(V)||$.replace(":","")})},p.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},p.diff=function(g,N,v){var E,$=this,R=T.p(N),L=_(g),F=(L.utcOffset()-this.utcOffset())*n,H=this-L,G=function(){return T.m($,L)};switch(R){case w:E=G()/12;break;case h:E=G();break;case b:E=G()/3;break;case d:E=(H-F)/6048e5;break;case x:E=(H-F)/864e5;break;case l:E=H/a;break;case u:E=H/n;break;case c:E=H/s;break;default:E=H}return v?E:T.a(E)},p.daysInMonth=function(){return this.endOf(h).$D},p.$locale=function(){return I[this.$L]},p.locale=function(g,N){if(!g)return this.$L;var v=this.clone(),E=Y(g,N,!0);return E&&(v.$L=E),v},p.clone=function(){return T.w(this.$d,this)},p.toDate=function(){return new Date(this.valueOf())},p.toJSON=function(){return this.isValid()?this.toISOString():null},p.toISOString=function(){return this.$d.toISOString()},p.toString=function(){return this.$d.toUTCString()},j}(),ne=Z.prototype;return _.prototype=ne,[["$ms",o],["$s",c],["$m",u],["$H",l],["$W",x],["$M",h],["$y",w],["$D",S]].forEach(function(j){ne[j[1]]=function(p){return this.$g(p,j[0],j[1])}}),_.extend=function(j,p){return j.$i||(j(p,Z,_),j.$i=!0),_},_.locale=Y,_.isDayjs=U,_.unix=function(j){return _(1e3*j)},_.en=I[D],_.Ls=I,_.p={},_})})(et);var Rn=et.exports;const be=he(Rn);var tt={exports:{}};(function(t,r){(function(s,n){t.exports=n()})(xe,function(){return function(s,n,a){s=s||{};var o=n.prototype,c={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(x,d,h,b){return o.fromToBase(x,d,h,b)}a.en.relativeTime=c,o.fromToBase=function(x,d,h,b,w){for(var S,f,y,C=h.$locale().relativeTime||c,P=s.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],M=P.length,A=0;A<M;A+=1){var D=P[A];D.d&&(S=b?a(x).diff(h,D.d,!0):h.diff(x,D.d,!0));var I=(s.rounding||Math.round)(Math.abs(S));if(y=S>0,I<=D.r||!D.r){I<=1&&A>0&&(D=P[A-1]);var O=C[D.l];w&&(I=w(""+I)),f=typeof O=="string"?O.replace("%d",I):O(I,d,D.l,y);break}}if(d)return f;var U=y?C.future:C.past;return typeof U=="function"?U(f):U.replace("%s",f)},o.to=function(x,d){return u(x,d,this,!0)},o.from=function(x,d){return u(x,d,this)};var l=function(x){return x.$u?a.utc():a()};o.toNow=function(x){return this.to(l(this),x)},o.fromNow=function(x){return this.from(l(this),x)}}})})(tt);var kn=tt.exports;const _n=he(kn);var nt={exports:{}};(function(t,r){(function(s,n){t.exports=n()})(xe,function(){var s={year:0,month:1,day:2,hour:3,minute:4,second:5},n={};return function(a,o,c){var u,l=function(b,w,S){S===void 0&&(S={});var f=new Date(b),y=function(C,P){P===void 0&&(P={});var M=P.timeZoneName||"short",A=C+"|"+M,D=n[A];return D||(D=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:C,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:M}),n[A]=D),D}(w,S);return y.formatToParts(f)},x=function(b,w){for(var S=l(b,w),f=[],y=0;y<S.length;y+=1){var C=S[y],P=C.type,M=C.value,A=s[P];A>=0&&(f[A]=parseInt(M,10))}var D=f[3],I=D===24?0:D,O=f[0]+"-"+f[1]+"-"+f[2]+" "+I+":"+f[4]+":"+f[5]+":000",U=+b;return(c.utc(O).valueOf()-(U-=U%1e3))/6e4},d=o.prototype;d.tz=function(b,w){b===void 0&&(b=u);var S=this.utcOffset(),f=this.toDate(),y=f.toLocaleString("en-US",{timeZone:b}),C=Math.round((f-new Date(y))/1e3/60),P=c(y,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(f.getTimezoneOffset()/15)-C,!0);if(w){var M=P.utcOffset();P=P.add(S-M,"minute")}return P.$x.$timezone=b,P},d.offsetName=function(b){var w=this.$x.$timezone||c.tz.guess(),S=l(this.valueOf(),w,{timeZoneName:b}).find(function(f){return f.type.toLowerCase()==="timezonename"});return S&&S.value};var h=d.startOf;d.startOf=function(b,w){if(!this.$x||!this.$x.$timezone)return h.call(this,b,w);var S=c(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return h.call(S,b,w).tz(this.$x.$timezone,!0)},c.tz=function(b,w,S){var f=S&&w,y=S||w||u,C=x(+c(),y);if(typeof b!="string")return c(b).tz(y);var P=function(I,O,U){var Y=I-60*O*1e3,_=x(Y,U);if(O===_)return[Y,O];var T=x(Y-=60*(_-O)*1e3,U);return _===T?[Y,_]:[I-60*Math.min(_,T)*1e3,Math.max(_,T)]}(c.utc(b,f).valueOf(),C,y),M=P[0],A=P[1],D=c(M).utcOffset(A);return D.$x.$timezone=y,D},c.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},c.tz.setDefault=function(b){u=b}}})})(nt);var Mn=nt.exports;const In=he(Mn);var rt={exports:{}};(function(t,r){(function(s,n){t.exports=n()})(xe,function(){var s="minute",n=/[+-]\d\d(?::?\d\d)?/g,a=/([+-]|\d\d)/g;return function(o,c,u){var l=c.prototype;u.utc=function(f){var y={date:f,utc:!0,args:arguments};return new c(y)},l.utc=function(f){var y=u(this.toDate(),{locale:this.$L,utc:!0});return f?y.add(this.utcOffset(),s):y},l.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var x=l.parse;l.parse=function(f){f.utc&&(this.$u=!0),this.$utils().u(f.$offset)||(this.$offset=f.$offset),x.call(this,f)};var d=l.init;l.init=function(){if(this.$u){var f=this.$d;this.$y=f.getUTCFullYear(),this.$M=f.getUTCMonth(),this.$D=f.getUTCDate(),this.$W=f.getUTCDay(),this.$H=f.getUTCHours(),this.$m=f.getUTCMinutes(),this.$s=f.getUTCSeconds(),this.$ms=f.getUTCMilliseconds()}else d.call(this)};var h=l.utcOffset;l.utcOffset=function(f,y){var C=this.$utils().u;if(C(f))return this.$u?0:C(this.$offset)?h.call(this):this.$offset;if(typeof f=="string"&&(f=function(D){D===void 0&&(D="");var I=D.match(n);if(!I)return null;var O=(""+I[0]).match(a)||["-",0,0],U=O[0],Y=60*+O[1]+ +O[2];return Y===0?0:U==="+"?Y:-Y}(f),f===null))return this;var P=Math.abs(f)<=16?60*f:f,M=this;if(y)return M.$offset=P,M.$u=f===0,M;if(f!==0){var A=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(M=this.local().add(P+A,s)).$offset=P,M.$x.$localOffset=A}else M=this.utc();return M};var b=l.format;l.format=function(f){var y=f||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return b.call(this,y)},l.valueOf=function(){var f=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*f},l.isUTC=function(){return!!this.$u},l.toISOString=function(){return this.toDate().toISOString()},l.toString=function(){return this.toDate().toUTCString()};var w=l.toDate;l.toDate=function(f){return f==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():w.call(this)};var S=l.diff;l.diff=function(f,y,C){if(f&&this.$u===f.$u)return S.call(this,f,y,C);var P=this.local(),M=u(f).local();return S.call(P,M,y,C)}}})})(rt);var Fn=rt.exports;const Ln=he(Fn);be.extend(Ln);be.extend(In);be.extend(_n);function An(){const t=K();return e.jsxs("div",{className:"flex h-full w-full flex-col gap-4 pt-4",children:[e.jsx("div",{className:"text-center",children:e.jsx(Gt,{discordAuthUrl:t.discordAuthUrl})}),e.jsx("div",{className:"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(Un,{})})]})}function Un(){const t=K(),r=Kt({discordAuthUrl:t.discordAuthUrl}),s=Te();return e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(i.Suspense,{fallback:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center",children:e.jsx(Ve,{children:"Loading Discord Posts"})}),children:e.jsx(ze,{resolve:t.discordPostsPromise,errorElement:e.jsx("div",{className:"text-red-500",children:"There was a problem loading the discord posts"}),children:n=>e.jsx("ul",{className:"flex w-full flex-col gap-4 p-3 xl:p-12",children:n.map(a=>e.jsx("li",{className:"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg",children:e.jsx(Hn,{thread:a})},a.id))})})}),e.jsx("div",{children:e.jsxs(ae,{to:s&&!r.includes("oauth")?r.replace(/^https/,"discord"):r,target:r.includes("oauth")?void 0:"_blank",rel:"noreferrer noopener",onClick:s?n=>{n.preventDefault(),window.open(n.currentTarget.href,"_blank","noreferrer noopener")}:void 0,className:"flex items-center gap-2 p-2 text-xl hover:underline",children:["Create Post ",e.jsx(k,{name:"ExternalLink"})]})})]})}function Hn({thread:t}){const r=t.reactions.filter(n=>n.count),s=Wt();return e.jsx("div",{children:e.jsxs("div",{className:"flex flex-col gap-2 p-4",children:[e.jsxs("div",{className:"flex gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[t.tags.length?e.jsx("div",{className:"flex gap-2",children:t.tags.map(n=>e.jsxs("div",{className:"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(Ue,{name:n.emojiName,url:n.emojiUrl})}),e.jsx("span",{children:n.name})]},n.name))}):null,e.jsx("strong",{className:"text-xl font-bold",children:t.name}),e.jsxs("div",{className:"flex items-start gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[t.authorAvatarUrl?e.jsx("img",{src:t.authorAvatarUrl,alt:"",className:"h-6 w-6 rounded-full"}):null,e.jsxs("span",{children:[e.jsx("span",{className:"font-bold",style:t.authorHexAccentColor?{color:t.authorHexAccentColor}:{},children:t.authorDisplayName}),":"," "]})]}),e.jsx("span",{className:"flex-1 overflow-ellipsis text-muted-foreground",children:t.messagePreview})]})]}),t.previewImageUrl?e.jsx("img",{src:t.previewImageUrl,alt:"",className:"h-28 w-28 rounded-lg object-cover"}):null]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{children:r.length?e.jsx("ul",{className:"flex items-center gap-2",children:r.map((n,a)=>e.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(Ue,{name:n.emojiName,url:n.emojiUrl})}),e.jsx("span",{children:n.count})]},a))}):null}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(k,{name:"Chat"})," ",t.messageCount]}),` · ${be(t.lastUpdated).tz(s.timeZone).fromNow()}`]})]}),e.jsxs("span",{className:"flex items-center gap-4",children:[e.jsx("a",{href:t.link.replace(/^https/,"discord"),children:e.jsx(k,{name:"Discord"})}),e.jsx("a",{href:t.link,target:"_blank",rel:"noreferrer noopener",children:e.jsx(k,{name:"ExternalLink"})})]})]})]})})}function Ue({name:t,url:r}){return r?e.jsx("img",{src:r,alt:t,className:"h-full w-full"}):t||null}function je({appName:t,reset:r=!1,tooltipText:s,...n}){var c;const a=W(),o=e.jsx("button",{type:"submit",...n,className:ee(n.className,a.state!=="idle"?"cursor-progress":null,((c=a.data)==null?void 0:c.status)==="error"?"cursor-not-allowed":null)});return e.jsxs(a.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",children:[e.jsx("input",{type:"hidden",name:"appName",value:t}),r?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,_e,s?e.jsx(J,{content:s,children:o}):o]})}function Yn({playgroundAppName:t,allApps:r}){var n;const s=W();return e.jsxs(Nt,{name:"appName",value:t,onValueChange:a=>{s.submit({appName:a},{method:"POST",action:"/set-playground"})},children:[e.jsxs(St,{"aria-label":"Select app for playground",className:ee("flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none",s.state!=="idle"?"cursor-progress":null,((n=s.data)==null?void 0:n.status)==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(Pt,{placeholder:"Select current app",className:"inline-block w-40 text-ellipsis"})}),e.jsx(Et,{children:e.jsx(k,{name:"TriangleDownSmall"})})]}),e.jsx(Ct,{children:e.jsxs(Tt,{position:"popper",align:"start",className:"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",children:[e.jsx(Dt,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(k,{name:"ChevronUp"})}),e.jsx(Ot,{className:"p-3",children:e.jsxs(Rt,{children:[e.jsx(kt,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),r.filter(a=>a.name!=="playground").map(a=>e.jsx(Bn,{value:a.name,children:a.displayName},a.name))]})}),e.jsx(_t,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(k,{name:"ChevronDown"})})]})})]})}function Bn({value:t,children:r}){return e.jsxs(Mt,{value:t,className:"relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",children:[e.jsx(It,{children:r}),e.jsx(Ft,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(k,{name:"CheckSmall"})})]})}function Fe({appName:t}){return ENV.EPICSHOP_DEPLOYED?null:e.jsx(je,{appName:t,tooltipText:"Playground is not set to the right app. Click to set Playground.",children:e.jsxs("span",{className:"flex items-center justify-center gap-1 text-foreground-danger hover:underline",children:[e.jsx(k,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:"uppercase",children:"Set to Playground"})]})})}function st({playgroundAppName:t,problemAppName:r,allApps:s,children:n}){const a=t===r,o=a?e.jsx(k,{size:"xl",name:"Linked"}):e.jsx(k,{size:"xl",name:"Unlinked",className:"animate-pulse text-foreground-danger"});return e.jsxs("div",{className:"flex h-full w-full flex-col justify-between",children:[e.jsxs("div",{className:"flex h-14 flex-shrink-0 items-center justify-start gap-2 border-b px-3",children:[e.jsx("div",{className:"display-alt-up flex",children:r?e.jsx(je,{appName:r,tooltipText:a?"Click to reset Playground.":"Playground is not set to the right app. Click to set Playground.",children:o}):e.jsx("div",{className:"flex",children:o})}),e.jsx("div",{className:"display-alt-down",children:t?e.jsx(je,{appName:t,reset:!0,tooltipText:"Reset Playground",children:e.jsx("div",{className:"flex h-7 w-7 items-center justify-center",children:e.jsx(k,{name:"Refresh"})})}):e.jsx("div",{className:"h-7 w-7"})}),e.jsx(Yn,{allApps:s,playgroundAppName:t})]}),e.jsx("div",{className:"flex h-full flex-1 flex-grow items-center justify-center",children:n})]})}function Vn({name:t}){var o;const r=W(),s=(o=r.formData)==null?void 0:o.get("intent"),n=s==="stop"?"Stopping App":s==="restart"?"Restarting App":null,a=Te();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[_e,e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx("button",{type:"submit",name:"intent",value:a?"restart":"stop",className:"h-full border-r px-3 py-4 font-mono text-xs uppercase leading-none",children:n||(a?"Restart App":"Stop App")})]})}function at({port:t}){const r=W();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[e.jsx("input",{type:"hidden",name:"port",value:t}),e.jsx(Ge,{varient:"mono",type:"submit",name:"intent",value:"stop-port",children:r.state==="idle"?"Stop Port":"Stopping Port"})]})}function zn({name:t}){var s;const r=W();return((s=r.data)==null?void 0:s.status)==="app-not-started"?r.data.error==="port-unavailable"?e.jsxs("div",{children:["The port is unavailable. Would you like to stop whatever is running on that port and try again?",e.jsx(at,{port:r.data.port})]}):e.jsx("div",{children:"An unknown error has happened."}):e.jsxs(r.Form,{method:"POST",action:"/start",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),r.state==="idle"?e.jsx(Ge,{type:"submit",name:"intent",value:"start",varient:"mono",children:"Start App"}):e.jsx("div",{children:e.jsx(Ve,{children:"Starting App"})})]})}const Gn=m.intersection(m.object({type:m.literal("epicshop:history-call")}),m.union([m.object({method:m.literal("pushState"),args:m.union([m.tuple([m.object({}).passthrough(),m.unknown()]),m.tuple([m.object({}).passthrough(),m.unknown(),m.string()])])}),m.object({method:m.literal("replaceState"),args:m.union([m.tuple([m.object({}).passthrough(),m.unknown()]),m.tuple([m.object({}).passthrough(),m.unknown(),m.string()])])}),m.object({method:m.literal("go"),args:m.tuple([m.number().optional()])}),m.object({method:m.literal("forward"),args:m.tuple([])}),m.object({method:m.literal("back"),args:m.tuple([])}),m.object({method:m.literal("popstate"),pathname:m.string(),delta:m.number()})])),Kn=m.object({type:m.literal("epicshop:loaded"),url:m.string()}),Wn=m.union([Gn,Kn]);function He(t,r,s){return Math.min(Math.max(t+r,0),s)}const Zn=i.forwardRef(qn);function qn({name:t,port:r,portIsAvailable:s,isRunning:n,baseUrl:a,id:o,initialRoute:c},u){const l=Re();return n?e.jsx(Jn,{baseUrl:a,id:o,name:t,ref:u,initialRoute:c}):s===!1?e.jsxs("div",{className:"flex flex-col items-center justify-center",children:[e.jsxs("p",{className:"max-w-xs pb-5 text-center",role:"status",children:["The port for this app is unavailable. It could be that you're running it ",e.jsx("a",{href:De({domain:l.domain,port:r}),className:"underline",children:"elsewhere"}),"?"]}),e.jsx(at,{port:r})]}):e.jsx(zn,{name:t})}const Jn=i.forwardRef(Qn);function Qn({baseUrl:t,id:r,name:s,initialRoute:n},a){const[o,c]=ke(),u=o.get("pathname")??n,[l,x]=i.useState(0),d=r+l,h=i.useRef("new"),b=i.useRef(null),[w,S]=i.useState({history:[u],index:0}),[f,y]=i.useState(u),C=i.useRef(null),P=new URL(u,t),M=i.useRef(P);i.useEffect(()=>{M.current=P});const[A,D]=i.useState(P),I=i.useRef(r);I.current!==r&&(I.current=r,D(M.current)),i.useEffect(()=>{I.current=r}),i.useEffect(()=>{function j(p){var E;if(p.source!==((E=C.current)==null?void 0:E.contentWindow))return;const g=Wn.safeParse(p.data,{path:["messageEvent","data"]});if(!g.success)return;const{data:N}=g;if(N.type==="epicshop:loaded"){S($=>{const R=L=>He($.index,L,$.history.length-1);if(h.current==="back")return{...$,index:R(-1)};if(h.current==="forward")return{...$,index:R(1)};if(h.current==="new"){const L=$.history[$.index],F=new URL(N.url).pathname;if(L===F)return $;const H=[...$.history.slice(0,$.index+1),F];return{history:H,index:H.length-1}}else throw new Error("Unexpected lastDirectionRef value")});return}const{method:v}=N;S($=>{const R=F=>He($.index,F,$.history.length-1),L=$.history[$.index];switch(v){case"popstate":return{...$,index:R(N.delta)};case"forward":return{...$,index:R(1)};case"back":return{...$,index:R(-1)};case"pushState":{const F=N.args[2]??L,H=[...$.history.slice(0,$.index+1),F].filter(Boolean);return{...$,history:H,index:H.length-1}}case"replaceState":{const F=N.args[2]??L;return{...$,history:[...$.history.slice(0,$.index),F,...$.history.slice($.index+1)].filter(Boolean)}}case"go":{const[F=0]=N.args;return{...$,index:R(F)}}}})}return window.addEventListener("message",j),()=>{window.removeEventListener("message",j)}},[]);const O=i.useRef(c);i.useEffect(()=>{O.current=c},[c]);const U=w.history[w.index];i.useEffect(()=>{if(!U)return;y(U);const j=new URLSearchParams(window.location.search);U==="/"?j.delete("pathname"):j.set("pathname",U),`?${j.toString()}`!==window.location.search&&O.current(j,{replace:!0})},[U]);const Y=(...j)=>{var g,N;const p=j[0];typeof p=="number"?h.current=p>0?"forward":"back":h.current="new",b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{h.current="new"},100),(N=(g=C.current)==null?void 0:g.contentWindow)==null||N.postMessage({type:"epicshop:navigate-call",params:j},"*")};function _(j=f){y(j);const p=w.history[w.index];Y(j,{replace:p===j})}i.useImperativeHandle(a,()=>({handleExtrnalNavigation:_}));const T=w.index===w.history.length-1,Z=w.index<=0,ne=[];for(const[j,p]of o.entries())j!=="pathname"&&ne.push(e.jsx("input",{type:"hidden",name:j,value:p},j));return e.jsx(bt,{children:e.jsxs("div",{className:"flex h-full flex-grow flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b pl-1.5",children:[e.jsxs("div",{className:"mr-2 flex items-center justify-center gap-2 px-1",children:[e.jsxs(fe,{children:[e.jsx(pe,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",disabled:Z,onClick:()=>Y(-1),children:e.jsx(k,{name:"ArrowLeft","aria-hidden":"true"})})}),e.jsx(me,{children:"Go back"})]}),e.jsxs(fe,{children:[e.jsx(pe,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",disabled:T,onClick:()=>Y(1),children:e.jsx(k,{name:"ArrowRight","aria-hidden":"true"})})}),e.jsx(me,{children:"Go forward"})]}),e.jsxs(fe,{children:[e.jsx(pe,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",onClick:()=>{D(P),x(l+1),S({history:[P.pathname],index:0})},children:e.jsx(k,{name:"Refresh","aria-hidden":"true"})})}),e.jsx(me,{children:"Refresh"})]})]}),e.jsxs(Zt,{method:"get",replace:!0,className:"flex flex-1 gap-2",onSubmit:()=>_(),children:[ne,e.jsxs("div",{className:"flex flex-1 items-center border-x bg-background p-3 leading-none text-foreground",children:[e.jsx("a",{href:P.toString(),target:"_blank",rel:"noreferrer",children:A.host}),e.jsx("input",{"aria-label":"pathname",className:"flex-1 focus-visible:outline-none",value:f,name:"pathname",onChange:j=>y(j.currentTarget.value)})]})]}),e.jsx(Vn,{name:s}),e.jsxs(fe,{children:[e.jsx(pe,{asChild:!0,children:e.jsx("a",{href:P.toString(),target:"_blank",rel:"noreferrer",className:ee("flex aspect-square items-center justify-center px-3.5"),children:e.jsx(k,{name:"ExternalLink"})})}),e.jsx(me,{children:"Open in new tab"})]})]}),e.jsx("div",{className:"flex h-full w-full flex-grow dark:bg-white",children:e.jsx("iframe",{title:s,ref:C,src:A.toString(),className:"h-full w-full flex-grow bg-white"},d)})]})})}function we({id:t,appInfo:r,inBrowserBrowserRef:s}){const n=Re();if(!r)return e.jsx("p",{children:"No app here. Sorry."});const{isRunning:a,dev:o,name:c,portIsAvailable:u,title:l}=r;if(o.type==="script"){const x=De({domain:n.domain,port:o.portNumber});return e.jsx(Zn,{ref:s,isRunning:a,id:t??c,name:c,portIsAvailable:u,port:o.portNumber,baseUrl:x,initialRoute:o.initialRoute})}else return o.type==="browser"?e.jsxs("div",{className:"relative h-full flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsxs("a",{href:o.pathname,target:"_blank",rel:"noreferrer",className:ve("absolute bottom-5 right-5 flex items-center justify-center rounded-full bg-gray-100 p-2.5 transition hover:bg-gray-200 dark:bg-gray-800 hover:dark:bg-gray-600"),children:[e.jsx(k,{name:"ExternalLink","aria-hidden":"true"}),e.jsx("span",{className:"sr-only",children:"Open in New Window"})]}),e.jsx("iframe",{title:l,src:o.pathname,className:"h-full w-full flex-grow bg-white"})]}):e.jsxs("p",{children:["Preview for dev type of ",e.jsx("code",{children:o.type})," not supported."]})}function Xn({appInfo:t,inBrowserBrowserRef:r,problemAppName:s,allApps:n}){return e.jsx(st,{playgroundAppName:t==null?void 0:t.appName,problemAppName:s,allApps:n,children:(t==null?void 0:t.dev.type)==="none"?e.jsxs("div",{children:[e.jsx("div",{className:"text-foreground-secondary flex h-full items-center justify-center text-2xl",children:"Non-UI playground"}),e.jsx("div",{children:e.jsxs("div",{className:"text-foreground-secondary flex flex-wrap gap-1 text-center",children:["Navigate to"," ",e.jsx(J,{content:t.fullPath,children:e.jsx("span",{className:"underline",onClick:()=>{navigator.clipboard.writeText(t.fullPath),qt.success("Copied playground path to clipboard")},children:"the playground directory"})})," ","in your editor and terminal to work on this exercise!"]})})]}):t?e.jsx(we,{id:t.appName,appInfo:t,inBrowserBrowserRef:r}):e.jsxs("div",{className:"flex flex-col justify-center gap-2",children:[e.jsx("p",{children:"Please set the playground first"}),s?e.jsx(Fe,{appName:s}):null]})})}function er({handleClick:t,cacheLocation:r,embeddedKey:s,appFullPath:n}){const a=W();return e.jsxs(a.Form,{action:"/update-mdx-cache",method:"POST",children:[_e,e.jsx("input",{type:"hidden",name:"cacheLocation",value:r}),e.jsx("input",{type:"hidden",name:"embeddedKey",value:s}),e.jsx("input",{type:"hidden",name:"appFullPath",value:n}),e.jsx("button",{type:"submit",onClick:t,className:ee("launch_button",a.state==="idle"?null:"cursor-progress"),children:"Cancel Warning"})]})}const ot=i.createContext(null);function tr(){const t=i.useContext(ot);if(!t)throw new Error("useStepContext must be used within a StepContext.Provider");return t}function nr({children:t,inBrowserBrowserRef:r}){return e.jsx(ot.Provider,{value:{inBrowserBrowserRef:r},children:t})}const rr={CodeFile:ir,CodeFileNotification:cr,DiffLink:Le,PrevDiffLink:or,NextDiffLink:ar,InlineFile:lr,LinkToApp:dr};function sr({inBrowserBrowserRef:t}){const r=K();return r.exerciseStepApp.instructionsCode?e.jsx(nr,{inBrowserBrowserRef:t,children:e.jsx(Jt,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(Qt,{code:r.exerciseStepApp.instructionsCode,components:rr})})})}):null}function it(t,r,s){const n=new URLSearchParams(t);return s===null?n.delete(r):n.set(r,s),n}function ar({app:t=0,fullPage:r=!1,children:s}){return e.jsx(Le,{app1:t,app2:t+1,fullPage:r,children:s})}function or({app:t=-1,fullPage:r=!1,children:s}){return e.jsx(Le,{app1:t,app2:t+1,fullPage:r,children:s})}function Le({app1:t=0,app2:r=1,children:s,fullPage:n=!1,to:a}){const o=K();if(!a&&!t&&!r)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function c(d){var h;if(typeof d=="number"){const b=o.exerciseIndex+d;return(h=o.allApps[b])==null?void 0:h.name}if(!d)return null;for(const{name:b,stepName:w}of o.allApps)if(d===b||d===w)return b;return null}if(a){const d=new URLSearchParams(a);t=d.get("app1"),r=d.get("app2")}const u=c(t),l=c(r);if(!u||!l)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!u&&e.jsxs("div",{children:['app1: "',t,'" is not a valid app name']}),!l&&e.jsxs("div",{children:['app2: "',r,'" is not a valid app name']})]});a||(a=`app1=${u}&app2=${l}`);const x=n?`/diff?${a}`:`?${decodeURIComponent(it(new URLSearchParams,"preview",`diff&${a}`).toString())}`;return s||(s=e.jsxs("span",{children:["Go to Diff ",n?"":"Preview"," from: ",e.jsx("code",{children:u})," to:"," ",e.jsx("code",{children:l})]})),e.jsx(ae,{to:x,children:s})}function ir({file:t}){return e.jsxs("div",{className:"border-4 border-[#ff4545] bg-[#ff454519] p-4 text-lg",children:["Something went wrong compiling ",e.jsx("b",{children:"CodeFile"})," for file: ",e.jsx("u",{children:t})," to markdown"]})}function cr({file:t,type:r="problem",children:s,variant:n,cacheLocation:a,embeddedKey:o,...c}){const[u,l]=i.useState("visible"),d=K()[r],h=()=>{u==="visible"&&(l("collapse"),setTimeout(()=>{l("none")},400))},b=ee("rounded px-4 py-1 font-mono text-sm font-semibold outline-none transition duration-300 ease-in-out",{"bg-amber-300/70 hover:bg-amber-300/40 active:bg-amber-300/50":n==="warning","bg-red-300/70 hover:bg-red-300/40 active:bg-red-300/50":n==="error"});return e.jsxs("div",{className:ee("notification important h-15 relative",{"duration-400 !my-0 !h-0 !py-0 !opacity-0 transition-all ease-out":u!=="visible",hidden:u==="none"}),children:[e.jsxs("div",{className:"absolute right-3 top-3 z-50 flex gap-4",children:[d?e.jsx("div",{className:b,title:`Edit ${t}`,children:e.jsx(le,{appFile:t,appName:d.name,...c,children:"Edit this File"})}):null,d&&n==="warning"?e.jsx("div",{className:b,title:`Remove the warning from here and from ${t} cache file`,children:e.jsx(er,{handleClick:h,cacheLocation:a,embeddedKey:o,appFullPath:d.fullPath})}):null]}),s]})}function lr({file:t,type:r="playground",children:s=e.jsx("code",{children:t}),...n}){const a=K(),o=a[r]||a[a.type],c=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[s," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:"/icons.svg#keyboard"})})]});return ENV.EPICSHOP_DEPLOYED&&o?e.jsx("div",{className:"inline-block grow",children:e.jsx(le,{appFile:t,appName:o.name,...n,children:c})}):o?e.jsx("div",{className:"inline-block grow",children:e.jsx(le,{appFile:t,appName:o.name,...n,children:c})}):r==="playground"?e.jsx(J,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:c})}):e.jsx(e.Fragment,{children:"children"})}function ur(t){return t==="problem"?"problem":t==="solution"?"solution":"playground"}function dr({to:t,children:r=e.jsx("code",{children:t.toString()}),...s}){var b;const[n]=ke(),a=`?${it(n,"pathname",t.toString()).toString()}`,o=K(),c=ur(n.get("preview")),u=Re(),l=o[c],x=(l==null?void 0:l.dev.type)==="script"?De({domain:u.domain,port:l.dev.portNumber}):((b=o.playground)==null?void 0:b.dev.type)==="browser"?o.playground.dev.pathname:null,{inBrowserBrowserRef:d}=tr(),h=x?x.slice(0,-1)+t.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(ae,{to:a,...s,className:ve(s.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:w=>{var S,f;ENV.EPICSHOP_DEPLOYED&&w.preventDefault(),(S=s.onClick)==null||S.call(s,w),(f=d.current)==null||f.handleExtrnalNavigation(t.toString())},children:r}),h?e.jsx(J,{content:"Open in new tab",children:e.jsx("a",{href:h,target:"_blank",rel:"noreferrer",className:ve("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:w=>{ENV.EPICSHOP_DEPLOYED&&w.preventDefault()},children:e.jsx(k,{name:"ExternalLink"})})}):null]})}const fr=m.intersection(m.object({type:m.literal("epicshop:test-status-update"),timestamp:m.number()}),m.union([m.object({status:m.literal("pending")}),m.object({status:m.literal("pass")}),m.object({status:m.literal("fail"),error:m.string()})])),pr=m.object({type:m.literal("epicshop:test-step-update"),status:m.literal("pass"),title:m.string(),timestamp:m.number()}),mr=m.union([pr,fr]);function hr({pathname:t,testFile:r}){const s=i.useRef(null),[n,a]=i.useState(null),[o,c]=i.useState([]);i.useEffect(()=>{function d(h){var S;if(h.source!==((S=s.current)==null?void 0:S.contentWindow)||"request"in h.data)return;const b=mr.safeParse(h.data,{path:["messageEvent","data"]});if(!b.success){console.error("Invalid message from test iframe",h.data,b.error);return}const{data:w}=b;w.type==="epicshop:test-status-update"&&(w.status==="pending"&&c([]),a(w)),w.type==="epicshop:test-step-update"&&c(f=>[...f,w])}return window.addEventListener("message",d),()=>{window.removeEventListener("message",d)}},[]);const u={pending:e.jsx(Oe,{"aria-label":"Pending"}),pass:e.jsx(k,{name:"CheckSmall","aria-label":"Passed",className:"text-emerald-700"}),fail:e.jsx(k,{name:"Remove","aria-label":"Failed",className:"text-foreground-danger"}),unknown:e.jsx(k,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})}[(n==null?void 0:n.status)??"unknown"],l=o.sort((d,h)=>d.timestamp-h.timestamp),x={pass:e.jsx(k,{name:"CheckSmall","aria-label":"Passed"}),fail:e.jsx(k,{name:"Remove","aria-label":"Failed"}),unknown:e.jsx(k,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})};return e.jsx(e.Fragment,{children:e.jsx(Lt,{className:"w-full",type:"multiple",children:e.jsx(At,{icon:u,title:r,forceMount:!0,children:e.jsxs("div",{className:"not-prose",children:[e.jsxs("div",{className:"p-5 pt-3",children:[e.jsx("ul",{className:"",children:l.map(d=>e.jsx("li",{children:e.jsxs("div",{className:"flex items-baseline gap-2 text-emerald-700",children:[e.jsx("span",{children:x[d.status]}),e.jsx("pre",{className:"whitespace-pre-wrap",children:d.title})]})},d.timestamp+d.title))}),(n==null?void 0:n.status)==="fail"?e.jsxs("div",{className:"flex items-baseline gap-2 text-foreground-danger",children:[e.jsx("span",{children:x.fail}),e.jsx("pre",{className:"max-h-48 overflow-y-auto text-foreground-danger scrollbar-thin scrollbar-thumb-scrollbar",children:n.error})]}):null,e.jsx("iframe",{ref:s,title:r,src:t+r,className:"mt-5 min-h-[420px] w-full border bg-white"})]}),e.jsxs("div",{className:"flex border-y",children:[e.jsx("button",{onClick:()=>{var d,h;return(h=(d=s.current)==null?void 0:d.contentWindow)==null?void 0:h.location.reload()},className:"border-r p-3",children:e.jsx(k,{name:"Refresh","aria-label":"Rerun Tests"})}),e.jsx("a",{href:t+r,target:"_blank",rel:"noreferrer",className:"border-r p-3",children:e.jsx(k,{name:"ExternalLink","aria-label":"Open in New Window"})})]})]})})})})}const xr=m.union([m.object({type:m.literal("init"),exitCode:m.number().nullable().optional(),isRunning:m.boolean(),output:m.array(m.object({type:m.union([m.literal("stdout"),m.literal("stderr")]),html:m.string(),timestamp:m.number()}))}),m.object({type:m.union([m.literal("stdout"),m.literal("stderr")]),data:m.string(),timestamp:m.number()}),m.object({type:m.literal("exit"),isRunning:m.literal(!1),code:m.number().nullable()})]),br=m.array(xr);function gr(t,r){return r(t)}function vr({name:t}){const[r,s]=i.useReducer(gr,{version:0,isRunning:!1,exitCode:void 0,lines:[]}),{version:n,isRunning:a,exitCode:o,lines:c}=r,u=en(`/test?${new URLSearchParams({name:t})}&v=${n}`);return i.useEffect(()=>{if(!u)return;const l=JSON.parse(u),x=br.safeParse(l);if(!x.success){console.error(x.error.flatten());return}for(const d of x.data)switch(d.type){case"exit":{const{isRunning:h,code:b}=d;s(w=>({...w,isRunning:h,exitCode:b}));break}case"init":{const{output:h,exitCode:b,isRunning:w}=d;s(S=>({...S,lines:h,exitCode:b,isRunning:w}));break}case"stderr":case"stdout":{const{type:h,data:b,timestamp:w}=d;s(S=>({...S,lines:[...S.lines,{type:h,html:b,timestamp:w}].sort((f,y)=>f.timestamp-y.timestamp),isRunning:!0}));break}}},[u]),e.jsxs("div",{className:"relative flex h-full w-full flex-col",children:[e.jsxs("div",{className:"flex h-12 w-full flex-shrink-0 items-center justify-between border-b",children:[e.jsxs("div",{className:"flex h-full items-center",children:[!a&&e.jsx($r,{name:t,onRun:()=>{s(l=>({...l,exitCode:void 0,lines:[],version:l.version+1}))}}),a?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:e.jsx(Oe,{role:"status","aria-label":"Running Tests"})}),e.jsx(wr,{name:t})]}):null]}),!a&&o!==void 0&&e.jsx("p",{className:"pr-3.5 leading-none",children:o===0?"Tests passed":`Test failed (exit code ${String(o)})`}),!a&&o!==void 0&&e.jsx(jr,{name:t,onClear:()=>{s(l=>({...l,exitCode:void 0,lines:[]}))}})]}),e.jsxs("div",{className:"flex h-full flex-col gap-5 p-5",children:[e.jsx("p",{className:"font-mono text-sm font-medium uppercase",children:"Test Output"}),e.jsx("pre",{className:"shadow-on-scrollbox flex-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-scrollbar",children:c.map(l=>e.jsx("code",{"data-type":l.type,dangerouslySetInnerHTML:{__html:l.html}},l.timestamp))})]})]})}function $r({name:t,onRun:r}){const s=W(),n=i.useRef(r);return i.useEffect(()=>{n.current=r},[r]),i.useEffect(()=>{var a,o;(a=s.data)!=null&&a.success&&((o=n.current)==null||o.call(n))},[s.data]),e.jsxs(s.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(J,{content:s.state==="idle"?"Run Tests":"Running Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"run",className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:s.state==="idle"?e.jsx(k,{name:"TriangleSmall"}):e.jsx(Oe,{role:"status"})})})]})}function jr({name:t,onClear:r}){const s=W(),n=i.useRef(r);return i.useEffect(()=>{n.current=r},[r]),i.useEffect(()=>{var a,o;(a=s.data)!=null&&a.success&&((o=n.current)==null||o.call(n))},[s.data]),e.jsxs(s.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(J,{content:s.state==="idle"?"Clear Tests":"Clearing Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"clear",className:"flex h-full flex-grow items-center justify-center border-l px-3.5",children:s.state==="idle"?e.jsx(k,{name:"Clear"}):e.jsx(k,{name:"Clear",className:"animate-pulse",role:"status"})})})]})}function wr({name:t,onStop:r}){const s=W(),n=i.useRef(r);return i.useEffect(()=>{n.current=r},[r]),i.useEffect(()=>{var a,o;(a=s.data)!=null&&a.success&&((o=n.current)==null||o.call(n))},[s.data]),e.jsxs(s.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(J,{content:s.state==="idle"?"Stop Tests":"Stopping Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"stop",className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:s.state==="idle"?e.jsx(k,{name:"Stop"}):e.jsx(k,{name:"Stop",className:"animate-pulse",role:"status"})})})]})}function yr({appInfo:t,problemAppName:r,allApps:s}){const[n,a]=i.useState(0);let o=e.jsx("p",{children:"No tests here. Sorry."});if((t==null?void 0:t.test.type)==="script"&&(o=e.jsx(vr,{name:t.name})),(t==null?void 0:t.test.type)==="browser"){const{pathname:c}=t.test;o=e.jsxs("div",{className:"flex h-full w-full flex-grow flex-col",children:[t.test.testFiles.map(u=>e.jsx("div",{children:e.jsx(hr,{pathname:c,testFile:u})},u)),e.jsx("div",{className:"px-3 py-[21px]",children:e.jsxs("button",{onClick:()=>a(u=>u+1),className:"flex items-center gap-2 font-mono text-sm uppercase leading-none",children:[e.jsx(k,{name:"Refresh","aria-hidden":!0})," Rerun All Tests"]})})]},n)}return e.jsx(st,{playgroundAppName:t==null?void 0:t.appName,problemAppName:r,allApps:s,children:o})}const ct="Popover",[lt,us]=Ne(ct,[Ye]),Ae=Ye(),[Nr,oe]=lt(ct),Sr=t=>{const{__scopePopover:r,children:s,open:n,defaultOpen:a,onOpenChange:o,modal:c=!1}=t,u=Ae(r),l=i.useRef(null),[x,d]=i.useState(!1),[h=!1,b]=Pe({prop:n,defaultProp:a,onChange:o});return i.createElement(gt,u,i.createElement(Nr,{scope:r,contentId:Ee(),triggerRef:l,open:h,onOpenChange:b,onOpenToggle:i.useCallback(()=>b(w=>!w),[b]),hasCustomAnchor:x,onCustomAnchorAdd:i.useCallback(()=>d(!0),[]),onCustomAnchorRemove:i.useCallback(()=>d(!1),[]),modal:c},s))},Pr="PopoverTrigger",Er=i.forwardRef((t,r)=>{const{__scopePopover:s,...n}=t,a=oe(Pr,s),o=Ae(s),c=Se(r,a.triggerRef),u=i.createElement(te.button,B({type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":ft(a.open)},n,{ref:c,onClick:z(t.onClick,a.onOpenToggle)}));return a.hasCustomAnchor?u:i.createElement(vt,B({asChild:!0},o),u)}),ut="PopoverPortal",[Cr,Tr]=lt(ut,{forceMount:void 0}),Dr=t=>{const{__scopePopover:r,forceMount:s,children:n,container:a}=t,o=oe(ut,r);return i.createElement(Cr,{scope:r,forceMount:s},i.createElement(Ce,{present:s||o.open},i.createElement(Ut,{asChild:!0,container:a},n)))},ue="PopoverContent",Or=i.forwardRef((t,r)=>{const s=Tr(ue,t.__scopePopover),{forceMount:n=s.forceMount,...a}=t,o=oe(ue,t.__scopePopover);return i.createElement(Ce,{present:n||o.open},o.modal?i.createElement(Rr,B({},a,{ref:r})):i.createElement(kr,B({},a,{ref:r})))}),Rr=i.forwardRef((t,r)=>{const s=oe(ue,t.__scopePopover),n=i.useRef(null),a=Se(r,n),o=i.useRef(!1);return i.useEffect(()=>{const c=n.current;if(c)return Ht(c)},[]),i.createElement(Yt,{as:$t,allowPinchZoom:!0},i.createElement(dt,B({},t,{ref:a,trapFocus:s.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:z(t.onCloseAutoFocus,c=>{var u;c.preventDefault(),o.current||(u=s.triggerRef.current)===null||u===void 0||u.focus()}),onPointerDownOutside:z(t.onPointerDownOutside,c=>{const u=c.detail.originalEvent,l=u.button===0&&u.ctrlKey===!0,x=u.button===2||l;o.current=x},{checkForDefaultPrevented:!1}),onFocusOutside:z(t.onFocusOutside,c=>c.preventDefault(),{checkForDefaultPrevented:!1})})))}),kr=i.forwardRef((t,r)=>{const s=oe(ue,t.__scopePopover),n=i.useRef(!1),a=i.useRef(!1);return i.createElement(dt,B({},t,{ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var c;if((c=t.onCloseAutoFocus)===null||c===void 0||c.call(t,o),!o.defaultPrevented){var u;n.current||(u=s.triggerRef.current)===null||u===void 0||u.focus(),o.preventDefault()}n.current=!1,a.current=!1},onInteractOutside:o=>{var c,u;(c=t.onInteractOutside)===null||c===void 0||c.call(t,o),o.defaultPrevented||(n.current=!0,o.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const l=o.target;((u=s.triggerRef.current)===null||u===void 0?void 0:u.contains(l))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&a.current&&o.preventDefault()}}))}),dt=i.forwardRef((t,r)=>{const{__scopePopover:s,trapFocus:n,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:c,onEscapeKeyDown:u,onPointerDownOutside:l,onFocusOutside:x,onInteractOutside:d,...h}=t,b=oe(ue,s),w=Ae(s);return Bt(),i.createElement(Vt,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:a,onUnmountAutoFocus:o},i.createElement(jt,{asChild:!0,disableOutsidePointerEvents:c,onInteractOutside:d,onEscapeKeyDown:u,onPointerDownOutside:l,onFocusOutside:x,onDismiss:()=>b.onOpenChange(!1)},i.createElement(wt,B({"data-state":ft(b.open),role:"dialog",id:b.contentId},w,h,{ref:r,style:{...h.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}}))))});function ft(t){return t?"open":"closed"}const _r=Sr,Mr=Er,Ir=Dr,Fr=Or;function Lr(){var c,u;const t=K(),[r,s]=i.useState(!1),n=i.useRef(null);function a(){s(!1)}const o=(c=t.playground)==null?void 0:c.appName;return e.jsx(e.Fragment,{children:e.jsxs(_r,{open:r,onOpenChange:s,children:[e.jsx(Mr,{asChild:!0,children:e.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(k,{name:"Files"}),"Files"]})}),e.jsx(Ir,{children:e.jsx(Fr,{ref:n,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),t.problem&&((u=t.playground)==null?void 0:u.appName)!==t.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(Fe,{appName:t.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(i.Suspense,{fallback:e.jsx(J,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(k,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(ze,{resolve:t.diff,errorElement:e.jsx("div",{className:"text-foreground-danger",children:"Something went wrong."}),children:({diffFiles:l})=>{if(!l)return e.jsx("p",{className:"text-foreground-danger",children:"Unable to determine diff"});if(typeof l=="string")return e.jsx("p",{className:"text-foreground-danger",children:l});if(!l.length)return e.jsx("p",{children:"No files changed"});const x=o||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...x,children:[l.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:e.jsx(le,{appFile:l.map(d=>`${d.path},${d.line},1`),appName:"playground",onUpdate:a,children:e.jsx("p",{children:"Open All Files"})})}):null,l.map(d=>{var h;return e.jsx("li",{"data-state":d.status,children:e.jsx(le,{appFile:`${d.path},${d.line},1`,appName:ENV.EPICSHOP_DEPLOYED?((h=t.problem)==null?void 0:h.name)??"playground":"playground",onUpdate:a,children:e.jsx("code",{children:d.path})})},d.path)})]})}})})})]})})})]})})}function pt(t,r){var c;const s=(t==null?void 0:t.exerciseStepApp.exerciseNumber.toString().padStart(2,"0"))??"00",n=(t==null?void 0:t.exerciseStepApp.stepNumber.toString().padStart(2,"0"))??"00",a={problem:"💪",solution:"🏁"}[(t==null?void 0:t.type)??"problem"],o=((c=t==null?void 0:t[t.type])==null?void 0:c.title)??"N/A";return{emoji:a,stepNumber:n,title:o,exerciseNumber:s,exerciseTitle:(t==null?void 0:t.exerciseTitle)??"Unknown exercise",workshopTitle:r,type:(t==null?void 0:t.type)??"problem"}}const ds=({data:t,matches:r})=>{var l;const s=(l=r.find(x=>x.id==="root"))==null?void 0:l.data,{emoji:n,stepNumber:a,title:o,exerciseNumber:c,exerciseTitle:u}=pt(t);return[{title:`${n} | ${a}. ${o} | ${c}. ${u} | ${(s==null?void 0:s.workshopTitle)??"Epic Workshop"}`}]},ye=["playground","problem","solution","tests","diff","chat"],Ar=t=>!!(t&&ye.includes(t));function Ur(t,r,s){const n=new URLSearchParams(t);return s===null?n.delete(r):n.set(r,s),n}function fs(){var h,b,w,S,f;const t=K(),[r]=ke(),s=r.get("preview"),n=i.useRef(null),a=pt(t),o=Te(),c=mt();function u(y){var C,P;if(y==="tests")return ENV.EPICSHOP_DEPLOYED||!t.playground||t.playground.test.type==="none";if(y==="problem"||y==="solution"){if(((C=t[y])==null?void 0:C.dev.type)==="none")return!0;if(ENV.EPICSHOP_DEPLOYED)return((P=t[y])==null?void 0:P.dev.type)!=="browser"}return!!(y==="playground"&&ENV.EPICSHOP_DEPLOYED)}const l=Ar(s)?s:ye.find(y=>!u(y)),x=`/diff?${new URLSearchParams({app1:((h=t.problem)==null?void 0:h.name)??"",app2:((b=t.solution)==null?void 0:b.name)??""})}`;function d(y){y.altKey&&!y.ctrlKey&&!y.shiftKey&&!y.metaKey&&(y.preventDefault(),c(x))}return e.jsx("div",{className:"flex flex-grow flex-col",children:e.jsxs("main",{className:"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-tight",children:e.jsxs("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:[e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsxs(ae,{to:`/${a.exerciseNumber}`,className:"hover:underline",children:[a.exerciseNumber,". ",a.exerciseTitle]}),"/",e.jsxs(ae,{to:".",className:"hover:underline",children:[a.stepNumber,". ",a.title," (",a.emoji," ",a.type,")"]})]}),t.problem&&((w=t.playground)==null?void 0:w.appName)!==t.problem.name?e.jsx(Fe,{appName:t.problem.name}):null]})}),e.jsx("article",{id:t.articleId,className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-10 pt-8 scrollbar-thin scrollbar-thumb-scrollbar",children:t.exerciseStepApp.instructionsCode?e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(sr,{inBrowserBrowserRef:n})}):e.jsx("p",{children:"No instructions yet..."})},t.articleId),e.jsx(ht,{elementQuery:`#${t.articleId}`},`scroll-${t.articleId}`),t.type==="solution"?e.jsx(rn,{type:"step",exerciseNumber:t.exerciseStepApp.exerciseNumber,stepNumber:t.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(Lr,{})})}),e.jsx(Xt,{appName:t.exerciseStepApp.name,relativePath:t.exerciseStepApp.relativePath}),e.jsx(nn,{prev:t.prevStepLink?{to:t.prevStepLink.to,"aria-label":"Previous Step"}:null,next:t.nextStepLink?{to:t.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsxs(Tn,{className:"relative col-span-1 row-span-1 flex flex-col overflow-y-auto",value:l,children:[e.jsx(Dn,{className:"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar",children:ye.map(y=>e.jsx(On,{value:y,hidden:u(y),asChild:!0,className:ee("clip-path-button relative px-6 py-4 font-mono text-sm uppercase radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80"),children:e.jsx(ae,{id:`${y}-tab`,className:"inline-block h-full outline-none focus:bg-foreground/80 focus:text-background/80",preventScrollReset:!0,prefetch:"intent",onClick:d,to:y==="diff"&&o?x:`?${Ur(r,"preview",y==="playground"?null:y)}`,children:y})},y))}),e.jsxs("div",{className:"relative z-10 flex flex-grow flex-col overflow-y-auto",children:[e.jsx(se,{value:"playground",className:"flex flex-grow items-center justify-center radix-state-inactive:hidden",children:e.jsx(Xn,{appInfo:t.playground,problemAppName:(S=t.problem)==null?void 0:S.name,inBrowserBrowserRef:n,allApps:t.allApps})}),e.jsx(se,{value:"problem",className:"flex flex-grow items-center justify-center radix-state-inactive:hidden",children:e.jsx(we,{appInfo:t.problem,inBrowserBrowserRef:n})}),e.jsx(se,{value:"solution",className:"flex flex-grow items-center justify-center radix-state-inactive:hidden",children:e.jsx(we,{appInfo:t.solution,inBrowserBrowserRef:n})}),e.jsx(se,{value:"tests",className:"flex flex-grow items-start justify-center overflow-hidden radix-state-inactive:hidden",children:e.jsx(yr,{appInfo:t.playground,problemAppName:(f=t.problem)==null?void 0:f.name,allApps:t.allApps})}),e.jsx(se,{value:"diff",className:"flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",children:e.jsx(zt,{diff:t.diff,allApps:t.allApps})}),e.jsx(se,{value:"chat",className:"flex h-full flex-grow items-start justify-center radix-state-inactive:hidden",children:e.jsx(An,{})})]})]})]})})}function ps(){return e.jsx(tn,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{ps as ErrorBoundary,fs as default,ds as meta};
|
|
2
|
+
//# sourceMappingURL=_layout-CV1wRoXz.js.map
|