keating 4.0.2 → 4.0.3
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/bin/keating.js +1 -1
- package/dist/src/core/version.js +1 -1
- package/package.json +1 -1
- package/web/.output/nitro.json +1 -1
- package/web/.output/public/assets/{AnimationPlayer-Bj9E6XAF.js → AnimationPlayer-CYbhLL_R.js} +1 -1
- package/web/.output/public/assets/{AssistantChatPanel-CPiSdBQo.js → AssistantChatPanel-DQSKpGWP.js} +122 -122
- package/web/.output/public/assets/{CategoricalChart-ZCOId7ho.js → CategoricalChart-BVb9-7_N.js} +1 -1
- package/web/.output/public/assets/{Chat-BPuDBuv7.js → Chat-C6p8yxAr.js} +2 -2
- package/web/.output/public/assets/{CodeHighlighter-CUd-nVJG.js → CodeHighlighter-DhI0IV5H.js} +1 -1
- package/web/.output/public/assets/{ComingUp-BM3f_QSf.js → ComingUp-DFaRgEbt.js} +1 -1
- package/web/.output/public/assets/{CourseJoin--37EPPeg.js → CourseJoin-DMZ6foZO.js} +1 -1
- package/web/.output/public/assets/CourseWorkspace-l_bPGNhE.js +25 -0
- package/web/.output/public/assets/{Courses-DgryGTWV.js → Courses-DIqulPB-.js} +1 -1
- package/web/.output/public/assets/{EvolutionDetail-BHwyObAD.js → EvolutionDetail-C-NYL1qL.js} +1 -1
- package/web/.output/public/assets/{FlashcardRenderer-hzqoLbnQ.js → FlashcardRenderer-iDgfcwk4.js} +1 -1
- package/web/.output/public/assets/{FlashcardShaderField-pDI9y_r4.js → FlashcardShaderField-JGgL2kgp.js} +1 -1
- package/web/.output/public/assets/{FlashcardTimer-BANuXJze.js → FlashcardTimer-vPNL9_0N.js} +1 -1
- package/web/.output/public/assets/{HyperframesPlayer-BQFYx43N.js → HyperframesPlayer-DEtdwGBR.js} +1 -1
- package/web/.output/public/assets/KeatingBench-XnWxgfUC.js +2 -0
- package/web/.output/public/assets/{LearningInsightsHeader-Do3bROTu.js → LearningInsightsHeader-DWj2-1xb.js} +1 -1
- package/web/.output/public/assets/{Live-HZjRDq-V.js → Live-BasKZMuE.js} +1 -1
- package/web/.output/public/assets/{MarkdownBlock-KUcDESQo.js → MarkdownBlock-C89ecD-M.js} +3 -3
- package/web/.output/public/assets/ModelSelector-B_EaHvVz.js +1 -0
- package/web/.output/public/assets/{Nav-GcfPhZc3.js → Nav-DQ-5KEsA.js} +1 -1
- package/web/.output/public/assets/{NotOrganicAccessPromptDialog-CKb6iTFn.js → NotOrganicAccessPromptDialog-DS7PLMx4.js} +1 -1
- package/web/.output/public/assets/{NotOrganicCallback-DWbhlP2j.js → NotOrganicCallback-BxKOsisT.js} +1 -1
- package/web/.output/public/assets/{OAuthCallback-D15ohKxE.js → OAuthCallback-dk2EQnAU.js} +1 -1
- package/web/.output/public/assets/OpenUIPreview-BrBXAEt4.js +1 -0
- package/web/.output/public/assets/PatternDigestPanel-jmxcLCUX.js +1 -0
- package/web/.output/public/assets/Plus-RIb_ldNd.js +1 -0
- package/web/.output/public/assets/{QuizRenderer-CLQqGwub.js → QuizRenderer-DaPQ7ySS.js} +1 -1
- package/web/.output/public/assets/{RenderingSmoke-DRHji-yz.js → RenderingSmoke-D3aD8prv.js} +1 -1
- package/web/.output/public/assets/{Select-BE2GfDud.js → Select-BYfJxqbI.js} +1 -1
- package/web/.output/public/assets/{SharedSession-DAM8ydVu.js → SharedSession-CEsTcr4j.js} +3 -3
- package/web/.output/public/assets/{ThemeToggle-BdGijxoN.js → ThemeToggle-BZH64Rpu.js} +1 -1
- package/web/.output/public/assets/{TrainingData-7EbVIzmQ.js → TrainingData-DujNU5sy.js} +3 -3
- package/web/.output/public/assets/TrajectoryReview-OjkaW6a6.js +35 -0
- package/web/.output/public/assets/TrajectoryReviewIndex-C5QAijKT.js +1 -0
- package/web/.output/public/assets/TrajectoryReviewWorkspace-DSn96Dxb.js +1 -0
- package/web/.output/public/assets/{Usage-BU1OfvzO.js → Usage-C5HU0Yc5.js} +1 -1
- package/web/.output/public/assets/activity-DdJDHeam.js +1 -0
- package/web/.output/public/assets/{anthropic-messages-rElikI6M.js → anthropic-messages-ZiHu59Q7.js} +1 -1
- package/web/.output/public/assets/{azure-openai-responses-yppPdVFy.js → azure-openai-responses-BHgsWKby.js} +1 -1
- package/web/.output/public/assets/calibration-7gf-WNR5.js +1 -0
- package/web/.output/public/assets/circle-question-mark-CK-DUGIA.js +1 -0
- package/web/.output/public/assets/clipboard-list-CRJvmiKL.js +1 -0
- package/web/.output/public/assets/{course-assembly-BIf5lrcx.js → course-assembly-CQE_9Vh4.js} +3 -3
- package/web/.output/public/assets/{course-submission-judgement-m2Gj1AKW.js → course-submission-judgement-Dmmw__tF.js} +1 -1
- package/web/.output/public/assets/{custom-tts-DapOpVQe.js → custom-tts-DqDZf3aF.js} +1 -1
- package/web/.output/public/assets/desktop-offline-IzFtwAhh.js +3 -0
- package/web/.output/public/assets/{dist-BudWH94z.js → dist-Dq5mGdi-.js} +1 -1
- package/web/.output/public/assets/file-text-CANyHShy.js +1 -0
- package/web/.output/public/assets/{from-study-plan-XEoNCZH-.js → from-study-plan-D14XtwuX.js} +2 -2
- package/web/.output/public/assets/{gemini-live-C2U-Xfzz.js → gemini-live-CGEtXm6j.js} +1 -1
- package/web/.output/public/assets/{google-generative-ai-8HY6m7rq.js → google-generative-ai-DcqlQJ6d.js} +1 -1
- package/web/.output/public/assets/{google-vertex-DnCA4qzU.js → google-vertex-C5RXjS_e.js} +1 -1
- package/web/.output/public/assets/{gpt-live-CEMTjMri.js → gpt-live-C4ltEjG_.js} +1 -1
- package/web/.output/public/assets/{index-C8C76R86.js → index-DCgpDQKf.js} +30 -30
- package/web/.output/public/assets/info-CGMF4Cdc.js +1 -0
- package/web/.output/public/assets/keating-stream-g73cFcJe.js +11 -0
- package/web/.output/public/assets/{learner-context-D0BfhTjc.js → learner-context-CpkZOwpe.js} +1 -1
- package/web/.output/public/assets/{library-pPmUSBEY.js → library-Dt_HrttW.js} +5 -5
- package/web/.output/public/assets/{live-context-CYuoXPUI.js → live-context-D5leiub7.js} +1 -1
- package/web/.output/public/assets/{mistral-conversations-BehK5A17.js → mistral-conversations-BSUNv6T_.js} +1 -1
- package/web/.output/public/assets/{openai-codex-responses-vVGnXFbc.js → openai-codex-responses-BEjWFOsh.js} +1 -1
- package/web/.output/public/assets/{openai-completions-SUIeYkEW.js → openai-completions-XWr91hin.js} +1 -1
- package/web/.output/public/assets/{openai-realtime-BSeGY5DQ.js → openai-realtime-BERRi9aO.js} +1 -1
- package/web/.output/public/assets/{openai-responses-DzgNIiYy.js → openai-responses-DeNWT5uB.js} +1 -1
- package/web/.output/public/assets/{openai-responses-shared-CHf6ek3_.js → openai-responses-shared-BdPh5feu.js} +1 -1
- package/web/.output/public/assets/{openai-tts-DRXdgxDT.js → openai-tts-ChGSz4r8.js} +1 -1
- package/web/.output/public/assets/{operation-BMdkNnIS.js → operation-kDIu8RLw.js} +2 -2
- package/web/.output/public/assets/{pi-messages-CpI94BCF.js → pi-messages-pzwJsgas.js} +1 -1
- package/web/.output/public/assets/{public-client-KRBnkgBr.js → public-client-CqivHtfG.js} +1 -1
- package/web/.output/public/assets/{recipes-BcSW8MlI.js → recipes-lg2hVa6Q.js} +1 -1
- package/web/.output/public/assets/{renderer-CKD_Hn-d.js → renderer-Cx1jCM2v.js} +1 -1
- package/web/.output/public/assets/{segments-nMdXcVhb.js → segments-BuQ4O8Bd.js} +1 -1
- package/web/.output/public/assets/{shared-actions-Bj56xHM3.js → shared-actions-B9eYiZAR.js} +1 -1
- package/web/.output/public/assets/{shared-renderer-C-yYfXvq.js → shared-renderer-hMxAoPZb.js} +7 -7
- package/web/.output/public/assets/shared-sessions-CwS3OLWR.js +5 -0
- package/web/.output/public/assets/{srs-WAeRnL8v.js → srs-BBTX4fCR.js} +1 -1
- package/web/.output/public/assets/{tavus-live-CVb9mE_J.js → tavus-live-HpBIH49i.js} +1 -1
- package/web/.output/public/assets/{topic-categorization-DHcL_IrS.js → topic-categorization-DfJaArmq.js} +1 -1
- package/web/.output/public/assets/trajectory-artifacts-EvNqJEHH.js +3 -0
- package/web/.output/public/assets/trajectory-store-C3qzwrr6.js +2 -0
- package/web/.output/public/assets/{transformers.web-CUMRYLoV.js → transformers.web-CrNvRfsr.js} +1 -1
- package/web/.output/public/assets/use-review-passes-DmWsvYdF.js +8 -0
- package/web/.output/public/assets/{use-sessions-C33USzrV.js → use-sessions-3UElISPk.js} +1 -1
- package/web/.output/public/assets/{useCoursesAccess-Zfb1Jqw-.js → useCoursesAccess-BgOspZex.js} +1 -1
- package/web/.output/public/assets/user-DEmM1U0O.js +1 -0
- package/web/.output/public/index.html +7 -7
- package/web/.output/public/sw.js +1 -1
- package/web/.output/server/_chunks/renderer-template.mjs +1 -1
- package/web/.output/server/_libs/h3+rou3+srvx.mjs +1 -1
- package/web/.output/server/index.mjs +1191 -1112
- package/web/.output/public/assets/CourseWorkspace-McgEEARK.js +0 -25
- package/web/.output/public/assets/ModelSelector-CiiiT7sM.js +0 -1
- package/web/.output/public/assets/OpenUIPreview-C8sgkYAj.js +0 -1
- package/web/.output/public/assets/PatternDigestPanel-Ctm7smvT.js +0 -1
- package/web/.output/public/assets/TrajectoryReview-DkC_NtyR.js +0 -35
- package/web/.output/public/assets/TrajectoryReviewIndex-C7pg9K9U.js +0 -1
- package/web/.output/public/assets/TrajectoryReviewWorkspace-D80QHrDn.js +0 -1
- package/web/.output/public/assets/calibration-B8NNSy6-.js +0 -1
- package/web/.output/public/assets/desktop-offline-BOKnmvYX.js +0 -2
- package/web/.output/public/assets/keating-stream-DeWgIdIv.js +0 -11
- package/web/.output/public/assets/shared-sessions-B2FsK7oM.js +0 -5
- package/web/.output/public/assets/trajectory-artifacts-B47xntcj.js +0 -3
- package/web/.output/public/assets/trajectory-store-CFat_se9.js +0 -2
- package/web/.output/public/assets/use-review-passes-BTc5nGD9.js +0 -8
package/web/.output/public/assets/{EvolutionDetail-BHwyObAD.js → EvolutionDetail-C-NYL1qL.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{At as n,Dt as r,Ft as i,It as a,M as o,N as s,Rt as c,Tt as l,Wt as u,jt as d,wt as f,zt as p}from"./index-C8C76R86.js";import{t as m}from"./circle-check-B3pGmp0Q.js";import{t as h}from"./triangle-alert-cr9L64pJ.js";import{t as g}from"./arrow-left-DwKFZ0Rg.js";import{t as _}from"./circle-dot-iMK6vtYt.js";import{t as v}from"./external-link-BnhHAAel.js";import{t as y}from"./git-compare-arrows-Bzjo_UJp.js";import{t as b}from"./useSeo-fXJau5mP.js";var x=e(t(),1),S=a({name:c(),analogyDensity:i(),socraticRatio:i(),formalism:i(),retrievalPractice:i(),exerciseCount:i(),diagramBias:i(),reflectionBias:i(),interdisciplinaryBias:i(),challengeRate:i()}).strict(),C=a({field:S.keyof(),before:p([i(),c()]),after:p([i(),c()]),delta:i()}).strict(),w=a({iteration:i().int().positive(),accepted:d(),novelty:i(),parentName:c().nullable(),policy:S,decision:a({improves:d(),safe:d(),novelEnough:d(),scoreDelta:i(),weakestTopicDelta:i(),reasons:n(c())}).passthrough(),parameterDelta:n(C)}).passthrough();function T(e){try{return S.parse(JSON.parse(e))}catch{return null}}function E(e){if(!e)return[];try{return n(w).parse(JSON.parse(e))}catch{return[]}}function D(e,t){return Object.keys(t).flatMap(n=>{let r=e?.[n]??null,i=t[n];return r===i?[]:[{field:n,before:r,after:i,delta:typeof r==`number`&&typeof i==`number`?i-r:null}]})}function O(e,t){let n=T(e);if(!n)return{ok:!1,reason:`invalid-policy`};let r=t?T(t):null;if(t&&!r)return{ok:!1,reason:`invalid-baseline`};let i=D(r,n);return i.length===0?{ok:!1,reason:`no-changes`}:{ok:!0,policy:n,previousPolicy:r,diff:i}}var k=f(),A={page:s({minH:`100vh`,bg:`var(--background)`,color:`var(--foreground)`,fontFamily:`monospace`}),header:s({borderBottom:`1px solid var(--border)`}),headerInner:s({mx:`auto`,display:`flex`,maxW:`72rem`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,px:`1rem`,py:`1rem`}),title:s({fontSize:`1.25rem`,fontWeight:`650`}),subtitle:s({mt:`0.25rem`,maxW:`70ch`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),main:s({mx:`auto`,display:`flex`,maxW:`72rem`,flexDir:`column`,gap:`1rem`,px:`1rem`,py:`1.5rem`}),button:s({display:`inline-flex`,h:`2.25rem`,alignItems:`center`,gap:`0.5rem`,borderRadius:`0.375rem`,border:`1px solid var(--border)`,px:`0.75rem`,fontSize:`0.875rem`,_hover:{bg:`var(--accent)`},_focusVisible:{outline:`2px solid var(--ring)`,outlineOffset:`2px`}}),section:s({overflow:`hidden`,borderRadius:`0.5rem`,border:`1px solid var(--border)`}),sectionHeader:s({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,px:`1rem`,py:`0.75rem`}),sectionTitle:s({display:`flex`,alignItems:`center`,gap:`0.5rem`,fontSize:`0.875rem`,fontWeight:`600`}),sectionBody:s({p:`1rem`}),meta:s({display:`flex`,flexWrap:`wrap`,gap:`0.5rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),badge:s({borderRadius:`9999px`,bg:`var(--muted)`,px:`0.625rem`,py:`0.25rem`}),diffHeader:s({display:`none`,gridTemplateColumns:`minmax(10rem, 1.4fr) repeat(3, minmax(6rem, 0.7fr))`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,px:`1rem`,py:`0.5rem`,fontSize:`0.7rem`,color:`var(--muted-foreground)`,md:{display:`grid`}}),diffRow:s({display:`grid`,gap:`0.375rem`,borderBottom:`1px solid color-mix(in srgb, var(--border) 65%, transparent)`,px:`1rem`,py:`0.75rem`,_last:{borderBottom:0},md:{gridTemplateColumns:`minmax(10rem, 1.4fr) repeat(3, minmax(6rem, 0.7fr))`,alignItems:`center`,gap:`0.75rem`}}),field:s({fontSize:`0.8rem`,fontWeight:`600`}),value:s({fontSize:`0.75rem`,fontVariantNumeric:`tabular-nums`}),valueLabel:s({mr:`0.5rem`,color:`var(--muted-foreground)`,md:{display:`none`}}),deltaGood:s({color:`#15803d`}),deltaBad:s({color:`var(--destructive)`}),details:s({borderTop:`1px solid var(--border)`,_first:{borderTop:0}}),summary:s({display:`flex`,cursor:`pointer`,listStyle:`none`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,px:`1rem`,py:`0.75rem`,fontSize:`0.8rem`,_hover:{bg:`var(--accent)`},_focusVisible:{outline:`2px solid var(--ring)`,outlineOffset:`-2px`}}),candidateBody:s({borderTop:`1px solid var(--border)`,bg:`color-mix(in srgb, var(--muted) 18%, transparent)`,p:`1rem`}),reasonList:s({mt:`0.75rem`,pl:`1.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`,listStyleType:`disc`}),pre:s({maxH:`32rem`,overflow:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.75rem`,lineHeight:`1.5`}),empty:s({p:`2rem`,textAlign:`center`,fontSize:`0.875rem`,color:`var(--muted-foreground)`}),errorMain:s({mx:`auto`,display:`grid`,minH:`100vh`,maxW:`42rem`,placeItems:`center`,px:`1rem`,py:`3rem`}),errorCard:s({w:`100%`,borderRadius:`0.75rem`,border:`1px solid color-mix(in srgb, var(--destructive) 35%, var(--border))`,bg:`var(--background)`,p:`clamp(1.25rem, 5vw, 2.5rem)`,textAlign:`center`}),errorIcon:s({mx:`auto`,mb:`1rem`,color:`var(--destructive)`}),errorTitle:s({fontSize:`1.25rem`,fontWeight:`650`}),errorText:s({mx:`auto`,mt:`0.5rem`,maxW:`52ch`,fontSize:`0.875rem`,lineHeight:`1.6`,color:`var(--muted-foreground)`}),errorActions:s({mt:`1.5rem`,display:`flex`,justifyContent:`center`})};function j(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function M(e){return e===null?`not recorded`:typeof e==`number`?Number(e.toFixed(4)).toString():e}function N({rows:e}){return(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:A.diffHeader,"aria-hidden":`true`,children:[(0,k.jsx)(`span`,{children:`Field`}),(0,k.jsx)(`span`,{children:`Before`}),(0,k.jsx)(`span`,{children:`After`}),(0,k.jsx)(`span`,{children:`Delta`})]}),e.map(e=>(0,k.jsxs)(`div`,{className:A.diffRow,children:[(0,k.jsx)(`div`,{className:A.field,children:j(e.field)}),(0,k.jsxs)(`div`,{className:A.value,children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`Before`}),M(e.before)]}),(0,k.jsxs)(`div`,{className:A.value,children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`After`}),M(e.after)]}),(0,k.jsxs)(`div`,{className:o(A.value,(e.delta??0)>=0?A.deltaGood:A.deltaBad),children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`Delta`}),e.delta===null?`changed`:`${e.delta>=0?`+`:``}${M(e.delta)}`]})]},e.field))]})}function P({title:e,description:t,onBack:n}){return(0,k.jsx)(`div`,{className:A.page,children:(0,k.jsx)(`main`,{className:A.errorMain,children:(0,k.jsxs)(`section`,{className:A.errorCard,role:`alert`,"aria-labelledby":`evolution-diff-error-title`,children:[(0,k.jsx)(h,{className:A.errorIcon,size:32,"aria-hidden":`true`}),(0,k.jsx)(`h1`,{id:`evolution-diff-error-title`,className:A.errorTitle,children:e}),(0,k.jsx)(`p`,{className:A.errorText,children:t}),(0,k.jsx)(`div`,{className:A.errorActions,children:(0,k.jsxs)(`button`,{type:`button`,className:A.button,onClick:n,children:[(0,k.jsx)(g,{size:16}),` Back to usage`]})})]})})})}function F(){let{evolutionId:e}=r({strict:!1}),t=l(),[n,i]=(0,x.useState)(null);b({title:`Evolution diff | Keating`,description:`Inspect the exact policy changes and accepted candidates from a Keating self-evolution run.`,canonical:`https://keating.help/usage/evolution/${encodeURIComponent(e)}`}),(0,x.useEffect)(()=>{let e=!1;return u.getEvolutions().then(t=>{e||i(t.sort((e,t)=>e.createdAt-t.createdAt))}).catch(()=>{e||i([])}),()=>{e=!0}},[]);let a=(0,x.useMemo)(()=>{if(!n)return null;let t=n.findIndex(t=>t.id===e);if(t<0)return{run:null,previous:null,resolution:null,trace:[]};let r=n[t],i=t>0?n[t-1]:null;return{run:r,previous:i,resolution:O(r.policy,i?.policy??null),trace:E(r.trace)}},[e,n]);if(!n||!a)return(0,k.jsx)(`div`,{className:A.page,children:(0,k.jsx)(`div`,{className:A.empty,children:`Loading evolution details...`})});let o=()=>t({to:`/usage`});if(!a.run||!a.resolution)return(0,k.jsx)(P,{title:`Evolution run unavailable`,description:`This saved evolution could not be found. It may have been removed from local storage or imported without its source record.`,onBack:o});if(!a.resolution.ok)return(0,k.jsx)(P,{title:`Exact diff unavailable`,description:{"invalid-policy":`The saved evolved policy is missing or malformed, so Keating cannot produce a trustworthy field-by-field comparison.`,"invalid-baseline":`The previous saved policy is missing or malformed, so Keating cannot establish a trustworthy comparison baseline.`,"no-changes":`The saved policy is identical to its comparison baseline. There are no changed fields to present as an exact diff.`}[a.resolution.reason],onBack:o});let s=a.trace.filter(e=>e.accepted);return(0,k.jsxs)(`div`,{className:A.page,children:[(0,k.jsx)(`header`,{className:A.header,children:(0,k.jsxs)(`div`,{className:A.headerInner,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h1`,{className:A.title,children:a.run.topic||`General teaching policy`}),(0,k.jsx)(`p`,{className:A.subtitle,children:`Exact policy changes, candidate decisions, and the original evolution report.`})]}),(0,k.jsxs)(`button`,{type:`button`,className:A.button,onClick:()=>t({to:`/usage`}),children:[(0,k.jsx)(g,{size:16}),` Back to usage`]})]})}),(0,k.jsxs)(`main`,{className:A.main,children:[(0,k.jsxs)(`div`,{className:A.meta,children:[(0,k.jsxs)(`span`,{className:A.badge,children:[`Score `,a.run.bestScore.toFixed(2)]}),(0,k.jsx)(`span`,{className:A.badge,children:new Date(a.run.createdAt).toLocaleString()}),(0,k.jsxs)(`span`,{className:A.badge,children:[s.length,` accepted of `,a.trace.length,` explored`]}),a.run.sessionId&&(0,k.jsxs)(`button`,{type:`button`,className:A.badge,onClick:()=>t({to:`/chat`,search:{session:a.run.sessionId}}),children:[`Open source session `,(0,k.jsx)(v,{size:12})]})]}),(0,k.jsxs)(`section`,{className:A.section,children:[(0,k.jsxs)(`div`,{className:A.sectionHeader,children:[(0,k.jsxs)(`h2`,{className:A.sectionTitle,children:[(0,k.jsx)(y,{size:16}),` Final policy diff`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:a.previous?`Compared with ${new Date(a.previous.createdAt).toLocaleString()}`:`First saved evolution; all fields are shown`})]}),(0,k.jsx)(N,{rows:a.resolution.diff})]}),(0,k.jsxs)(`section`,{className:A.section,children:[(0,k.jsxs)(`div`,{className:A.sectionHeader,children:[(0,k.jsxs)(`h2`,{className:A.sectionTitle,children:[(0,k.jsx)(m,{size:16}),` Accepted candidate steps`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:`Expand a step to inspect its exact field changes and decision reasons.`})]}),s.length===0?(0,k.jsx)(`div`,{className:A.empty,children:`No accepted candidate trace was recorded for this run.`}):s.map(e=>(0,k.jsxs)(`details`,{className:A.details,children:[(0,k.jsxs)(`summary`,{className:A.summary,children:[(0,k.jsxs)(`span`,{children:[`Iteration `,e.iteration,`: `,e.parameterDelta.length,` changed field`,e.parameterDelta.length===1?``:`s`]}),(0,k.jsxs)(`span`,{className:e.decision.scoreDelta>=0?A.deltaGood:A.deltaBad,children:[`Score `,e.decision.scoreDelta>=0?`+`:``,e.decision.scoreDelta.toFixed(2)]})]}),(0,k.jsxs)(`div`,{className:A.candidateBody,children:[(0,k.jsx)(N,{rows:e.parameterDelta.map(e=>({...e}))}),e.decision.reasons.length>0&&(0,k.jsx)(`ul`,{className:A.reasonList,children:e.decision.reasons.map(e=>(0,k.jsx)(`li`,{children:e},e))})]})]},e.iteration))]}),(0,k.jsx)(`section`,{className:A.section,children:(0,k.jsxs)(`details`,{children:[(0,k.jsxs)(`summary`,{className:A.summary,children:[(0,k.jsxs)(`span`,{className:A.sectionTitle,children:[(0,k.jsx)(_,{size:16}),` Full evolution report`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:`Raw saved evidence`})]}),(0,k.jsx)(`div`,{className:A.sectionBody,children:(0,k.jsx)(`pre`,{className:A.pre,children:a.run.report})})]})})]})]})}export{F as EvolutionDetail};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{At as n,Dt as r,Ft as i,It as a,M as o,N as s,Rt as c,Tt as l,Wt as u,jt as d,wt as f,zt as p}from"./index-DCgpDQKf.js";import{t as m}from"./circle-check-B3pGmp0Q.js";import{t as h}from"./triangle-alert-cr9L64pJ.js";import{t as g}from"./arrow-left-DwKFZ0Rg.js";import{t as _}from"./circle-dot-iMK6vtYt.js";import{t as v}from"./external-link-BnhHAAel.js";import{t as y}from"./git-compare-arrows-Bzjo_UJp.js";import{t as b}from"./useSeo-fXJau5mP.js";var x=e(t(),1),S=a({name:c(),analogyDensity:i(),socraticRatio:i(),formalism:i(),retrievalPractice:i(),exerciseCount:i(),diagramBias:i(),reflectionBias:i(),interdisciplinaryBias:i(),challengeRate:i()}).strict(),C=a({field:S.keyof(),before:p([i(),c()]),after:p([i(),c()]),delta:i()}).strict(),w=a({iteration:i().int().positive(),accepted:d(),novelty:i(),parentName:c().nullable(),policy:S,decision:a({improves:d(),safe:d(),novelEnough:d(),scoreDelta:i(),weakestTopicDelta:i(),reasons:n(c())}).passthrough(),parameterDelta:n(C)}).passthrough();function T(e){try{return S.parse(JSON.parse(e))}catch{return null}}function E(e){if(!e)return[];try{return n(w).parse(JSON.parse(e))}catch{return[]}}function D(e,t){return Object.keys(t).flatMap(n=>{let r=e?.[n]??null,i=t[n];return r===i?[]:[{field:n,before:r,after:i,delta:typeof r==`number`&&typeof i==`number`?i-r:null}]})}function O(e,t){let n=T(e);if(!n)return{ok:!1,reason:`invalid-policy`};let r=t?T(t):null;if(t&&!r)return{ok:!1,reason:`invalid-baseline`};let i=D(r,n);return i.length===0?{ok:!1,reason:`no-changes`}:{ok:!0,policy:n,previousPolicy:r,diff:i}}var k=f(),A={page:s({minH:`100vh`,bg:`var(--background)`,color:`var(--foreground)`,fontFamily:`monospace`}),header:s({borderBottom:`1px solid var(--border)`}),headerInner:s({mx:`auto`,display:`flex`,maxW:`72rem`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,px:`1rem`,py:`1rem`}),title:s({fontSize:`1.25rem`,fontWeight:`650`}),subtitle:s({mt:`0.25rem`,maxW:`70ch`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),main:s({mx:`auto`,display:`flex`,maxW:`72rem`,flexDir:`column`,gap:`1rem`,px:`1rem`,py:`1.5rem`}),button:s({display:`inline-flex`,h:`2.25rem`,alignItems:`center`,gap:`0.5rem`,borderRadius:`0.375rem`,border:`1px solid var(--border)`,px:`0.75rem`,fontSize:`0.875rem`,_hover:{bg:`var(--accent)`},_focusVisible:{outline:`2px solid var(--ring)`,outlineOffset:`2px`}}),section:s({overflow:`hidden`,borderRadius:`0.5rem`,border:`1px solid var(--border)`}),sectionHeader:s({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,px:`1rem`,py:`0.75rem`}),sectionTitle:s({display:`flex`,alignItems:`center`,gap:`0.5rem`,fontSize:`0.875rem`,fontWeight:`600`}),sectionBody:s({p:`1rem`}),meta:s({display:`flex`,flexWrap:`wrap`,gap:`0.5rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),badge:s({borderRadius:`9999px`,bg:`var(--muted)`,px:`0.625rem`,py:`0.25rem`}),diffHeader:s({display:`none`,gridTemplateColumns:`minmax(10rem, 1.4fr) repeat(3, minmax(6rem, 0.7fr))`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,px:`1rem`,py:`0.5rem`,fontSize:`0.7rem`,color:`var(--muted-foreground)`,md:{display:`grid`}}),diffRow:s({display:`grid`,gap:`0.375rem`,borderBottom:`1px solid color-mix(in srgb, var(--border) 65%, transparent)`,px:`1rem`,py:`0.75rem`,_last:{borderBottom:0},md:{gridTemplateColumns:`minmax(10rem, 1.4fr) repeat(3, minmax(6rem, 0.7fr))`,alignItems:`center`,gap:`0.75rem`}}),field:s({fontSize:`0.8rem`,fontWeight:`600`}),value:s({fontSize:`0.75rem`,fontVariantNumeric:`tabular-nums`}),valueLabel:s({mr:`0.5rem`,color:`var(--muted-foreground)`,md:{display:`none`}}),deltaGood:s({color:`#15803d`}),deltaBad:s({color:`var(--destructive)`}),details:s({borderTop:`1px solid var(--border)`,_first:{borderTop:0}}),summary:s({display:`flex`,cursor:`pointer`,listStyle:`none`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,px:`1rem`,py:`0.75rem`,fontSize:`0.8rem`,_hover:{bg:`var(--accent)`},_focusVisible:{outline:`2px solid var(--ring)`,outlineOffset:`-2px`}}),candidateBody:s({borderTop:`1px solid var(--border)`,bg:`color-mix(in srgb, var(--muted) 18%, transparent)`,p:`1rem`}),reasonList:s({mt:`0.75rem`,pl:`1.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`,listStyleType:`disc`}),pre:s({maxH:`32rem`,overflow:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.75rem`,lineHeight:`1.5`}),empty:s({p:`2rem`,textAlign:`center`,fontSize:`0.875rem`,color:`var(--muted-foreground)`}),errorMain:s({mx:`auto`,display:`grid`,minH:`100vh`,maxW:`42rem`,placeItems:`center`,px:`1rem`,py:`3rem`}),errorCard:s({w:`100%`,borderRadius:`0.75rem`,border:`1px solid color-mix(in srgb, var(--destructive) 35%, var(--border))`,bg:`var(--background)`,p:`clamp(1.25rem, 5vw, 2.5rem)`,textAlign:`center`}),errorIcon:s({mx:`auto`,mb:`1rem`,color:`var(--destructive)`}),errorTitle:s({fontSize:`1.25rem`,fontWeight:`650`}),errorText:s({mx:`auto`,mt:`0.5rem`,maxW:`52ch`,fontSize:`0.875rem`,lineHeight:`1.6`,color:`var(--muted-foreground)`}),errorActions:s({mt:`1.5rem`,display:`flex`,justifyContent:`center`})};function j(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}function M(e){return e===null?`not recorded`:typeof e==`number`?Number(e.toFixed(4)).toString():e}function N({rows:e}){return(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:A.diffHeader,"aria-hidden":`true`,children:[(0,k.jsx)(`span`,{children:`Field`}),(0,k.jsx)(`span`,{children:`Before`}),(0,k.jsx)(`span`,{children:`After`}),(0,k.jsx)(`span`,{children:`Delta`})]}),e.map(e=>(0,k.jsxs)(`div`,{className:A.diffRow,children:[(0,k.jsx)(`div`,{className:A.field,children:j(e.field)}),(0,k.jsxs)(`div`,{className:A.value,children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`Before`}),M(e.before)]}),(0,k.jsxs)(`div`,{className:A.value,children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`After`}),M(e.after)]}),(0,k.jsxs)(`div`,{className:o(A.value,(e.delta??0)>=0?A.deltaGood:A.deltaBad),children:[(0,k.jsx)(`span`,{className:A.valueLabel,children:`Delta`}),e.delta===null?`changed`:`${e.delta>=0?`+`:``}${M(e.delta)}`]})]},e.field))]})}function P({title:e,description:t,onBack:n}){return(0,k.jsx)(`div`,{className:A.page,children:(0,k.jsx)(`main`,{className:A.errorMain,children:(0,k.jsxs)(`section`,{className:A.errorCard,role:`alert`,"aria-labelledby":`evolution-diff-error-title`,children:[(0,k.jsx)(h,{className:A.errorIcon,size:32,"aria-hidden":`true`}),(0,k.jsx)(`h1`,{id:`evolution-diff-error-title`,className:A.errorTitle,children:e}),(0,k.jsx)(`p`,{className:A.errorText,children:t}),(0,k.jsx)(`div`,{className:A.errorActions,children:(0,k.jsxs)(`button`,{type:`button`,className:A.button,onClick:n,children:[(0,k.jsx)(g,{size:16}),` Back to usage`]})})]})})})}function F(){let{evolutionId:e}=r({strict:!1}),t=l(),[n,i]=(0,x.useState)(null);b({title:`Evolution diff | Keating`,description:`Inspect the exact policy changes and accepted candidates from a Keating self-evolution run.`,canonical:`https://keating.help/usage/evolution/${encodeURIComponent(e)}`}),(0,x.useEffect)(()=>{let e=!1;return u.getEvolutions().then(t=>{e||i(t.sort((e,t)=>e.createdAt-t.createdAt))}).catch(()=>{e||i([])}),()=>{e=!0}},[]);let a=(0,x.useMemo)(()=>{if(!n)return null;let t=n.findIndex(t=>t.id===e);if(t<0)return{run:null,previous:null,resolution:null,trace:[]};let r=n[t],i=t>0?n[t-1]:null;return{run:r,previous:i,resolution:O(r.policy,i?.policy??null),trace:E(r.trace)}},[e,n]);if(!n||!a)return(0,k.jsx)(`div`,{className:A.page,children:(0,k.jsx)(`div`,{className:A.empty,children:`Loading evolution details...`})});let o=()=>t({to:`/usage`});if(!a.run||!a.resolution)return(0,k.jsx)(P,{title:`Evolution run unavailable`,description:`This saved evolution could not be found. It may have been removed from local storage or imported without its source record.`,onBack:o});if(!a.resolution.ok)return(0,k.jsx)(P,{title:`Exact diff unavailable`,description:{"invalid-policy":`The saved evolved policy is missing or malformed, so Keating cannot produce a trustworthy field-by-field comparison.`,"invalid-baseline":`The previous saved policy is missing or malformed, so Keating cannot establish a trustworthy comparison baseline.`,"no-changes":`The saved policy is identical to its comparison baseline. There are no changed fields to present as an exact diff.`}[a.resolution.reason],onBack:o});let s=a.trace.filter(e=>e.accepted);return(0,k.jsxs)(`div`,{className:A.page,children:[(0,k.jsx)(`header`,{className:A.header,children:(0,k.jsxs)(`div`,{className:A.headerInner,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h1`,{className:A.title,children:a.run.topic||`General teaching policy`}),(0,k.jsx)(`p`,{className:A.subtitle,children:`Exact policy changes, candidate decisions, and the original evolution report.`})]}),(0,k.jsxs)(`button`,{type:`button`,className:A.button,onClick:()=>t({to:`/usage`}),children:[(0,k.jsx)(g,{size:16}),` Back to usage`]})]})}),(0,k.jsxs)(`main`,{className:A.main,children:[(0,k.jsxs)(`div`,{className:A.meta,children:[(0,k.jsxs)(`span`,{className:A.badge,children:[`Score `,a.run.bestScore.toFixed(2)]}),(0,k.jsx)(`span`,{className:A.badge,children:new Date(a.run.createdAt).toLocaleString()}),(0,k.jsxs)(`span`,{className:A.badge,children:[s.length,` accepted of `,a.trace.length,` explored`]}),a.run.sessionId&&(0,k.jsxs)(`button`,{type:`button`,className:A.badge,onClick:()=>t({to:`/chat`,search:{session:a.run.sessionId}}),children:[`Open source session `,(0,k.jsx)(v,{size:12})]})]}),(0,k.jsxs)(`section`,{className:A.section,children:[(0,k.jsxs)(`div`,{className:A.sectionHeader,children:[(0,k.jsxs)(`h2`,{className:A.sectionTitle,children:[(0,k.jsx)(y,{size:16}),` Final policy diff`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:a.previous?`Compared with ${new Date(a.previous.createdAt).toLocaleString()}`:`First saved evolution; all fields are shown`})]}),(0,k.jsx)(N,{rows:a.resolution.diff})]}),(0,k.jsxs)(`section`,{className:A.section,children:[(0,k.jsxs)(`div`,{className:A.sectionHeader,children:[(0,k.jsxs)(`h2`,{className:A.sectionTitle,children:[(0,k.jsx)(m,{size:16}),` Accepted candidate steps`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:`Expand a step to inspect its exact field changes and decision reasons.`})]}),s.length===0?(0,k.jsx)(`div`,{className:A.empty,children:`No accepted candidate trace was recorded for this run.`}):s.map(e=>(0,k.jsxs)(`details`,{className:A.details,children:[(0,k.jsxs)(`summary`,{className:A.summary,children:[(0,k.jsxs)(`span`,{children:[`Iteration `,e.iteration,`: `,e.parameterDelta.length,` changed field`,e.parameterDelta.length===1?``:`s`]}),(0,k.jsxs)(`span`,{className:e.decision.scoreDelta>=0?A.deltaGood:A.deltaBad,children:[`Score `,e.decision.scoreDelta>=0?`+`:``,e.decision.scoreDelta.toFixed(2)]})]}),(0,k.jsxs)(`div`,{className:A.candidateBody,children:[(0,k.jsx)(N,{rows:e.parameterDelta.map(e=>({...e}))}),e.decision.reasons.length>0&&(0,k.jsx)(`ul`,{className:A.reasonList,children:e.decision.reasons.map(e=>(0,k.jsx)(`li`,{children:e},e))})]})]},e.iteration))]}),(0,k.jsx)(`section`,{className:A.section,children:(0,k.jsxs)(`details`,{children:[(0,k.jsxs)(`summary`,{className:A.summary,children:[(0,k.jsxs)(`span`,{className:A.sectionTitle,children:[(0,k.jsx)(_,{size:16}),` Full evolution report`]}),(0,k.jsx)(`span`,{className:A.subtitle,children:`Raw saved evidence`})]}),(0,k.jsx)(`div`,{className:A.sectionBody,children:(0,k.jsx)(`pre`,{className:A.pre,children:a.run.report})})]})})]})]})}export{F as EvolutionDetail};
|
package/web/.output/public/assets/{FlashcardRenderer-hzqoLbnQ.js → FlashcardRenderer-iDgfcwk4.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{i as n,n as r,r as i,t as a}from"./srs-WAeRnL8v.js";import{$ as o,M as s,N as c,Q as l,bn as u,tt as d,vn as f,wt as p,xn as m,xr as h,yn as g}from"./index-C8C76R86.js";import{t as _}from"./createLucideIcon-C_7xXnHN.js";import{a as v,i as ee,r as te,t as ne}from"./FlashcardShaderField-pDI9y_r4.js";import{t as re}from"./chevron-right-CtU0hmKY.js";import{t as y}from"./circle-dot-iMK6vtYt.js";import{t as ie}from"./flame-VMBkC42I.js";import{a as ae,c as b,i as oe,l as se,n as ce,o as le,s as ue,t as de}from"./FlashcardTimer-BANuXJze.js";import{t as x}from"./sun-DMbmf-Gm.js";var S=_(`scan-line`,[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}]]),C=_(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),fe=_(`volume-x`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`line`,{x1:`22`,x2:`16`,y1:`9`,y2:`15`,key:`1ewh16`}],[`line`,{x1:`16`,x2:`22`,y1:`9`,y2:`15`,key:`5ykzw1`}]]),w=e(t(),1);function pe(e,t){let n,r=!0;return{getSnapshot:()=>((r||n===void 0)&&(n=e(),r=!1),n),subscribe:e=>(r=!0,t(()=>{r=!0,e()}))}}function T(e,t,n){let r=(0,w.useMemo)(()=>pe(e,n),[e,n]);return[(0,w.useSyncExternalStore)(r.subscribe,r.getSnapshot,r.getSnapshot),(0,w.useCallback)(n=>{t({...e(),...n})},[e,t])]}function me(){return T(l,o,d)}var E=24;function he(e,t,n,r){let i=Math.abs(e),a=Math.abs(t),o=Math.max(i,a);return o>=100||o>=E&&Math.max(Math.abs(n),Math.abs(r))>=.65?i>=a?e<0?0:2:t<0?3:1:null}function ge(e,t){let n=Math.abs(e),r=Math.abs(t);return Math.max(n,r)<E?null:n>=r?e<0?0:2:t<0?3:1}var _e={dragging:!1,dx:0,dy:0,progress:0,previewGrade:null};function ve({enabled:e,onGrade:t,onTap:n}){let[r,i]=(0,w.useState)(_e),a=(0,w.useRef)(null),o=(0,w.useRef)({x:0,y:0,t:0}),s=(0,w.useRef)(!1),c=(0,w.useCallback)(()=>{a.current=null,i(_e)},[]);return{drag:r,handlers:{onPointerDown:(0,w.useCallback)(e=>{e.button!==0||a.current||(a.current={x:e.clientX,y:e.clientY,t:e.timeStamp,id:e.pointerId},o.current={x:e.clientX,y:e.clientY,t:e.timeStamp},s.current=!1,e.currentTarget.setPointerCapture(e.pointerId))},[]),onPointerMove:(0,w.useCallback)(t=>{let n=a.current;if(!n||n.id!==t.pointerId)return;let r=t.clientX-n.x,c=t.clientY-n.y;o.current={x:t.clientX,y:t.clientY,t:t.timeStamp},Math.max(Math.abs(r),Math.abs(c))>6&&(s.current=!0),e&&i({dragging:!0,dx:r,dy:c,progress:Math.min(1,Math.max(Math.abs(r),Math.abs(c))/100),previewGrade:ge(r,c)})},[e]),onPointerUp:(0,w.useCallback)(r=>{let i=a.current;if(!i||i.id!==r.pointerId)return;let o=r.clientX-i.x,l=r.clientY-i.y,u=Math.max(1,r.timeStamp-i.t),d=o/u,f=l/u,p=!s.current;if(c(),p){n?.();return}if(!e)return;let m=he(o,l,d,f);m!==null&&t(m)},[e,t,n,c]),onPointerCancel:(0,w.useCallback)(()=>c(),[c])}}}function ye(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return!1;try{return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}catch{return!1}}var D=[5,10,20,50];function be(e){return D.includes(e)}function xe(e,t){return t>=2?e+1:0}var O=null;function Se(){if(typeof window>`u`)return null;let e=window.AudioContext??window.webkitAudioContext;if(!e)return null;if(!O)try{O=new e}catch{return null}return O.state===`suspended`&&O.resume().catch(()=>{}),O}function k(e,t,n,r,i=.08){let a=e.createOscillator(),o=e.createGain();a.type=`triangle`,a.frequency.value=t,o.gain.setValueAtTime(0,n),o.gain.linearRampToValueAtTime(i,n+.01),o.gain.exponentialRampToValueAtTime(1e-4,n+r),a.connect(o).connect(e.destination),a.start(n),a.stop(n+r+.02)}var A={flip:[[660,0,.07]],again:[[180,0,.16]],hard:[[330,0,.09]],good:[[523,0,.08],[659,.07,.1]],easy:[[523,0,.07],[659,.06,.07],[784,.12,.12]],complete:[[523,0,.1],[659,.1,.1],[784,.2,.1],[1047,.3,.22]]};function j(e,t){if(t)try{let t=Se();if(!t)return;let n=t.currentTime;for(let[r,i,a]of A[e])k(t,r,n+i,a)}catch{}}function Ce(e){return e<=0?`again`:e===1?`hard`:e===2?`good`:`easy`}var M=p(),we=new h,N=`keating:card-bookmarks`,P=`keating:flashcard-shader-preset`;function Te(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}function Ee(e){try{localStorage.setItem(N,JSON.stringify([...e]))}catch{}}function De(e){if(e)return u(e);try{return u(localStorage.getItem(P))}catch{return f}}function Oe(e){try{localStorage.setItem(P,e)}catch{}}var F={shell:c({position:`relative`,isolation:`isolate`,overflow:`hidden`,marginBlock:`0.75rem`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.75rem`,background:`var(--card, var(--background))`,color:`var(--ink, var(--foreground))`,boxShadow:`4px 4px 0 color-mix(in srgb, var(--ink, var(--foreground)) 18%, transparent)`,_focus:{outline:`none`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`3px`}}),inner:c({position:`relative`,zIndex:1,display:`grid`,gap:`0.875rem`,padding:{base:`0.75rem`,sm:`1rem`}}),header:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`}),titleGroup:c({minWidth:0,flex:`1 1 12rem`}),title:c({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`0.9375rem`,fontWeight:700}),deckLine:c({marginTop:`0.125rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.6875rem`,color:`var(--ink-soft, var(--muted-foreground))`}),headerActions:c({display:`flex`,alignItems:`center`,gap:`0.375rem`}),iconButton:c({display:`inline-flex`,width:`2.75rem`,height:`2.75rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`0.375rem`,color:`var(--ink-soft, var(--muted-foreground))`,transition:`background-color 150ms, color 150ms, transform 120ms`,_hover:{background:`var(--accent)`,color:`var(--accent-foreground)`},_active:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`}}),atmosphere:c({display:`grid`,gap:`0.375rem`,borderTop:`1px solid color-mix(in srgb, var(--ink, var(--foreground)) 18%, transparent)`,paddingTop:`0.75rem`,sm:{gridTemplateColumns:`auto minmax(0, 1fr)`,alignItems:`center`,gap:`0.75rem`}}),atmosphereLabel:c({fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:700,letterSpacing:`0.06em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),presetGroup:c({display:`grid`,gridTemplateColumns:`repeat(2, minmax(0, 1fr))`,gap:`0.375rem`,sm:{gridTemplateColumns:`repeat(4, minmax(0, 1fr))`}}),presetButton:c({display:`inline-flex`,minWidth:0,minHeight:`2.75rem`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,border:`1px solid var(--ink, var(--border))`,borderRadius:`0.375rem`,background:`var(--background)`,paddingInline:`0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`,transition:`background-color 150ms, color 150ms, transform 120ms`,_hover:{color:`var(--foreground)`},_active:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},"&[aria-pressed=true]":{background:`var(--ink, var(--foreground))`,color:`var(--paper, var(--background))`}}),hud:c({display:`grid`,gridTemplateColumns:`minmax(0, 1.6fr) minmax(4.5rem, 0.7fr) minmax(4.5rem, 0.7fr)`,overflow:`hidden`,border:`1px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--paper, var(--background))`}),hudCell:c({minWidth:0,padding:`0.625rem 0.75rem`,"& + &":{borderInlineStart:`1px solid color-mix(in srgb, var(--ink, var(--foreground)) 22%, transparent)`}}),hudLabel:c({display:`block`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.5625rem`,fontWeight:700,letterSpacing:`0.06em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),hudValue:c({display:`block`,marginTop:`0.125rem`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`0.875rem`,fontWeight:700,fontVariantNumeric:`tabular-nums`}),progressTrack:c({height:`0.375rem`,marginTop:`0.375rem`,overflow:`hidden`,borderRadius:`9999px`,background:`color-mix(in srgb, var(--ink, var(--foreground)) 13%, transparent)`}),progressFill:c({height:`100%`,borderRadius:`inherit`,background:`var(--accent-green, var(--primary))`,transition:`transform 240ms cubic-bezier(0.22, 1, 0.36, 1)`,transformOrigin:`left center`}),arena:c({position:`relative`,display:`grid`,minHeight:{base:`20rem`,sm:`23rem`},placeItems:`center`,overflow:`hidden`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.625rem`,padding:{base:`3.25rem 1rem 3.5rem`,sm:`3.5rem 3.75rem`}}),cardStack:c({position:`relative`,zIndex:2,width:`min(100%, 34rem)`,"&::before, &::after":{content:`""`,position:`absolute`,inset:`0.4rem 0.5rem -0.4rem`,zIndex:-1,border:`1px solid color-mix(in srgb, var(--arena-accent, var(--phosphor, #4be388)) 58%, transparent)`,borderRadius:`0.5rem`,background:`color-mix(in srgb, var(--crt, #07100b) 82%, var(--arena-accent, var(--accent-green, #4be388)))`},"&::after":{inset:`0.75rem 0.9rem -0.75rem`,zIndex:-2,opacity:.52}}),face:c({position:`relative`,display:`flex`,width:`100%`,minHeight:{base:`13.5rem`,sm:`15rem`},maxHeight:`24rem`,flexDirection:`column`,justifyContent:`space-between`,gap:`1rem`,overflowY:`auto`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--paper, var(--background))`,padding:{base:`1.25rem`,sm:`1.75rem`},color:`var(--ink, var(--foreground))`,boxShadow:`6px 6px 0 color-mix(in srgb, var(--arena-accent, var(--phosphor, #4be388)) 34%, var(--ink, #1c211b))`,textAlign:`left`}),backFace:c({background:`color-mix(in srgb, var(--green-wash, var(--muted)) 72%, var(--paper, var(--background)))`}),faceLabel:c({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:700,letterSpacing:`0.07em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),cardCopy:c({position:`relative`,zIndex:1,fontSize:{base:`1rem`,sm:`1.125rem`},fontWeight:600,lineHeight:1.6,overflowWrap:`anywhere`}),tags:c({display:`flex`,flexWrap:`wrap`,gap:`0.375rem`}),tag:c({borderRadius:`9999px`,background:`color-mix(in srgb, var(--ink, var(--foreground)) 8%, transparent)`,padding:`0.2rem 0.45rem`,fontSize:`0.625rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`}),faceHint:c({fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,color:`var(--ink-soft, var(--muted-foreground))`}),cue:c({position:`absolute`,zIndex:1,display:`inline-flex`,alignItems:`center`,gap:`0.25rem`,borderRadius:`9999px`,border:`1px solid color-mix(in srgb, var(--phosphor, #4be388) 38%, transparent)`,background:`color-mix(in srgb, var(--crt, #07100b) 84%, transparent)`,padding:`0.25rem 0.5rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.5625rem`,fontWeight:700,letterSpacing:`0.04em`,textTransform:`uppercase`,color:`var(--phosphor-dim, #9bd8ad)`,opacity:0,transform:`scale(0.94)`,transition:`opacity 160ms, transform 160ms, color 160ms, border-color 160ms`,pointerEvents:`none`,"&[data-visible=true]":{opacity:.82,transform:`scale(1)`},"&[data-active=true]":{borderColor:`var(--cue-color)`,color:`var(--cue-color)`,opacity:1,transform:`scale(1.06)`}}),cueTop:c({top:`0.75rem`,left:`50%`,transform:`translateX(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateX(-50%) scale(1)`},"&[data-active=true]":{transform:`translateX(-50%) scale(1.06)`}}),cueBottom:c({bottom:`0.75rem`,left:`50%`,transform:`translateX(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateX(-50%) scale(1)`},"&[data-active=true]":{transform:`translateX(-50%) scale(1.06)`}}),cueLeft:c({left:`0.625rem`,top:`50%`,transform:`translateY(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateY(-50%) scale(1)`},"&[data-active=true]":{transform:`translateY(-50%) scale(1.06)`}}),cueRight:c({right:`0.625rem`,top:`50%`,transform:`translateY(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateY(-50%) scale(1)`},"&[data-active=true]":{transform:`translateY(-50%) scale(1.06)`}}),impact:c({position:`absolute`,inset:0,zIndex:4,display:`grid`,placeItems:`center`,pointerEvents:`none`,"&::before":{content:`""`,width:`8rem`,height:`8rem`,border:`2px solid var(--impact-color)`,borderRadius:`9999px`,boxShadow:`0 0 24px color-mix(in srgb, var(--impact-color) 62%, transparent)`}}),impactLabel:c({position:`absolute`,display:`grid`,justifyItems:`center`,gap:`0.125rem`,border:`2px solid var(--impact-color)`,borderRadius:`0.375rem`,background:`var(--crt, #07100b)`,padding:`0.5rem 0.75rem`,fontFamily:`var(--mono-display, var(--font-mono))`,color:`var(--impact-color)`,boxShadow:`4px 4px 0 color-mix(in srgb, var(--impact-color) 36%, transparent)`}),reviewMeta:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.6875rem`,color:`var(--ink-soft, var(--muted-foreground))`}),metaBits:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0.35rem`}),controls:c({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(7rem, 1.5fr) minmax(0, 1fr)`,gap:`0.5rem`}),controlButton:c({display:`inline-flex`,minWidth:0,minHeight:`2.75rem`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--background)`,padding:`0.5rem 0.625rem`,fontSize:`0.8125rem`,fontWeight:650,color:`var(--foreground)`,transition:`background-color 150ms, color 150ms, transform 120ms, box-shadow 120ms`,_hover:{background:`var(--accent)`},_active:{transform:`translateY(1px)`,boxShadow:`none`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},_disabled:{pointerEvents:`none`,opacity:.38}}),revealButton:c({background:`var(--ink, var(--primary))`,color:`var(--paper, var(--primary-foreground))`,boxShadow:`3px 3px 0 color-mix(in srgb, var(--accent-green, var(--primary)) 72%, transparent)`,_hover:{background:`var(--accent-dim, var(--primary))`,color:`white`}}),ratingPanel:c({display:`grid`,gap:`0.5rem`}),ratingPrompt:c({textAlign:`center`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`}),ratingGrid:c({display:`grid`,gridTemplateColumns:`repeat(2, minmax(0, 1fr))`,gap:`0.5rem`,sm:{gridTemplateColumns:`repeat(4, minmax(0, 1fr))`}}),keyboardHint:c({textAlign:`center`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,lineHeight:1.5,color:`var(--ink-soft, var(--muted-foreground))`}),completion:c({position:`relative`,display:`grid`,minHeight:`23rem`,placeItems:`center`,overflow:`hidden`,borderRadius:`0.625rem`,background:`var(--crt, #07100b)`,padding:{base:`1rem`,sm:`2rem`},textAlign:`center`}),completionCard:c({position:`relative`,zIndex:1,display:`grid`,width:`min(100%, 32rem)`,justifyItems:`center`,gap:`0.875rem`,border:`2px solid var(--phosphor, #4be388)`,borderRadius:`0.75rem`,background:`color-mix(in srgb, var(--crt, #07100b) 88%, var(--accent-green, #4be388))`,padding:{base:`1.25rem`,sm:`1.75rem`},color:`var(--phosphor, #4be388)`,boxShadow:`8px 8px 0 color-mix(in srgb, var(--phosphor, #4be388) 25%, transparent)`}),completionIcon:c({display:`grid`,width:`3.5rem`,height:`3.5rem`,placeItems:`center`,border:`2px solid currentColor`,borderRadius:`9999px`}),completionTitle:c({fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`1.25rem`,fontWeight:700}),completionStats:c({display:`grid`,width:`100%`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,borderBlock:`1px solid color-mix(in srgb, currentColor 38%, transparent)`,paddingBlock:`0.75rem`}),completionStat:c({display:`grid`,gap:`0.125rem`,fontVariantNumeric:`tabular-nums`,"& + &":{borderInlineStart:`1px solid color-mix(in srgb, currentColor 28%, transparent)`}})};function ke(e){typeof window>`u`||window.dispatchEvent(new CustomEvent(`keating:card-reviewed`,{detail:e}))}var Ae={0:{label:`Again`,gesture:`Swipe left`,accent:`var(--red, #d95f4f)`,badgeClass:c({borderColor:`color-mix(in srgb, var(--destructive) 60%, transparent)`,background:`color-mix(in srgb, var(--destructive) 15%, transparent)`,color:`var(--destructive)`}),exitClass:`flashcard-exit-left`},1:{label:`Hard`,gesture:`Swipe down`,accent:`var(--amber, #e8a33d)`,badgeClass:c({borderColor:`rgba(245, 158, 11, 0.6)`,background:`rgba(245, 158, 11, 0.15)`,color:`#b45309`,".dark &":{color:`#fcd34d`}}),exitClass:`flashcard-exit-down`},2:{label:`Good`,gesture:`Swipe right`,accent:`var(--accent-green, #4be388)`,badgeClass:c({borderColor:`rgba(16, 185, 129, 0.6)`,background:`rgba(16, 185, 129, 0.15)`,color:`#047857`,".dark &":{color:`#6ee7b7`}}),exitClass:`flashcard-exit-right`},3:{label:`Easy`,gesture:`Swipe up`,accent:`#67d7e8`,badgeClass:c({borderColor:`rgba(14, 165, 233, 0.6)`,background:`rgba(14, 165, 233, 0.15)`,color:`#0369a1`,".dark &":{color:`#7dd3fc`}}),exitClass:`flashcard-exit-up`}};function I({rating:e,label:t,subLabel:n,intervalDays:r,colorClass:a,disabled:o,onClick:l}){return(0,M.jsxs)(`button`,{type:`button`,onClick:l,disabled:o,"data-rating":e,"aria-label":`${t}: ${n}. Review ${i(r)}.`,className:s(`recall-rating`,c({display:`flex`,flex:1,minHeight:`4.5rem`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,gap:`0.125rem`,borderRadius:`0.5rem`,border:`2px solid`,padding:`0.5rem 0.75rem`,fontSize:`0.75rem`,fontWeight:500,transition:`color 150ms, background-color 150ms, filter 150ms, transform 120ms`,_hover:o?void 0:{filter:`brightness(1.08)`,transform:`translateY(-1px)`},_active:o?void 0:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},_disabled:{cursor:`not-allowed`,opacity:.5}}),a),children:[(0,M.jsx)(`span`,{className:c({fontSize:`0.875rem`,fontWeight:700}),children:t}),(0,M.jsx)(`span`,{className:s(`font-terminal`,c({fontSize:`0.625rem`,opacity:.8})),children:i(r)})]})}function L({preset:e}){return e===`solar`?(0,M.jsx)(x,{size:13,"aria-hidden":`true`}):e===`orbit`?(0,M.jsx)(y,{size:13,"aria-hidden":`true`}):e===`prism`?(0,M.jsx)(v,{size:13,"aria-hidden":`true`}):e===`current`?(0,M.jsx)(le,{size:13,"aria-hidden":`true`}):e===`contour`?(0,M.jsx)(C,{size:13,"aria-hidden":`true`}):e===`still`?(0,M.jsx)(b,{size:13,"aria-hidden":`true`}):(0,M.jsx)(S,{size:13,"aria-hidden":`true`})}function je({value:e,onChange:t}){return(0,M.jsxs)(`div`,{className:F.atmosphere,children:[(0,M.jsx)(`span`,{className:F.atmosphereLabel,children:`Arena signal`}),(0,M.jsx)(`div`,{className:F.presetGroup,role:`group`,"aria-label":`Flashcard arena shader`,children:g.map(n=>(0,M.jsxs)(`button`,{type:`button`,"aria-pressed":e===n.id,className:F.presetButton,title:n.description,onClick:()=>t(n.id),children:[(0,M.jsx)(L,{preset:n.id}),(0,M.jsx)(`span`,{children:n.label})]},n.id))})]})}function R({rating:e,positionClass:t,visible:n,active:r}){let i=Ae[e],a=e===0?`←`:e===1?`↓`:e===2?`→`:`↑`;return(0,M.jsxs)(`span`,{"aria-hidden":`true`,"data-visible":n,"data-active":r,className:s(F.cue,t),style:{"--cue-color":i.accent},title:i.gesture,children:[a,` `,i.label]})}function Me(e){return e===`solar`||e===`contour`?`var(--amber, #e8a33d)`:e===`prism`?`var(--red, #d95f4f)`:e===`current`||e===`orbit`?`#67d7e8`:e===`still`?`var(--ink-soft, #6f766c)`:`var(--phosphor, #4be388)`}function Ne(e){return e===`still`?`flashcard-enter`:`flashcard-enter-${e}`}function Pe(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0)/4294967295*97}function z({deck:e,restrictToCardIds:t,onReview:i,onComplete:o,showMeta:l=!0,autoFocusKeyboard:d=!1,defaultShaderPreset:f}){let[p,h]=(0,w.useState)(!1),[g,_]=(0,w.useState)(()=>Te()),[v,y]=(0,w.useState)(0),[b,x]=(0,w.useState)(0),[S,C]=(0,w.useState)(0),[pe,T]=(0,w.useState)(0),[E,he]=(0,w.useState)(0),[ge,_e]=(0,w.useState)(0),[D,O]=(0,w.useState)(null),[Se,k]=(0,w.useState)(!1),[A,N]=(0,w.useState)(()=>De(f)),P=(0,w.useRef)(!1),L=(0,w.useRef)(!1),z=(0,w.useRef)(!1),B=(0,w.useRef)(null),[Ie,Le]=me(),V=Ie.flashcardSoundEnabled,H=(0,w.useMemo)(()=>{let n=t?new Set(t):null;return e.cards.filter(e=>n?n.has(e.id):!0).map(e=>({...e,srs:{...e.srs}}))},[e.cards,t]),[U,Re]=(0,w.useState)(H),[W,ze]=(0,w.useState)(0);(0,w.useEffect)(()=>{Re(H),ze(0),h(!1),y(0),x(0),C(0),T(0),he(0),O(null),L.current=!1,z.current=!1,P.current=!1},[H]),(0,w.useEffect)(()=>{f&&N(u(f))},[f]),(0,w.useEffect)(()=>{d&&B.current?.focus({preventScroll:!0})},[d]);let G=U[W],K=!G,Be=ce({cardKey:`${e.id}:${G?.id??`complete`}:${W}`,revealed:p,disabled:K||!!D,onReveal:()=>{!G||L.current||(j(`flip`,V),h(!0))}}),Ve=(0,w.useMemo)(()=>n({...e,cards:U},Date.now()),[U,e]),He=Math.min(1,S/6+v/Math.max(24,U.length)),Ue=Pe(`${e.id}:${G?.id??`complete`}:${W}`),We=(0,w.useCallback)(e=>{let t=u(e);N(t),Oe(t)},[]),Ge=(0,w.useCallback)(e=>{_(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),Ee(n),n})},[]),q=(0,w.useCallback)(()=>{h(e=>(e||j(`flip`,V),!e))},[V]),J=(0,w.useCallback)(async t=>{if(!G||z.current)return;z.current=!0;let n=a(G.srs,t,Date.now()),r={...G.srs,...n.next},o=xe(S,t),s=m(t,o);Re(e=>e.map((e,t)=>t===W?{...e,srs:r}:e)),y(e=>e+1),n.isLapse&&x(e=>e+1),C(o),T(e=>Math.max(e,o)),he(e=>e+s),o>S&&_e(e=>e+1);let c={cardId:G.id,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease};i?.(c),ke({deckId:e.id,cardId:G.id,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease});try{await we.updateDeckCardSrs(e.id,G.id,r),await we.recordCardReview({deckId:e.id,cardId:G.id,topic:e.topic,slug:e.slug,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease,previousIntervalDays:G.srs.intervalDays,isLapse:n.isLapse})}catch{}h(!1),O(null),ze(e=>e+1),L.current=!1,z.current=!1,B.current?.focus({preventScroll:!0})},[G,e.id,e.slug,e.topic,W,i,S]),Y=(0,w.useCallback)((e,t=!1)=>{if(!(!G||L.current)){if(L.current=!0,j(Ce(e),V),ye()){J(e);return}O({rating:e,viaSwipe:t})}},[J,G,V]),{drag:X,handlers:Ke}=ve({enabled:p&&!D,onGrade:e=>Y(e,!0),onTap:q});(0,w.useEffect)(()=>{if(!D)return;let e=window.setTimeout(()=>{J(D.rating)},360);return()=>window.clearTimeout(e)},[J,D]),(0,w.useEffect)(()=>{K&&!P.current&&(P.current=!0,v>0&&j(`complete`,V),o?.({reviewed:v,lapses:b}))},[K,b,o,v,V]);let Z=(0,w.useCallback)(e=>{L.current||(ze(t=>Math.max(0,Math.min(U.length,t+e))),h(!1))},[U.length]),qe=(0,w.useCallback)(e=>{if(!e.target.closest(`button, input, select, textarea, a`)&&!(!G||L.current)){if(e.key===` `||e.key===`Enter`){e.preventDefault(),q();return}if(p&&[`1`,`2`,`3`,`4`].includes(e.key)){e.preventDefault(),Y(Number(e.key)-1);return}if(e.key===`ArrowLeft`){e.preventDefault(),Z(-1);return}e.key===`ArrowRight`&&(e.preventDefault(),Z(1))}},[G,Z,Y,p,q]);if(K)return(0,M.jsx)(`div`,{className:s(F.shell,`activity-game recall-game`),children:(0,M.jsxs)(`div`,{className:s(F.inner,`recall-inner`),children:[(0,M.jsx)(ae,{current:U.length,total:U.length,complete:!0,label:`Flashcard run progress`}),(0,M.jsx)(oe,{detail:v>0?`${v} reviewed${b?` · ${b} to revisit`:` · all recalled`}`:`No cards in this round.`,children:v>0&&b===0?`Clean sweep`:`Round complete`}),v>0?(0,M.jsxs)(`div`,{className:`recall-finish-stats`,children:[(0,M.jsxs)(`span`,{children:[(0,M.jsx)(le,{size:16,"aria-hidden":`true`}),E.toLocaleString(),` points`]}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(ie,{size:16,"aria-hidden":`true`}),pe,` best combo`]})]}):null,v>0?(0,M.jsx)(`p`,{className:c({fontSize:`0.8125rem`,color:`var(--muted-foreground)`}),children:`Your next review is scheduled.`}):null]})});let Q=Fe(G.srs),$=X.previewGrade,Je=D?D.viaSwipe?Ae[D.rating].exitClass:`flashcard-exit-fade`:``,Ye=D?Ae[D.rating]:null,Xe=D?m(D.rating,xe(S,D.rating)):0,Ze={...X.dragging?{transform:`translate(${X.dx}px, ${X.dy}px) rotate(${X.dx*.04}deg)${p?` rotateY(180deg)`:``}`}:{},touchAction:p?`none`:`pan-y`},Qe={"--arena-accent":Me(A)};return(0,M.jsx)(`div`,{ref:B,tabIndex:0,role:`group`,"aria-label":`Flashcard recall run: ${e.title}`,onKeyDown:qe,onFocus:()=>k(!0),onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||k(!1)},className:s(F.shell,`activity-game recall-game`),children:(0,M.jsxs)(`div`,{className:s(F.inner,`recall-inner`),children:[l?(0,M.jsx)(M.Fragment,{children:(0,M.jsxs)(`header`,{className:F.header,children:[(0,M.jsxs)(`div`,{className:F.titleGroup,children:[(0,M.jsx)(`h3`,{className:s(F.title,`recall-title`),children:e.title}),(0,M.jsx)(`p`,{className:F.deckLine,children:Ve.dueNow>0?`${Ve.dueNow} ready to recall`:`Recall round`})]}),(0,M.jsxs)(`div`,{className:F.headerActions,children:[S>=2?(0,M.jsxs)(`span`,{className:s(`flashcard-streak-pop`,be(S)?`flashcard-milestone-pulse`:``,c({display:`inline-flex`,minHeight:`2.25rem`,alignItems:`center`,gap:`0.3rem`,border:`1px solid color-mix(in srgb, var(--amber) 62%, transparent)`,borderRadius:`9999px`,background:`color-mix(in srgb, var(--amber) 12%, var(--background))`,paddingInline:`0.625rem`,fontSize:`0.6875rem`,fontWeight:700,color:`color-mix(in srgb, var(--amber) 72%, var(--ink))`})),title:`${S} consecutive Good or Easy recalls`,children:[(0,M.jsx)(ie,{size:13}),` `,S,` combo`]},ge):null,(0,M.jsx)(`button`,{type:`button`,onClick:()=>Le({flashcardSoundEnabled:!V}),className:F.iconButton,"aria-label":V?`Mute flashcard sounds`:`Enable flashcard sounds`,title:V?`Sounds on`:`Sounds off`,children:V?(0,M.jsx)(ue,{size:16}):(0,M.jsx)(fe,{size:16})})]})]})}):null,(0,M.jsxs)(`div`,{className:`recall-progress`,children:[(0,M.jsx)(ae,{current:W,total:U.length,label:`Flashcard run progress`}),E>0?(0,M.jsxs)(`span`,{className:`recall-score`,"aria-live":`polite`,children:[(0,M.jsx)(le,{size:14,"aria-hidden":`true`}),E.toLocaleString(),` points`]},E):null]}),(0,M.jsx)(de,{timer:Be,disabled:!!D}),(0,M.jsx)(`span`,{className:`activity-sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:p?`Answer: ${G.back}`:``}),(0,M.jsxs)(`div`,{className:s(F.arena,`flashcard-arena recall-arena`),"data-shader-preset":A,"data-streak-tier":S>=5?`high`:S>=2?`warm`:`idle`,style:Qe,children:[(0,M.jsx)(ne,{preset:A,energy:He,seed:Ue},`${A}:${G.id}`),(0,M.jsx)(R,{rating:3,positionClass:F.cueTop,visible:p&&!D&&X.dragging,active:$===3}),(0,M.jsx)(R,{rating:1,positionClass:F.cueBottom,visible:p&&!D&&X.dragging,active:$===1}),(0,M.jsx)(R,{rating:0,positionClass:F.cueLeft,visible:p&&!D&&X.dragging,active:$===0}),(0,M.jsx)(R,{rating:2,positionClass:F.cueRight,visible:p&&!D&&X.dragging,active:$===2}),(0,M.jsx)(`div`,{className:s(F.cardStack,`recall-stack`),style:Qe,children:(0,M.jsxs)(`div`,{...Ke,role:`button`,tabIndex:0,"aria-label":p?`Answer: ${G.back}. Show prompt`:`Recall: ${G.front}. Reveal answer`,"aria-pressed":p,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),q())},style:Ze,className:s(`flashcard-3d`,p?`flashcard-flipped`:``,X.dragging?`flashcard-dragging`:``,Je||Ne(A),c({cursor:`pointer`,userSelect:`none`})),onAnimationEnd:e=>{D&&e.animationName.startsWith(`flashcard-exit`)&&J(D.rating)},children:[(0,M.jsxs)(`div`,{"aria-hidden":p,className:s(`flashcard-face`,F.face,`recall-face`),children:[(0,M.jsxs)(`div`,{className:s(F.faceLabel,`recall-face-label`),children:[(0,M.jsx)(`span`,{children:`Recall`}),(0,M.jsxs)(`span`,{children:[W+1,`/`,U.length]})]}),(0,M.jsx)(`div`,{className:s(F.cardCopy,`recall-copy`),children:G.front}),(0,M.jsxs)(`div`,{children:[G.tags?.length?(0,M.jsx)(`div`,{className:F.tags,children:G.tags.slice(0,4).map(e=>(0,M.jsx)(`span`,{className:F.tag,children:e},e))}):null,(0,M.jsx)(`p`,{className:s(F.faceHint,`recall-face-hint`),children:`Tap to reveal`})]})]}),(0,M.jsxs)(`div`,{"aria-hidden":!p,className:s(`flashcard-face`,`flashcard-face-back`,F.face,F.backFace,`recall-face`),children:[(0,M.jsxs)(`div`,{className:s(F.faceLabel,`recall-face-label`),children:[(0,M.jsx)(`span`,{children:`Answer`}),(0,M.jsx)(`span`,{children:`How did you do?`})]}),(0,M.jsx)(`div`,{className:s(F.cardCopy,`recall-copy`),children:G.back}),(0,M.jsxs)(`div`,{children:[G.tags?.length?(0,M.jsx)(`div`,{className:F.tags,children:G.tags.slice(0,4).map(e=>(0,M.jsx)(`span`,{className:F.tag,children:e},e))}):null,(0,M.jsx)(`p`,{className:s(F.faceHint,`recall-face-hint`),children:`Swipe or choose your recall below`})]})]})]},G.id)}),Ye?(0,M.jsx)(`div`,{className:s(F.impact,`flashcard-grade-impact`),style:{"--impact-color":Ye.accent},children:(0,M.jsxs)(`span`,{className:s(F.impactLabel,`flashcard-grade-impact-label`),children:[(0,M.jsx)(`strong`,{children:Ye.label}),(0,M.jsx)(`small`,{children:Xe>0?`+${Xe}`:`We’ll revisit it`})]})}):null]}),p?(0,M.jsxs)(`div`,{className:F.ratingPanel,children:[(0,M.jsx)(`p`,{className:F.ratingPrompt,children:`How well did you remember?`}),(0,M.jsxs)(`div`,{className:s(F.ratingGrid,`recall-rating-grid`),children:[(0,M.jsx)(I,{rating:0,label:`Again`,subLabel:`Missed`,intervalDays:Q.again,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--destructive) 52%, transparent)`,background:`color-mix(in srgb, var(--destructive) 10%, transparent)`,color:`var(--destructive)`,_hover:{background:`color-mix(in srgb, var(--destructive) 18%, transparent)`}}),onClick:()=>Y(0)}),(0,M.jsx)(I,{rating:1,label:`Hard`,subLabel:`Strained`,intervalDays:Q.hard,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--amber) 55%, transparent)`,background:`color-mix(in srgb, var(--amber) 10%, transparent)`,color:`color-mix(in srgb, var(--amber) 72%, var(--ink))`,_hover:{background:`color-mix(in srgb, var(--amber) 18%, transparent)`}}),onClick:()=>Y(1)}),(0,M.jsx)(I,{rating:2,label:`Good`,subLabel:`Recalled`,intervalDays:Q.good,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--accent-green) 52%, transparent)`,background:`color-mix(in srgb, var(--accent-green) 10%, transparent)`,color:`var(--accent-dim)`,_hover:{background:`color-mix(in srgb, var(--accent-green) 18%, transparent)`}}),onClick:()=>Y(2)}),(0,M.jsx)(I,{rating:3,label:`Easy`,subLabel:`Instant`,intervalDays:Q.easy,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, #67d7e8 58%, transparent)`,background:`color-mix(in srgb, #67d7e8 10%, transparent)`,color:`color-mix(in srgb, #67d7e8 64%, var(--ink))`,_hover:{background:`color-mix(in srgb, #67d7e8 18%, transparent)`}}),onClick:()=>Y(3)})]})]}):(0,M.jsxs)(`div`,{className:F.controls,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>Z(-1),disabled:W===0,className:s(F.controlButton,`activity-back-action`),children:[(0,M.jsx)(te,{size:15}),` Back`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:q,className:s(F.controlButton,F.revealButton,`activity-main-action recall-reveal`),children:[(0,M.jsx)(se,{size:16}),` Reveal answer`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:()=>Z(1),disabled:W>=U.length-1,className:s(F.controlButton,`activity-back-action`),children:[`Skip `,(0,M.jsx)(re,{size:15})]})]}),(0,M.jsxs)(`details`,{className:`activity-review recall-details`,children:[(0,M.jsx)(`summary`,{children:`Card details & appearance`}),(0,M.jsxs)(`div`,{className:F.reviewMeta,children:[(0,M.jsxs)(`div`,{className:F.metaBits,children:[(0,M.jsxs)(`span`,{children:[`Reps `,G.srs.reps]}),(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{children:[`Ease `,G.srs.ease.toFixed(2)]}),G.srs.lapses>0?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{className:c({color:`var(--destructive)`}),children:[`Lapses `,G.srs.lapses]})]}):null,G.srs.dueAt>0&&G.srs.reps>0?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{children:[`Next `,r(G.srs.dueAt)]})]}):null]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>Ge(G.id),className:F.iconButton,"aria-label":g.has(G.id)?`Remove bookmark`:`Bookmark card`,title:g.has(G.id)?`Bookmarked`:`Bookmark for review`,children:(0,M.jsx)(ee,{size:16,fill:g.has(G.id)?`currentColor`:`none`})})]}),(0,M.jsx)(je,{value:A,onChange:We})]}),Se?(0,M.jsx)(`p`,{className:F.keyboardHint,children:`Space to flip · 1–4 to rate · ← → to navigate`}):null]})})}z.displayName=`FlashcardRenderer`;function Fe(e){return{again:a(e,0,Date.now()).appliedIntervalDays,hard:a(e,1,Date.now()).appliedIntervalDays,good:a(e,2,Date.now()).appliedIntervalDays,easy:a(e,3,Date.now()).appliedIntervalDays}}function B({deck:e,now:t=Date.now(),onStart:r}){let i=n(e,t);return(0,M.jsxs)(`div`,{className:c({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,background:`color-mix(in srgb, var(--muted) 20%, transparent)`,padding:`0.75rem`}),children:[(0,M.jsxs)(`div`,{className:c({minWidth:0}),children:[(0,M.jsxs)(`div`,{className:c({display:`flex`,alignItems:`center`,gap:`0.5rem`}),children:[(0,M.jsx)(C,{size:14,className:c({flexShrink:0,color:`#f59e0b`})}),(0,M.jsx)(`p`,{className:c({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.875rem`,fontWeight:500}),children:e.title})]}),(0,M.jsxs)(`p`,{className:s(`font-terminal`,c({marginTop:`0.125rem`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`})),children:[i.total,` cards // `,i.dueNow,` due // `,i.mature,` mature`]})]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>r?.(e),disabled:i.dueNow===0,className:c({display:`inline-flex`,flexShrink:0,alignItems:`center`,gap:`0.25rem`,borderRadius:`0.375rem`,border:`2px solid var(--primary)`,background:`var(--primary)`,padding:`0.375rem 0.75rem`,fontSize:`0.75rem`,fontWeight:500,color:`var(--primary-foreground)`,transition:`color 150ms, background-color 150ms`,_hover:{background:`color-mix(in srgb, var(--primary) 90%, black)`},_disabled:{pointerEvents:`none`,opacity:.4}}),children:i.dueNow===0?`All caught up`:`Review ${i.dueNow}`})]})}B.displayName=`DeckSummary`;export{me as n,T as r,z as t};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{i as n,n as r,r as i,t as a}from"./srs-BBTX4fCR.js";import{$ as o,M as s,N as c,Q as l,bn as u,tt as d,vn as f,wt as p,xn as m,xr as h,yn as g}from"./index-DCgpDQKf.js";import{t as _}from"./createLucideIcon-C_7xXnHN.js";import{a as v,i as ee,r as te,t as ne}from"./FlashcardShaderField-JGgL2kgp.js";import{t as re}from"./chevron-right-CtU0hmKY.js";import{t as y}from"./circle-dot-iMK6vtYt.js";import{t as ie}from"./flame-VMBkC42I.js";import{a as ae,c as b,i as oe,l as se,n as ce,o as le,s as ue,t as de}from"./FlashcardTimer-vPNL9_0N.js";import{t as x}from"./sun-DMbmf-Gm.js";var S=_(`scan-line`,[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}]]),C=_(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),fe=_(`volume-x`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`line`,{x1:`22`,x2:`16`,y1:`9`,y2:`15`,key:`1ewh16`}],[`line`,{x1:`16`,x2:`22`,y1:`9`,y2:`15`,key:`5ykzw1`}]]),w=e(t(),1);function pe(e,t){let n,r=!0;return{getSnapshot:()=>((r||n===void 0)&&(n=e(),r=!1),n),subscribe:e=>(r=!0,t(()=>{r=!0,e()}))}}function T(e,t,n){let r=(0,w.useMemo)(()=>pe(e,n),[e,n]);return[(0,w.useSyncExternalStore)(r.subscribe,r.getSnapshot,r.getSnapshot),(0,w.useCallback)(n=>{t({...e(),...n})},[e,t])]}function me(){return T(l,o,d)}var E=24;function he(e,t,n,r){let i=Math.abs(e),a=Math.abs(t),o=Math.max(i,a);return o>=100||o>=E&&Math.max(Math.abs(n),Math.abs(r))>=.65?i>=a?e<0?0:2:t<0?3:1:null}function ge(e,t){let n=Math.abs(e),r=Math.abs(t);return Math.max(n,r)<E?null:n>=r?e<0?0:2:t<0?3:1}var _e={dragging:!1,dx:0,dy:0,progress:0,previewGrade:null};function ve({enabled:e,onGrade:t,onTap:n}){let[r,i]=(0,w.useState)(_e),a=(0,w.useRef)(null),o=(0,w.useRef)({x:0,y:0,t:0}),s=(0,w.useRef)(!1),c=(0,w.useCallback)(()=>{a.current=null,i(_e)},[]);return{drag:r,handlers:{onPointerDown:(0,w.useCallback)(e=>{e.button!==0||a.current||(a.current={x:e.clientX,y:e.clientY,t:e.timeStamp,id:e.pointerId},o.current={x:e.clientX,y:e.clientY,t:e.timeStamp},s.current=!1,e.currentTarget.setPointerCapture(e.pointerId))},[]),onPointerMove:(0,w.useCallback)(t=>{let n=a.current;if(!n||n.id!==t.pointerId)return;let r=t.clientX-n.x,c=t.clientY-n.y;o.current={x:t.clientX,y:t.clientY,t:t.timeStamp},Math.max(Math.abs(r),Math.abs(c))>6&&(s.current=!0),e&&i({dragging:!0,dx:r,dy:c,progress:Math.min(1,Math.max(Math.abs(r),Math.abs(c))/100),previewGrade:ge(r,c)})},[e]),onPointerUp:(0,w.useCallback)(r=>{let i=a.current;if(!i||i.id!==r.pointerId)return;let o=r.clientX-i.x,l=r.clientY-i.y,u=Math.max(1,r.timeStamp-i.t),d=o/u,f=l/u,p=!s.current;if(c(),p){n?.();return}if(!e)return;let m=he(o,l,d,f);m!==null&&t(m)},[e,t,n,c]),onPointerCancel:(0,w.useCallback)(()=>c(),[c])}}}function ye(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return!1;try{return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}catch{return!1}}var D=[5,10,20,50];function be(e){return D.includes(e)}function xe(e,t){return t>=2?e+1:0}var O=null;function Se(){if(typeof window>`u`)return null;let e=window.AudioContext??window.webkitAudioContext;if(!e)return null;if(!O)try{O=new e}catch{return null}return O.state===`suspended`&&O.resume().catch(()=>{}),O}function k(e,t,n,r,i=.08){let a=e.createOscillator(),o=e.createGain();a.type=`triangle`,a.frequency.value=t,o.gain.setValueAtTime(0,n),o.gain.linearRampToValueAtTime(i,n+.01),o.gain.exponentialRampToValueAtTime(1e-4,n+r),a.connect(o).connect(e.destination),a.start(n),a.stop(n+r+.02)}var A={flip:[[660,0,.07]],again:[[180,0,.16]],hard:[[330,0,.09]],good:[[523,0,.08],[659,.07,.1]],easy:[[523,0,.07],[659,.06,.07],[784,.12,.12]],complete:[[523,0,.1],[659,.1,.1],[784,.2,.1],[1047,.3,.22]]};function j(e,t){if(t)try{let t=Se();if(!t)return;let n=t.currentTime;for(let[r,i,a]of A[e])k(t,r,n+i,a)}catch{}}function Ce(e){return e<=0?`again`:e===1?`hard`:e===2?`good`:`easy`}var M=p(),we=new h,N=`keating:card-bookmarks`,P=`keating:flashcard-shader-preset`;function Te(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}function Ee(e){try{localStorage.setItem(N,JSON.stringify([...e]))}catch{}}function De(e){if(e)return u(e);try{return u(localStorage.getItem(P))}catch{return f}}function Oe(e){try{localStorage.setItem(P,e)}catch{}}var F={shell:c({position:`relative`,isolation:`isolate`,overflow:`hidden`,marginBlock:`0.75rem`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.75rem`,background:`var(--card, var(--background))`,color:`var(--ink, var(--foreground))`,boxShadow:`4px 4px 0 color-mix(in srgb, var(--ink, var(--foreground)) 18%, transparent)`,_focus:{outline:`none`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`3px`}}),inner:c({position:`relative`,zIndex:1,display:`grid`,gap:`0.875rem`,padding:{base:`0.75rem`,sm:`1rem`}}),header:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`}),titleGroup:c({minWidth:0,flex:`1 1 12rem`}),title:c({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`0.9375rem`,fontWeight:700}),deckLine:c({marginTop:`0.125rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.6875rem`,color:`var(--ink-soft, var(--muted-foreground))`}),headerActions:c({display:`flex`,alignItems:`center`,gap:`0.375rem`}),iconButton:c({display:`inline-flex`,width:`2.75rem`,height:`2.75rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`0.375rem`,color:`var(--ink-soft, var(--muted-foreground))`,transition:`background-color 150ms, color 150ms, transform 120ms`,_hover:{background:`var(--accent)`,color:`var(--accent-foreground)`},_active:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`}}),atmosphere:c({display:`grid`,gap:`0.375rem`,borderTop:`1px solid color-mix(in srgb, var(--ink, var(--foreground)) 18%, transparent)`,paddingTop:`0.75rem`,sm:{gridTemplateColumns:`auto minmax(0, 1fr)`,alignItems:`center`,gap:`0.75rem`}}),atmosphereLabel:c({fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:700,letterSpacing:`0.06em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),presetGroup:c({display:`grid`,gridTemplateColumns:`repeat(2, minmax(0, 1fr))`,gap:`0.375rem`,sm:{gridTemplateColumns:`repeat(4, minmax(0, 1fr))`}}),presetButton:c({display:`inline-flex`,minWidth:0,minHeight:`2.75rem`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,border:`1px solid var(--ink, var(--border))`,borderRadius:`0.375rem`,background:`var(--background)`,paddingInline:`0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`,transition:`background-color 150ms, color 150ms, transform 120ms`,_hover:{color:`var(--foreground)`},_active:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},"&[aria-pressed=true]":{background:`var(--ink, var(--foreground))`,color:`var(--paper, var(--background))`}}),hud:c({display:`grid`,gridTemplateColumns:`minmax(0, 1.6fr) minmax(4.5rem, 0.7fr) minmax(4.5rem, 0.7fr)`,overflow:`hidden`,border:`1px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--paper, var(--background))`}),hudCell:c({minWidth:0,padding:`0.625rem 0.75rem`,"& + &":{borderInlineStart:`1px solid color-mix(in srgb, var(--ink, var(--foreground)) 22%, transparent)`}}),hudLabel:c({display:`block`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.5625rem`,fontWeight:700,letterSpacing:`0.06em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),hudValue:c({display:`block`,marginTop:`0.125rem`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`0.875rem`,fontWeight:700,fontVariantNumeric:`tabular-nums`}),progressTrack:c({height:`0.375rem`,marginTop:`0.375rem`,overflow:`hidden`,borderRadius:`9999px`,background:`color-mix(in srgb, var(--ink, var(--foreground)) 13%, transparent)`}),progressFill:c({height:`100%`,borderRadius:`inherit`,background:`var(--accent-green, var(--primary))`,transition:`transform 240ms cubic-bezier(0.22, 1, 0.36, 1)`,transformOrigin:`left center`}),arena:c({position:`relative`,display:`grid`,minHeight:{base:`20rem`,sm:`23rem`},placeItems:`center`,overflow:`hidden`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.625rem`,padding:{base:`3.25rem 1rem 3.5rem`,sm:`3.5rem 3.75rem`}}),cardStack:c({position:`relative`,zIndex:2,width:`min(100%, 34rem)`,"&::before, &::after":{content:`""`,position:`absolute`,inset:`0.4rem 0.5rem -0.4rem`,zIndex:-1,border:`1px solid color-mix(in srgb, var(--arena-accent, var(--phosphor, #4be388)) 58%, transparent)`,borderRadius:`0.5rem`,background:`color-mix(in srgb, var(--crt, #07100b) 82%, var(--arena-accent, var(--accent-green, #4be388)))`},"&::after":{inset:`0.75rem 0.9rem -0.75rem`,zIndex:-2,opacity:.52}}),face:c({position:`relative`,display:`flex`,width:`100%`,minHeight:{base:`13.5rem`,sm:`15rem`},maxHeight:`24rem`,flexDirection:`column`,justifyContent:`space-between`,gap:`1rem`,overflowY:`auto`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--paper, var(--background))`,padding:{base:`1.25rem`,sm:`1.75rem`},color:`var(--ink, var(--foreground))`,boxShadow:`6px 6px 0 color-mix(in srgb, var(--arena-accent, var(--phosphor, #4be388)) 34%, var(--ink, #1c211b))`,textAlign:`left`}),backFace:c({background:`color-mix(in srgb, var(--green-wash, var(--muted)) 72%, var(--paper, var(--background)))`}),faceLabel:c({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:700,letterSpacing:`0.07em`,textTransform:`uppercase`,color:`var(--ink-soft, var(--muted-foreground))`}),cardCopy:c({position:`relative`,zIndex:1,fontSize:{base:`1rem`,sm:`1.125rem`},fontWeight:600,lineHeight:1.6,overflowWrap:`anywhere`}),tags:c({display:`flex`,flexWrap:`wrap`,gap:`0.375rem`}),tag:c({borderRadius:`9999px`,background:`color-mix(in srgb, var(--ink, var(--foreground)) 8%, transparent)`,padding:`0.2rem 0.45rem`,fontSize:`0.625rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`}),faceHint:c({fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,color:`var(--ink-soft, var(--muted-foreground))`}),cue:c({position:`absolute`,zIndex:1,display:`inline-flex`,alignItems:`center`,gap:`0.25rem`,borderRadius:`9999px`,border:`1px solid color-mix(in srgb, var(--phosphor, #4be388) 38%, transparent)`,background:`color-mix(in srgb, var(--crt, #07100b) 84%, transparent)`,padding:`0.25rem 0.5rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.5625rem`,fontWeight:700,letterSpacing:`0.04em`,textTransform:`uppercase`,color:`var(--phosphor-dim, #9bd8ad)`,opacity:0,transform:`scale(0.94)`,transition:`opacity 160ms, transform 160ms, color 160ms, border-color 160ms`,pointerEvents:`none`,"&[data-visible=true]":{opacity:.82,transform:`scale(1)`},"&[data-active=true]":{borderColor:`var(--cue-color)`,color:`var(--cue-color)`,opacity:1,transform:`scale(1.06)`}}),cueTop:c({top:`0.75rem`,left:`50%`,transform:`translateX(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateX(-50%) scale(1)`},"&[data-active=true]":{transform:`translateX(-50%) scale(1.06)`}}),cueBottom:c({bottom:`0.75rem`,left:`50%`,transform:`translateX(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateX(-50%) scale(1)`},"&[data-active=true]":{transform:`translateX(-50%) scale(1.06)`}}),cueLeft:c({left:`0.625rem`,top:`50%`,transform:`translateY(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateY(-50%) scale(1)`},"&[data-active=true]":{transform:`translateY(-50%) scale(1.06)`}}),cueRight:c({right:`0.625rem`,top:`50%`,transform:`translateY(-50%) scale(0.94)`,"&[data-visible=true]":{transform:`translateY(-50%) scale(1)`},"&[data-active=true]":{transform:`translateY(-50%) scale(1.06)`}}),impact:c({position:`absolute`,inset:0,zIndex:4,display:`grid`,placeItems:`center`,pointerEvents:`none`,"&::before":{content:`""`,width:`8rem`,height:`8rem`,border:`2px solid var(--impact-color)`,borderRadius:`9999px`,boxShadow:`0 0 24px color-mix(in srgb, var(--impact-color) 62%, transparent)`}}),impactLabel:c({position:`absolute`,display:`grid`,justifyItems:`center`,gap:`0.125rem`,border:`2px solid var(--impact-color)`,borderRadius:`0.375rem`,background:`var(--crt, #07100b)`,padding:`0.5rem 0.75rem`,fontFamily:`var(--mono-display, var(--font-mono))`,color:`var(--impact-color)`,boxShadow:`4px 4px 0 color-mix(in srgb, var(--impact-color) 36%, transparent)`}),reviewMeta:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.6875rem`,color:`var(--ink-soft, var(--muted-foreground))`}),metaBits:c({display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0.35rem`}),controls:c({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(7rem, 1.5fr) minmax(0, 1fr)`,gap:`0.5rem`}),controlButton:c({display:`inline-flex`,minWidth:0,minHeight:`2.75rem`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,border:`2px solid var(--ink, var(--border))`,borderRadius:`0.5rem`,background:`var(--background)`,padding:`0.5rem 0.625rem`,fontSize:`0.8125rem`,fontWeight:650,color:`var(--foreground)`,transition:`background-color 150ms, color 150ms, transform 120ms, box-shadow 120ms`,_hover:{background:`var(--accent)`},_active:{transform:`translateY(1px)`,boxShadow:`none`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},_disabled:{pointerEvents:`none`,opacity:.38}}),revealButton:c({background:`var(--ink, var(--primary))`,color:`var(--paper, var(--primary-foreground))`,boxShadow:`3px 3px 0 color-mix(in srgb, var(--accent-green, var(--primary)) 72%, transparent)`,_hover:{background:`var(--accent-dim, var(--primary))`,color:`white`}}),ratingPanel:c({display:`grid`,gap:`0.5rem`}),ratingPrompt:c({textAlign:`center`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,fontWeight:650,color:`var(--ink-soft, var(--muted-foreground))`}),ratingGrid:c({display:`grid`,gridTemplateColumns:`repeat(2, minmax(0, 1fr))`,gap:`0.5rem`,sm:{gridTemplateColumns:`repeat(4, minmax(0, 1fr))`}}),keyboardHint:c({textAlign:`center`,fontFamily:`var(--mono-body, var(--font-mono))`,fontSize:`0.625rem`,lineHeight:1.5,color:`var(--ink-soft, var(--muted-foreground))`}),completion:c({position:`relative`,display:`grid`,minHeight:`23rem`,placeItems:`center`,overflow:`hidden`,borderRadius:`0.625rem`,background:`var(--crt, #07100b)`,padding:{base:`1rem`,sm:`2rem`},textAlign:`center`}),completionCard:c({position:`relative`,zIndex:1,display:`grid`,width:`min(100%, 32rem)`,justifyItems:`center`,gap:`0.875rem`,border:`2px solid var(--phosphor, #4be388)`,borderRadius:`0.75rem`,background:`color-mix(in srgb, var(--crt, #07100b) 88%, var(--accent-green, #4be388))`,padding:{base:`1.25rem`,sm:`1.75rem`},color:`var(--phosphor, #4be388)`,boxShadow:`8px 8px 0 color-mix(in srgb, var(--phosphor, #4be388) 25%, transparent)`}),completionIcon:c({display:`grid`,width:`3.5rem`,height:`3.5rem`,placeItems:`center`,border:`2px solid currentColor`,borderRadius:`9999px`}),completionTitle:c({fontFamily:`var(--mono-display, var(--font-mono))`,fontSize:`1.25rem`,fontWeight:700}),completionStats:c({display:`grid`,width:`100%`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,borderBlock:`1px solid color-mix(in srgb, currentColor 38%, transparent)`,paddingBlock:`0.75rem`}),completionStat:c({display:`grid`,gap:`0.125rem`,fontVariantNumeric:`tabular-nums`,"& + &":{borderInlineStart:`1px solid color-mix(in srgb, currentColor 28%, transparent)`}})};function ke(e){typeof window>`u`||window.dispatchEvent(new CustomEvent(`keating:card-reviewed`,{detail:e}))}var Ae={0:{label:`Again`,gesture:`Swipe left`,accent:`var(--red, #d95f4f)`,badgeClass:c({borderColor:`color-mix(in srgb, var(--destructive) 60%, transparent)`,background:`color-mix(in srgb, var(--destructive) 15%, transparent)`,color:`var(--destructive)`}),exitClass:`flashcard-exit-left`},1:{label:`Hard`,gesture:`Swipe down`,accent:`var(--amber, #e8a33d)`,badgeClass:c({borderColor:`rgba(245, 158, 11, 0.6)`,background:`rgba(245, 158, 11, 0.15)`,color:`#b45309`,".dark &":{color:`#fcd34d`}}),exitClass:`flashcard-exit-down`},2:{label:`Good`,gesture:`Swipe right`,accent:`var(--accent-green, #4be388)`,badgeClass:c({borderColor:`rgba(16, 185, 129, 0.6)`,background:`rgba(16, 185, 129, 0.15)`,color:`#047857`,".dark &":{color:`#6ee7b7`}}),exitClass:`flashcard-exit-right`},3:{label:`Easy`,gesture:`Swipe up`,accent:`#67d7e8`,badgeClass:c({borderColor:`rgba(14, 165, 233, 0.6)`,background:`rgba(14, 165, 233, 0.15)`,color:`#0369a1`,".dark &":{color:`#7dd3fc`}}),exitClass:`flashcard-exit-up`}};function I({rating:e,label:t,subLabel:n,intervalDays:r,colorClass:a,disabled:o,onClick:l}){return(0,M.jsxs)(`button`,{type:`button`,onClick:l,disabled:o,"data-rating":e,"aria-label":`${t}: ${n}. Review ${i(r)}.`,className:s(`recall-rating`,c({display:`flex`,flex:1,minHeight:`4.5rem`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,gap:`0.125rem`,borderRadius:`0.5rem`,border:`2px solid`,padding:`0.5rem 0.75rem`,fontSize:`0.75rem`,fontWeight:500,transition:`color 150ms, background-color 150ms, filter 150ms, transform 120ms`,_hover:o?void 0:{filter:`brightness(1.08)`,transform:`translateY(-1px)`},_active:o?void 0:{transform:`translateY(1px)`},_focusVisible:{outline:`3px solid var(--accent-green, var(--ring))`,outlineOffset:`2px`},_disabled:{cursor:`not-allowed`,opacity:.5}}),a),children:[(0,M.jsx)(`span`,{className:c({fontSize:`0.875rem`,fontWeight:700}),children:t}),(0,M.jsx)(`span`,{className:s(`font-terminal`,c({fontSize:`0.625rem`,opacity:.8})),children:i(r)})]})}function L({preset:e}){return e===`solar`?(0,M.jsx)(x,{size:13,"aria-hidden":`true`}):e===`orbit`?(0,M.jsx)(y,{size:13,"aria-hidden":`true`}):e===`prism`?(0,M.jsx)(v,{size:13,"aria-hidden":`true`}):e===`current`?(0,M.jsx)(le,{size:13,"aria-hidden":`true`}):e===`contour`?(0,M.jsx)(C,{size:13,"aria-hidden":`true`}):e===`still`?(0,M.jsx)(b,{size:13,"aria-hidden":`true`}):(0,M.jsx)(S,{size:13,"aria-hidden":`true`})}function je({value:e,onChange:t}){return(0,M.jsxs)(`div`,{className:F.atmosphere,children:[(0,M.jsx)(`span`,{className:F.atmosphereLabel,children:`Arena signal`}),(0,M.jsx)(`div`,{className:F.presetGroup,role:`group`,"aria-label":`Flashcard arena shader`,children:g.map(n=>(0,M.jsxs)(`button`,{type:`button`,"aria-pressed":e===n.id,className:F.presetButton,title:n.description,onClick:()=>t(n.id),children:[(0,M.jsx)(L,{preset:n.id}),(0,M.jsx)(`span`,{children:n.label})]},n.id))})]})}function R({rating:e,positionClass:t,visible:n,active:r}){let i=Ae[e],a=e===0?`←`:e===1?`↓`:e===2?`→`:`↑`;return(0,M.jsxs)(`span`,{"aria-hidden":`true`,"data-visible":n,"data-active":r,className:s(F.cue,t),style:{"--cue-color":i.accent},title:i.gesture,children:[a,` `,i.label]})}function Me(e){return e===`solar`||e===`contour`?`var(--amber, #e8a33d)`:e===`prism`?`var(--red, #d95f4f)`:e===`current`||e===`orbit`?`#67d7e8`:e===`still`?`var(--ink-soft, #6f766c)`:`var(--phosphor, #4be388)`}function Ne(e){return e===`still`?`flashcard-enter`:`flashcard-enter-${e}`}function Pe(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0)/4294967295*97}function z({deck:e,restrictToCardIds:t,onReview:i,onComplete:o,showMeta:l=!0,autoFocusKeyboard:d=!1,defaultShaderPreset:f}){let[p,h]=(0,w.useState)(!1),[g,_]=(0,w.useState)(()=>Te()),[v,y]=(0,w.useState)(0),[b,x]=(0,w.useState)(0),[S,C]=(0,w.useState)(0),[pe,T]=(0,w.useState)(0),[E,he]=(0,w.useState)(0),[ge,_e]=(0,w.useState)(0),[D,O]=(0,w.useState)(null),[Se,k]=(0,w.useState)(!1),[A,N]=(0,w.useState)(()=>De(f)),P=(0,w.useRef)(!1),L=(0,w.useRef)(!1),z=(0,w.useRef)(!1),B=(0,w.useRef)(null),[Ie,Le]=me(),V=Ie.flashcardSoundEnabled,H=(0,w.useMemo)(()=>{let n=t?new Set(t):null;return e.cards.filter(e=>n?n.has(e.id):!0).map(e=>({...e,srs:{...e.srs}}))},[e.cards,t]),[U,Re]=(0,w.useState)(H),[W,ze]=(0,w.useState)(0);(0,w.useEffect)(()=>{Re(H),ze(0),h(!1),y(0),x(0),C(0),T(0),he(0),O(null),L.current=!1,z.current=!1,P.current=!1},[H]),(0,w.useEffect)(()=>{f&&N(u(f))},[f]),(0,w.useEffect)(()=>{d&&B.current?.focus({preventScroll:!0})},[d]);let G=U[W],K=!G,Be=ce({cardKey:`${e.id}:${G?.id??`complete`}:${W}`,revealed:p,disabled:K||!!D,onReveal:()=>{!G||L.current||(j(`flip`,V),h(!0))}}),Ve=(0,w.useMemo)(()=>n({...e,cards:U},Date.now()),[U,e]),He=Math.min(1,S/6+v/Math.max(24,U.length)),Ue=Pe(`${e.id}:${G?.id??`complete`}:${W}`),We=(0,w.useCallback)(e=>{let t=u(e);N(t),Oe(t)},[]),Ge=(0,w.useCallback)(e=>{_(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),Ee(n),n})},[]),q=(0,w.useCallback)(()=>{h(e=>(e||j(`flip`,V),!e))},[V]),J=(0,w.useCallback)(async t=>{if(!G||z.current)return;z.current=!0;let n=a(G.srs,t,Date.now()),r={...G.srs,...n.next},o=xe(S,t),s=m(t,o);Re(e=>e.map((e,t)=>t===W?{...e,srs:r}:e)),y(e=>e+1),n.isLapse&&x(e=>e+1),C(o),T(e=>Math.max(e,o)),he(e=>e+s),o>S&&_e(e=>e+1);let c={cardId:G.id,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease};i?.(c),ke({deckId:e.id,cardId:G.id,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease});try{await we.updateDeckCardSrs(e.id,G.id,r),await we.recordCardReview({deckId:e.id,cardId:G.id,topic:e.topic,slug:e.slug,rating:t,appliedIntervalDays:n.appliedIntervalDays,easeAfter:r.ease,previousIntervalDays:G.srs.intervalDays,isLapse:n.isLapse})}catch{}h(!1),O(null),ze(e=>e+1),L.current=!1,z.current=!1,B.current?.focus({preventScroll:!0})},[G,e.id,e.slug,e.topic,W,i,S]),Y=(0,w.useCallback)((e,t=!1)=>{if(!(!G||L.current)){if(L.current=!0,j(Ce(e),V),ye()){J(e);return}O({rating:e,viaSwipe:t})}},[J,G,V]),{drag:X,handlers:Ke}=ve({enabled:p&&!D,onGrade:e=>Y(e,!0),onTap:q});(0,w.useEffect)(()=>{if(!D)return;let e=window.setTimeout(()=>{J(D.rating)},360);return()=>window.clearTimeout(e)},[J,D]),(0,w.useEffect)(()=>{K&&!P.current&&(P.current=!0,v>0&&j(`complete`,V),o?.({reviewed:v,lapses:b}))},[K,b,o,v,V]);let Z=(0,w.useCallback)(e=>{L.current||(ze(t=>Math.max(0,Math.min(U.length,t+e))),h(!1))},[U.length]),qe=(0,w.useCallback)(e=>{if(!e.target.closest(`button, input, select, textarea, a`)&&!(!G||L.current)){if(e.key===` `||e.key===`Enter`){e.preventDefault(),q();return}if(p&&[`1`,`2`,`3`,`4`].includes(e.key)){e.preventDefault(),Y(Number(e.key)-1);return}if(e.key===`ArrowLeft`){e.preventDefault(),Z(-1);return}e.key===`ArrowRight`&&(e.preventDefault(),Z(1))}},[G,Z,Y,p,q]);if(K)return(0,M.jsx)(`div`,{className:s(F.shell,`activity-game recall-game`),children:(0,M.jsxs)(`div`,{className:s(F.inner,`recall-inner`),children:[(0,M.jsx)(ae,{current:U.length,total:U.length,complete:!0,label:`Flashcard run progress`}),(0,M.jsx)(oe,{detail:v>0?`${v} reviewed${b?` · ${b} to revisit`:` · all recalled`}`:`No cards in this round.`,children:v>0&&b===0?`Clean sweep`:`Round complete`}),v>0?(0,M.jsxs)(`div`,{className:`recall-finish-stats`,children:[(0,M.jsxs)(`span`,{children:[(0,M.jsx)(le,{size:16,"aria-hidden":`true`}),E.toLocaleString(),` points`]}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(ie,{size:16,"aria-hidden":`true`}),pe,` best combo`]})]}):null,v>0?(0,M.jsx)(`p`,{className:c({fontSize:`0.8125rem`,color:`var(--muted-foreground)`}),children:`Your next review is scheduled.`}):null]})});let Q=Fe(G.srs),$=X.previewGrade,Je=D?D.viaSwipe?Ae[D.rating].exitClass:`flashcard-exit-fade`:``,Ye=D?Ae[D.rating]:null,Xe=D?m(D.rating,xe(S,D.rating)):0,Ze={...X.dragging?{transform:`translate(${X.dx}px, ${X.dy}px) rotate(${X.dx*.04}deg)${p?` rotateY(180deg)`:``}`}:{},touchAction:p?`none`:`pan-y`},Qe={"--arena-accent":Me(A)};return(0,M.jsx)(`div`,{ref:B,tabIndex:0,role:`group`,"aria-label":`Flashcard recall run: ${e.title}`,onKeyDown:qe,onFocus:()=>k(!0),onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||k(!1)},className:s(F.shell,`activity-game recall-game`),children:(0,M.jsxs)(`div`,{className:s(F.inner,`recall-inner`),children:[l?(0,M.jsx)(M.Fragment,{children:(0,M.jsxs)(`header`,{className:F.header,children:[(0,M.jsxs)(`div`,{className:F.titleGroup,children:[(0,M.jsx)(`h3`,{className:s(F.title,`recall-title`),children:e.title}),(0,M.jsx)(`p`,{className:F.deckLine,children:Ve.dueNow>0?`${Ve.dueNow} ready to recall`:`Recall round`})]}),(0,M.jsxs)(`div`,{className:F.headerActions,children:[S>=2?(0,M.jsxs)(`span`,{className:s(`flashcard-streak-pop`,be(S)?`flashcard-milestone-pulse`:``,c({display:`inline-flex`,minHeight:`2.25rem`,alignItems:`center`,gap:`0.3rem`,border:`1px solid color-mix(in srgb, var(--amber) 62%, transparent)`,borderRadius:`9999px`,background:`color-mix(in srgb, var(--amber) 12%, var(--background))`,paddingInline:`0.625rem`,fontSize:`0.6875rem`,fontWeight:700,color:`color-mix(in srgb, var(--amber) 72%, var(--ink))`})),title:`${S} consecutive Good or Easy recalls`,children:[(0,M.jsx)(ie,{size:13}),` `,S,` combo`]},ge):null,(0,M.jsx)(`button`,{type:`button`,onClick:()=>Le({flashcardSoundEnabled:!V}),className:F.iconButton,"aria-label":V?`Mute flashcard sounds`:`Enable flashcard sounds`,title:V?`Sounds on`:`Sounds off`,children:V?(0,M.jsx)(ue,{size:16}):(0,M.jsx)(fe,{size:16})})]})]})}):null,(0,M.jsxs)(`div`,{className:`recall-progress`,children:[(0,M.jsx)(ae,{current:W,total:U.length,label:`Flashcard run progress`}),E>0?(0,M.jsxs)(`span`,{className:`recall-score`,"aria-live":`polite`,children:[(0,M.jsx)(le,{size:14,"aria-hidden":`true`}),E.toLocaleString(),` points`]},E):null]}),(0,M.jsx)(de,{timer:Be,disabled:!!D}),(0,M.jsx)(`span`,{className:`activity-sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:p?`Answer: ${G.back}`:``}),(0,M.jsxs)(`div`,{className:s(F.arena,`flashcard-arena recall-arena`),"data-shader-preset":A,"data-streak-tier":S>=5?`high`:S>=2?`warm`:`idle`,style:Qe,children:[(0,M.jsx)(ne,{preset:A,energy:He,seed:Ue},`${A}:${G.id}`),(0,M.jsx)(R,{rating:3,positionClass:F.cueTop,visible:p&&!D&&X.dragging,active:$===3}),(0,M.jsx)(R,{rating:1,positionClass:F.cueBottom,visible:p&&!D&&X.dragging,active:$===1}),(0,M.jsx)(R,{rating:0,positionClass:F.cueLeft,visible:p&&!D&&X.dragging,active:$===0}),(0,M.jsx)(R,{rating:2,positionClass:F.cueRight,visible:p&&!D&&X.dragging,active:$===2}),(0,M.jsx)(`div`,{className:s(F.cardStack,`recall-stack`),style:Qe,children:(0,M.jsxs)(`div`,{...Ke,role:`button`,tabIndex:0,"aria-label":p?`Answer: ${G.back}. Show prompt`:`Recall: ${G.front}. Reveal answer`,"aria-pressed":p,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),q())},style:Ze,className:s(`flashcard-3d`,p?`flashcard-flipped`:``,X.dragging?`flashcard-dragging`:``,Je||Ne(A),c({cursor:`pointer`,userSelect:`none`})),onAnimationEnd:e=>{D&&e.animationName.startsWith(`flashcard-exit`)&&J(D.rating)},children:[(0,M.jsxs)(`div`,{"aria-hidden":p,className:s(`flashcard-face`,F.face,`recall-face`),children:[(0,M.jsxs)(`div`,{className:s(F.faceLabel,`recall-face-label`),children:[(0,M.jsx)(`span`,{children:`Recall`}),(0,M.jsxs)(`span`,{children:[W+1,`/`,U.length]})]}),(0,M.jsx)(`div`,{className:s(F.cardCopy,`recall-copy`),children:G.front}),(0,M.jsxs)(`div`,{children:[G.tags?.length?(0,M.jsx)(`div`,{className:F.tags,children:G.tags.slice(0,4).map(e=>(0,M.jsx)(`span`,{className:F.tag,children:e},e))}):null,(0,M.jsx)(`p`,{className:s(F.faceHint,`recall-face-hint`),children:`Tap to reveal`})]})]}),(0,M.jsxs)(`div`,{"aria-hidden":!p,className:s(`flashcard-face`,`flashcard-face-back`,F.face,F.backFace,`recall-face`),children:[(0,M.jsxs)(`div`,{className:s(F.faceLabel,`recall-face-label`),children:[(0,M.jsx)(`span`,{children:`Answer`}),(0,M.jsx)(`span`,{children:`How did you do?`})]}),(0,M.jsx)(`div`,{className:s(F.cardCopy,`recall-copy`),children:G.back}),(0,M.jsxs)(`div`,{children:[G.tags?.length?(0,M.jsx)(`div`,{className:F.tags,children:G.tags.slice(0,4).map(e=>(0,M.jsx)(`span`,{className:F.tag,children:e},e))}):null,(0,M.jsx)(`p`,{className:s(F.faceHint,`recall-face-hint`),children:`Swipe or choose your recall below`})]})]})]},G.id)}),Ye?(0,M.jsx)(`div`,{className:s(F.impact,`flashcard-grade-impact`),style:{"--impact-color":Ye.accent},children:(0,M.jsxs)(`span`,{className:s(F.impactLabel,`flashcard-grade-impact-label`),children:[(0,M.jsx)(`strong`,{children:Ye.label}),(0,M.jsx)(`small`,{children:Xe>0?`+${Xe}`:`We’ll revisit it`})]})}):null]}),p?(0,M.jsxs)(`div`,{className:F.ratingPanel,children:[(0,M.jsx)(`p`,{className:F.ratingPrompt,children:`How well did you remember?`}),(0,M.jsxs)(`div`,{className:s(F.ratingGrid,`recall-rating-grid`),children:[(0,M.jsx)(I,{rating:0,label:`Again`,subLabel:`Missed`,intervalDays:Q.again,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--destructive) 52%, transparent)`,background:`color-mix(in srgb, var(--destructive) 10%, transparent)`,color:`var(--destructive)`,_hover:{background:`color-mix(in srgb, var(--destructive) 18%, transparent)`}}),onClick:()=>Y(0)}),(0,M.jsx)(I,{rating:1,label:`Hard`,subLabel:`Strained`,intervalDays:Q.hard,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--amber) 55%, transparent)`,background:`color-mix(in srgb, var(--amber) 10%, transparent)`,color:`color-mix(in srgb, var(--amber) 72%, var(--ink))`,_hover:{background:`color-mix(in srgb, var(--amber) 18%, transparent)`}}),onClick:()=>Y(1)}),(0,M.jsx)(I,{rating:2,label:`Good`,subLabel:`Recalled`,intervalDays:Q.good,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, var(--accent-green) 52%, transparent)`,background:`color-mix(in srgb, var(--accent-green) 10%, transparent)`,color:`var(--accent-dim)`,_hover:{background:`color-mix(in srgb, var(--accent-green) 18%, transparent)`}}),onClick:()=>Y(2)}),(0,M.jsx)(I,{rating:3,label:`Easy`,subLabel:`Instant`,intervalDays:Q.easy,disabled:!!D,colorClass:c({borderColor:`color-mix(in srgb, #67d7e8 58%, transparent)`,background:`color-mix(in srgb, #67d7e8 10%, transparent)`,color:`color-mix(in srgb, #67d7e8 64%, var(--ink))`,_hover:{background:`color-mix(in srgb, #67d7e8 18%, transparent)`}}),onClick:()=>Y(3)})]})]}):(0,M.jsxs)(`div`,{className:F.controls,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>Z(-1),disabled:W===0,className:s(F.controlButton,`activity-back-action`),children:[(0,M.jsx)(te,{size:15}),` Back`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:q,className:s(F.controlButton,F.revealButton,`activity-main-action recall-reveal`),children:[(0,M.jsx)(se,{size:16}),` Reveal answer`]}),(0,M.jsxs)(`button`,{type:`button`,onClick:()=>Z(1),disabled:W>=U.length-1,className:s(F.controlButton,`activity-back-action`),children:[`Skip `,(0,M.jsx)(re,{size:15})]})]}),(0,M.jsxs)(`details`,{className:`activity-review recall-details`,children:[(0,M.jsx)(`summary`,{children:`Card details & appearance`}),(0,M.jsxs)(`div`,{className:F.reviewMeta,children:[(0,M.jsxs)(`div`,{className:F.metaBits,children:[(0,M.jsxs)(`span`,{children:[`Reps `,G.srs.reps]}),(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{children:[`Ease `,G.srs.ease.toFixed(2)]}),G.srs.lapses>0?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{className:c({color:`var(--destructive)`}),children:[`Lapses `,G.srs.lapses]})]}):null,G.srs.dueAt>0&&G.srs.reps>0?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,M.jsxs)(`span`,{children:[`Next `,r(G.srs.dueAt)]})]}):null]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>Ge(G.id),className:F.iconButton,"aria-label":g.has(G.id)?`Remove bookmark`:`Bookmark card`,title:g.has(G.id)?`Bookmarked`:`Bookmark for review`,children:(0,M.jsx)(ee,{size:16,fill:g.has(G.id)?`currentColor`:`none`})})]}),(0,M.jsx)(je,{value:A,onChange:We})]}),Se?(0,M.jsx)(`p`,{className:F.keyboardHint,children:`Space to flip · 1–4 to rate · ← → to navigate`}):null]})})}z.displayName=`FlashcardRenderer`;function Fe(e){return{again:a(e,0,Date.now()).appliedIntervalDays,hard:a(e,1,Date.now()).appliedIntervalDays,good:a(e,2,Date.now()).appliedIntervalDays,easy:a(e,3,Date.now()).appliedIntervalDays}}function B({deck:e,now:t=Date.now(),onStart:r}){let i=n(e,t);return(0,M.jsxs)(`div`,{className:c({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,background:`color-mix(in srgb, var(--muted) 20%, transparent)`,padding:`0.75rem`}),children:[(0,M.jsxs)(`div`,{className:c({minWidth:0}),children:[(0,M.jsxs)(`div`,{className:c({display:`flex`,alignItems:`center`,gap:`0.5rem`}),children:[(0,M.jsx)(C,{size:14,className:c({flexShrink:0,color:`#f59e0b`})}),(0,M.jsx)(`p`,{className:c({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.875rem`,fontWeight:500}),children:e.title})]}),(0,M.jsxs)(`p`,{className:s(`font-terminal`,c({marginTop:`0.125rem`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`})),children:[i.total,` cards // `,i.dueNow,` due // `,i.mature,` mature`]})]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>r?.(e),disabled:i.dueNow===0,className:c({display:`inline-flex`,flexShrink:0,alignItems:`center`,gap:`0.25rem`,borderRadius:`0.375rem`,border:`2px solid var(--primary)`,background:`var(--primary)`,padding:`0.375rem 0.75rem`,fontSize:`0.75rem`,fontWeight:500,color:`var(--primary-foreground)`,transition:`color 150ms, background-color 150ms`,_hover:{background:`color-mix(in srgb, var(--primary) 90%, black)`},_disabled:{pointerEvents:`none`,opacity:.4}}),children:i.dueNow===0?`All caught up`:`Review ${i.dueNow}`})]})}B.displayName=`DeckSummary`;export{me as n,T as r,z as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{M as n,N as r,wt as i}from"./index-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{M as n,N as r,wt as i}from"./index-DCgpDQKf.js";import{t as a}from"./createLucideIcon-C_7xXnHN.js";var o=a(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),s=a(`bookmark`,[[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}]]),c=a(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),l=e(t(),1);function u(e,t=!1){let[n,r]=(0,l.useState)(()=>typeof window>`u`||typeof window.matchMedia!=`function`?t:window.matchMedia(e).matches);return(0,l.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let t=window.matchMedia(e);r(t.matches);let n=e=>r(e.matches);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)},[e]),n}var d=`(prefers-reduced-motion: reduce)`;function f(e=!1){return u(d,e)}var p=i(),m=`
|
|
2
2
|
attribute vec2 aPosition;
|
|
3
3
|
|
|
4
4
|
void main() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{wt as n}from"./index-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{wt as n}from"./index-DCgpDQKf.js";import{t as r}from"./createLucideIcon-C_7xXnHN.js";import{t as i}from"./check-BQLdkQGc.js";import{c as a,t as o}from"./Select-BYfJxqbI.js";import{t as s}from"./x-dksMGet2.js";var c=r(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),l=r(`lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),u=r(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),d=r(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]),f=r(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),p=r(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),m=n();function h({label:e,index:t,selected:n,disabled:r,status:a,multiple:o,onClick:c}){return(0,m.jsxs)(`button`,{type:`button`,className:`activity-answer`,"data-state":a&&a!==`neutral`?a:n?`selected`:`idle`,disabled:r,"aria-pressed":n,onClick:c,children:[(0,m.jsx)(`span`,{className:`activity-answer-key`,"aria-hidden":`true`,"data-multiple":o||void 0,children:a===`correct`||n&&a!==`wrong`?(0,m.jsx)(i,{className:`activity-answer-check`,size:18,strokeWidth:2.5}):a===`wrong`?(0,m.jsx)(s,{size:18}):t===void 0?`·`:String.fromCharCode(65+t)}),(0,m.jsx)(`span`,{className:`activity-answer-copy`,children:e}),a===`correct`||a===`wrong`?(0,m.jsx)(`span`,{className:`activity-sr-only`,children:a===`correct`?`Correct answer`:`Incorrect answer`}):null]})}function g({current:e,total:t,resolved:n,label:r=`Round progress`,complete:i=!1}){let a=Math.max(0,Math.floor(t)),o=Math.min(a,Math.max(0,e)),s=i?a:Math.min(a,Math.max(0,n??o));return(0,m.jsxs)(`div`,{className:`activity-progress-row`,children:[(0,m.jsx)(`div`,{className:`activity-progress`,role:`progressbar`,"aria-label":r,"aria-valuemin":0,"aria-valuemax":a||1,"aria-valuenow":s,children:a<=20?Array.from({length:a},(e,t)=>(0,m.jsx)(`span`,{"data-filled":t<s,children:(0,m.jsx)(`i`,{})},t)):(0,m.jsx)(`span`,{className:`activity-progress-continuous`,style:{transform:`scaleX(${s/a})`}})}),(0,m.jsx)(`span`,{className:`activity-progress-count`,children:i?`Complete`:`${Math.min(o+1,a)} / ${a}`},`${o}:${s}:${i}`)]})}function _({children:e,detail:t}){return(0,m.jsxs)(`div`,{className:`activity-completion`,role:`status`,children:[(0,m.jsx)(`span`,{className:`activity-completion-symbol`,"aria-hidden":`true`,children:(0,m.jsx)(i,{size:27,strokeWidth:2.5})}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`strong`,{children:e}),t?(0,m.jsx)(`p`,{children:t}):null]})]})}var v=e(t(),1),y=[0,5,10,15,30];function b(e,t){return{remainingMs:e*1e3,sampledAt:t,running:!1,done:e===0}}function x(e,t,n){if(e.done)return{clock:{...e,sampledAt:t,running:!1},reveal:!1};let r=e.running?Math.max(0,t-e.sampledAt):0,i=Math.max(0,e.remainingMs-r),a=n&&i===0;return{clock:{remainingMs:i,sampledAt:t,running:n&&!a,done:a},reveal:a}}function S({cardKey:e,revealed:t,disabled:n=!1,onReveal:r}){let[i,a]=(0,v.useState)(0),[o,s]=(0,v.useState)(!1),[c,l]=(0,v.useState)(()=>typeof document<`u`&&document.hidden),[u,d]=(0,v.useState)({key:e,delay:0,remaining:null}),f=(0,v.useRef)(r),p=(0,v.useRef)({cardKey:e,delay:i,revealed:t,disabled:n,manualPaused:o}),m=(0,v.useRef)(null);f.current=r,p.current={cardKey:e,delay:i,revealed:t,disabled:n,manualPaused:o};let h=(0,v.useCallback)(e=>{y.includes(e)&&(p.current.delay=e,p.current.manualPaused=!1,s(!1),a(e))},[]),g=(0,v.useCallback)(()=>{let e=!p.current.manualPaused;p.current.manualPaused=e,s(e)},[]);return(0,v.useEffect)(()=>{let t={key:e,delay:i,clock:b(i,performance.now())};return m.current=t,d({key:e,delay:i,remaining:i||null}),()=>{m.current===t&&(m.current=null)}},[e,i]),(0,v.useEffect)(()=>{let r=m.current;if(!r||!i)return;let a,s=!1,c=()=>{a!==void 0&&clearInterval(a),a=void 0},u=()=>{let t=p.current;if(s||m.current!==r||t.cardKey!==r.key||t.delay!==r.delay)return;t.revealed&&(r.clock={...r.clock,done:!0,running:!1});let n=!t.revealed&&!t.disabled&&!t.manualPaused&&!document.hidden,a=x(r.clock,performance.now(),n);r.clock=a.clock;let o=r.clock.done?null:r.clock.remainingMs/1e3;d(t=>t.key===e&&t.delay===i&&t.remaining===o?t:{key:e,delay:i,remaining:o}),(r.clock.done||!n)&&c(),a.reveal&&f.current()},h=()=>{l(document.hidden),u()};return document.addEventListener(`visibilitychange`,h),u(),!r.clock.done&&!t&&!n&&!o&&!document.hidden&&(a=setInterval(u,100)),()=>{s=!0,c(),document.removeEventListener(`visibilitychange`,h),r.clock=x(r.clock,performance.now(),!1).clock}},[e,i,t,n,o,c]),{delay:i,setDelay:h,remaining:!i||t?null:u.key===e&&u.delay===i?u.remaining:i,paused:o||c,togglePause:g}}function C({timer:e,disabled:t=!1}){let n=(0,v.useId)(),r=e.delay>0&&e.remaining!==null,i=Math.ceil(e.remaining??0);return(0,m.jsxs)(`div`,{className:`flashcard-timer`,children:[(0,m.jsxs)(`label`,{className:`flashcard-timer-setting`,children:[(0,m.jsx)(d,{size:15,"aria-hidden":`true`}),(0,m.jsx)(`span`,{children:`Reveal`}),(0,m.jsx)(o,{"aria-label":`Auto-reveal answer`,"aria-describedby":n,disabled:t,value:e.delay,onValueChange:t=>e.setDelay(Number(t)),children:y.map(e=>(0,m.jsx)(`option`,{value:e,children:e?`${e}s`:`Off`},e))})]}),(0,m.jsx)(`span`,{id:n,className:`flashcard-timer-sr`,children:`Reveals the answer only. You choose the recall rating. Pauses when this tab is hidden.`}),r?(0,m.jsxs)(`div`,{className:`flashcard-timer-countdown`,"data-paused":e.paused||t,children:[(0,m.jsx)(`span`,{className:`flashcard-timer-track`,"aria-hidden":`true`,children:(0,m.jsx)(`span`,{style:{transform:`scaleX(${Math.max(0,Math.min(1,(e.remaining??0)/e.delay))})`}})}),(0,m.jsxs)(`span`,{role:`timer`,"aria-live":`off`,"aria-label":`${i} seconds until answer reveal${e.paused||t?`, paused`:``}`,className:`flashcard-timer-seconds`,children:[i,`s`]}),(0,m.jsxs)(`button`,{type:`button`,disabled:t,"aria-label":e.paused?`Resume reveal timer`:`Pause reveal timer`,onClick:e.togglePause,children:[e.paused?(0,m.jsx)(a,{size:14,"aria-hidden":`true`}):(0,m.jsx)(u,{size:14,"aria-hidden":`true`}),(0,m.jsx)(`span`,{children:e.paused?`Resume`:`Pause`})]})]}):null]})}export{g as a,u as c,_ as i,l,S as n,p as o,h as r,f as s,C as t,c as u};
|
package/web/.output/public/assets/{HyperframesPlayer-BQFYx43N.js → HyperframesPlayer-DEtdwGBR.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{M as n,N as r,wt as i}from"./index-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{M as n,N as r,wt as i}from"./index-DCgpDQKf.js";import{Y as a}from"./shared-renderer-hMxAoPZb.js";import{t as o}from"./createLucideIcon-C_7xXnHN.js";import{t as s}from"./circle-alert-D3ZnhkzN.js";import{r as c}from"./FlashcardShaderField-JGgL2kgp.js";import{t as l}from"./triangle-alert-cr9L64pJ.js";import{t as u}from"./arrow-right-C8ipxfSs.js";import{d}from"./MarkdownBlock-C89ecD-M.js";import{t as f}from"./book-open-Cii8hRKD.js";import{t as p}from"./chevron-right-CtU0hmKY.js";import{c as m,l as h,s as g}from"./FlashcardTimer-vPNL9_0N.js";import{c as _}from"./Select-BYfJxqbI.js";var v=o(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),y=o(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),b=o(`library-big`,[[`rect`,{width:`8`,height:`18`,x:`3`,y:`3`,rx:`1`,key:`oynpb5`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z`,key:`1qboyk`}]]),x=o(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),S=o(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),C=o(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),w=e(t(),1),T=i();function E(e){let t=e.trim().replace(/s$/i,``),n=t.match(/^(\d+(?:\.\d+)?)\s*-\s*(\d+(?:\.\d+)?)$/);if(n)return Math.max(0,Number(n[2])-Number(n[1]));let r=Number(t);return Number.isFinite(r)?Math.max(0,r):0}function D(e){let t=e.split(`
|
|
2
2
|
`),n=[],r=``,i={};for(let e of t){let t=e.match(/^# Animation Storyboard: (.+)$/);if(t){r=t[1];continue}let a=e.match(/^## Scene (\d+): (.+) \((.+)\)$/);if(a){i.title&&n.push(i);let[,e,t,r]=a;i={number:parseInt(e,10),title:t,duration:r};continue}let o=e.match(/^- \*\*Visual\*\*: (.+)$/);o&&(i.visual=o[1]);let s=e.match(/^- \*\*Audio\*\*: (.+)$/);s&&(i.audio=s[1]);let c=e.match(/^- \*\*Narration\*\*: (.+)$/);c&&(i.audio=c[1]);let l=e.match(/^- \*\*Transition\*\*: (.+)$/);l&&(i.transition=l[1]);let u=e.match(/^- \*\*Duration\*\*: (\d+)s$/);u&&(i.duration=`${u[1]}s`);let d=e.match(/^- \*\*Highlight\*\*: (.+)$/);d&&(i.highlight=d[1]);let f=e.match(/^- \*\*Overlay\*\*: (.+)$/);f&&(i.highlight=f[1]);let p=e.match(/^- \*\*Step-through\*\*: (.+)$/);p&&(i.highlight=p[1])}i.title&&n.push(i);let a=n.reduce((e,t)=>e+E(t.duration),0);return{title:r,scenes:n,totalDuration:a}}function O({title:e}){let t=e.toLowerCase();return t.includes(`intro`)||t.includes(`title`)?(0,T.jsx)(f,{size:18}):t.includes(`intuition`)?(0,T.jsx)(h,{size:18}):t.includes(`miscon`)?(0,T.jsx)(l,{size:18}):t.includes(`transfer`)?(0,T.jsx)(u,{size:18}):t.includes(`example`)?(0,T.jsx)(y,{size:18}):t.includes(`formal`)?(0,T.jsx)(f,{size:18}):(0,T.jsx)(y,{size:18})}function k({scene:e,isActive:t,progress:i}){return(0,T.jsxs)(`div`,{className:r({borderRadius:`0.5rem`,border:`2px solid`,borderColor:t?`var(--primary)`:`var(--border)`,background:t?`color-mix(in srgb, var(--primary) 5%, transparent)`:`color-mix(in srgb, var(--muted) 20%, transparent)`,padding:`1rem`,opacity:t?1:.9,boxShadow:t?`var(--shadow-sm)`:void 0,transition:`all 150ms`}),children:[(0,T.jsxs)(`div`,{className:r({marginBottom:`0.75rem`,display:`flex`,alignItems:`center`,gap:`0.75rem`}),children:[(0,T.jsx)(`div`,{className:r({display:`flex`,height:`2rem`,width:`2rem`,flexShrink:0,alignItems:`center`,justifyContent:`center`,borderRadius:`9999px`,background:t?`var(--primary)`:`var(--muted)`,color:t?`var(--primary-foreground)`:`var(--muted-foreground)`}),children:(0,T.jsx)(O,{title:e.title})}),(0,T.jsxs)(`div`,{className:r({minWidth:0,flex:1}),children:[(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,justifyContent:`space-between`}),children:[(0,T.jsx)(`span`,{className:r({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.875rem`,fontWeight:600}),children:e.title}),(0,T.jsxs)(`span`,{className:n(`font-terminal`,r({display:`flex`,alignItems:`center`,gap:`0.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`})),children:[(0,T.jsx)(a,{size:12}),e.duration]})]}),t&&(0,T.jsx)(`div`,{className:r({marginTop:`0.25rem`,height:`0.25rem`,width:`100%`,overflow:`hidden`,borderRadius:`9999px`,background:`var(--muted)`}),children:(0,T.jsx)(`div`,{className:r({height:`100%`,borderRadius:`9999px`,background:`var(--primary)`,transition:`all 150ms`}),style:{width:`${i}%`}})})]})]}),e.visual&&(0,T.jsx)(`div`,{className:r({marginBottom:`0.5rem`,borderRadius:`0.375rem`,background:`color-mix(in srgb, var(--muted) 50%, transparent)`,padding:`0.75rem`}),children:(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`flex-start`,gap:`0.5rem`}),children:[(0,T.jsx)(y,{size:14,className:r({marginTop:`0.125rem`,flexShrink:0,color:`var(--muted-foreground)`})}),(0,T.jsx)(`p`,{className:r({fontSize:`0.75rem`,lineHeight:`1.25rem`}),children:e.visual})]})}),(0,T.jsxs)(`div`,{className:r({display:`flex`,flexWrap:`wrap`,columnGap:`1rem`,rowGap:`0.25rem`}),children:[e.audio&&(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,gap:`0.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:[(0,T.jsx)(g,{size:12}),(0,T.jsx)(`span`,{className:r({maxWidth:`240px`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`}),children:e.audio})]}),e.transition&&(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,gap:`0.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:[(0,T.jsx)(u,{size:12}),(0,T.jsx)(`span`,{children:e.transition})]}),e.highlight&&(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,gap:`0.25rem`,fontSize:`0.75rem`,color:`var(--accent)`}),children:[(0,T.jsx)(h,{size:12}),(0,T.jsx)(`span`,{className:r({maxWidth:`200px`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`}),children:e.highlight})]})]})]})}function A({storyboard:e}){let{title:t,scenes:i,totalDuration:a}=(0,w.useMemo)(()=>D(e),[e]),[o,s]=(0,w.useState)(0);if(!i.length)return null;let l=i[o];return(0,T.jsxs)(`div`,{className:r({marginBlock:`0.75rem`,borderRadius:`0.75rem`,border:`2px solid var(--border)`,background:`var(--background)`,padding:{base:`1rem`,sm:`1.25rem`},boxShadow:`var(--shadow-sm)`,"& > * + *":{marginTop:`1rem`}}),children:[(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`}),children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h3`,{className:r({fontSize:`1rem`,fontWeight:700}),children:t||`Animation Storyboard`}),(0,T.jsxs)(`p`,{className:n(`font-terminal`,r({fontSize:`0.75rem`,color:`var(--muted-foreground)`})),children:[i.length,` SCENES // `,a,`s TOTAL`]})]}),(0,T.jsxs)(`div`,{className:r({display:`flex`,alignItems:`center`,gap:`0.25rem`}),children:[(0,T.jsx)(`button`,{onClick:()=>s(e=>Math.max(0,e-1)),disabled:o===0,className:r({display:`inline-flex`,height:`2rem`,width:`2rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`0.375rem`,border:`1px solid var(--border)`,color:`var(--muted-foreground)`,transition:`color 150ms, background-color 150ms`,_hover:{background:`var(--accent)`},_disabled:{opacity:.3}}),children:(0,T.jsx)(c,{size:16})}),(0,T.jsxs)(`span`,{className:n(`font-terminal`,r({minWidth:`3rem`,textAlign:`center`,fontSize:`0.75rem`})),children:[o+1,`/`,i.length]}),(0,T.jsx)(`button`,{onClick:()=>s(e=>Math.min(i.length-1,e+1)),disabled:o===i.length-1,className:r({display:`inline-flex`,height:`2rem`,width:`2rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`0.375rem`,border:`1px solid var(--border)`,color:`var(--muted-foreground)`,transition:`color 150ms, background-color 150ms`,_hover:{background:`var(--accent)`},_disabled:{opacity:.3}}),children:(0,T.jsx)(p,{size:16})})]})]}),(0,T.jsx)(k,{scene:l,isActive:!0,progress:60}),(0,T.jsx)(`div`,{className:r({"& > * + *":{marginTop:`0.5rem`}}),children:i.map((e,t)=>(0,T.jsxs)(`button`,{onClick:()=>s(t),className:r({display:`flex`,width:`100%`,alignItems:`center`,gap:`0.75rem`,borderRadius:`0.375rem`,border:`1px solid`,borderColor:t===o?`color-mix(in srgb, var(--primary) 30%, transparent)`:`transparent`,background:t===o?`color-mix(in srgb, var(--primary) 10%, transparent)`:`color-mix(in srgb, var(--muted) 30%, transparent)`,padding:`0.5rem 0.75rem`,textAlign:`left`,transition:`all 150ms`,_hover:t===o?void 0:{background:`color-mix(in srgb, var(--muted) 50%, transparent)`}}),children:[(0,T.jsx)(`div`,{className:r({display:`flex`,height:`1.5rem`,width:`1.5rem`,flexShrink:0,alignItems:`center`,justifyContent:`center`,borderRadius:`9999px`,background:`var(--muted)`,fontSize:`0.625rem`,fontWeight:700,color:`var(--muted-foreground)`}),children:e.number}),(0,T.jsx)(`span`,{className:r({flex:1,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.75rem`,fontWeight:500}),children:e.title}),(0,T.jsx)(`span`,{className:n(`font-terminal`,r({fontSize:`0.625rem`,color:`var(--muted-foreground)`})),children:e.duration})]},e.number))})]})}var j=String.raw`
|
|
3
3
|
(function () {
|
|
4
4
|
"use strict";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{t as n}from"./Nav-DQ-5KEsA.js";import{Kt as r,M as i,N as a,Ur as o,Ut as s,Wt as c,ei as l,ni as u,nn as d,wt as f}from"./index-DCgpDQKf.js";import{t as p}from"./createLucideIcon-C_7xXnHN.js";import{t as m}from"./activity-DdJDHeam.js";import{t as h}from"./book-open-check-vvzSWP24.js";import{t as ee}from"./clipboard-list-CRJvmiKL.js";import{t as te}from"./download-Cu2Egmxp.js";import{t as g}from"./file-text-CANyHShy.js";import{t as _}from"./info-CGMF4Cdc.js";import{n as v}from"./browser-download-DzX_pBaq.js";import{r as ne}from"./shared-sessions-CwS3OLWR.js";import{t as y}from"./useSeo-fXJau5mP.js";import{n as b,t as x}from"./LearningInsightsHeader-DWj2-1xb.js";var S=p(`chart-column`,[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`M18 17V9`,key:`2bz60n`}],[`path`,{d:`M13 17V5`,key:`1frdt8`}],[`path`,{d:`M8 17v-3`,key:`17ska0`}]]),C=p(`chart-line`,[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`m19 9-5 5-4-4-3 3`,key:`2osh9i`}]]),w=p(`cloud-upload`,[[`path`,{d:`M12 13v8`,key:`1l5pq0`}],[`path`,{d:`M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`,key:`1pljnt`}],[`path`,{d:`m8 17 4-4 4 4`,key:`1quai1`}]]),T=p(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),E=p(`medal`,[[`path`,{d:`M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15`,key:`143lza`}],[`path`,{d:`M11 12 5.12 2.2`,key:`qhuxz6`}],[`path`,{d:`m13 12 5.88-9.8`,key:`hbye0f`}],[`path`,{d:`M8 7h8`,key:`i86dvs`}],[`circle`,{cx:`12`,cy:`17`,r:`5`,key:`qbz8iq`}],[`path`,{d:`M12 18v-2h-.5`,key:`fawc4q`}]]),D=p(`scale`,[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`m19 8 3 8a5 5 0 0 1-6 0zV7`,key:`zcdpyk`}],[`path`,{d:`M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1`,key:`1yorad`}],[`path`,{d:`m5 8 3 8a5 5 0 0 1-6 0zV7`,key:`eua70x`}],[`path`,{d:`M7 21h10`,key:`1b0cd5`}]]),O=e(t(),1),k=f(),A=null,j={sparse:5,provisional:20,rankable:50,stable:100},M={page:a({minH:`100vh`,bg:`var(--paper)`,color:`var(--ink)`}),min0:a({minW:0}),main:a({mx:`auto`,maxW:`72rem`,px:`1rem`,py:`1.5rem`}),button:a({display:`inline-flex`,h:`2.25rem`,w:`100%`,alignItems:`center`,justifyContent:`center`,gap:`0.5rem`,border:`1px solid var(--ink)`,bg:`var(--card)`,px:`0.75rem`,fontSize:`0.875rem`,sm:{w:`auto`},_hover:{bg:`var(--accent)`,color:`var(--accent-foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),sourceTabs:a({display:`grid`,w:`100%`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,overflow:`hidden`,border:`1px solid var(--ink)`,sm:{display:`inline-flex`,w:`auto`}}),sourceButton:a({minW:0,h:`2.25rem`,px:`0.25rem`,fontSize:`0.75rem`,sm:{px:`0.75rem`,fontSize:`0.875rem`}}),sourceCompactLabel:a({sm:{display:`none`}}),sourceWideLabel:a({display:`none`,sm:{display:`inline`}}),sourceActive:a({bg:`var(--ink)`,color:`var(--paper)`}),sourceInactive:a({bg:`var(--card)`,_hover:{bg:`var(--accent)`,color:`var(--accent-foreground)`}}),metricGrid:a({display:`grid`,gap:`0.75rem`,sm:{gridTemplateColumns:`repeat(2, minmax(0, 1fr))`},xl:{gridTemplateColumns:`repeat(4, minmax(0, 1fr))`}}),truncate:a({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`}),shrink0:a({flexShrink:0}),readinessBase:a({display:`inline-flex`,borderRadius:`0.375rem`,border:`1px solid`,px:`0.5rem`,py:`0.25rem`,fontSize:`11px`,fontWeight:`500`}),readinessGood:a({borderColor:`color-mix(in srgb, #059669 70%, transparent)`,bg:`color-mix(in srgb, #22c55e 10%, transparent)`,color:`#047857`}),readinessProvisional:a({borderColor:`color-mix(in srgb, #0284c7 70%, transparent)`,bg:`color-mix(in srgb, #0ea5e9 10%, transparent)`,color:`#0369a1`}),readinessSparse:a({borderColor:`color-mix(in srgb, #d97706 70%, transparent)`,bg:`color-mix(in srgb, #f59e0b 10%, transparent)`,color:`#b45309`}),readinessWaiting:a({borderColor:`color-mix(in srgb, var(--muted-foreground) 30%, transparent)`,bg:`var(--muted)`,color:`var(--muted-foreground)`}),pill:a({borderRadius:`0.375rem`,border:`1px solid var(--border)`,bg:`var(--muted)`,px:`0.5rem`,py:`0.25rem`,fontSize:`11px`,color:`var(--muted-foreground)`}),block:a({minW:0,border:`1px solid var(--border)`,bg:`var(--card)`,p:`1rem`}),blockHead:a({mb:`0.75rem`,display:`flex`,alignItems:`center`,gap:`0.5rem`}),mutedIcon:a({color:`var(--muted-foreground)`}),blockTitle:a({fontSize:`0.875rem`,fontWeight:`600`}),bodyText:a({"& > * + *":{mt:`0.5rem`},fontSize:`0.75rem`,lineHeight:`1.25rem`,color:`var(--muted-foreground)`}),definitionRow:a({display:`grid`,gap:`0.25rem`,borderRadius:`0.375rem`,bg:`var(--muted)`,p:`0.75rem`,sm:{gridTemplateColumns:`8rem minmax(0, 1fr)`,gap:`0.75rem`}}),definitionLabel:a({fontSize:`0.75rem`,fontWeight:`500`,color:`var(--foreground)`}),definitionValue:a({fontSize:`0.75rem`,lineHeight:`1.25rem`,color:`var(--muted-foreground)`}),explainerGrid:a({mt:`1.5rem`,display:`grid`,gap:`1rem`,lg:{gridTemplateColumns:`minmax(0, 1.05fr) minmax(0, 0.95fr)`}}),methodology:a({mt:`1.5rem`,border:`1px solid var(--ink)`,bg:`var(--card)`,p:`1rem`}),methodologyHead:a({mb:`1rem`,display:`flex`,alignItems:`center`,gap:`0.5rem`}),twoGrid:a({display:`grid`,gap:`0.75rem`,lg:{gridTemplateColumns:`repeat(2, minmax(0, 1fr))`}}),section:a({mt:`1.5rem`,overflow:`hidden`,border:`1px solid var(--ink)`,bg:`var(--card)`}),sectionHeader:a({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,px:`1rem`,py:`0.75rem`}),sectionTitle:a({fontSize:`0.875rem`,fontWeight:`600`}),sectionSubtitle:a({mt:`0.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),inlineMuted:a({display:`flex`,alignItems:`center`,gap:`0.5rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),overflowX:a({overflowX:`auto`}),table:a({w:`100%`,minW:`1140px`,textAlign:`left`,fontSize:`0.875rem`}),thead:a({borderBottom:`1px solid var(--border)`,bg:`color-mix(in srgb, var(--muted) 60%, transparent)`,fontSize:`0.75rem`,textTransform:`uppercase`,color:`var(--muted-foreground)`}),thRank:a({w:`4rem`,px:`1rem`,py:`0.75rem`}),th:a({px:`1rem`,py:`0.75rem`}),tbody:a({"& > * + *":{borderTop:`1px solid var(--border)`}}),emptyCell:a({px:`1rem`,py:`3rem`,textAlign:`center`,fontSize:`0.875rem`,color:`var(--muted-foreground)`}),tableRow:a({verticalAlign:`top`,_hover:{bg:`color-mix(in srgb, var(--accent) 50%, transparent)`}}),tdRank:a({px:`1rem`,py:`1rem`,fontSize:`1.125rem`,fontWeight:`600`,fontVariantNumeric:`tabular-nums`}),td:a({px:`1rem`,py:`1rem`}),modelCell:a({maxW:`18rem`,px:`1rem`,py:`1rem`}),fontMedium:a({fontWeight:`500`}),smallMuted:a({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),tinyMuted:a({fontSize:`11px`,color:`var(--muted-foreground)`}),scoreRow:a({display:`flex`,alignItems:`center`,gap:`0.75rem`}),scoreNumber:a({w:`5rem`,fontSize:`1.125rem`,fontWeight:`600`,fontVariantNumeric:`tabular-nums`}),barTrack:a({h:`0.5rem`,w:`7rem`,overflow:`hidden`,borderRadius:`0.125rem`,bg:`var(--muted)`}),prosperFill:a({h:`100%`,bg:`linear-gradient(90deg, #1e9b50, #0ea5e9, #f59e0b)`}),outcomeScore:a({fontSize:`1.125rem`,fontWeight:`600`,fontVariantNumeric:`tabular-nums`}),wrapGap1:a({display:`flex`,flexWrap:`wrap`,gap:`0.25rem`}),stageCount:a({borderRadius:`0.375rem`,bg:`var(--muted)`,px:`0.5rem`,py:`0.25rem`,fontSize:`11px`}),tabular:a({fontVariantNumeric:`tabular-nums`}),belowGrid:a({mt:`1.5rem`,display:`grid`,gap:`1.5rem`,lg:{gridTemplateColumns:`minmax(0, 1fr) minmax(0, 0.85fr)`}}),cardSection:a({border:`1px solid var(--ink)`,bg:`var(--card)`,p:`1rem`}),cardSectionHead:a({mb:`1rem`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`}),paragraph:a({mb:`1rem`,fontSize:`0.75rem`,lineHeight:`1.25rem`,color:`var(--muted-foreground)`}),stack3:a({"& > * + *":{mt:`0.75rem`}}),dimensionCard:a({borderRadius:`0.375rem`,border:`1px solid var(--border)`,p:`0.75rem`}),dimensionHead:a({mb:`0.75rem`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`}),dimensionGrid:a({display:`grid`,gap:`0.5rem`,sm:{gridTemplateColumns:`repeat(2, minmax(0, 1fr))`}}),dimensionRow:a({display:`grid`,gridTemplateColumns:`4.5rem minmax(0, 1fr) 2.5rem`,alignItems:`center`,gap:`0.5rem`}),progressTrack:a({h:`0.5rem`,overflow:`hidden`,borderRadius:`0.125rem`,bg:`var(--muted)`}),progressFill:a({h:`100%`,bg:`var(--primary)`}),rightTiny:a({textAlign:`right`,fontSize:`11px`,fontVariantNumeric:`tabular-nums`}),empty:a({py:`2rem`,textAlign:`center`,fontSize:`0.875rem`,color:`var(--muted-foreground)`}),divideText:a({fontSize:`0.875rem`,"& > * + *":{borderTop:`1px solid var(--border)`}}),replayStep:a({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,py:`0.75rem`}),statusPill:a({borderRadius:`0.375rem`,border:`1px solid var(--border)`,px:`0.5rem`,py:`0.25rem`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),replayList:a({"& > * + *":{borderTop:`1px solid var(--border)`}}),replayCase:a({display:`grid`,gap:`0.75rem`,px:`1rem`,py:`0.75rem`,lg:{gridTemplateColumns:`10rem minmax(0, 1fr) 12rem`}}),replayLeft:a({display:`flex`,flexWrap:`wrap`,alignItems:`flex-start`,gap:`0.5rem`}),lineClamp2:a({mt:`0.25rem`,overflow:`hidden`,fontSize:`0.75rem`,lineHeight:`1.25rem`,color:`var(--muted-foreground)`,lineClamp:2}),twoColNums:a({display:`grid`,gridTemplateColumns:`repeat(2, minmax(0, 1fr))`,gap:`0.5rem`,fontSize:`0.75rem`,fontVariantNumeric:`tabular-nums`}),statBox:a({borderRadius:`0.375rem`,bg:`var(--muted)`,p:`0.5rem`}),mt1FontMedium:a({mt:`0.25rem`,fontWeight:`500`}),centerContent:a({display:`flex`,minH:`16rem`,alignItems:`center`,justifyContent:`center`,fontSize:`0.875rem`,color:`var(--ink-soft)`})};function N(e){let t=e.content;return typeof t==`string`?t:Array.isArray(t)?t.filter(e=>e?.type===`text`&&typeof e.text==`string`).map(e=>e.text).join(`
|
|
2
|
+
`):``}function P(e){return{provider:e?.provider??`unknown`,id:e?.id??`unlabeled-model`,name:e?.name??e?.id??`Unlabeled model`,api:`api`in(e??{})?e.api:void 0,baseUrl:`baseUrl`in(e??{})?e.baseUrl:void 0}}async function F(){await s();let e=await r.getAllMetadata(),t=await Promise.all(e.map(async e=>{let t=await r.loadSession(e.id);return t?{id:t.id,title:t.title,source:`local`,createdAt:t.createdAt,model:P(t.model),messages:t.messages}:null})),n=ne().map(e=>({id:e.id,title:e.title,source:`shared`,createdAt:e.sharedAt,model:e.model,messages:e.messages})),[i,a]=await Promise.all([c.getQuizResults().catch(()=>[]),c.getLearnerState().catch(()=>null)]);return{samples:[...n,...t.filter(e=>!!e)],quizRecords:i,feedbackEntries:a?.feedbackHistory??[]}}function I(){return(0,O.use)(s()),A||=F(),(0,O.use)(A)}function L(e){return`${e.provider}:${e.id}`}function R(e){return Math.max(0,Math.min(1,e))}function z(e){return e.trim().split(/\s+/).filter(Boolean).length}function B(e,t){return t.some(t=>t.test(e))}function V(e,t){let n=e.toLowerCase();return t===`confused`?`confusion-recovery`:t===`thumbs-down`||B(n,[/\bwrong\b/,/\bincorrect\b/,/\bnot true\b/,/\bthat's not\b/])?`correction`:B(n,[/\bapply\b/,/\btransfer\b/,/\bnew example\b/,/\bscenario\b/,/\bquiz\b/,/\btest me\b/])?`transfer`:B(n,[/\bremember\b/,/\breview\b/,/\bdue\b/,/\bagain\b/,/\bretention\b/])?`retention`:`diagnosis`}function H(e,t,n,r){let i=n.toLowerCase(),a=t.toLowerCase(),o=R(z(n)/120),s=B(i,[/\bdoes that make sense\b/,/\btry\b/,/\bwhat would\b/,/\bcan you\b/,/\btell me\b/,/\bcheck\b/])?1:.35,c=B(i,[/\bexample\b/,/\bfor instance\b/,/\bbecause\b/,/\bstep\b/,/\bfirst\b/,/\btherefore\b/])?1:.45,l=e===`confusion-recovery`?B(i,[/\bconfus/,/\bstuck\b/,/\bslow\b/,/\blet's unpack\b/,/\bstart over\b/])?1:.35:e===`correction`?B(i,[/\byou're right\b/,/\bcorrection\b/,/\bfix\b/,/\bmistake\b/,/\bmore precise\b/])?1:.35:B(i,[/\byou\b/,/\byour\b/,/\bfrom what\b/,/\blooks like\b/])?.85:.45,u=B(i,[/\bapply\b/,/\bnew case\b/,/\banother example\b/,/\bpractice\b/,/\bquiz\b/,/\brecall\b/])?1:.35,d=a.length>0&&B(i,a.split(/\W+/).filter(e=>e.length>5).slice(0,8).map(e=>RegExp(`\\b${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}\\b`,`i`)))?1:.55;return{performance:r,robustness:R((c+s+o)/3),outcomeLift:R(r*.75+(e===`confusion-recovery`||e===`correction`?l*.25:u*.15)),sparseCaution:0,personalization:R((l+d)/2),evidenceQuality:R((c+o)/2),retentionTransfer:e===`transfer`||e===`retention`?u:R(u*.65+s*.35)}}function U(e){return e.length===0?{performance:0,robustness:0,outcomeLift:0,sparseCaution:0,personalization:0,evidenceQuality:0,retentionTransfer:0}:e.reduce((t,n)=>({performance:t.performance+n.performance/e.length,robustness:t.robustness+n.robustness/e.length,outcomeLift:t.outcomeLift+n.outcomeLift/e.length,sparseCaution:t.sparseCaution+n.sparseCaution/e.length,personalization:t.personalization+n.personalization/e.length,evidenceQuality:t.evidenceQuality+n.evidenceQuality/e.length,retentionTransfer:t.retentionTransfer+n.retentionTransfer/e.length}),{performance:0,robustness:0,outcomeLift:0,sparseCaution:0,personalization:0,evidenceQuality:0,retentionTransfer:0})}function W(e){return(e.performance*.2+e.robustness*.14+e.outcomeLift*.18+e.sparseCaution*.14+e.personalization*.12+e.evidenceQuality*.1+e.retentionTransfer*.12)*100}function G(e){return e>=j.stable?`stable`:e>=j.rankable?`rankable`:e>=j.provisional?`provisional`:e>=j.sparse?`sparse`:`waiting`}function K(e,t){let n=L(t),r=[];for(let t=0;t<e.messages.length;t+=1){let i=e.messages[t],a=i.role;if(a!==`user`&&a!==`user-with-attachments`)continue;let s=N(i),c=o(s,e.title);if(!c)continue;let u=[...e.messages.slice(0,t)].reverse().find(e=>e.role===`assistant`),d=e.messages.slice(t+1).find(e=>e.role===`assistant`),f=V(s,c.signal),p=l(c.signal),m=H(f,s,N(d??u??i),p);r.push({id:`${e.id}:${t}`,sessionId:e.id,sessionTitle:e.title,source:e.source,modelKey:n,stage:f,signal:c.signal,learnerText:s,beforeAssistantText:N(u??i).slice(0,420),afterAssistantText:N(d??i).slice(0,420),outcomeScore:p,prosper:m})}return r}function q(e,t,n=[],r=[]){let i=t===`all`?e:e.filter(e=>e.source===t),a=new Map;for(let e of i){let t=P(e.model),n=L(t),r=a.get(n)??{key:n,name:t.name??t.id,provider:t.provider,score:0,prosperScore:0,prosper:U([]),confidence:0,sessions:0,sharedSessions:0,localSessions:0,signals:0,turns:0,tokens:0,cost:0,latestAt:e.createdAt,readiness:`waiting`,outcomes:[],replayCases:[],quizCount:0,quizAverage:null,explicitSignals:0};r.sessions+=1,r.sharedSessions+=+(e.source===`shared`),r.localSessions+=+(e.source===`local`),r.latestAt=r.latestAt.localeCompare(e.createdAt)>0?r.latestAt:e.createdAt;let i=d(e.messages);r.tokens+=i.totalTokens||i.input+i.output,r.cost+=i.cost.total,r.turns+=e.messages.filter(e=>{let t=e.role;return t===`user`||t===`user-with-attachments`}).length;let o=K(e,t);r.replayCases.push(...o),r.outcomes.push(...o.map(e=>({signal:e.signal,score:e.outcomeScore,source:`inferred-turn`,stage:e.stage,prosper:e.prosper}))),a.set(n,r)}let o=new Map(i.map(e=>[e.id,a.get(L(P(e.model)))]));for(let e of n){if(!(e.totalQuestions>0)||!e.sessionId)continue;let t=o.get(e.sessionId);if(!t)continue;let n=R(e.score/e.totalQuestions);t.quizCount+=1,t.outcomes.push({score:n,signal:n>=.75?`thumbs-up`:n<.4?`thumbs-down`:`confused`,source:`quiz`,stage:`retention`,prosper:{performance:n,robustness:.5,outcomeLift:n,sparseCaution:0,personalization:.4,evidenceQuality:1,retentionTransfer:n}})}for(let e of r){if(e.source===`turn-analysis`||!e.sessionId)continue;let t=o.get(e.sessionId);if(!t)continue;let n=l(e.signal);t.explicitSignals+=1,t.outcomes.push({score:n,signal:e.signal,source:`explicit-feedback`,stage:V(e.evidence??``,e.signal),prosper:{performance:n,robustness:.5,outcomeLift:n,sparseCaution:0,personalization:.5,evidenceQuality:.8,retentionTransfer:.4}})}return[...a.values()].map(e=>{let t=e.outcomes.length?e.outcomes.reduce((e,t)=>e+t.score,0)/e.outcomes.length:0,n=Math.min(1,e.outcomes.length/20),r=G(e.outcomes.length),i=U(e.outcomes.map(e=>e.prosper)),a=r===`waiting`?0:r===`sparse`?.45:r===`provisional`?.7:r===`rankable`?.9:1,o={...i,sparseCaution:a},s=e.outcomes.filter(e=>e.source===`quiz`).map(e=>e.score);return{...e,quizAverage:s.length>0?s.reduce((e,t)=>e+t,0)/s.length:null,score:t*100,prosper:o,prosperScore:W(o),confidence:n,signals:e.outcomes.length,readiness:r}}).sort((e,t)=>{let n=e.prosperScore*(.72+e.confidence*.28);return t.prosperScore*(.72+t.confidence*.28)-n||t.signals-e.signals||t.sessions-e.sessions})}function J(e){return new Intl.NumberFormat().format(Math.round(e))}function Y(e){return e>0?`$${e.toFixed(e<1?4:2)}`:`$0`}function X(e){return e?new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`}):`No date`}function Z(e){return`${Math.round(e*100)}%`}function re({value:e,onChange:t}){return(0,k.jsx)(`div`,{className:M.sourceTabs,children:[{value:`shared`,label:`Shared`,compactLabel:`Shared`,accessibleLabel:`Shared sessions`},{value:`all`,label:`All local`,compactLabel:`All`,accessibleLabel:`Shared and private sessions`},{value:`local`,label:`Private`,compactLabel:`Local`,accessibleLabel:`Private local sessions`}].map(n=>(0,k.jsxs)(`button`,{type:`button`,"aria-label":n.accessibleLabel,className:i(M.sourceButton,e===n.value?M.sourceActive:M.sourceInactive),onClick:()=>t(n.value),children:[(0,k.jsx)(`span`,{className:M.sourceCompactLabel,children:n.compactLabel}),(0,k.jsx)(`span`,{className:M.sourceWideLabel,children:n.label})]},n.value))})}function ie({readiness:e}){let t=e===`stable`?`Stable`:e===`rankable`?`Rankable`:e===`provisional`?`Provisional`:e===`sparse`?`Sparse`:`Waiting`,n=e===`stable`||e===`rankable`?M.readinessGood:e===`provisional`?M.readinessProvisional:e===`sparse`?M.readinessSparse:M.readinessWaiting;return(0,k.jsx)(`span`,{className:i(M.readinessBase,n),children:t})}function ae(e,t){return t===`all`?e:e.filter(e=>e.source===t)}function oe(e,t){return ae(e,t).flatMap(e=>K(e,P(e.model)))}function se({stage:e}){return(0,k.jsx)(`span`,{className:M.pill,children:e})}function Q({icon:e,title:t,children:n}){return(0,k.jsxs)(`div`,{className:M.block,children:[(0,k.jsxs)(`div`,{className:M.blockHead,children:[(0,k.jsx)(`span`,{className:M.mutedIcon,children:e}),(0,k.jsx)(`h3`,{className:M.blockTitle,children:t})]}),(0,k.jsx)(`div`,{className:M.bodyText,children:n})]})}function $({label:e,value:t}){return(0,k.jsxs)(`div`,{className:M.definitionRow,children:[(0,k.jsx)(`div`,{className:M.definitionLabel,children:e}),(0,k.jsx)(`div`,{className:M.definitionValue,children:t})]})}function ce(){return(0,k.jsxs)(`section`,{className:M.explainerGrid,children:[(0,k.jsxs)(Q,{icon:(0,k.jsx)(h,{size:18}),title:`What KeatingBench Tests`,children:[(0,k.jsx)(`p`,{children:`KeatingBench evaluates teaching models by learner outcomes, not by generic chat preference. It looks for moments where a learner signals understanding, confusion, correction, transfer, review need, or dissatisfaction during a teaching session.`}),(0,k.jsx)(`p`,{children:`The current page uses shared sessions cached in this browser plus private local sessions when selected. Shared sessions are the intended benchmark corpus because they preserve real learner interaction patterns.`})]}),(0,k.jsxs)(Q,{icon:(0,k.jsx)(D,{size:18}),title:`How The Score Works`,children:[(0,k.jsx)(`p`,{children:`The headline rank is the PROSPER score. Raw learner outcome is shown separately so a model cannot win only by making learners sound happy while ignoring robustness, transfer, or evidence quality.`}),(0,k.jsx)(`p`,{children:`The ranking adjusts for confidence. More replay cases increase trust in the score; sparse evidence remains visible but is marked as weak evidence.`})]}),(0,k.jsxs)(Q,{icon:(0,k.jsx)(ee,{size:18}),title:`Replay Case Bank`,children:[(0,k.jsx)(`p`,{children:`A replay case is a learner state extracted from a session turn. KeatingBench captures the learner text, nearby assistant context, inferred feedback signal, topic context, and the teaching stage.`}),(0,k.jsx)(`p`,{children:`These cases are the future cross-model harness: the same learner state can be replayed against multiple models, then judged on the same PROSPER dimensions.`})]}),(0,k.jsxs)(Q,{icon:(0,k.jsx)(_,{size:18}),title:`Current Limitations`,children:[(0,k.jsx)(`p`,{children:`Today this is deterministic scoring over observed session data. Provider replay execution is queued, so the page does not yet call every model on the same extracted learner states.`}),(0,k.jsx)(`p`,{children:`Inferred feedback is useful but imperfect. Explicit thumbs up / down / confused signals and graded quiz results are now folded into each model's score — quizzes are the strongest evidence because they measure observed retrieval, not sentiment.`})]})]})}function le(){return(0,k.jsxs)(`section`,{className:M.methodology,children:[(0,k.jsxs)(`div`,{className:M.methodologyHead,children:[(0,k.jsx)(g,{size:18,className:M.mutedIcon}),(0,k.jsx)(`h2`,{className:M.blockTitle,children:`Methodology`})]}),(0,k.jsxs)(`div`,{className:M.twoGrid,children:[(0,k.jsx)($,{label:`Outcome`,value:`A normalized learner signal. Thumbs up maps high, confused maps mid-low, thumbs down maps low. Inferred learner turns use the same score scale.`}),(0,k.jsx)($,{label:`Quiz evidence`,value:`Graded quiz results (objective auto-grading plus teacher-judged open answers) attributed to the model that taught the session. Scored as fraction correct; the highest-quality evidence in the vector.`}),(0,k.jsx)($,{label:`PROSPER`,value:`A multi-objective judgement over performance, robustness, outcome lift, sparse-data caution, personalization, evidence quality, and retention or transfer.`}),(0,k.jsx)($,{label:`Performance`,value:`How well the observed learner signal turned out for the model in that session context.`}),(0,k.jsx)($,{label:`Robustness`,value:`Whether the response appears concrete, checks understanding, and has enough instructional substance to handle similar learners.`}),(0,k.jsx)($,{label:`Outcome lift`,value:`Whether the model seems to move the learner state forward, especially after confusion or correction.`}),(0,k.jsx)($,{label:`Sparse caution`,value:`A gate that prevents tiny datasets from being treated as reliable model rankings.`}),(0,k.jsx)($,{label:`Personalization`,value:`Whether the response acknowledges the learner state instead of giving a generic explanation.`}),(0,k.jsx)($,{label:`Evidence quality`,value:`Whether the case has enough observable teaching behavior to support a judgement.`}),(0,k.jsx)($,{label:`Transfer`,value:`Whether the response pushes toward practice, application, recall, or a new case.`}),(0,k.jsx)($,{label:`Readiness`,value:`Waiting: under ${j.sparse}; sparse: ${j.sparse}+; provisional: ${j.provisional}+; rankable: ${j.rankable}+; stable: ${j.stable}+ signals.`})]})]})}function ue(){let e=u(),{samples:t,quizRecords:n,feedbackEntries:r}=I(),[o,s]=(0,O.useState)(`shared`),c=(0,O.useMemo)(()=>q(t,o,n,r),[t,o,n,r]),l=(0,O.useMemo)(()=>oe(t,o),[t,o]),d=(0,O.useMemo)(()=>c.reduce((e,t)=>(e.signals+=t.signals,e.sessions+=t.sessions,e.models+=1,e.ready+=+(t.readiness===`rankable`||t.readiness===`stable`),e.quizzes+=t.quizCount,e.explicit+=t.explicitSignals,e),{signals:0,sessions:0,models:0,ready:0,quizzes:0,explicit:0}),[c]);return(0,O.useEffect)(()=>{e?.capture(`keatingbench_viewed`,{source:o,models:c.length,signals:d.signals,sessions:d.sessions})},[e,c.length,o,d.signals,d.sessions]),(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(x,{current:`bench`,context:`Learning intelligence // Benchmark`,title:`Model learning benchmark`,description:`Compare teaching models using learner outcomes, quiz evidence, feedback signals, and inspectable replay cases.`,actions:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(re,{value:o,onChange:s}),(0,k.jsxs)(`button`,{type:`button`,className:M.button,onClick:()=>{v(`keatingbench-leaderboard.json`,JSON.stringify({exportedAt:new Date().toISOString(),source:o,minSignalsForPolicyEvolution:5,readinessThresholds:j,models:c},null,2)),e?.capture(`keatingbench_exported`,{source:o,models:c.length,signals:d.signals})},children:[(0,k.jsx)(te,{size:16}),`Export results`]})]})}),(0,k.jsxs)(`main`,{className:M.main,children:[(0,k.jsxs)(`div`,{className:M.metricGrid,children:[(0,k.jsx)(b,{icon:(0,k.jsx)(T,{size:18}),label:`Sessions`,value:J(d.sessions),detail:`${J(t.filter(e=>e.source===`shared`).length)} shared cached`}),(0,k.jsx)(b,{icon:(0,k.jsx)(S,{size:18}),label:`Models`,value:J(d.models),detail:`${J(d.ready)} ready for ranking`}),(0,k.jsx)(b,{icon:(0,k.jsx)(m,{size:18}),label:`Feedback signals`,value:J(d.signals),detail:`${J(d.explicit)} explicit | ${j.rankable} for ranked status`}),(0,k.jsx)(b,{icon:(0,k.jsx)(h,{size:18}),label:`Graded quizzes`,value:J(d.quizzes),detail:`Strongest evidence: observed retrieval performance`})]}),(0,k.jsx)(ce,{}),(0,k.jsxs)(`section`,{className:M.section,children:[(0,k.jsxs)(`div`,{className:M.sectionHeader,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h2`,{className:M.sectionTitle,children:`Leaderboard`}),(0,k.jsx)(`p`,{className:M.sectionSubtitle,children:`PROSPER is the rank score; outcome is the direct learner signal score.`})]}),(0,k.jsxs)(`div`,{className:M.inlineMuted,children:[(0,k.jsx)(D,{size:15}),(0,k.jsx)(`span`,{children:o===`shared`?`Shared session data`:o===`local`?`Private session data`:`Shared plus private data`})]})]}),(0,k.jsx)(`div`,{className:M.overflowX,children:(0,k.jsxs)(`table`,{className:M.table,children:[(0,k.jsx)(`thead`,{className:M.thead,children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{className:M.thRank,children:`Rank`}),(0,k.jsx)(`th`,{className:M.th,children:`Model`}),(0,k.jsx)(`th`,{className:M.th,children:`PROSPER`}),(0,k.jsx)(`th`,{className:M.th,children:`Outcome`}),(0,k.jsx)(`th`,{className:M.th,children:`Quiz avg`}),(0,k.jsx)(`th`,{className:M.th,children:`Replay mix`}),(0,k.jsx)(`th`,{className:M.th,children:`Signals`}),(0,k.jsx)(`th`,{className:M.th,children:`Sessions`}),(0,k.jsx)(`th`,{className:M.th,children:`Tokens`}),(0,k.jsx)(`th`,{className:M.th,children:`Cost`}),(0,k.jsx)(`th`,{className:M.th,children:`Status`})]})}),(0,k.jsx)(`tbody`,{className:M.tbody,children:c.length===0?(0,k.jsx)(`tr`,{children:(0,k.jsx)(`td`,{colSpan:11,className:M.emptyCell,children:`No benchmarkable sessions in this view.`})}):c.map((e,t)=>(0,k.jsxs)(`tr`,{className:M.tableRow,children:[(0,k.jsx)(`td`,{className:M.tdRank,children:t+1}),(0,k.jsxs)(`td`,{className:M.modelCell,children:[(0,k.jsx)(`div`,{className:i(M.truncate,M.fontMedium),children:e.name}),(0,k.jsxs)(`div`,{className:i(M.smallMuted,M.truncate,a({mt:`0.25rem`})),children:[e.provider,` | `,e.key.split(`:`).slice(1).join(`:`)]})]}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsxs)(`div`,{className:M.scoreRow,children:[(0,k.jsx)(`div`,{className:M.scoreNumber,children:e.prosperScore.toFixed(1)}),(0,k.jsx)(`div`,{className:M.barTrack,children:(0,k.jsx)(`div`,{className:M.prosperFill,style:{width:`${Math.max(2,Math.min(100,e.prosperScore))}%`}})})]}),(0,k.jsxs)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:[`Evidence `,Math.round(e.confidence*100),`%`]})]}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsx)(`div`,{className:M.outcomeScore,children:e.score.toFixed(1)}),(0,k.jsx)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:`Learner outcome`})]}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsx)(`div`,{className:M.outcomeScore,children:e.quizAverage===null?`—`:`${Math.round(e.quizAverage*100)}%`}),(0,k.jsx)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:e.quizCount>0?`${J(e.quizCount)} graded`:`No quizzes yet`})]}),(0,k.jsx)(`td`,{className:M.td,children:(0,k.jsx)(`div`,{className:M.wrapGap1,children:[`confusion-recovery`,`correction`,`transfer`,`retention`].map(t=>{let n=e.outcomes.filter(e=>e.stage===t).length;return n>0?(0,k.jsxs)(`span`,{className:M.stageCount,children:[t,`: `,n]},t):null})})}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsx)(`div`,{className:M.tabular,children:J(e.signals)}),(0,k.jsxs)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:[J(e.explicitSignals),` explicit | `,J(e.quizCount),` quiz`]})]}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsx)(`div`,{className:M.tabular,children:J(e.sessions)}),(0,k.jsxs)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:[J(e.sharedSessions),` shared | `,J(e.localSessions),` private`]})]}),(0,k.jsx)(`td`,{className:i(M.td,M.tabular),children:J(e.tokens)}),(0,k.jsx)(`td`,{className:i(M.td,M.tabular),children:Y(e.cost)}),(0,k.jsxs)(`td`,{className:M.td,children:[(0,k.jsx)(ie,{readiness:e.readiness}),(0,k.jsxs)(`div`,{className:i(M.smallMuted,a({mt:`0.5rem`})),children:[`Latest `,X(e.latestAt)]})]})]},e.key))})]})})]}),(0,k.jsxs)(`div`,{className:M.belowGrid,children:[(0,k.jsxs)(`section`,{className:M.cardSection,children:[(0,k.jsxs)(`div`,{className:M.cardSectionHead,children:[(0,k.jsx)(`h2`,{className:M.sectionTitle,children:`PROSPER dimensions`}),(0,k.jsx)(C,{size:18,className:M.mutedIcon})]}),(0,k.jsx)(`p`,{className:M.paragraph,children:`Each bar shows one objective in the judgement vector. The final score is weighted across these objectives so narrow wins are less likely to outrank balanced teaching behavior.`}),(0,k.jsxs)(`div`,{className:M.stack3,children:[c.slice(0,5).map(e=>(0,k.jsxs)(`div`,{className:M.dimensionCard,children:[(0,k.jsxs)(`div`,{className:M.dimensionHead,children:[(0,k.jsx)(`div`,{className:i(M.truncate,a({fontSize:`0.875rem`,fontWeight:`500`})),children:e.name}),(0,k.jsx)(`div`,{className:i(M.smallMuted,M.tabular),children:e.prosperScore.toFixed(1)})]}),(0,k.jsx)(`div`,{className:M.dimensionGrid,children:[[`Perf`,e.prosper.performance],[`Robust`,e.prosper.robustness],[`Lift`,e.prosper.outcomeLift],[`Sparse`,e.prosper.sparseCaution],[`Personal`,e.prosper.personalization],[`Evidence`,e.prosper.evidenceQuality],[`Transfer`,e.prosper.retentionTransfer]].map(([e,t])=>(0,k.jsxs)(`div`,{className:M.dimensionRow,children:[(0,k.jsx)(`div`,{className:M.tinyMuted,children:e}),(0,k.jsx)(`div`,{className:M.progressTrack,children:(0,k.jsx)(`div`,{className:M.progressFill,style:{width:Z(t)}})}),(0,k.jsx)(`div`,{className:M.rightTiny,children:Z(t)})]},e))})]},e.key)),c.length===0&&(0,k.jsx)(`div`,{className:M.empty,children:`No PROSPER dimensions yet`})]})]}),(0,k.jsxs)(`section`,{className:M.cardSection,children:[(0,k.jsxs)(`div`,{className:M.cardSectionHead,children:[(0,k.jsx)(`h2`,{className:M.sectionTitle,children:`Cross-model replay`}),(0,k.jsx)(w,{size:18,className:M.mutedIcon})]}),(0,k.jsx)(`p`,{className:M.paragraph,children:`Replay turns human session data into reusable benchmark states. The live steps score observed sessions; the queued provider step will send matched learner states to different models.`}),(0,k.jsx)(`div`,{className:M.divideText,children:[{item:`shared-session ingestion`,detail:`${J(l.length)} replay states extracted`,status:`live`},{item:`deterministic replay scoring`,detail:`PROSPER vector runs over observed learner states`,status:`live`},{item:`provider replay execution`,detail:`same state prompts can be sent to each model next`,status:`queued`}].map(({item:e,detail:t,status:n})=>(0,k.jsxs)(`div`,{className:M.replayStep,children:[(0,k.jsxs)(`div`,{className:M.min0,children:[(0,k.jsx)(`div`,{className:i(M.truncate,M.fontMedium),children:e}),(0,k.jsx)(`div`,{className:i(M.smallMuted,a({mt:`0.25rem`})),children:t})]}),(0,k.jsx)(`span`,{className:M.statusPill,children:n})]},e))})]})]}),(0,k.jsxs)(`section`,{className:M.section,children:[(0,k.jsxs)(`div`,{className:M.sectionHeader,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h2`,{className:M.sectionTitle,children:`Replay case bank`}),(0,k.jsx)(`p`,{className:M.sectionSubtitle,children:`Inspectable learner states used to build the model judgement.`})]}),(0,k.jsx)(E,{size:18,className:M.mutedIcon})]}),(0,k.jsxs)(`div`,{className:M.replayList,children:[l.slice(0,8).map(e=>(0,k.jsxs)(`div`,{className:M.replayCase,children:[(0,k.jsxs)(`div`,{className:M.replayLeft,children:[(0,k.jsx)(se,{stage:e.stage}),(0,k.jsx)(`span`,{className:M.pill,children:e.signal})]}),(0,k.jsxs)(`div`,{className:M.min0,children:[(0,k.jsx)(`div`,{className:i(M.truncate,a({fontSize:`0.875rem`,fontWeight:`500`})),children:e.sessionTitle}),(0,k.jsx)(`p`,{className:M.lineClamp2,children:e.learnerText})]}),(0,k.jsxs)(`div`,{className:M.twoColNums,children:[(0,k.jsxs)(`div`,{className:M.statBox,children:[(0,k.jsx)(`div`,{className:M.mutedIcon,children:`Outcome`}),(0,k.jsxs)(`div`,{className:M.mt1FontMedium,children:[Math.round(e.outcomeScore*100),`%`]})]}),(0,k.jsxs)(`div`,{className:M.statBox,children:[(0,k.jsx)(`div`,{className:M.mutedIcon,children:`PROSPER`}),(0,k.jsx)(`div`,{className:M.mt1FontMedium,children:W(e.prosper).toFixed(1)})]})]})]},e.id)),l.length===0&&(0,k.jsx)(`div`,{className:M.empty,children:`No replay cases yet`})]})]}),(0,k.jsx)(le,{})]})]})}function de(){return y({title:`KeatingBench | Model Learning Leaderboard`,description:`Rank teaching models by shared learner-session outcomes and feedback signals.`,canonical:`https://keating.help/bench`}),(0,k.jsxs)(`div`,{className:i(`retro-layout`,`retro-page`,M.page),children:[(0,k.jsx)(n,{}),(0,k.jsx)(O.Suspense,{fallback:(0,k.jsx)(`div`,{className:M.centerContent,children:`Loading KeatingBench...`}),children:(0,k.jsx)(ue,{})})]})}export{de as KeatingBench};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ct as e,M as t,N as n,wt as r}from"./index-
|
|
1
|
+
import{Ct as e,M as t,N as n,wt as r}from"./index-DCgpDQKf.js";var i=r(),a={header:n({mx:`auto`,mt:`1.5rem`,maxW:`72rem`,px:`1rem`}),frame:n({overflow:`hidden`,border:`2px solid var(--ink)`,bg:`var(--card)`,boxShadow:`4px 4px 0 color-mix(in srgb, var(--ink) 18%, transparent)`}),headingRow:n({display:`flex`,flexDir:`column`,gap:`1rem`,px:`1rem`,py:`1rem`,md:{flexDir:`row`,alignItems:`flex-end`,justifyContent:`space-between`,px:`1.25rem`,py:`1.25rem`}}),heading:n({minW:0}),context:n({mb:`0.25rem`,fontFamily:`var(--mono-body)`,fontSize:`0.75rem`,color:`var(--accent-dim)`}),title:n({fontFamily:`var(--mono-display)`,fontSize:`1.75rem`,fontWeight:700,lineHeight:1.15,letterSpacing:`-0.02em`,md:{fontSize:`2rem`}}),description:n({mt:`0.5rem`,maxW:`64ch`,fontSize:`0.875rem`,lineHeight:`1.375rem`,color:`var(--ink-soft)`}),actions:n({display:`flex`,w:`100%`,flexShrink:0,flexWrap:`wrap`,alignItems:`center`,gap:`0.5rem`,md:{w:`auto`,justifyContent:`flex-end`}}),switcher:n({display:`grid`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,borderTop:`1px solid var(--ink)`,bg:`color-mix(in srgb, var(--paper) 76%, var(--card))`}),switchLink:n({display:`flex`,minH:`2.75rem`,alignItems:`center`,justifyContent:`center`,borderRight:`1px solid var(--ink)`,px:`1rem`,fontFamily:`var(--mono-body)`,fontSize:`0.8125rem`,fontWeight:650,textDecoration:`none`,transitionProperty:`background-color, color`,transitionDuration:`150ms`,_last:{borderRight:0},_hover:{bg:`var(--accent)`,color:`var(--accent-foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-3px`}}),switchActive:n({bg:`var(--ink)`,color:`var(--paper)`}),switchInactive:n({color:`var(--ink)`}),metric:n({minW:0,border:`1px solid var(--ink)`,bg:`var(--card)`,p:`1rem`,boxShadow:`3px 3px 0 color-mix(in srgb, var(--ink) 14%, transparent)`}),metricHead:n({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,fontSize:`0.75rem`,color:`var(--ink-soft)`}),metricLabel:n({minW:0,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`}),metricIcon:n({flexShrink:0,color:`var(--accent-dim)`}),metricValue:n({mt:`0.625rem`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`var(--mono-display)`,fontSize:`1.5rem`,fontWeight:700,fontVariantNumeric:`tabular-nums`}),metricDetail:n({mt:`0.25rem`,minW:0,overflowWrap:`break-word`,fontSize:`0.75rem`,lineHeight:`1.125rem`,color:`var(--ink-soft)`})};function o({current:n,context:r,title:o,description:s,actions:c}){return(0,i.jsx)(`header`,{className:a.header,children:(0,i.jsxs)(`div`,{className:a.frame,children:[(0,i.jsxs)(`div`,{className:a.headingRow,children:[(0,i.jsxs)(`div`,{className:a.heading,children:[(0,i.jsx)(`p`,{className:a.context,children:r}),(0,i.jsx)(`h1`,{className:a.title,children:o}),(0,i.jsx)(`p`,{className:a.description,children:s})]}),c?(0,i.jsx)(`div`,{className:a.actions,children:c}):null]}),(0,i.jsxs)(`nav`,{className:a.switcher,"aria-label":`Learning intelligence`,children:[(0,i.jsx)(e,{to:`/usage`,"aria-current":n===`usage`?`page`:void 0,className:t(a.switchLink,n===`usage`?a.switchActive:a.switchInactive),children:`Learning activity`}),(0,i.jsx)(e,{to:`/coming-up`,"aria-current":n===`coming-up`?`page`:void 0,className:t(a.switchLink,n===`coming-up`?a.switchActive:a.switchInactive),children:`Coming up`}),(0,i.jsx)(e,{to:`/bench`,"aria-current":n===`bench`?`page`:void 0,className:t(a.switchLink,n===`bench`?a.switchActive:a.switchInactive),children:`Model benchmark`})]})]})})}function s({icon:e,label:t,value:n,detail:r}){return(0,i.jsxs)(`div`,{className:a.metric,children:[(0,i.jsxs)(`div`,{className:a.metricHead,children:[(0,i.jsx)(`span`,{className:a.metricLabel,children:t}),(0,i.jsx)(`span`,{className:a.metricIcon,children:e})]}),(0,i.jsx)(`div`,{className:a.metricValue,children:n}),(0,i.jsx)(`div`,{className:a.metricDetail,children:r})]})}export{s as n,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{A as n,_ as r,i,j as a,k as o,r as s,t as ee}from"./AssistantChatPanel-CPiSdBQo.js";import{t as c}from"./Nav-GcfPhZc3.js";import{Ct as l,Gn as u,H as d,M as f,N as p,Qn as m,Tn as h,Yn as g,wt as _}from"./index-C8C76R86.js";import{A as v,J as y,N as b,O as x,T as S,_ as C,b as w,g as T,k as E,y as D}from"./shared-renderer-C-yYfXvq.js";import{t as O}from"./arrow-left-DwKFZ0Rg.js";import{i as k}from"./HyperframesPlayer-BQFYx43N.js";import{t as A}from"./Select-BE2GfDud.js";import{t as j}from"./gpt-live-CEMTjMri.js";import{t as M}from"./useSeo-fXJau5mP.js";var N=e(t(),1),P=_();function F(){M({title:`Live with Keating`,description:`Talk to Keating out loud, and show it what you are working on.`});let{chatPanelRef:e,dialogs:t}=i(),[_,F]=(0,N.useState)(()=>T()),[L,R]=(0,N.useState)(null),[z,B]=(0,N.useState)(!1),[V,H]=(0,N.useState)(!1),U=(0,N.useMemo)(()=>x(_.providerId,_.model),[_.providerId,_.model]),W=(0,N.useMemo)(()=>v(_.providerId),[_.providerId]),G=s(_.providerId),K=(0,N.useMemo)(()=>D(_),[_]),q=S(_),J=_.providerId===`tavus`||_.providerId===`gpt-live`,Y=J&&g()&&!!m(),X=_.providerId===`gpt-live`?`GPT Live`:`Tavus Live`;(0,N.useEffect)(()=>{let e=!1,t=()=>{if(R(null),_.providerId===`tavus`||_.providerId===`gpt-live`){let e=(g()?m():null)?.getSession();R(!!e?.scope.split(/\s+/).includes(`realtime:connect`));return}if(!G){R(!1);return}h(G).then(t=>{e||R(!!t)}).catch(()=>{e||R(!1)})};return t(),window.addEventListener(`keating:api-key-prompt-changed`,t),window.addEventListener(`focus`,t),()=>{e=!0,window.removeEventListener(`keating:api-key-prompt-changed`,t),window.removeEventListener(`focus`,t)}},[G,_.providerId]);let Z=e=>{let t={...T(),...e};w(t),e.providerId&&R(null),F(t)},Q=()=>{C().catch(()=>{}),B(!0),window.dispatchEvent(new CustomEvent(`keating:start-live`))},$=_.providerId===`tavus`?`Tavus`:_.providerId===`gpt-live`?`Not Organic`:_.providerId===`openai-realtime`?`OpenAI`:`Google`,te=!W.some(e=>e.value===U.value);return(0,P.jsxs)(`div`,{className:p({minHeight:`100dvh`,backgroundColor:`var(--background)`,color:`var(--foreground)`}),children:[(0,P.jsx)(c,{}),(0,P.jsx)(`div`,{"aria-hidden":`true`,className:p({display:`none`}),children:(0,P.jsx)(ee,{ref:e})}),t,(0,P.jsxs)(`main`,{className:p({maxWidth:`34rem`,marginInline:`auto`,paddingInline:`1.25rem`,paddingTop:`3rem`,paddingBottom:`4rem`,display:`flex`,flexDirection:`column`,gap:`1.5rem`}),children:[(0,P.jsxs)(`div`,{className:p({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:`0.75rem`,textAlign:`center`}),children:[(0,P.jsx)(d,{variant:`body`,size:160,state:L===null?`thinking`:`waving`,label:``}),(0,P.jsx)(`h1`,{className:p({fontSize:`1.75rem`,fontWeight:700,lineHeight:1.15}),children:`Live with Keating`}),(0,P.jsx)(`p`,{className:p({color:`var(--muted-foreground)`,fontSize:`0.9375rem`,maxWidth:`26rem`}),children:`Talk out loud and get answers out loud. Depending on the live model, show Keating your work with a camera, a shared screen, or a still image.`})]}),L===!1?(0,P.jsxs)(`div`,{className:p({borderRadius:`0.875rem`,border:`1px solid color-mix(in srgb, var(--destructive) 40%, transparent)`,backgroundColor:`color-mix(in srgb, var(--destructive) 8%, var(--background))`,padding:`1rem 1.125rem`}),children:[(0,P.jsx)(`p`,{className:p({fontWeight:600,fontSize:`0.9375rem`}),children:J?Y?`Not Organic account needed`:`${X} is unavailable`:G?`${$} key needed`:`No live provider selected`}),(0,P.jsx)(`p`,{className:p({fontSize:`0.875rem`,color:`var(--muted-foreground)`,marginTop:`0.25rem`}),children:J?Y?`Connect your Not Organic account before starting ${X}. The call uses your device-bound live access.`:`This deployment has not enabled the Not Organic account service required by ${X}.`:G?`Live mode talks to ${$} straight from this browser, and there is no key stored for it yet.`:`The current speech provider only synthesizes speech; it cannot hold a conversation.`}),!J||Y?(0,P.jsxs)(`button`,{type:`button`,onClick:()=>{if(J){u(`/live`);return}window.dispatchEvent(new CustomEvent(`keating:open-settings`,{detail:{tab:G?`models`:`learning`}}))},className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,gap:`0.375rem`,marginTop:`0.75rem`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,paddingInline:`0.75rem`,paddingBlock:`0.4375rem`,fontSize:`0.8125rem`,cursor:`pointer`,_hover:{backgroundColor:`var(--accent)`,color:`var(--accent-foreground)`}})),children:[(0,P.jsx)(k,{size:14}),` `,J?`Connect Not Organic`:G?`Add a key`:`Choose a live model`]}):null]}):null,(0,P.jsxs)(`div`,{className:p({borderRadius:`0.875rem`,border:`1px solid var(--border)`,backgroundColor:`color-mix(in srgb, var(--foreground) 3%, var(--background))`,padding:`1rem 1.125rem`,display:`flex`,flexDirection:`column`,gap:`0.875rem`}),children:[(0,P.jsxs)(`label`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.375rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Provider`}),(0,P.jsxs)(A,{"aria-label":`Live provider`,value:_.providerId,onValueChange:e=>{if(!E(e))return;let t=e;Z({providerId:t,model:b(t)?.value??``,...t===`gpt-live`?{voiceName:`marin`,videoEnabled:!1}:{}})},className:p({width:`100%`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,backgroundColor:`var(--background)`,color:`var(--foreground)`,paddingInline:`0.625rem`,paddingBlock:`0.5rem`,fontSize:`0.875rem`}),children:[(0,P.jsx)(`option`,{value:`tavus`,children:`Tavus KeatingBot`}),(0,P.jsx)(`option`,{value:`gpt-live`,children:`GPT Live (Not Organic)`}),(0,P.jsx)(`option`,{value:`gemini-live`,children:`Gemini Live`}),(0,P.jsx)(`option`,{value:`openai-realtime`,children:`OpenAI Realtime`})]})]}),(0,P.jsxs)(`label`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.375rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Model`}),(0,P.jsxs)(A,{"aria-label":`Live model`,value:U.value,onValueChange:e=>Z({model:e}),className:p({width:`100%`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,backgroundColor:`var(--background)`,color:`var(--foreground)`,paddingInline:`0.625rem`,paddingBlock:`0.5rem`,fontSize:`0.875rem`}),children:[te?(0,P.jsx)(`option`,{value:U.value,children:U.label}):null,W.map(e=>(0,P.jsxs)(`option`,{value:e.value,children:[e.label,e.grade===`recommended`?` · recommended`:``]},e.value))]}),U.note?(0,P.jsx)(`span`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:U.note}):null,_.providerId===`gpt-live`?(0,P.jsxs)(`span`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:[`Session spending ceiling: $`,(j()/1e6).toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:6}),` USD. Live audio uses your Not Organic balance and requires your account's live consent.`]}):null]}),_.providerId===`gpt-live`?(0,P.jsx)(r,{onGrantedChange:H}):null,(0,P.jsxs)(`div`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.5rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Start with`}),(0,P.jsxs)(`div`,{className:p({display:`flex`,flexWrap:`wrap`,gap:`0.5rem`}),children:[(0,P.jsx)(I,{icon:(0,P.jsx)(y,{size:15}),label:`Voice`,active:!0,disabled:!0,hint:`Always on`}),q?(0,P.jsxs)(`span`,{className:p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,color:`var(--foreground)`,fontSize:`0.8125rem`}),children:[(0,P.jsx)(a,{size:15}),` Video PAL and Magic Canvas`]}):K.video?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(I,{icon:(0,P.jsx)(a,{size:15}),label:`Camera`,active:_.videoEnabled&&_.videoSource===`camera`,onClick:()=>Z(_.videoEnabled&&_.videoSource===`camera`?{videoEnabled:!1}:{videoEnabled:!0,videoSource:`camera`})}),(0,P.jsx)(I,{icon:(0,P.jsx)(o,{size:15}),label:`Screen`,active:_.videoEnabled&&_.videoSource===`screen`,onClick:()=>Z(_.videoEnabled&&_.videoSource===`screen`?{videoEnabled:!1}:{videoEnabled:!0,videoSource:`screen`})})]}):K.image?(0,P.jsxs)(`span`,{className:p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,color:`var(--foreground)`,fontSize:`0.8125rem`}),children:[(0,P.jsx)(n,{size:15}),` Add an image once the conversation starts`]}):null]}),(0,P.jsx)(`p`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:q?`The Tavus call requests camera and microphone access inside its own secure video surface. Interactive activities appear beside KeatingBot.`:K.video?`You can turn camera or screen sharing on or off at any point during the conversation.`:K.image?`This model accepts still images, but it does not receive live video.`:`This session uses audio only. Choose a provider with visual input to share images or video.`})]})]}),(0,P.jsxs)(`button`,{type:`button`,onClick:Q,disabled:z||L!==!0||_.providerId===`gpt-live`&&!V,className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,justifyContent:`center`,gap:`0.5rem`,width:`100%`,borderRadius:`9999px`,border:`1px solid var(--primary)`,backgroundColor:`var(--primary)`,color:`var(--primary-foreground)`,paddingBlock:`0.875rem`,fontSize:`1rem`,fontWeight:600,cursor:`pointer`,_disabled:{opacity:.5,cursor:`not-allowed`}})),children:[(0,P.jsx)(y,{size:18}),` `,z?`Connecting…`:`Start talking`]}),(0,P.jsxs)(l,{to:`/chat`,className:p({display:`inline-flex`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,fontSize:`0.8125rem`,color:`var(--muted-foreground)`,_hover:{color:`var(--foreground)`}}),children:[(0,P.jsx)(O,{size:14}),` Back to the conversation`]})]})]})}function I({icon:e,label:t,active:n,disabled:r,hint:i,onClick:a}){return(0,P.jsxs)(`button`,{type:`button`,onClick:a,disabled:r,"aria-pressed":n,title:i,className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,borderRadius:`9999px`,border:`1px solid`,borderColor:n?`var(--primary)`:`var(--border)`,backgroundColor:n?`color-mix(in srgb, var(--primary) 14%, transparent)`:`transparent`,color:n?`var(--foreground)`:`var(--muted-foreground)`,paddingInline:`0.875rem`,paddingBlock:`0.5rem`,fontSize:`0.8125rem`,cursor:`pointer`,_disabled:{opacity:.45,cursor:`not-allowed`}})),children:[e,` `,t]})}export{F as Live,F as default};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{A as n,_ as r,i,j as a,k as o,r as s,t as ee}from"./AssistantChatPanel-DQSKpGWP.js";import{t as c}from"./Nav-DQ-5KEsA.js";import{Ct as l,Gn as u,H as d,M as f,N as p,Qn as m,Tn as h,Yn as g,wt as _}from"./index-DCgpDQKf.js";import{A as v,J as y,N as b,O as x,T as S,_ as C,b as w,g as T,k as E,y as D}from"./shared-renderer-hMxAoPZb.js";import{t as O}from"./arrow-left-DwKFZ0Rg.js";import{i as k}from"./HyperframesPlayer-DEtdwGBR.js";import{t as A}from"./Select-BYfJxqbI.js";import{t as j}from"./gpt-live-C4ltEjG_.js";import{t as M}from"./useSeo-fXJau5mP.js";var N=e(t(),1),P=_();function F(){M({title:`Live with Keating`,description:`Talk to Keating out loud, and show it what you are working on.`});let{chatPanelRef:e,dialogs:t}=i(),[_,F]=(0,N.useState)(()=>T()),[L,R]=(0,N.useState)(null),[z,B]=(0,N.useState)(!1),[V,H]=(0,N.useState)(!1),U=(0,N.useMemo)(()=>x(_.providerId,_.model),[_.providerId,_.model]),W=(0,N.useMemo)(()=>v(_.providerId),[_.providerId]),G=s(_.providerId),K=(0,N.useMemo)(()=>D(_),[_]),q=S(_),J=_.providerId===`tavus`||_.providerId===`gpt-live`,Y=J&&g()&&!!m(),X=_.providerId===`gpt-live`?`GPT Live`:`Tavus Live`;(0,N.useEffect)(()=>{let e=!1,t=()=>{if(R(null),_.providerId===`tavus`||_.providerId===`gpt-live`){let e=(g()?m():null)?.getSession();R(!!e?.scope.split(/\s+/).includes(`realtime:connect`));return}if(!G){R(!1);return}h(G).then(t=>{e||R(!!t)}).catch(()=>{e||R(!1)})};return t(),window.addEventListener(`keating:api-key-prompt-changed`,t),window.addEventListener(`focus`,t),()=>{e=!0,window.removeEventListener(`keating:api-key-prompt-changed`,t),window.removeEventListener(`focus`,t)}},[G,_.providerId]);let Z=e=>{let t={...T(),...e};w(t),e.providerId&&R(null),F(t)},Q=()=>{C().catch(()=>{}),B(!0),window.dispatchEvent(new CustomEvent(`keating:start-live`))},$=_.providerId===`tavus`?`Tavus`:_.providerId===`gpt-live`?`Not Organic`:_.providerId===`openai-realtime`?`OpenAI`:`Google`,te=!W.some(e=>e.value===U.value);return(0,P.jsxs)(`div`,{className:p({minHeight:`100dvh`,backgroundColor:`var(--background)`,color:`var(--foreground)`}),children:[(0,P.jsx)(c,{}),(0,P.jsx)(`div`,{"aria-hidden":`true`,className:p({display:`none`}),children:(0,P.jsx)(ee,{ref:e})}),t,(0,P.jsxs)(`main`,{className:p({maxWidth:`34rem`,marginInline:`auto`,paddingInline:`1.25rem`,paddingTop:`3rem`,paddingBottom:`4rem`,display:`flex`,flexDirection:`column`,gap:`1.5rem`}),children:[(0,P.jsxs)(`div`,{className:p({display:`flex`,flexDirection:`column`,alignItems:`center`,gap:`0.75rem`,textAlign:`center`}),children:[(0,P.jsx)(d,{variant:`body`,size:160,state:L===null?`thinking`:`waving`,label:``}),(0,P.jsx)(`h1`,{className:p({fontSize:`1.75rem`,fontWeight:700,lineHeight:1.15}),children:`Live with Keating`}),(0,P.jsx)(`p`,{className:p({color:`var(--muted-foreground)`,fontSize:`0.9375rem`,maxWidth:`26rem`}),children:`Talk out loud and get answers out loud. Depending on the live model, show Keating your work with a camera, a shared screen, or a still image.`})]}),L===!1?(0,P.jsxs)(`div`,{className:p({borderRadius:`0.875rem`,border:`1px solid color-mix(in srgb, var(--destructive) 40%, transparent)`,backgroundColor:`color-mix(in srgb, var(--destructive) 8%, var(--background))`,padding:`1rem 1.125rem`}),children:[(0,P.jsx)(`p`,{className:p({fontWeight:600,fontSize:`0.9375rem`}),children:J?Y?`Not Organic account needed`:`${X} is unavailable`:G?`${$} key needed`:`No live provider selected`}),(0,P.jsx)(`p`,{className:p({fontSize:`0.875rem`,color:`var(--muted-foreground)`,marginTop:`0.25rem`}),children:J?Y?`Connect your Not Organic account before starting ${X}. The call uses your device-bound live access.`:`This deployment has not enabled the Not Organic account service required by ${X}.`:G?`Live mode talks to ${$} straight from this browser, and there is no key stored for it yet.`:`The current speech provider only synthesizes speech; it cannot hold a conversation.`}),!J||Y?(0,P.jsxs)(`button`,{type:`button`,onClick:()=>{if(J){u(`/live`);return}window.dispatchEvent(new CustomEvent(`keating:open-settings`,{detail:{tab:G?`models`:`learning`}}))},className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,gap:`0.375rem`,marginTop:`0.75rem`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,paddingInline:`0.75rem`,paddingBlock:`0.4375rem`,fontSize:`0.8125rem`,cursor:`pointer`,_hover:{backgroundColor:`var(--accent)`,color:`var(--accent-foreground)`}})),children:[(0,P.jsx)(k,{size:14}),` `,J?`Connect Not Organic`:G?`Add a key`:`Choose a live model`]}):null]}):null,(0,P.jsxs)(`div`,{className:p({borderRadius:`0.875rem`,border:`1px solid var(--border)`,backgroundColor:`color-mix(in srgb, var(--foreground) 3%, var(--background))`,padding:`1rem 1.125rem`,display:`flex`,flexDirection:`column`,gap:`0.875rem`}),children:[(0,P.jsxs)(`label`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.375rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Provider`}),(0,P.jsxs)(A,{"aria-label":`Live provider`,value:_.providerId,onValueChange:e=>{if(!E(e))return;let t=e;Z({providerId:t,model:b(t)?.value??``,...t===`gpt-live`?{voiceName:`marin`,videoEnabled:!1}:{}})},className:p({width:`100%`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,backgroundColor:`var(--background)`,color:`var(--foreground)`,paddingInline:`0.625rem`,paddingBlock:`0.5rem`,fontSize:`0.875rem`}),children:[(0,P.jsx)(`option`,{value:`tavus`,children:`Tavus KeatingBot`}),(0,P.jsx)(`option`,{value:`gpt-live`,children:`GPT Live (Not Organic)`}),(0,P.jsx)(`option`,{value:`gemini-live`,children:`Gemini Live`}),(0,P.jsx)(`option`,{value:`openai-realtime`,children:`OpenAI Realtime`})]})]}),(0,P.jsxs)(`label`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.375rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Model`}),(0,P.jsxs)(A,{"aria-label":`Live model`,value:U.value,onValueChange:e=>Z({model:e}),className:p({width:`100%`,borderRadius:`0.5rem`,border:`1px solid var(--border)`,backgroundColor:`var(--background)`,color:`var(--foreground)`,paddingInline:`0.625rem`,paddingBlock:`0.5rem`,fontSize:`0.875rem`}),children:[te?(0,P.jsx)(`option`,{value:U.value,children:U.label}):null,W.map(e=>(0,P.jsxs)(`option`,{value:e.value,children:[e.label,e.grade===`recommended`?` · recommended`:``]},e.value))]}),U.note?(0,P.jsx)(`span`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:U.note}):null,_.providerId===`gpt-live`?(0,P.jsxs)(`span`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:[`Session spending ceiling: $`,(j()/1e6).toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:6}),` USD. Live audio uses your Not Organic balance and requires your account's live consent.`]}):null]}),_.providerId===`gpt-live`?(0,P.jsx)(r,{onGrantedChange:H}):null,(0,P.jsxs)(`div`,{className:p({display:`flex`,flexDirection:`column`,gap:`0.5rem`}),children:[(0,P.jsx)(`span`,{className:p({fontSize:`0.8125rem`,fontWeight:600}),children:`Start with`}),(0,P.jsxs)(`div`,{className:p({display:`flex`,flexWrap:`wrap`,gap:`0.5rem`}),children:[(0,P.jsx)(I,{icon:(0,P.jsx)(y,{size:15}),label:`Voice`,active:!0,disabled:!0,hint:`Always on`}),q?(0,P.jsxs)(`span`,{className:p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,color:`var(--foreground)`,fontSize:`0.8125rem`}),children:[(0,P.jsx)(a,{size:15}),` Video PAL and Magic Canvas`]}):K.video?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(I,{icon:(0,P.jsx)(a,{size:15}),label:`Camera`,active:_.videoEnabled&&_.videoSource===`camera`,onClick:()=>Z(_.videoEnabled&&_.videoSource===`camera`?{videoEnabled:!1}:{videoEnabled:!0,videoSource:`camera`})}),(0,P.jsx)(I,{icon:(0,P.jsx)(o,{size:15}),label:`Screen`,active:_.videoEnabled&&_.videoSource===`screen`,onClick:()=>Z(_.videoEnabled&&_.videoSource===`screen`?{videoEnabled:!1}:{videoEnabled:!0,videoSource:`screen`})})]}):K.image?(0,P.jsxs)(`span`,{className:p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,color:`var(--foreground)`,fontSize:`0.8125rem`}),children:[(0,P.jsx)(n,{size:15}),` Add an image once the conversation starts`]}):null]}),(0,P.jsx)(`p`,{className:p({fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:q?`The Tavus call requests camera and microphone access inside its own secure video surface. Interactive activities appear beside KeatingBot.`:K.video?`You can turn camera or screen sharing on or off at any point during the conversation.`:K.image?`This model accepts still images, but it does not receive live video.`:`This session uses audio only. Choose a provider with visual input to share images or video.`})]})]}),(0,P.jsxs)(`button`,{type:`button`,onClick:Q,disabled:z||L!==!0||_.providerId===`gpt-live`&&!V,className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,justifyContent:`center`,gap:`0.5rem`,width:`100%`,borderRadius:`9999px`,border:`1px solid var(--primary)`,backgroundColor:`var(--primary)`,color:`var(--primary-foreground)`,paddingBlock:`0.875rem`,fontSize:`1rem`,fontWeight:600,cursor:`pointer`,_disabled:{opacity:.5,cursor:`not-allowed`}})),children:[(0,P.jsx)(y,{size:18}),` `,z?`Connecting…`:`Start talking`]}),(0,P.jsxs)(l,{to:`/chat`,className:p({display:`inline-flex`,alignItems:`center`,justifyContent:`center`,gap:`0.375rem`,fontSize:`0.8125rem`,color:`var(--muted-foreground)`,_hover:{color:`var(--foreground)`}}),children:[(0,P.jsx)(O,{size:14}),` Back to the conversation`]})]})]})}function I({icon:e,label:t,active:n,disabled:r,hint:i,onClick:a}){return(0,P.jsxs)(`button`,{type:`button`,onClick:a,disabled:r,"aria-pressed":n,title:i,className:f(`dialog-compact-button`,p({display:`inline-flex`,alignItems:`center`,gap:`0.4375rem`,borderRadius:`9999px`,border:`1px solid`,borderColor:n?`var(--primary)`:`var(--border)`,backgroundColor:n?`color-mix(in srgb, var(--primary) 14%, transparent)`:`transparent`,color:n?`var(--foreground)`:`var(--muted-foreground)`,paddingInline:`0.875rem`,paddingBlock:`0.5rem`,fontSize:`0.8125rem`,cursor:`pointer`,_disabled:{opacity:.45,cursor:`not-allowed`}})),children:[e,` `,t]})}export{F as Live,F as default};
|