@epic-web/workshop-app 6.84.3 → 6.84.4
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/cache-Dm2YHH2b.js +2 -0
- package/build/client/assets/cache-Dm2YHH2b.js.map +1 -0
- package/build/client/assets/{manifest-0c681976.js → manifest-f3c7aa16.js} +1 -1
- package/build/client/assets/{root-BfDhr_Iz.js → root-DK6bFtH3.js} +2 -2
- package/build/client/assets/{root-BfDhr_Iz.js.map → root-DK6bFtH3.js.map} +1 -1
- package/build/client/assets/tailwind-C4lY7wdh.css +1 -0
- package/build/server/index.js +168 -51
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/cache-B9dY5MVl.js +0 -2
- package/build/client/assets/cache-B9dY5MVl.js.map +0 -1
- package/build/client/assets/tailwind-Fa5KHifZ.css +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as $}from"./chunk-4LKRSAEJ-B1jEeA_F.js";import{w as W,f as D,d as M}from"./chunk-JZWAC4HX-0uKZ9a0b.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as u}from"./index-Bi6L2ga8.js";import{C as F}from"./client-only-CUo_KSMO.js";import{i as U,I as V,B as T}from"./button-CPJdTWu4.js";import{c as I,I as p,f as R,e as q,h as J,i as K,b as A,j as P,k as _}from"./misc-w_rthUBN.js";import{L as G}from"./launch-editor-CPRN8qq5.js";import"./pe-tear8uic.js";import"./progress-bar-DTHojpoN.js";import"./root-loader-DlSJfUY6.js";function X({selectedWorkshops:r,availableWorkshops:m,currentWorkshopId:a}){const[o,s]=M(),i=(t,x)=>{const d=x?[...r,t]:r.filter(g=>g!==t),c=new URLSearchParams(o);d.length>0?c.set("workshops",d.join(",")):c.delete("workshops"),s(c)};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Workshop Filter"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:m.map(t=>{const x=t.displayName,d=t.shortId,c=t.repoName??t.subtitle,g=t.hasStoredDisplayName,j=g&&t.id!=="global";return e.jsxs("label",{className:"flex items-center gap-2",title:c?`${x} (${c})`:x,children:[e.jsx("input",{type:"checkbox",checked:r.includes(t.id),onChange:b=>i(t.id,b.target.checked),className:"rounded"}),e.jsxs("span",{className:I("text-sm",t.id===a?"text-primary font-bold":null),children:[e.jsxs("span",{className:"inline-flex max-w-[22rem] flex-col leading-tight",children:[e.jsx("span",{className:I(g?"truncate":"font-mono text-xs break-all"),children:x}),j?e.jsxs("span",{className:I("text-muted-foreground font-mono text-xs font-normal",t.id===a?"text-primary/80":null),title:t.id,children:[c?`${c} • `:null,d]}):null]})," ",t.id===a?"(current)":null]})]},t.id)})})]})}function Z({filterQuery:r}){const[m,a]=M(),[o,s]=u.useState(r),i=u.useRef(null);u.useEffect(()=>{s(r)},[r]);const t=d=>{const c=new URLSearchParams(m);d?c.set("q",d):c.delete("q"),a(c)},x=()=>{s(""),t(""),i.current?.focus()};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Search Cache Entries"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{ref:i,type:"text",placeholder:"Search by key, value, cache name, or workshop...",value:o,onChange:d=>{s(d.target.value),t(d.target.value)},className:"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none"}),o?e.jsx(V,{onClick:x,title:"Clear search",children:e.jsx(p,{name:"Close",className:"h-4 w-4"})}):null]})]})}function Q({workshopId:r,cacheName:m,filename:a,entryKey:o}){const s=D(),i=D(),[t,x]=u.useState(null),[d,c]=u.useState(null),[g,j]=u.useState(!1),[b,n]=u.useState(!1),[l,w]=u.useState(!1),v=u.useRef(null),S=u.useRef(i.state),f=`${r}/${m}/${a}`,N=s.data?.entry?.value,k=s.state==="loading",y=!!s.data?.entry,E=s.data?.entry===null,L=b&&l&&!k&&s.data===void 0&&s.state==="idle";u.useEffect(()=>{s.state!=="idle"&&w(!0)},[s.state]),u.useEffect(()=>{if(y){const h=JSON.stringify(N,null,2)??"";x(h),c(h),j(!1)}},[y,N]),u.useEffect(()=>{const h=i.state;S.current!=="idle"&&h==="idle"&&i.data?.status==="success"&&(c(v.current??""),j(!1)),S.current=h},[i.state,i.data?.status]);const O=()=>{t!==null&&(v.current=t,i.submit({intent:"update-entry",workshopId:r,cacheName:m,filename:a,newValue:t},{method:"POST"}))},B=h=>{if(x(h),d===null){j(!1);return}j(h!==d)},z=()=>{d!==null&&(x(d),j(!1))},Y=h=>{h.currentTarget.open&&!b?(s.load($("/admin/cache/*",{"*":f})),n(!0)):h.currentTarget.open||(n(!1),w(!1))},H=()=>{s.load($("/admin/cache/*",{"*":f}))};return e.jsxs("details",{className:"mt-2",onToggle:Y,children:[e.jsx("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:"Edit entry details"}),e.jsx("div",{className:"border-border bg-muted mt-2 space-y-3 rounded border p-3",children:k?e.jsx("p",{className:"text-muted-foreground text-sm",children:"Loading entry..."}):L?e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-destructive text-sm",children:"Failed to load entry details."}),e.jsx(T,{varient:"mono",onClick:H,children:"Retry"})]}):E?e.jsx("p",{className:"text-destructive text-sm",children:"Entry details were not found."}):y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Key:"}),e.jsx("code",{className:"bg-background rounded border px-2 py-1 text-sm",children:o})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Value:"}),e.jsx("textarea",{value:t??"",onChange:h=>B(h.target.value),className:"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none",placeholder:"Enter JSON value..."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(T,{varient:"primary",onClick:O,disabled:!g||i.state!=="idle",children:i.state!=="idle"?"Saving...":"Save"}),e.jsx(T,{varient:"mono",onClick:z,disabled:!g,children:"Reset"})]})]}):e.jsx("p",{className:"text-muted-foreground text-sm",children:"Open to load entry details."})})]})}function ee({skippedFiles:r,workshopId:m,cacheName:a}){const o=D();return r.length===0?null:e.jsxs("div",{className:"border-warning bg-warning mt-4 rounded border p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx(p,{name:"TriangleAlert",className:"text-warning-foreground h-4 w-4"}),e.jsxs("h5",{className:"text-warning-foreground font-medium",children:["Skipped Files (",r.length,")"]})]}),e.jsx("p",{className:"text-warning-foreground/80 mb-3 text-sm",children:"These cache files were skipped because they exceed the 3MB size limit:"}),e.jsx("div",{className:"space-y-2",children:r.map(s=>e.jsxs("div",{className:"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-warning-foreground truncate font-mono text-sm font-medium",children:s.filename}),e.jsxs("div",{className:"text-warning-foreground/70 text-xs",children:[s.error," • Size:"," ",e.jsx("span",{title:`${s.size} bytes`,children:R(s.size)})]})]}),e.jsx("div",{className:"ml-2 flex shrink-0",children:e.jsx(C,{onConfirm:()=>{o.submit({intent:"delete-entry",workshopId:m,cacheName:a,filename:s.filename},{method:"POST"})},title:"Delete large cache file",className:"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground",children:e.jsx(p,{name:"Remove",className:"h-4 w-4"})})})]},s.filename))})]})}const fe=W(function({loaderData:m}){const a=D(),o=(n,l,w)=>{a.submit({intent:"delete-entry",workshopId:n,cacheName:l,filename:w},{method:"POST"})},s=(n,l)=>{a.submit({intent:"delete-cache",workshopId:n,cacheName:l},{method:"POST"})},i=n=>{a.submit({intent:"delete-workshop-cache",workshopId:n},{method:"POST"})},{currentWorkshopId:t,currentWorkshop:x,filteredCaches:d,filterQuery:c,selectedWorkshops:g,availableWorkshops:j}=m,b=x;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"mb-2 text-2xl font-bold",children:"Cache Management"}),e.jsxs("p",{className:"text-muted-foreground",children:["Current Workshop:"," ",e.jsx("span",{className:"text-foreground font-semibold",children:e.jsx("span",{className:I(b?.hasStoredDisplayName?null:"font-mono text-xs"),children:b.displayName??t})})]}),b?.hasStoredDisplayName?e.jsxs("p",{className:"text-muted-foreground mt-1 text-xs",children:["Instance ID:"," ",e.jsx("span",{className:"font-mono",title:t,children:b.shortId})]}):null]}),e.jsx(X,{selectedWorkshops:g,availableWorkshops:j,currentWorkshopId:t}),e.jsx(Z,{filterQuery:c}),a.data?.status==="success"?e.jsx("div",{className:"border-border bg-success text-success-foreground rounded border p-4",children:a.data.message}):null,a.data?.status==="error"?e.jsx("div",{className:"border-border bg-destructive text-destructive-foreground rounded border p-4",children:a.data.error}):null,d.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center",children:"No caches found matching your criteria."}):null,e.jsx("div",{className:"space-y-6",children:d.map(n=>e.jsxs("details",{open:n.workshopId===t,children:[e.jsx("summary",{className:"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4",children:e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("h3",{className:"text-card-foreground flex min-w-0 items-center gap-2 text-lg font-semibold",children:[e.jsx(p,{name:"Files",className:"h-5 w-5 shrink-0"}),e.jsx("span",{className:I("min-w-0",n.workshop.hasStoredDisplayName?"truncate":"font-mono text-xs break-all"),title:n.workshopId,children:n.workshop.displayName}),n.workshopId===t?e.jsx("span",{className:"bg-primary text-primary-foreground rounded px-2 py-1 text-xs",children:"Current"}):null]}),n.workshop.hasStoredDisplayName&&n.workshopId!=="global"?e.jsxs("div",{className:"text-muted-foreground mt-1 flex flex-wrap items-center gap-2 text-xs",children:[n.workshop.repoName?e.jsx("span",{className:"truncate",children:n.workshop.repoName}):n.workshop.subtitle?e.jsx("span",{className:"truncate",children:n.workshop.subtitle}):null,e.jsx("span",{className:"font-mono",title:n.workshopId,children:n.workshop.shortId})]}):null]}),e.jsx(C,{onConfirm:()=>i(n.workshopId),title:"Delete all workshop caches",children:e.jsx(p,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsx("div",{className:"mt-4 space-y-4 pl-4",children:n.caches.map(l=>{const w=l.entries.reduce((f,N)=>f+(N.size||0),0),v=(l.skippedFiles||[]).reduce((f,N)=>f+N.size,0),S=w+v;return e.jsxs("details",{className:"bg-muted rounded-md",children:[e.jsx("summary",{className:"hover:bg-accent cursor-pointer p-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-muted-foreground flex items-center gap-2 font-medium",children:[e.jsx(p,{name:"Files",className:"h-4 w-4"}),l.name,e.jsxs("span",{className:"text-sm",children:["(",l.entries.length," entr",l.entries.length===1?"y":"ies",")"]}),S>0?e.jsxs("span",{className:"text-muted-foreground text-sm",children:["•"," ",e.jsx("span",{title:`${S} bytes`,children:R(S)})," ","total",v>0?e.jsxs("span",{className:"text-warning",children:[" ","(",e.jsx("span",{title:`${v} bytes`,children:R(v)})," ","skipped)"]}):null]}):null]}),e.jsx(C,{onConfirm:()=>s(n.workshopId,l.name),title:"Delete cache",children:e.jsx(p,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsxs("div",{className:"p-3 pt-0",children:[l.entries.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No entries match your search."}):null,l.skippedFiles&&l.skippedFiles.length>0?e.jsx(ee,{skippedFiles:l.skippedFiles,workshopId:n.workshopId,cacheName:l.name}):null,e.jsx("div",{className:"space-y-2",children:l.entries.map(({key:f,metadata:N,filename:k,size:y,filepath:E})=>e.jsxs("div",{className:"border-border bg-background rounded border p-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-2",children:[e.jsx("div",{className:"truncate font-mono text-sm font-medium",title:f,children:f}),y?e.jsx("span",{className:"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap",title:`${y} bytes`,children:R(y)}):null]}),e.jsx(se,{metadata:N})]}),e.jsxs("div",{className:"ml-4 flex shrink-0 gap-1",children:[e.jsx("a",{href:$("/admin/cache/*",{"*":`${n.workshopId}/${l.name}/${k}`}),target:"_blank",rel:"noopener noreferrer",className:"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none",title:"View JSON",children:e.jsx(p,{name:"ExternalLink",className:"h-4 w-4"})}),E?e.jsx(G,{file:E,className:U,children:e.jsx(p,{name:"Files",className:"h-4 w-4",title:"Open in editor"})}):null,e.jsx(C,{onConfirm:()=>o(n.workshopId,l.name,k),title:"Delete entry",children:e.jsx(p,{name:"Remove",className:"h-4 w-4"})})]})]}),e.jsx(Q,{workshopId:n.workshopId,cacheName:l.name,filename:k,entryKey:f})]},f))})]})]},l.name)})})]},n.workshopId))})]})});function se({metadata:r}){const m=J(),[,a]=u.useState(Date.now()),o=K(r);A(()=>{a(Date.now())},1e3);const s=m(r.createdTime),i=o?_(o):{text:"Never",isExpired:!1,isExpiringSoon:!1};return e.jsxs("div",{className:"text-muted-foreground flex flex-col gap-1 text-xs",children:[e.jsxs("div",{children:["Created: ",s.format("MMM D, YYYY HH:mm:ss")," ",e.jsx(F,{children:()=>`(${s.fromNow()})`})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.ttl!==void 0&&r.ttl!==null?e.jsxs("span",{children:["TTL:"," ",r.ttl===1/0?"Forever":e.jsx("span",{title:`${r.ttl}ms`,children:P(r.ttl)})]}):null,r.swr!==void 0?e.jsxs("span",{children:["SWR:"," ",e.jsx("span",{title:`${r.swr}ms`,children:P(r.swr)})]}):null,e.jsx("div",{className:`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${i.isExpired?"bg-destructive text-destructive-foreground":i.isExpiringSoon?"bg-warning text-warning-foreground":"text-foreground"}`,children:o?e.jsxs(e.Fragment,{children:["Expires: ",m(o).format("MMM D, YYYY HH:mm:ss")," (",e.jsx("span",{className:"tabular-nums",children:e.jsx(F,{children:()=>i.text})}),")"]}):"Expires: Never"})]})]})}function C({onConfirm:r,children:m,className:a,...o}){const s=q();return e.jsx(V,{...s.getButtonProps({onClick:s.doubleCheck?r:void 0,...o}),className:I(s.doubleCheck?"bg-destructive text-destructive-foreground":null,a),children:s.doubleCheck?"✓":m})}export{fe as default};
|
|
2
|
+
//# sourceMappingURL=cache-Dm2YHH2b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-Dm2YHH2b.js","sources":["../../../app/routes/admin+/cache.tsx"],"sourcesContent":["import {\n\tdeleteCacheEntry,\n\tdeleteWorkshopCache,\n\tgetAllWorkshopCaches,\n\tgetGlobalCaches,\n\tglobalCacheDirectoryExists,\n\treadWorkshopCacheMetadata,\n\tupdateCacheEntry,\n} from '@epic-web/workshop-utils/cache.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport { getErrorMessage } from '@epic-web/workshop-utils/utils'\nimport { useEffect, useRef, useState } from 'react'\nimport { href, useFetcher, useSearchParams } from 'react-router'\nimport { ClientOnly } from 'remix-utils/client-only'\nimport { z } from 'zod'\nimport {\n\tButton,\n\tIconButton,\n\ticonButtonClassName,\n} from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport {\n\tcalculateExpirationTime,\n\tcn,\n\tensureUndeployed,\n\tformatDuration,\n\tformatFileSize,\n\tformatTimeRemaining,\n\tuseDayjs,\n\tuseDoubleCheck,\n\tuseInterval,\n} from '#app/utils/misc.tsx'\nimport { type Route } from './+types/cache.ts'\n\nfunction normalizeSearchQuery(query: string) {\n\treturn query.trim().toLowerCase()\n}\n\nfunction entryValueMatches(value: unknown, query: string) {\n\tif (!query) return true\n\tif (value === null || value === undefined) return false\n\tif (typeof value === 'string') {\n\t\treturn value.toLowerCase().includes(query)\n\t}\n\ttry {\n\t\tconst serialized = JSON.stringify(value)\n\t\tif (!serialized) return false\n\t\treturn serialized.toLowerCase().includes(query)\n\t} catch {\n\t\treturn false\n\t}\n}\n\nfunction isLikelyMd5Hash(value: string) {\n\treturn /^[a-f0-9]{32}$/i.test(value)\n}\n\nfunction getShortHash(value: string) {\n\tif (!isLikelyMd5Hash(value)) return value\n\treturn `${value.slice(0, 7)}...${value.slice(-6)}`\n}\n\ntype WorkshopMeta = {\n\tid: string\n\tdisplayName: string\n\tshortId: string\n\trepoName?: string\n\tsubtitle?: string\n\thasStoredDisplayName: boolean\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst currentWorkshopId = getEnv().EPICSHOP_WORKSHOP_INSTANCE_ID\n\tconst allWorkshopCaches = await getAllWorkshopCaches()\n\tconst globalCaches = await getGlobalCaches()\n\tconst allCaches = [...allWorkshopCaches, ...globalCaches]\n\n\tconst url = new URL(request.url)\n\tconst filterQuery = url.searchParams.get('q') || ''\n\n\t// Ensure 'global' is always in available workshops if global cache directory exists\n\tconst availableWorkshopIds = new Set(allCaches.map((w) => w.workshopId))\n\tconst globalDirExists = await globalCacheDirectoryExists()\n\tif (globalDirExists) {\n\t\tavailableWorkshopIds.add('global')\n\t}\n\t// Always include the current workshop in the UI, even if it has no caches yet.\n\tif (currentWorkshopId) {\n\t\tavailableWorkshopIds.add(currentWorkshopId)\n\t}\n\n\tconst selectedWorkshops = url.searchParams\n\t\t.get('workshops')\n\t\t?.split(',')\n\t\t.filter(Boolean) || [\n\t\tcurrentWorkshopId,\n\t\t...(globalDirExists ? ['global'] : []),\n\t]\n\tconst normalizedQuery = normalizeSearchQuery(filterQuery)\n\n\tconst workshopMetaById: Record<string, WorkshopMeta> = {}\n\n\tif (availableWorkshopIds.has('global')) {\n\t\tworkshopMetaById.global = {\n\t\t\tid: 'global',\n\t\t\tdisplayName: 'Global caches',\n\t\t\tshortId: 'global',\n\t\t\thasStoredDisplayName: true,\n\t\t}\n\t}\n\n\tconst workshopIds = Array.from(availableWorkshopIds).filter(\n\t\t(workshopId) => workshopId !== 'global',\n\t)\n\tconst workshopIdMetas = await Promise.all(\n\t\tworkshopIds.map(async (workshopId) => {\n\t\t\tconst meta = await readWorkshopCacheMetadata(workshopId)\n\t\t\treturn [workshopId, meta] as const\n\t\t}),\n\t)\n\tfor (const [workshopId, meta] of workshopIdMetas) {\n\t\tworkshopMetaById[workshopId] = {\n\t\t\tid: workshopId,\n\t\t\tdisplayName: meta?.displayName ?? workshopId,\n\t\t\tshortId: getShortHash(workshopId),\n\t\t\trepoName: meta?.repoName,\n\t\t\tsubtitle: meta?.subtitle,\n\t\t\thasStoredDisplayName: Boolean(meta?.displayName),\n\t\t}\n\t}\n\n\tconst compareWorkshopIds = (a: string, b: string) => {\n\t\tif (a === currentWorkshopId) return -1\n\t\tif (b === currentWorkshopId) return 1\n\t\tif (a === 'global') return -1\n\t\tif (b === 'global') return 1\n\t\tconst aLabel = workshopMetaById[a]?.displayName ?? a\n\t\tconst bLabel = workshopMetaById[b]?.displayName ?? b\n\t\treturn aLabel.localeCompare(bLabel)\n\t}\n\n\t// Filter caches based on search query and selected workshops\n\tconst filteredCaches = allCaches\n\t\t.filter(\n\t\t\t(workshopCache) =>\n\t\t\t\tselectedWorkshops.includes(workshopCache.workshopId) ||\n\t\t\t\tselectedWorkshops.length === 0,\n\t\t)\n\t\t.map((workshopCache) => {\n\t\t\tconst workshop =\n\t\t\t\tworkshopMetaById[workshopCache.workshopId] ??\n\t\t\t\t({\n\t\t\t\t\tid: workshopCache.workshopId,\n\t\t\t\t\tdisplayName: workshopCache.workshopId,\n\t\t\t\t\tshortId: getShortHash(workshopCache.workshopId),\n\t\t\t\t\thasStoredDisplayName: false,\n\t\t\t\t} satisfies WorkshopMeta)\n\t\t\tconst workshopLabel = workshop.displayName\n\t\t\tconst workshopMatchesQuery =\n\t\t\t\tnormalizedQuery === ''\n\t\t\t\t\t? true\n\t\t\t\t\t: workshopLabel.toLowerCase().includes(normalizedQuery) ||\n\t\t\t\t\t\tworkshopCache.workshopId.toLowerCase().includes(normalizedQuery)\n\t\t\treturn {\n\t\t\t\t...workshopCache,\n\t\t\t\tworkshop,\n\t\t\t\tcaches: workshopCache.caches\n\t\t\t\t\t.map((cache) => {\n\t\t\t\t\t\tconst cacheNameMatches =\n\t\t\t\t\t\t\tnormalizedQuery === ''\n\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t: workshopMatchesQuery ||\n\t\t\t\t\t\t\t\t\tcache.name.toLowerCase().includes(normalizedQuery)\n\t\t\t\t\t\tconst entries = cache.entries\n\t\t\t\t\t\t\t.filter((entry) => {\n\t\t\t\t\t\t\t\tif (normalizedQuery === '') return true\n\t\t\t\t\t\t\t\tif (cacheNameMatches) return true\n\t\t\t\t\t\t\t\tif (entry.key.toLowerCase().includes(normalizedQuery))\n\t\t\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t\t\treturn entryValueMatches(entry.entry.value, normalizedQuery)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((entry) => ({\n\t\t\t\t\t\t\t\tkey: entry.key,\n\t\t\t\t\t\t\t\tfilename: entry.filename,\n\t\t\t\t\t\t\t\tsize: entry.size,\n\t\t\t\t\t\t\t\tfilepath: entry.filepath,\n\t\t\t\t\t\t\t\tmetadata: entry.entry.metadata,\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\treturn { ...cache, entries }\n\t\t\t\t\t})\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(cache) => cache.entries.length > 0 || normalizedQuery === '',\n\t\t\t\t\t),\n\t\t\t}\n\t\t})\n\t\t.filter(\n\t\t\t(workshopCache) =>\n\t\t\t\tworkshopCache.caches.length > 0 || normalizedQuery === '',\n\t\t)\n\n\treturn {\n\t\tcurrentWorkshopId,\n\t\tcurrentWorkshop:\n\t\t\tworkshopMetaById[currentWorkshopId] ??\n\t\t\t({\n\t\t\t\tid: currentWorkshopId,\n\t\t\t\tdisplayName: currentWorkshopId,\n\t\t\t\tshortId: getShortHash(currentWorkshopId),\n\t\t\t\thasStoredDisplayName: false,\n\t\t\t} satisfies WorkshopMeta),\n\t\tfilteredCaches: [...filteredCaches].sort((a, b) =>\n\t\t\tcompareWorkshopIds(a.workshopId, b.workshopId),\n\t\t),\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops: Array.from(availableWorkshopIds)\n\t\t\t.map((workshopId) => {\n\t\t\t\treturn (\n\t\t\t\t\tworkshopMetaById[workshopId] ??\n\t\t\t\t\t({\n\t\t\t\t\t\tid: workshopId,\n\t\t\t\t\t\tdisplayName: workshopId,\n\t\t\t\t\t\tshortId: getShortHash(workshopId),\n\t\t\t\t\t\thasStoredDisplayName: false,\n\t\t\t\t\t} satisfies WorkshopMeta)\n\t\t\t\t)\n\t\t\t})\n\t\t\t.sort((a, b) => compareWorkshopIds(a.id, b.id)),\n\t}\n}\n\nconst ActionSchema = z.discriminatedUnion('intent', [\n\tz.object({\n\t\tintent: z.literal('delete-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-cache'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-workshop-cache'),\n\t\tworkshopId: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('update-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t\tnewValue: z.string(),\n\t}),\n])\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\n\tconst formData = await request.formData()\n\tconst rawData = Object.fromEntries(formData.entries())\n\tconst result = ActionSchema.safeParse(rawData)\n\n\tif (!result.success) {\n\t\treturn { status: 'error', error: 'Invalid request' } as const\n\t}\n\n\tconst data = result.data\n\n\ttry {\n\t\tswitch (data.intent) {\n\t\t\tcase 'delete-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\tawait deleteCacheEntry(path)\n\t\t\t\treturn { status: 'success', message: 'Cache entry deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId, data.cacheName)\n\t\t\t\treturn { status: 'success', message: 'Cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-workshop-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId)\n\t\t\t\treturn { status: 'success', message: 'Workshop cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'update-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\ttry {\n\t\t\t\t\tconst parsedValue = JSON.parse(data.newValue)\n\t\t\t\t\tawait updateCacheEntry(path, parsedValue)\n\t\t\t\t\treturn { status: 'success', message: 'Cache entry updated' } as const\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: getErrorMessage(error, 'Invalid JSON value'),\n\t\t\t\t\t} as const\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Cache action error:', error)\n\t\treturn { status: 'error', error: 'Operation failed' } as const\n\t}\n}\n\nfunction WorkshopChooser({\n\tselectedWorkshops,\n\tavailableWorkshops,\n\tcurrentWorkshopId,\n}: {\n\tselectedWorkshops: string[]\n\tavailableWorkshops: Array<WorkshopMeta>\n\tcurrentWorkshopId: string\n}) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\n\tconst handleWorkshopChange = (workshop: string, checked: boolean) => {\n\t\tconst newSelected = checked\n\t\t\t? [...selectedWorkshops, workshop]\n\t\t\t: selectedWorkshops.filter((w) => w !== workshop)\n\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (newSelected.length > 0) {\n\t\t\tparams.set('workshops', newSelected.join(','))\n\t\t} else {\n\t\t\tparams.delete('workshops')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Workshop Filter</h3>\n\t\t\t<div className=\"flex flex-wrap gap-3\">\n\t\t\t\t{availableWorkshops.map((workshop) => {\n\t\t\t\t\tconst label = workshop.displayName\n\t\t\t\t\tconst shortId = workshop.shortId\n\t\t\t\t\tconst secondary = workshop.repoName ?? workshop.subtitle\n\t\t\t\t\tconst hasStoredDisplayName = workshop.hasStoredDisplayName\n\t\t\t\t\tconst showDetailsLine =\n\t\t\t\t\t\thasStoredDisplayName && workshop.id !== 'global'\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tkey={workshop.id}\n\t\t\t\t\t\t\tclassName=\"flex items-center gap-2\"\n\t\t\t\t\t\t\ttitle={secondary ? `${label} (${secondary})` : label}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tchecked={selectedWorkshops.includes(workshop.id)}\n\t\t\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\t\t\thandleWorkshopChange(workshop.id, e.target.checked)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName=\"rounded\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'text-sm',\n\t\t\t\t\t\t\t\t\tworkshop.id === currentWorkshopId\n\t\t\t\t\t\t\t\t\t\t? 'text-primary font-bold'\n\t\t\t\t\t\t\t\t\t\t: null,\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 className=\"inline-flex max-w-[22rem] flex-col leading-tight\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\thasStoredDisplayName\n\t\t\t\t\t\t\t\t\t\t\t\t? 'truncate'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'font-mono text-xs break-all',\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{label}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{showDetailsLine ? (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'text-muted-foreground font-mono text-xs font-normal',\n\t\t\t\t\t\t\t\t\t\t\t\tworkshop.id === currentWorkshopId\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'text-primary/80'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\ttitle={workshop.id}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{secondary ? `${secondary} • ` : null}\n\t\t\t\t\t\t\t\t\t\t\t{shortId}\n\t\t\t\t\t\t\t\t\t\t</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\t{workshop.id === currentWorkshopId ? '(current)' : null}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction SearchFilter({ filterQuery }: { filterQuery: string }) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\tconst [inputValue, setInputValue] = useState(filterQuery)\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\n\t// Update input value when filterQuery changes (e.g., from URL)\n\tuseEffect(() => {\n\t\tsetInputValue(filterQuery)\n\t}, [filterQuery])\n\n\tconst handleSearch = (query: string) => {\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (query) {\n\t\t\tparams.set('q', query)\n\t\t} else {\n\t\t\tparams.delete('q')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\tconst handleClear = () => {\n\t\tsetInputValue('')\n\t\thandleSearch('')\n\t\tinputRef.current?.focus()\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Search Cache Entries</h3>\n\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Search by key, value, cache name, or workshop...\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\tsetInputValue(e.target.value)\n\t\t\t\t\t\thandleSearch(e.target.value)\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none\"\n\t\t\t\t/>\n\t\t\t\t{inputValue ? (\n\t\t\t\t\t<IconButton onClick={handleClear} title=\"Clear search\">\n\t\t\t\t\t\t<Icon name=\"Close\" className=\"h-4 w-4\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Inline entry editor component\nfunction InlineEntryEditor({\n\tworkshopId,\n\tcacheName,\n\tfilename,\n\tentryKey,\n}: {\n\tworkshopId: string\n\tcacheName: string\n\tfilename: string\n\tentryKey: string\n}) {\n\tconst entryFetcher = useFetcher<{\n\t\tentry: {\n\t\t\tvalue: unknown\n\t\t\tmetadata: {\n\t\t\t\tcreatedTime: number\n\t\t\t\tttl?: number | null\n\t\t\t\tswr?: number\n\t\t\t}\n\t\t} | null\n\t}>()\n\tconst updateFetcher = useFetcher<typeof action>()\n\tconst [editValue, setEditValue] = useState<string | null>(null)\n\tconst [baselineValue, setBaselineValue] = useState<string | null>(null)\n\tconst [hasChanges, setHasChanges] = useState(false)\n\tconst [hasRequested, setHasRequested] = useState(false)\n\tconst [hasStartedLoading, setHasStartedLoading] = useState(false)\n\tconst submittedValueRef = useRef<string | null>(null)\n\tconst prevUpdateStateRef = useRef<string>(updateFetcher.state)\n\n\tconst entryPath = `${workshopId}/${cacheName}/${filename}`\n\tconst entryValue = entryFetcher.data?.entry?.value\n\tconst isEntryLoading = entryFetcher.state === 'loading'\n\tconst hasEntry = Boolean(entryFetcher.data?.entry)\n\tconst entryMissing = entryFetcher.data?.entry === null\n\tconst entryFetchFailed =\n\t\thasRequested &&\n\t\thasStartedLoading &&\n\t\t!isEntryLoading &&\n\t\tentryFetcher.data === undefined &&\n\t\tentryFetcher.state === 'idle'\n\n\tuseEffect(() => {\n\t\tif (entryFetcher.state !== 'idle') {\n\t\t\tsetHasStartedLoading(true)\n\t\t}\n\t}, [entryFetcher.state])\n\n\tuseEffect(() => {\n\t\tif (hasEntry) {\n\t\t\tconst formattedValue = JSON.stringify(entryValue, null, 2) ?? ''\n\t\t\tsetEditValue(formattedValue)\n\t\t\tsetBaselineValue(formattedValue)\n\t\t\tsetHasChanges(false)\n\t\t}\n\t}, [hasEntry, entryValue])\n\n\tuseEffect(() => {\n\t\tconst currentUpdateState = updateFetcher.state\n\t\tconst wasSubmitting = prevUpdateStateRef.current !== 'idle'\n\t\tconst nowIdle = currentUpdateState === 'idle'\n\n\t\tif (wasSubmitting && nowIdle && updateFetcher.data?.status === 'success') {\n\t\t\tsetBaselineValue(submittedValueRef.current ?? '')\n\t\t\tsetHasChanges(false)\n\t\t}\n\t\tprevUpdateStateRef.current = currentUpdateState\n\t}, [updateFetcher.state, updateFetcher.data?.status])\n\n\tconst handleSave = () => {\n\t\tif (editValue === null) return\n\t\tsubmittedValueRef.current = editValue\n\t\tvoid updateFetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'update-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t\tnewValue: editValue,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst handleChange = (value: string) => {\n\t\tsetEditValue(value)\n\t\tif (baselineValue === null) {\n\t\t\tsetHasChanges(false)\n\t\t\treturn\n\t\t}\n\t\tsetHasChanges(value !== baselineValue)\n\t}\n\n\tconst handleReset = () => {\n\t\tif (baselineValue === null) return\n\t\tsetEditValue(baselineValue)\n\t\tsetHasChanges(false)\n\t}\n\n\tconst handleToggle = (event: React.SyntheticEvent<HTMLDetailsElement>) => {\n\t\tif (event.currentTarget.open && !hasRequested) {\n\t\t\tvoid entryFetcher.load(\n\t\t\t\thref('/admin/cache/*', {\n\t\t\t\t\t'*': entryPath,\n\t\t\t\t}),\n\t\t\t)\n\t\t\tsetHasRequested(true)\n\t\t} else if (!event.currentTarget.open) {\n\t\t\t// Reset on close to allow retry\n\t\t\tsetHasRequested(false)\n\t\t\tsetHasStartedLoading(false)\n\t\t}\n\t}\n\n\tconst handleRetry = () => {\n\t\tvoid entryFetcher.load(\n\t\t\thref('/admin/cache/*', {\n\t\t\t\t'*': entryPath,\n\t\t\t}),\n\t\t)\n\t}\n\n\treturn (\n\t\t<details className=\"mt-2\" onToggle={handleToggle}>\n\t\t\t<summary className=\"text-muted-foreground hover:text-foreground cursor-pointer text-sm\">\n\t\t\t\tEdit entry details\n\t\t\t</summary>\n\t\t\t<div className=\"border-border bg-muted mt-2 space-y-3 rounded border p-3\">\n\t\t\t\t{isEntryLoading ? (\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">Loading entry...</p>\n\t\t\t\t) : entryFetchFailed ? (\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<p className=\"text-destructive text-sm\">\n\t\t\t\t\t\t\tFailed to load entry details.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<Button varient=\"mono\" onClick={handleRetry}>\n\t\t\t\t\t\t\tRetry\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t) : entryMissing ? (\n\t\t\t\t\t<p className=\"text-destructive text-sm\">\n\t\t\t\t\t\tEntry details were not found.\n\t\t\t\t\t</p>\n\t\t\t\t) : hasEntry ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Key:</label>\n\t\t\t\t\t\t\t<code className=\"bg-background rounded border px-2 py-1 text-sm\">\n\t\t\t\t\t\t\t\t{entryKey}\n\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Value:</label>\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\tvalue={editValue ?? ''}\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\t\t\t\tclassName=\"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\t\t\tplaceholder=\"Enter JSON value...\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\tonClick={handleSave}\n\t\t\t\t\t\t\t\tdisabled={!hasChanges || updateFetcher.state !== 'idle'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{updateFetcher.state !== 'idle' ? 'Saving...' : 'Save'}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvarient=\"mono\"\n\t\t\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\t\t\tdisabled={!hasChanges}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReset\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tOpen to load entry details.\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</details>\n\t)\n}\n\nfunction SkippedFilesSection({\n\tskippedFiles,\n\tworkshopId,\n\tcacheName,\n}: {\n\tskippedFiles: Array<{\n\t\tfilename: string\n\t\terror: string\n\t\tsize: number\n\t\tskipped: true\n\t}>\n\tworkshopId: string\n\tcacheName: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tif (skippedFiles.length === 0) return null\n\n\treturn (\n\t\t<div className=\"border-warning bg-warning mt-4 rounded border p-3\">\n\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t<Icon\n\t\t\t\t\tname=\"TriangleAlert\"\n\t\t\t\t\tclassName=\"text-warning-foreground h-4 w-4\"\n\t\t\t\t/>\n\t\t\t\t<h5 className=\"text-warning-foreground font-medium\">\n\t\t\t\t\tSkipped Files ({skippedFiles.length})\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t\t<p className=\"text-warning-foreground/80 mb-3 text-sm\">\n\t\t\t\tThese cache files were skipped because they exceed the 3MB size limit:\n\t\t\t</p>\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t{skippedFiles.map((skippedFile) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={skippedFile.filename}\n\t\t\t\t\t\tclassName=\"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground truncate font-mono text-sm font-medium\">\n\t\t\t\t\t\t\t\t{skippedFile.filename}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground/70 text-xs\">\n\t\t\t\t\t\t\t\t{skippedFile.error} • Size:{' '}\n\t\t\t\t\t\t\t\t<span title={`${skippedFile.size} bytes`}>\n\t\t\t\t\t\t\t\t\t{formatFileSize(skippedFile.size)}\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</div>\n\t\t\t\t\t\t<div className=\"ml-2 flex shrink-0\">\n\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tintent: 'delete-entry',\n\t\t\t\t\t\t\t\t\t\t\tworkshopId,\n\t\t\t\t\t\t\t\t\t\t\tcacheName,\n\t\t\t\t\t\t\t\t\t\t\tfilename: skippedFile.filename,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{ method: 'POST' },\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\ttitle=\"Delete large cache file\"\n\t\t\t\t\t\t\t\tclassName=\"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default function CacheManagement({ loaderData }: Route.ComponentProps) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tconst deleteEntry = (\n\t\tworkshopId: string,\n\t\tcacheName: string,\n\t\tfilename: string,\n\t) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteCache = (workshopId: string, cacheName: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-cache',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteWorkshopCache = (workshopId: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-workshop-cache',\n\t\t\t\tworkshopId,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst {\n\t\tcurrentWorkshopId,\n\t\tcurrentWorkshop,\n\t\tfilteredCaches,\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops,\n\t} = loaderData\n\tconst currentWorkshopMeta = currentWorkshop\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<div>\n\t\t\t\t<h2 className=\"mb-2 text-2xl font-bold\">Cache Management</h2>\n\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\tCurrent Workshop:{' '}\n\t\t\t\t\t<span className=\"text-foreground font-semibold\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tcurrentWorkshopMeta?.hasStoredDisplayName\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: 'font-mono text-xs',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentWorkshopMeta.displayName ?? currentWorkshopId}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</p>\n\t\t\t\t{currentWorkshopMeta?.hasStoredDisplayName ? (\n\t\t\t\t\t<p className=\"text-muted-foreground mt-1 text-xs\">\n\t\t\t\t\t\tInstance ID:{' '}\n\t\t\t\t\t\t<span className=\"font-mono\" title={currentWorkshopId}>\n\t\t\t\t\t\t\t{currentWorkshopMeta.shortId}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</div>\n\n\t\t\t<WorkshopChooser\n\t\t\t\tselectedWorkshops={selectedWorkshops}\n\t\t\t\tavailableWorkshops={availableWorkshops}\n\t\t\t\tcurrentWorkshopId={currentWorkshopId}\n\t\t\t/>\n\n\t\t\t<SearchFilter filterQuery={filterQuery} />\n\n\t\t\t{fetcher.data?.status === 'success' ? (\n\t\t\t\t<div className=\"border-border bg-success text-success-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.message}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{fetcher.data?.status === 'error' ? (\n\t\t\t\t<div className=\"border-border bg-destructive text-destructive-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.error}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{filteredCaches.length === 0 ? (\n\t\t\t\t<div className=\"text-muted-foreground py-8 text-center\">\n\t\t\t\t\tNo caches found matching your criteria.\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div className=\"space-y-6\">\n\t\t\t\t{filteredCaches.map((workshopCache) => (\n\t\t\t\t\t<details\n\t\t\t\t\t\tkey={workshopCache.workshopId}\n\t\t\t\t\t\topen={workshopCache.workshopId === currentWorkshopId}\n\t\t\t\t\t>\n\t\t\t\t\t\t<summary className=\"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between gap-4\">\n\t\t\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t\t\t<h3 className=\"text-card-foreground flex min-w-0 items-center gap-2 text-lg font-semibold\">\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-5 w-5 shrink-0\" />\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'min-w-0',\n\t\t\t\t\t\t\t\t\t\t\t\tworkshopCache.workshop.hasStoredDisplayName\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'truncate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'font-mono text-xs break-all',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\ttitle={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{workshopCache.workshop.displayName}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t{workshopCache.workshopId === currentWorkshopId ? (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground rounded px-2 py-1 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\tCurrent\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t{workshopCache.workshop.hasStoredDisplayName &&\n\t\t\t\t\t\t\t\t\tworkshopCache.workshopId !== 'global' ? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground mt-1 flex flex-wrap items-center gap-2 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t{workshopCache.workshop.repoName ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{workshopCache.workshop.repoName}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t) : workshopCache.workshop.subtitle ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{workshopCache.workshop.subtitle}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"font-mono\"\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={workshopCache.workshopId}\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{workshopCache.workshop.shortId}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\tdeleteWorkshopCache(workshopCache.workshopId)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttitle=\"Delete all workshop caches\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t<div className=\"mt-4 space-y-4 pl-4\">\n\t\t\t\t\t\t\t{workshopCache.caches.map((cache) => {\n\t\t\t\t\t\t\t\tconst totalSize = cache.entries.reduce(\n\t\t\t\t\t\t\t\t\t(sum, entry) => sum + (entry.size || 0),\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst skippedSize = (cache.skippedFiles || []).reduce(\n\t\t\t\t\t\t\t\t\t(sum, file) => sum + file.size,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst grandTotal = totalSize + skippedSize\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<details key={cache.name} className=\"bg-muted rounded-md\">\n\t\t\t\t\t\t\t\t\t\t<summary className=\"hover:bg-accent cursor-pointer p-3\">\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t<h4 className=\"text-muted-foreground flex items-center gap-2 font-medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t({cache.entries.length} entr\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 1 ? 'y' : 'ies'})\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{grandTotal > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\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\t<span title={`${grandTotal} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(grandTotal)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttotal\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{skippedSize > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-warning\">\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(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span title={`${skippedSize} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(skippedSize)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tskipped)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteCache(workshopCache.workshopId, cache.name)\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\ttitle=\"Delete cache\"\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<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"p-3 pt-0\">\n\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo entries match your search.\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t{cache.skippedFiles && cache.skippedFiles.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<SkippedFilesSection\n\t\t\t\t\t\t\t\t\t\t\t\t\tskippedFiles={cache.skippedFiles}\n\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\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) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\t({ key, metadata, filename, size, filepath }) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background rounded border p-3\"\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<div className=\"flex items-start justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mb-1 flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"truncate font-mono text-sm font-medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={key}\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\t\t{key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{size ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={`${size} bytes`}\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{formatFileSize(size)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CacheMetadata metadata={metadata} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ml-4 flex shrink-0 gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={href('/admin/cache/*', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'*': `${workshopCache.workshopId}/${cache.name}/${filename}`,\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\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"View JSON\"\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<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"ExternalLink\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\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</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{filepath ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfile={filepath}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={iconButtonClassName}\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\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"Files\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Open in editor\"\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</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteEntry(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopCache.workshopId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcache.name,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename,\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\ttitle=\"Delete entry\"\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<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InlineEntryEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename={filename}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tentryKey={key}\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</div>\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)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</details>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</details>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Component for displaying cache metadata with live countdown\nfunction CacheMetadata({\n\tmetadata,\n}: {\n\tmetadata: {\n\t\tcreatedTime: number\n\t\tttl?: number | null\n\t\tswr?: number\n\t}\n}) {\n\tconst dayjs = useDayjs()\n\tconst [, setCurrentTime] = useState(Date.now())\n\tconst expirationTime = calculateExpirationTime(metadata)\n\n\t// Update time every second for live countdown\n\tuseInterval(() => {\n\t\tsetCurrentTime(Date.now())\n\t}, 1000)\n\n\tconst createdDate = dayjs(metadata.createdTime)\n\tconst timeRemaining = expirationTime\n\t\t? formatTimeRemaining(expirationTime)\n\t\t: { text: 'Never', isExpired: false, isExpiringSoon: false }\n\n\treturn (\n\t\t<div className=\"text-muted-foreground flex flex-col gap-1 text-xs\">\n\t\t\t<div>\n\t\t\t\tCreated: {createdDate.format('MMM D, YYYY HH:mm:ss')}{' '}\n\t\t\t\t<ClientOnly>{() => `(${createdDate.fromNow()})`}</ClientOnly>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t{metadata.ttl !== undefined && metadata.ttl !== null ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tTTL:{' '}\n\t\t\t\t\t\t{metadata.ttl === Infinity ? (\n\t\t\t\t\t\t\t'Forever'\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span title={`${metadata.ttl}ms`}>\n\t\t\t\t\t\t\t\t{formatDuration(metadata.ttl)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t{metadata.swr !== undefined ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tSWR:{' '}\n\t\t\t\t\t\t<span title={`${metadata.swr}ms`}>\n\t\t\t\t\t\t\t{formatDuration(metadata.swr)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t<div\n\t\t\t\t\tclassName={`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${\n\t\t\t\t\t\ttimeRemaining.isExpired\n\t\t\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t\t\t: timeRemaining.isExpiringSoon\n\t\t\t\t\t\t\t\t? 'bg-warning text-warning-foreground'\n\t\t\t\t\t\t\t\t: 'text-foreground'\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{expirationTime ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\tExpires: {dayjs(expirationTime).format('MMM D, YYYY HH:mm:ss')} (\n\t\t\t\t\t\t\t<span className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t<ClientOnly>{() => timeRemaining.text}</ClientOnly>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'Expires: Never'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Double-check delete button\nfunction DoubleCheckButton({\n\tonConfirm,\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentPropsWithoutRef<'button'> & {\n\tonConfirm: () => void\n}) {\n\tconst doubleCheck = useDoubleCheck()\n\n\treturn (\n\t\t<IconButton\n\t\t\t{...doubleCheck.getButtonProps({\n\t\t\t\tonClick: doubleCheck.doubleCheck ? onConfirm : undefined,\n\t\t\t\t...props,\n\t\t\t})}\n\t\t\tclassName={cn(\n\t\t\t\tdoubleCheck.doubleCheck\n\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t: null,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{doubleCheck.doubleCheck ? '✓' : children}\n\t\t</IconButton>\n\t)\n}\n"],"names":["WorkshopChooser","selectedWorkshops","availableWorkshops","currentWorkshopId","searchParams","setSearchParams","useSearchParams","handleWorkshopChange","workshop","checked","newSelected","filter","w","params","URLSearchParams","length","set","join","delete","jsxs","className","children","jsx","map","label","displayName","shortId","secondary","repoName","subtitle","hasStoredDisplayName","showDetailsLine","id","title","type","includes","onChange","e","target","cn","SearchFilter","filterQuery","inputValue","setInputValue","useState","inputRef","useRef","useEffect","handleSearch","query","handleClear","current","focus","ref","placeholder","value","IconButton","onClick","Icon","name","InlineEntryEditor","workshopId","cacheName","filename","entryKey","entryFetcher","useFetcher","updateFetcher","editValue","setEditValue","baselineValue","setBaselineValue","hasChanges","setHasChanges","hasRequested","setHasRequested","hasStartedLoading","setHasStartedLoading","submittedValueRef","prevUpdateStateRef","state","entryPath","entryValue","data","entry","isEntryLoading","hasEntry","Boolean","entryMissing","entryFetchFailed","formattedValue","JSON","stringify","currentUpdateState","status","handleSave","submit","intent","newValue","method","handleChange","handleReset","handleToggle","event","currentTarget","open","load","href","handleRetry","onToggle","Button","varient","Fragment","disabled","SkippedFilesSection","skippedFiles","fetcher","skippedFile","error","size","formatFileSize","DoubleCheckButton","onConfirm","cache","_UNSAFE_withComponentProps","loaderData","deleteEntry","deleteCache","deleteWorkshopCache","currentWorkshop","filteredCaches","currentWorkshopMeta","message","workshopCache","caches","totalSize","entries","reduce","sum","skippedSize","file","grandTotal","key","metadata","filepath","CacheMetadata","rel","LaunchEditor","iconButtonClassName","dayjs","useDayjs","setCurrentTime","Date","now","expirationTime","calculateExpirationTime","useInterval","createdDate","createdTime","timeRemaining","formatTimeRemaining","text","isExpired","isExpiringSoon","format","ClientOnly","fromNow","ttl","Infinity","formatDuration","swr","props","doubleCheck","useDoubleCheck","getButtonProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-BYOqEjAx.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/command-palette-B5RrTjmt.js","/assets/misc-w_rthUBN.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-BfDhr_Iz.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/command-palette-B5RrTjmt.js","/assets/misc-w_rthUBN.js","/assets/preload-helper-BXl3LOEh.js","/assets/dialog-BaCkYFMm.js","/assets/client-only-CUo_KSMO.js","/assets/error-boundary-CDP8QJH3.js","/assets/progress-bar-DTHojpoN.js","/assets/index-E_6kulJP.js","/assets/tooltip-DXU4r0k_.js","/assets/schemas-siASSt6b.js","/assets/index-BCfhIjlz.js","/assets/presence-Du0emDp8.js","/assets/seo-t5J-DRxw.js","/assets/index-D7hprM2E.js","/assets/pe-tear8uic.js","/assets/root-loader-DlSJfUY6.js","/assets/online-CIe0rJXF.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-CLn4062k.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-CDP8QJH3.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DxZSihJz.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/pe-tear8uic.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/product-DhsG98SP.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/status-indicator-C6DiLYL5.js","/assets/dialog-BaCkYFMm.js","/assets/index-RrKi1bvi.js","/assets/tooltip-DXU4r0k_.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/online-CIe0rJXF.js","/assets/presence-Du0emDp8.js","/assets/root-loader-DlSJfUY6.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/schemas-siASSt6b.js","/assets/index-D7hprM2E.js","/assets/index-B2VNpNxJ.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-DSM4UPRm.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/tooltip-DXU4r0k_.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DlSJfUY6.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-B8ABxGl0.js","imports":["/assets/discord-C6KtaZBy.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/index-Bi6L2ga8.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/user-DVcB6tJK.js","/assets/root-loader-DlSJfUY6.js","/assets/workshop-config-BDoPVTl_.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-BX9np49J.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-DPXj3khI.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/mdx-C-RSHS6z.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-Cm9vy1sl.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/coerce-f7UHRcUL.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-CtLoDVTM.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/error-boundary-CDP8QJH3.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/set-playground-DeTYkEmL.js","/assets/misc-w_rthUBN.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-Cm9vy1sl.js","/assets/epic-video-CBD2QuF7.js","/assets/tooltip-DXU4r0k_.js","/assets/mdx-C-RSHS6z.js","/assets/index-RrKi1bvi.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/index-CqilNl8u.js","/assets/index-B2VNpNxJ.js","/assets/index-D7hprM2E.js","/assets/button-CPJdTWu4.js","/assets/dialog-BaCkYFMm.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/coerce-f7UHRcUL.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-BCfhIjlz.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-DnxKY8DZ.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/preview-DYRFXaTz.js","/assets/misc-w_rthUBN.js","/assets/button-CPJdTWu4.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-DTHojpoN.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-zd3iEdlx.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-5AFCJbRM.js","/assets/diff-D7m_8XWs.js","/assets/error-boundary-CDP8QJH3.js","/assets/workshop-config-BDoPVTl_.js","/assets/misc-w_rthUBN.js","/assets/preview-DYRFXaTz.js","/assets/tests-CcqR_BtU.js","/assets/index-Bi6L2ga8.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/discord-C6KtaZBy.js","/assets/user-DVcB6tJK.js","/assets/online-CIe0rJXF.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/set-playground-DeTYkEmL.js","/assets/button-CPJdTWu4.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/progress-bar-DTHojpoN.js","/assets/dialog-BaCkYFMm.js","/assets/playground-window-o8rwGWlA.js","/assets/accordion-Er5dY3m8.js","/assets/mdx-C-RSHS6z.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/format-CZ5n8p10.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-CPRN8qq5.js","/assets/revalidation-ws-Bfvn_PkK.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-CGdvVBLh.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CcqR_BtU.js","/assets/index-Bi6L2ga8.js","/assets/accordion-Er5dY3m8.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/misc-w_rthUBN.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-BCfhIjlz.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/playground-window-o8rwGWlA.js","/assets/set-playground-DeTYkEmL.js","/assets/button-CPJdTWu4.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/progress-bar-DTHojpoN.js","/assets/dialog-BaCkYFMm.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-CPTJbJzj.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-CDP8QJH3.js","/assets/error-boundary-Cm9vy1sl.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-w_rthUBN.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/schemas-siASSt6b.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-aQf3Q2Fi.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/retrieval-practice-I8WO2_2I.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/mdx-C-RSHS6z.js","/assets/online-CIe0rJXF.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-GIlszS7J.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-WcKUMl5G.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/playground-5AFCJbRM.js","/assets/index-Bi6L2ga8.js","/assets/diff-D7m_8XWs.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preview-DYRFXaTz.js","/assets/launch-editor-CPRN8qq5.js","/assets/set-playground-DeTYkEmL.js","/assets/mdx-C-RSHS6z.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/discord-C6KtaZBy.js","/assets/user-DVcB6tJK.js","/assets/online-CIe0rJXF.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/playground-window-o8rwGWlA.js","/assets/accordion-Er5dY3m8.js","/assets/use-event-source-lSuOQRXY.js","/assets/format-CZ5n8p10.js","/assets/preload-helper-BXl3LOEh.js","/assets/button-CPJdTWu4.js","/assets/progress-bar-DTHojpoN.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/dialog-BaCkYFMm.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-9tTb4mx2.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/mdx-C-RSHS6z.js","/assets/misc-w_rthUBN.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-DyAnJqs5.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/retrieval-practice-I8WO2_2I.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/mdx-C-RSHS6z.js","/assets/online-CIe0rJXF.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-BP6m5WdM.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-DAhoKABb.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/launch-editor-CPRN8qq5.js","/assets/mdx-C-RSHS6z.js","/assets/misc-w_rthUBN.js","/assets/progress-C06Xc75T.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-BJVSFvcy.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-P-QjZie3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/button-CPJdTWu4.js","/assets/loading-DI7gaEz8.js","/assets/product-DhsG98SP.js","/assets/workshop-config-BDoPVTl_.js","/assets/schemas-siASSt6b.js","/assets/misc-w_rthUBN.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-BABXrUhd.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/root-loader-DlSJfUY6.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-B1oRRqAU.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-36FQVby3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/index-Bi6L2ga8.js","/assets/misc-w_rthUBN.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-0yPhplVj.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-DlSJfUY6.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-B9dY5MVl.js","imports":["/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/client-only-CUo_KSMO.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/launch-editor-CPRN8qq5.js","/assets/pe-tear8uic.js","/assets/progress-bar-DTHojpoN.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-B7cETCZp.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/launch-editor-CPRN8qq5.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-j3zA2fq3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/tooltip-DXU4r0k_.js","/assets/progress-C06Xc75T.js","/assets/root-loader-DlSJfUY6.js","/assets/index-B2VNpNxJ.js","/assets/pe-tear8uic.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-Dmf9ML7C.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/format-CZ5n8p10.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-C0C93D4p.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-BDoPVTl_.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-dQtQs-dd.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/diff-D7m_8XWs.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/index-Bi6L2ga8.js","/assets/accordion-Er5dY3m8.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/mdx-C-RSHS6z.js","/assets/index-E_6kulJP.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-BCfhIjlz.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-bar-DTHojpoN.js","/assets/revalidation-ws-Bfvn_PkK.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-Cy2gEUna.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-0c681976.js","version":"0c681976"};
|
|
1
|
+
window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-BYOqEjAx.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/command-palette-B5RrTjmt.js","/assets/misc-w_rthUBN.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-DK6bFtH3.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/command-palette-B5RrTjmt.js","/assets/misc-w_rthUBN.js","/assets/preload-helper-BXl3LOEh.js","/assets/dialog-BaCkYFMm.js","/assets/client-only-CUo_KSMO.js","/assets/error-boundary-CDP8QJH3.js","/assets/progress-bar-DTHojpoN.js","/assets/index-E_6kulJP.js","/assets/tooltip-DXU4r0k_.js","/assets/schemas-siASSt6b.js","/assets/index-BCfhIjlz.js","/assets/presence-Du0emDp8.js","/assets/seo-t5J-DRxw.js","/assets/index-D7hprM2E.js","/assets/pe-tear8uic.js","/assets/root-loader-DlSJfUY6.js","/assets/online-CIe0rJXF.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-CLn4062k.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-CDP8QJH3.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DxZSihJz.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/pe-tear8uic.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/product-DhsG98SP.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/status-indicator-C6DiLYL5.js","/assets/dialog-BaCkYFMm.js","/assets/index-RrKi1bvi.js","/assets/tooltip-DXU4r0k_.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/online-CIe0rJXF.js","/assets/presence-Du0emDp8.js","/assets/root-loader-DlSJfUY6.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/schemas-siASSt6b.js","/assets/index-D7hprM2E.js","/assets/index-B2VNpNxJ.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-DSM4UPRm.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/tooltip-DXU4r0k_.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DlSJfUY6.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-B8ABxGl0.js","imports":["/assets/discord-C6KtaZBy.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/index-Bi6L2ga8.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/user-DVcB6tJK.js","/assets/root-loader-DlSJfUY6.js","/assets/workshop-config-BDoPVTl_.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-BX9np49J.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-DPXj3khI.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/mdx-C-RSHS6z.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-Cm9vy1sl.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/coerce-f7UHRcUL.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-CtLoDVTM.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/error-boundary-CDP8QJH3.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/set-playground-DeTYkEmL.js","/assets/misc-w_rthUBN.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-Cm9vy1sl.js","/assets/epic-video-CBD2QuF7.js","/assets/tooltip-DXU4r0k_.js","/assets/mdx-C-RSHS6z.js","/assets/index-RrKi1bvi.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/index-CqilNl8u.js","/assets/index-B2VNpNxJ.js","/assets/index-D7hprM2E.js","/assets/button-CPJdTWu4.js","/assets/dialog-BaCkYFMm.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/coerce-f7UHRcUL.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-BCfhIjlz.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-DnxKY8DZ.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/preview-DYRFXaTz.js","/assets/misc-w_rthUBN.js","/assets/button-CPJdTWu4.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-DTHojpoN.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-zd3iEdlx.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-5AFCJbRM.js","/assets/diff-D7m_8XWs.js","/assets/error-boundary-CDP8QJH3.js","/assets/workshop-config-BDoPVTl_.js","/assets/misc-w_rthUBN.js","/assets/preview-DYRFXaTz.js","/assets/tests-CcqR_BtU.js","/assets/index-Bi6L2ga8.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/discord-C6KtaZBy.js","/assets/user-DVcB6tJK.js","/assets/online-CIe0rJXF.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/set-playground-DeTYkEmL.js","/assets/button-CPJdTWu4.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/progress-bar-DTHojpoN.js","/assets/dialog-BaCkYFMm.js","/assets/playground-window-o8rwGWlA.js","/assets/accordion-Er5dY3m8.js","/assets/mdx-C-RSHS6z.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/format-CZ5n8p10.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-CPRN8qq5.js","/assets/revalidation-ws-Bfvn_PkK.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-CGdvVBLh.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CcqR_BtU.js","/assets/index-Bi6L2ga8.js","/assets/accordion-Er5dY3m8.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/misc-w_rthUBN.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-BCfhIjlz.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/playground-window-o8rwGWlA.js","/assets/set-playground-DeTYkEmL.js","/assets/button-CPJdTWu4.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/progress-bar-DTHojpoN.js","/assets/dialog-BaCkYFMm.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-CPTJbJzj.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-CDP8QJH3.js","/assets/error-boundary-Cm9vy1sl.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-w_rthUBN.js","/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/schemas-siASSt6b.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-aQf3Q2Fi.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/retrieval-practice-I8WO2_2I.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/mdx-C-RSHS6z.js","/assets/online-CIe0rJXF.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-GIlszS7J.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-WcKUMl5G.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/playground-5AFCJbRM.js","/assets/index-Bi6L2ga8.js","/assets/diff-D7m_8XWs.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preview-DYRFXaTz.js","/assets/launch-editor-CPRN8qq5.js","/assets/set-playground-DeTYkEmL.js","/assets/mdx-C-RSHS6z.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/discord-C6KtaZBy.js","/assets/user-DVcB6tJK.js","/assets/online-CIe0rJXF.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/playground-window-o8rwGWlA.js","/assets/accordion-Er5dY3m8.js","/assets/use-event-source-lSuOQRXY.js","/assets/format-CZ5n8p10.js","/assets/preload-helper-BXl3LOEh.js","/assets/button-CPJdTWu4.js","/assets/progress-bar-DTHojpoN.js","/assets/onboarding-indicator-eWP6cuV3.js","/assets/dialog-BaCkYFMm.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-9tTb4mx2.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/launch-editor-CPRN8qq5.js","/assets/mdx-C-RSHS6z.js","/assets/misc-w_rthUBN.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-DyAnJqs5.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/misc-w_rthUBN.js","/assets/loading-DI7gaEz8.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/retrieval-practice-I8WO2_2I.js","/assets/revalidation-ws-Bfvn_PkK.js","/assets/mdx-C-RSHS6z.js","/assets/online-CIe0rJXF.js","/assets/root-loader-DlSJfUY6.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-C06Xc75T.js","/assets/index-BCfhIjlz.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-BP6m5WdM.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-DAhoKABb.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BStOTXfq.js","/assets/epic-video-CBD2QuF7.js","/assets/error-boundary-CDP8QJH3.js","/assets/launch-editor-CPRN8qq5.js","/assets/mdx-C-RSHS6z.js","/assets/misc-w_rthUBN.js","/assets/progress-C06Xc75T.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DTHojpoN.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-BJVSFvcy.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-P-QjZie3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/use-event-source-lSuOQRXY.js","/assets/button-CPJdTWu4.js","/assets/loading-DI7gaEz8.js","/assets/product-DhsG98SP.js","/assets/workshop-config-BDoPVTl_.js","/assets/schemas-siASSt6b.js","/assets/misc-w_rthUBN.js","/assets/index-BCfhIjlz.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-BABXrUhd.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/format-CZ5n8p10.js","/assets/root-loader-DlSJfUY6.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-B1oRRqAU.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-36FQVby3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-CPJdTWu4.js","/assets/index-Bi6L2ga8.js","/assets/misc-w_rthUBN.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-0yPhplVj.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-DlSJfUY6.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-Dm2YHH2b.js","imports":["/assets/chunk-4LKRSAEJ-B1jEeA_F.js","/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/client-only-CUo_KSMO.js","/assets/button-CPJdTWu4.js","/assets/misc-w_rthUBN.js","/assets/launch-editor-CPRN8qq5.js","/assets/pe-tear8uic.js","/assets/progress-bar-DTHojpoN.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-B7cETCZp.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/launch-editor-CPRN8qq5.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/progress-bar-DTHojpoN.js","/assets/pe-tear8uic.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-j3zA2fq3.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js","/assets/tooltip-DXU4r0k_.js","/assets/progress-C06Xc75T.js","/assets/root-loader-DlSJfUY6.js","/assets/index-B2VNpNxJ.js","/assets/pe-tear8uic.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-Dmf9ML7C.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/format-CZ5n8p10.js","/assets/misc-w_rthUBN.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-C0C93D4p.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-BDoPVTl_.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DlSJfUY6.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-dQtQs-dd.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-w_rthUBN.js","/assets/diff-D7m_8XWs.js","/assets/nav-chevrons-BpUTiCfb.js","/assets/index-Bi6L2ga8.js","/assets/accordion-Er5dY3m8.js","/assets/tooltip-DXU4r0k_.js","/assets/index-B2VNpNxJ.js","/assets/index-CqilNl8u.js","/assets/index-D7hprM2E.js","/assets/mdx-C-RSHS6z.js","/assets/index-E_6kulJP.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-BCfhIjlz.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-CPRN8qq5.js","/assets/progress-bar-DTHojpoN.js","/assets/revalidation-ws-Bfvn_PkK.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-Cy2gEUna.js","imports":["/assets/chunk-JZWAC4HX-0uKZ9a0b.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-CBD2QuF7.js","/assets/use-event-source-lSuOQRXY.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/index-BCfhIjlz.js","/assets/misc-w_rthUBN.js","/assets/tooltip-DXU4r0k_.js","/assets/root-loader-DlSJfUY6.js","/assets/pe-tear8uic.js","/assets/schemas-siASSt6b.js","/assets/online-CIe0rJXF.js","/assets/loading-DI7gaEz8.js","/assets/format-CZ5n8p10.js","/assets/user-DVcB6tJK.js","/assets/workshop-config-BDoPVTl_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-f3c7aa16.js","version":"f3c7aa16"};
|